From 7bdda5d54641010a9c6b80beb8a878e3ea26d52e Mon Sep 17 00:00:00 2001 From: yangsy Date: Thu, 12 Feb 2026 01:55:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(record-check):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=88=86=E7=BB=84=E9=80=BB=E8=BE=91=E5=B9=B6=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E7=89=87=E6=AE=B5=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 es-toolkit 依赖,使用原生 Map 进行分组以保留顺序 - 将录像片段过滤选项从数字改为语义化字符串 - 修复录像时间轴缺失片段悬停交互,避免嵌套 Popover - 重置分页时同步设备 ID 和诊断时间变化 --- .../current-diag/nvr-record-card.vue | 144 +++++++++++------- src/helpers/record-check.ts | 40 ++--- 2 files changed, 109 insertions(+), 75 deletions(-) diff --git a/src/components/device/device-card/components/current-diag/nvr-record-card.vue b/src/components/device/device-card/components/current-diag/nvr-record-card.vue index bff6811..0105ca4 100644 --- a/src/components/device/device-card/components/current-diag/nvr-record-card.vue +++ b/src/components/device/device-card/components/current-diag/nvr-record-card.vue @@ -1,15 +1,15 @@ diff --git a/src/helpers/record-check.ts b/src/helpers/record-check.ts index e7f651a..aa4f7fb 100644 --- a/src/helpers/record-check.ts +++ b/src/helpers/record-check.ts @@ -1,8 +1,6 @@ import type { NdmRecordCheck, RecordInfo, RecordItem } from '@/apis'; import dayjs from 'dayjs'; import destr from 'destr'; -import { groupBy } from 'es-toolkit'; - export type NvrRecordDiag = { gbCode: string; channelName: string; @@ -17,24 +15,28 @@ export const transformRecordChecks = (rawRecordChecks: NdmRecordCheck[]): NvrRec ...recordCheck, diagInfo: destr(recordCheck.diagInfo), })); - // 按国标码分组 - const recordChecksByGbCode = groupBy(parsedRecordChecks, (recordCheck) => recordCheck.gbCode); - // 提取分组后的国标码和录像诊断记录 - const channelGbCodes = Object.keys(recordChecksByGbCode); - const recordChecksList = Object.values(recordChecksByGbCode); - // 初始化每个通道的录像诊断数据结构 - const recordDiags = channelGbCodes.map((gbCode, index) => ({ - gbCode, - channelName: recordChecksList.at(index)?.at(-1)?.name ?? '', - records: [] as RecordItem[], - lostChunks: [] as RecordItem[], - })); - // 写入同一gbCode的录像片段 - recordChecksList.forEach((recordChecks, index) => { - recordChecks.forEach((recordCheck) => { - recordDiags.at(index)?.records.push(...recordCheck.diagInfo.recordList); - }); + // 使用 Map 按国标码分组,保留插入顺序 + const recordChecksMap = new Map(); + parsedRecordChecks.forEach((recordCheck) => { + if (!recordChecksMap.has(recordCheck.gbCode)) { + recordChecksMap.set(recordCheck.gbCode, []); + } + recordChecksMap.get(recordCheck.gbCode)!.push(recordCheck); }); + + // 初始化每个通道的录像诊断数据结构 + const recordDiags = Array.from(recordChecksMap.entries()) + .map(([gbCode, recordChecks]) => { + return { + gbCode, + channelName: recordChecks.at(-1)?.name ?? '', + records: recordChecks.flatMap((check) => check.diagInfo.recordList), + lostChunks: [] as RecordItem[], + }; + }) + .sort((diag1, diag2) => { + return diag1.gbCode.localeCompare(diag2.gbCode); + }); // 过滤掉没有录像记录的通道 const filteredRecordDiags = recordDiags.filter((recordDiag) => recordDiag.records.length > 0); // 计算每个通道丢失的录像时间片段