优化FormItemsRenderer
parent
c549a07503
commit
215c482b38
|
|
@ -44,6 +44,7 @@ const FormBuilder = (props) => {
|
||||||
<Row gutter={gutter}>
|
<Row gutter={gutter}>
|
||||||
<FormItemsRenderer
|
<FormItemsRenderer
|
||||||
options={options}
|
options={options}
|
||||||
|
labelCol={labelCol}
|
||||||
span={span}
|
span={span}
|
||||||
useAutoGenerateRequired={useAutoGenerateRequired}
|
useAutoGenerateRequired={useAutoGenerateRequired}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ export interface FormOption {
|
||||||
tip?: ReactNode;
|
tip?: ReactNode;
|
||||||
/** 是否隐藏,默认 false,支持函数动态计算 */
|
/** 是否隐藏,默认 false,支持函数动态计算 */
|
||||||
hidden?: boolean | ((formValues: FormValues) => boolean);
|
hidden?: boolean | ((formValues: FormValues) => boolean);
|
||||||
/** 是否自定义渲染,默认 false,将不生成 Col 和 Form.Item( 仅生效 render、items、itemsField、componentProps ) */
|
/** 是否自定义渲染,默认 false,将不生成 Form.Item */
|
||||||
customizeRender?: boolean;
|
customizeRender?: boolean;
|
||||||
/** 选项数据(用于 select、radio、checkbox) */
|
/** 选项数据(用于 select、radio、checkbox) */
|
||||||
items?: OptionItem[];
|
items?: OptionItem[];
|
||||||
|
|
@ -69,9 +69,9 @@ export interface FormOption {
|
||||||
componentProps?: Record<string, any> | ((formValues: FormValues) => Record<string, any>);
|
componentProps?: Record<string, any> | ((formValues: FormValues) => Record<string, any>);
|
||||||
/** 传递给 Form.Item 的属性,支持函数动态计算 */
|
/** 传递给 Form.Item 的属性,支持函数动态计算 */
|
||||||
formItemProps?: FormItemProps | ((formValues: FormValues) => FormItemProps);
|
formItemProps?: FormItemProps | ((formValues: FormValues) => FormItemProps);
|
||||||
/** label 栅格配置 */
|
/** label 栅格配置,默认直接使用外层的 labelCol,如果 span 等于 24,是外层的 labelCol.span 一半 */
|
||||||
labelCol?: ColProps;
|
labelCol?: ColProps;
|
||||||
/** wrapper 栅格配置 */
|
/** wrapper 栅格配置,默认为 24 - labelCol.span */
|
||||||
wrapperCol?: ColProps;
|
wrapperCol?: ColProps;
|
||||||
/** 是否应该更新(用于表单联动) */
|
/** 是否应该更新(用于表单联动) */
|
||||||
shouldUpdate?: boolean | ((prevValues: FormValues, nextValues: FormValues, info: { source?: string }) => boolean);
|
shouldUpdate?: boolean | ((prevValues: FormValues, nextValues: FormValues, info: { source?: string }) => boolean);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ const { RangePicker } = DatePicker;
|
||||||
*/
|
*/
|
||||||
const FormItemsRenderer = ({
|
const FormItemsRenderer = ({
|
||||||
options,
|
options,
|
||||||
|
labelCol,
|
||||||
span = 12,
|
span = 12,
|
||||||
collapse = false,
|
collapse = false,
|
||||||
useAutoGenerateRequired = true,
|
useAutoGenerateRequired = true,
|
||||||
|
|
@ -260,7 +261,11 @@ const FormItemsRenderer = ({
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{options.map((option, index) => {
|
{options.map((option, index) => {
|
||||||
|
// 列数
|
||||||
const itemSpan = option.render === FORM_ITEM_RENDER_ENUM.DIVIDER ? 24 : option.span ?? span;
|
const itemSpan = option.render === FORM_ITEM_RENDER_ENUM.DIVIDER ? 24 : option.span ?? span;
|
||||||
|
const itemLabelCol = option.labelCol ? option.labelCol : (itemSpan === 24 ? { span: labelCol.span / 2 } : labelCol);
|
||||||
|
const itemWrapperCol = option.wrapperCol ? option.wrapperCol : { span: 24 - itemLabelCol.span };
|
||||||
|
|
||||||
// 使用 style 控制显示/隐藏
|
// 使用 style 控制显示/隐藏
|
||||||
const style = collapse && index >= 3 ? { display: "none" } : undefined;
|
const style = collapse && index >= 3 ? { display: "none" } : undefined;
|
||||||
|
|
||||||
|
|
@ -299,8 +304,8 @@ const FormItemsRenderer = ({
|
||||||
name={option.name}
|
name={option.name}
|
||||||
label={renderLabel(option)}
|
label={renderLabel(option)}
|
||||||
rules={getRules(option)}
|
rules={getRules(option)}
|
||||||
labelCol={option.labelCol}
|
labelCol={itemLabelCol}
|
||||||
wrapperCol={option.wrapperCol}
|
wrapperCol={itemWrapperCol}
|
||||||
{...getFormItemProps(option)}
|
{...getFormItemProps(option)}
|
||||||
>
|
>
|
||||||
{renderFormControl(option)}
|
{renderFormControl(option)}
|
||||||
|
|
@ -318,22 +323,24 @@ const FormItemsRenderer = ({
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
option.customizeRender
|
<Col key={option.name || index} span={itemSpan} style={style}>
|
||||||
? (renderFormControl(option))
|
{
|
||||||
: (
|
option.customizeRender
|
||||||
<Col key={option.name || index} span={itemSpan} style={style}>
|
? (renderFormControl(option))
|
||||||
<Form.Item
|
: (
|
||||||
name={option.name}
|
<Form.Item
|
||||||
label={renderLabel(option)}
|
name={option.name}
|
||||||
rules={getRules(option)}
|
label={renderLabel(option)}
|
||||||
labelCol={option.labelCol}
|
rules={getRules(option)}
|
||||||
wrapperCol={option.wrapperCol}
|
labelCol={itemLabelCol}
|
||||||
{...getFormItemProps(option)}
|
wrapperCol={itemWrapperCol}
|
||||||
>
|
{...getFormItemProps(option)}
|
||||||
{renderFormControl(option)}
|
>
|
||||||
</Form.Item>
|
{renderFormControl(option)}
|
||||||
</Col>
|
</Form.Item>
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
</Col>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ const Search = (props) => {
|
||||||
<Row className={classNameRef.current}>
|
<Row className={classNameRef.current}>
|
||||||
<FormItemsRenderer
|
<FormItemsRenderer
|
||||||
options={options}
|
options={options}
|
||||||
|
labelCol={labelCol}
|
||||||
span={6}
|
span={6}
|
||||||
collapse={collapse}
|
collapse={collapse}
|
||||||
useAutoGenerateRequired={false}
|
useAutoGenerateRequired={false}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue