-
-
-
-
-
-
- 开始时间:{{ dayjs(startTime).format('YYYY-MM-DD HH:mm:ss') }}
- 结束时间:{{ dayjs(endTime).format('YYYY-MM-DD HH:mm:ss') }}
-
-
+
+
+ onMouseEnterLostChunk(event, lostChunk)"
+ @mouseleave="onMouseLeaveLostChunk"
+ />
+
+
+
+
@@ -230,6 +256,12 @@ onBeforeUnmount(() => {
+
+
+ 录像缺失
+ 开始时间:{{ dayjs(lostChunkPopoverContext.lostDuration.startTime).format('YYYY-MM-DD HH:mm:ss') }}
+ 结束时间:{{ dayjs(lostChunkPopoverContext.lostDuration.endTime).format('YYYY-MM-DD HH:mm:ss') }}
+
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);
// 计算每个通道丢失的录像时间片段