import { connect, useRequest } from 'umi' import { useEffect, useRef, useState } from 'react' import { message, Tabs } from 'antd' import { getApprovalList, setApproval } from '@/services/api/project' import { queryAcountList } from '@/services/api/institution' import { delay } from '@/utils/util' import FormRender, { useForm } from 'form-render' import { BaseMenuEnum } from '@/pages/Schema/Base' import type { SchemaBaseModelState } from '@/pages/Schema/Base/model' import type { ConnectProps } from 'umi' import type { ProjectModelState } from '../../model' import ProForm, { ProFormSelect } from '@ant-design/pro-form' export enum ModalType { ADD = 0, UPDATE = 1 } type ProjectModalProps = ConnectProps & { visible: boolean onVisibleChange: (visible: boolean) => void readOnly: boolean type: ModalType defaultFormData?: { ID: string name: string } reloadTable: () => void schema?: Record | null } const DetailModal: React.FC = ({ visible, onVisibleChange, readOnly, dispatch, schema, defaultFormData, pTypeList, reloadTable }) => { // console.log(defaultFormData) const form = useForm() const ref = useRef(null) const { TabPane } = Tabs const [state, setState] = useState({ acountList: [], approvalList: [], activeKey: '' }) const { run: tryAcountList } = useRequest(() => queryAcountList(), { manual: true, onSuccess: result => { setState({ ...state, acountList: result.items }) } }) const { run: tryApprovalList } = useRequest(() => getApprovalList(), { manual: true, onSuccess: result => { setState({ ...state, approvalList: result.items }) } }) const { run: trySetApproval } = useRequest(setApproval, { manual: true, onSuccess: () => { message.success('提交成功') } }) useEffect(() => { if (visible && !schema) { dispatch({ type: 'schemaBase/querySchema', payload: { columnType: BaseMenuEnum.PROJECT } }) } if (state.activeKey === '2') { const TabFormData = { accountID: defaultFormData.approval.name, approvalID: defaultFormData.reportAccount.name } ref.current?.setFieldsValue({ ...TabFormData }) } }, [visible, state.activeKey]) const onMount = () => { const currentFormData = { ...defaultFormData } const keys = Object.keys(currentFormData) keys.forEach(key => { if (currentFormData[key] instanceof Object) { const targetMap = currentFormData[key] delete currentFormData[key] currentFormData[`${key}ID`] = targetMap.ID } }) // console.log(currentFormData) form.setValues({ ...currentFormData }) // form.setValues({ ...defaultFormData }) delay(80).then(() => { form.setSchemaByPath('projectTypeID', { enum: pTypeList.map(item => item.value), enumNames: pTypeList.map(item => item.label) }) }) } const onChange = key => { setState({ ...state, activeKey: key }) if (key === '2') { if (!state.acountList?.length) { tryAcountList() } if (!state.approvalList?.length) { tryApprovalList() } } } const onFinish = async (formData, value) => { await trySetApproval({ ...formData, ...value, ID: defaultFormData.ID }) onVisibleChange(false) reloadTable() } return ( {schema && } ({ label: item.name, value: item.ID }))} /> ({ label: item.name, value: item.ID }))} /> // { // // ref.current?.resetFields() // setVisible(false) // }} // title={defaultFormData?.name}> // // // {schema && ( // // )} // // // // ({ // label: item.name, // value: item.ID // }))} // /> // ({ // label: item.name, // value: item.ID // }))} // /> // // // // ) } export default connect( ({ project, schemaBase }: { project: ProjectModelState; schemaBase: SchemaBaseModelState }) => ({ pTypeList: project.projectTypeList.map(item => ({ label: item.name, value: item.ID })), schema: schemaBase.base[BaseMenuEnum.PROJECT]?.schema }) )(DetailModal)