cart.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. export default {
  2. computed: {
  3. // 整合购物车数据
  4. $S_tabbar_shopCarts() {
  5. let shopCarts = this.$M_GS('common', '$S_tabbar_shopCarts');
  6. if (!this.$M_IsEmpty(shopCarts)) {
  7. let cartList = [];
  8. for (let key in shopCarts) {
  9. cartList.push(shopCarts[key]);
  10. }
  11. return cartList;
  12. } else {
  13. return [];
  14. }
  15. },
  16. },
  17. methods: {
  18. // 当数量超出范围,比如最小范围1触发
  19. numsOverlimit(e, row) {
  20. if (e === 'minus') {
  21. this.deleteShops = row;
  22. this.uModalShow = true;
  23. }
  24. },
  25. goodPlus(e, row) {
  26. this.handleCar(e, row, 1);
  27. },
  28. // 点击商品-
  29. goodMinus(e, row) {
  30. this.handleCar(e, row, 2);
  31. },
  32. // 点击数量的+-
  33. numsChg(e, row) {
  34. // 增加用户体验
  35. uni.showLoading({
  36. title: '请稍等',
  37. mask: true,
  38. });
  39. setTimeout(() => {
  40. uni.hideLoading();
  41. }, 200);
  42. this.handleCar(e, row, 3);
  43. },
  44. // 处理购物车数据
  45. handleCar(e, row, idx) {
  46. let shopCarts = this.$S_tabbar_shopCarts;
  47. if (shopCarts.length > 0) {
  48. shopCarts.forEach(item => {
  49. if (item.imgId === row.imgId) {
  50. switch (idx) {
  51. // 给优惠码和优惠价的列表添加一个0值
  52. case 1:
  53. item.codeList.push(0);
  54. item.discountList.push(0);
  55. break;
  56. // 去掉优惠码和优惠价的列表的最后一个
  57. case 2:
  58. item.codeList.pop();
  59. item.discountList.pop();
  60. break;
  61. // 找到购物车数据对应商品的,重新计算总价格
  62. case 3:
  63. item.nums = e.value;
  64. item.totalPrice = this.$M_Big(item.goodsPrice)
  65. .mul(item.nums)
  66. .toNumber();
  67. break;
  68. }
  69. }
  70. });
  71. }
  72. // 把数组转成对象储存到vuex中
  73. let cartList = this.arrAttrToOBj(shopCarts, 'imgId');
  74. this.$M_Dp('ACTI_SHOPCARTS', cartList);
  75. },
  76. // 根据数组的某个属性转成对象
  77. arrAttrToOBj(arr, attr, obj = {}) {
  78. if (arr.length > 0) {
  79. arr.forEach(item => {
  80. obj[item[attr]] = item;
  81. });
  82. return obj;
  83. } else {
  84. return {};
  85. }
  86. },
  87. // 点击删除弹窗的确定按钮
  88. uModalConfirm() {
  89. let shopCarts = this.$S_tabbar_shopCarts;
  90. let list = [];
  91. if (shopCarts.length > 0) {
  92. // 根据id筛选出不是删除的那个商品
  93. list = shopCarts.filter(item => {
  94. if (item.imgId !== this.deleteShops.imgId) {
  95. return item;
  96. } else {
  97. // 要把优惠码和优惠价清空
  98. item.codeList = [];
  99. item.discountList = [];
  100. }
  101. });
  102. }
  103. // 把数组转成对象储存到vuex中
  104. let cartList = this.arrAttrToOBj(list, 'imgId');
  105. this.$M_Dp('ACTI_SHOPCARTS', cartList);
  106. this.uModalShow = false;
  107. },
  108. }
  109. };