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