selectCoupons.js 4.1 KB

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