diff --git a/config/router_transfer.ts b/config/router_transfer.ts index 5992222..81d12df 100644 --- a/config/router_transfer.ts +++ b/config/router_transfer.ts @@ -91,6 +91,11 @@ export default [ path: '/viewOfTenderDocuments', component: './Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocuments', }, + //云门户跳转查看供应商关联关系疑似违规行为 + { + path: '/SupplierRelation', + component: './SupplierRelation', + }, //项目列表跳板页面 { name: 'index_2', diff --git a/src/pages/BidEvaluation/manager.js b/src/pages/BidEvaluation/manager.js index b47d1b4..e123650 100644 --- a/src/pages/BidEvaluation/manager.js +++ b/src/pages/BidEvaluation/manager.js @@ -120,6 +120,7 @@ class manager extends PureComponent { sessionStorage.setItem("expertGroupId", record.expertChatGroupId) sessionStorage.setItem("roomTypeByEva", getURLInformation("roomType")) sessionStorage.setItem("sectionId", record.sectionId) + sessionStorage.setItem("openTime", record.openTime) this.setState({ loading: true }) await getQuotationMethodById(record.id) // this.props.dispatch(routerRedux.push('/ProjectLayout/EvaRoom')) diff --git a/src/pages/Evaluation/BidControl/BidControlManager/components/ZhiQiCha.tsx b/src/pages/Evaluation/BidControl/BidControlManager/components/ZhiQiCha.tsx index 2ae5160..ac376fa 100644 --- a/src/pages/Evaluation/BidControl/BidControlManager/components/ZhiQiCha.tsx +++ b/src/pages/Evaluation/BidControl/BidControlManager/components/ZhiQiCha.tsx @@ -3,9 +3,9 @@ import EquityRelation from "@/components/EquityRelation"; import { getURLInformation } from "@/utils/CommonUtils"; import { getRoomId, getSessionProjectData, getSessionRoleData } from "@/utils/session"; import { ExclamationCircleOutlined } from "@ant-design/icons"; -import ProTable, { EditableProTable, ProColumns } from "@ant-design/pro-table"; -import { Button, Collapse, message, Modal, Spin, Typography } from "antd"; -import React, { Fragment, useEffect, useState } from "react"; +import ProTable, { ActionType, EditableProTable, ProColumns } from "@ant-design/pro-table"; +import { Button, Collapse, Form, message, Modal, Radio, RadioChangeEvent, Spin, Typography } from "antd"; +import React, { Fragment, useEffect, useRef, useState } from "react"; import { getSuspectedViolation, leaderConfirm } from "../service"; /** @@ -15,10 +15,10 @@ import { getSuspectedViolation, leaderConfirm } from "../service"; */ const ZhiQiCha: React.FC<{}> = (props) => { const title_style = { color: "#b30000", fontWeight: 700 }; - // const options = [ - // { label: '确认无风险', value: 0 }, - // { label: '确认有风险', value: 1 }, - // ]; + const options = [ + { label: '全部否', value: "0" }, + { label: '全部是', value: "1" }, + ]; //是否展开智企查疑似关联关系 const defaultZQCKey = getURLInformation('n') == '1' ? ['zhiqicha'] : [] const { Paragraph, Text } = Typography; @@ -43,11 +43,16 @@ const ZhiQiCha: React.FC<{}> = (props) => { // const [radioValue, setRadioValue] = useState(""); //loading const [loading, setLoading] = useState(true); + //多选用 + const [value1, setValue1] = useState(null); + const [value2, setValue2] = useState(null); + const [form] = Form.useForm(); const columns: ProColumns[] = [ { title: 供应商A, editable: false, + width: "20%", render: (_: any, record: any) => ( {record.supplierA.name} ), @@ -55,6 +60,7 @@ const ZhiQiCha: React.FC<{}> = (props) => { { title: 供应商B, editable: false, + width: "20%", render: (_: any, record: any) => ( {record.supplierB.name} ), @@ -62,6 +68,7 @@ const ZhiQiCha: React.FC<{}> = (props) => { { title: 关系类型, editable: false, + width: "10%", render: (_: any, record: any) => ( {record.typeDesc}关系 ), @@ -70,26 +77,35 @@ const ZhiQiCha: React.FC<{}> = (props) => { title: 关联信息是否准确, dataIndex: 'relationFlag', key: 'relationFlag', + width: "15%", valueType: 'radio', valueEnum: { "0": { text: '否' }, "1": { text: '是' }, }, + fieldProps: { + onChange: () => { setValue1(null) } + } }, { title: 是否被认定为风险, dataIndex: 'riskFlag', key: 'riskFlag', + width: "15%", valueType: 'radio', valueEnum: { "0": { text: '否' }, "1": { text: '是' }, }, + fieldProps: { + onChange: () => { setValue2(null) } + } }, { title: 说明, dataIndex: 'memo', key: 'memo', + width: "20%", tooltip: "一行中存在至少一项选择【否】,当前行的说明必须填写", fieldProps: { maxLength: 100, @@ -150,8 +166,8 @@ const ZhiQiCha: React.FC<{}> = (props) => { setIsLeader(resp?.data == "ReviewLeader"); } setWarningsData(res?.data); - setSupplierTableData(res?.data?.riskSupplier != null ? res?.data?.riskSupplier?.map((item: any) => { item.riskFlag = String(item.riskFlag); item.relationFlag = String(item.relationFlag); return item }) : []); - setIsRisk(res?.data?.riskSupplier != null); + setSupplierTableData(res?.data?.riskSupplier != null && res?.data?.riskSupplier.length > 0 ? res?.data?.riskSupplier?.map((item: any) => { item.riskFlag = String(item.riskFlag); item.relationFlag = String(item.relationFlag); return item }) : []); + setIsRisk(res?.data?.riskSupplier != null && res?.data?.riskSupplier.length > 0); // form.setFieldsValue(res?.data); } }).finally(() => { @@ -229,6 +245,29 @@ const ZhiQiCha: React.FC<{}> = (props) => { onCancel() { }, }); } + const onChange1 = ({ target: { value } }: RadioChangeEvent) => { + setValue1(value); + const data = JSON.parse(JSON.stringify(supplierTableData));//深拷贝 + const obj = {}; + for (let i = 0, l = data.length; i < l; i++) { + data[i].relationFlag = value; + obj[data[i].id] = { relationFlag: value }; + } + form.setFieldsValue(obj); + setSupplierTableData(data); + }; + + const onChange2 = ({ target: { value } }: RadioChangeEvent) => { + setValue2(value); + const data = JSON.parse(JSON.stringify(supplierTableData));//深拷贝 + const obj = {}; + for (let i = 0, l = data.length; i < l; i++) { + data[i].riskFlag = value; + obj[data[i].id] = { riskFlag: value }; + } + form.setFieldsValue(obj); + setSupplierTableData(data); + }; useEffect(() => { getZQCData(); }, []) @@ -273,7 +312,13 @@ const ZhiQiCha: React.FC<{}> = (props) => { {isRisk && <> {isLeader &&
-

相关供应商关联情况汇总(参考)

+

+ 相关供应商关联情况汇总(参考) + {warningsData?.headmanConfirmStatus != "1" &&
+ 关联信息是否准确: + 是否被认定为风险: +
} +

= (props) => { value={supplierTableData} editable={{ type: 'multiple', + form: form, editableKeys: warningsData?.headmanConfirmStatus == "1" ? [] : supplierTableData.map(item => item.id), // onChange: setEditableRowKeys, onValuesChange: (record, recordList) => { diff --git a/src/pages/Evaluation/BidControl/BidControlManager/index.tsx b/src/pages/Evaluation/BidControl/BidControlManager/index.tsx index b5917d2..2cfeb07 100644 --- a/src/pages/Evaluation/BidControl/BidControlManager/index.tsx +++ b/src/pages/Evaluation/BidControl/BidControlManager/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import ViewRishFormModal from './components/ViewRishFormModal'; import ViewQuoteWarningFormModal from './components/ViewQuoteWarningFormModal'; import ViewBlacklistFormModal from './components/ViewBlacklistFormModal'; @@ -9,7 +9,8 @@ import ViewRiskSupplierModal from './components/ViewRiskSupplierModal'; import BidDocSmartCheckFormModal from './components/BidDocSmartCheckFormModal'; import ViewEvalFormModal from './components/ViewEvalFormModal'; import ZhiQiCha from './components/ZhiQiCha'; -import { getDefId } from '@/utils/session'; +import { getDefId, getRoomId, getSessionProjectData } from '@/utils/session'; +import { getSuspectedViolation } from './service'; const Sing: React.FC<{}> = () => { //ip mac @@ -57,10 +58,28 @@ const Sing: React.FC<{}> = () => { const [ViewEvalCheckValues, setViewEvalCheckValues] = useState({}); //获取流程id const defId = getDefId(); + //是否显示智企查 + const [isShowZQC, setIsShowZQC] = useState(false); + + useEffect(() => { + const tpId = getSessionProjectData()?.id; + const sectionId = sessionStorage.getItem("sectionId"); + const assessRoomId = getRoomId(); + const openTime = sessionStorage.getItem("openTime");//获取评审开始时间 + getSuspectedViolation({ tpId, sectionId, assessRoomId }).then(res => {//查询是否有风险,2023年3月31日之前的无风险项目屏蔽掉此功能 + if (res?.success) { + if (!(res?.data?.riskSupplier != null && res?.data?.riskSupplier.length > 0) && openTime && (openTime < "2023-03-31 23:59:59")) { + setIsShowZQC(false); + } else { + setIsShowZQC(true); + } + } + }); + }, []) return ( <> {/**智企查-供应商关联关系疑似违规行为 */} - {((defId != "negotiation_single") && (defId != "recruit_multi") && (defId != "inquiry")) && } + {((defId != "negotiation_single") && (defId != "recruit_multi") && (defId != "inquiry") && isShowZQC) && } { ViewRishFormModal ? ( = () => { const [ViewJuryScoringAnalysisValues, setViewJuryScoringAnalysisValues] = useState({}); //获取流程id const defId = getDefId(); + //是否显示智企查 + const [isShowZQC, setIsShowZQC] = useState(false); + + useEffect(() => { + const tpId = getSessionProjectData()?.id; + const sectionId = sessionStorage.getItem("sectionId"); + const assessRoomId = getRoomId(); + const openTime = sessionStorage.getItem("openTime");//获取评审开始时间 + getSuspectedViolation({ tpId, sectionId, assessRoomId }).then(res => {//查询是否有风险,2023年3月31日之前的无风险项目屏蔽掉此功能 + if (res?.success) { + if (!(res?.data?.riskSupplier != null && res?.data?.riskSupplier.length > 0) && openTime && (openTime < "2023-03-31 23:59:59")) { + setIsShowZQC(false); + } else { + setIsShowZQC(true); + } + } + }); + }, []) const getWarningList = async () => { @@ -48,7 +67,7 @@ const Sing: React.FC<{}> = () => { return ( <> {/**智企查-供应商关联关系疑似违规行为 */} - {((defId != "negotiation_single") && (defId != "recruit_multi")) && } + {((defId != "negotiation_single") && (defId != "recruit_multi") && (defId != "inquiry") && isShowZQC) && } {//投标文件制作地址日志信息查看 ViewRishFormModal ? ( = () => { + const title_style = { color: "#b30000", fontWeight: 700 }; + const { Paragraph, Text } = Typography; + //loading + const [loading, setLoading] = useState(true); + //查询的供应商股权关系数据,确认数据。 + const [warningsData, setWarningsData] = useState(); + //项目数据 + const [projectData, setProjectData] = useState(); + //标段数据 + const [sectionData, setSectionData] = useState(); + //专家组长填写的表格的供应商 + const [supplierTableData, setSupplierTableData] = useState([]); + //获取url参数 + const tpId = getURLInformation("tpId"); + const sectionId = getURLInformation("sectionId"); + const roomId = getURLInformation("roomId"); + const readOnlyColumns: ProColumns[] = [ + { + title: 供应商A, + render: (_: any, record: any) => ( + {record?.supplierA.name} + ), + }, + { + title: 供应商B, + render: (_: any, record: any) => ( + {record?.supplierB.name} + ), + }, + { + title: 关系类型, + editable: false, + render: (_: any, record: any) => ( + {record.typeDesc}关系 + ), + }, + { + title: 关联信息是否准确(专家评审), + dataIndex: 'relationFlag', + key: 'relationFlag', + render: (_: any, record: any) => warningsData?.headmanConfirmStatus == "1" ? ({record.relationFlag == 1 ? "是" : record.relationFlag == 0 ? "否" : "-"}) : (-), + }, + { + title: 是否被认定为风险(专家评审), + dataIndex: 'riskFlag', + key: 'riskFlag', + render: (_: any, record: any) => warningsData?.headmanConfirmStatus == "1" ? ({record.riskFlag == 1 ? "是" : record.riskFlag == 0 ? "否" : "-"}) : (-), + }, + { + title: 说明(专家评审), + dataIndex: 'memo', + key: 'memo', + render: (_: any, record: any) => warningsData?.headmanConfirmStatus == "1" ? _ : (-) + }, + ]; + //获取数据 + const getData = async () => { + let params = { + "tpId": tpId, + "sectionId": sectionId, + "assessRoomId": roomId, + } + // let params = { "tpId": "1626032810108956672", "sectionId": "1626032810125733888", "assessRoomId": "1626032965674401792" }; + if (tpId && sectionId && roomId) { + setLoading(true); + const riskResponse = await getSuspectedViolation(params);//获取风险数据 + const projectResponse = await getProjectDataById(params.tpId);//获取项目数据 + const sectionResponse = await getSectionDataById(params.sectionId);//获取标段数据 + if (riskResponse && riskResponse.success) { + setSupplierTableData(riskResponse?.data?.riskSupplier != null ? riskResponse?.data?.riskSupplier?.map((item: any) => { item.riskFlag = String(item.riskFlag); item.relationFlag = String(item.relationFlag); return item }) : []); + setWarningsData(riskResponse?.data); + updateRead(roomId, riskResponse?.data.readingCode); + } + if (projectResponse && projectResponse.success) { + setProjectData(projectResponse?.data); + } + if (sectionResponse && sectionResponse.success) { + setSectionData(sectionResponse?.data); + } + setLoading(false); + } + } + + useEffect(() => { + getData(); + }, []) + + return ( + +
+
+ 中国联通智慧供应链平台 | 招标采购中心 +
+
+
+ +

+ 供应商疑似关联关系情况 +

+

基本信息

+ + {projectData?.projectName ?? "-"} + {projectData?.ebpProjectNumber ?? "-"} + {projectData?.appManagerName ?? "-"} + {projectData?.ownerContactName ?? "-"} + {sectionData?.bidSectName ?? "-"} + +

供应商疑似关联关系图

+
+
+ +
+
+ + 《中华人民共和国招标投标法》第三十二条规定:”投标人不得相互串通投标报价,不得排挤其他投标人的公平竞争,损害招标人或者其他投标人的合法权益。投标人不得与招标人串通投标,损害国家利益、社会公共利益或者他人的合法权益。” + + + 《中华人民共和国招标投标法实施条例》第三十四条规定:“与招标人存在利害关系可能影响招标公正性的法人、其它组织或者个人,不得参加投标。单位负责人为同一人或者存在控股关系、管理关系的不同单位,不得参加同一标段投标或者未划分标段的同一招标项目投标。违反前两款规定的,相关投标无效。” + + + 控股超过51%或股权关系分散的占股最大的股东都属于控股,请项目经理与评委给予注意! + +
+
+
+

相关供应商关联情况汇总(参考)

+ +
+
+
+
+ ); +}; + +export default SupplierRelation; diff --git a/src/pages/SupplierRelation/service.ts b/src/pages/SupplierRelation/service.ts new file mode 100644 index 0000000..386fbd6 --- /dev/null +++ b/src/pages/SupplierRelation/service.ts @@ -0,0 +1,9 @@ +import request from '@/utils/request'; +/** + * 页面更新-已阅 + * @param params + * @returns + */ +export async function updateRead(roomId: any, readingCode: any) { + return request(`/api/biz-service-ebtp-resps/v1/risktendererwarning/updateReaded?assessRoomId=${roomId}&readingCode=${readingCode}`); +} \ No newline at end of file diff --git a/src/services/common.ts b/src/services/common.ts index 075007c..76a41fa 100644 --- a/src/services/common.ts +++ b/src/services/common.ts @@ -15,6 +15,15 @@ export async function getRoomDataById(params: any) { * @param data * @returns */ - export async function getSectionDataById(params: any) { +export async function getSectionDataById(params: any) { return request(`/api/biz-service-ebtp-project/v1/projectSection/${params}`); +} +/** + * 根据projectId,tpId,项目id获取项目信息 + * 2023.4.19 zhoujianlong + * @param id + * @returns + */ +export async function getProjectDataById(id?: any) { + return request(`/api/biz-service-ebtp-project/v1/projectRecord/${id}`); } \ No newline at end of file diff --git a/src/utils/session.ts b/src/utils/session.ts index 44f7a60..004c04b 100644 --- a/src/utils/session.ts +++ b/src/utils/session.ts @@ -249,6 +249,7 @@ export async function jurySaveInfo(record: any) { sessionStorage.setItem("expertGroupId", record.expertChatGroupId) sessionStorage.setItem("sectionId", record.sectionId) sessionStorage.setItem("roomTypeByEva", record.roomType) + sessionStorage.setItem("openTime", record.openTime) await getQuotationMethodById(record.id) }