import React, { useState, useEffect } from "react"; import { Tag, Button, Card, Row, Col, Table, Select, Input, Flex, Typography, message } from "antd"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { tools } from "@cqsjjb/jjb-common-lib"; const { TextArea } = Input; const { router } = tools; const CONCLUSION_OPTIONS = [ { value: "conform_to", label: "符合" }, { value: "not_conform_to", label: "需修改" }, ]; const ControlContent = (props) => { const projectId = router.query?.id; const { processControlDetail, processControlFiles } = props.safetyEvalBusiness || {}; const { processControl, controllers, reviewItems } = processControlDetail || {}; // 当前步骤:1-过程控制审核 2-机构负责人签发 3-项目归档 const [step, setStep] = useState(1); // 过程控制审核 const [rows, setRows] = useState([]); const [opinionContent, setOpinionContent] = useState(""); // 项目归档 const [files, setFiles] = useState([]); const fetchDetail = () => { props.evalProcessControlDetail({ projectId }); }; const fetchFiles = () => { props.evalProcessControlFiles({ projectId }); }; useEffect(() => { if (projectId) { fetchDetail(); fetchFiles(); } }, [projectId]); useEffect(() => { if (reviewItems) { setRows( reviewItems.map((item) => ({ ...item, _key: item.id || item.reviewDimensionCode, })), ); } if (processControl?.opinionContent) { setOpinionContent(processControl.opinionContent); } }, [processControlDetail]); useEffect(() => { if (processControlFiles) { setFiles(processControlFiles); } }, [processControlFiles]); const updateRow = (index, field, value) => { const next = [...rows]; next[index] = { ...next[index], [field]: value }; setRows(next); }; const controllerName = processControl?.controllerName || ""; const isDispatched = processControl?.reviewerSignatureTaskStatus !== "non_dispatched"; const isSignatureCompleted = processControl?.reviewerSignatureTaskStatus === "completed"; const hasHandoverForm = !!processControl?.handoverFormUrl; const problemCount = rows.filter((r) => r.reviewConclusion === "not_conform_to").length; const canArchive = isSignatureCompleted && hasHandoverForm; // 过程控制签字提交(confirm) const handleConfirm = async (resultCode) => { if (!projectId) return; const payload = { id: processControl?.id, projectId, resultCode, opinionContent, reviewItems: rows.map((r) => ({ bizType: "eval_process_control", bizId: processControl?.id, reviewDimensionCode: r.reviewDimensionCode, reviewDimensionName: r.reviewDimensionName, reviewFocus: r.reviewFocus, reviewConclusion: r.reviewConclusion, reviewOpinion: r.reviewOpinion, })), }; const res = await props.evalProcessControlConfirm(payload); if (res?.success !== false) { message.success(resultCode === "passed" ? "已提交通过审核" : "已提交退回修改"); fetchDetail(); } }; // 下发签字任务(assign) const handleAssign = async () => { if (!projectId) return; const res = await props.evalProcessControlAssign({ projectId }); if (res?.success !== false) { message.success("已下发签字任务"); fetchDetail(); } }; // 生成归档交接单 const handleGenerateHandover = async () => { if (!projectId) return; const res = await props.evalProcessControlGenerateHandover({ projectId }); if (res?.success !== false) { message.success("归档交接单已生成"); fetchDetail(); } }; // 归档项目并入库 const handleArchive = async () => { if (!projectId) return; const res = await props.evalProcessControlArchive({ projectId }); if (res?.success !== false) { message.success("项目已归档入库"); fetchDetail(); } }; const reviewColumns = [ { title: "审核维度", dataIndex: "reviewDimensionName", width: 120 }, { title: "审核重点", dataIndex: "reviewFocus", width: 200 }, { title: "结论", dataIndex: "reviewConclusion", width: 120, render: (val, _, idx) => ( ), }, { title: "审核意见", dataIndex: "reviewOpinion", render: (val, _, idx) => ( updateRow(idx, "reviewOpinion", e.target.value)} /> ), }, ]; const fileColumns = [ { title: "流程名称", dataIndex: "processName", width: 100 }, { title: "条目名称", dataIndex: "itemName", width: 120 }, { title: "文件名称", dataIndex: "materialName", width: 200 }, { title: "文件地址", dataIndex: "projectDocUrl", width: 200, render: (url) => url ? ( 查看文件 ) : ( "-" ), }, { title: "资料类型", dataIndex: "materialType", width: 100 }, ]; const STEP_ITEMS = [ { key: 1, label: "过程控制审核" }, { key: 2, label: "机构负责人签发" }, { key: 3, label: "项目归档" }, ]; return (