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">
-
+
待付款
-
+
已预约
-
+
已完成
-
+