refactor(record-check): 优化分组逻辑并改进缺失片段交互
- 移除 es-toolkit 依赖,使用原生 Map 进行分组以保留顺序 - 将录像片段过滤选项从数字改为语义化字符串 - 修复录像时间轴缺失片段悬停交互,避免嵌套 Popover - 重置分页时同步设备 ID 和诊断时间变化
This commit is contained in:
+21
-19
@@ -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<RecordInfo>(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<string, typeof parsedRecordChecks>();
|
||||
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);
|
||||
// 计算每个通道丢失的录像时间片段
|
||||
|
||||
Reference in New Issue
Block a user