From a2284d899180ce0de6fba6661629acc4f314789d Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Wed, 11 Feb 2026 17:56:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(aiot):=20=E5=91=8A=E8=AD=A6=E5=88=97?= =?UTF-8?q?=E8=A1=A8-=E6=8C=81=E7=BB=AD=E6=97=B6=E9=95=BF=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=20+=20=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API类型定义: - Alert接口新增durationMs、lastFrameTime字段 列表展示优化: - 持续时长列改为读取durationMs,自适应格式化(秒/分/时) - "创建时间"列替换为"结束时间"列,显示lastFrameTime或handledAt - 详情弹窗持续时长同步使用formatDuration格式化 --- apps/web-antd/src/api/aiot/alarm/index.ts | 2 ++ .../src/views/aiot/alarm/list/data.ts | 8 ++--- .../src/views/aiot/alarm/list/index.vue | 35 +++++++++++++++---- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/apps/web-antd/src/api/aiot/alarm/index.ts b/apps/web-antd/src/api/aiot/alarm/index.ts index f1b352e01..e8fac4533 100644 --- a/apps/web-antd/src/api/aiot/alarm/index.ts +++ b/apps/web-antd/src/api/aiot/alarm/index.ts @@ -18,6 +18,7 @@ export namespace AiotAlarmApi { algorithm?: string; confidence?: number; durationMinutes?: number; + durationMs?: number; triggerTime?: string; message?: string; bbox?: string; @@ -29,6 +30,7 @@ export namespace AiotAlarmApi { handleRemark?: string; handledBy?: string; handledAt?: string; + lastFrameTime?: string; workOrderId?: number; aiAnalysis?: Record; createdAt?: string; diff --git a/apps/web-antd/src/views/aiot/alarm/list/data.ts b/apps/web-antd/src/views/aiot/alarm/list/data.ts index 857edea97..d47f479df 100644 --- a/apps/web-antd/src/views/aiot/alarm/list/data.ts +++ b/apps/web-antd/src/views/aiot/alarm/list/data.ts @@ -96,7 +96,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { slots: { default: 'confidence' }, }, { - field: 'durationMinutes', + field: 'durationMs', title: '持续时长', width: 125, slots: { default: 'duration' }, @@ -127,10 +127,10 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { slots: { default: 'snapshot' }, }, { - field: 'createdAt', - title: '创建时间', + field: 'lastFrameTime', + title: '结束时间', minWidth: 170, - formatter: 'formatDateTime', + slots: { default: 'endTime' }, }, { title: '操作', diff --git a/apps/web-antd/src/views/aiot/alarm/list/index.vue b/apps/web-antd/src/views/aiot/alarm/list/index.vue index c4bf64c73..7347eae3b 100644 --- a/apps/web-antd/src/views/aiot/alarm/list/index.vue +++ b/apps/web-antd/src/views/aiot/alarm/list/index.vue @@ -21,6 +21,22 @@ import { defineOptions({ name: 'AiotAlarmList' }); +/** 格式化持续时长(毫秒 → 可读文本) */ +function formatDuration(ms: number): string { + if (!ms || ms <= 0) return '--'; + if (ms < 60000) { + return `${Math.round(ms / 1000)} 秒`; + } + if (ms < 3600000) { + const minutes = Math.floor(ms / 60000); + const seconds = Math.round((ms % 60000) / 1000); + return seconds > 0 ? `${minutes} 分 ${seconds} 秒` : `${minutes} 分`; + } + const hours = Math.floor(ms / 3600000); + const minutes = Math.round((ms % 3600000) / 60000); + return minutes > 0 ? `${hours} 小时 ${minutes} 分` : `${hours} 小时`; +} + const currentAlert = ref(null); const detailVisible = ref(false); @@ -202,10 +218,17 @@ const [Grid, gridApi] = useVbenVxeGrid({ + + + @@ -311,8 +334,8 @@ const [Grid, gridApi] = useVbenVxeGrid({
持续时长: {{ - currentAlert.durationMinutes != null - ? `${currentAlert.durationMinutes} 分钟` + currentAlert.durationMs != null && currentAlert.durationMs > 0 + ? formatDuration(currentAlert.durationMs) : '-' }}