config.ts 2.63 KB
import { findDictItemByCode } from '/@/api/system/dict';
import { FormSchema, useComponentRegister } from '/@/components/Form';
import { DictEnum } from '/@/enums/dictEnum';
import RegisterAddressInput from './RegisterAddressInput.vue';
import { createPickerSearch } from '/@/utils/pickerSearch';
import { ControlGroup } from '../ControlGroup';

export enum FormFieldsEnum {
  ADDRESS = 'address',
  FUNCTION_CODE = 'functionCode',
  START_REGISTER_ADDRESS = 'startRegisterAddress',
  REGISTER_NUMBER = 'registerNumber',
  DATA_VALID = 'dataValid',
}

useComponentRegister('RegisterAddressInput', RegisterAddressInput);
useComponentRegister('ControlGroup', ControlGroup);

export const formSchemas: FormSchema[] = [
  {
    field: FormFieldsEnum.ADDRESS,
    component: 'ApiSelect',
    label: '从机地址',
    componentProps: () => {
      return {
        api: async (params: Recordable) => {
          try {
            const result = await findDictItemByCode(params);
            return result.map((item, index) => ({
              ...item,
              itemText: `${index + 1} - ${item.itemText}`,
            }));
          } catch (error) {
            return [];
          }
        },
        params: {
          dictCode: DictEnum.SLAVE_ADDRESS,
        },
        labelField: 'itemText',
        valueField: 'itemValue',
        ...createPickerSearch(),
        getPopupContainer: () => document.body,
      };
    },
  },
  {
    field: FormFieldsEnum.FUNCTION_CODE,
    component: 'ApiSelect',
    label: '功能码',
    componentProps: () => {
      return {
        api: findDictItemByCode,
        params: {
          dictCode: DictEnum.FUNCTION_CODE,
        },
        labelField: 'itemText',
        valueField: 'itemValue',
        getPopupContainer: () => document.body,
      };
    },
  },
  {
    field: FormFieldsEnum.START_REGISTER_ADDRESS,
    label: '起始寄存器地址',
    component: 'RegisterAddressInput',
    valueField: 'value',
    changeEvent: 'update:value',
  },
  {
    field: FormFieldsEnum.REGISTER_NUMBER,
    label: '寄存器个数',
    component: 'InputNumber',
    componentProps: {
      min: 1,
      max: 64,
      step: 1,
    },
  },
  {
    field: FormFieldsEnum.DATA_VALID,
    label: '数据校验',
    component: 'ApiSelect',
    colProps: { span: 24 },
    componentProps: () => {
      return {
        api: findDictItemByCode,
        params: {
          dictCode: DictEnum.DATA_VALIDATE,
        },
        labelField: 'itemText',
        valueField: 'itemValue',
        getPopupContainer: () => document.body,
      };
    },
  },
  // {
  //   field: 'test',
  //   label: '住',
  //   component: 'ControlGroup',
  // },
];