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); // 计算每个通道丢失的录像时间片段