From 2b69bf0d336958b696043b33aa5e71ed984c998c Mon Sep 17 00:00:00 2001 From: xce Date: Tue, 6 Jan 2026 00:15:34 +0800 Subject: [PATCH] =?UTF-8?q?mqtt=E5=AE=9E=E7=8E=B0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 25 +++++++++++++++++++++---- pages/control/index.vue | 1 + utils/mqtt.js | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/App.vue b/App.vue index 17e76d6..3bf6e6e 100644 --- a/App.vue +++ b/App.vue @@ -15,12 +15,25 @@ export default { onLaunch: function() { this.initApp() mqttUtil.disconnectMqtt() + + // ========== 新增:H5刷新后,从localStorage恢复订阅列表 ========== + const savedSubscribeList = uni.getStorageSync('mqtt_subscribe_list') + if (savedSubscribeList && savedSubscribeList.length > 0) { + this.globalData.mqtt.subscribeList = savedSubscribeList + } }, onShow() { console.log('小程序切前台/首次显示') const token = getToken() || this.globalData.mqtt.token if (token) { console.info("token存在,mqtt重新连接中。。") + // 兜底检查:如果globalData里没有列表,但缓存里有,补充恢复 + if (this.globalData.mqtt.subscribeList.length === 0) { + const savedSubscribeList = uni.getStorageSync('mqtt_subscribe_list') + if (savedSubscribeList && savedSubscribeList.length > 0) { + this.globalData.mqtt.subscribeList = savedSubscribeList + } + } this.reconnectMqtt() } }, @@ -29,13 +42,11 @@ export default { const mqttState = mqttUtil.getMqttState() if (mqttState.isConnected) { this.globalData.mqtt.subscribeList = mqttState.subscribeList + // ========== 新增:切后台时同步到localStorage ========== + uni.setStorageSync('mqtt_subscribe_list', this.globalData.mqtt.subscribeList) mqttUtil.disconnectMqtt() } }, - onUnload() { - console.log('小程序销毁') - mqttUtil.disconnectMqtt() - }, methods: { // 初始化应用 initApp() { @@ -76,12 +87,16 @@ export default { if (subscribeList.length > 0) { mqttUtil.updateSubscribeList(subscribeList) console.log('恢复MQTT订阅列表:', subscribeList) + // ========== 新增:恢复订阅后同步到localStorage ========== + uni.setStorageSync('mqtt_subscribe_list', subscribeList) } }, loginSuccess(token, subscribeList) { this.globalData.mqtt.hasLogin = true this.globalData.mqtt.token = token this.globalData.mqtt.subscribeList = subscribeList || [] + // ========== 新增:登录成功时同步到localStorage ========== + uni.setStorageSync('mqtt_subscribe_list', subscribeList || []) this.reconnectMqtt() console.log('登录成功,MQTT已初始化') }, @@ -92,6 +107,8 @@ export default { token: '', subscribeList: [] } + // ========== 新增:登出时清空localStorage的订阅列表 ========== + uni.removeStorageSync('mqtt_subscribe_list') console.log('登出成功,MQTT已断开') } } diff --git a/pages/control/index.vue b/pages/control/index.vue index 99936b2..c238fad 100644 --- a/pages/control/index.vue +++ b/pages/control/index.vue @@ -389,6 +389,7 @@ export default { ackMessage(topic, payload) { // 1. 先判断是否是目标订阅主题(如dtu/xxx/up) if (topic !== this.mqttConfig.subscribeTopic) return; + // console.log(`监听到消息:topic=${topic},message=${payload}`) // 2. 解析消息体(注意异常捕获) let msgData = {}; diff --git a/utils/mqtt.js b/utils/mqtt.js index 7f82d1d..fca26ec 100644 --- a/utils/mqtt.js +++ b/utils/mqtt.js @@ -95,7 +95,7 @@ export function connectMqtt() { // 全局接收消息,转发给页面自定义回调 mqttState.client.on('message', (topic, payload) => { const message = payload.toString() - console.log(`收到MQTT消息:topic=${topic},message=${message}`) + // console.log(`收到MQTT消息:topic=${topic},message=${message}`) if (typeof mqttState.onMessageCallback === 'function') { mqttState.onMessageCallback(topic, message) }