import { doFetch } from "@/utils/doFetch";
import { ProForm, ProFormDependency } from "@ant-design/pro-components";
import { Button } from "@mui/material";
import { createElement, memo, useRef } from "react";
import FormItems from "./FormItems";
import "./index.less";
function upperCase(str) {
const newStr = str.slice(0, 1).toUpperCase() + str.slice(1);
return newStr;
}
let FormRender = memo(({ fields = [], colProps, proformRef }) => {
return (
<>
{fields
.filter((it) => it.hideInForm !== true)
.map((item, index) => {
let key = item?.valueType ? upperCase(item?.valueType) : "Input";
let { hideInForm } = item;
item.formItemProps = item.formItemProps ?? { rules: [] };
if (item.valueType == "split") {
return (
{item.title}
);
}
if (hideInForm && Object.keys(hideInForm)) {
return (
{(params) => {
let ifs = true;
let res = Object.keys(hideInForm).map((its) => {
if (Array.isArray(hideInForm[its])) {
return !hideInForm[its].includes(params[its]);
} else {
let vals = hideInForm[its].reverse; //取反 即不存在当前数组中的
return vals.indexOf(params[its]) != -1;
}
});
ifs = res.includes(false);
if (ifs) {
return;
} else {
return (
<>
{createElement(FormItems[key], {
item: item,
colProps: colProps,
key: item.dataIndex,
formRef: proformRef,
})}
>
);
}
}}
);
} else {
return (
<>
{createElement(FormItems[key], {
item: {
...item,
fieldProps: {
...item.fieldProps,
size: "large",
},
},
colProps: colProps,
key: item.dataIndex,
formRef: proformRef,
})}
>
);
}
})}
>
);
});
function InitForm({
formRef,
onFinish = (vals, extra) => {
//console.log(vals, extra);
},
formKey,
params = {},
style = {},
detailpath = "",
defaultFormValue = {},
submitter,
fields,
colProps = { xs: 24, sm: 24, md: 12, lg: 12, xl: 12, xxl: 12 },
onValuesChange = (changedValues, allValues) => {
//console.log(changedValues, allValues);
},
disabled
}) {
let proformRef = useRef();
proformRef = formRef ?? proformRef;
return (
{
return [
,
,
];
},
}
}
grid={true}
rowProps={{
gutter: 12,
}}
request={async (params) => {
if (detailpath) {
let res = await doFetch({ url: detailpath, params });
return {
...defaultFormValue,
...(res?.data?.data ?? {}),
};
} else {
return {
...defaultFormValue,
};
}
}}
autoFocusFirstInput
onValuesChange={(changedValues, allValues) => {
onValuesChange?.(changedValues, allValues,proformRef);
}}
>
it.valueType != "option")}
colProps={colProps}
proformRef={proformRef}
/>
);
}
export default InitForm;