config.ts 2.35 KB
import { DirectionEnum, DirectionNameEnum } from '../../../enum/form';
import { FormSchema, useComponentRegister } from '/@/components/Form';
import { CorrelationFilters } from '../CorrelationFilters';
import { ListItemType } from '../CorrelationFilters/config';

useComponentRegister('CorrelationFilters', CorrelationFilters);

export enum RelationsQueryFormFieldsEnum {
  FETCH_LAST_LEVEL_ONLY = 'fetchLastLevelOnly',
  DIRECTION = 'direction',
  MAX_LEVEL = 'maxLevel',
  FILTERS = 'filters',
}

export enum RelationsQueryFormFieldsNameEnum {
  FETCH_LAST_LEVEL_ONLY = '仅获取最后一级关联',
  DIRECTION = '方向',
  MAX_LEVEL = 'Max relation level',
  FILTERS = '关联筛选器',
}

export interface ValueType {
  [RelationsQueryFormFieldsEnum.DIRECTION]?: DirectionEnum;
  [RelationsQueryFormFieldsEnum.FILTERS]?: ListItemType[];
  [RelationsQueryFormFieldsEnum.FETCH_LAST_LEVEL_ONLY]?: boolean;
  [RelationsQueryFormFieldsEnum.MAX_LEVEL]?: number;
}

export const getFormSchemas = (allowAddFilters: boolean): FormSchema[] => {
  return [
    {
      field: RelationsQueryFormFieldsEnum.FETCH_LAST_LEVEL_ONLY,
      component: 'Checkbox',
      label: '',
      required: true,
      renderComponentContent: () => ({
        default: () => RelationsQueryFormFieldsNameEnum.FETCH_LAST_LEVEL_ONLY,
      }),
    },
    {
      field: RelationsQueryFormFieldsEnum.DIRECTION,
      component: 'Select',
      label: RelationsQueryFormFieldsNameEnum.DIRECTION,
      colProps: { span: 12 },
      required: true,
      componentProps: {
        options: Object.keys(DirectionEnum).map((value) => ({
          label: DirectionNameEnum[value],
          value,
        })),
        getPopupContainer: () => document.body,
        placeholder: `请选择${RelationsQueryFormFieldsNameEnum.DIRECTION}`,
        componentProps: {},
      },
    },
    {
      field: RelationsQueryFormFieldsEnum.MAX_LEVEL,
      label: RelationsQueryFormFieldsNameEnum.MAX_LEVEL,
      component: 'InputNumber',
      colProps: { span: 12 },
      required: true,
      componentProps: {
        min: 1,
      },
    },
    {
      field: RelationsQueryFormFieldsEnum.FILTERS,
      label: allowAddFilters ? RelationsQueryFormFieldsNameEnum.FILTERS : '',
      component: 'CorrelationFilters',
      valueField: 'value',
      changeEvent: 'update:value',
      slot: RelationsQueryFormFieldsEnum.FILTERS,
    },
  ];
};