From 12c431b0eccbcef61f247e96b36db8653054a52f Mon Sep 17 00:00:00 2001 From: yangsy Date: Sat, 30 May 2026 22:17:11 +0800 Subject: [PATCH] =?UTF-8?q?refactor(vimp):=20=E4=BF=AE=E5=A4=8D=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=AB=99=E7=82=B9=E9=97=AE=E9=A2=98=E5=B9=B6=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=91=8A=E8=AD=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增站点去重逻辑避免重复条目 - 更新告警面板构建函数的参数与内部实现 - 修正摄像机和告警区域的注释表述 --- .../query/use-device-center-query.ts | 24 ++++++----- src/pages/vimp/stores/alarm.ts | 42 +++++++++---------- src/pages/vimp/stores/camera.ts | 2 +- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/pages/vimp/composables/query/use-device-center-query.ts b/src/pages/vimp/composables/query/use-device-center-query.ts index f882f3e..f746cd4 100644 --- a/src/pages/vimp/composables/query/use-device-center-query.ts +++ b/src/pages/vimp/composables/query/use-device-center-query.ts @@ -52,6 +52,7 @@ export const useDeviceCenterQuery = () => { // 例如有一个站点的编码是 010699 开头,但是其下的通道是 010199 和 010599 开头, // 而 010699 是一个不存在的站点编码,所以需要基于通道的编码来确定所有的站点。 const sites: VimpStation[] = []; + const builtSitesSet = new Set(); const siteCamerasMap = new Map(); const siteAlarmsMap = new Map(); @@ -61,12 +62,13 @@ export const useDeviceCenterQuery = () => { channels.forEach((channel) => { const siteCode = channel.code.substring(0, 6); - if (siteCode in codeSites && !sites.some((site) => site.code === siteCode)) { + if (siteCode in codeSites && !builtSitesSet.has(siteCode)) { sites.push({ code: siteCode, name: codeSites[siteCode]?.name ?? '', online: siteFromApi.online, }); + builtSitesSet.add(siteCode); } const typeCode = Number(channel.code.substring(11, 14)); if (typeCode >= 4 && typeCode <= 6) { @@ -94,16 +96,16 @@ export const useDeviceCenterQuery = () => { codeTrainAreas, }); - // alarmStore.buildLineTabPanes({ - // sitesFromApi, - // siteAlarmsMapFromApi, - // codeLines, - // codeSites, - // codeStationAreas, - // codeParkingAreas, - // codeOccAreas, - // codeTrainAreas, - // }); + alarmStore.buildLineTabPanes({ + sites, + siteAlarmsMap, + codeLines, + codeSites, + codeStationAreas, + codeParkingAreas, + codeOccAreas, + codeTrainAreas, + }); return null; }, diff --git a/src/pages/vimp/stores/alarm.ts b/src/pages/vimp/stores/alarm.ts index 3e0ac3f..aec6172 100644 --- a/src/pages/vimp/stores/alarm.ts +++ b/src/pages/vimp/stores/alarm.ts @@ -6,8 +6,8 @@ import { NIcon } from 'naive-ui'; import { SirenIcon } from 'lucide-vue-next'; interface BuildLineTabPanesParams { - sitesFromApi: VimpStation[] | null; - siteAlarmsMapFromApi: Record; + sites: VimpStation[]; + siteAlarmsMap: Map; codeLines: CodeLines; codeSites: CodeSites; codeStationAreas: CodeArea[]; @@ -20,26 +20,24 @@ export const useAlarmStore = defineStore('vimp-alarm-store', () => { const lineTabPanes = ref([]); const buildLineTabPanes = (params: BuildLineTabPanesParams) => { - const { sitesFromApi, siteAlarmsMapFromApi, codeLines, codeSites, codeStationAreas, codeParkingAreas, codeOccAreas, codeTrainAreas } = params; - if (!sitesFromApi) { - lineTabPanes.value = []; - return; - } - // 构造线路TabPane + const { sites, siteAlarmsMap, codeLines, codeSites, codeStationAreas, codeParkingAreas, codeOccAreas, codeTrainAreas } = params; + + // 线路TabPane const _lineTabPanes: AlarmLineTabPane[] = []; - const lineCode = sitesFromApi.at(0)?.code.substring(0, 3) ?? ''; - const lineName = codeLines[lineCode]?.name ?? ''; - if (!_lineTabPanes.some((lineNode) => lineNode.lineCode === lineCode)) { - _lineTabPanes.push({ - lineCode, - lineName, - alarmTree: [], - }); - } // 遍历所有站点 - for (const site of sitesFromApi) { - const siteCode = site.code.substring(0, 6); + for (const site of sites) { + const lineCode = site.code.substring(0, 3); + const lineName = codeLines[lineCode]?.name ?? ''; + if (!_lineTabPanes.some((lineNode) => lineNode.lineCode === lineCode)) { + _lineTabPanes.push({ + lineCode, + lineName, + alarmTree: [], + }); + } + + const siteCode = site.code; const siteName = codeSites[siteCode]?.name; if (!siteName) continue; @@ -54,7 +52,7 @@ export const useAlarmStore = defineStore('vimp-alarm-store', () => { _lineTabPanes.find((lineTabPane) => lineTabPane.lineCode === lineCode)?.alarmTree.push(siteNode); // 获取所有警报器 - const alarms = siteAlarmsMapFromApi[siteCode]; + const alarms = siteAlarmsMap.get(siteCode); if (!alarms || alarms.length === 0) continue; // 遍历警报器 @@ -109,7 +107,7 @@ export const useAlarmStore = defineStore('vimp-alarm-store', () => { } else { continue; } - if (!subArea) continue; // 如果还是未找到子区域,则跳过该警报器 + if (!subArea) continue; // 如果还是未找到2级区域,则跳过该警报器 const subAreaNode: AlarmSubAreaNodeOption = { key: `${alarmSiteCode}${alarmAreaCode}`, @@ -121,7 +119,7 @@ export const useAlarmStore = defineStore('vimp-alarm-store', () => { targetMainAreaNode.children?.push(subAreaNode); } const subAreaNode = targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${alarmSiteCode}${alarmAreaCode}`); - if (!subAreaNode) continue; // 如果子区域节点不存在,则跳过该警报器 + if (!subAreaNode) continue; // 如果2级区域节点不存在,则跳过该警报器 // 构造警报器节点 const alarmType = alarm.code.substring(11, 14); diff --git a/src/pages/vimp/stores/camera.ts b/src/pages/vimp/stores/camera.ts index 95beb16..42cd34e 100644 --- a/src/pages/vimp/stores/camera.ts +++ b/src/pages/vimp/stores/camera.ts @@ -121,7 +121,7 @@ export const useCameraStore = defineStore('vimp-camera-store', () => { targetMainAreaNode.children?.push(subAreaNode); } const subAreaNode = targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${cameraSiteCode}${cameraAreaCode}`); - if (!subAreaNode) continue; // 如果子区域节点不存在,则跳过该摄像机 + if (!subAreaNode) continue; // 如果2级区域节点不存在,则跳过该摄像机 // 构造摄像机节点 const cameraType = camera.code.substring(11, 14);