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.
 
 
 
 

272 lines
7.7 KiB

<template>
<view class="container">
<block v-if="isload">
<view class="coupon-list">
<view class="coupon-item flex al-item-center" :style="item.stock<=0?'color: #AAAAAA':'color:#0a5d3b'" v-for="(item, index) in datalist" :key="item.id" @tap.stop="goto" :data-url="'coupondetail?id=' + item.id">
<image class="coupon-item__bg" :src="item.stock<=0 ? event_rul + '/static/img/static/icon/couponed-bg.svg': (event_rul + '/static/img/static/icon/coupon-bg.svg')" mode=""></image>
<view class="coupon-item__hd flex al-item-center j-center">
<view class="coupon-item__hd-price" v-if="item.type==1"><text class="symbol">¥</text><text class="txt">{{item.money}}</text></view>
<view class="coupon-item__hd-txt" v-if="item.type==2">礼品券</view>
<view class="coupon-item__hd-price" v-if="item.type==3"><text class="txt">{{item.limit_count}}</text><text class="unit">次</text></view>
<view class="coupon-item__hd-txt" v-if="item.type==4">抵运费</view>
<view class="coupon-item__hd-price" v-if="item.type==5"><text class="symbol">¥</text><text class="txt">{{item.money}}</text></view>
<view class="coupon-item__hd-tips" v-if="item.type==1 || item.type==4 || item.type==5">
<text v-if="item.minprice>0">满{{item.minprice}}元可用</text>
<text v-else>无门槛</text>
</view>
</view>
<view class="coupon-item__bd flex j-between">
<view class="coupon-item__bd-title flex al-item-center" :style="item.stock<=0?'color: #AAAAAA':'color:#333333'">
<view class="coupon-item__bd-tag" :style="item.stock<=0?'color: #AAAAAA;border-color: #AAAAAA':'color:' + t('color1')">{{item.type==1?'代金券':(item.type==2?'礼品券':(item.type==3?'计次券':(item.type==4?'运费抵扣券':(item.type==5?'餐饮券':''))))}}</view>
{{item.name}}
</view>
<view class="coupon-item__bd-txt" :style="item.stock<=0?'color: #AAAAAA':'color:#999999'" v-if="item.bid>0">适用商家:{{item.bname}}</view>
<view class="coupon-item__bd-time">有效期至 {{item.yxqdate}}</view>
</view>
<view class="coupon-item__ft" v-if="item.haveget>=item.perlimit" @tap.stop="goto" :data-url="'/pages/shop/prolist?cpid=' + item.id" >
<view class="coupon-item__ft-txt">立即使用</view>
</view>
<view class="coupon-item__ft" v-else-if="item.stock<=0">
<view class="coupon-item__ft-txt">已抢光了</view>
</view>
<view class="coupon-item__ft" v-else @tap.stop="getcoupon" :data-id="item.id" :data-price="item.price" :data-score="item.score" :data-key="index">
<view class="coupon-item__ft-txt">{{item.price > 0 ? '立即购买' : (item.score>0?'立即兑换':'立即领取')}}</view>
</view>
</view>
</view>
<nodata v-if="nodata" :text="'暂无可领' + t('优惠券')"></nodata>
<nomore v-if="nomore"></nomore>
</block>
<loading v-if="loading"></loading>
<dp-tabbar :opt="opt"></dp-tabbar>
<popmsg ref="popmsg"></popmsg>
<!-- 悬浮按钮 -->
<drag-button></drag-button>
</view>
</template>
<script>
var app = getApp();
export default {
data() {
return {
opt:{},
loading:false,
isload: false,
menuindex:-1,
pre_url:app.globalData.pre_url,
nomore:false,
nodata:false,
datalist: [],
pagenum: 1,
title: '文章列表',
needAuth: 0,
authCanClose: false,
event_rul: app.globalData.event_url,
};
},
onLoad: function (opt) {
this.opt = app.getopts(opt);
this.getdata();
},
onPullDownRefresh: function () {
this.pagenum = 1;
this.datalist = [];
this.getdata();
},
onReachBottom: function () {
if (!this.nodata && !this.nomore) {
this.pagenum = this.pagenum + 1;
this.getdata();
}
},
methods: {
getdata: function () {
var that = this;
var pagenum = that.pagenum;
var st = that.st;
var bid = that.opt && (that.opt.bid || that.opt.bid === '0') ? that.opt.bid : '';
that.loading = true;
that.nomore = false;
that.nodata = false;
app.post('ApiCoupon/couponlist', {st: st,pagenum: pagenum,bid: bid}, function (res) {
that.loading = false;
var data = res.data;
if (pagenum == 1) {
that.datalist = data;
console.log("打印优惠券列表datalist",that.datalist)
if (data.length == 0) {
that.nodata = true;
}
}else{
if (data.length == 0) {
that.nomore = true;
} else {
var datalist = that.datalist;
var newdata = datalist.concat(data);
that.datalist = newdata;
}
}
that.loaded();
});
},
getcoupon: function (e) {
var that = this;
var datalist = that.datalist;
var id = e.currentTarget.dataset.id;
var score = parseInt(e.currentTarget.dataset.score);
var price = e.currentTarget.dataset.price;
if (price > 0) {
app.post('ApiCoupon/buycoupon', {id: id}, function (res) {
if(res.status == 0) {
app.error(res.msg);
} else {
app.goto('/pages/pay/pay?id=' + res.payorderid);
}
})
return;
}
var key = e.currentTarget.dataset.key;
if (score > 0) {
app.confirm('确定要消耗' + score + '' + that.t('积分') + '兑换吗?', function () {
app.showLoading('兑换中');
app.post('ApiCoupon/getcoupon', {id: id}, function (data) {
app.showLoading(false);
if (data.status == 0) {
app.error(data.msg);
} else {
app.success(data.msg);
datalist[key]['haveget'] = data.haveget;
that.datalist = datalist;
}
});
});
} else {
app.showLoading('领取中');
app.post('ApiCoupon/getcoupon', {id: id}, function (data) {
app.showLoading(false);
if (data.status == 0) {
app.error(data.msg);
} else {
app.success(data.msg);
datalist[key]['haveget'] = data.haveget;
that.datalist = datalist;
}
});
}
}
}
};
</script>
<style lang="scss">
.container {
background: #f5f5f5;
min-height: 100vh;
}
.coupon-list {
width: 100%;
padding: 6rpx;
}
.coupon-item {
display: flex;
position: relative;
z-index: 1;
height: 234rpx;
color: #0a5d3b;
&:not(:first-child) {
margin-top: -12rpx;
}
&__bg {
position: absolute;
z-index: -1;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
&__hd {
flex-shrink: 0;
flex-direction: column;
color: #ffffff;
width: 210rpx;
padding-left: 15rpx;
&-price {
font-size: 36rpx;
line-height: 50rpx;
font-weight: bold;
.txt {
font-size: 72rpx;
line-height: 100rpx;
}
.unit {
padding-left: 10rpx;
}
}
&-tips {
font-size: 24rpx;
line-height: 34rpx;
}
&-txt {
font-size: 46rpx;
font-weight: bold;
line-height: 58rpx;
}
}
&__bd {
flex: 1;
padding: 0 24rpx;
min-height: 125rpx;
flex-direction: column;
&-title {
font-size: 28rpx;
line-height: 40rpx;
color: #333333;
}
&-tag {
border-radius: 4rpx;
margin-right: 6rpx;
border: 1rpx solid #0a5d3b;
font-size: 22rpx;
font-weight: bold;
height: 32rpx;
line-height: 30rpx;
padding: 0 6rpx;
}
&-txt {
font-size: 22rpx;
color: #999999;
line-height: 32rpx;
margin-top: 16rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
text-align: justify;
white-space: pre-wrap;
word-break: break-all;
}
&-time {
margin-top: 10rpx;
font-size: 20rpx;
line-height: 28rpx;
}
}
&__ft {
padding: 0 50rpx 0 30rpx;
&-txt {
width: 20rpx;
font-size: 24rpx;
font-weight: bold;
line-height: 30rpx;
}
}
}
</style>