<template>
|
|
<view class="discount-container">
|
|
<!-- 顶部tab切换 -->
|
|
<uv-subsection
|
|
:list="tabList"
|
|
:current="currentTab"
|
|
@change="onTabChange"
|
|
:activeColor="tabStyle.activeColor"
|
|
:inactiveColor="tabStyle.inactiveColor"
|
|
|
|
:fontSize="tabStyle.fontSize"
|
|
:height="tabStyle.height"
|
|
custom-style="height: 80rpx;border-radius: 70rpx;position: sticky; left: 0; top: 0;right: 0;zIndex: 999"
|
|
custom-item-style="border-radius: 60rpx;"
|
|
></uv-subsection>
|
|
|
|
<!-- 优惠券列表 -->
|
|
<view class="coupon-list">
|
|
<view
|
|
v-for="(coupon, index) in list"
|
|
:key="index"
|
|
class="coupon-item"
|
|
:class="{
|
|
'used-coupon': currentTab === 1,
|
|
'expired-coupon': currentTab === 2
|
|
}"
|
|
>
|
|
<!-- 左侧金额区域 -->
|
|
<view class="coupon-left">
|
|
<text class="coupon-symbol">¥</text>
|
|
<text class="coupon-amount">{{ coupon.money }}</text>
|
|
<!-- 状态盖章 -->
|
|
<image
|
|
v-if="currentTab !== 0"
|
|
class="status-stamp"
|
|
:src="currentTab === 1 ? '/static/used-stamp.png' : '/static/expired-stamp.png'"
|
|
mode="aspectFit"
|
|
></image>
|
|
</view>
|
|
|
|
<!-- 右侧信息区域 -->
|
|
<view class="coupon-right">
|
|
<view class="coupon-title">{{ coupon.name }}</view>
|
|
<view class="coupon-expire">有效期至 {{ coupon.endTime }}</view>
|
|
|
|
<!-- 使用按钮或状态 -->
|
|
<view class="coupon-action">
|
|
<uv-button
|
|
v-if="currentTab === 0"
|
|
:customStyle="buttonStyle"
|
|
text="去使用"
|
|
@click="useCoupon(coupon)"
|
|
></uv-button>
|
|
<view
|
|
v-else
|
|
class="coupon-status"
|
|
:class="{
|
|
'used-status': currentTab === 1,
|
|
'expired-status': currentTab === 2
|
|
}"
|
|
>
|
|
{{ currentTab === 1 ? '已使用' : '已过期' }}
|
|
</view>
|
|
</view>
|
|
|
|
|
|
</view>
|
|
</view>
|
|
|
|
<uv-loading-icon text="加载中" textSize="30rpx" v-if="isLoading"></uv-loading-icon>
|
|
<!-- 空状态 -->
|
|
<uv-empty
|
|
v-else-if="list === 0"
|
|
text="暂无优惠券"
|
|
:textColor="emptyStyle.textColor"
|
|
:textSize="emptyStyle.textSize"
|
|
:marginTop="emptyStyle.marginTop"
|
|
></uv-empty>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import ListMixins from '@/mixins/list'
|
|
export default {
|
|
mixins: [ListMixins],
|
|
data() {
|
|
return {
|
|
mixinListApi: 'member.getCouponList',
|
|
currentTab: 0,
|
|
fromPage: '', // 来源页面标识
|
|
tabList: [
|
|
{ name: '待使用' },
|
|
{ name: '已使用' },
|
|
{ name: '已过期' }
|
|
],
|
|
|
|
// tab样式配置
|
|
tabStyle: {
|
|
activeColor: '#06DADC',
|
|
inactiveColor: '#999',
|
|
bgColor: '#f8f8f8',
|
|
fontSize: '28rpx',
|
|
height: '80rpx'
|
|
},
|
|
|
|
// 按钮样式配置
|
|
buttonStyle: {
|
|
backgroundColor: '#06DADC',
|
|
borderRadius: '99rpx',
|
|
width: '140rpx',
|
|
height: '60rpx',
|
|
fontSize: '30rpx',
|
|
color: '#fff'
|
|
},
|
|
|
|
// 空状态样式配置
|
|
emptyStyle: {
|
|
textColor: '#999',
|
|
textSize: '28rpx',
|
|
marginTop: '200rpx'
|
|
}
|
|
}
|
|
},
|
|
|
|
onLoad(options) {
|
|
// 接收来源页面参数
|
|
if (options.from) {
|
|
this.fromPage = options.from
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
|
|
},
|
|
|
|
methods: {
|
|
mixinSetParams() {
|
|
return {
|
|
status: String(this.currentTab)
|
|
}
|
|
},
|
|
onTabChange(index) {
|
|
this.currentTab = index
|
|
this.list = []
|
|
this.initPage()
|
|
this.getList(true)
|
|
},
|
|
|
|
useCoupon(coupon) {
|
|
// 如果是从充值页面跳转过来的,选择优惠券后返回
|
|
if (this.fromPage === 'recharge') {
|
|
console.log('被选中了');
|
|
// 通过事件总线传递选中的优惠券数据
|
|
uni.$emit('couponSelected', {
|
|
id: coupon.id,
|
|
name: coupon.name,
|
|
money: coupon.money,
|
|
endTime: coupon.endTime
|
|
})
|
|
|
|
uni.navigateBack()
|
|
} else {
|
|
// 其他情况的处理逻辑
|
|
uni.showToast({
|
|
title: '跳转到使用页面',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.discount-container {
|
|
min-height: 100vh;
|
|
background-color: #f8f8f8;
|
|
padding-bottom: 50rpx;
|
|
.coupon-list {
|
|
padding: 40rpx 30rpx;
|
|
|
|
.coupon-item {
|
|
display: flex;
|
|
background-color: #fff;
|
|
border-radius: 24rpx;
|
|
margin-bottom: 24rpx;
|
|
overflow: hidden;
|
|
position: relative;
|
|
padding: 8rpx;
|
|
// box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
|
|
|
|
&.used-coupon,
|
|
&.expired-coupon {
|
|
.coupon-left {
|
|
background-color: #E3E3E3;
|
|
|
|
.coupon-symbol,
|
|
.coupon-amount {
|
|
color: #FBFBFB;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
.coupon-left {
|
|
width: 180rpx;
|
|
background-color: #FFF2F2;
|
|
display: flex;
|
|
// flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: 16rpx;
|
|
position: relative;
|
|
.coupon-symbol {
|
|
font-size: 24rpx;
|
|
color: #FF4800;
|
|
font-weight: bold;
|
|
margin-bottom: 10rpx;
|
|
}
|
|
|
|
.coupon-amount {
|
|
font-size: 48rpx;
|
|
color: #FF4800;
|
|
font-weight: 500;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.status-stamp {
|
|
position: absolute;
|
|
bottom: 0rpx;
|
|
right: 0rpx;
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
|
|
// opacity: 0.8;
|
|
}
|
|
}
|
|
|
|
.coupon-right {
|
|
flex: 1;
|
|
margin-left: 20rpx;
|
|
padding: 40rpx 30rpx 20rpx;
|
|
position: relative;
|
|
width: 0px;
|
|
|
|
border-left: 2rpx dashed #DADADA;
|
|
.coupon-title {
|
|
font-size: 32rpx;
|
|
color: #181818;
|
|
font-weight: bold;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.coupon-expire {
|
|
font-size: 28rpx;
|
|
color: #9B9B9B;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.coupon-action {
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
|
|
.coupon-status {
|
|
padding: 10rpx 30rpx;
|
|
border-radius: 40rpx;
|
|
font-size: 30rpx;
|
|
text-align: center;
|
|
|
|
&.used-status {
|
|
background-color: #E3E3E3;
|
|
color: #fff;
|
|
}
|
|
|
|
&.expired-status {
|
|
background-color: #E3E3E3;
|
|
color: #fff;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|