422 lines
15 KiB
Vue
422 lines
15 KiB
Vue
<template>
|
|
<div>
|
|
<headerNav title="我的优惠券"/>
|
|
<van-cell-group>
|
|
<van-field
|
|
center
|
|
clearable
|
|
placeholder="请输入优惠码"
|
|
|
|
v-model="couponCode"
|
|
>
|
|
<van-button slot="button" size="small" type="primary" :loading="exchangeLoading" @click="onExchange">兑换</van-button>
|
|
</van-field>
|
|
</van-cell-group>
|
|
<van-tabs >
|
|
<van-tab title="未使用">
|
|
<ul>
|
|
<van-list
|
|
v-model="unusedData.loading"
|
|
:finished="unusedData.finished"
|
|
@load="onLoad"
|
|
>
|
|
<li v-for="(item,index) in unusedData.list" :key="index" :class="'couponitem '+(item.show?'show':'') ">
|
|
<div class="couponTop">
|
|
<div class="cpnamount">
|
|
<div class="amountWrap">
|
|
<div class="amount" v-if="item.preferentialType === 1">
|
|
<span class="amountSign" >¥</span>
|
|
<span class="amountNum">{{item.priceOff / 100}}</span>
|
|
</div>
|
|
<div class="amount" v-else="item.preferentialType === 2">
|
|
<span class="amountNum">{{item.percentOff / 10.0}}</span>
|
|
<span class="amountSign">折</span>
|
|
</div>
|
|
<div class="condition">
|
|
<span>满 {{item.priceAvailable / 100.0}} 元可用</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="couponInfoWrap">
|
|
<div class="cpninfo">
|
|
<div class="detail">
|
|
<span class="name">{{item.title}}</span></div>
|
|
</div>
|
|
<div class="validity">
|
|
<span>{{item.validStartTime | formatDate('yyyy-MM-dd')}}
|
|
~ {{item.validEndTime | formatDate('yyyy-MM-dd')}}</span>
|
|
</div>
|
|
<van-button type="danger" size="mini">立即使用</van-button>
|
|
</div>
|
|
</div>
|
|
<!-- <div class="couponMid " v-if="item.Info!=''">-->
|
|
<!-- <span>详细信息</span>-->
|
|
<!-- <van-icon name="arrow" class="down" @click="onShowInfo(item.Id,index)" />-->
|
|
<!-- </div>-->
|
|
<!-- <div class="info" v-if="item.Info!=''" >-->
|
|
<!-- <div class="text">-->
|
|
<!-- {{item.Info}}-->
|
|
<!-- </div>-->
|
|
<!-- </div>-->
|
|
<!-- todo 芋艿,后续做优化。指定哪些商品 / 分类可用 -->
|
|
<div class="info" v-if="item.Info!=''" >
|
|
<div class="text">
|
|
{{item.Info}}
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</van-list>
|
|
</ul>
|
|
</van-tab>
|
|
<van-tab title="使用记录">
|
|
<ul class="gray" >
|
|
<van-list
|
|
v-model="usedData.loading"
|
|
:finished="usedData.finished"
|
|
@load="onLoadUse"
|
|
>
|
|
<li v-for="(item,index) in usedData.list" :key="index" class="couponitem">
|
|
<div class="couponTop">
|
|
<div class="cpnamount">
|
|
<div class="amountWrap">
|
|
<div class="amount" v-if="item.preferentialType === 1">
|
|
<span class="amountSign" >¥</span>
|
|
<span class="amountNum">{{item.priceOff / 100}}</span>
|
|
</div>
|
|
<div class="amount" v-else="item.preferentialType === 2">
|
|
<span class="amountNum">{{item.percentOff / 10.0}}</span>
|
|
<span class="amountSign">折</span>
|
|
</div>
|
|
<div class="condition">
|
|
<span>满 {{item.priceAvailable}} 元可用</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="couponInfoWrap">
|
|
<div class="cpninfo">
|
|
<div class="detail">
|
|
<span class="name">{{item.title}}</span></div>
|
|
</div>
|
|
<div class="validity">
|
|
<span>{{item.validStartTime | formatDate('yyyy-MM-dd')}}
|
|
~ {{item.validEndTime | formatDate('yyyy-MM-dd')}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</van-list>
|
|
</ul>
|
|
</van-tab>
|
|
<van-tab title="已过期">
|
|
<ul class="gray" >
|
|
|
|
<van-list
|
|
v-model="expireData.loading"
|
|
:finished="expireData.finished"
|
|
@load="onLoadEnd"
|
|
>
|
|
<li v-for="(item,index) in expireData.list" :key="index" class="couponitem">
|
|
<div class="couponTop">
|
|
<div class="cpnamount">
|
|
<div class="amountWrap">
|
|
<div class="amount" v-if="item.preferentialType === 1">
|
|
<span class="amountSign" >¥</span>
|
|
<span class="amountNum">{{item.priceOff / 100}}</span>
|
|
</div>
|
|
<div class="amount" v-else="item.preferentialType === 2">
|
|
<span class="amountNum">{{item.percentOff / 10.0}}</span>
|
|
<span class="amountSign">折</span>
|
|
</div>
|
|
<div class="condition">
|
|
<span>满 {{item.priceAvailable}} 元可用</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="couponInfoWrap">
|
|
<div class="cpninfo">
|
|
<div class="detail">
|
|
<span class="name">{{item.title}}</span></div>
|
|
</div>
|
|
<div class="validity">
|
|
<span>{{item.validStartTime | formatDate('yyyy-MM-dd')}}
|
|
~ {{item.validEndTime | formatDate('yyyy-MM-dd')}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</van-list>
|
|
</ul>
|
|
</van-tab>
|
|
</van-tabs>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { ExchangeCoupon } from "../../api/user.js";
|
|
import { getCouponPage } from "../../api/promotion.js";
|
|
|
|
export default {
|
|
components: {
|
|
},
|
|
data() {
|
|
return {
|
|
// loading:false,
|
|
// finished:false,
|
|
// list:[],
|
|
// page:0,
|
|
//
|
|
//
|
|
// useLoading:false,
|
|
// useFinished:false,
|
|
// useList:[],
|
|
// usePage:0,
|
|
//
|
|
//
|
|
// endLoading:false,
|
|
// endFinished:false,
|
|
// endList:[],
|
|
// endPage:0,
|
|
|
|
couponCode:'',
|
|
exchangeLoading:false,
|
|
|
|
unusedData: {
|
|
page: 0,
|
|
pageSize: 10,
|
|
list: [],
|
|
loading: false,
|
|
finished: false,
|
|
},
|
|
|
|
usedData: {
|
|
page: 0,
|
|
pageSize: 10,
|
|
list: [],
|
|
loading: false,
|
|
finished: false,
|
|
},
|
|
|
|
expireData: {
|
|
page: 0,
|
|
pageSize: 10,
|
|
list: [],
|
|
loading: false,
|
|
finished: false,
|
|
},
|
|
};
|
|
},
|
|
computed: {
|
|
},
|
|
methods: {
|
|
onLoad() {
|
|
// 进入下一页
|
|
let page = this.unusedData.page + 1;
|
|
getCouponPage(1, page, this.unusedData.pageSize).then(data => {
|
|
// debugger;
|
|
// 设置下页面
|
|
this.unusedData.page = page;
|
|
// 数据保存到 list 中
|
|
this.unusedData.list.push(...data.list);
|
|
// 判断页数
|
|
if (this.unusedData.list.length >= data.total) {
|
|
this.unusedData.finished = true;
|
|
}
|
|
// 标记不在加载中
|
|
this.unusedData.loading = false;
|
|
});
|
|
|
|
// GetCoupon({page:this.page}).then(response=>{
|
|
// response.List.forEach(item => {
|
|
// item.show=false;
|
|
// this.list.push(item);
|
|
// });
|
|
// this.loading = false;
|
|
// if(response.TotalPage<=this.page){
|
|
// this.finished = true;
|
|
// }
|
|
//
|
|
// })
|
|
},
|
|
// onShowInfo(id,index){
|
|
// this.list.forEach((item,itemIndex) => {
|
|
// if(index==itemIndex){
|
|
// item.show=!item.show;
|
|
// return;
|
|
// }
|
|
// });
|
|
// },
|
|
onLoadUse() {
|
|
// 进入下一页
|
|
let page = this.usedData.page + 1;
|
|
getCouponPage(2, page, this.usedData.pageSize).then(data => {
|
|
// debugger;
|
|
// 设置下页面
|
|
this.usedData.page = page;
|
|
// 数据保存到 list 中
|
|
this.usedData.list.push(...data.list);
|
|
// 判断页数
|
|
if (this.usedData.list.length >= data.total) {
|
|
this.usedData.finished = true;
|
|
}
|
|
// 标记不在加载中
|
|
this.usedData.loading = false;
|
|
});
|
|
},
|
|
onLoadEnd() {
|
|
// 进入下一页
|
|
let page = this.expireData.page + 1;
|
|
getCouponPage(3, page, this.expireData.pageSize).then(data => {
|
|
// debugger;
|
|
// 设置下页面
|
|
this.expireData.page = page;
|
|
// 数据保存到 list 中
|
|
this.expireData.list.push(...data.list);
|
|
// 判断页数
|
|
if (this.expireData.list.length >= data.total) {
|
|
this.expireData.finished = true;
|
|
}
|
|
// 标记不在加载中
|
|
this.expireData.loading = false;
|
|
});
|
|
},
|
|
onExchange(){
|
|
if(this.exchangeLoading){
|
|
return;
|
|
}
|
|
this.exchangeLoading=true;
|
|
ExchangeCoupon(this.couponCode).then(response=>{
|
|
this.$toast('兑换成功');
|
|
this.exchangeLoading=false;
|
|
this.$router.go(0);
|
|
})
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="less">
|
|
.couponitem {
|
|
padding: 0 10px;
|
|
margin-top: 10px;
|
|
position: relative;
|
|
font-size: 12px;
|
|
.couponTop {
|
|
background-color: #fcebeb;
|
|
border-left: 1px solid #f3d4d4;
|
|
border-right: 1px solid #f3d4d4;
|
|
border-bottom: 1px dashed #f3d4d4;
|
|
border-radius: 8px;
|
|
border-top-left-radius: 5px;
|
|
border-top-right-radius: 5px;
|
|
.cpnamount {
|
|
position: relative;
|
|
height: 90px;
|
|
width: 34.08%;
|
|
text-align: center;
|
|
float: left;
|
|
border-right: 1px dashed #f3d4d4;
|
|
}
|
|
.amountWrap {
|
|
width: 100%;
|
|
position: absolute;
|
|
top: 50%;
|
|
-webkit-transform: translate(0, -50%);
|
|
transform: translate(0, -50%);
|
|
.amount {
|
|
font-size: 15px;
|
|
.amountSign {
|
|
margin-right: 3px;
|
|
}
|
|
.amountNum {
|
|
font-size: 39px;
|
|
line-height: 1;
|
|
font-weight: bold;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.couponInfoWrap {
|
|
position: relative;
|
|
margin-left: 37.465%;
|
|
height: 90px;
|
|
.cpninfo {
|
|
position: absolute;
|
|
top: 26px;
|
|
-webkit-transform: translate(0, -50%);
|
|
transform: translate(0, -50%);
|
|
width: 100%;
|
|
.detail {
|
|
padding-right: 15px;
|
|
word-break: break-all;
|
|
.name {
|
|
font-size: 13px;
|
|
color: #000;
|
|
}
|
|
}
|
|
}
|
|
.validity {
|
|
position: absolute;
|
|
bottom: 16px;
|
|
font-size: 10px;
|
|
}
|
|
button{
|
|
right: 16px;
|
|
position: absolute;
|
|
bottom: 16px;
|
|
}
|
|
}
|
|
.couponMid {
|
|
position: relative;
|
|
height: 31px;
|
|
line-height: 31px;
|
|
padding-left: 16px;
|
|
font-size: 12px;
|
|
|
|
background-color: #fcebeb;
|
|
border-left: 1px solid #f3d4d4;
|
|
border-right: 1px solid #f3d4d4;
|
|
border-bottom: 1px solid #f3d4d4;
|
|
border-radius: 8px;
|
|
border-bottom-left-radius: 5px;
|
|
border-bottom-right-radius: 5px;
|
|
i{
|
|
right: 16px;
|
|
position: absolute;
|
|
top: 8px;
|
|
-webkit-transform: rotate(90deg);
|
|
transform: rotate(90deg);
|
|
}
|
|
}
|
|
|
|
.info{
|
|
display: none;
|
|
background-color: #fcebeb;
|
|
border-left: 1px solid #f3d4d4;
|
|
border-right: 1px solid #f3d4d4;
|
|
border-bottom: 1px solid #f3d4d4;
|
|
border-bottom-left-radius: 8px;
|
|
border-bottom-right-radius: 8px;
|
|
padding: 10px 25px 12px 15px;
|
|
font-size: 12px;
|
|
}
|
|
}
|
|
.show{
|
|
|
|
.couponMid {
|
|
border-bottom: 1px dashed #f3d4d4;
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
i{
|
|
-webkit-transform: rotate(-90deg);
|
|
transform: rotate(-90deg);
|
|
}
|
|
}
|
|
.info{
|
|
display: block;
|
|
}
|
|
}
|
|
.gray{
|
|
-webkit-filter: grayscale(100%);filter:progid:DXImageTransform.Microsoft.BasicImage(graysale=1);
|
|
}
|
|
</style>
|