diff --git a/src/pages/vimp/components/alarm-tree.vue b/src/pages/vimp/components/alarm-tree.vue index 5983c1d..9aa3358 100644 --- a/src/pages/vimp/components/alarm-tree.vue +++ b/src/pages/vimp/components/alarm-tree.vue @@ -3,7 +3,7 @@ import { NTabPane, NTabs, NTree, type TreeOverrideNodeClickBehavior, type TreePr import { h, type CSSProperties } from 'vue'; import { useAlarmStore } from '../stores'; import { storeToRefs } from 'pinia'; -import { useDeviceCenterQuery, type VimpChannel, type VimpStation } from '../apis'; +import { useDeviceCenterQuery } from '../apis'; import { isAlarmNode, isAlarmSiteNode, isAlarmAreaNode } from '../types'; const { isLoading } = useDeviceCenterQuery(); diff --git a/src/pages/vimp/stores/alarm.ts b/src/pages/vimp/stores/alarm-store.ts similarity index 86% rename from src/pages/vimp/stores/alarm.ts rename to src/pages/vimp/stores/alarm-store.ts index 2b8a882..956008b 100644 --- a/src/pages/vimp/stores/alarm.ts +++ b/src/pages/vimp/stores/alarm-store.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia'; import type { VimpChannel, VimpStation } from '../apis'; import { h, ref } from 'vue'; -import type { AlarmAreaNodeOption, AlarmNodeOption, CodeArea, CodeLines, CodeSites, AlarmLineTabPane, AlarmSiteNodeOption, AlarmSubAreaNodeOption } from '../types'; +import type { AlarmMainAreaNodeOption, AlarmNodeOption, CodeArea, CodeLines, CodeSites, AlarmLineTabPane, AlarmSiteNodeOption, AlarmSubAreaNodeOption } from '../types'; interface BuildLineTabPanesParams { sites: VimpStation[] | null; @@ -79,22 +79,22 @@ export const useAlarmStore = defineStore('vimp-alarm', () => { } if (!siteArea) continue; // 如果还是未找到区域,则跳过该警报器 - // 构造区域节点 + // 构造1级区域节点 if (!siteNode.children?.find((areaNode) => areaNode.key === `${alarmSiteCode}${alarmMainAreaCode}`)) { - const areaNode: AlarmAreaNodeOption = { + const mainAreaNode: AlarmMainAreaNodeOption = { key: `${alarmSiteCode}${alarmMainAreaCode}`, label: siteArea.name, children: [], stats: { online: 0, offline: 0, total: 0 }, site: site, }; - siteNode.children?.push(areaNode); + siteNode.children?.push(mainAreaNode); } - const areaNode = siteNode.children?.find((areaNode) => areaNode.key === `${alarmSiteCode}${alarmMainAreaCode}`); - if (!areaNode) continue; // 如果区域节点不存在,则跳过该警报器 + const targetMainAreaNode = siteNode.children?.find((areaNode) => areaNode.key === `${alarmSiteCode}${alarmMainAreaCode}`); + if (!targetMainAreaNode) continue; // 如果1级区域节点不存在,则跳过该警报器 - // 构造子区域节点 - if (!areaNode.children?.find((subAreaNode) => subAreaNode.key === `${alarmSiteCode}${alarmAreaCode}`)) { + // 构造2级区域节点 + if (!targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${alarmSiteCode}${alarmAreaCode}`)) { let subArea: CodeArea['subs'][number] | undefined = undefined; if (alarmSiteType === 'station') { subArea = codeStationAreas.find((area) => area.code === alarmMainAreaCode)?.subs.find((subArea) => subArea.code === alarmAreaCode); @@ -116,9 +116,9 @@ export const useAlarmStore = defineStore('vimp-alarm', () => { stats: { online: 0, offline: 0, total: 0 }, site: site, }; - areaNode.children?.push(subAreaNode); + targetMainAreaNode.children?.push(subAreaNode); } - const subAreaNode = areaNode.children?.find((subAreaNode) => subAreaNode.key === `${alarmSiteCode}${alarmAreaCode}`); + const subAreaNode = targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${alarmSiteCode}${alarmAreaCode}`); if (!subAreaNode) continue; // 如果子区域节点不存在,则跳过该警报器 // 构造警报器节点 @@ -141,16 +141,16 @@ export const useAlarmStore = defineStore('vimp-alarm', () => { // 统计站点、区域、子区域的在线/离线/总警报器数量 siteNode.stats.total++; - areaNode.stats.total++; + targetMainAreaNode.stats.total++; subAreaNode.stats.total++; if (alarm.status === 1) { siteNode.stats.online++; - areaNode.stats.online++; + targetMainAreaNode.stats.online++; subAreaNode.stats.online++; } if (alarm.status === 0) { siteNode.stats.offline++; - areaNode.stats.offline++; + targetMainAreaNode.stats.offline++; subAreaNode.stats.offline++; } } diff --git a/src/pages/vimp/stores/camera.ts b/src/pages/vimp/stores/camera-store.ts similarity index 85% rename from src/pages/vimp/stores/camera.ts rename to src/pages/vimp/stores/camera-store.ts index 8c250d9..a1ff33a 100644 --- a/src/pages/vimp/stores/camera.ts +++ b/src/pages/vimp/stores/camera-store.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia'; import type { VimpChannel, VimpStation } from '../apis'; import { h, ref } from 'vue'; -import type { CameraAreaNodeOption, CameraNodeOption, CodeArea, CodeLines, CodeSites, CameraLineTabPane, CameraSiteNodeOption, CameraSubAreaNodeOption } from '../types'; +import type { CameraMainAreaNodeOption, CameraNodeOption, CodeArea, CodeLines, CodeSites, CameraLineTabPane, CameraSiteNodeOption, CameraSubAreaNodeOption } from '../types'; interface BuildLineTabPanesParams { sites: VimpStation[] | null; @@ -79,22 +79,22 @@ export const useCameraStore = defineStore('vimp-camera', () => { } if (!siteArea) continue; // 如果还是未找到区域,则跳过该摄像机 - // 构造区域节点 + // 构造1级区域节点 if (!siteNode.children?.find((areaNode) => areaNode.key === `${cameraSiteCode}${cameraMainAreaCode}`)) { - const areaNode: CameraAreaNodeOption = { + const mainAreaNode: CameraMainAreaNodeOption = { key: `${cameraSiteCode}${cameraMainAreaCode}`, label: siteArea.name, children: [], stats: { online: 0, offline: 0, total: 0 }, site: site, }; - siteNode.children?.push(areaNode); + siteNode.children?.push(mainAreaNode); } - const areaNode = siteNode.children?.find((areaNode) => areaNode.key === `${cameraSiteCode}${cameraMainAreaCode}`); - if (!areaNode) continue; // 如果区域节点不存在,则跳过该摄像机 + const targetMainAreaNode = siteNode.children?.find((areaNode) => areaNode.key === `${cameraSiteCode}${cameraMainAreaCode}`); + if (!targetMainAreaNode) continue; // 如果1级区域节点不存在,则跳过该摄像机 - // 构造子区域节点 - if (!areaNode.children?.find((subAreaNode) => subAreaNode.key === `${cameraSiteCode}${cameraAreaCode}`)) { + // 构造2级区域节点 + if (!targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${cameraSiteCode}${cameraAreaCode}`)) { let subArea: CodeArea['subs'][number] | undefined = undefined; if (cameraSiteType === 'station') { subArea = codeStationAreas.find((area) => area.code === cameraMainAreaCode)?.subs.find((subArea) => subArea.code === cameraAreaCode); @@ -107,7 +107,7 @@ export const useCameraStore = defineStore('vimp-camera', () => { } else { continue; } - if (!subArea) continue; // 如果还是未找到子区域,则跳过该摄像机 + if (!subArea) continue; // 如果还是未找到2级区域,则跳过该摄像机 const subAreaNode: CameraSubAreaNodeOption = { key: `${cameraSiteCode}${cameraAreaCode}`, @@ -116,9 +116,9 @@ export const useCameraStore = defineStore('vimp-camera', () => { stats: { online: 0, offline: 0, total: 0 }, site: site, }; - areaNode.children?.push(subAreaNode); + targetMainAreaNode.children?.push(subAreaNode); } - const subAreaNode = areaNode.children?.find((subAreaNode) => subAreaNode.key === `${cameraSiteCode}${cameraAreaCode}`); + const subAreaNode = targetMainAreaNode.children?.find((subAreaNode) => subAreaNode.key === `${cameraSiteCode}${cameraAreaCode}`); if (!subAreaNode) continue; // 如果子区域节点不存在,则跳过该摄像机 // 构造摄像机节点 @@ -143,16 +143,16 @@ export const useCameraStore = defineStore('vimp-camera', () => { // 统计站点、区域、子区域的在线/离线/总摄像机数量 siteNode.stats.total++; - areaNode.stats.total++; + targetMainAreaNode.stats.total++; subAreaNode.stats.total++; if (camera.status === 1) { siteNode.stats.online++; - areaNode.stats.online++; + targetMainAreaNode.stats.online++; subAreaNode.stats.online++; } if (camera.status === 0) { siteNode.stats.offline++; - areaNode.stats.offline++; + targetMainAreaNode.stats.offline++; subAreaNode.stats.offline++; } } diff --git a/src/pages/vimp/stores/index.ts b/src/pages/vimp/stores/index.ts index feb9b73..6239e93 100644 --- a/src/pages/vimp/stores/index.ts +++ b/src/pages/vimp/stores/index.ts @@ -1,2 +1,2 @@ -export * from './camera'; -export * from './alarm'; +export * from './camera-store'; +export * from './alarm-store'; diff --git a/src/pages/vimp/types/tree.ts b/src/pages/vimp/types/tree.ts index 757792d..97129d3 100644 --- a/src/pages/vimp/types/tree.ts +++ b/src/pages/vimp/types/tree.ts @@ -27,14 +27,14 @@ export interface CameraSubAreaNodeOption extends TreeOption { site: VimpStation; } -export interface CameraAreaNodeOption extends TreeOption { +export interface CameraMainAreaNodeOption extends TreeOption { children?: CameraSubAreaNodeOption[]; stats: CountStats; site: VimpStation; } export interface CameraSiteNodeOption extends TreeOption { - children?: CameraAreaNodeOption[]; + children?: CameraMainAreaNodeOption[]; stats: CountStats; online: boolean; } @@ -43,7 +43,7 @@ export function isCameraSiteNode(option: TreeOption): option is CameraSiteNodeOp return 'online' in option && !('camera' in option); } -export function isCameraAreaNode(option: TreeOption): option is CameraAreaNodeOption | CameraSubAreaNodeOption { +export function isCameraAreaNode(option: TreeOption): option is CameraMainAreaNodeOption | CameraSubAreaNodeOption { return 'site' in option && !('camera' in option) && !('online' in option); } @@ -72,14 +72,14 @@ export interface AlarmSubAreaNodeOption extends TreeOption { site: VimpStation; } -export interface AlarmAreaNodeOption extends TreeOption { +export interface AlarmMainAreaNodeOption extends TreeOption { children?: AlarmSubAreaNodeOption[]; stats: CountStats; site: VimpStation; } export interface AlarmSiteNodeOption extends TreeOption { - children?: AlarmAreaNodeOption[]; + children?: AlarmMainAreaNodeOption[]; stats: CountStats; online: boolean; } @@ -88,7 +88,7 @@ export function isAlarmSiteNode(option: TreeOption): option is AlarmSiteNodeOpti return 'online' in option && !('alarm' in option); } -export function isAlarmAreaNode(option: TreeOption): option is AlarmAreaNodeOption | AlarmSubAreaNodeOption { +export function isAlarmAreaNode(option: TreeOption): option is AlarmMainAreaNodeOption | AlarmSubAreaNodeOption { return 'site' in option && !('alarm' in option) && !('online' in option); }