280 lines
6.8 KiB
Vue
280 lines
6.8 KiB
Vue
![]() |
<template>
|
|||
|
<view :data-theme="theme">
|
|||
|
<view class="navbar acea-row row-around">
|
|||
|
<view class="item acea-row row-center-wrapper" :class="{ on: navOn === 'usable' }" @click="onNav('usable')">
|
|||
|
未使用</view>
|
|||
|
<view class="item acea-row row-center-wrapper" :class="{ on: navOn === 'unusable' }"
|
|||
|
@click="onNav('unusable')">已使用/失效</view>
|
|||
|
</view>
|
|||
|
<view class="coupon-box">
|
|||
|
<view class='coupon-list' v-if="couponsList.length">
|
|||
|
<navigator url="/pages/activity/couponList/index" class="more-btn" hover-class="none">
|
|||
|
<view class="pic_box">
|
|||
|
<image :src="urlDomain + 'crmebimage/presets/my_coupon.png'" mode=""></image>
|
|||
|
</view>
|
|||
|
</navigator>
|
|||
|
|
|||
|
<view class='item acea-row row-center-wrapper' v-for='(item,index) in couponsList' :key="index"
|
|||
|
@click="goCouponsProList(item)">
|
|||
|
<view class='money'
|
|||
|
:class="item.validStr==='unusable'||item.validStr==='overdue' ? 'moneyGray' : 'main_bg'">
|
|||
|
<view class="logo">¥<text class='num'>{{item.money?Number(item.money):''}}</text></view>
|
|||
|
<view class="pic-num">满{{ Number(item.minPrice) }}元可用</view>
|
|||
|
</view>
|
|||
|
<view class='text'>
|
|||
|
<view class='condition acea-row'>
|
|||
|
<view class="line-title"
|
|||
|
:class="item.validStr==='unusable'||item.validStr==='overdue' ? 'bg-color-huic' : 'bg-color-check'">
|
|||
|
{{item.category | couponTypeFilter}}</view>
|
|||
|
|
|||
|
<view class="line2">{{item.name}}</view>
|
|||
|
</view>
|
|||
|
<view class='data acea-row row-between-wrapper'>
|
|||
|
<view v-if="item.startTime && item.endTime && navOn === 'usable'">
|
|||
|
{{$util.getCouponTime(item.startTime,item.endTime)}}</view>
|
|||
|
<view v-if="navOn === 'unusable'">
|
|||
|
<span v-show="item.validStr==='overdue'">该优惠券已失效无法使用</span>
|
|||
|
<span v-show="item.validStr==='unusable'">该优惠券已使用</span>
|
|||
|
</view>
|
|||
|
<span class="iconfont"
|
|||
|
:class="{'icon-yilingqu1':item.validStr==='usable'||item.validStr==='notStart',
|
|||
|
'icon-yishiyong':item.validStr==='unusable',
|
|||
|
'icon-yishixiao':item.validStr==='overdue',
|
|||
|
'font-color':item.validStr==='usable'||item.validStr==='notStart'
|
|||
|
}
|
|||
|
"></span>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view v-if="couponsList.length" class='loadingicon acea-row row-center-wrapper'>
|
|||
|
<text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>{{loadTitle}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class='noCommodity' v-if="!couponsList.length && !loading">
|
|||
|
<view class='pictrue'>
|
|||
|
<image :src="urlDomain + 'crmebimage/presets/noCoupon.png'"></image>
|
|||
|
<span class="coupon">暂无优惠券可使用哦~</span>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
import {
|
|||
|
getUserCoupons
|
|||
|
} from '@/api/api.js';
|
|||
|
import {
|
|||
|
toLogin
|
|||
|
} from '@/libs/login.js';
|
|||
|
import {
|
|||
|
mapGetters
|
|||
|
} from "vuex";
|
|||
|
let app = getApp();
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
urlDomain: this.$Cache.get("imgHost"),
|
|||
|
couponsList: [],
|
|||
|
loading: false,
|
|||
|
loadend: false,
|
|||
|
loadTitle: '加载更多', //提示语
|
|||
|
page: 1,
|
|||
|
limit: 20,
|
|||
|
navOn: 'usable',
|
|||
|
theme: app.globalData.theme,
|
|||
|
};
|
|||
|
},
|
|||
|
computed: mapGetters(['isLogin']),
|
|||
|
watch: {
|
|||
|
isLogin: {
|
|||
|
handler: function(newV, oldV) {
|
|||
|
if (newV) {
|
|||
|
this.getUseCoupons();
|
|||
|
}
|
|||
|
},
|
|||
|
deep: true
|
|||
|
}
|
|||
|
},
|
|||
|
onLoad() {
|
|||
|
if (this.isLogin) {
|
|||
|
this.getUseCoupons();
|
|||
|
} else {
|
|||
|
toLogin();
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
goCouponsProList(item) {
|
|||
|
if (this.navOn === 'usable') {
|
|||
|
uni.navigateTo({
|
|||
|
url: `/pages/goods/coupon_goods_list/index?type=2&userCouponId=${item.id}&money=${item.money}&minPrice=${item.minPrice}&isUserReceive=true`
|
|||
|
})
|
|||
|
}
|
|||
|
},
|
|||
|
onNav: function(type) {
|
|||
|
this.navOn = type;
|
|||
|
this.couponsList = [];
|
|||
|
this.page = 1;
|
|||
|
this.loadend = false;
|
|||
|
this.getUseCoupons();
|
|||
|
},
|
|||
|
/**
|
|||
|
* 获取领取优惠券列表
|
|||
|
*/
|
|||
|
getUseCoupons: function() {
|
|||
|
let that = this;
|
|||
|
if (this.loadend) return false;
|
|||
|
if (this.loading) return false;
|
|||
|
this.loading = true;
|
|||
|
getUserCoupons({
|
|||
|
page: that.page,
|
|||
|
limit: that.limit,
|
|||
|
type: that.navOn
|
|||
|
}).then(res => {
|
|||
|
let list = res.data ? res.data.list : [],
|
|||
|
loadend = list.length < that.limit;
|
|||
|
let couponsList = that.$util.SplitArray(list, that.couponsList);
|
|||
|
that.$set(that, 'couponsList', couponsList);
|
|||
|
that.loadend = loadend;
|
|||
|
that.loadTitle = loadend ? '我也是有底线的' : '加载更多';
|
|||
|
that.page = that.page + 1;
|
|||
|
that.loading = false;
|
|||
|
}).catch(err => {
|
|||
|
that.loading = false;
|
|||
|
that.loadTitle = '加载更多';
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
/**
|
|||
|
* 页面上拉触底事件的处理函数
|
|||
|
*/
|
|||
|
onReachBottom: function() {
|
|||
|
this.getUseCoupons();
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
.coupon-box {
|
|||
|
position: absolute;
|
|||
|
}
|
|||
|
|
|||
|
.navbar {
|
|||
|
position: fixed;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
width: 100%;
|
|||
|
height: 106rpx;
|
|||
|
background-color: #FFFFFF;
|
|||
|
z-index: 9;
|
|||
|
|
|||
|
.item {
|
|||
|
border-top: 5rpx solid transparent;
|
|||
|
border-bottom: 5rpx solid transparent;
|
|||
|
font-size: 30rpx;
|
|||
|
color: #999999;
|
|||
|
|
|||
|
&.on {
|
|||
|
@include tab_border_bottom(theme);
|
|||
|
@include main_color(theme);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
.money {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
justify-content: center;
|
|||
|
font-size: 20rpx !important;
|
|||
|
|
|||
|
.logo {
|
|||
|
font-size: 39rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.bg_color {
|
|||
|
@include main_bg_color(theme);
|
|||
|
}
|
|||
|
|
|||
|
.pic-num {
|
|||
|
color: #ffffff;
|
|||
|
font-size: 24rpx;
|
|||
|
}
|
|||
|
|
|||
|
.pic_box {
|
|||
|
width: 690rpx;
|
|||
|
height: 160rpx;
|
|||
|
margin: 30rpx auto;
|
|||
|
|
|||
|
image {
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.coupon-list {
|
|||
|
margin-top: 122rpx;
|
|||
|
}
|
|||
|
|
|||
|
.coupon-list .item {
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
|
|||
|
.coupon-list .item .text {
|
|||
|
height: 100%;
|
|||
|
position: relative;
|
|||
|
|
|||
|
.iconfont {
|
|||
|
right: -16rpx;
|
|||
|
position: absolute;
|
|||
|
font-size: 140rpx;
|
|||
|
bottom: -20rpx;
|
|||
|
z-index: 1;
|
|||
|
opacity: 0.15;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.coupon-list .item .text .data {
|
|||
|
border-top: 1px solid #f0f0f0;
|
|||
|
}
|
|||
|
|
|||
|
.bg-color-check {
|
|||
|
@include main_color(theme);
|
|||
|
@include coupons_border_color(theme);
|
|||
|
font-size: 20rpx !important;
|
|||
|
}
|
|||
|
|
|||
|
.noCommodity {
|
|||
|
margin-top: 64%;
|
|||
|
}
|
|||
|
|
|||
|
.main_bg {
|
|||
|
@include main_bg_color(theme);
|
|||
|
}
|
|||
|
|
|||
|
.pictrue {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
align-items: center;
|
|||
|
|
|||
|
img {
|
|||
|
width: 414rpx;
|
|||
|
height: 305rpx;
|
|||
|
}
|
|||
|
|
|||
|
.coupon {
|
|||
|
font-size: 26rpx;
|
|||
|
color: #999999;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|