import { Button, Col, Form, message, Row, Space, Spin } from "antd"; import { useEffect, useState } from "react"; import FormItemsRenderer from "./FormItemsRenderer"; /** * 表单构建器组件 */ const FormBuilder = (props) => { const { values, options, gutter = 24, span = 12, labelCol = { span: 4 }, useAutoGenerateRequired = true, showActionButtons = true, submitButtonText = "提交", cancelButtonText = "取消", showSubmitButton = true, showCancelButton = true, customActionButtons, extraActionButtons, loading = false, ...restProps } = props; const [pageWidth, setPageWidth] = useState(window.innerWidth); const getPageWidth = () => { const pageDom = document.querySelector("#page"); if (!pageDom) return; setPageWidth(pageDom.offsetWidth); }; useEffect(() => { const timer = setTimeout(() => { getPageWidth(); }, 0); window.addEventListener("resize", getPageWidth); return () => { window.removeEventListener("resize", getPageWidth); clearTimeout(timer); }; }, []); const handleCancel = () => { window.history.back(); }; return (
{ message.error("请补全必填项"); }} style={{ width: `calc(100% - ${gutter * 2}px)`, margin: `0 auto` }} {...restProps} > {showActionButtons && ( <>
{customActionButtons || ( {showSubmitButton && ( )} {extraActionButtons} {showCancelButton && ( )} )} )}
); }; FormBuilder.displayName = "FormBuilder"; export default FormBuilder;