|
|
- <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>
|