From 7a60b03f8c045a3b54f771858ee8aca9062ff70b Mon Sep 17 00:00:00 2001 From: jlzhangyx5 Date: Fri, 11 Jul 2025 08:59:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E8=AF=84=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/JuryRoom/router_menuJury.config.ts | 4 +- .../Manager/components/Manager.tsx | 131 ++- .../ManagerOffline/components/Manager.tsx | 749 ++++++++++++++++++ .../index.tsx | 2 +- 4 files changed, 816 insertions(+), 70 deletions(-) create mode 100644 src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/components/Manager.tsx rename src/pages/Evaluation/projectManager/ReviewResults/{ManagerEntry => ManagerOffline}/index.tsx (87%) diff --git a/config/JuryRoom/router_menuJury.config.ts b/config/JuryRoom/router_menuJury.config.ts index 9e6c9ae..ba8195c 100644 --- a/config/JuryRoom/router_menuJury.config.ts +++ b/config/JuryRoom/router_menuJury.config.ts @@ -40,8 +40,8 @@ export default [//评标 }, //评审结果-线下评审-项目经理 { - path: '/EvaRoom/Evaluation/projectManager/ReviewResults/ManagerEntry', - component: './Evaluation/projectManager/ReviewResults/ManagerEntry', + path: '/EvaRoom/Evaluation/projectManager/ReviewResults/ManagerOffline', + component: './Evaluation/projectManager/ReviewResults/ManagerOffline', }, //评审结果-组长 { diff --git a/src/pages/Evaluation/projectManager/ReviewResults/Manager/components/Manager.tsx b/src/pages/Evaluation/projectManager/ReviewResults/Manager/components/Manager.tsx index 0b0095c..b8b363c 100644 --- a/src/pages/Evaluation/projectManager/ReviewResults/Manager/components/Manager.tsx +++ b/src/pages/Evaluation/projectManager/ReviewResults/Manager/components/Manager.tsx @@ -1,14 +1,15 @@ import { getReviewResult, unlockReportIF, unlockResult } from '@/pages/Evaluation/expert/ReviewResults/GroupLeader/service'; import { getDictName, isEmpty, isNotEmpty } from '@/utils/CommonUtils'; import ProTable from '@ant-design/pro-table'; -import { Button, Card, Col, Collapse, message, Modal, Popover, Row, Space, Spin, Typography } from 'antd'; +import { Button, Card, Col, Collapse, message, Modal, Popover, Row, Space, Spin, Typography, Checkbox } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import Weboffice from "@/pages/webOffice/weboffice"; -import { finishFlow, getAssessRoomStatus, queryReviewReport, reviewReportSave, reviewReportSend } from '../../service'; +import { finishFlow, getAssessRoomStatus, queryReviewReport, reviewReportSave, reviewReportSend, saveSignPdfReport } from '../../service'; import { commonMessage } from '@/utils/MessageUtils'; import { getDefId, getDicData, getProMethod, getRoomId, getSessionRoleData } from '@/utils/session'; import { btnAuthority } from '@/utils/authority'; import WebOffice0609, { WebOfficeRefProps } from '@/pages/webOffice/weboffice0609'; +import PdfModal from '@/utils/PdfModal/PdfModal'; import ReviewReportUpload from '@/utils/ReviewReportUpload'; import { getFileListByBid } from '@/utils/DownloadUtils'; import MACAddressPrompt from '@/pages/Evaluation/BidControl/BidControlManager/components/MACAddressPrompt'; @@ -33,7 +34,7 @@ const Manager: React.FC = () => { //评审 报告 数据 const [resultReportData, setResultReportData] = useState({}); //评审报告按钮点击禁用状态 - const [reviewReport, setReviewReport] = useState(null); + const [reviewReport, setReviewReport] = useState(''); //评审室 const [evaluationRoom, setEvaluationRoom] = useState({}); //获取字典 @@ -49,14 +50,18 @@ const Manager: React.FC = () => { const defId = getDefId(); //表头 const [column, setColumn] = useState([]); - //是否点击保存 - const [saveFlag, setSaveFlag] = useState(false); //资格审查方式 const [ptcpMode, setPtcpMode] = useState(); //评审结果状态 const [reviewResultStatus, setReviewResultStatus] = useState(); //报价类型 %-百分比类型(折扣率,优惠率)元-数值类型(总价,单价) const [quotationMethod, setQuotationMethod] = useState('元'); + //评审报告-专家在线签名选择 + const [signatureSelect, setSignatureSelect] = useState(false); + //评审报告-PDF弹窗控制 + const [pdfModalVisible, setPdfModalVisible] = useState(false); + //评审报告-生成文档 + const [generatingLoading, setGeneratingLoading] = useState(false); //初始化显示字段 const candidateType = bidMethodDict == 'procurement_mode_1' || bidMethodDict == 'procurement_mode_2' ? '中标' : '中选';//初始化中标中选字段 //评审报告附件modal visible @@ -517,6 +522,7 @@ const Manager: React.FC = () => { const roleType = 3; const [docFileCode, setDocFileCode] = useState('');//文档id + const [pdfFileCode, setPdfFileCode] = useState('');//pdf文档id const [ids, setIds] = useState('');//评审报告id const [docReadOnly] = useState("false");//是否可编辑 const [docSaveBtn] = useState("compact");//保存按钮是否展示 @@ -555,11 +561,14 @@ const Manager: React.FC = () => { let data = res.data; setResultReportData(data); setDocFileCode(isEmpty(data.reportTextId) ? '' : data.reportTextId); + setPdfFileCode(isEmpty(data.signDocId) ? '' : data.signDocId) setReportUploadId(isEmpty(data?.annexId) ? '' : data?.annexId) getFileList(data?.annexId)//获取文件列表 setIds(data?.id) setExpertTableData(data.expertList); - setReviewReport(String(data.status) === '0'); + setReviewReport(String(data.status)); + setSignatureSelect(String(data.signStatus) == '1') + setIds(data?.id) } }) //查询评审室状态 @@ -625,7 +634,7 @@ const Manager: React.FC = () => { const verificationOffice = () => { - if (ref.current?.DocFileCode == '') { + if (ref.current?.DocFileCode == '' || ref.current?.PDFFileCode == '') { message.warn("您未编辑office文件!"); return false; } @@ -637,28 +646,44 @@ const Manager: React.FC = () => { const saveReport = () => { if (verificationOffice()) { let reportTextId = ref.current?.DocFileCode; + let signDocId = ref.current?.PDFFileCode; let params = { id: resultReportData.id, reportTextId: reportTextId, + signDocId: signDocId, annexId: reportUploadId } reviewReportSave(params).then(res => { - let flag = commonMessage(res); - setSaveFlag(flag); - init(); + commonMessage(res); }) } } + + /** + * 评审报告-专家在线签名onChange + * @param event + */ + const onSignatureChange = (event: any) => { + setSignatureSelect(event.target.checked) + } + + //生成pdf报告 + const toSignPdfReport = () => { + setGeneratingLoading(true) + saveSignPdfReport(resultReportData.id).then(res => { + commonMessage(res); + init(); + }).finally(() => { + setGeneratingLoading(false) + }) + } + /** * 发送专家确认 */ const sendExpertConfirmation = () => { if (verificationOffice()) { - if (!saveFlag) { - message.warn('请先点击保存按钮,才能发送专家确认'); - return; - } - reviewReportSend(resultReportData.id).then(res => { + reviewReportSend(resultReportData.id,{signStatus: signatureSelect ? '1' : '0'}).then(res => { commonMessage(res); init(); }) @@ -769,62 +794,33 @@ const Manager: React.FC = () => { + 专家在线签名 + {/* */} {!reviewReport && reportFileList.length == 0 ? null : } - + {/* */} {/* */} - + + - { - reviewReport !== null && ( - <> - { - reviewReport ? ( - - { - ids != '' && isNotEmpty(evaluationRoom?.id) ? ( - // - - ) : null - } - - ) : ( - - {ids !== '' ? ( - // - - ) : null} - - ) - } - - ) - } + + { + reviewReport != '3' ? (ids != '' && isNotEmpty(evaluationRoom?.id) ? ( + + ) : null) : ( + 评审报告已生成,点击  即可查看和下载评审报告文档 + ) + } + @@ -836,11 +832,12 @@ const Manager: React.FC = () => { + {pdfModalVisible && setPdfModalVisible(false)} downLoadFileName="评审报告"/>} {reportUploadVisible && { diff --git a/src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/components/Manager.tsx b/src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/components/Manager.tsx new file mode 100644 index 0000000..a639fff --- /dev/null +++ b/src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/components/Manager.tsx @@ -0,0 +1,749 @@ +import { getReviewResult, unlockReportIF, unlockResult } from '@/pages/Evaluation/expert/ReviewResults/GroupLeader/service'; +import { getDictName, getURLInformation, isEmpty, isNotEmpty } from '@/utils/CommonUtils'; +import ProTable from '@ant-design/pro-table'; +import { Button, Card, Col, Collapse, message, Modal, Popover, Row, Space, Spin, Typography, Checkbox, Upload, Form } from 'antd'; +import React, { useEffect, useRef, useState } from 'react'; +import Weboffice from "@/pages/webOffice/weboffice"; +import { finishFlow, getAssessRoomStatus, queryReviewReport, reviewReportSave, reviewReportSend, saveSignPdfReport } from '../../service'; +import { commonMessage } from '@/utils/MessageUtils'; +import { getDefId, getDicData, getProMethod, getRoomId, getSessionRoleData, getSessionUserData, getUserToken } from '@/utils/session'; +import { btnAuthority } from '@/utils/authority'; +import WebOffice0609, { WebOfficeRefProps } from '@/pages/webOffice/weboffice0609'; +import PdfModal from '@/utils/PdfModal/PdfModal'; +import ReviewReportUpload from '@/utils/ReviewReportUpload'; +import { getFileListByBid } from '@/utils/DownloadUtils'; +import MACAddressPrompt from '@/pages/Evaluation/BidControl/BidControlManager/components/MACAddressPrompt'; +import RiskModal from '@/components/RiskModal'; +import { isLeaderConfirm } from '@/components/BiddingRoom/service'; +import FileDown from '@/utils/Download'; +import ExtendUpload from '@/utils/ExtendUpload'; + +const { Panel } = Collapse; +const { Paragraph, Text } = Typography; + +const firstRvwResult = ['否', '是']; +const winnerCandidate = ['否', '是']; +/** + * 项目经理 + */ +const Manager: React.FC = () => { + //供应商table数据 + const [supplierTableData, setSupplierTableData] = useState([]); + //评审结果加载 + const [resultReviewLoading, setResultReviewLoading] = useState(false); + //专家确认情况table数据 + const [expertTableData, setExpertTableData] = useState([]); + //评审 报告 数据 + const [resultReportData, setResultReportData] = useState({}); + //评审报告按钮点击禁用状态 + const [reviewReport, setReviewReport] = useState(''); + //评审室 + const [evaluationRoom, setEvaluationRoom] = useState({}); + //获取字典 + const getDict: any = getDicData(); + const dictData = JSON.parse(getDict); + //1预审 2后审 + const [roomType, setRoomType] = useState("2"); + //1预审名(资审) 2后审名(评审) + const [roomTypeName, setRoomTypeName] = useState(""); + //采购方式 + const bidMethodDict = getProMethod(); + //流程id + const defId = getDefId(); + //表头 + const [column, setColumn] = useState([]); + //资格审查方式 + const [ptcpMode, setPtcpMode] = useState(); + //评审结果状态 + const [reviewResultStatus, setReviewResultStatus] = useState(); + //报价类型 %-百分比类型(折扣率,优惠率)元-数值类型(总价,单价) + const [quotationMethod, setQuotationMethod] = useState('元'); + //评审报告-专家在线签名选择 + const [signatureSelect, setSignatureSelect] = useState(false); + //评审报告-PDF弹窗控制 + const [pdfModalVisible, setPdfModalVisible] = useState(false); + //评审报告-生成文档 + const [generatingLoading, setGeneratingLoading] = useState(false); + //初始化显示字段 + const candidateType = bidMethodDict == 'procurement_mode_1' || bidMethodDict == 'procurement_mode_2' ? '中标' : '中选';//初始化中标中选字段 + //评审报告附件modal visible + const [reportUploadVisible, setReportUploadVisible] = useState(false); + //评审报告附件id + const [reportUploadId, setReportUploadId] = useState(''); + //评审报告附件列表 + const [reportFileList, setReportFileList] = useState([]); + //专家打分表附件列表 + const [offlineReviewFile, setOfflineReviewFile] = useState(''); + //其他文件附件列表 + const [offlineOtherFile, setOfflineOtherFile] = useState(''); + //评审结果编辑综合得分展开关闭 + const [expandTotalScore, setExpandTotalScore] = useState(true); + //评审结果数据 + const [resultData, resultDataSet] = useState({}) + //风险提示文字弹窗控制 + const [riskVisible, setRiskVisible] = useState(false); + //获取角色 + const role = getSessionRoleData().roleCode; + useEffect(() => { + if (JSON.stringify(resultData) === '{}') { + init(); + } + getColumns() + }, [expandTotalScore, resultData]); + + //初审详审原因render + const rvwResultRender = (field: any, reason: any) => { + const content = ( + +
{reason}
+
+ ) + return isEmpty(field) || field == '-' ? '-' : ( + + {firstRvwResult[field]} + {field == 0 && + 说明 + } + ) + } + + //后审 + const columns: any[] = [ + { + title: '排名', + fixed: 'left', + width: 50, + dataIndex: 'sort', + }, + { + title: '供应商名称', + dataIndex: 'companyName', + width: 110, + render: (_: any, record: any) => { + if (record.problemInfoList != null) { + let count = 0; + record.problemInfoList.forEach((ele: any) => { + if (ele.problemType == 1) {//MAC地址重复 + count += 1; + } + }); + if (count > 0) { + return ( + <> + {_} + {} + + ) + } + return _; + } + return _; + } + }, + { + title: `报价(${quotationMethod})`, + dataIndex: 'price', + width: 100, + }, + { + title: `评审价(${quotationMethod})`, + dataIndex: 'priceReview', + width: 100, + }, + { + title: '商务分', + dataIndex: 'businessScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '技术分', + dataIndex: 'technicalScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '服务分', + dataIndex: 'serviceScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '价格分', + dataIndex: 'priceScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: ( + + 综合得分 + setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"} + + ), + dataIndex: 'totalScore', + width: 120, + }, + { + title: '是否通过初步评审', + dataIndex: 'firstRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason) + }, + { + title: '是否通过详审', + dataIndex: 'detailRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason) + }, + { + title: '应答是否有效', + dataIndex: 'answerValid', + valueType: 'text', + width: 100, + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + }, + { + title: `是否${candidateType}候选人`, + width: 120, + dataIndex: 'winnerCandidate', + render: (_: any, record: any) => winnerCandidate[_] + }, + { + title: `是否拟${candidateType}人`, + dataIndex: 'winnerBidder', + valueType: 'text', + width: 120, + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + }, + { + title: '拟签约金额(不含增值税)(元)', + width: 130, + dataIndex: 'contractedMoney', + }, + { + title: '增值税金额(元)', + width: 130, + dataIndex: 'taxRatePrice', + }, + ]; + //预审 + const columns2: any[] = [ + { + title: '排名', + fixed: 'left', + width: 50, + dataIndex: 'sort', + }, + { + title: '供应商名称', + dataIndex: 'companyName', + width: 110, + render: (_: any, record: any) => { + if (record.problemInfoList != null) { + let count = 0; + record.problemInfoList.forEach((ele: any) => { + if (ele.problemType == 1) {//MAC地址重复 + count += 1; + } + }); + if (count > 0) { + return ( + <> + {_} + {} + + ) + } + return _; + } + return _; + } + }, + { + title: '商务分', + dataIndex: 'businessScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '技术分', + dataIndex: 'technicalScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '服务分', + dataIndex: 'serviceScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '价格分', + dataIndex: 'priceScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: ( + + 综合得分 + setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"} + + ), + dataIndex: 'totalScore', + width: 120, + }, + { + title: '资格审查方式', + width: 100, + dataIndex: 'ptcpMode', + render: (_: any, record: any) => getDictName(dictData['ptcp_mode=section'], ptcpMode) + }, + { + title: '是否通过初步评审', + dataIndex: 'firstRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason) + }, + { + title: '是否通过详审', + dataIndex: 'detailRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason) + }, + { + title: '应答是否有效', + dataIndex: 'answerValid', + valueType: 'text', + width: 100, + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + }, + { + title: '审核结果', + width: 120, + dataIndex: 'winnerCandidate', + valueEnum: { + 0: { text: '不通过' }, + 1: { text: '通过' }, + }, + }, + ]; + + //询价字段 procurement_mode_7 + const enquiryColumns = [ + { + title: '排名', + fixed: 'left', + width: 70, + dataIndex: 'sort', + }, + { + title: '供应商名称', + dataIndex: 'companyName', + width: 210, + render: (_: any, record: any) => { + if (record.problemInfoList != null) { + let count = 0; + record.problemInfoList.forEach((ele: any) => { + if (ele.problemType == 1) {//MAC地址重复 + count += 1; + } + }); + if (count > 0) { + return ( + <> + {_} + {} + + ) + } + return _; + } + return _; + } + }, + { + title: '报价总金额净价(元)', + dataIndex: 'price', + width: 170, + }, + { + title: '报价总金额含税价(元)', + dataIndex: 'priceReview', + width: 170, + }, + { + title: '商务分', + dataIndex: 'businessScore', + }, + { + title: '技术分', + dataIndex: 'technicalScore', + }, + { + title: '服务分', + dataIndex: 'serviceScore', + }, + { + title: '价格分', + dataIndex: 'priceScore', + }, + { + title: '综合得分', + dataIndex: 'totalScore', + }, + { + title: '是否通过初步评审', + width: 130, + dataIndex: 'firstRvwResult', + valueType: 'text', + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + // render: (_: any) => firstRvwResult[_], + }, + { + title: `是否${candidateType}候选人`, + width: 120, + dataIndex: 'winnerCandidate', + render: (_: any, record: any) => winnerCandidate[_] + }, + ]; + + //招募 + const columns4: any[] = [ + { + title: '排名', + fixed: 'left', + width: 50, + dataIndex: 'sort', + }, + { + title: '供应商名称', + dataIndex: 'companyName', + width: 110, + render: (_: any, record: any) => { + if (record.problemInfoList != null) { + let count = 0; + record.problemInfoList.forEach((ele: any) => { + if (ele.problemType == 1) {//MAC地址重复 + count += 1; + } + }); + if (count > 0) { + return ( + <> + {_} + {} + + ) + } + return _; + } + return _; + } + }, + { + title: '商务分', + dataIndex: 'businessScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '技术分', + dataIndex: 'technicalScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: '服务分', + dataIndex: 'serviceScore', + width: 60, + hideInTable: expandTotalScore, + }, + { + title: ( + + 综合得分 + setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"} + + ), + dataIndex: 'totalScore', + width: 120, + }, + { + title: '是否通过初步评审', + dataIndex: 'firstRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason) + }, + { + title: '是否通过详审', + dataIndex: 'detailRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason) + }, + { + title: '应答是否有效', + dataIndex: 'answerValid', + valueType: 'text', + width: 100, + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + }, + { + title: '是否入围候选人', + width: 120, + dataIndex: 'winnerCandidate', + render: (_: any, record: any) => winnerCandidate[_] + }, + { + title: '是否拟入围人', + dataIndex: 'winnerBidder', + valueType: 'text', + width: 120, + valueEnum: { + 0: { text: '否' }, + 1: { text: '是' }, + }, + }, + ]; + + //评审室id + const assessId = getRoomId(); + //角色—1、组长;2、专家;3、项目经理 + const roleType = 3; + + const [docFileCode, setDocFileCode] = useState('');//文档id + const [pdfFileCode, setPdfFileCode] = useState('');//pdf文档id + const [ids, setIds] = useState('');//评审报告id + const [docReadOnly] = useState("false");//是否可编辑 + const [docSaveBtn] = useState("compact");//保存按钮是否展示 + /*weboffice 相关*/ + const ref = useRef(); + // const WebofficeRef = useRef(null); + // const onRef = (ref: any) => { + // /* this.child = ref;*/ + // } + + /** + * 初始化数据 + */ + const init = () => { + setResultReviewLoading(true); + getReviewResult(assessId).then(res => { + setResultReviewLoading(false); + if (res.code === 200) { + let data = res.data; + let roomType = String(data.roomType); + let quotationMethodDict = data?.quotationMethodDict == "quotation_method_2" || data?.quotationMethodDict == "quotation_method_3" ? '%' : '元' + setQuotationMethod(quotationMethodDict) + setRoomType(roomType); + setRoomTypeName(roomType === '1' ? '资审' : '评审'); + //供应商数据 + let suppliers = isEmpty(data.suppliers) ? [] : data.suppliers; + setPtcpMode(data.ptcpMode); + setSupplierTableData(suppliers); + setReviewResultStatus(data.status); + resultDataSet(data); + } + }); + //获取评审报告 + queryReviewReport(assessId).then(res => { + if (res.code === 200) { + let data = res.data; + setResultReportData(data); + setDocFileCode(isEmpty(data.reportTextId) ? '' : data.reportTextId); + setPdfFileCode(isEmpty(data.signDocId) ? '' : data.signDocId) + setReportUploadId(isEmpty(data?.annexId) ? '' : data?.annexId) + getFileList(data?.annexId)//获取文件列表 + setIds(data?.id) + setExpertTableData(data.expertList); + setReviewReport(String(data.status)); + setSignatureSelect(String(data.signStatus) == '1') + setIds(data?.id) + } + }) + //查询评审室状态 + getAssessRoomStatus(assessId).then(res => { + if (res.code === 200) { + setEvaluationRoom(res.data); + } + }) + } + + const verificationOffice = () => { + if (ref.current?.DocFileCode == '' || ref.current?.PDFFileCode == '') { + message.warn("您未编辑office文件!"); + return false; + } + return true; + } + + /** + * 结束评审 + */ + const endOfBidEvaluation = () => { + isLeaderConfirm({ assessRoomId: assessId }).then(result => {//供应商股权关系-专家组长是否确认风险 + if (result?.success && !result?.data) { + setRiskVisible(true); + } else { + finishFlow(assessId).then(res => { + commonMessage(res); + init(); + }) + } + }) + } + + /** + * 获取表头 + */ + const getColumns = () => { + //询价 + if (bidMethodDict === 'procurement_mode_7') { + setColumn([...enquiryColumns]) + } else if (bidMethodDict === 'procurement_mode_4') { + setColumn([...columns4]) + } else { + setColumn([...roomType === '2' ? columns : columns2]); + } + } + + /** + * 获取文件列表(有id的情况下) + */ + const getFileList = (fileId: string) => { + if (isNotEmpty(fileId)) { + getFileListByBid(fileId).then(res => { + setReportFileList(res) + }) + } + } + + const [spin, spinSet] = useState(false); + //上传文件 + const props = { + name: 'file', + action: '/api/biz-service-ebtp-rsms/v1/reviewresult/importResultTemp', + // headers: { + // authorization: 'authorization-text', + // }, + data: { + assessRoomId: assessId + }, + accept: ".xlsx", + itemRender: () => { return null }, + onChange(info: any) { + spinSet(true); + if (info.file.status === 'done') { + if (info.file?.response?.code == 200) { + console.log("info.file?.response",info.file?.response) + if (info.file?.response?.data) { + message.success(`${info.file.name} 导入成功`); + init(); + spinSet(false); + } else { + message.error('导入数据为空,请确认'); + spinSet(false); + } + } else { + message.error(info.file?.response?.message); + spinSet(false); + } + } else if (info.file.status === 'error') { + message.error(`${info.file.name} 导入失败`); + spinSet(false); + } + }, + }; +const [form] = Form.useForm(); +const layout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, +}; + return ( + <> + + + + [ + // (supplierTableData.length !== 0 && Number(evaluationRoom.status) < 3) && , + + , + + + + ]} + /> + + + + + {!reviewReport && reportFileList.length == 0 ? null : } + + + + + { evaluationRoom.status == '3' && !evaluationRoom.offlineReviewFile ? null : } + + + + { evaluationRoom.status == '3' && !evaluationRoom.offlineOtherFile ? null : } + + + + + + + + + {pdfModalVisible && setPdfModalVisible(false)} downLoadFileName="评审报告" />} + {reportUploadVisible && { + console.log("value",value) + if (value) { + setReportUploadId(value) + getFileList(value) + } + setReportUploadVisible(false) + }} + fileId={reportUploadId} + readOnly={!reviewReport} + />} + { setRiskVisible(false) }} isResult={true} role={role} /> + + ); +} +export default Manager; \ No newline at end of file diff --git a/src/pages/Evaluation/projectManager/ReviewResults/ManagerEntry/index.tsx b/src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/index.tsx similarity index 87% rename from src/pages/Evaluation/projectManager/ReviewResults/ManagerEntry/index.tsx rename to src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/index.tsx index 6169442..8f89a2b 100644 --- a/src/pages/Evaluation/projectManager/ReviewResults/ManagerEntry/index.tsx +++ b/src/pages/Evaluation/projectManager/ReviewResults/ManagerOffline/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import Manager from './components/Manager'; /** - * 项目经理 + * 项目经理-线下评审 */ const Index: React.FC = () => { return (