diff --git a/bundle/reserve/confirm.vue b/bundle/reserve/confirm.vue index 5bccad4..21a1303 100644 --- a/bundle/reserve/confirm.vue +++ b/bundle/reserve/confirm.vue @@ -54,10 +54,10 @@ - 优惠 + 折扣优惠 - - - + - + @@ -75,8 +75,9 @@ - + 合计: + 8折 费用明细 @@ -171,7 +172,7 @@ - 微信支付: + 微信支付 @@ -244,6 +245,9 @@ payType: 'wxpay', // 支付方式 wxpay\balance balance: 0, order: {}, + result: '', + loadding: true, + _submitting: false }; }, @@ -257,6 +261,17 @@ this.getData(); }, + onUnload() { + switch(this.result) { + case 'success': + uni.$emit('payment', { result: true, order_id: this.orderId }) + break; + case 'fail': + default: uni.$emit('payment', { result: false, order_id: this.orderId }) + } + }, + + methods: { getData() { let self = this; @@ -264,12 +279,12 @@ title: '加载中' }); - const reserveDate = uni.getStorageSync('reserveDate') || null - self.date = reserveDate - self.countSelectedTime = reserveDate && reserveDate.duration ? reserveDate.duration : 0 - if (self.typeId == 2) { - self.countSelectedTime = 4 - } + // const reserveDate = uni.getStorageSync('reserveDate') || null + // self.date = reserveDate + // self.countSelectedTime = reserveDate && reserveDate.duration ? reserveDate.duration : 0 + // if (self.typeId == 2) { + // self.countSelectedTime = 4 + // } // 获取余额 self._post( @@ -372,7 +387,6 @@ total: result.light_all_price } } - console.log("🚀 ~ self.bill:", self.bill) self.loadding = false; } @@ -401,58 +415,158 @@ // 去支付 toConfirm() { + if (this._submitting) return; + this._submitting = true; if (this.countSelectedTime === 0) { uni.showToast({title: '请选择时间后再预定', icon: 'none'}); + this._submitting = false; return; } + const finish = () => { this._submitting = false; }; + if (this.payType == 'wxpay') { + // 包装原有回调,确保无论成功失败都解锁 + const oldWxPay = this.wxPay; + this.wxPay = (...args) => { + oldWxPay.apply(this, args); + this.wxPay = oldWxPay; + }; + oldWxPay.call(this); + setTimeout(finish, 3000); // 兜底3秒自动解锁 + } else if (this.payType == 'balance') { + const oldBalancePay = this.balancePay; + this.balancePay = (...args) => { + oldBalancePay.apply(this, args); + this.balancePay = oldBalancePay; + }; + oldBalancePay.call(this); + setTimeout(finish, 3000); + } else { + finish(); + } + }, + + // 微信支付 + wxPay() { let self = this; + uni.showLoading({ title: '加载中' }); - self._post( - 'order.groundOrder/submitStoreOrder', - { - app_id: self.getAppId(), - ground_id: self.venueId, - room_id: self.roomId, - hours: 1, - day_time: self.date ? self.date.date : '', - start_time: self.date ? self.date.startTime : '', - end_time: self.date ? self.date.endTime : '', - }, - function(res) { - console.log("🚀 ~ order res:", res) - self._post( - 'user.groundOrder/pay', - { - app_id: self.getAppId(), - order_id: res.data.lists.id - }, - function(res) { - const data = res.data - console.log("🚀 ~ pay data:", data) - uni.requestPayment({ - provider: 'wxpay', - timeStamp: data.payment.timeStamp, - nonceStr: data.payment.nonceStr, - package: 'prepay_id=' + data.payment.prepay_id, - signType: 'MD5', - paySign: data.payment.paySign, - success: res => { - console.log("🚀 ~ pay success res:", res) - }, - fail: res => { - console.log("🚀 ~ pay fail res:", res) - uni.reLaunch({ - url: '/pages/order/cg-my-order', - }); - }, + + try { + self._post( + 'user.groundOrder/pay', + { + app_id: self.getAppId(), + order_id: this.orderId + }, + function(res) { + const data = res.data + console.log("🚀 ~ pay data:", data) + uni.requestPayment({ + provider: 'wxpay', + timeStamp: data.payment.timeStamp, + nonceStr: data.payment.nonceStr, + package: 'prepay_id=' + data.payment.prepay_id, + signType: 'MD5', + paySign: data.payment.paySign, + success: res => { + self.result = 'success' + console.log("🚀 ~ pay success res:", res) + uni.showToast({ + title: '支付成功', + icon: 'none' + }); + self.loadding = false; + + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); + }, + fail: res => { + console.log("🚀 ~ pay error res:", res) + self.result = 'fail' + self.loadding = false; + + uni.showToast({ + title: '支付失败', + icon: 'none' + }); + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); + }, + }); + } + ) + } catch (error) { + console.log("🚀 ~ pay error res:", res) + self.result = 'fail' + self.loadding = false; + + uni.showToast({ + title: '支付失败', + icon: 'none' + }); + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); + } + }, + + // 余额支付 + balancePay() { + let self = this; + + uni.showLoading({ + title: '加载中' + }); + + try { + self._post( + 'ground.ground/yuePay', + { + app_id: self.getAppId(), + order_id: this.orderId + }, + function(res) { + if (res.code == 1) { + self.result = 'success' + uni.showToast({ + title: '支付成功', + icon: 'none' }); + self.loadding = false; + + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); + } else { + self.result = 'fail' + self.loadding = false; + + uni.showToast({ + title: '支付失败', + icon: 'none' + }); + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); } - ) - self.loadding = false; - } - ) + } + ) + } catch (error) { + self.result = 'fail' + self.loadding = false; + + uni.showToast({ + title: '支付失败', + icon: 'none' + }); + setTimeout(() => { + uni.navigateBack({delta: 1}) + }, 500); + } } } }; diff --git a/bundle/reserve/details.vue b/bundle/reserve/details.vue index 84b9b1c..7ac5c6b 100644 --- a/bundle/reserve/details.vue +++ b/bundle/reserve/details.vue @@ -280,7 +280,6 @@ export default { selectedWeekDay: '', selectedReserveTime: [], countSelectedTime: 0, - submitting: false // 防止重复提交 }; }, @@ -437,22 +436,14 @@ export default { // 篮球场-立即预约 toReserve() { let self = this - if (self.submitting) { - uni.showToast({ - title: '正在提交,请勿重复操作', - icon: 'none' - }); - return; - } + // 一进来就锁定,彻底防止高频点击 - self.submitting = true; if (self.typeId == 1) { if (self.selectedReserveTime.length === 0) { uni.showToast({ title: '请选择预约时间', icon: 'none' }); - self.submitting = false; return; } uni.showLoading({ @@ -467,11 +458,32 @@ export default { app_id: self.getAppId(), ground_id: self.id, room_list: JSON.stringify(self.selectedReserveTime), + type: this.typeId }, function(res) { self.loadding = false; - self.submitting = false; if(res.code) { + uni.$on('payment', params => { + console.log("🚀 ~ params:", params) + uni.showLoading({ + title: '加载中', + mask: true, + }); + setTimeout(() => { + self.loadding = false + uni.$off("payment") + if (params.result) { + uni.redirectTo({ + url: `/bundle/reserve/notice?order_id=${params.order_id}` + }) + } else { + uni.redirectTo({ + url: '/pages/order/cg-my-order' + }) + } + }, 500) + }) + uni.navigateTo({ url: `/bundle/reserve/confirm?venueId=${self.venue.id}&roomId=${self.id}&typeId=${self.typeId}&orderId=${res.data.lists.id}` }); @@ -479,7 +491,6 @@ export default { } ) } catch (error) { - self.submitting = false; console.error('订单提交失败:', error); uni.showToast({ title: '订单提交失败,请重试', @@ -493,13 +504,11 @@ export default { title: '请选择预约时间', icon: 'none' }); - self.submitting = false; return; } uni.navigateTo({ url: `/bundle/reserve/confirm?venueId=${self.venue.id}&roomId=${self.id}&typeId=${self.typeId}` }); - self.submitting = false; } }, @@ -616,13 +625,23 @@ export default { getReserveTime() { let self = this; - self._post( - 'ground.ground/getSchedule', - { + let params = {} + + if (self.selectedWeekTimes) { + params = { app_id: self.getAppId(), ground_id: self.id, today: self.selectedWeekTimes - }, + } + } else { + params = { + app_id: self.getAppId(), + ground_id: self.id, + } + } + + self._post( + 'ground.ground/getSchedule',params, function (res) { if (res.code) { self.cdList = res.data.lists1 diff --git a/bundle/reserve/notice.vue b/bundle/reserve/notice.vue index 0caa879..8eb036c 100644 --- a/bundle/reserve/notice.vue +++ b/bundle/reserve/notice.vue @@ -9,8 +9,8 @@ - 查看订单 - 完成 + 查看订单 + 完成 @@ -19,18 +19,30 @@ export default { data() { return { - + order_id: 0 }; }, onLoad(args) { - this.getData(); + this.order_id = args.order_id || 0; }, methods: { getData() { }, + + seeOrder() { + uni.navigateTo({ + url: '/pages/order/cg-my-order' + }); + }, + + done() { + uni.reLaunch({ + url: '/pages/index/index' + }); + } } }; diff --git a/pages/order/cg-my-order.vue b/pages/order/cg-my-order.vue index d45e381..04c564e 100644 --- a/pages/order/cg-my-order.vue +++ b/pages/order/cg-my-order.vue @@ -5,7 +5,7 @@ - @@ -14,12 +14,17 @@ - 全部订单 + 全部订单 待付款 已预约 已完成 退订/退款 + + + 网球 + 篮球 + @@ -31,19 +36,19 @@ - 场馆名称 + {{ item.ground_name }} - {{ item.state_text }} - + 待付款 + 已预约 + 已完成 + 订单取消 + 退款成功 - + - - - - + + - 这个是场馆的分场名称 - 预约时间:03/18 08:00-12:00 - 预约时长:2小时 + 订单号:{{ item.order_sn }} + 活动日期:{{ item.trade[0].day_title }} - - - - - - + v-if="item.order_status == 0">取消订单 - + + + - - - - - - - + + 取消申请中 @@ -297,6 +282,9 @@ codeImg: '', cancelOrderPopup: false, delOrderPopup: false, + orderStatus: '', + keyWord: '', + ballType: 1, // 1网球 2篮球 }; }, computed: { @@ -317,15 +305,20 @@ if (typeof e.dataType != 'undefined') { this.dataType = e.dataType; } - if (this.dataType == 'payment') { + if (this.dataType == 'all') { + this.state_active = 0; + } else if (this.dataType == 0) { this.state_active = 1; - } else if (this.dataType == 'received') { - this.state_active = 3; - } else if (this.dataType == 'comment') { - this.state_active = 4; - } else if (this.dataType == 'delivery') { + } else if (this.dataType == 1) { this.state_active = 2; + } else if (this.dataType == 2) { + this.state_active = 3; + } else if (this.dataType == 4) { + this.state_active = 4; } + console.log("🚀 ~ this.dataType:", this.dataType) + console.log("🚀 ~ this.dataType:", this.state_active) + }, mounted() { this.init(); @@ -353,33 +346,45 @@ }); }, + // 切换球类 + changeBallType(type) { + let self = this; + + self.ballType = type; + self.listData = []; + self.getData(); + }, + /*状态切换*/ stateFunc(e) { + console.log("🚀 ~ e:", e) let self = this; + console.log("🚀 ~ state_active:", self.state_active) + if (self.state_active != e) { self.page = 1; self.loading = true; self.state_active = e; switch (e) { - case 0: + case 'all': self.listData = []; self.dataType = 'all'; break; case 1: self.listData = []; - self.dataType = 'payment'; + self.dataType = 0; break; case 2: self.listData = []; - self.dataType = 'reserve'; + self.dataType = 1; break; case 3: self.listData = []; - self.dataType = 'completed'; + self.dataType = 2; break; case 4: self.listData = []; - self.dataType = 'comment'; + self.dataType = 4; break; } self.getData(); @@ -402,20 +407,47 @@ /*获取数据*/ getData() { + // let self = this; + // self.loading = true; + // let dataType = self.dataType; + // self._get( + // 'user.order/lists', { + // dataType: dataType, + // page: self.page, + // list_rows: self.list_rows + // }, + // function(res) { + // self.loading = false; + // self.listData = self.listData.concat(res.data.list.data); + // self.last_page = res.data.list.last_page; + // if (res.data.list.last_page <= 1) { + // self.no_more = true; + // } else { + // self.no_more = false; + // } + // } + // ); let self = this; self.loading = true; let dataType = self.dataType; - self._get( - 'user.order/lists', { - dataType: dataType, + if (dataType == 'all') { + dataType = ''; + } + self._post( + 'order.groundOrder/orderGroundList', { + order_status: dataType, + search: self.keyWord, page: self.page, - list_rows: self.list_rows + size: self.list_rows, + app_id: self.getAppId(), + type: self.ballType }, function(res) { self.loading = false; - self.listData = self.listData.concat(res.data.list.data); - self.last_page = res.data.list.last_page; - if (res.data.list.last_page <= 1) { + self.listData = self.listData.concat(res.data.lists.data); + console.log("🚀 ~ self.listData:", self.listData) + self.last_page = res.data.lists.last_page; + if (res.data.lists.last_page <= 1) { self.no_more = true; } else { self.no_more = false; @@ -627,6 +659,13 @@ duration: 2000, icon: 'none' }); + }, + + // 跳转场馆 + toGround(ground_id) { + uni.navigateTo({ + url: `/bundle/reserve/details?id=${id}&typeId=${this.ballType}` + }); } } }; @@ -692,4 +731,27 @@ } } +.ball-type-box { + margin-left: 40rpx; + margin-bottom: 24rpx; + .ball { + width: 108rpx; + height: 52rpx; + text-align: center; + line-height: 52rpx; + background: #FFFFFF; + border-radius: 8rpx; + font-size: 26rpx; + color: #606266; + margin-right: 10rpx; + } + + .ball.active { + background: #365A9A; + color: #FFFFFF; + } +} + + + diff --git a/pages/order/css/cg-order.css b/pages/order/css/cg-order.css index 6bc08d0..409baba 100644 --- a/pages/order/css/cg-order.css +++ b/pages/order/css/cg-order.css @@ -139,7 +139,7 @@ page { height: 60rpx; line-height: 60rpx; margin-left: 20rpx; - font-size: 32rpx; + font-size: 28rpx; border: 1px solid #F6220C; border-radius: 8px; background: #ffffff; @@ -238,7 +238,7 @@ page { } .cg-info2 { - margin-top: 34rpx; + white-space: nowrap; font-weight: 400; font-size: 26rpx; color: #606266; diff --git a/pages/user/index/index.vue b/pages/user/index/index.vue index e4b5080..e4a328f 100644 --- a/pages/user/index/index.vue +++ b/pages/user/index/index.vue @@ -58,7 +58,7 @@ class="icon iconfont icon-jiantou"> - + 待付款 - + 已预约 - + 已完成 - +