nc-member.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  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 (!this.$util.verifyMobile(this.memberData.mobile)) {
  151. this.$util.showToast({
  152. title: '请输入正确的手机号码'
  153. })
  154. return false;
  155. }
  156. return true;
  157. },
  158. changeTime(e) {
  159. this.memberData.birthday = e;
  160. },
  161. recharge() {
  162. this.$util.redirectTo('/pages/recharge/index');
  163. },
  164. coupon() {
  165. this.type = 'coupon';
  166. this.memberCoupon = [];
  167. this.$api.sendRequest({
  168. url: '/cashier/storeapi/member/coupon',
  169. data: {
  170. member_id: this.info.member_id,
  171. page: 1,
  172. page_size: 0,
  173. state: 1
  174. },
  175. success: res => {
  176. if (res.code == 0 && res.data) {
  177. this.memberCoupon = res.data.list;
  178. }
  179. }
  180. });
  181. },
  182. searchMember() {
  183. if (!/[\S]+/.test(this.searchText)) {
  184. this.$util.showToast({
  185. title: '请输入搜索内容'
  186. })
  187. return;
  188. }
  189. this.$api.sendRequest({
  190. url: '/cashier/storeapi/member/searchmember',
  191. data: {
  192. search_text: this.searchText
  193. },
  194. success: res => {
  195. if (res.code == 0 && res.data) {
  196. this.memberId = res.data.member_id;
  197. this.searchText = '';
  198. this.getMemberInfo();
  199. } else {
  200. this.$util.showToast({
  201. title: '没有查询到对应会员'
  202. })
  203. }
  204. }
  205. });
  206. },
  207. searchMemberByType(searchText, searchType) {
  208. this.$api.sendRequest({
  209. url: '/cashier/storeapi/member/searchmember',
  210. data: {
  211. search_text: searchText,
  212. search_type: searchType
  213. },
  214. success: res => {
  215. if (res.code == 0 && res.data) {
  216. this.memberId = res.data.member_id;
  217. this.searchText = '';
  218. this.getMemberInfo();
  219. } else {
  220. this.$util.showToast({
  221. title: '没有查询到对应会员'
  222. })
  223. }
  224. }
  225. });
  226. },
  227. getMemberInfo() {
  228. this.$api.sendRequest({
  229. url: '/cashier/storeapi/member/info',
  230. data: {
  231. member_id: this.memberId
  232. },
  233. success: res => {
  234. if (res.code == 0 && res.data) {
  235. this.$store.commit('setMemberInfo', res.data);
  236. } else {
  237. this.$util.showToast({
  238. title: '未获取到会员信息'
  239. })
  240. }
  241. }
  242. })
  243. },
  244. /**
  245. * 获取会员项目
  246. */
  247. getMemberCard() {
  248. if (this.memberCardData.page + 1 > this.memberCardData.total) return;
  249. this.memberCardData.page += 1;
  250. this.$api.sendRequest({
  251. url: '/cardservice/storeapi/membercard/lists',
  252. data: {
  253. status: 1,
  254. page: this.memberCardData.page,
  255. member_id: this.info.member_id
  256. },
  257. success: res => {
  258. if (res.code == 0) {
  259. this.memberCardData.total = res.data.page_count || 1;
  260. if (this.memberCardData.page == 1) {
  261. this.memberCardData.list = [];
  262. if (res.data.count) this.selectMemberCard(res.data.list[0], 0);
  263. }
  264. if (res.data.list.length) this.memberCardData.list = this.memberCardData.list
  265. .concat(res.data.list);
  266. }
  267. }
  268. })
  269. },
  270. /**
  271. * 选择会员套餐
  272. * @param {Object} data
  273. * @param {Object} index
  274. */
  275. selectMemberCard(data, index) {
  276. this.memberCardData.index = index;
  277. this.memberCardData.currData = this.$util.deepClone(data);
  278. this.memberCardData.selected = {};
  279. },
  280. /**
  281. * 选择会员套餐商品项
  282. * @param {Object} data
  283. * @param {Object} index
  284. */
  285. selectMemberCardItem(data, index) {
  286. if (this.memberCardData.selected['item_' + data.item_id]) {
  287. if (data.card_type == 'commoncard') {
  288. this.memberCardData.currData.total_use_num -= this.memberCardData.selected['item_' + data.item_id]
  289. .input_num;
  290. }
  291. delete this.memberCardData.selected['item_' + data.item_id];
  292. } else {
  293. if (!this.checkStatus(data)) return;
  294. this.memberCardData.selected['item_' + data.item_id] = this.$util.deepClone(data);
  295. this.memberCardData.selected['item_' + data.item_id].input_num = 1;
  296. this.memberCardData.selected['item_' + data.item_id].index = index;
  297. this.memberCardData.selected['item_' + data.item_id].card_name = this.memberCardData.currData
  298. .goods_name;
  299. if (data.card_type == 'commoncard') {
  300. this.memberCardData.currData.total_use_num += 1;
  301. }
  302. }
  303. this.$forceUpdate();
  304. },
  305. /**
  306. * 加入购物车
  307. */
  308. selectGoods() {
  309. if (!Object.keys(this.memberCardData.selected).length) return;
  310. let arr = [];
  311. Object.keys(this.memberCardData.selected).forEach((key) => {
  312. let data = this.memberCardData.selected[key];
  313. data.card_index = this.memberCardData.index;
  314. data.num = data.input_num;
  315. arr.push(this.$util.deepClone(data));
  316. this.memberCardData.list[this.memberCardData.index].total_use_num += data.input_num;
  317. this.memberCardData.list[this.memberCardData.index].item_list[data.index].use_num += data
  318. .input_num;
  319. this.memberCardData.currData.item_list[data.index].use_num += data.input_num;
  320. })
  321. this.$emit('selectGoods', arr);
  322. this.memberCardData.selected = {};
  323. },
  324. /**
  325. * 数量减
  326. * @param {Object} data
  327. */
  328. itemDec(data) {
  329. let currData = this.memberCardData.currData;
  330. if (this.memberCardData.selected['item_' + data.item_id].input_num > 1) {
  331. this.memberCardData.selected['item_' + data.item_id].input_num -= 1;
  332. if (data.card_type == 'commoncard') {
  333. currData.total_use_num -= 1;
  334. }
  335. this.$forceUpdate();
  336. }
  337. },
  338. /**
  339. * 数量加
  340. * @param {Object} data
  341. */
  342. itemInc(data) {
  343. let currData = this.memberCardData.currData;
  344. if (data.card_type == 'commoncard') {
  345. if ((currData.total_num - currData.total_use_num - 1) < 0) return;
  346. } else if (data.card_type != 'timecard') {
  347. if ((data.num - data.use_num - this.memberCardData.selected['item_' + data.item_id].input_num - 1) < 0)
  348. return;
  349. }
  350. if (data.card_type == 'commoncard') {
  351. currData.total_use_num += 1;
  352. }
  353. this.memberCardData.selected['item_' + data.item_id].input_num += 1;
  354. this.$forceUpdate();
  355. },
  356. checkStatus(data) {
  357. let currData = this.$util.deepClone(this.memberCardData.currData);
  358. if (data.card_type == 'commoncard') {
  359. return currData.total_num > currData.total_use_num;
  360. } else if (data.card_type != 'timecard') {
  361. return data.num > data.use_num;
  362. }
  363. return true;
  364. }
  365. }
  366. }