|
|
- <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 currentCoupons"
- :key="index"
- class="coupon-item"
- :class="{
- 'used-coupon': coupon.status === 'used',
- 'expired-coupon': coupon.status === 'expired'
- }"
- >
- <!-- 左侧金额区域 -->
- <view class="coupon-left">
- <text class="coupon-symbol">¥</text>
- <text class="coupon-amount">{{ coupon.amount }}</text>
- <!-- 状态盖章 -->
- <image
- v-if="coupon.status !== 'available'"
- class="status-stamp"
- :src="coupon.status === 'used' ? '/static/已使用盖章.png' : '/static/已过期盖章.png'"
- mode="aspectFit"
- ></image>
- </view>
-
- <!-- 右侧信息区域 -->
- <view class="coupon-right">
- <view class="coupon-title">{{ coupon.title }}</view>
- <view class="coupon-expire">有效期至 {{ coupon.expireDate }}</view>
-
- <!-- 使用按钮或状态 -->
- <view class="coupon-action">
- <uv-button
- v-if="coupon.status === 'available'"
- :customStyle="buttonStyle"
- text="去使用"
- @click="useCoupon(coupon)"
- ></uv-button>
- <view
- v-else
- class="coupon-status"
- :class="{
- 'used-status': coupon.status === 'used',
- 'expired-status': coupon.status === 'expired'
- }"
- >
- {{ coupon.status === 'used' ? '已使用' : '已过期' }}
- </view>
- </view>
-
-
- </view>
- </view>
-
- <!-- 空状态 -->
- <uv-empty
- v-if="currentCoupons.length === 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,
- 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'
- },
-
- // 优惠券数据
- coupons: {
- available: [
- {
- id: 1,
- title: '专属福利】20元红包',
- amount: 20,
- expireDate: '2026-04-28',
- status: 'available'
- },
- {
- id: 2,
- title: '专属福利】400元红包',
- amount: 400,
- expireDate: '2026-04-28',
- status: 'available'
- },
- {
- id: 3,
- title: '专属福利】400元红包',
- amount: 400,
- expireDate: '2026-04-28',
- status: 'available'
- },
- {
- id: 1,
- title: '专属福利】20元红包',
- amount: 20,
- expireDate: '2026-04-28',
- status: 'available'
- },
- {
- id: 2,
- title: '专属福利】400元红包',
- amount: 400,
- expireDate: '2026-04-28',
- status: 'available'
- },
- {
- id: 3,
- title: '专属福利】400元红包',
- amount: 400,
- expireDate: '2026-04-28',
- status: 'available'
- },
- ],
- used: [
- {
- id: 4,
- title: '专属福利】20元红包',
- amount: 20,
- expireDate: '2026-04-28',
- status: 'used'
- }
- ],
- expired: [
- {
- id: 5,
- title: '专属福利】20元红包',
- amount: 20,
- expireDate: '2026-04-28',
- status: 'expired'
- }
- ]
- }
- }
- },
-
- computed: {
- currentCoupons() {
- const statusMap = ['available', 'used', 'expired']
- return this.coupons[statusMap[this.currentTab]] || []
- }
- },
-
- methods: {
- onTabChange(index) {
- this.currentTab = index
- },
-
- useCoupon(coupon) {
- 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>
|