From 820739632948cd170bc2063b2b75b48b2c23014a Mon Sep 17 00:00:00 2001 From: zy <82248909@qq.com> Date: Tue, 31 Mar 2026 15:39:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=93=8D=E4=BD=9Cmqtt?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=8C=E5=A4=B1=E8=B4=A5=E5=90=8E=E5=9B=9E?= =?UTF-8?q?=E9=80=80=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/components/ControlModal.vue | 75 ++++++++++++++++++- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/src/views/appmana/deploy/components/ControlModal.vue b/src/views/appmana/deploy/components/ControlModal.vue index 82b502b..e56e3b8 100644 --- a/src/views/appmana/deploy/components/ControlModal.vue +++ b/src/views/appmana/deploy/components/ControlModal.vue @@ -1,5 +1,14 @@ @@ -51,7 +64,11 @@ import { getValveStatus, sendDeviceCmd, getRelayList } from '../SurvDeviceDeploy.api'; import { message } from 'ant-design-vue'; import { usePageMqtt } from '/@/components/mqtt/usePageMqtt'; - + import { useMessage } from '/@/hooks/web/useMessage'; + const visibleloading = ref(true); + const loading = ref(false); + const { createMessage, createConfirm } = useMessage(); + let timer = null; // MQTT 配置 const mqttOptions = { brokerUrl: import.meta.env.VITE_MQTT_BROKER_URL || 'ws://localhost:8083/mqtt', @@ -141,6 +158,7 @@ if (source) { Object.assign(member, { value: source, + checkValue: source, }); } }); @@ -228,8 +246,44 @@ }); function switchChange(checked, relay) { - openMessage(); - let ops = checked; + loading.value = true; + // 保存期望的目标状态(用户点击后的状态) + const ops = checked; + timer = setTimeout(() => { + // 超时未收到回执,重置 Switch 状态 + if (relay.value == relay.checkValue) { + //两个值一致时,判定为操作成功,否则无回执或者回执与操作不一致 + createConfirm({ + title: '操作结果', + iconType: 'success', + content: '操作成功', + cancelButtonProps: { + style: { display: 'none' }, // 隐藏取消按钮 + }, + onOk: () => { + loading.value = false; + }, + }); + } else { + if (ops == '1') { + relay.value = '0'; + } else { + relay.value = '1'; + } + createConfirm({ + title: '操作结果', + iconType: 'error', + content: '操作失败,设备未及时响应', + cancelButtonProps: { + style: { display: 'none' }, // 隐藏取消按钮 + }, + onOk: () => { + loading.value = false; + }, + }); + } + }, 3000); + // if (checked === true) { // ops = '1'; // } else if (checked === false) { @@ -399,4 +453,17 @@ height: 100%; min-height: 180px; } + + .fullscreen-mask { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.45); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; + }