config.ts 2.93 KB
import { BasicColumn, FormSchema } from '/@/components/Table';
import { Tag, Tooltip } from 'ant-design-vue';
import { h } from 'vue';
import { transformTime } from '/@/hooks/web/useDateToLocaleString';
import { DeviceState } from '/@/api/device/model/deviceModel';
import { handeleCopy } from '/@/views/device/profiles/step/topic';
import { useI18n } from '/@/hooks/web/useI18n';

const { t } = useI18n();

// 表格配置
export const columns: BasicColumn[] = [
  {
    title: t('edge.instance.text.deviceStatus'),
    dataIndex: 'deviceState',
    width: 100,
    customRender: ({ record }) => {
      const color =
        record.deviceState == DeviceState.INACTIVE
          ? 'warning'
          : record.deviceState == DeviceState.ONLINE
          ? 'success'
          : 'error';
      const text = t(`enum.deviceStatus.${record.deviceState}`);
      return h(Tag, { color: color }, () => text);
    },
  },
  {
    dataIndex: 'name',
    title: t('edge.instance.text.deviceName'),
    width: 210,
    slots: { customRender: 'name', title: 'deviceTitle' },
    customRender: ({ record }) => {
      return h('div', { style: 'display:flex;flex-direction:column' }, [
        record.alias &&
          h(
            'div',
            {
              class: 'cursor-pointer truncate',
            },
            h(
              Tooltip,
              {
                placement: 'topLeft',
                title: `${record.alias}`,
              },
              () => `${record.alias}`
            )
          ),
        h(
          'div',
          {
            class: 'cursor-pointer text-blue-500 truncate',
            onClick: () => {
              handeleCopy(`${record.name}`);
            },
          },
          h(
            Tooltip,
            {
              placement: 'topLeft',
              title: `${record.name}`,
            },
            () => `${record.name}`
          )
        ),
      ]);
    },
  },
  {
    title: t('edge.instance.text.relatedProduct'),
    width: 160,
    dataIndex: 'deviceProfileName',
  },
  {
    title: t('edge.instance.text.relatedOrganization'),
    dataIndex: 'organizationDTO.name',
    width: 160,
  },
  {
    title: t('edge.instance.text.deviceType'),
    width: 100,
    dataIndex: 'deviceType',
    customRender: ({ record }) => {
      const color = 'success';
      const text = t(`enum.deviceType.${record.deviceType}`);
      return h(Tag, { color: color }, () => text);
    },
  },
  {
    title: t('edge.instance.text.createTime'),
    width: 120,
    dataIndex: 'createdTime',
    format: (_text: string, record: Recordable) => {
      return transformTime(record.createdTime);
    },
  },
];

// 表格查询表单
export const searchFormSchema: FormSchema[] = [
  {
    field: 'textSearch',
    label: t('edge.instance.search.deviceName'),
    component: 'Input',
    colProps: { span: 6 },
    componentProps: {
      maxLength: 255,
      placeholder: t('edge.instance.search.deviceNamePlaceholder'),
    },
  },
];