data.ts 5.98 KB
import { FormSchema } from '/@/components/Form';
import { findDictItemByCode } from '/@/api/system/dict';
import { deviceProfile } from '/@/api/device/deviceManager';
import { getOrganizationList } from '/@/api/system/system';
import { copyTransFun } from '/@/utils/fnUtils';
// 第一步的表单
export const step1Schemas: FormSchema[] = [
  {
    field: 'icon',
    label: '设备图片',
    slot: 'iconSelect',
    component: 'Input',
  },
  {
    field: 'name',
    label: '设备名称',
    required: true,
    component: 'Input',
    componentProps: {
      maxLength: 30,
    },
  },
  {
    field: 'deviceType',
    label: '设备类型',
    required: true,
    component: 'ApiSelect',
    componentProps: {
      api: findDictItemByCode,
      params: {
        dictCode: 'device_type',
      },
      labelField: 'itemText',
      valueField: 'itemValue',
    },
  },
  {
    field: 'profileId',
    label: '设备配置',
    required: true,
    component: 'ApiSelect',
    componentProps: {
      api: deviceProfile,
      labelField: 'name',
      valueField: 'id',
    },
  },
  {
    field: 'organizationId',
    required: true,
    label: '所属组织',
    component: 'ApiTreeSelect',
    componentProps: {
      api: async () => {
        const data = await getOrganizationList();
        copyTransFun(data as any as any[]);
        return data;
      },
    },
  },
  {
    field: 'label',
    label: '设备标签',
    component: 'Input',
    componentProps: {
      maxLength: 255,
    },
  },
  {
    field: 'deviceAddress',
    label: '设备位置',
    component: 'Input',
    slot: 'deviceAddress',
  },
  {
    field: 'description',
    label: '备注',
    component: 'InputTextArea',
  },
  {
    field: 'id',
    label: 'id',
    component: 'Input',
    show: false,
  },
  {
    field: 'tenantId',
    label: '租户Code',
    component: 'Input',
    show: false,
  },
  {
    field: 'tbDeviceId',
    label: 'tbDeviceId',
    component: 'Input',
    show: false,
  },
];

export enum credentialTypeEnum {
  ACCESS_TOKEN = 'ACCESS_TOKEN',
  X_509 = 'X509_CERTIFICATE',
  MQTT_BASIC = 'MQTT_BASIC',
}
// 第二步的表单
export const step2Schemas: FormSchema[] = [
  {
    label: '',
    component: 'Checkbox',
    field: 'addAgree',
    slot: 'addAgree',
  },
  {
    label: '凭据类型',
    component: 'Select',
    field: 'credentialType',
    required: true,
    componentProps({ formActionType }) {
      const { updateSchema, setFieldsValue } = formActionType;
      return {
        options: [
          {
            value: credentialTypeEnum.ACCESS_TOKEN,
            label: 'Access Token',
          },
          {
            value: credentialTypeEnum.X_509,
            label: 'X.509',
          },
          {
            value: credentialTypeEnum.MQTT_BASIC,
            label: 'MQTT Basic',
          },
        ],
        onChange(value) {
          setFieldsValue({
            publicKey: '',
            credentialsId: '',
            clientId: '',
            username: '',
            password: '',
          });
          if (value === credentialTypeEnum.ACCESS_TOKEN) {
            updateSchema([
              {
                field: 'credentialsId',
                ifShow: true,
              },
              {
                field: 'clientId',
                ifShow: false,
              },
              {
                field: 'username',
                ifShow: false,
              },
              {
                field: 'password',
                ifShow: false,
              },
              {
                field: 'publicKey',
                ifShow: false,
              },
            ]);
          } else if (value === credentialTypeEnum.X_509) {
            updateSchema([
              {
                field: 'publicKey',
                ifShow: true,
              },
              {
                field: 'credentialsId',
                ifShow: false,
              },
              {
                field: 'clientId',
                ifShow: false,
              },
              {
                field: 'username',
                ifShow: false,
              },
              {
                field: 'password',
                ifShow: false,
              },
            ]);
          } else if (value === credentialTypeEnum.MQTT_BASIC) {
            updateSchema([
              {
                field: 'clientId',
                ifShow: true,
              },
              {
                field: 'username',
                ifShow: true,
              },
              {
                field: 'password',
                ifShow: true,
              },
              {
                field: 'publicKey',
                ifShow: false,
              },
              {
                field: 'credentialsId',
                ifShow: false,
              },
            ]);
          } else {
            updateSchema([
              {
                field: 'clientId',
                ifShow: false,
              },
              {
                field: 'username',
                ifShow: false,
              },
              {
                field: 'password',
                ifShow: false,
              },
              {
                field: 'publicKey',
                ifShow: false,
              },
              {
                field: 'credentialsId',
                ifShow: false,
              },
            ]);
          }
        },
      };
    },
    ifShow: ({ values }) => values.addAgree,
  },
  {
    label: '访问令牌',
    component: 'Input',
    field: 'credentialsId',
    required: true,
    ifShow: false,
  },
  {
    label: 'RSA公钥',
    component: 'Input',
    field: 'publicKey',
    required: true,
    ifShow: false,
  },
  {
    label: '客户端ID',
    component: 'Input',
    field: 'clientId',
    required: true,
    ifShow: false,
  },
  {
    label: '用户名',
    component: 'Input',
    field: 'username',
    required: true,
    ifShow: false,
  },
  {
    label: '密码',
    component: 'Input',
    field: 'password',
    ifShow: false,
  },
];