优化FormBuilder

master
LiuJiaNan 2025-11-08 08:50:36 +08:00
parent ba6d7e524e
commit 12bd18debe
2 changed files with 44 additions and 39 deletions

View File

@ -31,6 +31,8 @@ export interface FormBuilderProps extends FormProps {
customActionButtons?: ReactNode;
/** 额外操作按钮组 */
extraActionButtons?: ReactNode;
/** 是否处于加载状态,默认 false */
loading?: boolean;
}
/**

View File

@ -1,4 +1,4 @@
import { Button, Col, Form, Row, Space } from "antd";
import { Button, Col, Form, Row, Space, Spin } from "antd";
import FormItemsRenderer from "./FormItemsRenderer";
/**
@ -19,6 +19,7 @@ const FormBuilder = (props) => {
showCancelButton = true,
customActionButtons,
extraActionButtons,
loading = false,
...restProps
} = props;
@ -27,45 +28,47 @@ const FormBuilder = (props) => {
};
return (
<Form
labelCol={labelCol}
scrollToFirstError
wrapperCol={{ span: 24 - labelCol.span }}
initialValues={values}
style={{ width: `calc(100% - ${gutter * 2}px)`, margin: `0 auto` }}
{...restProps}
>
<Row gutter={gutter}>
<FormItemsRenderer
options={options}
labelCol={labelCol}
span={span}
useAutoGenerateRequired={useAutoGenerateRequired}
initialValues={values}
/>
</Row>
{showActionButtons && (
<Row gutter={gutter} style={{ marginTop: 24 }}>
<Col span={24} style={{ textAlign: "center" }}>
{customActionButtons || (
<Space>
{showSubmitButton && (
<Button type="primary" htmlType="submit">
{submitButtonText}
</Button>
)}
{showCancelButton && (
<Button onClick={handleCancel} style={{ marginRight: 8 }}>
{cancelButtonText}
</Button>
)}
{extraActionButtons}
</Space>
)}
</Col>
<Spin spinning={loading}>
<Form
labelCol={labelCol}
scrollToFirstError
wrapperCol={{ span: 24 - labelCol.span }}
initialValues={values}
style={{ width: `calc(100% - ${gutter * 2}px)`, margin: `0 auto` }}
{...restProps}
>
<Row gutter={gutter}>
<FormItemsRenderer
options={options}
labelCol={labelCol}
span={span}
useAutoGenerateRequired={useAutoGenerateRequired}
initialValues={values}
/>
</Row>
)}
</Form>
{showActionButtons && (
<Row gutter={gutter} style={{ marginTop: 24 }}>
<Col span={24} style={{ textAlign: "center" }}>
{customActionButtons || (
<Space>
{showSubmitButton && (
<Button type="primary" htmlType="submit">
{submitButtonText}
</Button>
)}
{showCancelButton && (
<Button onClick={handleCancel} style={{ marginRight: 8 }}>
{cancelButtonText}
</Button>
)}
{extraActionButtons}
</Space>
)}
</Col>
</Row>
)}
</Form>
</Spin>
);
};