From 191e15975ced54ca39adc3b1c71ea8ccab2f0296 Mon Sep 17 00:00:00 2001 From: haohao <1036606149@qq.com> Date: Tue, 16 Dec 2025 16:45:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=E3=80=90antd=E3=80=91=E3=80=90iot?= =?UTF-8?q?=E3=80=91=E9=87=8D=E6=9E=84=E8=AE=BE=E5=A4=87=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E4=BC=98=E5=8C=96=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=B8=8E=E8=B7=AF=E5=BE=84=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=AE=BE=E5=A4=87=E9=85=8D=E7=BD=AE=E3=80=81=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E3=80=81=E4=BA=8B=E4=BB=B6=E7=AE=A1=E7=90=86=E7=AD=89?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-antd/src/router/routes/modules/iot.ts | 6 +- .../device/{modules => }/detail/index.vue | 2 - .../{modules => }/detail/modules/config.vue | 64 +- .../{modules => }/detail/modules/header.vue | 4 +- .../{modules => }/detail/modules/info.vue | 19 +- .../device/device/detail/modules/message.vue | 252 ++++++++ .../device/detail/modules/simulator.vue | 612 ++++++++++++++++++ .../detail/modules/sub-device.vue | 0 .../detail/modules/thing-model-event.vue | 264 ++++++++ .../modules/thing-model-property-history.vue | 64 +- .../detail/modules/thing-model-property.vue | 271 ++++++-- .../detail/modules/thing-model-service.vue | 291 +++++++++ .../detail/modules/thing-model.vue | 0 .../src/views/iot/device/device/index.vue | 95 +-- .../iot/device/device/modules/card-view.vue | 4 + .../device/modules/detail/modules/message.vue | 273 -------- .../modules/detail/modules/simulator.vue | 605 ----------------- .../detail/modules/thing-model-event.vue | 237 ------- .../detail/modules/thing-model-service.vue | 259 -------- .../views/iot/device/device/modules/form.vue | 2 +- .../src/views/iot/product/product/index.vue | 17 +- 21 files changed, 1788 insertions(+), 1553 deletions(-) rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/index.vue (98%) rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/config.vue (89%) rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/header.vue (96%) rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/info.vue (90%) create mode 100644 apps/web-antd/src/views/iot/device/device/detail/modules/message.vue create mode 100644 apps/web-antd/src/views/iot/device/device/detail/modules/simulator.vue rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/sub-device.vue (100%) create mode 100644 apps/web-antd/src/views/iot/device/device/detail/modules/thing-model-event.vue rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/thing-model-property-history.vue (89%) rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/thing-model-property.vue (53%) create mode 100644 apps/web-antd/src/views/iot/device/device/detail/modules/thing-model-service.vue rename apps/web-antd/src/views/iot/device/device/{modules => }/detail/modules/thing-model.vue (100%) delete mode 100644 apps/web-antd/src/views/iot/device/device/modules/detail/modules/message.vue delete mode 100644 apps/web-antd/src/views/iot/device/device/modules/detail/modules/simulator.vue delete mode 100644 apps/web-antd/src/views/iot/device/device/modules/detail/modules/thing-model-event.vue delete mode 100644 apps/web-antd/src/views/iot/device/device/modules/detail/modules/thing-model-service.vue diff --git a/apps/web-antd/src/router/routes/modules/iot.ts b/apps/web-antd/src/router/routes/modules/iot.ts index 1c885a4c6..2bc6d32b2 100644 --- a/apps/web-antd/src/router/routes/modules/iot.ts +++ b/apps/web-antd/src/router/routes/modules/iot.ts @@ -18,8 +18,7 @@ const routes: RouteRecordRaw[] = [ title: '产品详情', activePath: '/iot/device/product', }, - component: () => - import('#/views/iot/product/product/detail/index.vue'), + component: () => import('#/views/iot/product/product/detail/index.vue'), }, { path: 'device/detail/:id', @@ -28,8 +27,7 @@ const routes: RouteRecordRaw[] = [ title: '设备详情', activePath: '/iot/device/device', }, - component: () => - import('#/views/iot/device/device/modules/detail/index.vue'), + component: () => import('#/views/iot/device/device/detail/index.vue'), }, { path: 'ota/firmware/detail/:id', diff --git a/apps/web-antd/src/views/iot/device/device/modules/detail/index.vue b/apps/web-antd/src/views/iot/device/device/detail/index.vue similarity index 98% rename from apps/web-antd/src/views/iot/device/device/modules/detail/index.vue rename to apps/web-antd/src/views/iot/device/device/detail/index.vue index ac1ede8cd..adc7ea4b1 100644 --- a/apps/web-antd/src/views/iot/device/device/modules/detail/index.vue +++ b/apps/web-antd/src/views/iot/device/device/detail/index.vue @@ -35,8 +35,6 @@ const device = ref({} as IotDeviceApi.Device); const activeTab = ref('info'); const thingModelList = ref([]); -// TODO @haohao:类似 device/detail/index.vue 挪出去哈。 - /** 获取设备详情 */ async function getDeviceData(deviceId: number) { loading.value = true; diff --git a/apps/web-antd/src/views/iot/device/device/modules/detail/modules/config.vue b/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue similarity index 89% rename from apps/web-antd/src/views/iot/device/device/modules/detail/modules/config.vue rename to apps/web-antd/src/views/iot/device/device/detail/modules/config.vue index f24fc0627..3fef66a05 100644 --- a/apps/web-antd/src/views/iot/device/device/modules/detail/modules/config.vue +++ b/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue @@ -21,6 +21,7 @@ const emit = defineEmits<{ const loading = ref(false); // 加载中 const pushLoading = ref(false); // 推送加载中 +const saveLoading = ref(false); // 保存加载中 const config = ref({}); // 只存储 config 字段 const configString = ref(''); // 用于编辑器的字符串格式 @@ -50,11 +51,6 @@ const formattedConfig = computed(() => { } }); -/** 判断配置是否有数据 */ -const hasConfigData = computed(() => { - return config.value && Object.keys(config.value).length > 0; -}); - /** 启用编辑模式的函数 */ function handleEdit() { isEditing.value = true; @@ -84,9 +80,13 @@ async function saveConfig() { message.error({ content: 'JSON格式错误,请修正后再提交!' }); return; } - // TODO @haohao:这里要不要做个类似下面的 pushLoading 避免重复提交; - await updateDeviceConfig(); - isEditing.value = false; + saveLoading.value = true; + try { + await updateDeviceConfig(); + isEditing.value = false; + } finally { + saveLoading.value = false; + } } /** 配置推送处理函数 */ @@ -126,36 +126,14 @@ async function updateDeviceConfig() { diff --git a/apps/web-antd/src/views/iot/device/device/modules/detail/modules/header.vue b/apps/web-antd/src/views/iot/device/device/detail/modules/header.vue similarity index 96% rename from apps/web-antd/src/views/iot/device/device/modules/detail/modules/header.vue rename to apps/web-antd/src/views/iot/device/device/detail/modules/header.vue index 493d2ed76..efffe07b9 100644 --- a/apps/web-antd/src/views/iot/device/device/modules/detail/modules/header.vue +++ b/apps/web-antd/src/views/iot/device/device/detail/modules/header.vue @@ -8,7 +8,7 @@ import { useVbenModal } from '@vben/common-ui'; import { Button, Card, Descriptions, message } from 'ant-design-vue'; -import DeviceForm from '../../form.vue'; +import DeviceForm from '../../modules/form.vue'; interface Props { product: IotProductApi.Product; @@ -74,7 +74,7 @@ function openEditForm(row: IotDeviceApi.Device) { - + + + + {{ props.device.deviceName }} @@ -105,16 +111,16 @@ function handleAuthInfoDialogClose() { /> - {{ formatDate(props.device.createTime) }} + {{ formatDateTime(props.device.createTime) }} - {{ formatDate(props.device.activeTime) }} + {{ formatDateTime(props.device.activeTime) }} - {{ formatDate(props.device.onlineTime) }} + {{ formatDateTime(props.device.onlineTime) }} - {{ formatDate(props.device.offlineTime) }} + {{ formatDateTime(props.device.offlineTime) }}