From 8431cdf2d6bb669cc89d4641ed009bdef08803ff Mon Sep 17 00:00:00 2001 From: 8vd8 <1936002261@qq.com> Date: Mon, 21 Apr 2025 14:54:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8F=8A=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在项目中新增了多个页面,包括押金页面、设备详情页面、反馈页面和帮助页面。同时,更新了订单支付和归还成功页面的逻辑,确保用户在支付和归还设备时能够获得清晰的反馈。优化了扫码和订单状态处理逻辑,提升了整体用户体验。 --- pages/order/payment.vue | Bin 27896 -> 14241 bytes pages/return/index.vue | 108 +++++++++++++--- .../.sourcemap/mp-weixin/config/user.js.map | 2 +- .../mp-weixin/pages/order/payment.js.map | 2 +- .../mp-weixin/pages/return/index.js.map | 2 +- .../mp-weixin/utils/orderMonitor.js.map | 2 +- unpackage/dist/dev/mp-weixin/common/vendor.js | 2 +- unpackage/dist/dev/mp-weixin/config/user.js | 13 +- .../dist/dev/mp-weixin/pages/order/payment.js | 19 ++- .../dist/dev/mp-weixin/pages/return/index.js | 121 ++++++++++++------ .../dist/dev/mp-weixin/utils/orderMonitor.js | 86 +++++++++---- utils/orderMonitor.js | 91 ++++++++++--- 12 files changed, 337 insertions(+), 111 deletions(-) diff --git a/pages/order/payment.vue b/pages/order/payment.vue index 5ac4a89d3624b4ac0a3391444c224200ac8ff702..06ac3080f4ea4cb1dc21ac3dcc81ecef3951d2b5 100644 GIT binary patch literal 14241 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 DZ&6rQ literal 27896 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 diff --git a/pages/return/index.vue b/pages/return/index.vue index fdcbc2d..76faa75 100644 --- a/pages/return/index.vue +++ b/pages/return/index.vue @@ -89,12 +89,16 @@ export default { statusCheckTimer: null, maxStatusChecks: 30, // 最多检查30次 currentStatusChecks: 0, - statusCheckInterval: 5000 // 5秒检查一次 + statusCheckInterval: 5000, // 5秒检查一次 + isPageActive: false // 跟踪页面是否活跃 } }, onLoad(options) { console.log('Return page loaded with options:', JSON.stringify(options)) + // 标记页面为活跃状态 + this.isPageActive = true + // 获取传递的参数 this.orderInfo.orderId = options.orderId || '' this.deviceId = options.deviceNo || options.deviceId || '' @@ -118,7 +122,10 @@ export default { // 如果订单ID有效,将订单添加到全局监控服务 try { if (this.$orderMonitor) { - this.$orderMonitor.addOrder({orderId: this.orderInfo.orderId}) + // 先确保移除之前的监控(防止重复添加) + this.$orderMonitor.removeOrder({orderId: this.orderInfo.orderId}) + // 添加到监控队列,明确指定为归还页面 + this.$orderMonitor.addOrder({orderId: this.orderInfo.orderId}, 'return') console.log('订单已添加到监控队列:', this.orderInfo.orderId) } else { console.warn('$orderMonitor 未定义,无法添加订单到监控队列') @@ -142,14 +149,46 @@ export default { // 注册全局订单完成事件监听器 uni.$on('orderCompleted', this.handleOrderCompleted) }, + // 添加onHide生命周期,处理页面隐藏时的清理工作 + onHide() { + console.log('归还页面隐藏,清理计时器资源和监控服务') + // 标记页面为非活跃状态 + this.isPageActive = false + + // 清理所有计时器 + this.clearTimer() + this.clearStatusCheckTimer() + + // 从全局订单监控服务中移除当前订单 + this.removeFromOrderMonitor() + }, onUnload() { + console.log('归还页面卸载,清理所有资源') + // 标记页面为非活跃状态 + this.isPageActive = false + // 页面卸载时清除定时器 this.clearTimer() this.clearStatusCheckTimer() + + // 从全局订单监控服务中移除当前订单 + this.removeFromOrderMonitor() + // 注销全局事件监听 uni.$off('orderCompleted', this.handleOrderCompleted) }, methods: { + // 从订单监控服务中移除当前订单 + removeFromOrderMonitor() { + if (this.orderInfo.orderId && this.$orderMonitor) { + try { + this.$orderMonitor.removeOrder({orderId: this.orderInfo.orderId}) + console.log('订单已从监控队列移除:', this.orderInfo.orderId) + } catch (error) { + console.error('从监控队列移除订单失败:', error) + } + } + }, // 处理订单完成事件(可由任何地方触发) handleOrderCompleted(orderData) { console.log('收到订单完成事件:', orderData) @@ -206,8 +245,14 @@ export default { // 获取订单详情 async getOrderDetails() { + // 如果页面不再活跃,不执行API请求 + if (!this.isPageActive) { + console.log('页面已不活跃,跳过订单详情请求') + return + } + try { - uni.showLoading({ title: '加载中' }) + // uni.showLoading({ title: '加载中' }) if (!this.orderInfo.orderId) { throw new Error('订单ID不能为空') @@ -320,10 +365,22 @@ export default { // 更新使用时长的定时器 startTimer() { + // 清除现有计时器,确保不重复 + this.clearTimer() + // 每分钟更新一次使用时长 this.timer = setInterval(() => { - this.getOrderDetails() + // 只有当页面活跃时才执行更新 + if (this.isPageActive) { + console.log('执行定时更新订单信息') + this.getOrderDetails() + } else { + console.log('页面已不活跃,停止计时器') + this.clearTimer() + } }, 60000) + + console.log('已启动使用时长更新计时器') }, // 清除定时器 @@ -331,6 +388,7 @@ export default { if (this.timer) { clearInterval(this.timer) this.timer = null + console.log('已清除使用时长更新计时器') } }, @@ -339,36 +397,47 @@ export default { if (this.statusCheckTimer) { clearInterval(this.statusCheckTimer) this.statusCheckTimer = null + console.log('已清除归还状态检查计时器') } }, // 开始状态检查定时器 startStatusCheckTimer() { this.currentStatusChecks = 0 + // 确保之前的计时器被清除 this.clearStatusCheckTimer() this.statusCheckTimer = setInterval(() => { - this.currentStatusChecks++ - this.checkReturnStatus() - - // 如果超过最大检查次数,停止定时器 - if (this.currentStatusChecks >= this.maxStatusChecks) { - this.clearStatusCheckTimer() + // 只有当页面活跃时才执行检查 + if (this.isPageActive) { + this.currentStatusChecks++ + console.log(`执行归还状态检查 (${this.currentStatusChecks}/${this.maxStatusChecks})`) + this.checkReturnStatus() - // 提示用户手动刷新 - uni.showToast({ - title: '请手动刷新查看归还状态', - icon: 'none', - duration: 3000 - }) + // 如果超过最大检查次数,停止定时器 + if (this.currentStatusChecks >= this.maxStatusChecks) { + this.clearStatusCheckTimer() + + // 提示用户手动刷新 + uni.showToast({ + title: '请手动刷新查看归还状态', + icon: 'none', + duration: 3000 + }) + } + } else { + console.log('页面已不活跃,停止状态检查计时器') + this.clearStatusCheckTimer() } }, this.statusCheckInterval) + + console.log('已启动归还状态检查计时器') }, // 通过设备号查询使用中的订单 async getOrderByDevice() { try { - uni.showLoading({ title: '加载中' }) + // uni.showLoading({ title: '加载中' }) if (!this.deviceId) { throw new Error('设备号不能为空') @@ -432,7 +501,10 @@ export default { // 检查归还状态 async checkReturnStatus() { try { - await this.getOrderDetails() + // 只有页面活跃时才执行检查 + if (this.isPageActive) { + await this.getOrderDetails() + } } catch (error) { console.error('检查归还状态失败:', error) } diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map index e019854..b444467 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/config/user.js.map @@ -1 +1 @@ -{"version":3,"file":"user.js","sources":["config/user.js"],"sourcesContent":["import request from './http'\n\n\nexport const login = (data) => {\n return request({\n url: '/app/user/login',\n method: 'get',\n data\n })\n}\n\n\nexport const getMyIndexInfo = (data) => {\n return request({\n url: '/app/user/userInfo',\n method: 'get',\n data,\n })\n}\n\n// 添加押金提现API\nexport const withdrawDeposit = (orderNo) => {\n console.log('调用提现API,订单号:', orderNo)\n return request({\n url: `/app/withdraw/add/${orderNo}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n//获取所有全部订单\nexport const getOrderList = (data) => {\n return request({\n url: '/app/order/list',\n method: 'get',\n data,\n hideLoading:true\n })\n}\n\n//查询是否有订单\nexport const queryHasOrder = (deviceNo) => {\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=in_used`,\n method: 'get',\n })\n}\n\n// 查询指定设备号下,特定状态的订单列表\nexport const checkOrdersByStatus = (deviceNo, statuses) => {\n // statuses 是一个包含状态字符串的数组,例如 ['in_used', 'waiting_for_payment']\n const statusQuery = statuses.join(','); // 后端需要支持逗号分隔的状态查询\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=${statusQuery}`,\n method: 'get',\n\t\thideLoading: true // 隐藏加载提示,避免干扰用户\n })\n}\n\n//设备查询\nexport const getDeviceInfo = (deviceNo) => {\n return request({\n url: `/app/device/${deviceNo}`,\n method: 'get',\n })\n}\n\n\n//创建订单\nexport const createOrder = (data) => {\n return request({\n url: '/app/order/add',\n method: 'post',\n data,\n })\n}\n\n//查询订单\nexport const queryById = (id) => {\n return request({\n url: `/app/order/${id}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n\n//取消订单\nexport const cancelOrder = (data) => {\n return request({\n url: '/orderInfo/cancelOrder',\n method: 'get',\n data,\n })\n}\n\n\n//结束订单\nexport const overOrderById = (orderId) => {\n console.log(`调用结束订单API, orderId: ${orderId}`)\n return request({\n url: `/app/order/close/${orderId}`,\n method: 'get',\n })\n}\n\n//立即租借\nexport const rentPowerBank = (deviceNo, phone) => {\n return request({\n url: '/app/device/rentPowerBank',\n method: 'post',\n data: { deviceNo, phone }\n })\n}\n\n//确认支付并弹出充电宝\nexport const confirmPaymentAndRent = (orderId) => {\n console.log(`确认支付并弹出充电宝, orderId: ${orderId}`)\n return request({\n url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,\n method: 'post'\n })\n}\n\n\n\n//投诉反馈\nexport const addUserFeedback = (data) => {\n return request({\n url: '/app/feedback/add',\n method: 'post',\n data,\n })\n}\n\n//强制打开空格子\nexport const forcefOpenEmptyGrid = (deviceNo) => {\n console.log(`强制打开空格子, deviceNo: ${deviceNo}`)\n return request({\n url: `/app/device/forcef/${deviceNo}`,\n method: 'post'\n })\n}\n\n// 通过订单号获取订单信息\nexport const getOrderByOrderNo = (orderNo) => {\n console.log('通过订单号获取订单信息:', orderNo)\n return request({\n url: `/app/order/byOrderNo/${orderNo}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n// 更新订单套餐信息\nexport const updateOrderPackage = (data) => {\n console.log('更新订单套餐信息:', data)\n return request({\n url: '/app/device/updateOrderPackage',\n method: 'post',\n data\n })\n}\n\n// 更新用户余额\nexport const updateUserBalance = (orderId) => {\n return request({\n url: `/app/user/updateBalance/${orderId}`,\n method: 'get',\n hideLoading: true\n })\n}\n"],"names":["request","uni"],"mappings":";;;AAGY,MAAC,QAAQ,CAAC,SAAS;AAC3B,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,iBAAiB,CAAC,SAAS;AACpC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,kBAAkB,CAAC,YAAY;AACxCC,gBAAAA,MAAY,MAAA,OAAA,wBAAA,gBAAgB,OAAO;AACnC,SAAOD,oBAAQ;AAAA,IACX,KAAK,qBAAqB,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAGY,MAAC,eAAe,CAAC,SAAS;AAClC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,aAAY;AAAA,EACpB,CAAK;AACL;AAWY,MAAC,sBAAsB,CAAC,UAAU,aAAa;AAEvD,QAAM,cAAc,SAAS,KAAK,GAAG;AACrC,SAAOA,oBAAQ;AAAA,IACX,KAAK,4BAA4B,QAAQ,gBAAgB,WAAW;AAAA,IACpE,QAAQ;AAAA,IACd,aAAa;AAAA;AAAA,EACf,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,eAAe,QAAQ;AAAA,IAC5B,QAAQ;AAAA,EAChB,CAAK;AACL;AAaY,MAAC,YAAY,CAAC,OAAO;AAC7B,SAAOA,oBAAQ;AAAA,IACX,KAAK,cAAc,EAAE;AAAA,IACrB,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAuBY,MAAC,gBAAgB,CAAC,UAAU,UAAU;AAC9C,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,EAAE,UAAU,MAAO;AAAA,EACjC,CAAK;AACL;AAGY,MAAC,wBAAwB,CAAC,YAAY;AAC9CC,gBAAY,MAAA,MAAA,OAAA,yBAAA,wBAAwB,OAAO,EAAE;AAC7C,SAAOD,oBAAQ;AAAA,IACX,KAAK,6CAA6C,OAAO;AAAA,IACzD,QAAQ;AAAA,EAChB,CAAK;AACL;AAiCY,MAAC,qBAAqB,CAAC,SAAS;AACxCC,gBAAAA,MAAA,MAAA,OAAA,yBAAY,aAAa,IAAI;AAC7B,SAAOD,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"user.js","sources":["config/user.js"],"sourcesContent":["import request from './http'\n\n\nexport const login = (data) => {\n return request({\n url: '/app/user/login',\n method: 'get',\n data\n })\n}\n\n\nexport const getMyIndexInfo = (data) => {\n return request({\n url: '/app/user/userInfo',\n method: 'get',\n data,\n })\n}\n\n// 添加押金提现API\nexport const withdrawDeposit = (orderNo) => {\n console.log('调用提现API,订单号:', orderNo)\n return request({\n url: `/app/withdraw/add/${orderNo}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n//获取所有全部订单\nexport const getOrderList = (data) => {\n return request({\n url: '/app/order/list',\n method: 'get',\n data,\n hideLoading:true\n })\n}\n\n//查询是否有订单\nexport const queryHasOrder = (deviceNo) => {\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=in_used`,\n method: 'get',\n })\n}\n\n// 查询指定设备号下,特定状态的订单列表\nexport const checkOrdersByStatus = (deviceNo, statuses) => {\n // statuses 是一个包含状态字符串的数组,例如 ['in_used', 'waiting_for_payment']\n const statusQuery = statuses.join(','); // 后端需要支持逗号分隔的状态查询\n return request({\n url: `/app/order/list?deviceNo=${deviceNo}&orderStatus=${statusQuery}`,\n method: 'get',\n\t\thideLoading: true // 隐藏加载提示,避免干扰用户\n })\n}\n\n//设备查询\nexport const getDeviceInfo = (deviceNo) => {\n return request({\n url: `/app/device/${deviceNo}`,\n method: 'get',\n })\n}\n\n\n//创建订单\nexport const createOrder = (data) => {\n return request({\n url: '/app/order/add',\n method: 'post',\n data,\n })\n}\n\n//查询订单\nexport const queryById = (id) => {\n console.log(`查询订单详情, orderId: ${id}`)\n return request({\n url: `/app/order/${id}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n\n//取消订单\nexport const cancelOrder = (data) => {\n return request({\n url: '/orderInfo/cancelOrder',\n method: 'get',\n data,\n })\n}\n\n\n//结束订单\nexport const overOrderById = (orderId) => {\n console.log(`调用结束订单API, orderId: ${orderId}`)\n return request({\n url: `/app/order/close/${orderId}`,\n method: 'get',\n })\n}\n\n//立即租借\nexport const rentPowerBank = (deviceNo, phone) => {\n return request({\n url: '/app/device/rentPowerBank',\n method: 'post',\n data: { deviceNo, phone }\n })\n}\n\n//确认支付并弹出充电宝\nexport const confirmPaymentAndRent = (orderId) => {\n console.log(`确认支付并弹出充电宝, orderId: ${orderId}`)\n return request({\n url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,\n method: 'post'\n })\n}\n\n\n\n//投诉反馈\nexport const addUserFeedback = (data) => {\n return request({\n url: '/app/feedback/add',\n method: 'post',\n data,\n })\n}\n\n//强制打开空格子\nexport const forcefOpenEmptyGrid = (deviceNo) => {\n console.log(`强制打开空格子, deviceNo: ${deviceNo}`)\n return request({\n url: `/app/device/forcef/${deviceNo}`,\n method: 'post'\n })\n}\n\n// 通过订单号获取订单信息\nexport const getOrderByOrderNo = (orderNo) => {\n console.log('通过订单号获取订单信息:', orderNo)\n return request({\n url: `/app/order/byOrderNo/${orderNo}`,\n method: 'get',\n hideLoading: true\n })\n}\n\n// 更新订单套餐信息\nexport const updateOrderPackage = (data) => {\n console.log('更新订单套餐信息:', data)\n return request({\n url: '/app/device/updateOrderPackage',\n method: 'post',\n data\n })\n}\n\n// 更新用户余额\nexport const updateUserBalance = (orderId) => {\n return request({\n url: `/app/user/updateBalance/${orderId}`,\n method: 'post',\n hideLoading: true\n })\n}\n"],"names":["request","uni"],"mappings":";;;AAGY,MAAC,QAAQ,CAAC,SAAS;AAC3B,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,iBAAiB,CAAC,SAAS;AACpC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,kBAAkB,CAAC,YAAY;AACxCC,gBAAAA,MAAY,MAAA,OAAA,wBAAA,gBAAgB,OAAO;AACnC,SAAOD,oBAAQ;AAAA,IACX,KAAK,qBAAqB,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAGY,MAAC,eAAe,CAAC,SAAS;AAClC,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,aAAY;AAAA,EACpB,CAAK;AACL;AAWY,MAAC,sBAAsB,CAAC,UAAU,aAAa;AAEvD,QAAM,cAAc,SAAS,KAAK,GAAG;AACrC,SAAOA,oBAAQ;AAAA,IACX,KAAK,4BAA4B,QAAQ,gBAAgB,WAAW;AAAA,IACpE,QAAQ;AAAA,IACd,aAAa;AAAA;AAAA,EACf,CAAK;AACL;AAGY,MAAC,gBAAgB,CAAC,aAAa;AACvC,SAAOA,oBAAQ;AAAA,IACX,KAAK,eAAe,QAAQ;AAAA,IAC5B,QAAQ;AAAA,EAChB,CAAK;AACL;AAaY,MAAC,YAAY,CAAC,OAAO;AAC7BC,gBAAA,MAAA,MAAA,OAAA,wBAAY,oBAAoB,EAAE,EAAE;AACpC,SAAOD,oBAAQ;AAAA,IACX,KAAK,cAAc,EAAE;AAAA,IACrB,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;AAuBY,MAAC,gBAAgB,CAAC,UAAU,UAAU;AAC9C,SAAOA,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,EAAE,UAAU,MAAO;AAAA,EACjC,CAAK;AACL;AAGY,MAAC,wBAAwB,CAAC,YAAY;AAC9CC,gBAAY,MAAA,MAAA,OAAA,yBAAA,wBAAwB,OAAO,EAAE;AAC7C,SAAOD,oBAAQ;AAAA,IACX,KAAK,6CAA6C,OAAO;AAAA,IACzD,QAAQ;AAAA,EAChB,CAAK;AACL;AAiCY,MAAC,qBAAqB,CAAC,SAAS;AACxCC,gBAAAA,MAAA,MAAA,OAAA,yBAAY,aAAa,IAAI;AAC7B,SAAOD,oBAAQ;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,EACR,CAAK;AACL;AAGY,MAAC,oBAAoB,CAAC,YAAY;AAC1C,SAAOA,oBAAQ;AAAA,IACX,KAAK,2BAA2B,OAAO;AAAA,IACvC,QAAQ;AAAA,IACR,aAAa;AAAA,EACrB,CAAK;AACL;;;;;;;;;;;;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map index cf5cdd2..2f2fad0 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/payment.js.map @@ -1 +1 @@ -{"version":3,"file":"payment.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcGF5bWVudC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/payment.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"} \ No newline at end of file +{"version":3,"file":"payment.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvcGF5bWVudC52dWU"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/payment.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map index c59aa25..55a64c8 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/return/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map index 30bb43f..2a8f76b 100644 --- a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/orderMonitor.js.map @@ -1 +1 @@ -{"version":3,"file":"orderMonitor.js","sources":["utils/orderMonitor.js"],"sourcesContent":["import { queryById } from '@/config/user.js'\r\n\r\n/**\r\n * 订单监控服务\r\n * 用于在后台监控订单状态变化,特别是归还完成状态\r\n */\r\nclass OrderMonitor {\r\n constructor() {\r\n this.activeOrders = new Map() // 存储活跃订单 Map\r\n this.timer = null\r\n this.checkInterval = 10000 // 10秒检查一次\r\n this.isRunning = false\r\n }\r\n \r\n /**\r\n * 添加订单到监控队列\r\n * @param {Object} orderData 订单数据对象,必须包含orderId字段\r\n */\r\n addOrder(orderData) {\r\n if (!orderData || !orderData.orderId) {\r\n console.error('添加订单监控失败:无效的订单数据')\r\n return\r\n }\r\n \r\n console.log('添加订单到监控队列:', orderData.orderId)\r\n this.activeOrders.set(orderData.orderId, orderData)\r\n \r\n // 如果监控服务尚未启动,则启动\r\n if (!this.isRunning) {\r\n this.start()\r\n }\r\n }\r\n \r\n /**\r\n * 移除订单的监控\r\n * @param {String} orderId 订单ID\r\n */\r\n removeOrder(orderId) {\r\n if (this.activeOrders.has(orderId)) {\r\n console.log('从监控队列移除订单:', orderId)\r\n this.activeOrders.delete(orderId)\r\n \r\n // 如果没有订单需要监控了,停止服务\r\n if (this.activeOrders.size === 0) {\r\n this.stop()\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * 启动监控服务\r\n */\r\n start() {\r\n if (this.isRunning) return\r\n \r\n console.log('启动订单监控服务')\r\n this.isRunning = true\r\n this.checkOrders()\r\n \r\n this.timer = setInterval(() => {\r\n this.checkOrders()\r\n }, this.checkInterval)\r\n }\r\n \r\n /**\r\n * 停止监控服务\r\n */\r\n stop() {\r\n if (!this.isRunning) return\r\n \r\n console.log('停止订单监控服务')\r\n this.isRunning = false\r\n \r\n if (this.timer) {\r\n clearInterval(this.timer)\r\n this.timer = null\r\n }\r\n }\r\n \r\n /**\r\n * 检查所有活跃订单的状态\r\n */\r\n async checkOrders() {\r\n if (this.activeOrders.size === 0) return\r\n \r\n console.log(`检查 ${this.activeOrders.size} 个活跃订单状态`)\r\n \r\n for (const [orderId, orderData] of this.activeOrders.entries()) {\r\n try {\r\n await this.checkOrderStatus(orderId)\r\n } catch (error) {\r\n console.error(`检查订单状态失败: ${orderId}`, error)\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * 检查单个订单的状态\r\n * @param {String} orderId 订单ID\r\n */\r\n async checkOrderStatus(orderId) {\r\n try {\r\n console.log(`检查订单 ${orderId} 的状态`)\r\n const result = await queryById(orderId)\r\n \r\n if (result.code === 200 && result.data) {\r\n const orderData = result.data\r\n \r\n // 更新本地存储的订单数据\r\n this.activeOrders.set(orderId, orderData)\r\n \r\n // 检查订单是否已完成\r\n if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') {\r\n console.log(`订单 ${orderId} 已完成!`)\r\n \r\n // 触发全局事件\r\n uni.$emit('orderCompleted', orderData)\r\n \r\n // 显示全局通知\r\n uni.showToast({\r\n title: '充电宝归还成功',\r\n icon: 'success',\r\n duration: 2000\r\n })\r\n \r\n // 播放通知声音(如果需要)\r\n const innerAudioContext = uni.createInnerAudioContext()\r\n innerAudioContext.src = '/static/audio/return_success.mp3'\r\n innerAudioContext.play()\r\n \r\n // 完成的订单不再需要监控\r\n this.removeOrder(orderId)\r\n \r\n // 如果用户不在归还页面,则显示归还成功弹窗\r\n setTimeout(() => {\r\n uni.showModal({\r\n title: '归还成功',\r\n content: '充电宝已归还成功,剩余押金将退还到您的账户',\r\n confirmText: '查看详情',\r\n success: (res) => {\r\n if (res.confirm) {\r\n // 跳转到归还成功页面查看详情\r\n uni.redirectTo({\r\n url: `/pages/order/return-success?orderId=${orderId}`\r\n })\r\n }\r\n }\r\n })\r\n }, 500)\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`检查订单 ${orderId} 状态出错:`, error)\r\n }\r\n }\r\n}\r\n\r\n// 导出单例实例\r\nexport const orderMonitor = new OrderMonitor()\r\n\r\n// 页面加载时自动恢复监控上次的活跃订单(如果有)\r\nconst initOrderMonitor = () => {\r\n const lastActiveOrderId = uni.getStorageSync('activeOrderId')\r\n if (lastActiveOrderId) {\r\n const lastOrderData = { orderId: lastActiveOrderId }\r\n orderMonitor.addOrder(lastOrderData)\r\n }\r\n}\r\n\r\n// 初始化\r\ninitOrderMonitor() "],"names":["uni","queryById"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"orderMonitor.js","sources":["utils/orderMonitor.js"],"sourcesContent":["import { queryById } from '@/config/user.js'\r\n\r\n/**\r\n * 订单监控服务\r\n * 用于在后台监控订单状态变化,特别是归还完成状态\r\n */\r\nclass OrderMonitor {\r\n constructor() {\r\n this.activeOrders = new Map() // 存储活跃订单 Map\r\n this.timer = null\r\n this.checkInterval = 10000 // 10秒检查一次\r\n this.isRunning = false\r\n this.currentPage = null // 当前活跃页面\r\n }\r\n \r\n /**\r\n * 添加订单到监控队列\r\n * @param {Object} orderData 订单数据对象,必须包含orderId字段\r\n * @param {String} pageName 关联的页面名称,默认为'return'\r\n */\r\n addOrder(orderData, pageName = 'return') {\r\n if (!orderData || !orderData.orderId) {\r\n console.error('添加订单监控失败:无效的订单数据')\r\n return\r\n }\r\n \r\n console.log(`添加订单到监控队列: ${orderData.orderId}, 页面: ${pageName}`)\r\n this.activeOrders.set(orderData.orderId, {\r\n ...orderData,\r\n pageName\r\n })\r\n \r\n // 如果监控服务尚未启动,则启动\r\n if (!this.isRunning) {\r\n this.start()\r\n }\r\n }\r\n \r\n /**\r\n * 移除订单的监控\r\n * @param {Object} params 包含orderId或pageName的对象\r\n */\r\n removeOrder(params) {\r\n if (!params) return\r\n \r\n // 如果提供了orderId,直接删除该订单\r\n if (params.orderId && this.activeOrders.has(params.orderId)) {\r\n console.log('从监控队列移除订单:', params.orderId)\r\n this.activeOrders.delete(params.orderId)\r\n } \r\n // 如果提供了pageName,删除该页面关联的所有订单\r\n else if (params.pageName) {\r\n console.log('从监控队列移除页面相关订单:', params.pageName)\r\n for (const [orderId, data] of this.activeOrders.entries()) {\r\n if (data.pageName === params.pageName) {\r\n this.activeOrders.delete(orderId)\r\n }\r\n }\r\n }\r\n \r\n // 如果没有订单需要监控了,停止服务\r\n if (this.activeOrders.size === 0) {\r\n this.stop()\r\n }\r\n }\r\n \r\n /**\r\n * 设置当前活跃页面\r\n * @param {String} pageName 页面名称\r\n */\r\n setActivePage(pageName) {\r\n this.currentPage = pageName\r\n console.log('设置当前活跃页面:', pageName)\r\n }\r\n \r\n /**\r\n * 启动监控服务\r\n */\r\n start() {\r\n if (this.isRunning) return\r\n \r\n console.log('启动订单监控服务')\r\n this.isRunning = true\r\n this.checkOrders()\r\n \r\n this.timer = setInterval(() => {\r\n this.checkOrders()\r\n }, this.checkInterval)\r\n }\r\n \r\n /**\r\n * 停止监控服务\r\n */\r\n stop() {\r\n if (!this.isRunning) return\r\n \r\n console.log('停止订单监控服务')\r\n this.isRunning = false\r\n \r\n if (this.timer) {\r\n clearInterval(this.timer)\r\n this.timer = null\r\n }\r\n }\r\n \r\n /**\r\n * 检查所有活跃订单的状态\r\n */\r\n async checkOrders() {\r\n if (this.activeOrders.size === 0) return\r\n \r\n console.log(`检查 ${this.activeOrders.size} 个活跃订单状态, 当前页面: ${this.currentPage}`)\r\n \r\n // 只检查当前活跃页面关联的订单,或无页面关联的订单\r\n for (const [orderId, data] of this.activeOrders.entries()) {\r\n try {\r\n // 只在归还页面(或页面未指定时)才执行轮询\r\n if (!data.pageName || data.pageName === 'return') {\r\n if (this.currentPage === 'return' || this.currentPage === null) {\r\n await this.checkOrderStatus(orderId)\r\n } else {\r\n console.log(`跳过订单状态检查: ${orderId}, 当前不在归还页面`)\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`检查订单状态失败: ${orderId}`, error)\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * 检查单个订单的状态\r\n * @param {String} orderId 订单ID\r\n */\r\n async checkOrderStatus(orderId) {\r\n try {\r\n console.log(`检查订单 ${orderId} 的状态`)\r\n const result = await queryById(orderId)\r\n \r\n if (result.code === 200 && result.data) {\r\n const orderData = result.data\r\n const existingData = this.activeOrders.get(orderId)\r\n const pageName = existingData ? existingData.pageName : null\r\n \r\n // 更新本地存储的订单数据,保留页面关联信息\r\n this.activeOrders.set(orderId, {\r\n ...orderData,\r\n pageName\r\n })\r\n \r\n // 检查订单是否已完成\r\n if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') {\r\n console.log(`订单 ${orderId} 已完成!`)\r\n \r\n // 触发全局事件\r\n uni.$emit('orderCompleted', orderData)\r\n \r\n // 显示全局通知\r\n uni.showToast({\r\n title: '充电宝归还成功',\r\n icon: 'success',\r\n duration: 2000\r\n })\r\n \r\n // 播放通知声音(如果需要)\r\n const innerAudioContext = uni.createInnerAudioContext()\r\n innerAudioContext.src = '/static/audio/return_success.mp3'\r\n innerAudioContext.play()\r\n \r\n // 完成的订单不再需要监控\r\n this.removeOrder({orderId})\r\n \r\n // 如果用户不在归还页面,则显示归还成功弹窗\r\n setTimeout(() => {\r\n uni.showModal({\r\n title: '归还成功',\r\n content: '充电宝已归还成功,剩余押金将退还到您的账户',\r\n confirmText: '查看详情',\r\n success: (res) => {\r\n if (res.confirm) {\r\n // 跳转到归还成功页面查看详情\r\n uni.redirectTo({\r\n url: `/pages/order/return-success?orderId=${orderId}`\r\n })\r\n }\r\n }\r\n })\r\n }, 500)\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`检查订单 ${orderId} 状态出错:`, error)\r\n }\r\n }\r\n}\r\n\r\n// 导出单例实例\r\nexport const orderMonitor = new OrderMonitor()\r\n\r\n// 监听页面切换事件\r\nuni.onAppRoute((route) => {\r\n const pagePath = route.path || ''\r\n const pageSegments = pagePath.split('/')\r\n const pageName = pageSegments[pageSegments.length - 1]\r\n \r\n // 设置当前活跃页面\r\n orderMonitor.setActivePage(pageName || null)\r\n \r\n console.log('页面切换:', pagePath, '当前活跃页面:', pageName)\r\n})\r\n\r\n// 页面加载时自动恢复监控上次的活跃订单(如果有)\r\nconst initOrderMonitor = () => {\r\n const lastActiveOrderId = uni.getStorageSync('activeOrderId')\r\n if (lastActiveOrderId) {\r\n const lastOrderData = { orderId: lastActiveOrderId }\r\n orderMonitor.addOrder(lastOrderData, 'return')\r\n }\r\n}\r\n\r\n// 初始化\r\ninitOrderMonitor() "],"names":["uni","queryById"],"mappings":"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"} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js index 38b0145..44042b2 100644 --- a/unpackage/dist/dev/mp-weixin/common/vendor.js +++ b/unpackage/dist/dev/mp-weixin/common/vendor.js @@ -6876,7 +6876,7 @@ function initOnError() { function initRuntimeSocketService() { const hosts = "10.8.0.5,192.168.1.15,127.0.0.1"; const port = "8090"; - const id = "mp-weixin_V-Usyu"; + const id = "mp-weixin_WlfuId"; const lazy = typeof swan !== "undefined"; let restoreError = lazy ? () => { } : initOnError(); diff --git a/unpackage/dist/dev/mp-weixin/config/user.js b/unpackage/dist/dev/mp-weixin/config/user.js index 83c2015..32211e0 100644 --- a/unpackage/dist/dev/mp-weixin/config/user.js +++ b/unpackage/dist/dev/mp-weixin/config/user.js @@ -47,6 +47,7 @@ const getDeviceInfo = (deviceNo) => { }); }; const queryById = (id) => { + common_vendor.index.__f__("log", "at config/user.js:80", `查询订单详情, orderId: ${id}`); return config_http.request({ url: `/app/order/${id}`, method: "get", @@ -61,20 +62,27 @@ const rentPowerBank = (deviceNo, phone) => { }); }; const confirmPaymentAndRent = (orderId) => { - common_vendor.index.__f__("log", "at config/user.js:118", `确认支付并弹出充电宝, orderId: ${orderId}`); + common_vendor.index.__f__("log", "at config/user.js:119", `确认支付并弹出充电宝, orderId: ${orderId}`); return config_http.request({ url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`, method: "post" }); }; const updateOrderPackage = (data) => { - common_vendor.index.__f__("log", "at config/user.js:157", "更新订单套餐信息:", data); + common_vendor.index.__f__("log", "at config/user.js:158", "更新订单套餐信息:", data); return config_http.request({ url: "/app/device/updateOrderPackage", method: "post", data }); }; +const updateUserBalance = (orderId) => { + return config_http.request({ + url: `/app/user/updateBalance/${orderId}`, + method: "post", + hideLoading: true + }); +}; exports.checkOrdersByStatus = checkOrdersByStatus; exports.confirmPaymentAndRent = confirmPaymentAndRent; exports.getDeviceInfo = getDeviceInfo; @@ -84,5 +92,6 @@ exports.login = login; exports.queryById = queryById; exports.rentPowerBank = rentPowerBank; exports.updateOrderPackage = updateOrderPackage; +exports.updateUserBalance = updateUserBalance; exports.withdrawDeposit = withdrawDeposit; //# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map diff --git a/unpackage/dist/dev/mp-weixin/pages/order/payment.js b/unpackage/dist/dev/mp-weixin/pages/order/payment.js index 2264c96..065c31b 100644 --- a/unpackage/dist/dev/mp-weixin/pages/order/payment.js +++ b/unpackage/dist/dev/mp-weixin/pages/order/payment.js @@ -76,6 +76,7 @@ const _sfc_main = { formattedTime = this.formatTime(/* @__PURE__ */ new Date()); } } catch (e) { + common_vendor.index.__f__("error", "at pages/order/payment.vue:158", "时间格式化错误:", e); formattedTime = this.formatTime(/* @__PURE__ */ new Date()); } this.orderInfo = { @@ -84,12 +85,12 @@ const _sfc_main = { createTime: formattedTime, phone: orderData.phone, deposit: this.passedDepositAmount || orderData.depositAmount || "99.00", - amount: orderData.packagePrice || this.packageInfo.price || "0.00" + // 优先使用传递的押金,然后是订单中的押金,最后默认99元 + amount: orderData.amount || this.packageInfo.price || "0.00" }; - if (orderData.packageTime) { - this.packageInfo.time = `${orderData.packageTime / 60}小时`; - this.packageInfo.price = orderData.packagePrice || "0.00"; - } else if (this.packageInfo.time) { + if (!orderData.packageTime && this.packageInfo.time) { + this.orderInfo.packageTime = this.packageInfo.time; + this.orderInfo.packagePrice = this.packageInfo.price; } } else { throw new Error("获取订单信息失败"); @@ -126,6 +127,11 @@ const _sfc_main = { title: "支付成功", icon: "success" }); + try { + await config_user.updateUserBalance(this.orderId); + } catch (error) { + common_vendor.index.__f__("warn", "at pages/order/payment.vue:223", "更新用户余额失败:", error); + } setTimeout(() => { common_vendor.index.redirectTo({ url: `/pages/order/index?orderId=${this.orderId}` @@ -133,6 +139,7 @@ const _sfc_main = { }, 1500); }, fail: (err) => { + common_vendor.index.__f__("error", "at pages/order/payment.vue:234", "支付失败:", err); throw new Error("支付失败,请重试"); } }); @@ -229,7 +236,7 @@ const _sfc_main = { throw new Error("查询订单状态失败"); } } catch (error) { - common_vendor.index.__f__("error", "at pages/order/payment.vue:332", "查询订单状态错误:", error); + common_vendor.index.__f__("error", "at pages/order/payment.vue:342", "查询订单状态错误:", error); return null; } } diff --git a/unpackage/dist/dev/mp-weixin/pages/return/index.js b/unpackage/dist/dev/mp-weixin/pages/return/index.js index 797bc24..cee622f 100644 --- a/unpackage/dist/dev/mp-weixin/pages/return/index.js +++ b/unpackage/dist/dev/mp-weixin/pages/return/index.js @@ -21,15 +21,18 @@ const _sfc_main = { maxStatusChecks: 30, // 最多检查30次 currentStatusChecks: 0, - statusCheckInterval: 5e3 + statusCheckInterval: 5e3, // 5秒检查一次 + isPageActive: false + // 跟踪页面是否活跃 }; }, onLoad(options) { - common_vendor.index.__f__("log", "at pages/return/index.vue:96", "Return page loaded with options:", JSON.stringify(options)); + common_vendor.index.__f__("log", "at pages/return/index.vue:97", "Return page loaded with options:", JSON.stringify(options)); + this.isPageActive = true; this.orderInfo.orderId = options.orderId || ""; this.deviceId = options.deviceNo || options.deviceId || ""; - common_vendor.index.__f__("log", "at pages/return/index.vue:102", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`); + common_vendor.index.__f__("log", "at pages/return/index.vue:106", `初始化参数: orderId=${this.orderInfo.orderId}, deviceId=${this.deviceId}`); if (!this.orderInfo.orderId && this.deviceId) { this.getOrderByDevice(); } else if (this.orderInfo.orderId) { @@ -39,13 +42,14 @@ const _sfc_main = { common_vendor.index.setStorageSync("activeOrderId", this.orderInfo.orderId); try { if (this.$orderMonitor) { - this.$orderMonitor.addOrder({ orderId: this.orderInfo.orderId }); - common_vendor.index.__f__("log", "at pages/return/index.vue:122", "订单已添加到监控队列:", this.orderInfo.orderId); + this.$orderMonitor.removeOrder({ orderId: this.orderInfo.orderId }); + this.$orderMonitor.addOrder({ orderId: this.orderInfo.orderId }, "return"); + common_vendor.index.__f__("log", "at pages/return/index.vue:129", "订单已添加到监控队列:", this.orderInfo.orderId); } else { - common_vendor.index.__f__("warn", "at pages/return/index.vue:124", "$orderMonitor 未定义,无法添加订单到监控队列"); + common_vendor.index.__f__("warn", "at pages/return/index.vue:131", "$orderMonitor 未定义,无法添加订单到监控队列"); } } catch (error) { - common_vendor.index.__f__("error", "at pages/return/index.vue:127", "添加订单到监控队列失败:", error); + common_vendor.index.__f__("error", "at pages/return/index.vue:134", "添加订单到监控队列失败:", error); } } else { common_vendor.index.showToast({ @@ -58,15 +62,37 @@ const _sfc_main = { } common_vendor.index.$on("orderCompleted", this.handleOrderCompleted); }, - onUnload() { + // 添加onHide生命周期,处理页面隐藏时的清理工作 + onHide() { + common_vendor.index.__f__("log", "at pages/return/index.vue:154", "归还页面隐藏,清理计时器资源和监控服务"); + this.isPageActive = false; this.clearTimer(); this.clearStatusCheckTimer(); + this.removeFromOrderMonitor(); + }, + onUnload() { + common_vendor.index.__f__("log", "at pages/return/index.vue:166", "归还页面卸载,清理所有资源"); + this.isPageActive = false; + this.clearTimer(); + this.clearStatusCheckTimer(); + this.removeFromOrderMonitor(); common_vendor.index.$off("orderCompleted", this.handleOrderCompleted); }, methods: { + // 从订单监控服务中移除当前订单 + removeFromOrderMonitor() { + if (this.orderInfo.orderId && this.$orderMonitor) { + try { + this.$orderMonitor.removeOrder({ orderId: this.orderInfo.orderId }); + common_vendor.index.__f__("log", "at pages/return/index.vue:186", "订单已从监控队列移除:", this.orderInfo.orderId); + } catch (error) { + common_vendor.index.__f__("error", "at pages/return/index.vue:188", "从监控队列移除订单失败:", error); + } + } + }, // 处理订单完成事件(可由任何地方触发) handleOrderCompleted(orderData) { - common_vendor.index.__f__("log", "at pages/return/index.vue:155", "收到订单完成事件:", orderData); + common_vendor.index.__f__("log", "at pages/return/index.vue:194", "收到订单完成事件:", orderData); if (orderData.orderId === this.orderInfo.orderId || orderData.orderNo === this.orderInfo.orderNo) { this.showReturnSuccessModal(orderData); } @@ -108,18 +134,21 @@ const _sfc_main = { }, // 获取订单详情 async getOrderDetails() { + if (!this.isPageActive) { + common_vendor.index.__f__("log", "at pages/return/index.vue:250", "页面已不活跃,跳过订单详情请求"); + return; + } try { - common_vendor.index.showLoading({ title: "加载中" }); if (!this.orderInfo.orderId) { throw new Error("订单ID不能为空"); } - common_vendor.index.__f__("log", "at pages/return/index.vue:216", "请求订单详情, orderId:", this.orderInfo.orderId); + common_vendor.index.__f__("log", "at pages/return/index.vue:261", "请求订单详情, orderId:", this.orderInfo.orderId); const result = await config_user.queryById(this.orderInfo.orderId); - common_vendor.index.__f__("log", "at pages/return/index.vue:218", "订单详情结果:", JSON.stringify(result)); + common_vendor.index.__f__("log", "at pages/return/index.vue:263", "订单详情结果:", JSON.stringify(result)); if (result.code === 200 && result.data) { const orderData = result.data; - common_vendor.index.__f__("log", "at pages/return/index.vue:222", "订单原始数据:", orderData); - common_vendor.index.__f__("log", "at pages/return/index.vue:223", "开始时间字段:", orderData.startTime, typeof orderData.startTime); + common_vendor.index.__f__("log", "at pages/return/index.vue:267", "订单原始数据:", orderData); + common_vendor.index.__f__("log", "at pages/return/index.vue:268", "开始时间字段:", orderData.startTime, typeof orderData.startTime); if (orderData.orderStatus) { this.orderInfo.orderStatus = orderData.orderStatus; } @@ -129,12 +158,12 @@ const _sfc_main = { return; } this.updateOrderInfo(orderData); - common_vendor.index.__f__("log", "at pages/return/index.vue:245", "更新后的开始时间:", this.orderInfo.startTime); + common_vendor.index.__f__("log", "at pages/return/index.vue:290", "更新后的开始时间:", this.orderInfo.startTime); } else { throw new Error(result.msg || "获取订单详情失败"); } } catch (error) { - common_vendor.index.__f__("error", "at pages/return/index.vue:250", "获取订单详情错误:", error); + common_vendor.index.__f__("error", "at pages/return/index.vue:295", "获取订单详情错误:", error); common_vendor.index.showToast({ title: error.message || "获取订单信息失败", icon: "none" @@ -157,7 +186,7 @@ const _sfc_main = { }, // 使用后端返回的使用时长和费用数据 updateOrderInfo(orderData) { - common_vendor.index.__f__("log", "at pages/return/index.vue:278", "更新订单信息:", JSON.stringify(orderData)); + common_vendor.index.__f__("log", "at pages/return/index.vue:323", "更新订单信息:", JSON.stringify(orderData)); this.orderInfo.usedTime = orderData.usedTime || "0分钟"; this.orderInfo.currentFee = orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00"; if (orderData.orderStatus) { @@ -166,16 +195,16 @@ const _sfc_main = { this.orderInfo._rawStartTime = orderData.startTime; if (orderData.startTime) { try { - common_vendor.index.__f__("log", "at pages/return/index.vue:297", "API返回的开始时间:", orderData.startTime); + common_vendor.index.__f__("log", "at pages/return/index.vue:342", "API返回的开始时间:", orderData.startTime); this.orderInfo.startTime = orderData.startTime; } catch (e) { - common_vendor.index.__f__("error", "at pages/return/index.vue:301", "更新开始时间错误:", e); + common_vendor.index.__f__("error", "at pages/return/index.vue:346", "更新开始时间错误:", e); this.orderInfo.startTime = "未知"; } } else { - common_vendor.index.__f__("warn", "at pages/return/index.vue:305", "API返回的订单数据中没有startTime字段"); + common_vendor.index.__f__("warn", "at pages/return/index.vue:350", "API返回的订单数据中没有startTime字段"); if (orderData.createTime) { - common_vendor.index.__f__("log", "at pages/return/index.vue:308", "使用createTime作为备选:", orderData.createTime); + common_vendor.index.__f__("log", "at pages/return/index.vue:353", "使用createTime作为备选:", orderData.createTime); this.orderInfo.startTime = orderData.createTime; } else { this.orderInfo.startTime = "未知"; @@ -187,15 +216,24 @@ const _sfc_main = { }, // 更新使用时长的定时器 startTimer() { + this.clearTimer(); this.timer = setInterval(() => { - this.getOrderDetails(); + if (this.isPageActive) { + common_vendor.index.__f__("log", "at pages/return/index.vue:375", "执行定时更新订单信息"); + this.getOrderDetails(); + } else { + common_vendor.index.__f__("log", "at pages/return/index.vue:378", "页面已不活跃,停止计时器"); + this.clearTimer(); + } }, 6e4); + common_vendor.index.__f__("log", "at pages/return/index.vue:383", "已启动使用时长更新计时器"); }, // 清除定时器 clearTimer() { if (this.timer) { clearInterval(this.timer); this.timer = null; + common_vendor.index.__f__("log", "at pages/return/index.vue:391", "已清除使用时长更新计时器"); } }, // 清除状态检查定时器 @@ -203,6 +241,7 @@ const _sfc_main = { if (this.statusCheckTimer) { clearInterval(this.statusCheckTimer); this.statusCheckTimer = null; + common_vendor.index.__f__("log", "at pages/return/index.vue:400", "已清除归还状态检查计时器"); } }, // 开始状态检查定时器 @@ -210,22 +249,28 @@ const _sfc_main = { this.currentStatusChecks = 0; this.clearStatusCheckTimer(); this.statusCheckTimer = setInterval(() => { - this.currentStatusChecks++; - this.checkReturnStatus(); - if (this.currentStatusChecks >= this.maxStatusChecks) { + if (this.isPageActive) { + this.currentStatusChecks++; + common_vendor.index.__f__("log", "at pages/return/index.vue:414", `执行归还状态检查 (${this.currentStatusChecks}/${this.maxStatusChecks})`); + this.checkReturnStatus(); + if (this.currentStatusChecks >= this.maxStatusChecks) { + this.clearStatusCheckTimer(); + common_vendor.index.showToast({ + title: "请手动刷新查看归还状态", + icon: "none", + duration: 3e3 + }); + } + } else { + common_vendor.index.__f__("log", "at pages/return/index.vue:429", "页面已不活跃,停止状态检查计时器"); this.clearStatusCheckTimer(); - common_vendor.index.showToast({ - title: "请手动刷新查看归还状态", - icon: "none", - duration: 3e3 - }); } }, this.statusCheckInterval); + common_vendor.index.__f__("log", "at pages/return/index.vue:434", "已启动归还状态检查计时器"); }, // 通过设备号查询使用中的订单 async getOrderByDevice() { try { - common_vendor.index.showLoading({ title: "加载中" }); if (!this.deviceId) { throw new Error("设备号不能为空"); } @@ -237,16 +282,16 @@ const _sfc_main = { "Clientid": common_vendor.index.getStorageSync("client_id") } }); - common_vendor.index.__f__("log", "at pages/return/index.vue:387", "通过设备号查询订单结果:", JSON.stringify(inUseRes)); + common_vendor.index.__f__("log", "at pages/return/index.vue:456", "通过设备号查询订单结果:", JSON.stringify(inUseRes)); if (inUseRes.statusCode === 200 && inUseRes.data.code === 200 && inUseRes.data.data) { const inUseOrder = inUseRes.data.data; - common_vendor.index.__f__("log", "at pages/return/index.vue:391", "使用中的订单:", inUseOrder); + common_vendor.index.__f__("log", "at pages/return/index.vue:460", "使用中的订单:", inUseOrder); this.orderInfo.orderId = inUseOrder.orderId; if (inUseOrder.orderStatus) { this.orderInfo.orderStatus = inUseOrder.orderStatus; } if (inUseOrder.startTime) { - common_vendor.index.__f__("log", "at pages/return/index.vue:403", "inUse API返回的开始时间:", inUseOrder.startTime); + common_vendor.index.__f__("log", "at pages/return/index.vue:472", "inUse API返回的开始时间:", inUseOrder.startTime); this.orderInfo.startTime = inUseOrder.startTime; } this.getOrderDetails(); @@ -256,7 +301,7 @@ const _sfc_main = { throw new Error("未找到使用中的订单"); } } catch (error) { - common_vendor.index.__f__("error", "at pages/return/index.vue:417", "通过设备号查询订单失败:", error); + common_vendor.index.__f__("error", "at pages/return/index.vue:486", "通过设备号查询订单失败:", error); common_vendor.index.showToast({ title: error.message || "获取订单信息失败", icon: "none" @@ -271,9 +316,11 @@ const _sfc_main = { // 检查归还状态 async checkReturnStatus() { try { - await this.getOrderDetails(); + if (this.isPageActive) { + await this.getOrderDetails(); + } } catch (error) { - common_vendor.index.__f__("error", "at pages/return/index.vue:437", "检查归还状态失败:", error); + common_vendor.index.__f__("error", "at pages/return/index.vue:509", "检查归还状态失败:", error); } }, // 返回首页 diff --git a/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js b/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js index c2d2eef..3d461a1 100644 --- a/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js +++ b/unpackage/dist/dev/mp-weixin/utils/orderMonitor.js @@ -7,34 +7,56 @@ class OrderMonitor { this.timer = null; this.checkInterval = 1e4; this.isRunning = false; + this.currentPage = null; } /** * 添加订单到监控队列 * @param {Object} orderData 订单数据对象,必须包含orderId字段 + * @param {String} pageName 关联的页面名称,默认为'return' */ - addOrder(orderData) { + addOrder(orderData, pageName = "return") { if (!orderData || !orderData.orderId) { - common_vendor.index.__f__("error", "at utils/orderMonitor.js:21", "添加订单监控失败:无效的订单数据"); + common_vendor.index.__f__("error", "at utils/orderMonitor.js:23", "添加订单监控失败:无效的订单数据"); return; } - common_vendor.index.__f__("log", "at utils/orderMonitor.js:25", "添加订单到监控队列:", orderData.orderId); - this.activeOrders.set(orderData.orderId, orderData); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:27", `添加订单到监控队列: ${orderData.orderId}, 页面: ${pageName}`); + this.activeOrders.set(orderData.orderId, { + ...orderData, + pageName + }); if (!this.isRunning) { this.start(); } } /** * 移除订单的监控 - * @param {String} orderId 订单ID + * @param {Object} params 包含orderId或pageName的对象 */ - removeOrder(orderId) { - if (this.activeOrders.has(orderId)) { - common_vendor.index.__f__("log", "at utils/orderMonitor.js:40", "从监控队列移除订单:", orderId); - this.activeOrders.delete(orderId); - if (this.activeOrders.size === 0) { - this.stop(); + removeOrder(params) { + if (!params) + return; + if (params.orderId && this.activeOrders.has(params.orderId)) { + common_vendor.index.__f__("log", "at utils/orderMonitor.js:48", "从监控队列移除订单:", params.orderId); + this.activeOrders.delete(params.orderId); + } else if (params.pageName) { + common_vendor.index.__f__("log", "at utils/orderMonitor.js:53", "从监控队列移除页面相关订单:", params.pageName); + for (const [orderId, data] of this.activeOrders.entries()) { + if (data.pageName === params.pageName) { + this.activeOrders.delete(orderId); + } } } + if (this.activeOrders.size === 0) { + this.stop(); + } + } + /** + * 设置当前活跃页面 + * @param {String} pageName 页面名称 + */ + setActivePage(pageName) { + this.currentPage = pageName; + common_vendor.index.__f__("log", "at utils/orderMonitor.js:73", "设置当前活跃页面:", pageName); } /** * 启动监控服务 @@ -42,7 +64,7 @@ class OrderMonitor { start() { if (this.isRunning) return; - common_vendor.index.__f__("log", "at utils/orderMonitor.js:56", "启动订单监控服务"); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:82", "启动订单监控服务"); this.isRunning = true; this.checkOrders(); this.timer = setInterval(() => { @@ -55,7 +77,7 @@ class OrderMonitor { stop() { if (!this.isRunning) return; - common_vendor.index.__f__("log", "at utils/orderMonitor.js:71", "停止订单监控服务"); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:97", "停止订单监控服务"); this.isRunning = false; if (this.timer) { clearInterval(this.timer); @@ -68,12 +90,18 @@ class OrderMonitor { async checkOrders() { if (this.activeOrders.size === 0) return; - common_vendor.index.__f__("log", "at utils/orderMonitor.js:86", `检查 ${this.activeOrders.size} 个活跃订单状态`); - for (const [orderId, orderData] of this.activeOrders.entries()) { + common_vendor.index.__f__("log", "at utils/orderMonitor.js:112", `检查 ${this.activeOrders.size} 个活跃订单状态, 当前页面: ${this.currentPage}`); + for (const [orderId, data] of this.activeOrders.entries()) { try { - await this.checkOrderStatus(orderId); + if (!data.pageName || data.pageName === "return") { + if (this.currentPage === "return" || this.currentPage === null) { + await this.checkOrderStatus(orderId); + } else { + common_vendor.index.__f__("log", "at utils/orderMonitor.js:122", `跳过订单状态检查: ${orderId}, 当前不在归还页面`); + } + } } catch (error) { - common_vendor.index.__f__("error", "at utils/orderMonitor.js:92", `检查订单状态失败: ${orderId}`, error); + common_vendor.index.__f__("error", "at utils/orderMonitor.js:126", `检查订单状态失败: ${orderId}`, error); } } } @@ -83,13 +111,18 @@ class OrderMonitor { */ async checkOrderStatus(orderId) { try { - common_vendor.index.__f__("log", "at utils/orderMonitor.js:103", `检查订单 ${orderId} 的状态`); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:137", `检查订单 ${orderId} 的状态`); const result = await config_user.queryById(orderId); if (result.code === 200 && result.data) { const orderData = result.data; - this.activeOrders.set(orderId, orderData); + const existingData = this.activeOrders.get(orderId); + const pageName = existingData ? existingData.pageName : null; + this.activeOrders.set(orderId, { + ...orderData, + pageName + }); if (orderData.orderStatus === "used_done" || orderData.orderStatus === "used_down") { - common_vendor.index.__f__("log", "at utils/orderMonitor.js:114", `订单 ${orderId} 已完成!`); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:153", `订单 ${orderId} 已完成!`); common_vendor.index.$emit("orderCompleted", orderData); common_vendor.index.showToast({ title: "充电宝归还成功", @@ -99,7 +132,7 @@ class OrderMonitor { const innerAudioContext = common_vendor.index.createInnerAudioContext(); innerAudioContext.src = "/static/audio/return_success.mp3"; innerAudioContext.play(); - this.removeOrder(orderId); + this.removeOrder({ orderId }); setTimeout(() => { common_vendor.index.showModal({ title: "归还成功", @@ -117,16 +150,23 @@ class OrderMonitor { } } } catch (error) { - common_vendor.index.__f__("error", "at utils/orderMonitor.js:153", `检查订单 ${orderId} 状态出错:`, error); + common_vendor.index.__f__("error", "at utils/orderMonitor.js:192", `检查订单 ${orderId} 状态出错:`, error); } } } const orderMonitor = new OrderMonitor(); +common_vendor.index.onAppRoute((route) => { + const pagePath = route.path || ""; + const pageSegments = pagePath.split("/"); + const pageName = pageSegments[pageSegments.length - 1]; + orderMonitor.setActivePage(pageName || null); + common_vendor.index.__f__("log", "at utils/orderMonitor.js:209", "页面切换:", pagePath, "当前活跃页面:", pageName); +}); const initOrderMonitor = () => { const lastActiveOrderId = common_vendor.index.getStorageSync("activeOrderId"); if (lastActiveOrderId) { const lastOrderData = { orderId: lastActiveOrderId }; - orderMonitor.addOrder(lastOrderData); + orderMonitor.addOrder(lastOrderData, "return"); } }; initOrderMonitor(); diff --git a/utils/orderMonitor.js b/utils/orderMonitor.js index a8c993b..7056987 100644 --- a/utils/orderMonitor.js +++ b/utils/orderMonitor.js @@ -6,24 +6,29 @@ import { queryById } from '@/config/user.js' */ class OrderMonitor { constructor() { - this.activeOrders = new Map() // 存储活跃订单 Map + this.activeOrders = new Map() // 存储活跃订单 Map this.timer = null this.checkInterval = 10000 // 10秒检查一次 this.isRunning = false + this.currentPage = null // 当前活跃页面 } /** * 添加订单到监控队列 * @param {Object} orderData 订单数据对象,必须包含orderId字段 + * @param {String} pageName 关联的页面名称,默认为'return' */ - addOrder(orderData) { + addOrder(orderData, pageName = 'return') { if (!orderData || !orderData.orderId) { console.error('添加订单监控失败:无效的订单数据') return } - console.log('添加订单到监控队列:', orderData.orderId) - this.activeOrders.set(orderData.orderId, orderData) + console.log(`添加订单到监控队列: ${orderData.orderId}, 页面: ${pageName}`) + this.activeOrders.set(orderData.orderId, { + ...orderData, + pageName + }) // 如果监控服务尚未启动,则启动 if (!this.isRunning) { @@ -33,18 +38,39 @@ class OrderMonitor { /** * 移除订单的监控 - * @param {String} orderId 订单ID + * @param {Object} params 包含orderId或pageName的对象 */ - removeOrder(orderId) { - if (this.activeOrders.has(orderId)) { - console.log('从监控队列移除订单:', orderId) - this.activeOrders.delete(orderId) - - // 如果没有订单需要监控了,停止服务 - if (this.activeOrders.size === 0) { - this.stop() + removeOrder(params) { + if (!params) return + + // 如果提供了orderId,直接删除该订单 + if (params.orderId && this.activeOrders.has(params.orderId)) { + console.log('从监控队列移除订单:', params.orderId) + this.activeOrders.delete(params.orderId) + } + // 如果提供了pageName,删除该页面关联的所有订单 + else if (params.pageName) { + console.log('从监控队列移除页面相关订单:', params.pageName) + for (const [orderId, data] of this.activeOrders.entries()) { + if (data.pageName === params.pageName) { + this.activeOrders.delete(orderId) + } } } + + // 如果没有订单需要监控了,停止服务 + if (this.activeOrders.size === 0) { + this.stop() + } + } + + /** + * 设置当前活跃页面 + * @param {String} pageName 页面名称 + */ + setActivePage(pageName) { + this.currentPage = pageName + console.log('设置当前活跃页面:', pageName) } /** @@ -83,11 +109,19 @@ class OrderMonitor { async checkOrders() { if (this.activeOrders.size === 0) return - console.log(`检查 ${this.activeOrders.size} 个活跃订单状态`) + console.log(`检查 ${this.activeOrders.size} 个活跃订单状态, 当前页面: ${this.currentPage}`) - for (const [orderId, orderData] of this.activeOrders.entries()) { + // 只检查当前活跃页面关联的订单,或无页面关联的订单 + for (const [orderId, data] of this.activeOrders.entries()) { try { - await this.checkOrderStatus(orderId) + // 只在归还页面(或页面未指定时)才执行轮询 + if (!data.pageName || data.pageName === 'return') { + if (this.currentPage === 'return' || this.currentPage === null) { + await this.checkOrderStatus(orderId) + } else { + console.log(`跳过订单状态检查: ${orderId}, 当前不在归还页面`) + } + } } catch (error) { console.error(`检查订单状态失败: ${orderId}`, error) } @@ -105,9 +139,14 @@ class OrderMonitor { if (result.code === 200 && result.data) { const orderData = result.data + const existingData = this.activeOrders.get(orderId) + const pageName = existingData ? existingData.pageName : null - // 更新本地存储的订单数据 - this.activeOrders.set(orderId, orderData) + // 更新本地存储的订单数据,保留页面关联信息 + this.activeOrders.set(orderId, { + ...orderData, + pageName + }) // 检查订单是否已完成 if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') { @@ -129,7 +168,7 @@ class OrderMonitor { innerAudioContext.play() // 完成的订单不再需要监控 - this.removeOrder(orderId) + this.removeOrder({orderId}) // 如果用户不在归还页面,则显示归还成功弹窗 setTimeout(() => { @@ -158,12 +197,24 @@ class OrderMonitor { // 导出单例实例 export const orderMonitor = new OrderMonitor() +// 监听页面切换事件 +uni.onAppRoute((route) => { + const pagePath = route.path || '' + const pageSegments = pagePath.split('/') + const pageName = pageSegments[pageSegments.length - 1] + + // 设置当前活跃页面 + orderMonitor.setActivePage(pageName || null) + + console.log('页面切换:', pagePath, '当前活跃页面:', pageName) +}) + // 页面加载时自动恢复监控上次的活跃订单(如果有) const initOrderMonitor = () => { const lastActiveOrderId = uni.getStorageSync('activeOrderId') if (lastActiveOrderId) { const lastOrderData = { orderId: lastActiveOrderId } - orderMonitor.addOrder(lastOrderData) + orderMonitor.addOrder(lastOrderData, 'return') } }