config.data.ts 4.2 KB
import { BasicColumn, FormSchema } from '/@/components/Table';
import { getOrganizationList } from '/@/api/system/system';
import { copyTransFun } from '/@/utils/fnUtils';
import { findDictItemByCode } from '/@/api/system/dict';
import { alarmContactGetPage } from '/@/api/device/deviceConfigApi';
import { Switch } from 'ant-design-vue';
import { h } from 'vue';
import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig';
import { useMessage } from '/@/hooks/web/useMessage';

// 表格列数据
export const columns: BasicColumn[] = [
  {
    title: '告警配置名称',
    dataIndex: 'name',
    width: 120,
  },
  {
    title: '所属组织',
    dataIndex: 'organizationName',
    width: 160,
  },
  {
    title: '告警通知联系人',
    dataIndex: 'alarmContactId',
    width: 160,
    slots: { customRender: 'alarmContact' },
  },
  {
    title: '告警联系方式',
    dataIndex: 'messageMode',
    width: 160,
    slots: { customRender: 'messageMode' },
  },
  {
    title: '状态',
    dataIndex: 'status',
    width: 120,
    customRender: ({ record }) => {
      if (!Reflect.has(record, 'pendingStatus')) {
        record.pendingStatus = false;
      }
      return h(Switch, {
        checked: record.status === 1,
        checkedChildren: '配置',
        unCheckedChildren: '未配置',
        loading: record.pendingStatus,
        onChange(checked: boolean) {
          record.pendingStatus = true;
          const newStatus = checked ? 1 : 0;
          const { createMessage } = useMessage();
          putAlarmConfigStatus(newStatus, record.id)
            .then(() => {
              record.status = newStatus;
              if (record.status == 1) {
                createMessage.success(`已配置`);
              } else {
                createMessage.error('未配置');
              }
            })
            .finally(() => {
              record.pendingStatus = false;
            });
        },
      });
    },
  },
  {
    title: '备注',
    dataIndex: 'remark',
    width: 120,
  },
  {
    title: '创建时间',
    dataIndex: 'createTime',
    width: 180,
  },
  {
    title: '更新时间',
    dataIndex: 'updateTime',
    width: 180,
  },
];

// 查询字段
export const searchFormSchema: FormSchema[] = [
  {
    field: 'name',
    label: '告警配置名称',
    component: 'Input',
    colProps: { span: 8 },
    componentProps: {
      maxLength: 36,
      placeholder: '请输入告警配置名称',
    },
  },
  {
    field: 'status',
    label: '告警配置状态',
    component: 'Select',
    colProps: { span: 8 },
    componentProps: {
      options: [
        {
          label: '已配置',
          value: 1,
        },
        {
          label: '未配置',
          value: 0,
        },
      ],
      placeholder: '请选择告警配置状态',
    },
  },
];

// 弹框配置项
export const formSchema: FormSchema[] = [
  {
    field: 'name',
    label: '告警配置名称',
    required: true,
    component: 'Input',
    componentProps: {
      placeholder: '请输入告警配置名称',
      maxLength: 30,
    },
  },
  {
    field: 'organizationId',
    label: '所属组织',
    component: 'ApiTreeSelect',
    required: true,
    componentProps: {
      api: async () => {
        const data = await getOrganizationList();
        copyTransFun(data as any as any[]);
        return data;
      },
    },
  },
  {
    field: 'alarmContactId',
    label: '告警通知联系人',
    component: 'ApiSelect',
    required: true,
    componentProps: {
      mode: 'multiple',
      placeholder: '请选择告警通知联系人',
      api: alarmContactGetPage,
      labelField: 'username',
      valueField: 'id',
      resultField: 'items',
    },
  },
  {
    field: 'messageMode',
    label: '告警通知方式',
    component: 'ApiSelect',
    required: true,
    componentProps: {
      mode: 'multiple',
      placeholder: '请选择告警通知方式',
      api: findDictItemByCode,
      params: {
        dictCode: 'message_type',
      },
      labelField: 'itemText',
      valueField: 'itemValue',
    },
  },
  {
    field: 'remark',
    label: '备注',
    component: 'InputTextArea',
    componentProps: {
      placeholder: '请输入备注',
      maxLength: 255,
    },
  },
];