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.
255 lines
5.6 KiB
255 lines
5.6 KiB
<template>
|
|
<view v-show="!isSortType" :style="{padding:'0 '+prConfig*2+'rpx'}">
|
|
<view class="coupon" :class="bgStyle===0?'':'borderRadius15'" :style="'background-color:'+bgColor+';margin-top:' + mbConfig*2 +'rpx;'" v-if="couponList.length">
|
|
<scroll-view scroll-x="true" style="white-space: nowrap; vertical-align: middle;" show-scrollbar="false">
|
|
|
|
<view class="wrapper">
|
|
|
|
<view class="item" :style="item.is_use?'':'background-color:'+ themeColor +';'" style="margin-right: 20rpx;" v-for="(item,index) in couponList"
|
|
:key="index" hover-class="none">
|
|
<view class="itemCon acea-row row-between-wrapper">
|
|
<view class="text">
|
|
<view class="money"><text>{{$t(`¥`)}}</text>{{item.coupon_price}}</view>
|
|
<view class="info">{{$t(`满`)}}{{item.use_min_price}}{{$t(`元可用`)}}</view>
|
|
</view>
|
|
<view class="bnt" v-if="item.is_use==1"><text>{{$t(`已领取`)}}</text></view>
|
|
<view class="bnt" v-else-if="!item.is_use" @click="receiveCoupon(item)"><text>{{$t(`立即领取`)}}</text></view>
|
|
<view class="bnt" v-else-if="item.is_use==2"><text>{{$t(`已过期`)}}</text></view>
|
|
</view>
|
|
<view class="roll up-roll" :style="{background:bgColor}"></view>
|
|
<view class="roll down-roll" :style="{background:bgColor}"></view>
|
|
</view>
|
|
<navigator url="/pages/users/user_get_coupon/index" class="more-box" hover-class="none">
|
|
<view class="txt">{{$t(`更多`)}}</view>
|
|
<image src="/static/images/mores.png"></image>
|
|
</navigator>
|
|
</view>
|
|
</scroll-view>
|
|
<!-- #ifdef MP -->
|
|
<!-- <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse" :isGoIndex="false"></authorize> -->
|
|
<!-- #endif -->
|
|
</view>
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getCoupons,
|
|
setCouponReceive
|
|
} from '@/api/api.js';
|
|
// #ifdef MP
|
|
import authorize from '@/components/Authorize';
|
|
// #endif
|
|
import {
|
|
mapGetters
|
|
} from "vuex";
|
|
import {
|
|
toLogin
|
|
} from '@/libs/login.js';
|
|
export default {
|
|
name: 'coupon',
|
|
props: {
|
|
dataConfig: {
|
|
type: Object,
|
|
default: () => {}
|
|
},
|
|
isSortType:{
|
|
type: String | Number,
|
|
default:0
|
|
}
|
|
},
|
|
computed: mapGetters(['isLogin']),
|
|
components: {
|
|
// #ifdef MP
|
|
authorize
|
|
// #endif
|
|
},
|
|
watch:{
|
|
isLogin:{
|
|
handler:function(newV,oldV){
|
|
if(newV){
|
|
this.getCoupon();
|
|
}
|
|
},
|
|
deep:true
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
isAuto: false, //没有授权的不会自动授权
|
|
isShowAuth: false, //是否隐藏授权
|
|
couponList: [],
|
|
bgColor: this.dataConfig.bgColor.color[0].item,
|
|
themeColor: this.dataConfig.themeColor.color[0].item,
|
|
mbConfig: this.dataConfig.mbConfig.val,
|
|
bgStyle: this.dataConfig.bgStyle.type,
|
|
prConfig: this.dataConfig.prConfig.val
|
|
};
|
|
},
|
|
created() {},
|
|
mounted() {
|
|
this.getCoupon();
|
|
},
|
|
methods: {
|
|
getCoupon: function() {
|
|
let that = this;
|
|
let limit = that.$config.LIMIT;
|
|
getCoupons({
|
|
page: 1,
|
|
limit: limit,
|
|
type: -1
|
|
}).then(res => {
|
|
that.$set(that, 'couponList', res.data.list);
|
|
}).catch(err => {
|
|
return that.$util.Tips({
|
|
title: err
|
|
});
|
|
});
|
|
},
|
|
receiveCoupon: function(item) {
|
|
let that = this;
|
|
if (!that.isLogin) {
|
|
toLogin();
|
|
} else {
|
|
setCouponReceive(item.id)
|
|
.then(function() {
|
|
item.is_use = true;
|
|
that.$set(that, 'couponList', that.couponList);
|
|
that.$util.Tips({
|
|
title: that.$t(`领取成功`)
|
|
});
|
|
})
|
|
.catch(function(err) {
|
|
that.$util.Tips({
|
|
title: err
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.coupon {
|
|
background-color: #fff;
|
|
padding: 20rpx;
|
|
|
|
.item {
|
|
display: flex;
|
|
width: 304rpx;
|
|
height: 122rpx;
|
|
background-color: #DDDDDD;
|
|
border-radius: 8rpx;
|
|
color: #fff;
|
|
position: relative;
|
|
display: inline-block;
|
|
flex-shrink: 0;
|
|
.roll{
|
|
position: absolute;
|
|
width: 20rpx;
|
|
height: 20rpx;
|
|
border-radius: 50%;
|
|
background: #fff;
|
|
&.up-roll{
|
|
right: 52rpx;
|
|
top: -10rpx;
|
|
}
|
|
&.down-roll{
|
|
right: 52rpx;
|
|
bottom: -10rpx;
|
|
}
|
|
}
|
|
// &::before {
|
|
// position: absolute;
|
|
// content: ' ';
|
|
// width: 20rpx;
|
|
// height: 20rpx;
|
|
// border-radius: 50%;
|
|
// background-color: #fff;
|
|
// right: 52rpx;
|
|
// top: -10rpx;
|
|
// }
|
|
|
|
// &::after {
|
|
// position: absolute;
|
|
// content: ' ';
|
|
// width: 20rpx;
|
|
// height: 20rpx;
|
|
// border-radius: 50%;
|
|
// background-color: #fff;
|
|
// right: 52rpx;
|
|
// bottom: -10rpx;
|
|
// }
|
|
|
|
.itemCon {
|
|
height: 100%;
|
|
width: 100%;
|
|
|
|
.text {
|
|
width: 240rpx;
|
|
|
|
.money {
|
|
font-size: 48rpx;
|
|
text-align: center;
|
|
|
|
text {
|
|
font-size: 24rpx;
|
|
}
|
|
}
|
|
|
|
.info {
|
|
font-size: 24rpx;
|
|
text-align: center;
|
|
}
|
|
}
|
|
|
|
.bnt {
|
|
position: relative;
|
|
height: 100%;
|
|
font-size: 20rpx;
|
|
display: block;
|
|
writing-mode: vertical-lr;
|
|
line-height: 1.2;
|
|
width: 64rpx;
|
|
border-left: 1px dashed #fff;
|
|
text{
|
|
position: absolute;
|
|
left: 56%;
|
|
top: 50%;
|
|
transform: translate(-50%,-50%);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.wrapper {
|
|
display: flex;
|
|
}
|
|
|
|
.more-box {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background-color: #fff;
|
|
border-radius: 16rpx;
|
|
padding: 0 10px;
|
|
height: 122rpx;
|
|
image {
|
|
width: 20rpx;
|
|
height: 20rpx;
|
|
margin-top: 10rpx;
|
|
margin: 10rpx 0 0 5rpx;
|
|
}
|
|
|
|
.txt {
|
|
display: block;
|
|
writing-mode: vertical-lr;
|
|
font-size: 20rpx;
|
|
line-height: 1.2;
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|