diff --git a/pages/news/index.vue b/pages/news/index.vue index 4f99157..97e9962 100644 --- a/pages/news/index.vue +++ b/pages/news/index.vue @@ -102,6 +102,7 @@ import UniDividerText from "../../components/uni-divider/uni-divider-text.vue"; import {isTodayDate,formatTime} from "@/utils/agri"; import {getMsgOverview, removeBatch, updateRead} from "@/api/warn/message"; +import * as mqttUtil from "@/utils/mqtt"; export default { components: { UniDividerText @@ -163,8 +164,22 @@ export default { } }, onShow() { + console.info("消息中心监听") + mqttUtil.setOnMessageCallback(this.ackMsg); this.getMsgOverview(); }, + onHide() { + console.info("消息中心取消监听") + mqttUtil.removeOnMessageCallback(); + }, + onUnload() { + console.info("消息中心取消监听") + mqttUtil.removeOnMessageCallback(); + }, + beforeDestroy() { + console.info("消息中心取消监听") + mqttUtil.removeOnMessageCallback(); + }, methods: { isTodayDate, formatTime, @@ -219,6 +234,12 @@ export default { getMsgOverview().then(response => { if (response.code === 200) { this.messageList = response.data; + // this.messageList.forEach((msgItem, msgIndex) => { + // this.msgList[msgItem.msgType].numBadge = msgItem.unreadCount || null + // this.msgList[msgItem.msgType].content = msgItem.content || null + // this.msgList[msgItem.msgType].createTime = msgItem.createTime || null + // }) + this.msgList.forEach((item, index) => { item.numBadge = null; item.content = null; @@ -275,6 +296,42 @@ export default { change(e, type) { console.log((type === 'showLeft' ? '左窗口' : '右窗口') + (e ? '打开' : '关闭')); this[type] = e + }, + + ackMsg(topic, payload) { + var words = topic.split("/"); + if (words.length!==3) { + return; + } + const agriList = uni.getStorageSync('agri_list') + if (agriList.length === 0 || !agriList.includes(words[1])) { + return; + } + const tag = topic.match(/[^/]+$/)?.[0] + var regex = { + alarm:1, + notice:2, + event:3 + } + if (!regex[tag]) return; + console.info("收到消息2222",topic) + + let msgData = {}; + // 优化:捕获JSON解析异常 + try { + msgData = JSON.parse(payload); + var msg = msgData.msgType; + console.info("收到消息5555",msg) + if (!regex[tag]) return; + const item = this.msgList[regex[tag]]; + item.numBadge+=1; + item.content = msg.content; + item.createTime = msg.createTime; + console.info("收到消息3333",item) + + } catch (e) { + console.error("MQTT消息解析失败:", e, payload); + } } } } diff --git a/pages/news/subpages/deviceCenter/index.vue b/pages/news/subpages/deviceCenter/index.vue index fe04940..8bad6c2 100644 --- a/pages/news/subpages/deviceCenter/index.vue +++ b/pages/news/subpages/deviceCenter/index.vue @@ -190,14 +190,18 @@ export default { gotoDevice(item) { const agriList = uni.getStorageSync('agri_list') if (agriList.length === 0 || !agriList.includes(item.imei)) { - return + return; } this.$tab.navigateTo(item.linkUrl) }, ackAlarm(topic, payload) { - const regex = /^device\/\d+\/alarm$/; if (!regex.test(topic)) return; + var words = topic.split("/"); + const agriList = uni.getStorageSync('agri_list') + if (agriList.length === 0 || !agriList.includes(words[1])) { + return; + } let msgData = {}; // 优化:捕获JSON解析异常 try {