/** * 属性的实体类 */ import { AutoCompleteExtraProps, AutoCompleteProps, CascaderExtraProps, CascaderProps, CheckboxGroupProps, CheckboxProps, CheckGroupExtraProps, DatePickerProps, DateRangePickerProps, InputNumberProps, InputProps, OptionProps, RadioGroupExtraProps, RadioGroupProps, RadioProps, RateProps, SelectExtraProps, SelectProps, SliderProps, SwitchProps, TextAreaProps, TimePickerProps, TimeRangePickerProps, TreeSelectProps, UploadExtraProps, UploadProps } from './props' import { BaseFormDTO, BasePo } from '../../entity/common/base' // 导出所有的属性 export * from './props' /** * 支持的类型 */ export type FieldType = | 'auto-complete' | 'cascader' | 'checkbox' | 'checkbox-group' | 'radio' | 'radio-button' | 'radio-group' | 'date-picker' | 'range-picker' | 'input' | 'textarea' | 'search' | 'input-number' | 'input-range' | 'rate' | 'select' | 'slider' | 'switch' | 'time-picker' | 'time-range-picker' | 'tree-select' | 'upload' | 'rich-text' /** * 类型额外字段 */ export type TypeValue = | AutoCompleteProps | CascaderProps | CheckboxProps | CheckboxGroupProps | RadioProps | RadioGroupProps | DatePickerProps | DateRangePickerProps | InputProps | TextAreaProps | InputNumberProps | RateProps | SelectProps | SliderProps | SwitchProps | TimePickerProps | TimeRangePickerProps | UploadProps /** * 额外字段类型 */ export type ExtraTypeProps = CascaderExtraProps | SelectExtraProps | UploadExtraProps | AutoCompleteExtraProps | RadioGroupExtraProps | CheckGroupExtraProps /** * 额外字段的值 */ export interface ExtraProps { [key: string]: string | number | Array | Array | boolean | OptionProps | Array | undefined } /** * 输入框字段 */ export interface BaseFieldProps< Type extends FieldType, Props extends TypeValue, Extra extends ExtraTypeProps | undefined, Entity extends BaseFormDTO | BasePo = BaseFormDTO > { /** * 字段名称 * 提交表单的标识符 */ name: keyof Entity /** * 类型 * Cascader : 级联选择器 * Checkbox:多选框 * DatePicker :日期选择框 * Input :输入框 * TextArea :文本域 * Search :搜索框 * InputNumber :搜索框 * Rate :评分 * Select :选择器 * Slider :滑动输入条 * Slider :滑动输入条 * Switch :开关 * TimePicker:时间选择框 * TreeSelect :树选择 */ type: Type /** * 类型对应的值 */ typeValue?: Props /** * 标题 */ label: string /** * 占位提示 */ placeholder?: string | Array /** * 校验规则 */ rules?: Array | RulesProps /** * 值 */ value?: string | number | Array | Array | boolean /** * 额外需要返回的字段 * 例如:文件选择,[id,url], 第一个表示id,第二个表示url * * @deprecated 使用 typeValue 中 extraNames 代替,设计失误,未来版本会被删除 */ extraNames?: Extra [key: PropertyKey]: unknown } /** * 限制类型输入 */ export type FieldProps = | BaseFieldProps<'auto-complete', AutoCompleteProps, AutoCompleteExtraProps, Entity> | BaseFieldProps<'cascader', CascaderProps, CascaderExtraProps, Entity> | BaseFieldProps<'checkbox', CheckboxProps, RadioGroupExtraProps, Entity> | BaseFieldProps<'checkbox-group', CheckboxGroupProps, CheckGroupExtraProps, Entity> | BaseFieldProps<'radio', RadioProps, RadioGroupExtraProps, Entity> | BaseFieldProps<'radio-button', RadioProps, RadioGroupExtraProps, Entity> | BaseFieldProps<'radio-group', RadioGroupProps, RadioGroupExtraProps, Entity> | BaseFieldProps<'date-picker', DatePickerProps, undefined, Entity> | BaseFieldProps<'range-picker', DateRangePickerProps, undefined, Entity> | BaseFieldProps<'input', InputProps, undefined, Entity> | BaseFieldProps<'textarea', TextAreaProps, undefined, Entity> | BaseFieldProps<'search', InputProps, undefined, Entity> | BaseFieldProps<'input-number', InputNumberProps, undefined, Entity> | BaseFieldProps<'input-range', InputNumberProps, undefined, Entity> | BaseFieldProps<'rate', RateProps, undefined, Entity> | BaseFieldProps<'select', SelectProps, SelectExtraProps, Entity> | BaseFieldProps<'slider', SliderProps, undefined, Entity> | BaseFieldProps<'switch', SwitchProps, undefined, Entity> | BaseFieldProps<'time-picker', TimePickerProps, undefined, Entity> | BaseFieldProps<'time-range-picker', TimeRangePickerProps, undefined, Entity> | BaseFieldProps<'tree-select', TreeSelectProps, undefined, Entity> | BaseFieldProps<'upload', UploadProps, UploadExtraProps, Entity> | BaseFieldProps<'rich-text', UploadProps, undefined, Entity> /** * 校验规则数据 */ export interface RulesProps { /** * 校验触发的时机 */ trigger?: 'blur' | 'change' | ['change', 'blur'] /** * 枚举类型 */ enum?: string /** * 字段长度 */ len?: number /** * 最大长度 */ max?: number /** * 最小长度 */ min?: number /** * 校验文案 */ message?: string /** * 正则表达式校验 */ pattern?: RegExp /** * 是否必选 */ required?: boolean /** * transform * @param value */ transform?: (value: T) => T /** * 内建校验类型,可选项 */ type?: string /** * 自定义校验(注意,callback 必须被调用) */ validator?: (rule: RulesProps, value: string | number, callback: (message?: string) => void) => Promise | void /** * 必选时,空格是否会被视为错误 */ whitespace?: boolean }