import React, { useState, useEffect } from "react"; import { Tag, Button, Card, Table, Input, Flex, Popover, Image, Row, Col, DatePicker, Form, message, } from "antd"; import dayjs from "dayjs"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { tools } from "@cqsjjb/jjb-common-lib"; const { router } = tools; const ArchiveContent = ({ readOnly, ...props }) => { const projectId = router.query?.id; const { processControlDetail, processControlFiles, evalProjectDetailData } = props.safetyEvalBusiness || {}; const { processControl } = processControlDetail || {}; const [files, setFiles] = useState([]); const [archiveForm] = Form.useForm(); const fetchDetail = () => { props.evalProcessControlDetail({ projectId }); }; const fetchFiles = () => { props.evalProcessControlFiles({ projectId }); }; useEffect(() => { if (projectId) { fetchDetail(); fetchFiles(); } }, [projectId]); useEffect(() => { if (processControlDetail) { archiveForm.setFieldsValue({ projectNo: evalProjectDetailData.projectNo, archiveTransferorName: processControlDetail.archiveTransferorName || "", archiveArchivistName: processControlDetail.archiveArchivistName || "", archiveDate: processControlDetail.archiveDate ? dayjs(processControlDetail.archiveDate) : null, }); } }, [processControlDetail]); useEffect(() => { if (processControlFiles) { setFiles(processControlFiles); } }, [processControlFiles]); const isSignatureCompleted = processControl?.reviewerSignatureTaskStatus === "completed"; const canArchive = isSignatureCompleted; const handleArchive = async () => { if (!projectId) return; const values = await archiveForm.validateFields(); const res = await props.evalProcessControlArchive({ projectId, ...values }); if (res?.success !== false) { message.success("项目已归档入库"); fetchDetail(); props.getDetail?.(); } }; const isImage = (name) => /\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i.test(name || ""); const fileColumns = [ { title: "流程名称", dataIndex: "processName", ellipsis: true }, { title: "条目名称", dataIndex: "itemName", ellipsis: true }, { title: "文件", dataIndex: "projectDocUrl", render: (val) => { let fileList = []; if (typeof val === "string") { try { fileList = JSON.parse(val); } catch { fileList = []; } } else if (Array.isArray(val)) { fileList = val; } if (!fileList.length) return "-"; return ( {fileList.map((f, i) => { const url = f.url || f.response?.url; return isImage(f.name) ? ( {} ) : ( window.open(url)} > {f.name || "查看文件"} ); })} } trigger="hover" placement="topLeft" > e.preventDefault()} style={{ cursor: "pointer" }} > {fileList.length}个附件 ); }, }, ]; return (
项目归档 项目过程文件清单,确认签字完成后归档入库
`${record.processName}-${record.materialName}-${record.itemName}` } pagination={false} size="small" /> {processControlDetail?.archiveDate && ( )} {!readOnly && ( )} ); }; export default Connect([NS_SAFETY_EVAL_BUSINESS], true)(ArchiveContent);