From 97bf9855c7fdc17197b563c1d23b67dbfe8d351a Mon Sep 17 00:00:00 2001 From: yangsy Date: Mon, 29 Sep 2025 11:08:50 +0800 Subject: [PATCH] feat: export record check --- .../nvr-record-diag-card.vue | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/components/device-page/device-card/current-diag-card/nvr-record-diag-card.vue b/src/components/device-page/device-card/current-diag-card/nvr-record-diag-card.vue index 8ae3d5d..998fdfc 100644 --- a/src/components/device-page/device-card/current-diag-card/nvr-record-diag-card.vue +++ b/src/components/device-page/device-card/current-diag-card/nvr-record-diag-card.vue @@ -9,6 +9,9 @@ import { destr } from 'destr'; import { groupBy } from 'es-toolkit'; import { NCard, NFlex, NText, NTag, NTimeline, NTimelineItem, NIcon, NEmpty, NStatistic, NGrid, NGridItem, NCollapse, NCollapseItem, NButton, NPopconfirm, NScrollbar } from 'naive-ui'; import { computed, onMounted, ref, toRefs } from 'vue'; +import { downloadByData } from '@/utils/download'; +import { DownloadOutlined } from '@vicons/antd'; +import { useStationStore } from '@/stores/station'; type NvrRecordDiag = { gbCode: string; @@ -18,7 +21,7 @@ type NvrRecordDiag = { }; // 过滤出丢失的录像时间段 -const filterLostRecordList = (rawRecordChecks: NdmRecordCheck[]): NvrRecordDiag[] => { +const transformRecordCheck = (rawRecordChecks: NdmRecordCheck[]): NvrRecordDiag[] => { // 1. 解析diagInfo const recordChecks = rawRecordChecks.map((recordCheck) => { return { @@ -84,14 +87,14 @@ const { stationCode, ndmNvr } = toRefs(props); const recordCheckList = ref([]); -const lostRecordList = computed(() => filterLostRecordList(recordCheckList.value)); +const transformedRecordCheck = computed(() => transformRecordCheck(recordCheckList.value)); const recordDiagStatistics = computed(() => { - const channelCount = lostRecordList.value.length; - const channelWithLossCount = lostRecordList.value.filter((diag) => diag.lostRecordList.length > 0).length; - const lossCount = lostRecordList.value.reduce((count, diag) => count + diag.lostRecordList.length, 0); + const channelCount = transformedRecordCheck.value.length; + const channelWithLossCount = transformedRecordCheck.value.filter((diag) => diag.lostRecordList.length > 0).length; + const lossCount = transformedRecordCheck.value.reduce((count, diag) => count + diag.lostRecordList.length, 0); - const totalLossDuration = lostRecordList.value.reduce((totalDuration, diag) => { + const totalLossDuration = transformedRecordCheck.value.reduce((totalDuration, diag) => { const channelLossDuration = diag.lostRecordList.reduce((duration, loss) => { return duration + dayjs(loss.endTime).diff(dayjs(loss.startTime)); }, 0); @@ -148,6 +151,27 @@ const { mutate: reloadAllRecordCheck, isPending: reloading } = useMutation({ onMounted(() => { getRecordCheckByParentId(); }); + +const onClickExportRecordCheck = () => { + const header = '通道名称,开始时间,结束时间,持续时长\n'; + const rows = transformedRecordCheck.value + .map((channel) => { + if (channel.lostRecordList.length === 0) { + return `${channel.channelName},,,`; + } + return channel.lostRecordList + .map((loss) => { + const duration = formatDuration(loss.startTime, loss.endTime); + return `${channel.channelName},${formatTime(loss.startTime)},${formatTime(loss.endTime)},${duration}`; + }) + .join('\n'); + }) + .join('\n'); + const csvContent = header + rows; + const stationStore = useStationStore(); + const stationName = stationStore.stationList.find((station) => station.code === stationCode.value)?.name; + downloadByData(csvContent, `${stationName}-录像缺失记录-${dayjs().format('YYYY-MM-DD-HHmmss')}.csv`, 'text/csv'); +}; + + + @@ -210,9 +241,9 @@ onMounted(() => { -
+
- +