diff --git a/src/apis/domains/station.ts b/src/apis/domains/station.ts index 76de2a8..08d21ed 100644 --- a/src/apis/domains/station.ts +++ b/src/apis/domains/station.ts @@ -1,6 +1,6 @@ export interface Station { - // id: string; code: string; name: string; + deviceIdPrefix: string; // 当查询设备告警记录时,需要通过deviceId的前4位来判断车站 online: boolean; } diff --git a/src/apis/models/device/alarm/ndm-device-alarm-log.ts b/src/apis/models/device/alarm/ndm-device-alarm-log.ts index 13b19c7..c9916fc 100644 --- a/src/apis/models/device/alarm/ndm-device-alarm-log.ts +++ b/src/apis/models/device/alarm/ndm-device-alarm-log.ts @@ -2,7 +2,6 @@ import type { BaseModel } from '../../base/model'; import type { ReduceForPageQuery, ReduceForSaveVO, ReduceForUpdateVO } from '../../base/reduce'; export interface NdmDeviceAlarmLogVO extends BaseModel { - [key: string]: any; // 告警数据表格中会加一些别的标记字段 alarmNo: string; alarmDate: string; faultLocation: string; diff --git a/src/apis/requests/log/ndm-device-alarm-log.ts b/src/apis/requests/log/ndm-device-alarm-log.ts index 273347e..17b0dea 100644 --- a/src/apis/requests/log/ndm-device-alarm-log.ts +++ b/src/apis/requests/log/ndm-device-alarm-log.ts @@ -22,3 +22,21 @@ export const postNdmDeviceAlarmLogPage = async (stationCode: string, pageQuery: } return alarmData; }; + +export const defaultExportByTemplate = async (stationCode: string, pageQuery: PageParams) => { + const endpoint = '/api/ndm/ndmDeviceAlarmLog/defaultExportByTemplate'; + if (!stationCode) { + const resp = await userClient.post(`${endpoint}`, pageQuery, { responseType: 'blob', retRaw: true }); + const [err, data] = resp; + if (err || !data) { + throw err; + } + return data; + } + const resp = await ndmClient.post(`${endpoint}`, pageQuery, { responseType: 'blob', retRaw: true }); + const [err, data] = resp; + if (err || !data) { + throw err; + } + return data; +}; diff --git a/src/components/device-alarm-detail-modal.vue b/src/components/device-alarm-detail-modal.vue index 89a23e0..0762130 100644 --- a/src/components/device-alarm-detail-modal.vue +++ b/src/components/device-alarm-detail-modal.vue @@ -2,11 +2,15 @@ @@ -162,12 +173,17 @@ const onModalClose = () => {}; +
+
今日设备告警列表
+ + 导出 + +
- +
-` diff --git a/src/composables/query/use-line-alarms-query.ts b/src/composables/query/use-line-alarms-query.ts index f4d75eb..b50841b 100644 --- a/src/composables/query/use-line-alarms-query.ts +++ b/src/composables/query/use-line-alarms-query.ts @@ -8,10 +8,10 @@ import dayjs from 'dayjs'; import { storeToRefs } from 'pinia'; import { computed } from 'vue'; -const AlarmCategory = { - Occurred: '1', - Recovered: '2', -} as const; +// const AlarmCategory = { +// Occurred: '1', +// Recovered: '2', +// } as const; export interface CategorizedAlarms { occurred: NdmDeviceAlarmLogResultVO[]; @@ -19,15 +19,15 @@ export interface CategorizedAlarms { } export interface StationAlarms { - [DeviceType.Camera]: CategorizedAlarms; - [DeviceType.Decoder]: CategorizedAlarms; - [DeviceType.Keyboard]: CategorizedAlarms; - [DeviceType.MediaServer]: CategorizedAlarms; - [DeviceType.Nvr]: CategorizedAlarms; - [DeviceType.SecurityBox]: CategorizedAlarms; - [DeviceType.Switch]: CategorizedAlarms; - [DeviceType.VideoServer]: CategorizedAlarms; - unclassified: CategorizedAlarms; + [DeviceType.Camera]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.Decoder]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.Keyboard]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.MediaServer]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.Nvr]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.SecurityBox]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.Switch]: NdmDeviceAlarmLogResultVO[]; + [DeviceType.VideoServer]: NdmDeviceAlarmLogResultVO[]; + unclassified: NdmDeviceAlarmLogResultVO[]; } export interface LineAlarms { @@ -51,15 +51,15 @@ export function useLineAlarmsQuery() { for (const station of stationList.value) { lineAlarms[station.code] = { - [DeviceType.Camera]: { occurred: [], recovered: [] }, - [DeviceType.Decoder]: { occurred: [], recovered: [] }, - [DeviceType.Keyboard]: { occurred: [], recovered: [] }, - [DeviceType.MediaServer]: { occurred: [], recovered: [] }, - [DeviceType.Nvr]: { occurred: [], recovered: [] }, - [DeviceType.SecurityBox]: { occurred: [], recovered: [] }, - [DeviceType.Switch]: { occurred: [], recovered: [] }, - [DeviceType.VideoServer]: { occurred: [], recovered: [] }, - unclassified: { occurred: [], recovered: [] }, + [DeviceType.Camera]: [], + [DeviceType.Decoder]: [], + [DeviceType.Keyboard]: [], + [DeviceType.MediaServer]: [], + [DeviceType.Nvr]: [], + [DeviceType.SecurityBox]: [], + [DeviceType.Switch]: [], + [DeviceType.VideoServer]: [], + unclassified: [], }; try { @@ -67,13 +67,15 @@ export function useLineAlarmsQuery() { const now = dayjs(); // const todayStart = now.startOf('date').format('YYYY-MM-DD HH:mm:ss'); // const todayEnd = now.endOf('date').format('YYYY-MM-DD HH:mm:ss'); - const todayStart = '2025-08-13 00:00:00'; - const todayEnd = '2025-08-31 23:59:59'; + // const todayStart = '2025-08-13 00:00:00'; + // const todayEnd = '2025-08-31 23:59:59'; + const todayStart = now.startOf('date').valueOf(); + const todayEnd = now.endOf('date').valueOf(); const { records: alarmList } = await postNdmDeviceAlarmLogPage(station.code, { model: {}, extra: { - createdTime_precisest: todayStart, - createdTime_preciseed: todayEnd, + alarmDate_ge: todayStart, + alarmDate_le: todayEnd, }, size: 50000, current: 1, @@ -89,42 +91,15 @@ export function useLineAlarmsQuery() { const switchAlarms = alarmList.filter((device) => device.deviceType === DeviceType.Switch); const videoServerAlarms = alarmList.filter((device) => device.deviceType === DeviceType.VideoServer); lineAlarms[station.code] = { - [DeviceType.Camera]: { - occurred: cameraAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: cameraAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.Decoder]: { - occurred: decoderAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: decoderAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.Keyboard]: { - occurred: keyboardAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: keyboardAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.MediaServer]: { - occurred: mediaServerAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: mediaServerAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.Nvr]: { - occurred: nvrAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: nvrAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.SecurityBox]: { - occurred: securityBoxAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: securityBoxAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.Switch]: { - occurred: switchAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: switchAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - [DeviceType.VideoServer]: { - occurred: videoServerAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: videoServerAlarms.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, - unclassified: { - occurred: alarmList.filter((alarm) => alarm.alarmCategory === AlarmCategory.Occurred), - recovered: alarmList.filter((alarm) => alarm.alarmCategory === AlarmCategory.Recovered), - }, + [DeviceType.Camera]: cameraAlarms, + [DeviceType.Decoder]: decoderAlarms, + [DeviceType.Keyboard]: keyboardAlarms, + [DeviceType.MediaServer]: mediaServerAlarms, + [DeviceType.Nvr]: nvrAlarms, + [DeviceType.SecurityBox]: securityBoxAlarms, + [DeviceType.Switch]: switchAlarms, + [DeviceType.VideoServer]: videoServerAlarms, + unclassified: alarmList, }; } catch (error) { console.error(`获取车站 ${station.name} 设备告警数据失败:`, error); diff --git a/src/pages/alarm-page.vue b/src/pages/alarm-page.vue index c6b9f2c..5094d23 100644 --- a/src/pages/alarm-page.vue +++ b/src/pages/alarm-page.vue @@ -1,12 +1,232 @@ - + diff --git a/src/pages/dashboard-page.vue b/src/pages/dashboard-page.vue index 89d0311..9d5b4a0 100644 --- a/src/pages/dashboard-page.vue +++ b/src/pages/dashboard-page.vue @@ -35,15 +35,15 @@ const { data: lineAlarms } = useLineAlarmsQuery(); " :station-alarms=" lineAlarms?.[station.code] ?? { - [DeviceType.Camera]: { occurred: [], recovered: [] }, - [DeviceType.Decoder]: { occurred: [], recovered: [] }, - [DeviceType.Keyboard]: { occurred: [], recovered: [] }, - [DeviceType.MediaServer]: { occurred: [], recovered: [] }, - [DeviceType.Nvr]: { occurred: [], recovered: [] }, - [DeviceType.SecurityBox]: { occurred: [], recovered: [] }, - [DeviceType.Switch]: { occurred: [], recovered: [] }, - [DeviceType.VideoServer]: { occurred: [], recovered: [] }, - unclassified: { occurred: [], recovered: [] }, + [DeviceType.Camera]: [], + [DeviceType.Decoder]: [], + [DeviceType.Keyboard]: [], + [DeviceType.MediaServer]: [], + [DeviceType.Nvr]: [], + [DeviceType.SecurityBox]: [], + [DeviceType.Switch]: [], + [DeviceType.VideoServer]: [], + unclassified: [], } " />