nc-member.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. export default {
  2. data() {
  3. return {
  4. activeStyle: {
  5. width: '.5rem',
  6. transform: 'translateX(0rem)'
  7. },
  8. memberId: 0,
  9. searchText: '',
  10. type: 'card',
  11. memberCoupon: [],
  12. startDate: '1900-1-1',
  13. sex: [{
  14. text: '未知',
  15. value: 0
  16. },
  17. {
  18. text: '男',
  19. value: 1
  20. }, {
  21. text: '女',
  22. value: 2
  23. },
  24. ],
  25. memberData: {
  26. sex: 0,
  27. mobile: '',
  28. nickname: '',
  29. birthday: '',
  30. headimg: '',
  31. member_level: 0,
  32. member_level_name: '',
  33. },
  34. flag: false,
  35. memberCardData: {
  36. page: 0,
  37. total: 1,
  38. list: [],
  39. index: 0,
  40. currData: {},
  41. selected: {}
  42. },
  43. itemNum: 1,
  44. memberLevelList: [],
  45. }
  46. },
  47. mounted() {
  48. this.mediaQueryOb = uni.createMediaQueryObserver(this)
  49. this.mediaQueryOb.observe({
  50. maxWidth: 1500
  51. }, matches => {
  52. if (matches) this.itemNum = 1;
  53. })
  54. this.mediaQueryOb.observe({
  55. minWidth: 1501,
  56. maxWidth: 1900,
  57. }, matches => {
  58. if (matches) this.itemNum = 2;
  59. })
  60. this.mediaQueryOb.observe({
  61. minWidth: 1901,
  62. }, matches => {
  63. if (matches) this.itemNum = 3;
  64. })
  65. },
  66. created() {
  67. this.getMemberLevel();
  68. },
  69. methods: {
  70. selectMemberLevel(index, item) {
  71. if (index >= 0) {
  72. this.memberData.member_level = item.value;
  73. this.memberData.member_level_name = item.label;
  74. } else {
  75. this.memberData.member_level = '';
  76. this.memberData.member_level_name = '';
  77. }
  78. this.$forceUpdate();
  79. },
  80. // 添加图片
  81. addImg(i) {
  82. this.$util.upload(1, {
  83. path: 'headimg'
  84. }, res => {
  85. if (res.length > 0) {
  86. this.memberData.headimg = res[0];
  87. this.$forceUpdate();
  88. }
  89. });
  90. },
  91. getMemberLevel() {
  92. this.memberLevelList = [];
  93. this.$api.sendRequest({
  94. url: '/cashier/storeapi/memberlevel/lists',
  95. success: res => {
  96. if (res.code == 0 && res.data) {
  97. for (let i in res.data) {
  98. this.memberLevelList.push({
  99. 'label': res.data[i]['level_name'],
  100. 'value': res.data[i]['level_id'].toString(),
  101. 'disabled': false
  102. });
  103. }
  104. }
  105. }
  106. });
  107. },
  108. addSwitch() {
  109. this.type = 'addmember';
  110. this.memberData = {
  111. sex: 0,
  112. mobile: this.searchText,
  113. nickname: '',
  114. birthday: '',
  115. headimg: '',
  116. member_level: '',
  117. member_level_name: '',
  118. }
  119. },
  120. addMember() {
  121. if (this.verify()) {
  122. if (this.flag) return;
  123. this.flag = true;
  124. let data = this.memberData;
  125. this.$api.sendRequest({
  126. url: '/cashier/storeapi/member/addMember',
  127. data: this.memberData,
  128. success: res => {
  129. if (res.code == 0 && res.data) {
  130. this.memberId = res.data;
  131. this.type = 'member';
  132. this.getMemberInfo();
  133. } else {
  134. this.$util.showToast({
  135. title: res.message
  136. })
  137. }
  138. this.flag = false;
  139. }
  140. });
  141. }
  142. },
  143. verify() {
  144. if (!this.memberData.mobile) {
  145. this.$util.showToast({
  146. title: '请输入会员手机号'
  147. })
  148. return false;
  149. }
  150. if (!/^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/
  151. .test(this.memberData.mobile)) {
  152. this.$util.showToast({
  153. title: '请输入正确的手机号码'
  154. })
  155. return false;
  156. }
  157. return true;
  158. },
  159. changeTime(e) {
  160. this.memberData.birthday = e;
  161. },
  162. recharge() {
  163. this.$util.redirectTo('/pages/recharge/index');
  164. },
  165. coupon() {
  166. this.type = 'coupon';
  167. this.memberCoupon = [];
  168. this.$api.sendRequest({
  169. url: '/cashier/storeapi/member/coupon',
  170. data: {
  171. member_id: this.info.member_id,
  172. page: 1,
  173. page_size: 0,
  174. state: 1
  175. },
  176. success: res => {
  177. if (res.code == 0 && res.data) {
  178. this.memberCoupon = res.data.list;
  179. }
  180. }
  181. });
  182. },
  183. searchMember() {
  184. if (!/[\S]+/.test(this.searchText)) {
  185. this.$util.showToast({
  186. title: '请输入搜索内容'
  187. })
  188. return;
  189. }
  190. this.$api.sendRequest({
  191. url: '/cashier/storeapi/member/searchmember',
  192. data: {
  193. search_text: this.searchText
  194. },
  195. success: res => {
  196. if (res.code == 0 && res.data) {
  197. this.memberId = res.data.member_id;
  198. this.searchText = '';
  199. this.getMemberInfo();
  200. } else {
  201. this.$util.showToast({
  202. title: '没有查询到对应会员'
  203. })
  204. }
  205. }
  206. });
  207. },
  208. searchMemberByType(searchText, searchType) {
  209. this.$api.sendRequest({
  210. url: '/cashier/storeapi/member/searchmember',
  211. data: {
  212. search_text: searchText,
  213. search_type: searchType
  214. },
  215. success: res => {
  216. if (res.code == 0 && res.data) {
  217. this.memberId = res.data.member_id;
  218. this.searchText = '';
  219. this.getMemberInfo();
  220. } else {
  221. this.$util.showToast({
  222. title: '没有查询到对应会员'
  223. })
  224. }
  225. }
  226. });
  227. },
  228. getMemberInfo() {
  229. this.$api.sendRequest({
  230. url: '/cashier/storeapi/member/info',
  231. data: {
  232. member_id: this.memberId
  233. },
  234. success: res => {
  235. if (res.code == 0 && res.data) {
  236. this.$store.commit('setMemberInfo', res.data);
  237. } else {
  238. this.$util.showToast({
  239. title: '未获取到会员信息'
  240. })
  241. }
  242. }
  243. })
  244. },
  245. /**
  246. * 获取会员项目
  247. */
  248. getMemberCard() {
  249. if (this.memberCardData.page + 1 > this.memberCardData.total) return;
  250. this.memberCardData.page += 1;
  251. this.$api.sendRequest({
  252. url: '/cardservice/storeapi/membercard/lists',
  253. data: {
  254. status: 1,
  255. page: this.memberCardData.page,
  256. member_id: this.info.member_id
  257. },
  258. success: res => {
  259. if (res.code == 0) {
  260. this.memberCardData.total = res.data.page_count || 1;
  261. if (this.memberCardData.page == 1) {
  262. this.memberCardData.list = [];
  263. if (res.data.count) this.selectMemberCard(res.data.list[0], 0);
  264. }
  265. if (res.data.list.length) this.memberCardData.list = this.memberCardData.list
  266. .concat(res.data.list);
  267. }
  268. }
  269. })
  270. },
  271. /**
  272. * 选择会员套餐
  273. * @param {Object} data
  274. * @param {Object} index
  275. */
  276. selectMemberCard(data, index) {
  277. this.memberCardData.index = index;
  278. this.memberCardData.currData = this.$util.deepClone(data);
  279. this.memberCardData.selected = {};
  280. },
  281. /**
  282. * 选择会员套餐商品项
  283. * @param {Object} data
  284. * @param {Object} index
  285. */
  286. selectMemberCardItem(data, index) {
  287. if (this.memberCardData.selected['item_' + data.item_id]) {
  288. if (data.card_type == 'commoncard') {
  289. this.memberCardData.currData.total_use_num -= this.memberCardData.selected['item_' + data.item_id]
  290. .input_num;
  291. }
  292. delete this.memberCardData.selected['item_' + data.item_id];
  293. } else {
  294. if (!this.checkStatus(data)) return;
  295. this.memberCardData.selected['item_' + data.item_id] = this.$util.deepClone(data);
  296. this.memberCardData.selected['item_' + data.item_id].input_num = 1;
  297. this.memberCardData.selected['item_' + data.item_id].index = index;
  298. this.memberCardData.selected['item_' + data.item_id].card_name = this.memberCardData.currData
  299. .goods_name;
  300. if (data.card_type == 'commoncard') {
  301. this.memberCardData.currData.total_use_num += 1;
  302. }
  303. }
  304. this.$forceUpdate();
  305. },
  306. /**
  307. * 加入购物车
  308. */
  309. selectGoods() {
  310. if (!Object.keys(this.memberCardData.selected).length) return;
  311. let arr = [];
  312. Object.keys(this.memberCardData.selected).forEach((key) => {
  313. let data = this.memberCardData.selected[key];
  314. data.card_index = this.memberCardData.index;
  315. data.num = data.input_num;
  316. arr.push(this.$util.deepClone(data));
  317. this.memberCardData.list[this.memberCardData.index].total_use_num += data.input_num;
  318. this.memberCardData.list[this.memberCardData.index].item_list[data.index].use_num += data
  319. .input_num;
  320. this.memberCardData.currData.item_list[data.index].use_num += data.input_num;
  321. })
  322. this.$emit('selectGoods', arr);
  323. this.memberCardData.selected = {};
  324. },
  325. /**
  326. * 数量减
  327. * @param {Object} data
  328. */
  329. itemDec(data) {
  330. let currData = this.memberCardData.currData;
  331. if (this.memberCardData.selected['item_' + data.item_id].input_num > 1) {
  332. this.memberCardData.selected['item_' + data.item_id].input_num -= 1;
  333. if (data.card_type == 'commoncard') {
  334. currData.total_use_num -= 1;
  335. }
  336. this.$forceUpdate();
  337. }
  338. },
  339. /**
  340. * 数量加
  341. * @param {Object} data
  342. */
  343. itemInc(data) {
  344. let currData = this.memberCardData.currData;
  345. if (data.card_type == 'commoncard') {
  346. if ((currData.total_num - currData.total_use_num - 1) < 0) return;
  347. } else if (data.card_type != 'timecard') {
  348. if ((data.num - data.use_num - this.memberCardData.selected['item_' + data.item_id].input_num - 1) < 0)
  349. return;
  350. }
  351. if (data.card_type == 'commoncard') {
  352. currData.total_use_num += 1;
  353. }
  354. this.memberCardData.selected['item_' + data.item_id].input_num += 1;
  355. this.$forceUpdate();
  356. },
  357. checkStatus(data) {
  358. let currData = this.$util.deepClone(this.memberCardData.currData);
  359. if (data.card_type == 'commoncard') {
  360. return currData.total_num > currData.total_use_num;
  361. } else if (data.card_type != 'timecard') {
  362. return data.num > data.use_num;
  363. }
  364. return true;
  365. }
  366. }
  367. }