diff --git a/pages/control/index.vue b/pages/control/index.vue
index c0d540a..d58732d 100644
--- a/pages/control/index.vue
+++ b/pages/control/index.vue
@@ -92,7 +92,12 @@
修改后时间:
-
+
+
秒
@@ -314,7 +319,6 @@ export default {
text: item.agriName,
value: item.imei // 提取并改名
}));
- console.info(this.range);
}
})
},
@@ -393,15 +397,55 @@ export default {
// 设备回执
this.deviceType = type;
//todo
-
- // this.$set(this.status, type, this.status[type] === 0 ? 1 : 0);
- // this.$set(this.show, type, this.status[type] === 0 ? "暂停" : "运行");
+ // this.testAuto(type);
}
}
})
},
+ // 测试专用
+ testAuto(type) {
+ this.$set(this.status, type, this.status[type] === 0 ? 1 : 0);
+ this.$set(this.show, type, this.status[type] === 0 ? "暂停" : "运行");
+
+ // ========== 核心新增:开启指令成功后启动定时器(带快照) ==========
+ const isStartCommand = status === 1; // 1=开启指令,0=停止指令
+ if (isStartCommand) {
+ // 1. 清除同type旧定时器(避免重复计时)
+ if (this.timers[type]?.timerId) {
+ clearTimeout(this.timers[type].timerId);
+ delete this.timers[type];
+ }
+
+ // 2. 快照:保存当前所有关键数据(值拷贝,永不改变)
+ const snapInfo = {
+ imei: this.imei, // 旧大棚imei
+ publishTopic: this.publishTopic, // 旧大棚Topic
+ delayTime: Number(this.limitTimes[`${type}Limit`] || 0) * 1000, // 旧运行时长(毫秒)
+ deviceType: type, // 设备类型
+ connected: this.connected // 连接状态
+ };
+ // 3. 仅当设置了运行时间才启动定时器
+ if (snapInfo.delayTime && snapInfo.delayTime > 0) {
+ console.info(`定时记录:大棚:${snapInfo.imei}; 指令:${this.message}`)
+
+ // 4. 启动定时器,存储timerId和快照
+ const timerId = setTimeout(() => {
+ // 计时结束:执行自动停止逻辑(使用快照数据)
+ this.sendAutoStopCommand(snapInfo);
+ // 清除当前定时器记录
+ delete this.timers[type];
+ }, snapInfo.delayTime);
+
+ // 5. 保存定时器信息
+ this.timers[type] = {
+ timerId: timerId,
+ snapInfo: snapInfo
+ };
+ }
+ }
+ },
publishMessage() {
if (!this.connected || !this.publishTopic || !this.message) {
uni.showToast({
@@ -520,8 +564,8 @@ export default {
if (needStop) {
// 3. 组装停止指令(使用快照中的设备类型)
const stopMessage = JSON.stringify({[snapInfo.deviceType]: 0});
-
- // 4. 使用快照中的Topic发送指令(精准发往旧大棚)
+ console.info(`自动停:${snapInfo.publishTopic}:${stopMessage}`);
+ // todo 4. 使用快照中的Topic发送指令(精准发往旧大棚)
const publishSuccess = mqttUtil.publishMqtt(snapInfo.publishTopic, stopMessage);
if (publishSuccess) {
this.addMessage(`【自动停止-旧大棚${snapInfo.imei}】设备${snapInfo.deviceType},指令: ${stopMessage}`);
@@ -530,6 +574,7 @@ export default {
if (this.imei === snapInfo.imei) {
this.$set(this.status, snapInfo.deviceType, 0);
this.$set(this.show, snapInfo.deviceType, "暂停");
+
}
} else {
this.addMessage(`【自动停止失败-旧大棚${snapInfo.imei}】设备${snapInfo.deviceType}`);
@@ -835,15 +880,16 @@ export default {
color: #666;
}
.modal-current {
+ margin-left: 14rpx;
color: #333;
}
.modal-input {
- flex: 1;
height: 60rpx;
border: 1px solid #eee;
border-radius: 8rpx;
padding: 0 15rpx;
font-size: 26rpx;
+ width: 80rpx;
}
.modal-unit {
margin-left: 10rpx;