敢为人鲜小程序前端代码仓库
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.
 
 
 

226 lines
7.1 KiB

<template>
<view class="new-coupon-popup">
<uv-popup ref="popup" @change="change" min-height="400rpx" closeable :z-index="999999">
<view class="coupon-content">
<text class="coupon-title">优惠券列表</text>
<view class="coupon-list">
<view class="coupon-item" v-for="item in couponList" :key="item.id">
<view class="coupon-left">
<view class="coupon-amount">
<text class="amount-symbol">¥</text>
<text class="amount-value">{{item.amount}}</text>
</view>
<view class="coupon-info">
<text class="coupon-name">{{item.title}}</text>
<text class="coupon-type">{{item.type_dictText}}</text>
<text class="coupon-desc">{{item.remark}}</text>
</view>
</view>
<view class="coupon-right">
<view class="fetch-btn" hover-class="fetch-btn-hover" @click="fetchCoupon(item.id)">
<text class="fetch-btn-text">领取</text>
</view>
</view>
</view>
</view>
</view>
</uv-popup>
</view>
</template>
<script>
export default {
name: 'NewCouponPopup',
data() {
return {
couponList: []
}
},
mounted() {
if (uni.getStorageSync('token')){
this.getCouponList()
}
},
methods: {
getCouponList() {
this.$api('queryFetchCouponList', {}, res => {
if (res.code === 200 && res.result.length > 0){
this.couponList = res.result
this.$refs.popup.open()
}
})
},
fetchCoupon(id) {
this.$api('fetchCoupon', {
couponId: id
}, res => {
uni.showToast({
title: `${res.message}`,
icon: 'success'
})
this.$refs.popup.close();
})
},
change(e) {
if(!e) {
this.$emit('close')
}
}
}
}
</script>
<style lang="scss">
.coupon-content{
padding: 40rpx 20rpx;
background-color: #fff;
border-radius: 20rpx;
display: flex;
flex-direction: column;
align-items: center;
gap: 40rpx;
position: relative;
.coupon-title{
color: black;
text-align: center;
font-size: 36rpx;
font-weight: 600;
margin-bottom: 10rpx;
}
.coupon-list{
display: flex;
flex-direction: column;
align-items: center;
gap: 20rpx;
width: 100%;
.coupon-item{
width: 80vw;
height: 180rpx;
background: linear-gradient(135deg, $uni-color, #ff8a8a);
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20rpx;
position: relative;
box-shadow: 0 6rpx 12rpx rgba(255, 99, 99, 0.2);
overflow: hidden;
&::before {
content: '';
position: absolute;
left: -15rpx;
top: 50%;
transform: translateY(-50%);
width: 30rpx;
height: 30rpx;
background-color: #fff;
border-radius: 50%;
}
&::after {
content: '';
position: absolute;
right: -15rpx;
top: 50%;
transform: translateY(-50%);
width: 30rpx;
height: 30rpx;
background-color: #fff;
border-radius: 50%;
}
.coupon-left {
display: flex;
align-items: center;
gap: 20rpx;
.coupon-amount {
display: flex;
align-items: baseline;
color: #fff;
.amount-symbol {
font-size: 28rpx;
font-weight: bold;
}
.amount-value {
font-size: 48rpx;
font-weight: bold;
}
}
.coupon-info {
display: flex;
flex-direction: column;
.coupon-name {
font-size: 32rpx;
color: #fff;
font-weight: 600;
margin-bottom: 4rpx;
}
.coupon-type {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.9);
background-color: rgba(255, 255, 255, 0.2);
padding: 2rpx 10rpx;
border-radius: 10rpx;
display: inline-block;
margin-bottom: 6rpx;
}
.coupon-desc {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.8);
}
}
}
.coupon-right {
.fetch-btn {
width: 120rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.9);
border-radius: 30rpx;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.5), transparent);
transform: translateX(-100%);
transition: transform 0.6s;
}
&:active::before {
transform: translateX(100%);
}
.fetch-btn-text {
color: $uni-color;
font-size: 26rpx;
font-weight: bold;
}
}
.fetch-btn-hover {
transform: scale(0.95);
opacity: 0.9;
}
}
}
}
}
</style>