import React, { useState, useEffect } from "react"; import { Form, Button, Input, Select, Row, Col, Card, message, DatePicker, Flex, Tag, Radio, } from "antd"; import dayjs from "dayjs"; import { tools } from "@cqsjjb/jjb-common-lib"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; import useIndustryOptions from "~/hooks/useIndustryOptions"; import BaiduMapPicker from "~/components/BaiduMapPicker"; import { district } from "~/enumerate/constant"; import {QUALIFICATION_INDUSTRY_OPTIONS} from '~/enumerate/enterpriseOptions'; import { phoneRule } from "~/utils/validators"; import { renderCapabilityList } from "~/utils"; import StaffPickerModal from "./StaffPickerModal"; import { EVAL_TYPE_OPTIONS, CHECKIN_RADIUS_OPTIONS, INDUSTRY_REQUIRED_CAPABILITIES, } from "~/enumerate/constant"; const { router } = tools; const EvalProjectCreate = (props) => { const [form] = Form.useForm(); const [mapPickerVisible, setMapPickerVisible] = useState(false); const [staffPickerVisible, setStaffPickerVisible] = useState(false); const [selectedParticipants, setSelectedParticipants] = useState([]); const [detailLoading, setDetailLoading] = useState(false); const projectId = router.query?.id; // 编辑模式:仅可编辑项目参与人员,其余字段禁用 const isEditParticipant = !!projectId && router.query?.edit === "participant"; const isView = !!projectId && !isEditParticipant; const { evalProjectSaveLoading, evalProjectUpdateLoading, evalProjectDetailLoading, customerPage: customerList, } = props.safetyEvalBusiness; const industryOptions = useIndustryOptions(); // 是否法定项目选“否”(仅机构内部管理)时,行业类型默认全选;编辑/查看模式不联动,避免覆盖回填数据 const isStatutory = Form.useWatch("isStatutory", form); useEffect(() => { props.customerPage({ current: 1, size: 999 }); }, []); useEffect(() => { if (!projectId) return; (async () => { setDetailLoading(true); try { const res = await props.evalProjectDetail({ id: projectId }); if (res?.success !== false && res?.data) { const data = res.data; form.setFieldsValue({ ...data, planStartDate: data.planStartDate ? dayjs(data.planStartDate) : undefined, planEndDate: data.planEndDate ? dayjs(data.planEndDate) : undefined, }); if (data.participants?.length) { setSelectedParticipants( data.participants.map((p) => ({ id: p.id, userName: p.name, ...p, })), ); } } } finally { setDetailLoading(false); } })(); }, [projectId]); const handleMapConfirm = (location) => { const { lng, lat, address } = location; form.setFieldsValue({ longitude: lng, latitude: lat, customerAddress: address, }); setMapPickerVisible(false); }; /** 按所选业务范围(配备标准)筛选人员能力,仅提交范围内所需的专业能力条目 */ const filterCapacityByIndustry = (item, industryCodes) => { const requiredCaps = industryCodes.flatMap( (code) => INDUSTRY_REQUIRED_CAPABILITIES[code] || [], ); const capabilityAssessment= (item.capabilityAssessment || []).filter(item=>item.industryCode === industryCodes[0]) || []; if (!requiredCaps.length || !Array.isArray(capabilityAssessment)) { return capabilityAssessment?.length ? renderCapabilityList(capabilityAssessment, {capFlag: true}) : item.capacity; } const matched = capabilityAssessment.filter((cap) => requiredCaps.includes(cap.professionalCapabilityCode), ); return matched.length ? renderCapabilityList(matched, {capFlag: true}) : item.capacity; }; const handleSubmit = () => { form.validateFields().then(async (values) => { const { planStartDate, planEndDate, ...rest } = values; const industryCodes = String(values.industryCode || "").split(","); const params = { ...rest, planStartDate: planStartDate?.format("YYYY-MM-DD"), planEndDate: planEndDate?.format("YYYY-MM-DD"), participants: selectedParticipants.map((item) => ({ id: item.id, name: item.userName, deptName: item.deptName, posName: item.postName, capacity: filterCapacityByIndustry(item, industryCodes), })), }; if (projectId) { params.id = projectId; } const res = isEditParticipant ? await props.evalProjectUpdate(params) : await props.evalProjectSave(params); if (res?.success) { message.success(isEditParticipant ? "编辑成功" : "创建成功"); props.history.goBack(); } }); }; const handleStaffConfirm = (rows) => { setSelectedParticipants(rows); setStaffPickerVisible(false); }; return ( ) } loading={detailLoading} >
{ const end = form.getFieldValue("planEndDate"); if (value && end && value.isAfter(end)) { return Promise.reject("合同开始时间不能晚于合同完成时间"); } return Promise.resolve(); }, }, ]} > form.validateFields(["planEndDate"])} /> { const start = form.getFieldValue("planStartDate"); if (value && start && value.isBefore(start)) { return Promise.reject("合同完成时间不能早于合同开始时间"); } return Promise.resolve(); }, }, ]} > form.validateFields(["planStartDate"])} /> { form.setFieldValue('industryCode', '') }}> 是,纳入监管端监管 否,仅机构内部管理 ({ value: value ? String(value).split(",") : [], })} getValueFromEvent={(value) => Array.isArray(value) ? value.join(",") : value } > */} setStaffPickerVisible(true)} style={{ cursor: "pointer", width: 400 }} /> {selectedParticipants.length > 0 && ( {selectedParticipants.map((item) => ( setSelectedParticipants((prev) => prev.filter((r) => r.id !== item.id), ) } > {item.userName} ))} )}
setStaffPickerVisible(false)} onConfirm={handleStaffConfirm} selectedIds={selectedParticipants.map((item) => item.id)} selectedParticipants={selectedParticipants} /> setMapPickerVisible(false)} onConfirm={handleMapConfirm} />
); }; export default Connect([NS_SAFETY_EVAL_BUSINESS], true)(EvalProjectCreate);