import { Form, Modal, Row, Col, Input, DatePicker, Icon, Button, Divider, Steps, Select, TreeSelect, InputNumber, Upload, Space, } from 'antd'; import ModuleTitle from '../../../components/ModuleTitle/moduleTitle'; import { useEffect, useMemo, useState } from 'react'; import { queryDepList, querySupplierList } from '@/services/contract'; import { useModel, useRequest } from '@umijs/max'; import { CloudUploadOutlined } from '@ant-design/icons'; import styles from '../index.less'; import dayjs from 'dayjs'; export const Type = { add: 0, //新增 detail: 1, //详情 cancel: 2, //作废 check: 3, //审核 }; export const StatusText = [ '', '待审核', '审核拒绝', '已存档', '作废待审核', '作废拒绝', '已作废', ]; export const Status = { None: 0, Checking: 1, CheckReject: 2, CheckSuccess: 3, CalChecking: 4, CalCheckReject: 5, CalCheckSuccess: 6, }; const ContractModal = (props) => { const [form] = Form.useForm(); const { user } = useModel('userInfo'); const { userList, run: userListRun } = useModel('userList'); const { depList, run: depListRun } = useModel('depList'); const FORMAT = 'YYYY-MM-DD'; const { detail: data, type, visible, projectList = [], handleOk, handleCancel, parent_id, } = props; const title = type == Type.add ? '新增' : type == Type.detail ? '详情' : '作废'; //所属公司为总部时才能选择部门,为子公司时,部门不能操作 所属部门为子公司的需要填经办人 const company = Form.useWatch('company_id', form); const [depDisable, setDepDisable] = useState(false); const [dealDisable, setDealDisable] = useState(false); //项目名称选择后,自动填入对应的项目编号 const project_name = Form.useWatch('project_name', form); const [isPass, setIsPass] = useState(1); const [fileList, setFileList] = useState([]); useEffect(() => { userListRun(); depListRun(); }, []); useEffect(() => { form.resetFields(); }, [data]); //供应商列表 const { data: supplierList = [], loading } = useRequest(querySupplierList, { defaultParams: [ { project_id: 1, is_super: false, }, ], formatResult: (data) => { return data?.list ? data.list.map((item) => { return { ...item, Name: item.name }; }) : []; }, }); console.log('======================', data); useEffect(() => { if (company == 135) { setDepDisable(false); setDealDisable(false); } else { setDepDisable(true); setDealDisable(true); form.setFieldsValue({ deal_by: user?.CName }); } }, [company]); useEffect(() => { const project_code = projectList?.find( (item) => item.project_name == project_name, )?.project_full_code; if (project_code) form.setFieldsValue({ project_code }); }, [project_name]); const supplyList = useMemo(() => { return depList ? [...depList, ...supplierList] : supplierList; }, [depList, supplierList]); const disableds = useMemo(() => { if (!visible) { setFileList([]); setIsPass(1); setDepDisable(false); setDealDisable(false); } if (type == Type.add) { return { contract: false, check: true }; } else if (type == Type.detail) { return { contract: true, check: true }; } else if (type == Type.cancel) { return { contract: true, check: true }; } return { contract: true, check: false }; }, [type, visible]); const UploadProps = { action: `/api/contract/v1/attach`, headers: { 'JWT-TOKEN': localStorage.getItem('JWT-TOKEN'), }, onChange({ file, fileList }) { if (file.status !== 'uploading') { console.log(file, fileList); setFileList(fileList.map((item) => item.response?.data?.attach)); } }, }; const handleSubmit = () => { form.validateFields().then((values) => { if (type == Type.add) { values.effect_on = dayjs(values.effect_on).format(FORMAT); values.created_on = values.created_on || dayjs().format(FORMAT); if (parent_id) values.parent_id = parent_id; if (values.amount || values.amount == 0) values.amount = values.amount + ''; if (fileList.length > 0) values.attach = JSON.stringify(fileList); if (values.party_c && values.party_c.length > 0) values.party_c = values.party_c.join(','); if (values.company_id == 135 && values.dep_id) { const item = getDepItemById(values.dep_id); if (item) { values.dep_name = item.Name; values.dep_code = item.Code; } const companyItem = getDepItemById(values.company_id); if (companyItem) values.company_name = companyItem.Name; } else if (values.company_id) { const item = getDepItemById(values.company_id); if (item) { values.company_name = item.Name; values.company_code = item.Code; } } values.created_by = user?.ID; handleOk(values); } else if (type == Type.cancel) { let result = { id: data?.id, cancel_desc: values.cancel_desc, }; handleOk(result); } else if (type == Type.check && data?.status == Status.Checking) { let result = { id: data?.id, check_by: user.CName, check_result: values.check_result, is_pass: values.is_pass, check_desc: values?.check_desc, }; handleOk(result); } }); }; const getDepItemById = (id) => { const fun = (list) => { for (let i = 0; i < list.length; i++) { let item = list[i]; if (item.ID == id) { return item; } else if (item.children?.length > 0) { let res = fun(item.children); if (res) return res; } } }; return fun(depList); }; return (
{type == Type.add ? ( ) : ( )} {/* )} */} {type == Type.check && (data.status == Status.Checking || data.status == Status.CalChecking) && ( <> {!isPass && ( )} )} {type != Type.add && ( <>
发起人:{data?.created_name}
发起时间:{data?.created_on}
), }, { title: '审核', description: ( <>
审核人:{data?.check_by}
审核时间:{data?.check_on}
{data?.check_desc && (
拒绝原因:{data?.check_desc}
)} ), }, { title: data?.status >= Status.CheckSuccess ? StatusText[Status.CheckSuccess] : StatusText[data?.status], }, ]} />
)} {(type == Type.cancel || data?.status >= Status.CalChecking) && ( <> )} {type == Type.cancel && ( 确认作废该合同,作废提交后无法撤回 )} {type == Type.detail && data?.status >= Status.CalChecking && ( <>
发起人:{data?.created_name}
发起时间:{data?.created_on}
), }, { title: '审核', description: ( <>
审核人:{data?.cancel_check_by}
审核时间:{data?.cancel_check_on}
), }, { title: StatusText[data?.status], }, ]} />
)}
); }; export default ContractModal;