You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
5.3 KiB

  1. <template>
  2. <uni-popup ref="popup" type="center">
  3. <view class="rule-popup">
  4. <view class="rule-popup-title">优惠券详细规则</view>
  5. <view class="rule-popup-content">
  6. <view class="rule-item">
  7. <view class="rule-label">名称</view>
  8. <view class="rule-value">{{couponData.stockName || ''}}</view>
  9. </view>
  10. <!-- <view class="rule-item" v-if="couponData.comment">
  11. <view class="rule-label">备注</view>
  12. <view class="rule-value">{{couponData.comment}}</view>
  13. </view> -->
  14. <view class="rule-item">
  15. <view class="rule-label">类型</view>
  16. <view class="rule-value">{{getStockTypeText(couponData)}}</view>
  17. </view>
  18. <view class="rule-item">
  19. <view class="rule-label">优惠内容</view>
  20. <view class="rule-value">{{getDiscountText(couponData)}}</view>
  21. </view>
  22. <view class="rule-item" v-if="couponData.transactionMinimum">
  23. <view class="rule-label">消费门槛</view>
  24. <view class="rule-value">{{couponData.transactionMinimum}}元可用</view>
  25. </view>
  26. <view class="rule-item" v-if="couponData.goodsName">
  27. <view class="rule-label">适用范围</view>
  28. <view class="rule-value">{{couponData.goodsName}}</view>
  29. </view>
  30. <view class="rule-item">
  31. <view class="rule-label">有效期</view>
  32. <view class="rule-value">{{getValidTimeText(couponData)}}</view>
  33. </view>
  34. <!-- <view class="rule-item" v-if="couponData.maxCouponsPerUser">
  35. <view class="rule-label">领取限制</view>
  36. <view class="rule-value">每人最多可领{{couponData.maxCouponsPerUser}}</view>
  37. </view> -->
  38. <view class="rule-item">
  39. <view class="rule-label">特别说明</view>
  40. <view class="rule-value">单笔订单仅限使用1张优惠券优惠券仅限用户本人使用不可赠送不可提现不得找零</view>
  41. </view>
  42. </view>
  43. <view class="rule-popup-close" @click="close">关闭</view>
  44. </view>
  45. </uni-popup>
  46. </template>
  47. <script>
  48. export default {
  49. name: 'CouponRulePopup',
  50. data() {
  51. return {
  52. couponData: {}
  53. }
  54. },
  55. methods: {
  56. // 打开弹窗
  57. open(couponData = {}) {
  58. this.couponData = couponData;
  59. this.$refs.popup.open();
  60. },
  61. // 关闭弹窗
  62. close() {
  63. this.$refs.popup.close();
  64. },
  65. // 获取批次类型文本
  66. getStockTypeText(coupon) {
  67. if (!coupon || !coupon.stockType) return '';
  68. const typeMap = {
  69. 'PNORMAL': '平台满减券',
  70. 'PDISCOUNT': '平台折扣券',
  71. 'PTRAIL': '平台体验券',
  72. 'NORMAL': '微信满减券',
  73. 'DISCOUNT': '微信折扣券',
  74. 'EXCHANGE': '微信换购券'
  75. };
  76. return typeMap[coupon.stockType] || coupon.stockType;
  77. },
  78. // 获取优惠券折扣文本
  79. getDiscountText(coupon) {
  80. if (!coupon || !coupon.stockType) return '';
  81. if (coupon.stockType === 'PNORMAL') {
  82. // 平台满减券
  83. if (coupon.discountAmount && coupon.transactionMinimum) {
  84. return `${coupon.transactionMinimum}元减${coupon.discountAmount}`;
  85. } else if (coupon.discountAmount) {
  86. return `${coupon.discountAmount}`;
  87. }
  88. return '满减优惠';
  89. } else if (coupon.stockType === 'PDISCOUNT') {
  90. // 平台折扣券
  91. if (coupon.discountPercent) {
  92. return `${coupon.discountPercent / 10}折优惠`;
  93. }
  94. return '折扣优惠';
  95. } else if (coupon.stockType === 'PTRAIL') {
  96. // 平台体验券
  97. return '免费体验';
  98. } else if (coupon.stockType === 'NORMAL') {
  99. // 微信满减券
  100. if (coupon.discountAmount && coupon.transactionMinimum) {
  101. return `${coupon.transactionMinimum}元减${coupon.discountAmount}`;
  102. }
  103. return '满减优惠';
  104. } else if (coupon.stockType === 'DISCOUNT') {
  105. // 微信折扣券
  106. if (coupon.discountPercent) {
  107. return `${coupon.discountPercent}折优惠`;
  108. }
  109. return '折扣优惠';
  110. } else if (coupon.stockType === 'EXCHANGE') {
  111. // 微信换购券
  112. return '换购优惠';
  113. }
  114. return '';
  115. },
  116. // 获取有效期文本
  117. getValidTimeText(coupon) {
  118. if (!coupon) return '';
  119. const beginTime = coupon.availableBeginTime ? coupon.availableBeginTime.slice(0, 16).replace('T', ' ') : '';
  120. const endTime = coupon.availableEndTime ? coupon.availableEndTime.slice(0, 16).replace('T', ' ') : '';
  121. if (beginTime && endTime) {
  122. return `${beginTime}${endTime}`;
  123. } else if (endTime) {
  124. return `截止至 ${endTime}`;
  125. } else if (beginTime) {
  126. return `${beginTime} 开始生效`;
  127. }
  128. // 如果有领取后生效天数
  129. if (coupon.availableDayAfterReceive) {
  130. return `领取后${coupon.availableDayAfterReceive}天开始生效`;
  131. }
  132. return '长期有效';
  133. }
  134. }
  135. }
  136. </script>
  137. <style lang="scss" scoped>
  138. .rule-popup {
  139. width: 600rpx;
  140. background-color: #FFFFFF;
  141. border-radius: 16rpx;
  142. overflow: hidden;
  143. }
  144. .rule-popup-title {
  145. height: 100rpx;
  146. line-height: 100rpx;
  147. text-align: center;
  148. font-size: 32rpx;
  149. font-weight: 600;
  150. color: #FFFFFF;
  151. background-color: #FFAA48;
  152. }
  153. .rule-popup-content {
  154. padding: 30rpx;
  155. }
  156. .rule-item {
  157. display: flex;
  158. margin-bottom: 20rpx;
  159. }
  160. .rule-label {
  161. width: 140rpx;
  162. font-size: 28rpx;
  163. color: #666666;
  164. flex-shrink: 0;
  165. }
  166. .rule-value {
  167. flex: 1;
  168. font-size: 28rpx;
  169. color: #333333;
  170. line-height: 40rpx;
  171. }
  172. .rule-popup-close {
  173. height: 90rpx;
  174. line-height: 90rpx;
  175. text-align: center;
  176. font-size: 30rpx;
  177. color: #FFAA48;
  178. border-top: 1px solid #EEEEEE;
  179. }
  180. </style>