From 41426416bd250130129fb8a547bee874375768a8 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期四, 14 十一月 2024 09:47:15 +0800 Subject: [PATCH] 1.付款:改成15分钟,并使用服务器时间进行倒计时 2.优惠券中心:已经领取(达到最大次数),显示已领取且置灰,未领取根据创建时间放前面,已领取根据首次时间正序排序 3.购物车-提交订单:自动根据订单金额选择合适优惠券 --- sub_pages/customer/coupon/coupon-all.vue | 18 +++++- sub_pages/customer/shopping/shopping.vue | 1 sub_pages/customer/coupon/coupon-self.vue | 7 ++ sub_pages/customer/shopping/confirm.vue | 81 +++++++++++++++++++++++++-- pages/order/order.vue | 29 ++++++++- pages/order/order-detail.vue | 23 ++++++- store/index.js | 9 +++ 7 files changed, 149 insertions(+), 19 deletions(-) diff --git a/pages/order/order-detail.vue b/pages/order/order-detail.vue index 465a721..cbc4434 100644 --- a/pages/order/order-detail.vue +++ b/pages/order/order-detail.vue @@ -45,9 +45,17 @@ if (this.dto.statusBackend === 'PENDING' || this.dto.status === 'PENDING') { - this.timer = setInterval(() => { + this.timer = setInterval(async () => { + //倒计时,修改成 + // var nowdate = new Date().getTime() - 1000 * 60 * 15 + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; + //倒计时 - var nowdate = new Date().getTime() - 1000 * 60 * 5 + var nowdate = serverTime - 1000 * 60 * 15 + var change = false //计算倒计时 @@ -74,7 +82,9 @@ } else { tt = alltime } - this.dto.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + // this.dto.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + this.dto.bctime = `${parseInt(alltime / 60) < 10 ? '0' : ''}${parseInt(alltime / 60)}:${tt < 10 ? '0' : ''}${tt}` + change = true } @@ -187,8 +197,13 @@ // }] } if (this.dto.statusBackend === 'PENDING') { + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; //先判断要不要字节变成已取消 - var nowdate = new Date().getTime() - 1000 * 60 * 5 + var nowdate = serverTime - 1000 * 60 * 15 + // var nowdate = new Date().getTime() - 1000 * 60 * 5 var diff = new Date(this.dto.createTime).getTime() - nowdate if (diff <= 2000 && true) { diff --git a/pages/order/order.vue b/pages/order/order.vue index 2ad53ae..3a628f1 100644 --- a/pages/order/order.vue +++ b/pages/order/order.vue @@ -46,13 +46,22 @@ this.query.status = options.status || '' this.listApi = `/api/customer/order/list` await this.getList() - this.timer = setInterval(() => { + + this.timer = setInterval(async () => { + + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; + //倒计时 - var nowdate = new Date().getTime() - 1000 * 60 * 5 + var nowdate = serverTime - 1000 * 60 * 15 + // var nowdate = new Date().getTime() - 1000 * 60 * 5 var change = false for (var item of this.list) { if (item.statusBackend === 'PENDING') { //计算倒计时 + var diff = new Date(item.createTime).getTime() - nowdate // console.log('diff', diff, item) if (diff <= 2000 && true) { @@ -74,7 +83,8 @@ } else { tt = alltime } - item.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + // item.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + item.bctime = `${parseInt(alltime / 60) < 10 ? '0' : ''}${parseInt(alltime / 60)}:${tt < 10 ? '0' : ''}${tt}` change = true } @@ -136,8 +146,17 @@ url: `/sub_pages/customer/trade/detail?id=${item.flowerId}` }) }, - getList_after() { - var nowdate = new Date().getTime() - 1000 * 60 * 5 + async getList_after() { + + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; + + //倒计时 + var nowdate = serverTime - 1000 * 60 * 15 + + // var nowdate = new Date().getTime() - 1000 * 60 * 15 var change = false for (var item of this.list) { if (item.statusBackend === 'PENDING') { diff --git a/store/index.js b/store/index.js index 59b090f..7ebfdfd 100644 --- a/store/index.js +++ b/store/index.js @@ -38,6 +38,7 @@ cache: { coupon: {}, goods:[], + cache_coupon_select_cancel:0 }, defaultaddress: {}, addressDesc:'', @@ -138,6 +139,14 @@ }, dto) { state.cache['coupon'] = dto || {} }, + + cache_coupon_select_cancel: async function({ + commit, + state + }, val) { + state.cache['cache_coupon_select_cancel'] = val || 0 + }, + cache_goods_select: async function({ commit, state diff --git a/sub_pages/customer/coupon/coupon-all.vue b/sub_pages/customer/coupon/coupon-all.vue index fb37cb1..02616b6 100644 --- a/sub_pages/customer/coupon/coupon-all.vue +++ b/sub_pages/customer/coupon/coupon-all.vue @@ -3,7 +3,7 @@ <view class=""> <no-data v-if="!list||list.length==0" style="width: 100%;"></no-data> - <view v-for="(item,index) of list" :key="index" class="coupont-item all"> + <view v-for="(item,index) of list" :key="index" class="coupont-item all" :class="[item.getYetFlag]"> <view class="flex container img100"> <view class="info-price"> <view class="price1"> @@ -18,8 +18,11 @@ <view class="time"> 领取后{{item.usageTimeNum||''}}{{item.usageTimeTypeName||''}}有效 </view> - <view class="button" @click="getCoupon(item)"> + <view v-if="!item.getYetFlag" class="button" @click="getCoupon(item)"> 立即领取 + </view> + <view v-else class="button" > + 已领取 </view> </view> </view> @@ -79,5 +82,14 @@ <style lang="scss" scoped> @import './coupon.scss'; - .coupon-container {} + .coupon-container { + + .coupont-item.true { + filter: grayscale(100%); + + .img-has { + display: unset; + } + } + } </style> \ No newline at end of file diff --git a/sub_pages/customer/coupon/coupon-self.vue b/sub_pages/customer/coupon/coupon-self.vue index 7db99a3..669b809 100644 --- a/sub_pages/customer/coupon/coupon-self.vue +++ b/sub_pages/customer/coupon/coupon-self.vue @@ -41,7 +41,7 @@ </view> - . + </view> <view class="tip"> <span @@ -119,6 +119,7 @@ if (this.cache_coupon.id === item.id) { await this.$message.confirm('是否取消使用此优惠券') await this.$store.dispatch('cache_coupon_select', {}) + await this.$store.dispatch('cache_coupon_select_cancel', 1) uni.navigateBack() return } @@ -150,6 +151,7 @@ } } await this.$store.dispatch('cache_coupon_select', item) + await this.$store.dispatch('cache_coupon_select_cancel', 0) uni.navigateBack() } }, @@ -184,6 +186,9 @@ cache_goods: state => { return state.cache.goods || [] }, + cache_coupon_select_cancel: state => { + return state.cache.cache_coupon_select_cancel==1?1:0 + }, }), } } diff --git a/sub_pages/customer/shopping/confirm.vue b/sub_pages/customer/shopping/confirm.vue index a86ff82..bed5b0a 100644 --- a/sub_pages/customer/shopping/confirm.vue +++ b/sub_pages/customer/shopping/confirm.vue @@ -17,9 +17,50 @@ cache_goods: state => { return state.cache.goods || [] }, + cache_coupon_select_cancel: state => { + return state.cache.cache_coupon_select_cancel==1?1:0 + }, }), coupon_fee() { //优惠券 + // 查看当前有没有优惠券 + if(!this.dto.couponRecordId || !this.cache_coupon ){ + // 根据优惠券的列表,查找到最合适的优惠券 + // 遍历优惠券的使用金额大于当前金额的,获取面值最大的优惠券取最大值couponDiscountValue + var total = (this.dto.totalMemberAmount || this.dto.totalAmount || 0).toFixed(2) + if(total && total>0){ + // 获取当前用户最合适的优惠券 + let res= this.$http.request('get', '/api/v2/coupon/app/mine/unused/fit', { + params: {orderAmount:total} + }).then(async res => { + let tmpCoupon = res.data; + if (tmpCoupon) { + if(this.cache_coupon_select_cancel==0){ + console.log("自动为您选择优惠最大的优惠券") + await this.$store.dispatch('cache_coupon_select', tmpCoupon); + this.dto.couponRecordId = tmpCoupon.id; + this.dto.couponRecordStr = tmpCoupon.couponName; + setTimeout(() => { + this.$message.showToast('自动为您选择优惠最大的优惠券') + }, 2000) + + }else{ + console.log("清空") + await this.$store.dispatch('cache_coupon_select', {}); + this.dto.couponRecordId =""; + this.dto.couponRecordStr = ""; + } + + } + + }).catch(error => { + console.error('获取优惠券失败:', error); + }); + + } + + } + if (this.dto.couponRecordId && this.cache_coupon) { //计算优惠券 if (this.cache_coupon.couponDiscountType === 'zero') { @@ -44,9 +85,14 @@ return 0 }, order_fee() { + // 如果订单-优惠券<0,就等于0 +打包+运费,如果还等于0,那么就0.01 var m1 = parseFloat(this.dto.totalMemberAmount || this.dto.totalAmount || 0) var m2 = parseFloat((this.dto.packing || 0) + (this.current_transport.fee || 0)) + + // 统一处理 Promise 和普通值 + // var couponFee = await this.coupon_fee; + if (m1 <= parseFloat(this.coupon_fee)) { if (m2 > 0) { @@ -64,9 +110,12 @@ async beforeDestroy() { await this.$store.dispatch('cache_coupon_select', {}) await this.$store.dispatch('cache_goods_select', []) + await this.$store.dispatch('cache_coupon_select_cancel', 0) }, - async onShow() { + onShow() { + // 获取当前用户为使用的优惠券 + // this.getSuitableCouponAuto() //优惠券 if (this.cache_coupon && this.cache_coupon.id) { this.dto.couponRecordId = this.cache_coupon.id @@ -153,6 +202,7 @@ couponRecordId: '', couponRecordStr: '', goodsRecordIdListStr: '', + unusedCouponList:[], }, current_transport: {}, cacheAddressId: '', @@ -162,6 +212,7 @@ [] ], partnerInfo: {}, + isShowFlag:true, } }, @@ -181,6 +232,20 @@ } }, methods: { + + async getSuitableCouponAuto(){ + //1.提交订单后,根据订单的商品金额,判断是否达到优惠券使用条件,如果达到,自动选择面值最大的优惠券,用户也可以在优惠券自己切换优惠券或不使用优惠券 + await this.$http.request('get', '/api/v2/coupon/app/mine/unused/list', { + params: {} + }).then(res => { + var data = res.data + this.unusedCouponList = data.list || [] + + }) + + + }, + toSelectCoupon() { //跳转去列表页面进行选择 var total = ((this.dto.totalMemberAmount || this.dto.totalAmount || 0) + (this.dto.packing || 0) + (this @@ -441,12 +506,12 @@ <view class="p10 bg-white m-t-20 br-4"> <view class="form-item flex "> - <view class="label">优惠券</view> + <view class="label t-red">优惠券</view> - <view class="m-l-a m-r-0 flex " :class="[!dto.couponRecordId?'desc-gray':'']" + <view class="m-l-a m-r-0 flex t-red" :class="[!dto.couponRecordId?'desc-gray':'']" @click="toSelectCoupon"> <view>{{dto.couponRecordStr||dto.couponRecordId || '请选择'}}</view> - <u-icon class="m-l-a" name="arrow-right"></u-icon> + <u-icon class="m-l-a t-red" name="arrow-right"></u-icon> </view> </view> @@ -507,10 +572,10 @@ </view> </view> <view class="desc flex" v-if="cache_coupon&&cache_coupon.id"> - <view> + <view class="t-red"> 优惠({{cache_coupon.couponDiscountType=='zero'?'无门槛':(cache_coupon.minOrderAmount?(`满¥${cache_coupon.minOrderAmount}可用`):'无门槛')}},优惠¥{{cache_coupon.couponDiscountValue||'0'}}): </view> - <view class="m-l-a m-r-0 text-right"> + <view class="m-l-a m-r-0 text-right t-red"> -{{ coupon_fee || 0 }} </view> </view> @@ -539,6 +604,10 @@ .page-confirm { padding: 20rpx 30rpx; + .border-red { + border: 1px solid red; + } + .bottom-price { position: fixed; background-color: #ffffff; diff --git a/sub_pages/customer/shopping/shopping.vue b/sub_pages/customer/shopping/shopping.vue index af0e54c..fc4b6a7 100644 --- a/sub_pages/customer/shopping/shopping.vue +++ b/sub_pages/customer/shopping/shopping.vue @@ -176,6 +176,7 @@ }, async submitPay() { + await this.$store.dispatch('cache_coupon_select_cancel', 0) // order/confirm/info var arr = [] for (var j = 0; j < this.list.length; j++) { -- Gitblit v1.9.3