真食物配套的电商小程序.
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.
 
 
 

330 lines
9.1 KiB

<template>
<view ref="container">
<view class="header">
<cu-custom :isBack="true" :isCenter="true">
<block slot="backText">
<view class="backImg">
<image src="@/static/images/back-btn.png" mode=""></image>
</view>
</block>
<block slot="content">
<view class="tab-title">我的券包</view>
</block>
</cu-custom>
</view>
<view class="content" :style="'min-height:calc(100vh - '+CustomBar+'px);'">
<view class="nav-box" :style="'top:calc('+CustomBar+'px)'">
<view class="nav acea-row row-around">
<view class="item" @click="setType(0)">
<view :class="'title ' + (navType == 0? 'active' : '')">待领取</view>
</view>
<view class="item" @click="setType(1)">
<view :class="'title ' + (navType === 1 ? 'active' : '')">已领取</view>
</view>
<view class="item" @click="setType(2)">
<view :class="'title acea-row row-middle ' + (navType === 2 ? 'active' : '')">已失效</view>
</view>
</view>
</view>
<view class="coupon-list" v-if="couponsList.length > 0">
<view class="item acea-row row-between" v-cloak v-for="(item, index) in couponsList" :key="index">
<image class="coupon-bg" src="@/static/images/coupon-bg.png" mode=""></image>
<view class="coupon-left">
<view class="left-bg acea-row"
:style="item._msg == '已过期'?'background: linear-gradient(135deg, #D4D4D4 0%, #B4B4B4 100%);':''">
<view class="radiusLT"></view>
<view class="radiusRT"></view>
<view class="radiusLB"></view>
<view class="radiusRB"></view>
</view>
<image class="coupon-pattern" src="@/static/images/coupon-pattern.png" mode=""></image>
<view class="text-box">
<view class="money">¥{{ item.couponPrice }}</view>
<!-- <view class="money">7<text></text></view> -->
<view class="line"></view>
<view class="tip acea-row row-between">
<view class="">仅限定品牌可用</view>
<view v-if="item.endTime === 0">不限时</view>
<view v-else>{{navType===0? item.startTime : item.useStartTime }}-{{navType===0? item.endTime:item.useEndTime}}</view>
</view>
</view>
</view>
<view class="coupon-right acea-row row-center-column">
<image v-if="item._msg == '已过期'" class="tag"
src="../../../../static/images/failure-icon.png" mode=""></image>
<image v-else-if="item.isUse" class="tag" src="../../../../static/images/gotCoupon-icon.png" mode="">
<image v-else-if="item._msg=='可使用'" class="tag" src="../../../../static/images/gotCoupon-icon.png" mode="">
</image>
<view :class="'type '+(item._msg == '已过期'?'col-fail':'')">{{'满减券' || '折扣券'}}</view>
<view :class="'tip '+(item._msg == '已过期'?'col-fail':'')">满{{ item.useMinPrice }}可用</view>
<view v-if="item._msg == '已过期'" class="btn btn-fail">不可用</view>
<view v-else class="btn" @click="getCoupon(item.id,index)">{{navType===0 && item.isUse? '已领取' : (navType===0 ?'立刻领取' :'去使用')}}</view>
<!-- <view class="btn btn-white">去使用</view> -->
</view>
<!-- <div class="money" :class="item._type === 0 ? 'moneyGray' : ''">
<div>
¥<span class="num">{{ item.couponPrice }}</span>
</div>
<div class="pic-num">满{{ item.useMinPrice }}元可用</div>
</div>
<div class="text">
<div class="condition line1">{{ item.couponTitle }}</div>
<div class="data acea-row row-between-wrapper">
<div v-if="item.endTime === 0">不限时</div>
<div v-else>{{ item.createTime }}-{{ item.endTime }}</div>
<div class="bnt gray" v-if="item._type === 0">{{ item._msg }}</div>
<div class="bnt bg-color-red" v-else>{{ item._msg }}</div>
</div>
</div> -->
</view>
</view>
<!--暂无优惠券-->
<view class="noCommodity" v-if="couponsList.length === 0 && loading === false" style="padding-top:208rpx;">
<view class="noPictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/noCoupon.png`" class="image" />
</view>
</view>
</view>
</view>
</template>
<script>
import {
getCouponsUser,
getCouponReceive,
getCanReceive,
getUserFailure
} from '@/api/user'
import DataFormatT from '@/components/DataFormatT'
const NAME = 'UserCoupon'
export default {
name: 'UserCoupon',
components: {
DataFormatT,
},
props: {},
data: function() {
return {
CustomBar: this.CustomBar,
navType: 0,
couponsList: [],
loading: false,
page: 1,
limit: 10,
}
},
watch: {
$yroute: function(n) {
var that = this
if (n.name === NAME) {
that.getUseCoupons()
}
},
},
mounted: function() {
this.getUseCoupons(0)
},
methods: {
setType(i) {
if (this.navType == i) return;
this.navType = i;
this.couponsList=[];
this.page= 1,
this.limit= 10,
this.getUseCoupons(i);
},
// 领取
getCoupon: function(id, index) {
let that = this
if(that.navType===2) return
if(that.navType===1){
that.$yrouter.push({
path: '/pages/shop/brands/index',
})
return
}
let list = that.couponsList
getCouponReceive(id)
.then(function(res) {
list[index].isUse = true
uni.showToast({
title: '领取成功',
icon: 'success',
duration: 2000,
})
})
.catch(function(err) {
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: 'none',
duration: 2000,
})
})
},
getUseCoupons: function(i) {
if (this.loading) return //阻止下次请求(false可以进行请求);
// if (this.loadend) return //阻止结束当前请求(false可以进行请求);
this.loading = true
let q = {
page: this.page,
limit: this.limit
}
let type = 0
if (i === 1) {
// 用户已领取列表
getCouponsUser(type).then(res => {
this.couponsList = res.data
this.loading = false
})
}else if(i===0){
getCanReceive(q).then(res => {
res.data.forEach(item=>{
if(!item.isUse){
this.couponsList.push(item)
}
})
this.loading = false
this.page = this.page + 1
})
}else{
getUserFailure().then(res=>{
res.data.forEach(item=>{
let futureDate=new Date(item.useEndTime).getTime()
let currentDate=new Date().getTime()
if(futureDate<currentDate){
this.couponsList.push(item)
}
})
this.loading = false
})
}
},
// getUseCoupons: function(i) {
// if (this.loading) return //阻止下次请求false可以进行请求
// // if (this.loadend) return //阻止结束当前请求false可以进行请求
// this.loading = true
// let q = {
// page: this.page,
// limit: this.limit
// }
// let type = 0
// if (i === 1) {
// // 用户已领取列表
// getCouponsUser(type).then(res => {
// this.couponsList = res.data
// this.loading = false
// })
// }else if(i===0){
// getCoupon(q).then(res => {
// res.data.forEach(item=>{
// if(!item.isUse){
// this.couponsList.push(item)
// }
// })
// this.loading = false
// this.page = this.page + 1
// })
// }else{
// this.loading = false
// }
// },
},
}
</script>
<style lang="less" scoped>
.header {
.tab-title {
font-size: 32rpx;
font-family: PingFang SC;
font-weight: 600;
color: #2DB5AE;
line-height: 42rpx;
}
.backImg {
width: 88rpx;
height: 62rpx;
padding-left: 26rpx;
image {
width: 100%;
height: 100%;
}
}
}
.content {
width: 100%;
height: 100%;
overflow-y: scroll;
background: #FFFFFF;
border-radius: 28rpx 28rpx 0rpx 0rpx;
.nav-box {
width: 100vw;
padding-top: 4rpx;
position: fixed;
left: 0;
z-index: 5;
background: #F1F1F1;
}
.nav {
width: 100vw;
background: #FFFFFF;
height: 88rpx;
padding: 34rpx 52rpx 12rpx;
border-radius: 28rpx 28rpx 0rpx 0rpx;
.item {
text-align: center;
position: relative;
.title {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #3A3A3C;
line-height: 38rpx;
}
.active {
color: #2DB5AE;
font-weight: 600;
}
.title::after {
display: block;
content: '';
width: 100%;
height: 2rpx;
background: #2DB5AE;
position: absolute;
bottom: 0;
left: 0;
opacity: 0;
transform: scaleX(0);
transition: all .2s cubic-bezier(.18, .89, .17, .88), opacity .15s ease;
}
.active::after {
opacity: 1;
transform: scaleX(1);
}
}
}
.coupon-list {
padding-top: 104rpx;
}
}
</style>