<template> <view class="coupon-list"> <view v-for="(item, index) in list" :key="index" class="m-t-20"> <view :class="'coupon-item flex ' + (btnType == 1 || btnType == 2 ? 'gray': '')"> <view class="price white flex-col col-center"> <view class="xl"> <price-format :first-size="60" :second-size="50" :subscript-size="34" :price="item.money" :weight="500" /> </view> <view class="sm text-center">{{item.condition_type_desc}}</view> </view> <view class="info m-l-20"> <view class="lg m-b-20">{{item.coupon_name}}</view> <view class="xs lighter m-b-20">{{item.user_time_desc}}</view> <view class="xs lighter">{{item.use_scene_desc}}</view> </view> <button type="primary" :class="'btn br60 white xs ' + (btnType != 3 ? 'plain': '')" @tap="onHandle(item.id)"> {{getBtn}} </button> <image v-if="item.is_get" class="receive" src="/static/images/coupon_receive.png"></image> </view> <view style="padding: 14rpx 20rpx" class="bg-white" v-if="item.use_goods_desc" @tap="onShowTips(index)"> <view class="flex row-between"> <view class="xs">使用说明</view> <u-icon :class="showTips[index] ? 'rotate' : ''" name="arrow-down" /> </view> <view v-show="showTips[index]" class="m-t-10 xs">{{item.use_goods_desc}}</view> </view> </view> </view> </template> <script> import { getCoupon } from '@/api/activity'; export default { data() { return { showTips: [] }; }, props: { list: { type: Array, default: () => [] }, btnType: { // 0 去使用 1已使用 2已过期 3领取 type: Number } }, watch: { list: { handler: function(val) { let arr = val.map(item => { return 0; }); this.showTips = arr }, immediate: true, deep: true } }, computed: {}, computed: { getBtn() { var text = '' switch (this.btnType) { case 0: text = '去使用'; break; case 1: text = '已使用'; break; case 2: text = '已过期'; break; case 3: text = '领取'; break; } return text } }, methods: { onHandle(id) { this.id = id; const { btnType } = this; switch (btnType) { case 0: uni.switchTab({ url: '/pages/index/index' }); break; case 1: // text = '去使用'; break; case 2: // text = '已使用'; break; case 3: this.getCouponFun(); break; } }, onShowTips(index) { const { showTips } = this; this.showTips[index] = showTips[index] ? 0 : 1 // 拷贝数组 this.showTips = Object.assign([], this.showTips); }, getCouponFun() { if (!this.isLogin) return this.$Router.push('/pages/login/login') getCoupon(this.id).then(res => { if (res.code == 1) { this.$toast({ title: res.msg }) setTimeout(() => { this.$emit('refresh'); },1500) } }); } } }; </script> <style lang="scss"> .coupon-list { padding: 0 24rpx; overflow: hidden; .coupon-item { position: relative; height: 200rpx; background-image: url(../../static/images/coupon_bg.png); background-size: 100% 100%; &.gray { background-image: url(../../static/images/coupon_bg_grey.png); .btn { &.plain { color: #CCCCCC; } } } .price { width: 200rpx; } .btn { line-height: 52rpx; height: 52rpx; position: absolute; right: 20rpx; bottom: 20rpx; width: 120rpx; text-align: center; padding: 0; &.plain { background-color: #fff; color: $-color-primary; border: 1px solid currentColor; } } .receive { position: absolute; right: 30rpx; top: 0rpx; width: 99rpx; height: 77rpx; } } .icon { transition: all 0.4s; } .rotate { transform: rotateZ(-180deg); } } </style>