selectCoupons.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import dayjs from 'dayjs';
  2. import { couponsData } from './mock';
  3. const emptyCouponImg = `https://tdesign.gtimg.com/miniprogram/template/retail/coupon/ordersure-coupon-newempty.png`;
  4. Component({
  5. properties: {
  6. storeId: String,
  7. promotionGoodsList: {
  8. type: Array,
  9. value: [],
  10. },
  11. orderSureCouponList: {
  12. type: Array,
  13. value: [],
  14. },
  15. couponsShow: {
  16. type: Boolean,
  17. value: false,
  18. observer(couponsShow) {
  19. if (couponsShow) {
  20. const { promotionGoodsList, orderSureCouponList, storeId } = this.data;
  21. const products =
  22. promotionGoodsList &&
  23. promotionGoodsList.map((goods) => {
  24. this.storeId = goods.storeId;
  25. return {
  26. skuId: goods.skuId,
  27. spuId: goods.spuId,
  28. storeId: goods.storeId,
  29. selected: true,
  30. quantity: goods.num,
  31. prices: {
  32. sale: goods.settlePrice,
  33. },
  34. };
  35. });
  36. const selectedCoupons =
  37. orderSureCouponList &&
  38. orderSureCouponList.map((ele) => {
  39. return {
  40. promotionId: ele.promotionId,
  41. storeId: ele.storeId,
  42. couponId: ele.couponId,
  43. };
  44. });
  45. this.setData({
  46. products,
  47. });
  48. this.coupons({
  49. products,
  50. selectedCoupons,
  51. storeId,
  52. }).then((res) => {
  53. this.initData(res);
  54. });
  55. }
  56. },
  57. },
  58. },
  59. data: {
  60. emptyCouponImg,
  61. goodsList: [],
  62. selectedList: [],
  63. couponsList: [],
  64. orderSureCouponList: [],
  65. promotionGoodsList: [],
  66. },
  67. methods: {
  68. initData(data = {}) {
  69. const { couponResultList = [], reduce = 0 } = data;
  70. const selectedList = [];
  71. let selectedNum = 0;
  72. const couponsList =
  73. couponResultList &&
  74. couponResultList.map((coupon) => {
  75. const { status, couponVO } = coupon;
  76. const { couponId, condition = '', endTime = 0, name = '', startTime = 0, value, type } = couponVO;
  77. if (status === 1) {
  78. selectedNum++;
  79. selectedList.push({
  80. couponId,
  81. promotionId: ruleId,
  82. storeId: this.storeId,
  83. });
  84. }
  85. const val = type === 2 ? value / 100 : value / 10;
  86. return {
  87. key: couponId,
  88. title: name,
  89. isSelected: false,
  90. timeLimit: `${dayjs(+startTime).format('YYYY-MM-DD')}-${dayjs(+endTime).format('YYYY-MM-DD')}`,
  91. value: val,
  92. status: status === -1 ? 'useless' : 'default',
  93. desc: condition,
  94. type,
  95. tag: '',
  96. };
  97. });
  98. this.setData({
  99. selectedList,
  100. couponsList,
  101. reduce,
  102. selectedNum,
  103. });
  104. },
  105. selectCoupon(e) {
  106. const { key } = e.currentTarget.dataset;
  107. const { couponsList, selectedList } = this.data;
  108. couponsList.forEach((coupon) => {
  109. if (coupon.key === key) {
  110. coupon.isSelected = !coupon.isSelected;
  111. }
  112. });
  113. const couponSelected = couponsList.filter((coupon) => coupon.isSelected === true);
  114. this.setData({
  115. selectedList: [...selectedList, ...couponSelected],
  116. couponsList: [...couponsList],
  117. });
  118. this.triggerEvent('sure', {
  119. selectedList: [...selectedList, ...couponSelected],
  120. });
  121. },
  122. hide() {
  123. this.setData({
  124. couponsShow: false,
  125. });
  126. },
  127. coupons(coupon = {}) {
  128. return new Promise((resolve, reject) => {
  129. if (coupon?.selectedCoupons) {
  130. resolve({
  131. couponResultList: couponsData.couponResultList,
  132. reduce: couponsData.reduce,
  133. });
  134. }
  135. return reject({
  136. couponResultList: [],
  137. reduce: undefined,
  138. });
  139. });
  140. },
  141. },
  142. });