diff --git a/api/system/assets/agri.js b/api/system/assets/agri.js index 261a988..d313f9c 100644 --- a/api/system/assets/agri.js +++ b/api/system/assets/agri.js @@ -66,6 +66,6 @@ export function switchAgriMode(imei, code) { return request({ url: '/assets/agri/switchAgriMode/' + imei, method: 'post', - param: code + params: code }) } \ No newline at end of file diff --git a/api/system/mqtt.js b/api/system/mqtt.js index de8f5b9..f95e0af 100644 --- a/api/system/mqtt.js +++ b/api/system/mqtt.js @@ -46,4 +46,13 @@ export function status() { url: '/api/mqtt/batch', method: 'get' }) -} \ No newline at end of file +} + + +export function getAgriStatus(data) { + return request({ + url: '/api/mqtt/getAgriStatus', + method: 'post', + data: data + }) +} diff --git a/pages/home/control/index.vue b/pages/home/control/index.vue index 9cd0314..1c4cf77 100644 --- a/pages/home/control/index.vue +++ b/pages/home/control/index.vue @@ -193,7 +193,6 @@ export default { }, onUnload() { // 移除MQTT消息回调(避免内存泄漏) - mqttUtil.removeOnMessageCallback(); }, methods: { refresh() { diff --git a/pages/index.vue b/pages/index.vue index 9cd690f..b82128f 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -31,6 +31,12 @@ + { console.error("获取大棚信息失败:", err); @@ -391,9 +406,9 @@ export default { // 温度 const allKeysNumeric2 = Object.keys(msgData).every(key => /^\d+$/.test(key)); if (regex1.test(topic) && Object.keys(msgData).length > 0 && allKeysNumeric2) { - this.updateTempFast(msgData) + this.updateTempFast(msgData, topic) } - + this.getDataDetails(); }, updateDeviceStatusFast(targetImei, isOnline) { // 直接从Map里取设备项,无需遍历数组 @@ -406,9 +421,9 @@ export default { targetDevice.online = statusText; }, - updateTempFast: function (msgData) { + updateTempFast: function (msgData,topic) { const regexWithGroup = /^frontend\/(.+)\/dtu\/(\d+)\/listener$/; - const matchResult = regexWithGroup.match(msgData); + const matchResult = topic.match(regexWithGroup); const imei = matchResult[2]; // 提取结果:'1234567890' // 直接从Map里取设备项,无需遍历数组 const targetDevice = this.imeiToDeviceMap.get(imei); @@ -416,10 +431,36 @@ export default { const div10 = (v) => (v == null ? null : Math.round((Number(v) / 10) * 10) / 10); // 直接修改对象属性,响应式正常生效 - targetDevice.temp1 = msgData['201']; - targetDevice.temp2 = msgData['202']; - targetDevice.temp3 = msgData['203']; - targetDevice.temp4 = msgData['204']; + targetDevice.temp1 = div10(msgData['201']); + targetDevice.temp2 = div10(msgData['202']); + targetDevice.temp3 = div10(msgData['203']); + targetDevice.temp4 = div10(msgData['204']); + }, + getDataDetails() { + this.dataDetails = { + tip: null, + online: 0, + offline: 0 + } + var online = 0; + var offline = 0; + this.listData.forEach(item => { + if (item.online === '离线') { + offline += 1; + } else { + online += 1; + } + }) + this.dataDetails = { + tip: null, + online: online, + offline: offline, + } + }, + getAgriStatus() { + if (!this.listData || this.listData.length === 0) return []; // 空列表处理 + const allImei = this.listData.map(item => item.imei).filter(imei => imei); + getAgriStatus([...new Set(allImei)]) } } }