import React, { useState, useEffect } from "react"; import { Tag, Button, Card, Table, Select, Input, Flex, Typography, Row, Col, message, Tooltip, Collapse, } 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 InternalReviewContent = (props) => { const projectId = router.query?.id; const { internalReviewDetail, internalReviewAssignLoading, internalReviewConfirmLoading, internalReviewDetailLoading, } = props.safetyEvalBusiness || {}; const { internalReview, reviewers, reviewItems } = internalReviewDetail || {}; const [rows, setRows] = useState([]); const [overallOpinion, setOverallOpinion] = useState(""); const [selectedReviewer, setSelectedReviewer] = useState(undefined); const fetchDetail = () => { props.evalInternalReviewDetail({ projectId }).then((res) => { if (res?.success && res.data.signTaskPersonCo) { setSelectedReviewer(res.data.signTaskPersonCo?.signerPersonnelId); } }); }; useEffect(() => { if (projectId) fetchDetail(); }, [projectId]); useEffect(() => { if (reviewItems) { setRows( reviewItems.map((item) => ({ ...item, _key: item.id || item.reviewDimensionCode, })), ); } if (internalReview?.opinionContent) { setOverallOpinion(internalReview.opinionContent); } }, [internalReviewDetail]); const updateRow = (index, field, value) => { const next = [...rows]; next[index] = { ...next[index], [field]: value }; setRows(next); }; const isDispatched = internalReview?.reviewerSignatureTaskStatus === "dispatched"; const problemCount = rows.filter( (r) => r.reviewConclusion === "not_conform_to", ).length; const handleAssign = async () => { if (!projectId) return; const result = await handleConfirm("not_passed"); if (!result) return; const res = await props.evalInternalReviewAssign({ projectId, signTaskPersonCmd: { signerPersonnelId: selectedReviewer, signerName: reviewers.find( (item) => item.personnelId === selectedReviewer, )?.personnelName, }, }); if (res?.success !== false) { message.success("已下发签字任务"); fetchDetail(); } }; const handleConfirm = async (resultCode) => { if (!rows.every((r) => r.reviewConclusion)) { message.error("请填写审核结论"); return; } return new Promise(async (resolve, reject) => { if (!projectId) return; const payload = { id: internalReview?.id, projectId, resultCode, opinionContent: overallOpinion, reviewItems: rows.map((r) => ({ bizType: "eval_internal_review", bizId: internalReview?.id, reviewDimensionCode: r.reviewDimensionCode, reviewDimensionName: r.reviewDimensionName, reviewFocus: r.reviewFocus, reviewConclusion: r.reviewConclusion, reviewOpinion: r.reviewOpinion, })), }; const res = await props.evalInternalReviewConfirm(payload); if (res?.success !== false) { message.success(resultCode === "passed" ? "已提交" : "已保存"); resolve(res); if (resultCode === "passed") { props.getDetail?.(); } } else { reject(); } }); }; const columns = [ { title: "审核维度", dataIndex: "reviewDimensionName", width: 100 }, { title: "审核重点", dataIndex: "reviewFocus", width: 160 }, { title: "结论", dataIndex: "reviewConclusion", width: 120, render: (val, _, idx) => ( ), }, { title: "审核意见", dataIndex: "reviewOpinion", width: 180, render: (val, _, idx) => ( updateRow(idx, "reviewOpinion", e.target.value)} /> ), }, ]; return (