| 
									
										
										
										
											2025-10-23 18:01:20 +08:00
										 |  |  | import { Button, Col, Form, Row, Space } from "antd"; | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  | import FormItemsRenderer from "./FormItemsRenderer"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 表单构建器组件 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const FormBuilder = (props) => { | 
					
						
							|  |  |  |   const { | 
					
						
							|  |  |  |     values, | 
					
						
							|  |  |  |     options, | 
					
						
							|  |  |  |     gutter = 24, | 
					
						
							|  |  |  |     span = 12, | 
					
						
							|  |  |  |     labelCol = { span: 4 }, | 
					
						
							|  |  |  |     onFinish, | 
					
						
							|  |  |  |     useAutoGenerateRequired = true, | 
					
						
							| 
									
										
										
										
											2025-10-23 18:01:20 +08:00
										 |  |  |     showActionButtons = true, | 
					
						
							|  |  |  |     submitButtonText = "提交", | 
					
						
							|  |  |  |     resetButtonText = "重置", | 
					
						
							|  |  |  |     showSubmitButton = true, | 
					
						
							|  |  |  |     showResetButton = true, | 
					
						
							|  |  |  |     customActionButtons, | 
					
						
							|  |  |  |     form: externalForm, | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  |     ...restProps | 
					
						
							|  |  |  |   } = props; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-23 18:01:20 +08:00
										 |  |  |   const [internalForm] = Form.useForm(); | 
					
						
							|  |  |  |   const form = externalForm || internalForm; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const handleReset = () => { | 
					
						
							|  |  |  |     form.resetFields(); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  |   return ( | 
					
						
							|  |  |  |     <Form | 
					
						
							|  |  |  |       labelCol={labelCol} | 
					
						
							|  |  |  |       scrollToFirstError | 
					
						
							|  |  |  |       wrapperCol={{ span: 24 - labelCol.span }} | 
					
						
							|  |  |  |       onFinish={onFinish} | 
					
						
							|  |  |  |       initialValues={values} | 
					
						
							| 
									
										
										
										
											2025-10-23 18:01:20 +08:00
										 |  |  |       form={form} | 
					
						
							| 
									
										
										
										
											2025-10-28 11:28:18 +08:00
										 |  |  |       style={{ width: `calc(100% - ${gutter * 2}px)`, margin: `0 auto` }} | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  |       {...restProps} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       <Row gutter={gutter}> | 
					
						
							|  |  |  |         <FormItemsRenderer | 
					
						
							|  |  |  |           options={options} | 
					
						
							| 
									
										
										
										
											2025-10-28 12:30:57 +08:00
										 |  |  |           labelCol={labelCol} | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  |           span={span} | 
					
						
							|  |  |  |           useAutoGenerateRequired={useAutoGenerateRequired} | 
					
						
							|  |  |  |         /> | 
					
						
							|  |  |  |       </Row> | 
					
						
							| 
									
										
										
										
											2025-10-23 18:01:20 +08:00
										 |  |  |       {showActionButtons && ( | 
					
						
							|  |  |  |         <Row gutter={gutter} style={{ marginTop: 24 }}> | 
					
						
							|  |  |  |           <Col span={24} style={{ textAlign: "center" }}> | 
					
						
							|  |  |  |             {customActionButtons || ( | 
					
						
							|  |  |  |               <Space> | 
					
						
							|  |  |  |                 {showSubmitButton && ( | 
					
						
							|  |  |  |                   <Button type="primary" htmlType="submit"> | 
					
						
							|  |  |  |                     {submitButtonText} | 
					
						
							|  |  |  |                   </Button> | 
					
						
							|  |  |  |                 )} | 
					
						
							|  |  |  |                 {showResetButton && ( | 
					
						
							|  |  |  |                   <Button onClick={handleReset} style={{ marginRight: 8 }}> | 
					
						
							|  |  |  |                     {resetButtonText} | 
					
						
							|  |  |  |                   </Button> | 
					
						
							|  |  |  |                 )} | 
					
						
							|  |  |  |               </Space> | 
					
						
							|  |  |  |             )} | 
					
						
							|  |  |  |           </Col> | 
					
						
							|  |  |  |         </Row> | 
					
						
							|  |  |  |       )} | 
					
						
							| 
									
										
										
										
											2025-10-22 14:43:42 +08:00
										 |  |  |     </Form> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FormBuilder.displayName = "FormBuilder"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default FormBuilder; |