From 79d650adb4a6263a693b449c08f673aa31ac1153 Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Mon, 18 Aug 2025 09:06:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=91=8A=E8=AD=A6=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attendanceManagement/arrangement/index.ts | 18 +- .../src/api/sis/alarmEventProcess/index.ts | 61 ++++ .../src/api/sis/alarmEventProcess/model.d.ts | 147 ++++++++++ .../web-antd/src/api/sis/alarmEvents/index.ts | 50 +++- .../src/views/sis/personLibImg/data.tsx | 41 ++- .../videoWarning/videoWarningHasDone/data.ts | 225 +++++++-------- .../videoWarningHasDone/index.vue | 168 +++-------- .../level-setting-modal.vue | 45 --- .../videoWarningHasDone/warning-detail.vue | 150 +++++----- .../videoWarningHasDone/warning-modal.vue | 83 ++++-- .../videoWarningProcessing/data.ts | 137 +++++---- .../videoWarningProcessing/index.vue | 35 +-- .../level-setting-modal.vue | 45 --- .../videoWarningProcessing/warning-detail.vue | 81 ++---- .../videoWarningProcessing/warning-modal.vue | 77 +++-- .../videoWarning/videoWarningToDone/data.ts | 263 ++++++++++-------- .../videoWarning/videoWarningToDone/index.vue | 162 +++-------- .../level-setting-modal.vue | 45 --- .../videoWarningToDone/warning-detail.vue | 150 +++++----- .../videoWarningToDone/warning-modal.vue | 47 ++-- apps/web-antd/vite.config.mts | 4 +- 21 files changed, 1009 insertions(+), 1025 deletions(-) create mode 100644 apps/web-antd/src/api/sis/alarmEventProcess/index.ts create mode 100644 apps/web-antd/src/api/sis/alarmEventProcess/model.d.ts delete mode 100644 apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/level-setting-modal.vue delete mode 100644 apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/level-setting-modal.vue delete mode 100644 apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/level-setting-modal.vue diff --git a/apps/web-antd/src/api/property/attendanceManagement/arrangement/index.ts b/apps/web-antd/src/api/property/attendanceManagement/arrangement/index.ts index 3da89d0b..7f02047a 100644 --- a/apps/web-antd/src/api/property/attendanceManagement/arrangement/index.ts +++ b/apps/web-antd/src/api/property/attendanceManagement/arrangement/index.ts @@ -1,12 +1,12 @@ import type { - ArrangementVO, ArrangementForm, ArrangementQuery, + ArrangementVO, arrangmentListQuery, + AttendanceUserGroup, } from './model'; -import type { ID, IDS } from '#/api/common'; -import type { PageResult } from '#/api/common'; +import type { ID, IDS, PageResult } from '#/api/common'; import { requestClient } from '#/api/request'; @@ -21,6 +21,7 @@ export function arrangementList(params?: ArrangementQuery) { { params }, ); } + /** * 根据月份查询排班列表 * @param params @@ -92,3 +93,14 @@ export function queryScheduleView(params?: arrangmentListQuery) { ); } +/** + * 查询某天排班人员详情列表 + * @param params + * @returns 排班列表 + */ + +export function queryCurrentSchedu() { + return requestClient.get( + '/property/AttendanceUserGroup/query/currentDay', + ); +} diff --git a/apps/web-antd/src/api/sis/alarmEventProcess/index.ts b/apps/web-antd/src/api/sis/alarmEventProcess/index.ts new file mode 100644 index 00000000..b2a6f6c7 --- /dev/null +++ b/apps/web-antd/src/api/sis/alarmEventProcess/index.ts @@ -0,0 +1,61 @@ +import type { AlarmEventProcessVO, AlarmEventProcessForm, AlarmEventProcessQuery } from './model'; + +import type { ID, IDS } from '#/api/common'; +import type { PageResult } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +/** +* 查询告警信息处理流程记录列表 +* @param params +* @returns 告警信息处理流程记录列表 +*/ +export function alarmEventProcessList(params?: AlarmEventProcessQuery) { + return requestClient.get>('/sis/alarmEventProcess/list', { params }); +} + +/** + * 导出告警信息处理流程记录列表 + * @param params + * @returns 告警信息处理流程记录列表 + */ +export function alarmEventProcessExport(params?: AlarmEventProcessQuery) { + return commonExport('/sis/alarmEventProcess/export', params ?? {}); +} + +/** + * 查询告警信息处理流程记录详情 + * @param id id + * @returns 告警信息处理流程记录详情 + */ +export function alarmEventProcessInfo(id: ID) { + return requestClient.get(`/sis/alarmEventProcess/${id}`); +} + +/** + * 新增告警信息处理流程记录 + * @param data + * @returns void + */ +export function alarmEventProcessAdd(data: AlarmEventProcessForm) { + return requestClient.postWithMsg('/sis/alarmEventProcess', data); +} + +/** + * 更新告警信息处理流程记录 + * @param data + * @returns void + */ +export function alarmEventProcessUpdate(data: AlarmEventProcessForm) { + return requestClient.putWithMsg('/sis/alarmEventProcess', data); +} + +/** + * 删除告警信息处理流程记录 + * @param id id + * @returns void + */ +export function alarmEventProcessRemove(id: ID | IDS) { + return requestClient.deleteWithMsg(`/sis/alarmEventProcess/${id}`); +} diff --git a/apps/web-antd/src/api/sis/alarmEventProcess/model.d.ts b/apps/web-antd/src/api/sis/alarmEventProcess/model.d.ts new file mode 100644 index 00000000..75cf874b --- /dev/null +++ b/apps/web-antd/src/api/sis/alarmEventProcess/model.d.ts @@ -0,0 +1,147 @@ +import type { PageQuery, BaseEntity } from '#/api/common'; + +export interface AlarmEventProcessVO { + /** + * 主键id + */ + id: string | number; + + /** + * 告警记录主键id + */ + alarmId: string | number; + + /** + * 指派人员id + */ + solveId: string | number; + + /** + * 指派人员名称 + */ + solveName: string; + + /** + * 工单问题回复内容 + */ + workReply: string; + + /** + * 处理时间 + */ + workReplyTime: string; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + receiveTaskTag: number; + + /** + * 10: 已上报待确认 +20:已确认待处理 +30: 处理中 +31:升级-转工单 +32:升级-协助 +40:已解决 +50:已关闭 + */ + state: number; + +} + +export interface AlarmEventProcessForm extends BaseEntity { + /** + * 主键id + */ + id?: string | number; + + /** + * 告警记录主键id + */ + alarmId?: string | number; + + /** + * 指派人员id + */ + solveId?: string | number; + + /** + * 指派人员名称 + */ + solveName?: string; + + /** + * 工单问题回复内容 + */ + workReply?: string; + + /** + * 处理时间 + */ + workReplyTime?: string; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + receiveTaskTag?: number; + + /** + * 10: 已上报待确认 +20:已确认待处理 +30: 处理中 +31:升级-转工单 +32:升级-协助 +40:已解决 +50:已关闭 + */ + state?: number; + +} + +export interface AlarmEventProcessQuery extends PageQuery { + /** + * 告警记录主键id + */ + alarmId?: string | number; + + /** + * 指派人员id + */ + solveId?: string | number; + + /** + * 指派人员名称 + */ + solveName?: string; + + /** + * 工单问题回复内容 + */ + workReply?: string; + + /** + * 处理时间 + */ + workReplyTime?: string; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + receiveTaskTag?: number; + + /** + * 10: 已上报待确认 +20:已确认待处理 +30: 处理中 +31:升级-转工单 +32:升级-协助 +40:已解决 +50:已关闭 + */ + state?: number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/apps/web-antd/src/api/sis/alarmEvents/index.ts b/apps/web-antd/src/api/sis/alarmEvents/index.ts index 58231b76..4a9182ac 100644 --- a/apps/web-antd/src/api/sis/alarmEvents/index.ts +++ b/apps/web-antd/src/api/sis/alarmEvents/index.ts @@ -1,18 +1,30 @@ -import type { AlarmEventsVO, AlarmEventsForm, AlarmEventsQuery } from './model'; +import type { AlarmEventsForm, AlarmEventsQuery, AlarmEventsVO } from './model'; -import type { ID, IDS } from '#/api/common'; -import type { PageResult } from '#/api/common'; +import type { ID, IDS, PageResult } from '#/api/common'; import { commonExport } from '#/api/helper'; import { requestClient } from '#/api/request'; /** -* 查询【请填写功能名称】列表 -* @param params -* @returns 【请填写功能名称】列表 -*/ + * 查询【请填写功能名称】列表 + * @param params + * @returns 【请填写功能名称】列表 + */ export function alarmEventsList(params?: AlarmEventsQuery) { - return requestClient.get>('/sis/alarmEvents/list', { params }); + return requestClient.get>('/sis/alarmEvents/list', { + params, + }); +} + +/** + * 查询【请填写功能名称】列表 + * @param params + * @returns 【请填写功能名称】列表 + */ +export function alarmEventsListCurr(params?: AlarmEventsQuery) { + return requestClient.get>('/sis/alarmEvents/list/curr', { + params, + }); } /** @@ -59,3 +71,25 @@ export function alarmEventsUpdate(data: AlarmEventsForm) { export function alarmEventsRemove(id: ID | IDS) { return requestClient.deleteWithMsg(`/sis/alarmEvents/${id}`); } + +/** + * 告警指派 + * @returns void + */ +export function taskAssignment(params: any) { + return requestClient.postWithMsg( + `/sis/alarmEvents/assignment`, + params ?? {}, + ); +} + +/** + * 告警处理完成 + * @returns void + */ +export function alarmEventComplete(params: any) { + return requestClient.postWithMsg( + `/sis/alarmEvents/complete`, + params ?? {}, + ); +} diff --git a/apps/web-antd/src/views/sis/personLibImg/data.tsx b/apps/web-antd/src/views/sis/personLibImg/data.tsx index 5922fa55..73815bf5 100644 --- a/apps/web-antd/src/views/sis/personLibImg/data.tsx +++ b/apps/web-antd/src/views/sis/personLibImg/data.tsx @@ -5,8 +5,7 @@ import { DictEnum } from '@vben/constants'; import { getPopupContainer } from '@vben/utils'; import { getDictOptions } from '#/utils/dict'; -import { renderDict } from '#/utils/render' -import { log } from 'console' +import { renderDict } from '#/utils/render'; export const querySchema: FormSchemaGetter = () => [ { @@ -48,11 +47,11 @@ export const columns: VxeGridProps['columns'] = [ { title: '性别', field: 'sex', - slots:{ - default: ({row}) =>{ - return renderDict(row.sex, 'sys_user_sex') - } - } + slots: { + default: ({ row }) => { + return renderDict(row.sex, 'sys_user_sex'); + }, + }, }, { title: '邮箱', @@ -65,11 +64,11 @@ export const columns: VxeGridProps['columns'] = [ { title: '证件类型', field: 'certificateType', - slots:{ - default: ({row}) =>{ - return renderDict(row.certificateType, 'sys_certificate_type') - } - } + slots: { + default: ({ row }) => { + return renderDict(row.certificateType, 'sys_certificate_type'); + }, + }, }, { title: '证件号码', @@ -80,15 +79,15 @@ export const columns: VxeGridProps['columns'] = [ field: 'birthDate', }, { - title: '人员标签', - field: 'rosterType', - slots: { - default: ({ row }) => { - return renderDict(row.rosterType, 'roster_type') - }, + title: '人员标签', + field: 'rosterType', + slots: { + default: ({ row }) => { + return renderDict(row.rosterType, 'roster_type'); }, - width: 100, }, + width: 100, + }, { field: 'action', fixed: 'right', @@ -99,8 +98,8 @@ export const columns: VxeGridProps['columns'] = [ ]; const test = getDictOptions('roster_type'); -test.forEach(item => { - console.log('item',item) +test.forEach((item) => { + console.log('item', item); }); export const modalSchema: FormSchemaGetter = () => [ diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts index a6cae811..3c6e5803 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts @@ -1,8 +1,12 @@ import type { FormSchemaGetter } from '#/adapter/form'; import type { VxeGridProps } from '#/adapter/vxe-table'; -import { getDictOptions } from '#/utils/dict'; -import { renderDict } from '#/utils/render'; import { h } from 'vue'; +import { getPopupContainer } from '@vben/utils'; +import { getDictOptions } from '#/utils/dict'; +import { DictEnum } from '@vben/constants'; + +export const fallImg = + 'data:image/png;base64,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'; export const querySchema: FormSchemaGetter = () => [ { @@ -13,56 +17,50 @@ export const querySchema: FormSchemaGetter = () => [ { component: 'Select', componentProps: { - options: [ - { label: '特大', value: '特大' }, - { label: '重要', value: '重要' }, - { label: '一般', value: '一般' }, - ], + getPopupContainer, + options: getDictOptions(DictEnum.alarm_level, true), }, fieldName: 'level', label: '级别', }, - { + /*{ component: 'Select', componentProps: { - options: [ - { label: '待分配', value: '待分配' }, - { label: '处理中', value: '处理中' }, - { label: '已完成', value: '已完成' }, - ], + getPopupContainer, + options: getDictOptions(DictEnum.alarm_state, true), }, - fieldName: 'processingStatus', + fieldName: 'state', label: '处理状态', - }, + },*/ ]; export const columns: VxeGridProps['columns'] = [ { type: 'checkbox', width: 60 }, { title: '预警编号', - field: 'alarmId', - width: 150, + field: 'id', }, { title: '预警时间', - field: 'alarmTime', - width: 150, + field: 'reportTime', + }, + { + title: '设备ip', + field: 'deviceIp', }, { title: '设备名称', field: 'deviceName', - width: 150, }, { title: '级别', field: 'level', - width: 100, slots: { default: ({ row }: any) => { const levelColors: Record = { - 特大: 'red', - 重要: 'orange', - 一般: 'blue', + 1: 'red', + 2: 'orange', + 3: 'blue', }; return h( 'span', @@ -72,64 +70,31 @@ export const columns: VxeGridProps['columns'] = [ fontWeight: 'bold', }, }, - row.level, + row.levelName, ); }, }, }, { title: '预警类型', - field: 'alarmType', - width: 120, - }, - { - title: '描述', - field: 'description', - minWidth: 200, - }, - { - title: '所在位置', - field: 'location', - width: 150, - }, - { - title: '处理状态', - field: 'processingStatus', - width: 100, + field: 'alarmTypeName', slots: { default: ({ row }: any) => { - const statusColors: Record = { - 待分配: 'red', - 处理中: 'orange', - 已完成: 'green', - }; - return h( - 'span', - { - style: { - color: statusColors[row.processingStatus] || '#666', - fontWeight: 'bold', - }, - }, - row.processingStatus, - ); + return h('span', row.bigTypeName + '-' + row.smallTypeName); }, }, }, { - title: '处理情况', - field: 'processingDetails', - width: 150, + title: '处理状态', + field: 'stateName', }, { - title: '预期处理时间', - field: 'expectedProcessingTime', - width: 150, + title: '创建时间', + field: 'createTime', }, { - title: '处理时间', - field: 'processingTime', - width: 150, + title: '创建人', + field: 'createBy', }, { field: 'action', @@ -152,22 +117,22 @@ export const modalSchema: FormSchemaGetter = () => [ }, { label: '预警编号', - fieldName: 'alarmId', + fieldName: 'id', component: 'Input', rules: 'required', disabled: true, }, { label: '预警时间', - fieldName: 'alarmTime', + fieldName: 'reportTime', component: 'DatePicker', componentProps: { format: 'YYYY.MM.DD HH:mm', valueFormat: 'YYYY.MM.DD HH:mm', showTime: true, }, - rules: 'required', disabled: true, + rules: 'required', }, { label: '预警类型', @@ -177,89 +142,107 @@ export const modalSchema: FormSchemaGetter = () => [ disabled: true, }, { - label: '描述', - fieldName: 'description', + label: '设备名称', + fieldName: 'deviceIp', component: 'Input', - formItemClass: 'col-span-2', disabled: true, - }, - { - label: '所在位置', - fieldName: 'location', - component: 'Input', rules: 'required', - disabled: true, }, { label: '设备名称', fieldName: 'deviceName', + disabled: true, component: 'Input', rules: 'required', - disabled: true, }, { - label: '处理情况', - fieldName: 'processingDetails', - component: 'Input', + label: '重要级别', + fieldName: 'level', + component: 'Select', + disabled: true, componentProps: { - rows: 3, + getPopupContainer, + options: getDictOptions(DictEnum.alarm_level, true), }, - formItemClass: 'col-span-2', - disabled: true, + rules: 'selectRequired', }, { - label: '处理时间', - fieldName: 'processingTime', + label: '创建时间', + fieldName: 'createTime', component: 'DatePicker', + disabled: true, componentProps: { format: 'YYYY.MM.DD HH:mm', valueFormat: 'YYYY.MM.DD HH:mm', showTime: true, }, - disabled: true, - }, - { - label: '处理图片', - fieldName: 'imgUrl', - component: 'Input', - rules: 'required', - disabled: true, - }, - { - label: '级别', - fieldName: 'level', - component: 'Select', - componentProps: { - options: [ - { label: '特大', value: '特大' }, - { label: '重要', value: '重要' }, - { label: '一般', value: '一般' }, - ], - }, - rules: 'selectRequired', }, { label: '处理状态', - fieldName: 'processingStatus', component: 'Select', + disabled: true, componentProps: { - options: [ - { label: '待分配', value: '待分配' }, - { label: '处理中', value: '处理中' }, - { label: '已完成', value: '已完成' }, - ], + getPopupContainer, + options: getDictOptions(DictEnum.alarm_state, true), }, + fieldName: 'state', rules: 'selectRequired', }, { - label: '预期处理时间', - fieldName: 'expectedProcessingTime', - component: 'DatePicker', + label: '描述', + disabled: true, + fieldName: 'description', + component: 'Textarea', + formItemClass: 'col-span-2', componentProps: { - format: 'YYYY.MM.DD HH:mm', - valueFormat: 'YYYY.MM.DD HH:mm', - showTime: true, + rows: 3, + }, + }, + // 插入分割线 + { + component: 'Divider', + fieldName: '_divider', + formItemClass: 'col-span-2', + hideLabel: true, + renderComponentContent: () => { + return { + default: () => h('div', '处理'), + }; + }, + }, + + { + label: '处理人', + fieldName: 'solveId', + component: 'Select', + }, + + { + label: '联系电话', + fieldName: 'phonenumber', + component: 'Input', + }, + + { + label: '邮箱', + fieldName: 'email', + component: 'Input', + }, + + { + label: '所在部门', + fieldName: 'deptName', + component: 'Input', + disabled: true, + }, + + { + label: '备注', + fieldName: 'remark', + component: 'Textarea', + formItemClass: 'col-span-2', + componentProps: { + rows: 3, }, - rules: 'required', }, ]; diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/index.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/index.vue index 99106647..11e249be 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/index.vue +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/index.vue @@ -2,79 +2,20 @@ import { Page, useVbenModal, type VbenFormProps } from '@vben/common-ui'; import { getVxePopupContainer } from '@vben/utils'; -import { Modal, Popconfirm, Space, Tag } from 'ant-design-vue'; -import { ref, watch } from 'vue'; - +import { Modal, Popconfirm, Space } from 'ant-design-vue'; import { useVbenVxeGrid, vxeCheckboxChecked, type VxeGridProps, } from '#/adapter/vxe-table'; -import { commonDownloadExcel } from '#/utils/file/download'; -import { renderDict } from '#/utils/render'; - import { columns, querySchema } from './data'; import warningModal from './warning-modal.vue'; import warningDetail from './warning-detail.vue'; -import LevelSettingModal from './level-setting-modal.vue'; -import imgPng from '../../../../assets/algorithmManagement/image.png'; - -// 假数据 -const mockData = ref([ - { - id: 1, - alarmId: 'JWD-3434234', - alarmTime: '2025.07.21 12:20', - level: '特大', - alarmType: '越界侦测', - description: '温度高于80度发生火宅', - location: '1栋3号电梯旁', - processingStatus: '已完成', - processingDetails: '', - processingTime: '', - }, - { - id: 2, - alarmId: 'JWD-3434235', - alarmTime: '2025.07.21 11:15', - level: '重要', - alarmType: '异常行为', - description: '人员异常聚集', - location: '2栋大厅', - processingStatus: '已完成', - processingDetails: '已派人员前往处理', - processingTime: '2025.07.21 11:30', - imgUrl: imgPng, - }, - { - id: 3, - alarmId: 'JWD-3434236', - alarmTime: '2025.07.21 10:45', - level: '一般', - alarmType: '设备故障', - description: '摄像头离线', - location: '3栋走廊', - processingStatus: '已完成', - processingDetails: '已修复设备', - processingTime: '2025.07.21 11:00', - imgUrl: imgPng, - }, - { - id: 4, - alarmId: 'JWD-3434236', - alarmTime: '2025.07.21 10:45', - level: '一般', - alarmType: '设备故障', - description: '摄像头离线', - location: '3栋走廊', - processingStatus: '已完成', - processingDetails: '已修复设备', - processingTime: '2025.07.21 11:00', - imgUrl: imgPng, - }, -]); +import { alarmEventsList, alarmEventsRemove } from '#/api/sis/alarmEvents'; +import type { AlarmEventsForm } from '#/api/sis/alarmEvents/model'; +/* 搜索栏配置 */ const formOptions: VbenFormProps = { commonConfig: { labelWidth: 100, @@ -86,14 +27,32 @@ const formOptions: VbenFormProps = { wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3', }; +/* table栏配置 */ const gridOptions: VxeGridProps = { + checkboxConfig: { + // 高亮 + highlight: true, + // 翻页时保留选中状态 + reserve: true, + // 点击行选中 + // trigger: 'row', + }, + // 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 + // columns: columns(), columns, height: 'auto', - data: mockData.value, - pagerConfig: { - currentPage: 1, - pageSize: 10, - total: mockData.value.length, + pagerConfig: {}, + proxyConfig: { + ajax: { + query: async ({ page }, formValues = {}) => { + return await alarmEventsList({ + pageNum: page.currentPage, + pageSize: page.pageSize, + states: [40,50], + ...formValues, + }); + }, + }, }, rowConfig: { keyField: 'id', @@ -107,14 +66,6 @@ const [BasicTable, tableApi] = useVbenVxeGrid({ }); // 监听数据变化,强制重新渲染表格 -const tableKey = ref(0); -watch( - mockData, - () => { - tableKey.value++; - }, - { deep: true }, -); const [WarningModal, modalApi] = useVbenModal({ connectedComponent: warningModal, @@ -124,51 +75,22 @@ const [WarningDetail, detailApi] = useVbenModal({ connectedComponent: warningDetail, }); -const [LevelSettingModalComp, levelModalApi] = useVbenModal({ - connectedComponent: LevelSettingModal, -}); - -// 级别设置 -function handleLevelSetting(row: any) { - levelModalApi.setData({ id: row.id, level: row.level, data: mockData.value }); - levelModalApi.open(); -} - // 查看详情 async function handleView(row: any) { - detailApi.setData({ id: row.id, data: mockData.value }); + detailApi.setData({ id: row.id, data: row }); detailApi.open(); } // 编辑 async function handleEdit(row: any) { - modalApi.setData({ id: row.id, data: mockData.value }); + modalApi.setData({ id: row.id, data: row }); modalApi.open(); } -// // 分配处理 -// function handleAssign(row: any) { -// Modal.confirm({ -// title: '分配处理', -// content: `确定要分配预警 ${row.alarmId} 给处理人员吗?`, -// onOk() { -// // 模拟分配处理 -// const index = mockData.value.findIndex((item: any) => item.id === row.id); -// if (index !== -1) { -// mockData.value[index].processingStatus = '处理中'; -// mockData.value[index].processingDetails = '已分配给处理人员'; -// mockData.value[index].processingTime = new Date().toLocaleString(); -// tableApi.query(); -// } -// }, -// }); -// } - // 删除 async function handleDelete(row: any) { - const index = mockData.value.findIndex((item: any) => item.id === row.id); + const index = row.id; if (index !== -1) { - mockData.value.splice(index, 1); await tableApi.query(); } } @@ -176,18 +98,13 @@ async function handleDelete(row: any) { // 批量删除 function handleMultiDelete() { const rows = tableApi.grid.getCheckboxRecords(); - const ids = rows.map((row: any) => row.id); + const ids = rows.map((row: Required) => row.id); Modal.confirm({ title: '提示', okType: 'danger', content: `确认删除选中的${ids.length}条记录吗?`, onOk: async () => { - ids.forEach((id) => { - const index = mockData.value.findIndex((item: any) => item.id === id); - if (index !== -1) { - mockData.value.splice(index, 1); - } - }); + await alarmEventsRemove(ids); await tableApi.query(); }, }); @@ -195,11 +112,7 @@ function handleMultiDelete() {