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.

248 lines
6.2 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<!-- 优惠劵详情 -->
<template>
<view class="page_box">
<!-- 标题栏 -->
<shopro-navbar back-icon-color="#fff" :background="{}" :backTextStyle="{ color: '#fff', fontSize: '36rpx', fontWeight: '500' }" backText="优惠券详情"></shopro-navbar>
<view class="content_box">
<scroll-view class="scroll-box" scroll-y="true" scroll-with-animation enable-back-to-top :scroll-into-view="scrollId" @scroll="onScroll">
<!-- -->
<view class="coupon-box">
<view class="top u-flex-col u-col-center">
<view class="img-box u-flex u-row-center u-col-center"><image class="coupon-img" :src="$IMG_URL + '/imgs/coupon.png'" mode=""></image></view>
<view class="title">{{ couponDetail.amount || '0.00' }}元优惠券</view>
<view class="tip">{{ couponDetail.enough || '0.00' }}元可用</view>
<button class="u-reset-button" :class="['can_use', 'can_get'].includes(btnStataus) || !btnStataus ? 'use-btn' : 'fail-btn'" @tap="goScroll">
{{ btnStatusText[btnStataus] || '' }}
</button>
<view class="time" v-if="couponDetail.usetime && couponDetail.usetime.start">
有效期:{{ $u.timeFormat(couponDetail.usetime.start, 'yyyy-mm-dd') }} 至 {{ $u.timeFormat(couponDetail.usetime.end, 'yyyy-mm-dd') }}
</view>
<view class="coupon-line"></view>
</view>
<view class="bottom">
<view class="notice-item">
<view class="notice-title">优惠券说明</view>
<view class="notice-detail">{{ couponDetail.description || '暂无说明~' }}</view>
</view>
</view>
</view>
<!-- 适用商品 -->
<view class="coupon-goods u-p-30" v-if="couponGoods.length">
<view class="coupon-goods-title" id="couponGoods">适用商品</view>
<view class="goods-list u-m-b-20 u-p-20" v-for="goods in couponGoods" :key="goods.id">
<shopro-mini-card
:image="goods.image"
:title="goods.title"
:subtitle="goods.subtitle"
:price="goods.price"
:originPrice="goods.original_price"
@click="$Router.push({ path: '/pages/goods/detail', query: { id: goods.id } })"
></shopro-mini-card>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
export default {
components: {},
data() {
return {
couponDetail: {},
couponGoods: [],
scrollId: '',
nowTime: new Date().getTime(),
options: {},
btnStatusText: {
can_use: '立即使用',
used: '已使用',
expired: '已失效',
cannot_use: '暂不可用',
can_get: '立即领取',
cannot_get: '不可领取'
},
btnStataus: ''
};
},
computed: {},
onLoad() {
this.options = this.$Route.query;
this.getCouponDetail();
this.getCouponGoods();
},
methods: {
// 领取优惠劵
getCoupon() {
let that = this;
that.$http(
'coupons.get',
{
id: that.$Route.query.id
},
'领取中...'
).then(res => {
if (res.code === 1) {
this.options.userCouponId = res.data.id;
that.getCouponDetail();
that.$u.toast('领取成功')
}
});
},
// 优惠券详情
getCouponDetail() {
let that = this;
that.$http('coupons.detail', {
id: that.$Route.query.id,
user_coupons_id: that.options.userCouponId
}).then(res => {
if (res.code === 1) {
that.couponDetail = res.data;
if (res.data.status_code) {
this.btnStataus = res.data.status_code;
}
}
});
},
// 适用商品
getCouponGoods() {
let that = this;
that.$http('coupons.goods', {
id: that.$Route.query.id
}).then(res => {
if (res.code === 1) {
that.couponGoods = res.data.data;
}
});
},
onScroll() {
this.scrollId = '';
},
goScroll() {
if (!this.options.userCouponId) {
this.getCoupon();
} else {
if (this.couponDetail.goods_ids === '0' && this.btnStataus == 'can_use') {
this.$Router.push({
path: '/pages/goods/list'
});
}
this.scrollId = 'couponGoods';
}
}
}
};
</script>
<style lang="scss">
.page_box {
background: linear-gradient(180deg, rgba(240, 199, 133, 1), rgba(246, 214, 157, 1));
}
.coupon-box {
margin: 100rpx 30rpx 0;
border-radius: 20rpx;
background-color: #fff;
.top {
border-radius: 20rpx 20rpx 0 0;
background-image: radial-gradient(circle at bottom left, #f6d69d, #f6d69d 16rpx, transparent 17rpx),
radial-gradient(circle at bottom right, #f6d69d, #f6d69d 16rpx, transparent 17rpx);
padding: 110rpx 0 40rpx 0;
position: relative;
z-index: 5;
.coupon-line {
width: 95%;
border-bottom: 2rpx dashed #f3ce90;
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
z-index: 6;
}
.img-box {
width: 140rpx;
height: 140rpx;
border-radius: 50%;
background: #fff;
position: absolute;
left: 50%;
transform: translateX(-50%);
top: -70rpx;
.coupon-img {
width: 100rpx;
height: 100rpx;
}
}
.title {
font-size: 40rpx;
font-weight: bold;
line-height: 40rpx;
margin-bottom: 30rpx;
}
.tip {
font-size: 28rpx;
font-weight: 500;
margin-bottom: 50rpx;
}
.use-btn {
width: 386rpx;
line-height: 80rpx;
background: linear-gradient(90deg, rgba(240, 199, 133, 1), rgba(246, 214, 157, 1));
border-radius: 40rpx;
color: rgba(#fff, 0.9);
margin-bottom: 30rpx;
}
.fail-btn {
width: 386rpx;
line-height: 80rpx;
background: rgba(245, 245, 245, 1);
border-radius: 40rpx;
font-size: 30rpx;
font-weight: 500;
color: rgba(188, 188, 188, 1);
margin-bottom: 30rpx;
}
.time {
color: #999;
font-size: 26rpx;
}
}
.bottom {
border-radius: 0 0 20rpx 20rpx;
background-image: radial-gradient(circle at top left, #f6d69d, #f6d69d 16rpx, transparent 17rpx),
radial-gradient(circle at top right, #f6d69d, #f6d69d 16rpx, transparent 17rpx);
padding: 40rpx 30rpx;
.notice-item {
border-bottom: 1rpx solid #eeeeee;
min-height: 90rpx;
width: 100%;
.notice-title {
font-weight: 500;
font-size: 26rpx;
}
.notice-detail {
font-size: 24rpx;
color: #666;
margin-top: 10rpx;
padding-bottom: 10rpx;
text-indent: 30rpx;
}
}
}
}
//
.coupon-goods {
.coupon-goods-title {
font-size: 30rpx;
font-weight: bold;
height: 80rpx;
}
.goods-list {
background: #fff;
border-radius: 20rpx;
}
}
</style>