Commit 329fdb8def72bff3bf1836c054f01c2557a1707a

Authored by ww
1 parent 8c75c8bd

perf: 告警记录新增批量处理功能

@@ -28,6 +28,8 @@ enum DeviceManagerApi { @@ -28,6 +28,8 @@ enum DeviceManagerApi {
28 28
29 DEVICE_ALARM_URL = '/alarm', 29 DEVICE_ALARM_URL = '/alarm',
30 30
  31 + ALARM_BATCH_ACK = '/alarm/batch/ack',
  32 +
31 DEVICE_CREDENTIALS = '/device/credentials', 33 DEVICE_CREDENTIALS = '/device/credentials',
32 34
33 COMMAND_ISSUANCE = '/rpc', 35 COMMAND_ISSUANCE = '/rpc',
@@ -346,3 +348,13 @@ export const getDevicesByDeviceIds = (ids: string[]) => { @@ -346,3 +348,13 @@ export const getDevicesByDeviceIds = (ids: string[]) => {
346 data: ids, 348 data: ids,
347 }); 349 });
348 }; 350 };
  351 +
  352 +export const doBatchAckAlarm = (ids: string[]) => {
  353 + return defHttp.post(
  354 + {
  355 + url: DeviceManagerApi.ALARM_BATCH_ACK,
  356 + data: { alarmIds: ids },
  357 + },
  358 + { joinPrefix: false }
  359 + );
  360 +};
@@ -18,6 +18,9 @@ @@ -18,6 +18,9 @@
18 查看告警详情 18 查看告警详情
19 </a-button> 19 </a-button>
20 </template> 20 </template>
  21 + <template #toolbar>
  22 + <Button @click="handleBatchAck" type="primary">批量处理</Button>
  23 + </template>
21 </BasicTable> 24 </BasicTable>
22 <AlarmDetailDrawer @register="registerDetailDrawer" @success="handleSuccess" /> 25 <AlarmDetailDrawer @register="registerDetailDrawer" @success="handleSuccess" />
23 </div> 26 </div>
@@ -26,10 +29,10 @@ @@ -26,10 +29,10 @@
26 import { defineComponent, nextTick, h } from 'vue'; 29 import { defineComponent, nextTick, h } from 'vue';
27 import { BasicTable, useTable, TableAction } from '/@/components/Table'; 30 import { BasicTable, useTable, TableAction } from '/@/components/Table';
28 import { alarmColumns, alarmSearchSchemas } from './config/detail.config'; 31 import { alarmColumns, alarmSearchSchemas } from './config/detail.config';
29 - import { getDeviceAlarm } from '/@/api/device/deviceManager'; 32 + import { doBatchAckAlarm, getDeviceAlarm } from '/@/api/device/deviceManager';
30 import { useDrawer } from '/@/components/Drawer'; 33 import { useDrawer } from '/@/components/Drawer';
31 import AlarmDetailDrawer from './cpns/AlarmDetailDrawer.vue'; 34 import AlarmDetailDrawer from './cpns/AlarmDetailDrawer.vue';
32 - import { Modal } from 'ant-design-vue'; 35 + import { Modal, Button } from 'ant-design-vue';
33 import { JsonPreview } from '/@/components/CodeEditor'; 36 import { JsonPreview } from '/@/components/CodeEditor';
34 import { getDeviceDetail } from '/@/api/device/deviceManager'; 37 import { getDeviceDetail } from '/@/api/device/deviceManager';
35 import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; 38 import { getAttribute } from '/@/api/ruleengine/ruleengineApi';
@@ -38,17 +41,21 @@ @@ -38,17 +41,21 @@
38 operationString, 41 operationString,
39 operationBoolean, 42 operationBoolean,
40 } from '/@/views/rule/linkedge/config/formatData'; 43 } from '/@/views/rule/linkedge/config/formatData';
  44 + import { AlarmLogItem } from '/@/api/device/model/deviceConfigModel';
  45 + import { AlarmStatus } from '/@/enums/alarmEnum';
  46 + import { useMessage } from '/@/hooks/web/useMessage';
41 47
42 export default defineComponent({ 48 export default defineComponent({
43 name: 'AlarmCenter', 49 name: 'AlarmCenter',
44 components: { 50 components: {
  51 + Button,
45 BasicTable, 52 BasicTable,
46 TableAction, 53 TableAction,
47 AlarmDetailDrawer, 54 AlarmDetailDrawer,
48 }, 55 },
49 56
50 setup() { 57 setup() {
51 - const [registerTable, { reload }] = useTable({ 58 + const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
52 title: '告警记录列表', 59 title: '告警记录列表',
53 api: getDeviceAlarm, 60 api: getDeviceAlarm,
54 columns: alarmColumns, 61 columns: alarmColumns,
@@ -61,6 +68,14 @@ @@ -61,6 +68,14 @@
61 bordered: true, 68 bordered: true,
62 showIndexColumn: false, 69 showIndexColumn: false,
63 showTableSetting: true, 70 showTableSetting: true,
  71 + rowSelection: {
  72 + type: 'checkbox',
  73 + getCheckboxProps: (record: AlarmLogItem) => {
  74 + return {
  75 + disabled: record.status === AlarmStatus.CLEARED_ACK,
  76 + };
  77 + },
  78 + },
64 actionColumn: { 79 actionColumn: {
65 width: 200, 80 width: 200,
66 title: '操作', 81 title: '操作',
@@ -148,12 +163,24 @@ @@ -148,12 +163,24 @@
148 attribute, 163 attribute,
149 }; 164 };
150 }; 165 };
  166 +
  167 + const { createMessage } = useMessage();
  168 + const handleBatchAck = async () => {
  169 + const ids = getSelectRows<AlarmLogItem>().map((item) => item.id);
  170 +
  171 + await doBatchAckAlarm(ids);
  172 + createMessage.success('操作成功');
  173 + clearSelectedRowKeys();
  174 + reload();
  175 + };
  176 +
151 return { 177 return {
152 registerTable, 178 registerTable,
153 registerDetailDrawer, 179 registerDetailDrawer,
154 handleDetail, 180 handleDetail,
155 handleSuccess, 181 handleSuccess,
156 handleViewAlarmDetails, 182 handleViewAlarmDetails,
  183 + handleBatchAck,
157 }; 184 };
158 }, 185 },
159 }); 186 });