193 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Vue
		
	
	
| <!-- 优惠券组  -->
 | |
| <template>
 | |
|   <view>
 | |
|     <!-- 样式1 -->
 | |
|     <view class="lg-coupon-wrap" v-if="mode == 1">
 | |
|       <scroll-view class="scroll-box" scroll-x scroll-anchoring>
 | |
|         <view class="coupon-box ss-flex">
 | |
|           <view
 | |
|             class="coupon-item"
 | |
|             :style="[couponBg, { marginLeft: data.space + 'px' }]"
 | |
|             v-for="(item, index) in couponList"
 | |
|             :key="index"
 | |
|           >
 | |
|             <su-coupon
 | |
|               size="lg"
 | |
|               :textColor="data.fill.color"
 | |
|               background=""
 | |
|               :couponId="item.id"
 | |
|               :title="item.amount_text"
 | |
|               :value="item.amount"
 | |
|               :surplus="item.stock"
 | |
|               :type="item.type"
 | |
|               :sellBy="`${item.get_start_time.substring(0, 10)} 至 ${item.get_end_time.substring(
 | |
|                 0,
 | |
|                 10,
 | |
|               )}`"
 | |
|             >
 | |
|               <template v-slot:btn>
 | |
|                 <button
 | |
|                   class="ss-reset-button card-btn"
 | |
|                   :style="[btnStyles]"
 | |
|                   @click.stop="onGetCoupon(item.id)"
 | |
|                 >
 | |
|                   {{ item.get_status_text }}
 | |
|                 </button>
 | |
|               </template>
 | |
|             </su-coupon>
 | |
|           </view>
 | |
|         </view>
 | |
|       </scroll-view>
 | |
|     </view>
 | |
|     <!-- 样式2 -->
 | |
|     <view class="md-coupon-wrap" v-if="mode == 2">
 | |
|       <scroll-view class="scroll-box" scroll-x scroll-anchoring>
 | |
|         <view class="coupon-box ss-flex">
 | |
|           <view
 | |
|             class="coupon-item"
 | |
|             :style="[couponBg, { marginLeft: data.space + 'px' }]"
 | |
|             v-for="(item, index) in couponList"
 | |
|             :key="index"
 | |
|           >
 | |
|             <su-coupon
 | |
|               size="md"
 | |
|               :textColor="data.fill.color"
 | |
|               background=""
 | |
|               :title="item.amount_text"
 | |
|               :value="item.amount"
 | |
|               :surplus="item.stock"
 | |
|               :couponId="item.id"
 | |
|               :type="item.type"
 | |
|               :sellBy="`${item.get_start_time.substring(0, 10)} 至 ${item.get_end_time.substring(
 | |
|                 0,
 | |
|                 10,
 | |
|               )}`"
 | |
|             >
 | |
|               <template v-slot:btn>
 | |
|                 <button
 | |
|                   @click.stop="onGetCoupon(item.id)"
 | |
|                   class="ss-reset-button card-btn ss-flex ss-row-center ss-col-center"
 | |
|                   :style="[btnStyles]"
 | |
|                 >
 | |
|                   <view class="btn-text">{{ item.get_status_text }}</view>
 | |
|                 </button>
 | |
|               </template>
 | |
|             </su-coupon>
 | |
|           </view>
 | |
|         </view>
 | |
|       </scroll-view>
 | |
|     </view>
 | |
|     <!-- 样式3 -->
 | |
|     <view class="xs-coupon-wrap" v-if="mode == 3">
 | |
|       <scroll-view class="scroll-box" scroll-x scroll-anchoring>
 | |
|         <view class="coupon-box ss-flex">
 | |
|           <view
 | |
|             class="coupon-item"
 | |
|             :style="[couponBg, { marginLeft: data.space + 'px' }]"
 | |
|             v-for="(item, index) in couponList"
 | |
|             :key="index"
 | |
|           >
 | |
|             <su-coupon
 | |
|               size="xs"
 | |
|               :textColor="data.fill.color"
 | |
|               background=""
 | |
|               :title="item.amount_text"
 | |
|               :value="item.amount"
 | |
|               :surplus="item.stock"
 | |
|               :couponId="item.id"
 | |
|               :type="item.type"
 | |
|               :sellBy="`${item.get_start_time.substring(0, 10)} 至 ${item.get_end_time.substring(
 | |
|                 0,
 | |
|                 10,
 | |
|               )}`"
 | |
|             >
 | |
|               <template v-slot:btn>
 | |
|                 <button
 | |
|                   class="ss-reset-button card-btn"
 | |
|                   :style="[btnStyles]"
 | |
|                   @click.stop="onGetCoupon(item.id)"
 | |
|                 >
 | |
|                   {{ item.get_status_text }}
 | |
|                 </button>
 | |
|               </template>
 | |
|             </su-coupon>
 | |
|           </view>
 | |
|         </view>
 | |
|       </scroll-view>
 | |
|     </view>
 | |
|   </view>
 | |
| </template>
 | |
| 
 | |
| <script setup>
 | |
|   import sheep from '@/sheep';
 | |
|   import { ref, onMounted } from 'vue';
 | |
| 
 | |
|   const props = defineProps({
 | |
|     data: {
 | |
|       type: Object,
 | |
|       default: () => ({}),
 | |
|     },
 | |
|     styles: {
 | |
|       type: Object,
 | |
|       default: () => ({}),
 | |
|     },
 | |
|   });
 | |
|   const { mode, button } = props.data;
 | |
|   const couponBg = {
 | |
|     background: `url(${sheep.$url.cdn(props.data.fill.bgImage)}) no-repeat top center / 100% 100%`,
 | |
|   };
 | |
|   const btnStyles = {
 | |
|     background: button.bgColor,
 | |
|     color: button.color,
 | |
|   };
 | |
|   const couponList = ref([]);
 | |
|   //立即领取优惠券
 | |
|   async function onGetCoupon(id) {
 | |
|     const { error, msg } = await sheep.$api.coupon.get(id);
 | |
|     if (error === 0) {
 | |
|       uni.showToast({
 | |
|         title: msg,
 | |
|         icon: 'none',
 | |
|       });
 | |
|     } else {
 | |
|       let { data } = await sheep.$api.coupon.list({ ids: props.data.couponIds.join(',') });
 | |
|       couponList.value = [...data.data];
 | |
|     }
 | |
|   }
 | |
|   onMounted(async () => {
 | |
|     let { data } = await sheep.$api.coupon.list({ ids: props.data.couponIds.join(',') });
 | |
|     // couponList.value = [...data.data, ...data.data, ...data.data, ...data.data];
 | |
|     couponList.value = [...data.data];
 | |
|   });
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
|   .card-btn {
 | |
|     width: 140rpx;
 | |
|     height: 50rpx;
 | |
|     border-radius: 25rpx;
 | |
|     font-size: 24rpx;
 | |
|     line-height: 50rpx;
 | |
|   }
 | |
|   .coupon-item {
 | |
|     &:nth-of-type(1) {
 | |
|       margin-left: 0 !important;
 | |
|     }
 | |
|   }
 | |
|   .md-coupon-wrap {
 | |
|     .card-btn {
 | |
|       width: 50rpx;
 | |
|       height: 140rpx;
 | |
|       margin: auto 0;
 | |
|       margin-right: 20rpx;
 | |
| 
 | |
|       .btn-text {
 | |
|         font-size: 24rpx;
 | |
|         text-align: center;
 | |
|         writing-mode: vertical-lr;
 | |
|         writing-mode: tb-lr;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| </style>
 |