import { ColProps, FormInstance, FormItemProps } from 'antd'; import { NamePath } from 'antd/es/form/interface'; import React from 'react'; import { validate, regExp } from '@zat-design/utils'; import { Rule } from 'antd/es/form'; import * as componentMap from '../index'; import { IProps as InputProps } from '../base/Input/propsType'; import { Props as InputNumberProps } from '../base/InputNumber'; import { Props as RadioProps } from '../base/Radio'; import { Props as CheckboxProps } from '../base/Checkbox'; import { Props as DatePickerProps } from '../base/DatePicker'; import { Props as RangePickerProps } from '../base/RangePicker'; import { PropsWithRef as FormListProps } from '../combination/FormList/propsType'; import { Props as SelectProps } from '../base/Select'; import { Props as TimePickerProps } from '../base/TimePicker'; import { Props as SwitchProps } from '../base/Switch'; import { Props as SwitchCheckboxProps } from '../base/SwitchCheckbox'; import { Props as TextAreaProps } from '../base/TextArea'; import { Props as ProCascaderProps } from '../base/ProCascader'; import { AddressProps } from '../combination/ProAddressBar/propsType'; import { ProCombinationProps } from '../combination/ProCombination/propsType'; import { ProModalSelectPropsType as ProModalSelectProps } from '../combination/ProModalSelect/propsType'; import { ProNumberRangeProps } from '../combination/ProNumberRange/propsType'; import { ProLimitProps } from '../combination/ProTimeLimit'; import { Props as ProRangeLimitProps } from '../combination/ProRangeLimit'; import { CheckboxPropsMap, ProEnum, PropProSelectsMap, PropRadioPropsMap } from '../../../ProEnum/propsType'; import { PropSelectProps as ProSelectProps } from '../../../ProSelect/propsType'; import { ProEditTableProps } from '../../../ProEditTable/propsType'; import { PropTreeSelectProps } from '../../../ProTreeSelect/propsType'; import { ProTreeModalProps } from '../../../ProTreeModal/propsType'; import { ProUploadProps } from '../../../ProUpload/propsType'; import { ProTreeProps } from '../../../ProTree/propsType'; import { GroupProps } from '../combination/Group/propsType'; import { ProCollapseProps } from '../../../ProLayout/components/ProCollapse/PropTypes'; export type ComponentMap = keyof typeof componentMap; type ValidateKey = keyof typeof validate; type RegExpKey = keyof typeof regExp; interface ExtendType { type?: ValidateKey | RegExpKey; message?: string; } export type ProRule = Rule | ExtendType; /** * percent 百分比 permillage 千分比 amount 金额 */ export type ViewType = 'percent' | 'permillage' | 'amount' | 'thousandth'; export type PartialOf = Omit & Partial>; interface ControlProps { value?: unknown; onChange?: (...args: any[]) => void; } /** * 扩展函数的参数 */ type FunctionArgs = (value: any, record: any, { form, index, namePath, option, selectedOptions, dateString, }: { form: FormInstance; index?: number; namePath?: NamePath; [key: string]: any; }) => any; type TransformToFormField = DistributiveOmit & { value?: T['value']; onChange?: (value: Parameters[0], options: Parameters[1], form: FormInstance) => void; onFieldChange?: FunctionArgs; dataSource?: any[]; /** ProForm disable时,是否完全受控 */ disabledStrictly?: boolean; }; type ProEnumFormProps = TransformToFormField | TransformToFormField | TransformToFormField | TransformToFormField; type ProEnumTableProps = TransformToTableField | TransformToTableField | TransformToTableField | TransformToTableField; type ProEnumFieldProps = TT extends 'ProForm' ? ProEnumFormProps | ReactiveFunction> : ProEnumTableProps | ((text: any, values: Values, index: number) => ProEnumTableProps); type TransformToTableField = Omit & { value?: T['value']; onChange?: (value: Parameters[0], options: Parameters[1], record: any, index: number, form: FormInstance) => void; onFieldChange?: FunctionArgs; onBlur?: FunctionArgs; }; export type ReactiveFunction = (values: Values, { form, index, namePath, }: { form: FormInstance; index?: number; namePath?: NamePath; [key: string]: any; }) => R; type FieldProps = TT extends 'ProForm' ? TransformToFormField | ReactiveFunction> : TransformToTableField | ((text: any, values: Values, index: number) => TransformToTableField); /** * 值转换 */ export type ProFormValueType = 'percentage' | 'permillage' | 'thousandth' | 'datePicker' | 'enumName' | 'enumCodeName' | 'address' | 'thousandthCNY' | 'date' | 'dateTime' | 'dateStartTime' | 'dateEndTime' | 'dateStartEndTime' | 'switch'; export type ColumnPropsMap = { type?: 'Input'; fieldProps?: FieldProps; } | { type?: 'InputNumber'; fieldProps?: FieldProps; } | { type?: 'Radio'; fieldProps?: FieldProps; } | { type?: 'Checkbox'; fieldProps?: FieldProps; } | { type?: 'DatePicker'; fieldProps?: FieldProps; } | { type?: 'RangePicker'; fieldProps?: FieldProps; } | { type?: 'FormList'; fieldProps?: FieldProps, Values, T>; } | { type?: 'Select'; fieldProps?: FieldProps; } | { type?: 'TimePicker'; fieldProps?: FieldProps; } | { type?: 'Switch'; fieldProps?: FieldProps; } | { type?: 'SwitchCheckbox'; fieldProps?: FieldProps; } | { type?: 'TextArea'; fieldProps?: FieldProps; } | { type?: 'ProAddressBar'; fieldProps?: FieldProps; } | { type?: 'ProCombination'; fieldProps?: FieldProps; } | { type?: 'ProModalSelect'; fieldProps?: FieldProps; } | { type?: 'ProNumberRange'; fieldProps?: FieldProps; } | { type?: 'ProRangeLimit'; fieldProps?: FieldProps; } | { type?: 'ProTimeLimit'; fieldProps?: FieldProps; } | { type?: 'ProEnum'; fieldProps?: ProEnumFieldProps; } | { type?: 'ProSelect'; fieldProps?: FieldProps; } | { type?: 'ProEditTable'; fieldProps?: FieldProps; } | { type?: 'ProTreeSelect'; fieldProps?: FieldProps; } | { type?: 'ProTreeModal'; fieldProps?: FieldProps; } | { type?: 'ProUpload'; fieldProps?: FieldProps; } | { type?: 'ProCascader'; fieldProps?: FieldProps, Values, T>; } | { type?: 'ProTree'; fieldProps?: FieldProps; } | { type?: 'Group'; fieldProps?: GroupProps | ReactiveFunction; } | { type?: 'ProCollapse'; fieldProps?: ProCollapseProps | ReactiveFunction; } | { type?: 'Container'; fieldProps?: any; }; interface ProFormColumnProps extends Omit, 'rules' | 'required'> { component?: React.ReactNode | ReactiveFunction; names?: NamePath[]; show?: boolean | ReactiveFunction; valueType?: ProFormValueType; switchValue?: [any, any]; isView?: boolean; viewRender?: (value: any, record: Values, { form, index, namePath, }: { form: FormInstance; index?: number | undefined; [key: string]: any; }) => React.ReactElement | string | undefined | null; viewType?: ViewType; colProps?: ColProps; /** * @description 表单item的props属性 * @deprecated 将于下个版本 4.0.0 被弃用 * @default - */ formItemProps?: FormItemProps & { index?: number; namePath?: NamePath; }; /** * @description 表单props属性 * @deprecated 将于下个版本 4.0.0 被弃用, 请使用fieldProps进行替换 * @default - */ labelWidth?: string | number; disabled?: boolean | ReactiveFunction; trim?: boolean; upperCase?: boolean; hiddenNames?: string[] | any[]; rules?: ProRule[] | ReactiveFunction; equalWith?: (originValue: any, currentValue: any) => boolean; required?: boolean | ReactiveFunction; labelRequired?: boolean; toISOString?: boolean; clearNotShow?: boolean; index?: number; namePath?: NamePath; /** 表单前缀信息 */ before?: string | React.ReactNode; /** 表单后缀信息 */ after?: string | React.ReactNode; /** 表单下方辅助信息 */ extra?: string | React.ReactNode; /** 是否固定字段, 不隐藏 */ fixed?: boolean; } export type ProColumnProps = ProFormColumnProps & ColumnPropsMap; /** * 表单渲染类型 */ export interface RenderProps { component: any; formItemProps: FormItemProps & { labelWidth?: string | number; disabled?: boolean; hiddenNames?: string[]; trim?: boolean; upperCase?: boolean; rules?: ProRule[]; labelRequired?: boolean; tooltip?: any; isView?: boolean; disabledStrictly?: boolean; /** 表单前缀信息 */ before?: string | React.ReactNode; /** 表单后缀信息 */ after?: string | React.ReactNode; /** 表单下方辅助信息 */ extra?: string | React.ReactNode; parentNames?: string; names?: NamePath[]; }; colProps: ColProps; componentProps: { disabledStrictly?: boolean; [name: string]: any; }; show?: boolean | ((values: Values, { form, index, namePath, }: { form: FormInstance; index?: number; namePath?: NamePath; [key: string]: any; }) => boolean); form: FormInstance; fieldProps?: ReactiveFunction; isSelect: boolean; originalValues?: Values; requiredOnView?: boolean; [name: string]: any; } export {};