import React, { useEffect, useState } from 'react'; import _ from 'lodash'; import { Form, Button } from 'antd'; import { config } from '../component/base/config'; import { transferAttr } from '../component/base/_utils/transferAttr'; import { setFormat, getFormat } from '../component/base'; import styles from './index.less'; const FormItem = Form.Item; const EditForm = (props: any) => { const [form] = Form.useForm(); const { data, rowData, onFinish, initialValues, onCancel, colsNum = 1, } = props; const [loading, setLoading] = useState(false); useEffect(() => { form.resetFields(); }, [data]); if (!rowData) { form.resetFields(); } const renderEditForm = (item: any) => { const { columnType, columnName, columnChsName, columnAttrObj, value, renderEditForm, readOnlyFlag, rules = [], validateFirst = true, validateTrigger = 'onChange', renderLabel, } = item; let detailConfig: any; if (typeof renderEditForm === 'function') { detailConfig = renderEditForm({ cellData: value, rowData, columnConfig: item }); } else { detailConfig = config[String(columnType)] || config['1']; } const EditComp: any = detailConfig.editComp; const newProps = { ...(detailConfig.componentAttr || {}), ...(columnAttrObj || {}), }; const transferColumn = transferAttr(columnType, newProps); return ( ); }; const formItemLayout = { labelCol: { span: 24 }, wrapperCol: { span: 24 }, }; const onSelfFinish = async (values: any) => { const newValues: any[] = []; _.keys(values).map((key) => { const item = data.find((temp: any) => { return temp.columnName === key; }); const { columnType, value, renderEditForm, readOnlyFlag } = item; if (readOnlyFlag) { return; } let detailConfig: any; if (typeof renderEditForm === 'function') { detailConfig = renderEditForm({ cellData: value, rowData, columnConfig: item }); } else { detailConfig = config[String(columnType)] || config['1']; } const cellValueList = setFormat(detailConfig, item, values[key], value); newValues.push({ columnCode: key, cellValueList, }); }); if (typeof onFinish === 'function') { await setLoading(true); await onFinish(newValues); await setLoading(false); } }; return (
{data.map((item: any, i: number) => { return (
1 && i % colsNum === 0 ? '-50px' : 0, paddingLeft: colsNum > 1 ? '50px' : 0, }} > {renderEditForm(item)}
); })}
); }; export default EditForm;