feat: 新增多个页面及功能,优化用户体验

在项目中新增了多个页面,包括押金页面、设备详情页面、反馈页面和帮助页面。同时,更新了订单支付和归还成功页面的逻辑,确保用户在支付和归还设备时能够获得清晰的反馈。优化了扫码和订单状态处理逻辑,提升了整体用户体验。
This commit is contained in:
8vd8
2025-04-21 14:54:00 +08:00
parent 41b409c327
commit 8431cdf2d6
12 changed files with 337 additions and 111 deletions
Binary file not shown.
+90 -18
View File
@@ -89,12 +89,16 @@ export default {
statusCheckTimer: null, statusCheckTimer: null,
maxStatusChecks: 30, // 最多检查30次 maxStatusChecks: 30, // 最多检查30次
currentStatusChecks: 0, currentStatusChecks: 0,
statusCheckInterval: 5000 // 5秒检查一次 statusCheckInterval: 5000, // 5秒检查一次
isPageActive: false // 跟踪页面是否活跃
} }
}, },
onLoad(options) { onLoad(options) {
console.log('Return page loaded with options:', JSON.stringify(options)) console.log('Return page loaded with options:', JSON.stringify(options))
// 标记页面为活跃状态
this.isPageActive = true
// 获取传递的参数 // 获取传递的参数
this.orderInfo.orderId = options.orderId || '' this.orderInfo.orderId = options.orderId || ''
this.deviceId = options.deviceNo || options.deviceId || '' this.deviceId = options.deviceNo || options.deviceId || ''
@@ -118,7 +122,10 @@ export default {
// 如果订单ID有效,将订单添加到全局监控服务 // 如果订单ID有效,将订单添加到全局监控服务
try { try {
if (this.$orderMonitor) { 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) console.log('订单已添加到监控队列:', this.orderInfo.orderId)
} else { } else {
console.warn('$orderMonitor 未定义,无法添加订单到监控队列') console.warn('$orderMonitor 未定义,无法添加订单到监控队列')
@@ -142,14 +149,46 @@ export default {
// 注册全局订单完成事件监听器 // 注册全局订单完成事件监听器
uni.$on('orderCompleted', this.handleOrderCompleted) uni.$on('orderCompleted', this.handleOrderCompleted)
}, },
// 添加onHide生命周期,处理页面隐藏时的清理工作
onHide() {
console.log('归还页面隐藏,清理计时器资源和监控服务')
// 标记页面为非活跃状态
this.isPageActive = false
// 清理所有计时器
this.clearTimer()
this.clearStatusCheckTimer()
// 从全局订单监控服务中移除当前订单
this.removeFromOrderMonitor()
},
onUnload() { onUnload() {
console.log('归还页面卸载,清理所有资源')
// 标记页面为非活跃状态
this.isPageActive = false
// 页面卸载时清除定时器 // 页面卸载时清除定时器
this.clearTimer() this.clearTimer()
this.clearStatusCheckTimer() this.clearStatusCheckTimer()
// 从全局订单监控服务中移除当前订单
this.removeFromOrderMonitor()
// 注销全局事件监听 // 注销全局事件监听
uni.$off('orderCompleted', this.handleOrderCompleted) uni.$off('orderCompleted', this.handleOrderCompleted)
}, },
methods: { 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) { handleOrderCompleted(orderData) {
console.log('收到订单完成事件:', orderData) console.log('收到订单完成事件:', orderData)
@@ -206,8 +245,14 @@ export default {
// 获取订单详情 // 获取订单详情
async getOrderDetails() { async getOrderDetails() {
// 如果页面不再活跃,不执行API请求
if (!this.isPageActive) {
console.log('页面已不活跃,跳过订单详情请求')
return
}
try { try {
uni.showLoading({ title: '加载中' }) // uni.showLoading({ title: '加载中' })
if (!this.orderInfo.orderId) { if (!this.orderInfo.orderId) {
throw new Error('订单ID不能为空') throw new Error('订单ID不能为空')
@@ -320,10 +365,22 @@ export default {
// 更新使用时长的定时器 // 更新使用时长的定时器
startTimer() { startTimer() {
// 清除现有计时器,确保不重复
this.clearTimer()
// 每分钟更新一次使用时长 // 每分钟更新一次使用时长
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.getOrderDetails() // 只有当页面活跃时才执行更新
if (this.isPageActive) {
console.log('执行定时更新订单信息')
this.getOrderDetails()
} else {
console.log('页面已不活跃,停止计时器')
this.clearTimer()
}
}, 60000) }, 60000)
console.log('已启动使用时长更新计时器')
}, },
// 清除定时器 // 清除定时器
@@ -331,6 +388,7 @@ export default {
if (this.timer) { if (this.timer) {
clearInterval(this.timer) clearInterval(this.timer)
this.timer = null this.timer = null
console.log('已清除使用时长更新计时器')
} }
}, },
@@ -339,36 +397,47 @@ export default {
if (this.statusCheckTimer) { if (this.statusCheckTimer) {
clearInterval(this.statusCheckTimer) clearInterval(this.statusCheckTimer)
this.statusCheckTimer = null this.statusCheckTimer = null
console.log('已清除归还状态检查计时器')
} }
}, },
// 开始状态检查定时器 // 开始状态检查定时器
startStatusCheckTimer() { startStatusCheckTimer() {
this.currentStatusChecks = 0 this.currentStatusChecks = 0
// 确保之前的计时器被清除
this.clearStatusCheckTimer() this.clearStatusCheckTimer()
this.statusCheckTimer = setInterval(() => { this.statusCheckTimer = setInterval(() => {
this.currentStatusChecks++ // 只有当页面活跃时才执行检查
this.checkReturnStatus() if (this.isPageActive) {
this.currentStatusChecks++
// 如果超过最大检查次数,停止定时器 console.log(`执行归还状态检查 (${this.currentStatusChecks}/${this.maxStatusChecks})`)
if (this.currentStatusChecks >= this.maxStatusChecks) { this.checkReturnStatus()
this.clearStatusCheckTimer()
// 提示用户手动刷新 // 如果超过最大检查次数,停止定时器
uni.showToast({ if (this.currentStatusChecks >= this.maxStatusChecks) {
title: '请手动刷新查看归还状态', this.clearStatusCheckTimer()
icon: 'none',
duration: 3000 // 提示用户手动刷新
}) uni.showToast({
title: '请手动刷新查看归还状态',
icon: 'none',
duration: 3000
})
}
} else {
console.log('页面已不活跃,停止状态检查计时器')
this.clearStatusCheckTimer()
} }
}, this.statusCheckInterval) }, this.statusCheckInterval)
console.log('已启动归还状态检查计时器')
}, },
// 通过设备号查询使用中的订单 // 通过设备号查询使用中的订单
async getOrderByDevice() { async getOrderByDevice() {
try { try {
uni.showLoading({ title: '加载中' }) // uni.showLoading({ title: '加载中' })
if (!this.deviceId) { if (!this.deviceId) {
throw new Error('设备号不能为空') throw new Error('设备号不能为空')
@@ -432,7 +501,10 @@ export default {
// 检查归还状态 // 检查归还状态
async checkReturnStatus() { async checkReturnStatus() {
try { try {
await this.getOrderDetails() // 只有页面活跃时才执行检查
if (this.isPageActive) {
await this.getOrderDetails()
}
} catch (error) { } catch (error) {
console.error('检查归还状态失败:', error) console.error('检查归还状态失败:', error)
} }
File diff suppressed because one or more lines are too long
@@ -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;"} {"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;"}
@@ -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;"} {"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;"}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -6876,7 +6876,7 @@ function initOnError() {
function initRuntimeSocketService() { function initRuntimeSocketService() {
const hosts = "10.8.0.5,192.168.1.15,127.0.0.1"; const hosts = "10.8.0.5,192.168.1.15,127.0.0.1";
const port = "8090"; const port = "8090";
const id = "mp-weixin_V-Usyu"; const id = "mp-weixin_WlfuId";
const lazy = typeof swan !== "undefined"; const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => { let restoreError = lazy ? () => {
} : initOnError(); } : initOnError();
+11 -2
View File
@@ -47,6 +47,7 @@ const getDeviceInfo = (deviceNo) => {
}); });
}; };
const queryById = (id) => { const queryById = (id) => {
common_vendor.index.__f__("log", "at config/user.js:80", `查询订单详情, orderId: ${id}`);
return config_http.request({ return config_http.request({
url: `/app/order/${id}`, url: `/app/order/${id}`,
method: "get", method: "get",
@@ -61,20 +62,27 @@ const rentPowerBank = (deviceNo, phone) => {
}); });
}; };
const confirmPaymentAndRent = (orderId) => { 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({ return config_http.request({
url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`, url: `/app/device/confirmPaymentAndRent?orderId=${orderId}`,
method: "post" method: "post"
}); });
}; };
const updateOrderPackage = (data) => { 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({ return config_http.request({
url: "/app/device/updateOrderPackage", url: "/app/device/updateOrderPackage",
method: "post", method: "post",
data data
}); });
}; };
const updateUserBalance = (orderId) => {
return config_http.request({
url: `/app/user/updateBalance/${orderId}`,
method: "post",
hideLoading: true
});
};
exports.checkOrdersByStatus = checkOrdersByStatus; exports.checkOrdersByStatus = checkOrdersByStatus;
exports.confirmPaymentAndRent = confirmPaymentAndRent; exports.confirmPaymentAndRent = confirmPaymentAndRent;
exports.getDeviceInfo = getDeviceInfo; exports.getDeviceInfo = getDeviceInfo;
@@ -84,5 +92,6 @@ exports.login = login;
exports.queryById = queryById; exports.queryById = queryById;
exports.rentPowerBank = rentPowerBank; exports.rentPowerBank = rentPowerBank;
exports.updateOrderPackage = updateOrderPackage; exports.updateOrderPackage = updateOrderPackage;
exports.updateUserBalance = updateUserBalance;
exports.withdrawDeposit = withdrawDeposit; exports.withdrawDeposit = withdrawDeposit;
//# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map //# sourceMappingURL=../../.sourcemap/mp-weixin/config/user.js.map
+13 -6
View File
@@ -76,6 +76,7 @@ const _sfc_main = {
formattedTime = this.formatTime(/* @__PURE__ */ new Date()); formattedTime = this.formatTime(/* @__PURE__ */ new Date());
} }
} catch (e) { } catch (e) {
common_vendor.index.__f__("error", "at pages/order/payment.vue:158", "时间格式化错误:", e);
formattedTime = this.formatTime(/* @__PURE__ */ new Date()); formattedTime = this.formatTime(/* @__PURE__ */ new Date());
} }
this.orderInfo = { this.orderInfo = {
@@ -84,12 +85,12 @@ const _sfc_main = {
createTime: formattedTime, createTime: formattedTime,
phone: orderData.phone, phone: orderData.phone,
deposit: this.passedDepositAmount || orderData.depositAmount || "99.00", 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) { if (!orderData.packageTime && this.packageInfo.time) {
this.packageInfo.time = `${orderData.packageTime / 60}小时`; this.orderInfo.packageTime = this.packageInfo.time;
this.packageInfo.price = orderData.packagePrice || "0.00"; this.orderInfo.packagePrice = this.packageInfo.price;
} else if (this.packageInfo.time) {
} }
} else { } else {
throw new Error("获取订单信息失败"); throw new Error("获取订单信息失败");
@@ -126,6 +127,11 @@ const _sfc_main = {
title: "支付成功", title: "支付成功",
icon: "success" icon: "success"
}); });
try {
await config_user.updateUserBalance(this.orderId);
} catch (error) {
common_vendor.index.__f__("warn", "at pages/order/payment.vue:223", "更新用户余额失败:", error);
}
setTimeout(() => { setTimeout(() => {
common_vendor.index.redirectTo({ common_vendor.index.redirectTo({
url: `/pages/order/index?orderId=${this.orderId}` url: `/pages/order/index?orderId=${this.orderId}`
@@ -133,6 +139,7 @@ const _sfc_main = {
}, 1500); }, 1500);
}, },
fail: (err) => { fail: (err) => {
common_vendor.index.__f__("error", "at pages/order/payment.vue:234", "支付失败:", err);
throw new Error("支付失败,请重试"); throw new Error("支付失败,请重试");
} }
}); });
@@ -229,7 +236,7 @@ const _sfc_main = {
throw new Error("查询订单状态失败"); throw new Error("查询订单状态失败");
} }
} catch (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; return null;
} }
} }
+84 -37
View File
@@ -21,15 +21,18 @@ const _sfc_main = {
maxStatusChecks: 30, maxStatusChecks: 30,
// 最多检查30次 // 最多检查30次
currentStatusChecks: 0, currentStatusChecks: 0,
statusCheckInterval: 5e3 statusCheckInterval: 5e3,
// 5秒检查一次 // 5秒检查一次
isPageActive: false
// 跟踪页面是否活跃
}; };
}, },
onLoad(options) { 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.orderInfo.orderId = options.orderId || "";
this.deviceId = options.deviceNo || options.deviceId || ""; 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) { if (!this.orderInfo.orderId && this.deviceId) {
this.getOrderByDevice(); this.getOrderByDevice();
} else if (this.orderInfo.orderId) { } else if (this.orderInfo.orderId) {
@@ -39,13 +42,14 @@ const _sfc_main = {
common_vendor.index.setStorageSync("activeOrderId", this.orderInfo.orderId); common_vendor.index.setStorageSync("activeOrderId", this.orderInfo.orderId);
try { try {
if (this.$orderMonitor) { if (this.$orderMonitor) {
this.$orderMonitor.addOrder({ orderId: this.orderInfo.orderId }); this.$orderMonitor.removeOrder({ orderId: this.orderInfo.orderId });
common_vendor.index.__f__("log", "at pages/return/index.vue:122", "订单已添加到监控队列:", 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 { } 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) { } 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 { } else {
common_vendor.index.showToast({ common_vendor.index.showToast({
@@ -58,15 +62,37 @@ const _sfc_main = {
} }
common_vendor.index.$on("orderCompleted", this.handleOrderCompleted); 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.clearTimer();
this.clearStatusCheckTimer(); 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); common_vendor.index.$off("orderCompleted", this.handleOrderCompleted);
}, },
methods: { 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) { 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) { if (orderData.orderId === this.orderInfo.orderId || orderData.orderNo === this.orderInfo.orderNo) {
this.showReturnSuccessModal(orderData); this.showReturnSuccessModal(orderData);
} }
@@ -108,18 +134,21 @@ const _sfc_main = {
}, },
// 获取订单详情 // 获取订单详情
async getOrderDetails() { async getOrderDetails() {
if (!this.isPageActive) {
common_vendor.index.__f__("log", "at pages/return/index.vue:250", "页面已不活跃,跳过订单详情请求");
return;
}
try { try {
common_vendor.index.showLoading({ title: "加载中" });
if (!this.orderInfo.orderId) { if (!this.orderInfo.orderId) {
throw new Error("订单ID不能为空"); 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); 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) { if (result.code === 200 && result.data) {
const orderData = 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:267", "订单原始数据:", 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:268", "开始时间字段:", orderData.startTime, typeof orderData.startTime);
if (orderData.orderStatus) { if (orderData.orderStatus) {
this.orderInfo.orderStatus = orderData.orderStatus; this.orderInfo.orderStatus = orderData.orderStatus;
} }
@@ -129,12 +158,12 @@ const _sfc_main = {
return; return;
} }
this.updateOrderInfo(orderData); 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 { } else {
throw new Error(result.msg || "获取订单详情失败"); throw new Error(result.msg || "获取订单详情失败");
} }
} catch (error) { } 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({ common_vendor.index.showToast({
title: error.message || "获取订单信息失败", title: error.message || "获取订单信息失败",
icon: "none" icon: "none"
@@ -157,7 +186,7 @@ const _sfc_main = {
}, },
// 使用后端返回的使用时长和费用数据 // 使用后端返回的使用时长和费用数据
updateOrderInfo(orderData) { 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.usedTime = orderData.usedTime || "0分钟";
this.orderInfo.currentFee = orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00"; this.orderInfo.currentFee = orderData.currentFee || orderData.actualDeviceAmount || orderData.payAmount || "0.00";
if (orderData.orderStatus) { if (orderData.orderStatus) {
@@ -166,16 +195,16 @@ const _sfc_main = {
this.orderInfo._rawStartTime = orderData.startTime; this.orderInfo._rawStartTime = orderData.startTime;
if (orderData.startTime) { if (orderData.startTime) {
try { 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; this.orderInfo.startTime = orderData.startTime;
} catch (e) { } 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 = "未知"; this.orderInfo.startTime = "未知";
} }
} else { } 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) { 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; this.orderInfo.startTime = orderData.createTime;
} else { } else {
this.orderInfo.startTime = "未知"; this.orderInfo.startTime = "未知";
@@ -187,15 +216,24 @@ const _sfc_main = {
}, },
// 更新使用时长的定时器 // 更新使用时长的定时器
startTimer() { startTimer() {
this.clearTimer();
this.timer = setInterval(() => { 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); }, 6e4);
common_vendor.index.__f__("log", "at pages/return/index.vue:383", "已启动使用时长更新计时器");
}, },
// 清除定时器 // 清除定时器
clearTimer() { clearTimer() {
if (this.timer) { if (this.timer) {
clearInterval(this.timer); clearInterval(this.timer);
this.timer = null; this.timer = null;
common_vendor.index.__f__("log", "at pages/return/index.vue:391", "已清除使用时长更新计时器");
} }
}, },
// 清除状态检查定时器 // 清除状态检查定时器
@@ -203,6 +241,7 @@ const _sfc_main = {
if (this.statusCheckTimer) { if (this.statusCheckTimer) {
clearInterval(this.statusCheckTimer); clearInterval(this.statusCheckTimer);
this.statusCheckTimer = null; 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.currentStatusChecks = 0;
this.clearStatusCheckTimer(); this.clearStatusCheckTimer();
this.statusCheckTimer = setInterval(() => { this.statusCheckTimer = setInterval(() => {
this.currentStatusChecks++; if (this.isPageActive) {
this.checkReturnStatus(); this.currentStatusChecks++;
if (this.currentStatusChecks >= this.maxStatusChecks) { 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(); this.clearStatusCheckTimer();
common_vendor.index.showToast({
title: "请手动刷新查看归还状态",
icon: "none",
duration: 3e3
});
} }
}, this.statusCheckInterval); }, this.statusCheckInterval);
common_vendor.index.__f__("log", "at pages/return/index.vue:434", "已启动归还状态检查计时器");
}, },
// 通过设备号查询使用中的订单 // 通过设备号查询使用中的订单
async getOrderByDevice() { async getOrderByDevice() {
try { try {
common_vendor.index.showLoading({ title: "加载中" });
if (!this.deviceId) { if (!this.deviceId) {
throw new Error("设备号不能为空"); throw new Error("设备号不能为空");
} }
@@ -237,16 +282,16 @@ const _sfc_main = {
"Clientid": common_vendor.index.getStorageSync("client_id") "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) { if (inUseRes.statusCode === 200 && inUseRes.data.code === 200 && inUseRes.data.data) {
const inUseOrder = 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; this.orderInfo.orderId = inUseOrder.orderId;
if (inUseOrder.orderStatus) { if (inUseOrder.orderStatus) {
this.orderInfo.orderStatus = inUseOrder.orderStatus; this.orderInfo.orderStatus = inUseOrder.orderStatus;
} }
if (inUseOrder.startTime) { 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.orderInfo.startTime = inUseOrder.startTime;
} }
this.getOrderDetails(); this.getOrderDetails();
@@ -256,7 +301,7 @@ const _sfc_main = {
throw new Error("未找到使用中的订单"); throw new Error("未找到使用中的订单");
} }
} catch (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({ common_vendor.index.showToast({
title: error.message || "获取订单信息失败", title: error.message || "获取订单信息失败",
icon: "none" icon: "none"
@@ -271,9 +316,11 @@ const _sfc_main = {
// 检查归还状态 // 检查归还状态
async checkReturnStatus() { async checkReturnStatus() {
try { try {
await this.getOrderDetails(); if (this.isPageActive) {
await this.getOrderDetails();
}
} catch (error) { } 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);
} }
}, },
// 返回首页 // 返回首页
+63 -23
View File
@@ -7,34 +7,56 @@ class OrderMonitor {
this.timer = null; this.timer = null;
this.checkInterval = 1e4; this.checkInterval = 1e4;
this.isRunning = false; this.isRunning = false;
this.currentPage = null;
} }
/** /**
* 添加订单到监控队列 * 添加订单到监控队列
* @param {Object} orderData 订单数据对象,必须包含orderId字段 * @param {Object} orderData 订单数据对象,必须包含orderId字段
* @param {String} pageName 关联的页面名称,默认为'return'
*/ */
addOrder(orderData) { addOrder(orderData, pageName = "return") {
if (!orderData || !orderData.orderId) { 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; return;
} }
common_vendor.index.__f__("log", "at utils/orderMonitor.js:25", "添加订单到监控队列:", orderData.orderId); common_vendor.index.__f__("log", "at utils/orderMonitor.js:27", `添加订单到监控队列: ${orderData.orderId}, 页面: ${pageName}`);
this.activeOrders.set(orderData.orderId, orderData); this.activeOrders.set(orderData.orderId, {
...orderData,
pageName
});
if (!this.isRunning) { if (!this.isRunning) {
this.start(); this.start();
} }
} }
/** /**
* 移除订单的监控 * 移除订单的监控
* @param {String} orderId 订单ID * @param {Object} params 包含orderId或pageName的对象
*/ */
removeOrder(orderId) { removeOrder(params) {
if (this.activeOrders.has(orderId)) { if (!params)
common_vendor.index.__f__("log", "at utils/orderMonitor.js:40", "从监控队列移除订单:", orderId); return;
this.activeOrders.delete(orderId); if (params.orderId && this.activeOrders.has(params.orderId)) {
if (this.activeOrders.size === 0) { common_vendor.index.__f__("log", "at utils/orderMonitor.js:48", "从监控队列移除订单:", params.orderId);
this.stop(); 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() { start() {
if (this.isRunning) if (this.isRunning)
return; 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.isRunning = true;
this.checkOrders(); this.checkOrders();
this.timer = setInterval(() => { this.timer = setInterval(() => {
@@ -55,7 +77,7 @@ class OrderMonitor {
stop() { stop() {
if (!this.isRunning) if (!this.isRunning)
return; return;
common_vendor.index.__f__("log", "at utils/orderMonitor.js:71", "停止订单监控服务"); common_vendor.index.__f__("log", "at utils/orderMonitor.js:97", "停止订单监控服务");
this.isRunning = false; this.isRunning = false;
if (this.timer) { if (this.timer) {
clearInterval(this.timer); clearInterval(this.timer);
@@ -68,12 +90,18 @@ class OrderMonitor {
async checkOrders() { async checkOrders() {
if (this.activeOrders.size === 0) if (this.activeOrders.size === 0)
return; return;
common_vendor.index.__f__("log", "at utils/orderMonitor.js:86", `检查 ${this.activeOrders.size} 个活跃订单状态`); common_vendor.index.__f__("log", "at utils/orderMonitor.js:112", `检查 ${this.activeOrders.size} 个活跃订单状态, 当前页面: ${this.currentPage}`);
for (const [orderId, orderData] of this.activeOrders.entries()) { for (const [orderId, data] of this.activeOrders.entries()) {
try { 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) { } 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) { async checkOrderStatus(orderId) {
try { 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); const result = await config_user.queryById(orderId);
if (result.code === 200 && result.data) { if (result.code === 200 && result.data) {
const orderData = 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") { 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.$emit("orderCompleted", orderData);
common_vendor.index.showToast({ common_vendor.index.showToast({
title: "充电宝归还成功", title: "充电宝归还成功",
@@ -99,7 +132,7 @@ class OrderMonitor {
const innerAudioContext = common_vendor.index.createInnerAudioContext(); const innerAudioContext = common_vendor.index.createInnerAudioContext();
innerAudioContext.src = "/static/audio/return_success.mp3"; innerAudioContext.src = "/static/audio/return_success.mp3";
innerAudioContext.play(); innerAudioContext.play();
this.removeOrder(orderId); this.removeOrder({ orderId });
setTimeout(() => { setTimeout(() => {
common_vendor.index.showModal({ common_vendor.index.showModal({
title: "归还成功", title: "归还成功",
@@ -117,16 +150,23 @@ class OrderMonitor {
} }
} }
} catch (error) { } 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(); 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 initOrderMonitor = () => {
const lastActiveOrderId = common_vendor.index.getStorageSync("activeOrderId"); const lastActiveOrderId = common_vendor.index.getStorageSync("activeOrderId");
if (lastActiveOrderId) { if (lastActiveOrderId) {
const lastOrderData = { orderId: lastActiveOrderId }; const lastOrderData = { orderId: lastActiveOrderId };
orderMonitor.addOrder(lastOrderData); orderMonitor.addOrder(lastOrderData, "return");
} }
}; };
initOrderMonitor(); initOrderMonitor();
+71 -20
View File
@@ -6,24 +6,29 @@ import { queryById } from '@/config/user.js'
*/ */
class OrderMonitor { class OrderMonitor {
constructor() { constructor() {
this.activeOrders = new Map() // 存储活跃订单 Map<orderId, orderData> this.activeOrders = new Map() // 存储活跃订单 Map<orderId, {orderData, pageName}>
this.timer = null this.timer = null
this.checkInterval = 10000 // 10秒检查一次 this.checkInterval = 10000 // 10秒检查一次
this.isRunning = false this.isRunning = false
this.currentPage = null // 当前活跃页面
} }
/** /**
* 添加订单到监控队列 * 添加订单到监控队列
* @param {Object} orderData 订单数据对象,必须包含orderId字段 * @param {Object} orderData 订单数据对象,必须包含orderId字段
* @param {String} pageName 关联的页面名称,默认为'return'
*/ */
addOrder(orderData) { addOrder(orderData, pageName = 'return') {
if (!orderData || !orderData.orderId) { if (!orderData || !orderData.orderId) {
console.error('添加订单监控失败:无效的订单数据') console.error('添加订单监控失败:无效的订单数据')
return return
} }
console.log('添加订单到监控队列:', orderData.orderId) console.log(`添加订单到监控队列: ${orderData.orderId}, 页面: ${pageName}`)
this.activeOrders.set(orderData.orderId, orderData) this.activeOrders.set(orderData.orderId, {
...orderData,
pageName
})
// 如果监控服务尚未启动,则启动 // 如果监控服务尚未启动,则启动
if (!this.isRunning) { if (!this.isRunning) {
@@ -33,18 +38,39 @@ class OrderMonitor {
/** /**
* 移除订单的监控 * 移除订单的监控
* @param {String} orderId 订单ID * @param {Object} params 包含orderId或pageName的对象
*/ */
removeOrder(orderId) { removeOrder(params) {
if (this.activeOrders.has(orderId)) { if (!params) return
console.log('从监控队列移除订单:', orderId)
this.activeOrders.delete(orderId) // 如果提供了orderId,直接删除该订单
if (params.orderId && this.activeOrders.has(params.orderId)) {
// 如果没有订单需要监控了,停止服务 console.log('从监控队列移除订单:', params.orderId)
if (this.activeOrders.size === 0) { this.activeOrders.delete(params.orderId)
this.stop() }
// 如果提供了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() { async checkOrders() {
if (this.activeOrders.size === 0) return 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 { 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) { } catch (error) {
console.error(`检查订单状态失败: ${orderId}`, error) console.error(`检查订单状态失败: ${orderId}`, error)
} }
@@ -105,9 +139,14 @@ class OrderMonitor {
if (result.code === 200 && result.data) { if (result.code === 200 && result.data) {
const orderData = 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') { if (orderData.orderStatus === 'used_done' || orderData.orderStatus === 'used_down') {
@@ -129,7 +168,7 @@ class OrderMonitor {
innerAudioContext.play() innerAudioContext.play()
// 完成的订单不再需要监控 // 完成的订单不再需要监控
this.removeOrder(orderId) this.removeOrder({orderId})
// 如果用户不在归还页面,则显示归还成功弹窗 // 如果用户不在归还页面,则显示归还成功弹窗
setTimeout(() => { setTimeout(() => {
@@ -158,12 +197,24 @@ class OrderMonitor {
// 导出单例实例 // 导出单例实例
export const orderMonitor = new 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 initOrderMonitor = () => {
const lastActiveOrderId = uni.getStorageSync('activeOrderId') const lastActiveOrderId = uni.getStorageSync('activeOrderId')
if (lastActiveOrderId) { if (lastActiveOrderId) {
const lastOrderData = { orderId: lastActiveOrderId } const lastOrderData = { orderId: lastActiveOrderId }
orderMonitor.addOrder(lastOrderData) orderMonitor.addOrder(lastOrderData, 'return')
} }
} }