import React, { createElement, memo, useRef, useState } from 'react';
import {
ProForm,
ProFormDependency,
ProFormSelect,
ProFormText,
ProFormGroup,
ProFormList,
ProCard,
} from '@ant-design/pro-components';
import moment from 'moment';
import { doFetch } from '@/utils/doFetch';
import styles from './index.less';
import FormItems from './FormItems';
import ExtendField from '@/components/ExtendField';
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,
colProps: colProps,
key: item.dataIndex,
formRef: proformRef,
})}
>
);
}
})}
>
);
});
function InitForm({
formRef,
onFinish = (vals) => {
//console.log(vals);
},
formKey,
params = {},
detailpath = '',
defaultFormValue = {},
submitter,
fields,
extendField = '',
colProps = { xs: 24, sm: 24, md: 12, lg: 12, xl: 12, xxl: 12 },
onValuesChange = (changedValues, allValues) => {
//console.log(changedValues, allValues);
},
}) {
let proformRef = useRef();
proformRef = formRef ?? proformRef;
return (
{
if (detailpath) {
let res = await doFetch({ url: detailpath, params });
// console.log({
// ...(res?.data?.data ?? {}),
// ...defaultFormValue,
// });
if (extendField) {
let obj = {};
res?.data?.data[extendField]?.forEach((it) => {
obj[it?.fieldId] = it?.fieldRealValue;
});
//console.log('extendField:', obj);
return {
...(res?.data?.data ?? {}),
...obj,
...defaultFormValue,
};
}
return {
...(res?.data?.data ?? {}),
...defaultFormValue,
};
} else {
// console.log({
// ...defaultFormValue,
// });
return {
...defaultFormValue,
};
}
}}
autoFocusFirstInput
onValuesChange={(changedValues, allValues) => {
onValuesChange?.(changedValues, allValues);
}}
>
it.valueType != 'option')}
colProps={colProps}
proformRef={proformRef}
/>
);
}
export default InitForm;