2025-10-22 14:43:42 +08:00
|
|
|
|
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]
|
2025-10-29 09:59:53 +08:00
|
|
|
|
| ((props: { formValues: FormValues; [key: string]: any }) => ReactNode);
|
2025-10-22 14:43:42 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 选项项数据类型
|
|
|
|
|
|
*/
|
|
|
|
|
|
export interface OptionItem {
|
|
|
|
|
|
/** ID字段 */
|
|
|
|
|
|
id?: any;
|
|
|
|
|
|
/** 名称字段 */
|
|
|
|
|
|
name?: string;
|
|
|
|
|
|
[key: string]: any;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 字段键配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
export interface itemsFieldConfig {
|
2025-10-28 08:48:18 +08:00
|
|
|
|
/** 值字段的键名,默认为 'id' */
|
2025-10-22 14:43:42 +08:00
|
|
|
|
valueKey?: string;
|
2025-10-28 08:48:18 +08:00
|
|
|
|
/** 标签字段的键名,默认为 'name' */
|
2025-10-22 14:43:42 +08:00
|
|
|
|
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);
|
2025-10-28 12:30:57 +08:00
|
|
|
|
/** 是否自定义渲染,默认 false,将不生成 Form.Item */
|
2025-10-22 14:43:42 +08:00
|
|
|
|
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);
|
2025-10-28 12:30:57 +08:00
|
|
|
|
/** label 栅格配置,默认直接使用外层的 labelCol,如果 span 等于 24,是外层的 labelCol.span 一半 */
|
2025-10-22 14:43:42 +08:00
|
|
|
|
labelCol?: ColProps;
|
2025-10-28 12:30:57 +08:00
|
|
|
|
/** wrapper 栅格配置,默认为 24 - labelCol.span */
|
2025-10-22 14:43:42 +08:00
|
|
|
|
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;
|
2025-10-29 09:38:36 +08:00
|
|
|
|
/** 初始值,用于在表单未初始化时提供默认值 */
|
|
|
|
|
|
initialValues?: FormValues;
|
2025-10-22 14:43:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 表单项渲染器组件
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare const FormItemsRenderer: FC<FormItemsRendererProps>;
|
|
|
|
|
|
|
|
|
|
|
|
export default FormItemsRenderer;
|