108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
|  | import type { ColProps } from "antd/es/col"; | |||
|  | import type { FormItemProps, Rule } from "antd/es/form"; | |||
|  | import type { NamePath } from "rc-field-form/lib/interface"; | |||
|  | import type { FC, ReactNode } from "react"; | |||
|  | import type { FORM_ITEM_RENDER_ENUM } from "../../enum/formItemRender"; | |||
|  | 
 | |||
|  | /** | |||
|  |  * 表单项渲染类型 | |||
|  |  */ | |||
|  | export type FormItemRenderType | |||
|  |   = | (typeof FORM_ITEM_RENDER_ENUM)[keyof typeof FORM_ITEM_RENDER_ENUM] | |||
|  |     | ((props: any) => ReactNode); | |||
|  | 
 | |||
|  | /** | |||
|  |  * 选项项数据类型 | |||
|  |  */ | |||
|  | export interface OptionItem { | |||
|  |   /** 值字段 */ | |||
|  |   value?: any; | |||
|  |   /** 标签字段 */ | |||
|  |   label?: string; | |||
|  |   /** 字典ID */ | |||
|  |   dictionariesId?: any; | |||
|  |   /** ID字段 */ | |||
|  |   id?: any; | |||
|  |   /** 名称字段 */ | |||
|  |   name?: string; | |||
|  |   [key: string]: any; | |||
|  | } | |||
|  | 
 | |||
|  | /** | |||
|  |  * 字段键配置 | |||
|  |  */ | |||
|  | export interface itemsFieldConfig { | |||
|  |   /** 值字段的键名,默认为 'value' */ | |||
|  |   valueKey?: string; | |||
|  |   /** 标签字段的键名,默认为 'label' */ | |||
|  |   labelKey?: string; | |||
|  | } | |||
|  | 
 | |||
|  | /** | |||
|  |  * 表单值类型 | |||
|  |  */ | |||
|  | export type FormValues = Record<string, any>; | |||
|  | 
 | |||
|  | /** | |||
|  |  * 表单配置项 | |||
|  |  */ | |||
|  | export interface FormOption { | |||
|  |   /** 表单项字段名 */ | |||
|  |   name?: string | string[]; | |||
|  |   /** 表单项标签 */ | |||
|  |   label?: ReactNode; | |||
|  |   /** 渲染类型 */ | |||
|  |   render?: FormItemRenderType; | |||
|  |   /** 占据栅格列数,默认 12 */ | |||
|  |   span?: number | string; | |||
|  |   /** 是否必填,默认 true,支持函数动态计算 */ | |||
|  |   required?: boolean | ((formValues: FormValues) => boolean); | |||
|  |   /** 验证规则 */ | |||
|  |   rules?: Rule | Rule[]; | |||
|  |   /** 占位符文本,默认会根据传入的 render 类型自动判断(请选择、请输入)和 label 组合 */ | |||
|  |   placeholder?: ReactNode; | |||
|  |   /** 提示信息,传入将在 label 右侧生成图标展示 tooltip */ | |||
|  |   tip?: ReactNode; | |||
|  |   /** 是否隐藏,默认 false,支持函数动态计算 */ | |||
|  |   hidden?: boolean | ((formValues: FormValues) => boolean); | |||
|  |   /** 是否自定义渲染,默认 false,将不生成 Col 和 Form.Item( 仅生效 render、items、itemsField、componentProps ) */ | |||
|  |   customizeRender?: boolean; | |||
|  |   /** 选项数据(用于 select、radio、checkbox) */ | |||
|  |   items?: OptionItem[]; | |||
|  |   /** 字段键配置 */ | |||
|  |   itemsField?: itemsFieldConfig; | |||
|  |   /** 传递给表单控件的属性,支持函数动态计算 */ | |||
|  |   componentProps?: Record<string, any> | ((formValues: FormValues) => Record<string, any>); | |||
|  |   /** 传递给 Form.Item 的属性,支持函数动态计算 */ | |||
|  |   formItemProps?: FormItemProps | ((formValues: FormValues) => FormItemProps); | |||
|  |   /** label 栅格配置 */ | |||
|  |   labelCol?: ColProps; | |||
|  |   /** wrapper 栅格配置 */ | |||
|  |   wrapperCol?: ColProps; | |||
|  |   /** 是否应该更新(用于表单联动) */ | |||
|  |   shouldUpdate?: boolean | ((prevValues: FormValues, nextValues: FormValues, info: { source?: string }) => boolean); | |||
|  |   /** 依赖字段(用于表单联动) */ | |||
|  |   dependencies?: NamePath[]; | |||
|  | } | |||
|  | 
 | |||
|  | /** | |||
|  |  * FormItemsRenderer 组件属性 | |||
|  |  */ | |||
|  | export interface FormItemsRendererProps { | |||
|  |   /** 表单配置项数组 */ | |||
|  |   options: FormOption[]; | |||
|  |   /** 默认栅格占据列数,默认 12 */ | |||
|  |   span?: number; | |||
|  |   /** 是否折叠(仅显示前3项),默认 false */ | |||
|  |   collapse?: boolean; | |||
|  |   /** 自动生成必填规则,默认 true */ | |||
|  |   useAutoGenerateRequired?: boolean; | |||
|  | } | |||
|  | 
 | |||
|  | /** | |||
|  |  * 表单项渲染器组件 | |||
|  |  */ | |||
|  | declare const FormItemsRenderer: FC<FormItemsRendererProps>; | |||
|  | 
 | |||
|  | export default FormItemsRenderer; |