From c1817b625585b0289477a5bb43189bf627c9b094 Mon Sep 17 00:00:00 2001 From: chen-xin-zhi <3588068430@qq.com> Date: Fri, 8 Aug 2025 19:21:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E4=BA=86=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../course/courseOrderList/courseOrderList.js | 70 ++++++++++++-- .../courseOrderList/courseOrderList.wxml | 4 +- .../courseOrderList/courseOrderList.wxss | 7 ++ .../createCourseOrder/createCourseOrder.js | 92 +++++++++++++++++-- .../createCourseOrder/createCourseOrder.wxml | 4 +- .../createCourseOrder/createCourseOrder.wxss | 8 ++ pages/course/orderDetail/orderDetail.js | 59 +++++++++++- pages/course/orderDetail/orderDetail.wxml | 3 +- pages/course/orderDetail/orderDetail.wxss | 9 +- .../accountSetting/accountSetting.js | 6 +- .../accountSetting/accountSetting.wxml | 2 +- .../accountSetting/accountSetting.wxss | 1 + pages/personCenter/mine/mine.wxml | 4 +- pages/personCenter/mine/mine.wxss | 7 +- 14 files changed, 246 insertions(+), 30 deletions(-) diff --git a/pages/course/courseOrderList/courseOrderList.js b/pages/course/courseOrderList/courseOrderList.js index f74f63b..cf8bcd6 100644 --- a/pages/course/courseOrderList/courseOrderList.js +++ b/pages/course/courseOrderList/courseOrderList.js @@ -5,6 +5,7 @@ Page({ data: { orderList: [], // 后端返回的订单列表 hasModalShown: false, // 弹框只显示一次 + isMaskVisible: false }, onLoad(options) { @@ -35,7 +36,7 @@ Page({ let list = res.data.data.map(item => { // 计算从 createTime 到 now 剩余秒数 const createMs = new Date(item.createTime.replace(/-/g,'/')).getTime(); - let diff = Math.floor((createMs + 30*60*1000 - now) / 1000); + let diff = Math.floor((createMs + 15*60*1000 - now) / 1000); // 只有“待支付”才需要倒计时、过期置“交易取消” if (item.orderStatus === '待支付') { @@ -80,6 +81,10 @@ Page({ // 每秒更新所有待支付订单的倒计时 startTimer() { + // ← 新增:如果已有定时器,先清掉它 + if (this._timer) { + clearInterval(this._timer); + } this._timer = setInterval(() => { const updated = this.data.orderList.map(item => { if (item.orderStatus === '待支付' && item.countDown > 0) { @@ -108,6 +113,62 @@ Page({ }, 1000); }, + showIsPayModal(e) { + const orderId = e.currentTarget.dataset.orderId; + wx.showModal({ + title: '下单成功', + content: '您确定要支付吗?', + cancelText: '取消', + confirmText: '确定', + success: (res) => { + if (res.confirm) { + this.payOrder(orderId); + } else if (res.cancel) { + this.setData({ isMaskVisible: false }); + } + }, + fail: () => { + wx.hideLoading(); + wx.showToast({ + title: '网络错误,下单失败', + icon: 'none' + }); + } + }); + }, + payOrder(orderId) { + // 同样先显示遮罩 + this.setData({ isMaskVisible: true }); + wx.showLoading({ title: '支付中...'}); + wx.request({ + url: baseUrl + '/courseOrder/payment', + method: 'POST', + header: { Authorization: wx.getStorageSync('token') }, + data: { id: orderId}, + success: res => { + wx.hideLoading(); + if (res.data.code === 1) { + // 支付成功,跳转详情页 + wx.redirectTo({ + url: `/pages/course/orderDetail/orderDetail?id=${orderId}`, + success: res => { + // 先把遮罩关掉 + this.setData({ isMaskVisible: false }); + } + }); + } else { + this.setData({ isMaskVisible: false }); + wx.showToast({ title: res.data.message || '支付失败', icon: 'none' }); + } + }, + fail: () => { + wx.hideLoading(); + this.setData({ isMaskVisible: false }); + wx.showToast({ title: '网络错误,支付失败', icon: 'none' }); + } + }); + }, + // 跳转订单详情 gotoOrderDetail(e) { const orderId = e.currentTarget.dataset.id; @@ -135,11 +196,6 @@ Page({ } } }); - }, + } - // 支付订单 - payOrder() { - // wx.navigateTo({ url: `/pages/pay/pay?orderId=${this.data.orderId}` }); - wx.showToast({ title: '支付功能稍后开放', icon: 'none' }); - }, }); diff --git a/pages/course/courseOrderList/courseOrderList.wxml b/pages/course/courseOrderList/courseOrderList.wxml index 400b2f1..d68927b 100644 --- a/pages/course/courseOrderList/courseOrderList.wxml +++ b/pages/course/courseOrderList/courseOrderList.wxml @@ -30,11 +30,13 @@ 取消订单 - + 支付 + \ No newline at end of file diff --git a/pages/course/courseOrderList/courseOrderList.wxss b/pages/course/courseOrderList/courseOrderList.wxss index 2ca186a..650ad25 100644 --- a/pages/course/courseOrderList/courseOrderList.wxss +++ b/pages/course/courseOrderList/courseOrderList.wxss @@ -9,6 +9,13 @@ .ml-11 { margin-left: 20.63rpx; } +.page-mask { + position: fixed; + top: 0; left: 0; + width: 100%; height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 9999; +} .page { padding: 26.25rpx 0 50.63rpx; background-color: #f8f8f8; diff --git a/pages/course/createCourseOrder/createCourseOrder.js b/pages/course/createCourseOrder/createCourseOrder.js index e6677ec..4bdf5ab 100644 --- a/pages/course/createCourseOrder/createCourseOrder.js +++ b/pages/course/createCourseOrder/createCourseOrder.js @@ -9,11 +9,15 @@ Page({ courseId: 0, // 课程id courseObj: '', // 课程对象 globalImgUrl, // 全局图片 + isMaskVisible: false }, // 创建订单方法 createOrder() { const { courseId } = this.data; + // 1. 显示遮罩,阻止二次点击 + this.setData({ isMaskVisible: true }); + wx.showLoading({ title: '正在创建订单...' }); let orderId ; wx.request({ url: baseUrl + '/courseOrder/add', @@ -25,16 +29,88 @@ Page({ Authorization :wx.getStorageSync('token'), }, success : res => { - console.log(res); - this.setData({ - orderId: res.data.data - }) - wx.navigateTo({ - url: `/pages/course/orderDetail/orderDetail?id=${this.data.orderId}`, - }) + orderId = res.data.data + this.setData({ orderId }) + wx.hideLoading(); + if (res.data.code === 1) { + this.showIsPayModal(orderId) + } else { + // 下单失败,关闭遮罩 + this.setData({ isMaskVisible: false }); + wx.showModal({ + title: '下单失败', + content: res.data.message || '下单失败', + showCancel: false, + confirmText: '知道了' + }); + } + }, + fail: () => { + wx.hideLoading(); + this.setData({ isMaskVisible: false }); + wx.showToast({ title: '网络错误,下单失败', icon: 'none' }); } }) - + }, + showIsPayModal(orderId) { + wx.showModal({ + title: '下单成功', + content: '您确定要支付吗?', + cancelText: '取消', + confirmText: '确定', + success: (res) => { + if (res.confirm) { + this.payOrder(orderId); + } else if (res.cancel) { + wx.navigateTo({ + url: `/pages/course/orderDetail/orderDetail?id=${orderId}`, + success: res => { + // 先把遮罩关掉 + this.setData({ isMaskVisible: false }); + } + }); + } + }, + fail: () => { + wx.hideLoading(); + wx.showToast({ + title: '网络错误,下单失败', + icon: 'none' + }); + } + }); + }, + payOrder(orderId) { + // 同样先显示遮罩 + this.setData({ isMaskVisible: true }); + wx.showLoading({ title: '支付中...'}); + wx.request({ + url: baseUrl + '/courseOrder/payment', + method: 'POST', + header: { Authorization: wx.getStorageSync('token') }, + data: { id: orderId }, + success: res => { + wx.hideLoading(); + if (res.data.code === 1) { + // 支付成功,跳转详情页 + wx.navigateTo({ + url: `/pages/course/orderDetail/orderDetail?id=${orderId}`, + success: res => { + // 先把遮罩关掉 + this.setData({ isMaskVisible: false }); + } + }); + } else { + this.setData({ isMaskVisible: false }); + wx.showToast({ title: res.data.message || '支付失败', icon: 'none' }); + } + }, + fail: () => { + wx.hideLoading(); + this.setData({ isMaskVisible: false }); + wx.showToast({ title: '网络错误,支付失败', icon: 'none' }); + } + }); }, // 获取课程详情 diff --git a/pages/course/createCourseOrder/createCourseOrder.wxml b/pages/course/createCourseOrder/createCourseOrder.wxml index 21f1b98..838872d 100644 --- a/pages/course/createCourseOrder/createCourseOrder.wxml +++ b/pages/course/createCourseOrder/createCourseOrder.wxml @@ -38,9 +38,11 @@ 应付¥{{ courseObj.discountPrice }} - + 立即支付 + + diff --git a/pages/course/createCourseOrder/createCourseOrder.wxss b/pages/course/createCourseOrder/createCourseOrder.wxss index a890855..860af91 100644 --- a/pages/course/createCourseOrder/createCourseOrder.wxss +++ b/pages/course/createCourseOrder/createCourseOrder.wxss @@ -7,6 +7,14 @@ .ml-1 { margin-left: 1.88rpx; } +/* app.wxss 或 当前页面 .wxss */ +.page-mask { + position: fixed; + top: 0; left: 0; + width: 100%; height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 9999; +} .page { background-color: #f7f7f7; width: 100%; diff --git a/pages/course/orderDetail/orderDetail.js b/pages/course/orderDetail/orderDetail.js index 31b46ce..909423a 100644 --- a/pages/course/orderDetail/orderDetail.js +++ b/pages/course/orderDetail/orderDetail.js @@ -8,6 +8,7 @@ Page({ _secondsRemaining: 0, // 内部倒计时秒数 _hasShownTimeout: false, // 是否已弹过“超时未支付”弹窗 globalImgUrl, + isMaskVisible: false }, onLoad(options) { @@ -15,7 +16,61 @@ Page({ this.setData({ orderId: options.id }); this.getOrderDetail(); }, - + showIsPayModal() { + const {orderId} = this.data + wx.showModal({ + title: '下单成功', + content: '您确定要支付吗?', + cancelText: '取消', + confirmText: '确定', + success: (res) => { + if (res.confirm) { + this.payOrder(orderId); + } else if (res.cancel) { + this.setData({ isMaskVisible: false }); + } + }, + fail: () => { + wx.hideLoading(); + wx.showToast({ + title: '网络错误,下单失败', + icon: 'none' + }); + } + }); + }, + payOrder(orderId) { + // 同样先显示遮罩 + this.setData({ isMaskVisible: true }); + wx.showLoading({ title: '支付中...'}); + wx.request({ + url: baseUrl + '/courseOrder/payment', + method: 'POST', + header: { Authorization: wx.getStorageSync('token') }, + data: { id: orderId}, + success: res => { + wx.hideLoading(); + if (res.data.code === 1) { + // 支付成功,跳转详情页 + wx.redirectTo({ + url: `/pages/course/orderDetail/orderDetail?id=${orderId}`, + success: res => { + // 先把遮罩关掉 + this.setData({ isMaskVisible: false }); + } + }); + } else { + this.setData({ isMaskVisible: false }); + wx.showToast({ title: res.data.message || '支付失败', icon: 'none' }); + } + }, + fail: () => { + wx.hideLoading(); + this.setData({ isMaskVisible: false }); + wx.showToast({ title: '网络错误,支付失败', icon: 'none' }); + } + }); + }, onUnload() { clearInterval(this._timer); }, @@ -48,7 +103,7 @@ Page({ // 将 "2025-07-13 12:38:17" → 时间戳 const createMs = new Date(createTime.replace(/-/g, '/')).getTime(); const now = Date.now(); - let diff = Math.floor((createMs + 30 * 60 * 1000 - now) / 1000); + let diff = Math.floor((createMs + 15 * 60 * 1000 - now) / 1000); if (diff <= 0) { // 已超时 diff --git a/pages/course/orderDetail/orderDetail.wxml b/pages/course/orderDetail/orderDetail.wxml index 681de0f..aa927da 100644 --- a/pages/course/orderDetail/orderDetail.wxml +++ b/pages/course/orderDetail/orderDetail.wxml @@ -73,7 +73,7 @@ 取消 - + 立即支付 @@ -84,4 +84,5 @@ 退款 + diff --git a/pages/course/orderDetail/orderDetail.wxss b/pages/course/orderDetail/orderDetail.wxss index 0dd34d5..0d8a956 100644 --- a/pages/course/orderDetail/orderDetail.wxss +++ b/pages/course/orderDetail/orderDetail.wxss @@ -22,7 +22,14 @@ .mt-389 { margin-top: 729.38rpx; } - +/* app.wxss 或 当前页面 .wxss */ +.page-mask { + position: fixed; + top: 0; left: 0; + width: 100%; height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 9999; +} /* 整体布局 */ .page { padding-top: 26.25rpx; diff --git a/pages/personCenter/accountSetting/accountSetting.js b/pages/personCenter/accountSetting/accountSetting.js index f090c59..9bfe118 100644 --- a/pages/personCenter/accountSetting/accountSetting.js +++ b/pages/personCenter/accountSetting/accountSetting.js @@ -1,5 +1,5 @@ // pages/personCenter/accountSetting/accountSetting.js -const { baseUrl } = require("../../../request"); +const { baseUrl, globalImgUrl } = require("../../../request"); Page({ @@ -9,7 +9,8 @@ Page({ data: { nickName: "", userAvatar: "", - phoneNumber: "" + phoneNumber: "", + globalImgUrl }, gotoResetPwd() { @@ -66,7 +67,6 @@ Page({ if (res.data.code === 1) { this.setData({ nickName: res.data.data.nickName, - // TODO 头像未连接 userAvatar: res.data.data.userAvatar, phoneNumber: res.data.data.phoneNumber, userAccount: res.data.data.userAccount diff --git a/pages/personCenter/accountSetting/accountSetting.wxml b/pages/personCenter/accountSetting/accountSetting.wxml index 8d97a01..c6ece5a 100644 --- a/pages/personCenter/accountSetting/accountSetting.wxml +++ b/pages/personCenter/accountSetting/accountSetting.wxml @@ -3,7 +3,7 @@ {{ nickName }} diff --git a/pages/personCenter/accountSetting/accountSetting.wxss b/pages/personCenter/accountSetting/accountSetting.wxss index bf599ed..ef096de 100644 --- a/pages/personCenter/accountSetting/accountSetting.wxss +++ b/pages/personCenter/accountSetting/accountSetting.wxss @@ -20,6 +20,7 @@ .image { width: 121.88rpx; height: 121.88rpx; + border-radius: 30rpx; } .group_2 { margin-top: 21.84rpx; diff --git a/pages/personCenter/mine/mine.wxml b/pages/personCenter/mine/mine.wxml index 20189e6..eacb75e 100644 --- a/pages/personCenter/mine/mine.wxml +++ b/pages/personCenter/mine/mine.wxml @@ -274,8 +274,8 @@ - - + +