feat: 会员管理、在线复诊优化、新增配送仓库
This commit is contained in:
29
App.vue
29
App.vue
@@ -100,6 +100,9 @@
|
||||
if (uni.getStorageSync('token') && !isWebSocketConnected()) {
|
||||
this.initWebSocketConnection();
|
||||
}
|
||||
// 检测拨号返回:详情页 onCallbackCall 调用 makePhoneCall 前写入了 pendingCallback,
|
||||
// 回到小程序时广播给当前详情页/抽屉组件,由其自动弹回访表单
|
||||
this.checkPendingCallback();
|
||||
},
|
||||
onHide: function() {
|
||||
// 应用隐藏时不断开WebSocket,保持连接以便接收消息
|
||||
@@ -120,6 +123,32 @@
|
||||
initWebSocket();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 检测从拨号返回小程序的场景
|
||||
* 就诊人详情点击"回访"时写入 pendingCallback(upId/phone/ts);
|
||||
* 用户回到小程序时若 5 分钟内有效,则广播事件触发回访表单抽屉,
|
||||
* 之后立即清除 storage 标记,避免下次 onShow 重复弹窗
|
||||
*/
|
||||
checkPendingCallback() {
|
||||
let payload = null;
|
||||
try {
|
||||
payload = uni.getStorageSync('pendingCallback');
|
||||
} catch (e) {
|
||||
payload = null;
|
||||
}
|
||||
if (!payload || typeof payload !== 'object') return;
|
||||
const now = Date.now();
|
||||
const ts = Number(payload.ts) || 0;
|
||||
// 时间窗 5 分钟:避免误判;超时直接丢弃
|
||||
if (ts && now - ts > 5 * 60 * 1000) {
|
||||
try { uni.removeStorageSync('pendingCallback'); } catch (e) { /* ignore */ }
|
||||
return;
|
||||
}
|
||||
// 广播后清理,由当前可见的详情页/抽屉组件接收处理
|
||||
try { uni.removeStorageSync('pendingCallback'); } catch (e) { /* ignore */ }
|
||||
uni.$emit('patient:callbackReturned', payload);
|
||||
},
|
||||
|
||||
|
||||
async getInfo() {
|
||||
|
||||
Reference in New Issue
Block a user