diff --git a/pages/control/index.vue b/pages/control/index.vue index 3140acd..9b32ecd 100644 --- a/pages/control/index.vue +++ b/pages/control/index.vue @@ -274,7 +274,13 @@ $uni-success: #18bc37 !default; 控制设置 - + + + + + + + @@ -383,7 +389,18 @@ export default { password: 'Admin#12345678', subscribeTopic:'/up', }, - imei:'864536071808560', + value: 1, + range: [{ + "value": '864865085016294', + "text": "十方北棚" + }, { + "value": '864536071808560', + "text": "七方北棚", + }, { + "value": '864865085008135', + "text": "八方北棚" + }], + imei:'', publishTopic: '/down', title:'', message: {}, @@ -413,9 +430,7 @@ export default { }; }, onLoad() { - this.publishTopic = "dtu/"+this.imei+this.publishTopic; - this.mqttConfig.subscribeTopic = "dtu/"+this.imei+this.mqttConfig.subscribeTopic; - this.title="设备【"+this.imei+"】"; + this.title=""; if (this.status.jbk===1) { this.status.jbg = 0; } @@ -448,29 +463,101 @@ export default { this.disconnectMqtt() }, methods: { + change(e) { + this.imei = e; + this.publishTopic = "dtu/"+this.imei+"/down"; + this.mqttConfig.subscribeTopic = "dtu/"+this.imei+"/up"; + const selectedItem = this.range.find(item => item.value === e); + if (selectedItem) { + this.selectedText = selectedItem.text; // 获取展示文本 + this.title= this.selectedText; + } else { + this.selectedText = ''; // 无匹配项时清空 + this.title=''; + this.value=1; + } + this.reset(); + }, + reset() { + this.show= { + jbk: "暂停", + jbg: "暂停", + jm1k: "暂停", + jm1g: "暂停", + jm2k: "暂停", + jm2g: "暂停", + jm3k: "暂停", + jm3g: "暂停" + } + this.deviceType= ''; + this.status= { + jbk: 0, + jbg: 0, + jm1k: 0, + jm1g: 0, + jm2k: 0, + jm2g: 0, + jm3k: 0, + jm3g: 0 + }; + this.message={}; + }, // 卡片点击事件(实际项目中调用接口修改状态) 功能标识 handleCardClick(status, type) { + // 校验 + // 定义类型与提示文案的映射关系,减少重复代码 + const tipMap = { + 'jbk': { opposite: 'jbg', name: '卷被关', op: '卷被开' }, + 'jbg': { opposite: 'jbk', name: '卷被开', op: '卷被关' }, + 'jm1k': { opposite: 'jm1g', name: '卷膜1关', op: '卷膜1开' }, + 'jm1g': { opposite: 'jm1k', name: '卷膜1开', op: '卷膜1关' }, + 'jm2k': { opposite: 'jm2g', name: '卷膜2关', op: '卷膜2开' }, + 'jm2g': { opposite: 'jm2k', name: '卷膜2开', op: '卷膜2关' }, + 'jm3k': { opposite: 'jm3g', name: '卷膜3关', op: '卷膜3开' }, + 'jm3g': { opposite: 'jm3k', name: '卷膜3开', op: '卷膜3关' } + }; + + // 先判断类型是否在映射表中,避免无效case + if (!tipMap[type]) return; + + const { opposite, name, op } = tipMap[type]; + // 核心校验逻辑(只写一次,无需重复) + if (status === 1 && this.status[opposite] === 1) { + this.$modal.msgError(`【${this.selectedText}】${name}在运行状态,不能运行${op}操作!`); + // 此处return可保留,也可去掉(因为函数执行到这里已完成核心逻辑) + return; + } + if (!this.connected) { // 链接mqtt this.connectMqtt() } + if (this.value===1) { + this.$modal.msgError("设备控制失败!"); + console.info("大棚选取失败!") + return; + } uni.showModal({ title: '操作提示:', - content: '确定'+(status===1?"运行":"暂停")+'设备?', + content: '确定'+(status===1?"运行":"暂停")+'【'+this.selectedText+'】设备?', cancelText: '取消', confirmText: '确定', success: (res) =>{ if (res.confirm) { console.info("操作功能:【"+type+"】,变更状态为:"+ status) - // 组装消息 + // // 组装消息 this.message = JSON.stringify({[type]: status}) - console.info("指令:"+this.message) + console.info("指令:"+this.message+";大棚:"+this.publishTopic) // 控制设备 - this.publishMessage(); - // 设备回执 - this.deviceType=type; + // this.publishMessage(); + // // 设备回执 + // this.deviceType=type; + + this.status[type] = this.status[type] === 0 ? 1 : 0; + this.show[type] = this.status[type] === 0 ? "运行" : "暂停"; + } } }) @@ -570,9 +657,7 @@ export default { console.info("提示消息:"+content) }, - switchChange() { - }, // 处理指令回执的函数 handleCommandAck(ackData,type) { console.info("回执消息11111:"+ackData) @@ -586,6 +671,8 @@ export default { this.show[type] = this.status[type] === 0 ? "运行" : "暂停"; } this.deviceType=''; + this.$modal.msgSuccess("设备操作成功!") + // 业务逻辑:提示“指令执行成功/失败” console.log(`指令[${commandField}=${commandValue}]执行${isSuccess ? "成功" : "失败"}`); // (可匹配之前发布的指令msgId,更新UI状态) @@ -676,4 +763,12 @@ export default { .card-icon.active { background-color: #007aff; } +.uni-px-5 { + padding-left: 20rpx; + padding-right: 20rpx; +} + +.uni-pb-5 { + padding-bottom: 40rpx; +}