config.ts 2.68 KB
import { findDictItemByCode } from '/@/api/system/dict';
import { BasicColumn, FormSchema } from '/@/components/Table';
import { AlarmStatus } from '/@/enums/alarmEnum';
import { alarmLevel } from '/@/views/device/list/config/detail.config';
import { Tag } from 'ant-design-vue';
import { h } from 'vue';

// 表格配置
export const columns: BasicColumn[] = [
  {
    title: '告警状态',
    dataIndex: 'status',
    customRender({ record }: { record }) {
      const flag = !!record.cleared;
      return h(Tag, { color: flag ? 'green' : 'red' }, () => (flag ? '清除' : '激活'));
    },
    width: 90,
  },
  {
    title: '告警设备',
    dataIndex: 'deviceName',
    customRender: ({ record }) => {
      const { deviceAlias, deviceName } = record || {};
      return deviceAlias || deviceName;
    },
  },
  {
    title: '告警场景',
    dataIndex: 'type',
  },
  {
    title: '告警级别',
    dataIndex: 'severity',
    format: (text) => alarmLevel(text),
  },
  {
    title: '告警时间',
    dataIndex: 'createdTime',
  },
  {
    title: '告警详情',
    dataIndex: 'details',
    slots: { customRender: 'details' },
  },
];

// 表格查询表单
export const searchFormSchema: FormSchema[] = [
  {
    field: 'status',
    label: '告警/确认状态',
    component: 'Cascader',
    helpMessage: [
      '激活未确认: 可以处理,清除',
      '激活已确认: 只可清除,已经处理',
      '清除未确认: 只可处理,已经清除',
      '清除已确认: 不需要做处理和清除',
    ],
    colProps: { span: 6 },
    componentProps: {
      popupClassName: 'alarm-stauts-cascader',
      options: [
        {
          value: '0',
          label: '清除',
          children: [
            {
              value: AlarmStatus.CLEARED_UN_ACK,
              label: '清除未确认',
            },
            {
              value: AlarmStatus.CLEARED_ACK,
              label: '清除已确认',
            },
          ],
        },
        {
          value: '1',
          label: '激活',
          children: [
            {
              value: AlarmStatus.ACTIVE_UN_ACK,
              label: '激活未确认',
            },
            {
              value: AlarmStatus.ACTIVE_ACK,
              label: '激活已确认',
            },
          ],
        },
      ],
      placeholder: '请选择告警/确认状态',
    },
  },
  {
    field: 'severity',
    label: '告警级别',
    component: 'ApiSelect',
    colProps: { span: 6 },
    componentProps: {
      placeholder: '请选择告警级别',
      api: findDictItemByCode,
      params: {
        dictCode: 'severity_type',
      },
      labelField: 'itemText',
      valueField: 'itemValue',
    },
  },
];