From 02e29eb4f357dae928d9af2cd0d81a4080ce19f3 Mon Sep 17 00:00:00 2001 From: yangsy Date: Tue, 30 Dec 2025 10:43:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=91=84=E5=83=8F=E6=9C=BA=E5=91=8A=E8=AD=A6=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/model/biz/entity/log/index.ts | 1 + .../entity/log/ndm-device-alarm-snap-log.ts | 16 +++++ src/apis/request/biz/log/index.ts | 1 + .../biz/log/ndm-device-alarm-snap-log.ts | 62 +++++++++++++++++++ .../alarm/use-camera-snap-column.ts | 22 +++---- src/pages/alarm-page.vue | 3 +- 6 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 src/apis/model/biz/entity/log/ndm-device-alarm-snap-log.ts create mode 100644 src/apis/request/biz/log/ndm-device-alarm-snap-log.ts diff --git a/src/apis/model/biz/entity/log/index.ts b/src/apis/model/biz/entity/log/index.ts index 9868bd2..f30ba53 100644 --- a/src/apis/model/biz/entity/log/index.ts +++ b/src/apis/model/biz/entity/log/index.ts @@ -1,5 +1,6 @@ export * from './ndm-call-log'; export * from './ndm-device-alarm-log'; +export * from './ndm-device-alarm-snap-log'; export * from './ndm-icmp-log'; export * from './ndm-record-check'; export * from './ndm-snmp-log'; diff --git a/src/apis/model/biz/entity/log/ndm-device-alarm-snap-log.ts b/src/apis/model/biz/entity/log/ndm-device-alarm-snap-log.ts new file mode 100644 index 0000000..12f0682 --- /dev/null +++ b/src/apis/model/biz/entity/log/ndm-device-alarm-snap-log.ts @@ -0,0 +1,16 @@ +import type { BaseModel, ReduceForPageQuery, ReduceForSaveVO, ReduceForUpdateVO } from '@/apis'; +import type { Nullable } from '@/types'; + +export interface NdmDeviceAlarmSnapLog extends BaseModel { + absoluteFilePath: string; + path: string; + url: string; +} + +export type NdmDeviceAlarmSnapLogResultVO = Nullable; + +export type NdmDeviceAlarmSnapLogSaveVO = Partial>; + +export type NdmDeviceAlarmSnapLogUpdateVO = Partial>; + +export type NdmDeviceAlarmSnapLogPageQuery = Partial>; diff --git a/src/apis/request/biz/log/index.ts b/src/apis/request/biz/log/index.ts index 441b30d..492b452 100644 --- a/src/apis/request/biz/log/index.ts +++ b/src/apis/request/biz/log/index.ts @@ -1,5 +1,6 @@ export * from './ndm-call-log'; export * from './ndm-device-alarm-log'; +export * from './ndm-device-alarm-snap-log'; export * from './ndm-icmp-log'; export * from './ndm-snmp-log'; export * from './ndm-record-check'; diff --git a/src/apis/request/biz/log/ndm-device-alarm-snap-log.ts b/src/apis/request/biz/log/ndm-device-alarm-snap-log.ts new file mode 100644 index 0000000..a6a7248 --- /dev/null +++ b/src/apis/request/biz/log/ndm-device-alarm-snap-log.ts @@ -0,0 +1,62 @@ +import { + ndmClient, + userClient, + type NdmDeviceAlarmSnapLogPageQuery, + type NdmDeviceAlarmSnapLogResultVO, + type NdmDeviceAlarmSnapLogSaveVO, + type NdmDeviceAlarmSnapLogUpdateVO, + type PageParams, + type PageResult, + type Station, +} from '@/apis'; +import { unwrapResponse } from '@/utils'; + +export const pageDeviceAlarmSnapLogApi = async (pageQuery: PageParams, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => { + const { stationCode, signal } = options ?? {}; + const client = stationCode ? ndmClient : userClient; + const prefix = stationCode ? `/${stationCode}` : ''; + const endpoint = `${prefix}/api/ndm/ndmDeviceAlarmSnapLog/page`; + const resp = await client.post>(endpoint, pageQuery, { signal }); + const data = unwrapResponse(resp); + return data; +}; + +export const detailDeviceAlarmSnapLogApi = async (id: string, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => { + const { stationCode, signal } = options ?? {}; + const client = stationCode ? ndmClient : userClient; + const prefix = stationCode ? `/${stationCode}` : ''; + const endpoint = `${prefix}/api/ndm/ndmDeviceAlarmSnapLog/detail`; + const resp = await client.get(endpoint, { params: { id }, signal }); + const data = unwrapResponse(resp); + return data; +}; + +export const saveDeviceAlarmSnapLogApi = async (saveVO: NdmDeviceAlarmSnapLogSaveVO, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => { + const { stationCode, signal } = options ?? {}; + const client = stationCode ? ndmClient : userClient; + const prefix = stationCode ? `/${stationCode}` : ''; + const endpoint = `${prefix}/api/ndm/ndmDeviceAlarmSnapLog`; + const resp = await client.post(endpoint, saveVO, { signal }); + const data = unwrapResponse(resp); + return data; +}; + +export const updateDeviceAlarmSnapLogApi = async (updateVO: NdmDeviceAlarmSnapLogUpdateVO, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => { + const { stationCode, signal } = options ?? {}; + const client = stationCode ? ndmClient : userClient; + const prefix = stationCode ? `/${stationCode}` : ''; + const endpoint = `${prefix}/api/ndm/ndmDeviceAlarmSnapLog`; + const resp = await client.put(endpoint, updateVO, { signal }); + const data = unwrapResponse(resp); + return data; +}; + +export const deleteDeviceAlarmSnapLogApi = async (ids: string[], options?: { stationCode?: Station['code']; signal?: AbortSignal }) => { + const { stationCode, signal } = options ?? {}; + const client = stationCode ? ndmClient : userClient; + const prefix = stationCode ? `/${stationCode}` : ''; + const endpoint = `${prefix}/api/ndm/ndmDeviceAlarmSnapLog`; + const resp = await client.delete(endpoint, ids, { signal }); + const data = unwrapResponse(resp); + return data; +}; diff --git a/src/composables/alarm/use-camera-snap-column.ts b/src/composables/alarm/use-camera-snap-column.ts index aae0e27..6c1864a 100644 --- a/src/composables/alarm/use-camera-snap-column.ts +++ b/src/composables/alarm/use-camera-snap-column.ts @@ -1,4 +1,4 @@ -import { getCameraSnapApi, type NdmDeviceAlarmLogResultVO } from '@/apis'; +import { detailDeviceAlarmSnapLogApi, type NdmDeviceAlarmLogResultVO } from '@/apis'; import { tryGetDeviceType, DEVICE_TYPE_LITERALS } from '@/enums'; import { parseErrorFeedback } from '@/utils'; import { useMutation } from '@tanstack/vue-query'; @@ -7,11 +7,9 @@ import { h, ref, watch, type Ref } from 'vue'; export const useCameraSnapColumn = (tableData: Ref) => { const { mutateAsync: getSnapByDeviceId } = useMutation({ - mutationFn: async (params: { deviceAlarmLog: NdmDeviceAlarmLogResultVO }) => { - const { deviceAlarmLog } = params; - const { deviceId } = deviceAlarmLog; - if (!deviceId) throw new Error('设备ID不能为空'); - const snap = await getCameraSnapApi(deviceId); + mutationFn: async (params: { id: string }) => { + const { id } = params; + const snap = await detailDeviceAlarmSnapLogApi(id); return snap; }, onError: (error) => { @@ -28,15 +26,15 @@ export const useCameraSnapColumn = (tableData: Ref) => { }); const cameraSnapColumn: DataTableColumn = { - title: '实时画面截图', + title: '告警画面截图', key: 'snapUrl', align: 'center', render: (rowData) => { - const { deviceType: deviceTypeCode, snapUrl } = rowData; + const { id, deviceType: deviceTypeCode, snapUrl } = rowData; + if (!id) return null; const deviceType = tryGetDeviceType(deviceTypeCode); if (deviceType !== DEVICE_TYPE_LITERALS.ndmCamera) return null; if (!snapUrl) { - const id = rowData.id ?? ''; return h( NButton, { @@ -46,8 +44,9 @@ export const useCameraSnapColumn = (tableData: Ref) => { onClick: async () => { loadingMap.value[id] = true; try { - const snap = await getSnapByDeviceId({ deviceAlarmLog: rowData }); - rowData.snapUrl = snap.data.url; + const snap = await getSnapByDeviceId({ id }); + if (!snap.url) return; + rowData.snapUrl = snap.url; } finally { loadingMap.value[id] = false; } @@ -60,6 +59,7 @@ export const useCameraSnapColumn = (tableData: Ref) => { } }, }; + return { cameraSnapColumn, }; diff --git a/src/pages/alarm-page.vue b/src/pages/alarm-page.vue index c71a9e1..f110a2a 100644 --- a/src/pages/alarm-page.vue +++ b/src/pages/alarm-page.vue @@ -139,7 +139,7 @@ const tableData = ref([]); const { cameraSnapColumn } = useCameraSnapColumn(tableData); const { alarmActionColumn } = useAlarmActionColumn(tableData); -const tableColumns: DataTableColumns = [ +const tableColumns: DataTableColumns = [ // { title: '设备ID', key: 'deviceId' }, // { title: '故障编码', key: 'faultCode', align: 'center' }, // { title: '故障位置', key: 'faultLocation' }, @@ -234,6 +234,7 @@ const { mutate: getTableData, isPending: tableLoading } = useMutation({ signal, }, ); + return res; }, onSuccess: (res) => {