From 95f78943281e25320d3424ec06caa8bb5fa8d700 Mon Sep 17 00:00:00 2001 From: xudan Date: Mon, 1 Sep 2025 18:09:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=97=A8=E7=82=B9=E8=BF=9E=E6=8E=A5=E7=8A=B6=E6=80=81=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E8=AF=A6=E6=83=85=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/map/type.ts | 1 + src/components/card/point-detail-card.vue | 31 ++++++++++++++++++++ src/pages/movement-supervision.vue | 10 ++++++- src/pages/scene-editor.vue | 5 ++++ src/services/auto-door-simulation.service.ts | 17 ++++++++--- src/services/editor.service.ts | 11 +++++-- 6 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/apis/map/type.ts b/src/apis/map/type.ts index 73c993b..8cd60c0 100644 --- a/src/apis/map/type.ts +++ b/src/apis/map/type.ts @@ -32,6 +32,7 @@ export interface MapPointInfo { deviceId?: string; // 设备ID enabled?: 0 | 1; // 是否启用(仅停靠点使用,0=禁用,1=启用) deviceStatus?: number; // 设备状态(仅自动门点使用,0=关门,1=开门) + isConnected?: boolean; // 连接状态(仅自动门点使用,true=已连接,false=未连接) active?: boolean; // 是否激活状态,用于控制光圈显示 } //#endregion diff --git a/src/components/card/point-detail-card.vue b/src/components/card/point-detail-card.vue index cbc8218..a011ae2 100644 --- a/src/components/card/point-detail-card.vue +++ b/src/components/card/point-detail-card.vue @@ -198,6 +198,19 @@ const binTaskData = computed(() => { {{ $t('设备ID') }} {{ point.deviceId }} + + {{ $t('连接状态') }} + + + + {{ point.isConnected ? $t('已连接') : $t('未连接') }} + + + {{ $t('扩展类型') }} {{ $t(MapPointType[point.extensionType]) }} @@ -315,6 +328,24 @@ const binTaskData = computed(() => { @use '/src/assets/themes/theme' as *; @include themed { + .conn-status { + .status-dot { + width: 8px; + height: 8px; + border-radius: 50%; + display: inline-block; + box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.05); + &.online { + background-color: get-color(success); + box-shadow: 0 0 0 2px rgba(82, 196, 26, 0.15); + } + &.offline { + background-color: get-color(error); + box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.15); + } + } + } + .storage-locations { .storage-item { display: flex; diff --git a/src/pages/movement-supervision.vue b/src/pages/movement-supervision.vue index 1767974..0f26059 100644 --- a/src/pages/movement-supervision.vue +++ b/src/pages/movement-supervision.vue @@ -312,6 +312,11 @@ const handleAutoSaveAndRestoreViewState = async () => { //#region UI状态管理 const show = ref(true); //#endregion + +// 返回到父级 iframe 的场景卡片 +const backToCards = () => { + window.parent?.postMessage({ type: 'scene_return_to_cards' }, '*'); +};