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 f746cd4..5db29e9 100644 --- a/src/pages/vimp/composables/query/use-device-center-query.ts +++ b/src/pages/vimp/composables/query/use-device-center-query.ts @@ -51,8 +51,10 @@ export const useDeviceCenterQuery = () => { // 从 /allDevice 接口获取的站点信息并不保证真实性和完整性, // 例如有一个站点的编码是 010699 开头,但是其下的通道是 010199 和 010599 开头, // 而 010699 是一个不存在的站点编码,所以需要基于通道的编码来确定所有的站点。 - const sites: VimpStation[] = []; - const builtSitesSet = new Set(); + const cameraSites: VimpStation[] = []; + const alarmSites: VimpStation[] = []; + const cameraBuiltSitesSet = new Set(); + const alarmBuiltSitesSet = new Set(); const siteCamerasMap = new Map(); const siteAlarmsMap = new Map(); @@ -62,21 +64,31 @@ export const useDeviceCenterQuery = () => { channels.forEach((channel) => { const siteCode = channel.code.substring(0, 6); - 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) { + const isCamera = typeCode >= 4 && typeCode <= 6; + const isAlarm = (typeCode >= 101 && typeCode <= 108) || (typeCode >= 810 && typeCode <= 815); + if (isCamera) { + if (!cameraBuiltSitesSet.has(siteCode)) { + cameraSites.push({ + code: siteCode, + name: codeSites[siteCode]?.name ?? '', + online: siteFromApi.online, + }); + cameraBuiltSitesSet.add(siteCode); + } if (!siteCamerasMap.has(siteCode)) { siteCamerasMap.set(siteCode, []); } siteCamerasMap.get(siteCode)!.push(channel); - } else if ((typeCode >= 101 && typeCode <= 108) || (typeCode >= 810 && typeCode <= 815)) { + } else if (isAlarm) { + if (!alarmBuiltSitesSet.has(siteCode)) { + alarmSites.push({ + code: siteCode, + name: codeSites[siteCode]?.name ?? '', + online: siteFromApi.online, + }); + alarmBuiltSitesSet.add(siteCode); + } if (!siteAlarmsMap.has(siteCode)) { siteAlarmsMap.set(siteCode, []); } @@ -85,8 +97,14 @@ export const useDeviceCenterQuery = () => { }); } + console.log(new Date().toLocaleString()); + console.log(cameraSites); + console.log(siteCamerasMap); + console.log(alarmSites); + console.log(siteAlarmsMap); + cameraStore.buildLineTabPanes({ - sites, + sites: cameraSites, siteCamerasMap, codeLines, codeSites, @@ -97,7 +115,7 @@ export const useDeviceCenterQuery = () => { }); alarmStore.buildLineTabPanes({ - sites, + sites: alarmSites, siteAlarmsMap, codeLines, codeSites, diff --git a/src/pages/vimp/stores/alarm.ts b/src/pages/vimp/stores/alarm.ts index aec6172..4143e65 100644 --- a/src/pages/vimp/stores/alarm.ts +++ b/src/pages/vimp/stores/alarm.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia'; import type { VimpChannel, VimpStation } from '../apis'; -import { h, ref } from 'vue'; +import { h, shallowRef } from 'vue'; import type { AlarmMainAreaNodeOption, AlarmNodeOption, CodeArea, CodeLines, CodeSites, AlarmLineTabPane, AlarmSiteNodeOption, AlarmSubAreaNodeOption } from '../types'; import { NIcon } from 'naive-ui'; import { SirenIcon } from 'lucide-vue-next'; @@ -17,7 +17,7 @@ interface BuildLineTabPanesParams { } export const useAlarmStore = defineStore('vimp-alarm-store', () => { - const lineTabPanes = ref([]); + const lineTabPanes = shallowRef([]); const buildLineTabPanes = (params: BuildLineTabPanesParams) => { const { sites, siteAlarmsMap, codeLines, codeSites, codeStationAreas, codeParkingAreas, codeOccAreas, codeTrainAreas } = params; diff --git a/src/pages/vimp/stores/camera.ts b/src/pages/vimp/stores/camera.ts index 42cd34e..ddd2591 100644 --- a/src/pages/vimp/stores/camera.ts +++ b/src/pages/vimp/stores/camera.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia'; import type { VimpChannel, VimpStation } from '../apis'; -import { h, ref } from 'vue'; +import { h, shallowRef } from 'vue'; import type { CameraMainAreaNodeOption, CameraNodeOption, CodeArea, CodeLines, CodeSites, CameraLineTabPane, CameraSiteNodeOption, CameraSubAreaNodeOption } from '../types'; import { NIcon } from 'naive-ui'; import BulletCamera from '../components/icon/bullet-camera.vue'; @@ -19,7 +19,7 @@ interface BuildLineTabPanesParams { } export const useCameraStore = defineStore('vimp-camera-store', () => { - const lineTabPanes = ref([]); + const lineTabPanes = shallowRef([]); const buildLineTabPanes = (params: BuildLineTabPanesParams) => { const { sites, siteCamerasMap, codeLines, codeSites, codeStationAreas, codeParkingAreas, codeOccAreas, codeTrainAreas } = params;