Merge branch 'master' into 'uat-export-face-recog'

Master merge to Uat export face recog

See merge request eshop/fe_service_ebtp_frontend!232
This commit is contained in:
袁帅
2022-08-16 16:27:52 +08:00
16 changed files with 702 additions and 519 deletions

View File

@ -31,6 +31,6 @@ export default [
},
{//单一来源简化流程 选择供应商及上传应答文件
path: '/ProjectLayout/SimpleUpload',
component: './BidEvaluation/components/SimpleUpload'
component: './BidEvaluation/components/simpleUpload'
}
];

View File

@ -150,7 +150,7 @@ export default [
path: '/notice',
routes: [
{ name: 'noticeList', path: '/notice/noticeList', component: './notice/noticeList/components/NoticeList' },//通知公告查看-所有角色
{ name: 'noticeManage', path: '/notice/noticeManage', component: './notice/noticeManage/components/noticeManage' },//通知公告管理-系统管理员
{ name: 'noticeManage', path: '/notice/noticeManage', component: './notice/noticeManage/components/NoticeManage' },//通知公告管理-系统管理员
]
},
{//委托
@ -161,12 +161,12 @@ export default [
{//管理员-代理
name: 'manager',
path: '/Project/EntrustAssign/Manager',
component: './Project/EntrustAssign/Manager',
component: './Project/EntrustAssign/manager',
},
{//项目经理-代理
name: 'operator',
path: '/Project/EntrustAssign/Operator',
component: './Project/EntrustAssign/Operator',
component: './Project/EntrustAssign/operator',
},
{//采购经理的委托管理
name: 'mandatoryAdministration',

View File

@ -1,12 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"  />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>招标采购中心 | 文档控件编辑器</title>
<script type="text/javascript" src="officecontrol/jquery.js"></script>
<script type="text/javascript" src="officecontrol/ntko4Path.20220624.js"></script>
<link href="officecontrol/ntkoStyle.css" rel="stylesheet" type="text/css"/>
<link href="officecontrol/ntkoStyle.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var path; //文档地址
@ -57,12 +58,13 @@
<!--AfterPublishAsPDFToURL-->
<body onload="path=getQueryString('path');fileName=getQueryString('fileName');fileType=getQueryString('fileType');init(path);">
<body
onload="path=getQueryString('path');fileName=getQueryString('fileName');fileType=getQueryString('fileType');init(path);">
<script type="text/javascript" for="TANGER_OCX" event="OnDocumentOpened(File, Document)">
<script type="text/javascript" for="TANGER_OCX" event="OnDocumentOpened(File, Document)">
</script>
<div style="
</script>
<div style="
background-color: #b30000;
color:white;
height: 56px;
@ -71,16 +73,18 @@
position: relative;
">
<div style="font-size: 16px; font-weight: 600;">
<img src="logo.svg" style="height: 30px; position: absolute; top: 13px; margin-left: 20px; margin-right: 10px;"/>
<span style="position: absolute; left: 70px; font-size: 16px; font-weight: 600; display: inline-block;">中国联通智慧供应链平台 招标采购中心</span>
<img src="logo.svg" style="height: 30px; position: absolute; top: 13px; margin-left: 20px; margin-right: 10px;" />
<span
style="position: absolute; left: 70px; font-size: 16px; font-weight: 600; display: inline-block;">中国联通智慧供应链平台
招标采购中心</span>
</div>
</div>
<div class="elementPosition">
</div>
<div class="elementPosition">
<button type="button" class="btnStyle btnStyle02" onclick="generalProp(2)">另存为</button>
<button type="button" class="btnStyle btnStyle02" onclick="generalProp(4)">打印</button>
<button type="button" class="btnStyle btnStyle02" onclick="closeBTN()">关闭</button>
</div>
<script type="text/javascript">
</div>
<script type="text/javascript">
function closeBTN() {
window.open('', '_parent', '');
@ -88,17 +92,17 @@
}
//调用文档通用属性方法 1-打开 2-保存(另存为) 4-打印
function generalProp(param) {
var name = DocfileCode;
if(fileName != null) {
var name = '新建文本文档';
if (fileName != null) {
name = fileName;
}
TANGER_OCX.WebFileName = name + "." + fileType;//文档默认名称
TANGER_OCX.ShowDialog(param)
}
</script>
<div class="divBody">
</script>
<div class="divBody">
<script type="text/javascript" src="officecontrol/ntkoofficecontrol.min.20220624.js"></script>
</div>
</div>
</body>
</html>

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react';
import React, { useEffect, useMemo, useState } from 'react';
import { Button, Card, Collapse, Form, Input, List, message, Popover, Select, Space, Spin, Typography } from "antd";
import ProTable from "@ant-design/pro-table";
import { getBidAssessmentResultList, getBidAssessmentResultsList, pushBidAssessmentResult, saveResult } from "./service"
@ -11,19 +11,21 @@ import { isEmpty } from '@/utils/CommonUtils';
const BidAssessmentResults: React.FC<{}> = (props) => {
const [Refresh, setRefresh] = useState<number>(0);
const { Panel } = Collapse;
const [pageloading, setPageloading] = useState<boolean>(false);
const [ListData, setListData] = useState<any>();
const [ListData, setListData] = useState<any[]>([]);
const [assessRoomId, setAssessRoomId] = useState<any>();
const [currentTable, setCurrentTable] = useState<boolean>(false);
const [proID, setProID] = useState<any>(getProId);
const [spintype, setSpintype] = useState<boolean>(false);
//单一来源简化
const [form] = Form.useForm();
//查询条件-包件名称
const [name, setName] = useState<string>('');
//折叠面板
const [collapseActiveKeys, setCollapseActiveKeys] = useState<any[]>(['0']);
const FormItem = Form.Item;
const { Option } = Select;
const { Paragraph, Text } = Typography;
const firstRvwResult = ['否', '是'];
const [contractedMoney, contractedMoneySet] = useState('')
const proID = getProId();//项目id
let name1 = "中标";
let name2 = "评标";
let name3 = "标段";
@ -69,10 +71,6 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
type4 = true;
type5 = true;
}
//综合得分展开关闭
const [expandTotalScore, setExpandTotalScore] = useState<boolean>(proDict == "procurement_mode_7" ? false : true);
//查询条件-包件名称
const [name, setName] = useState<string>('');
useEffect(() => {
setSpintype(true);
@ -82,26 +80,10 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
setListData(res.data);
}
}).finally(() => {
setSpintype(false)
setSpintype(false);
})
}, [proID, Refresh])
//初审详审原因render
const rvwResultRender = (field: any, reason: any) => {
const content = (
<Paragraph>
<blockquote style={{ width: '300px' }}>{reason}</blockquote>
</Paragraph>
)
return isEmpty(field) || field == '-' ? '-' : (
<span>
{firstRvwResult[field]}
{field == 0 && <Popover content={content} trigger="hover" placement="topLeft">
<Text code style={{ cursor: 'pointer' }}></Text>
</Popover>}
</span>)
}
/*推送评标结果*/
const pushResult = (record: any) => {
setSpintype(true);
@ -111,15 +93,28 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
setRefresh(Refresh + 1);
}
}).finally(() => {
setSpintype(false)
setSpintype(false);
})
}
/*推送列表查看*/
const getResultList = (record: any) => {
setAssessRoomId(record.assesRoomId);
setCurrentTable(true);
}
//折叠面板change
const onCollapseChange = (key: any) => {
setCollapseActiveKeys(key);
};
//确认评审结果ListRender封装
const ResultListRender = (props: { item: any, setRefresh: () => void, getResultList: (record: any) => void, ListData: any, pushResult: (record: any) => void }) => {
const { item, setRefresh, getResultList, ListData, pushResult } = props;
//单一来源简化
const [form] = Form.useForm();
//综合得分展开关闭
const [expandTotalScore, setExpandTotalScore] = useState<boolean>(proDict == "procurement_mode_7" ? false : true);
//单一简化
function returnInput(name: any, name2: any, val: any, must: boolean, pattern?: boolean, hid?: boolean) {
@ -161,40 +156,24 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
)
}
//初审详审原因render
const rvwResultRender = (field: any, reason: any) => {
const content = (
<Paragraph>
<blockquote style={{ width: '300px' }}>{reason}</blockquote>
</Paragraph>
)
return isEmpty(field) || field == '-' ? '-' : (
<span>
{firstRvwResult[field]}
{field == 0 && <Popover content={content} trigger="hover" placement="topLeft">
<Text code style={{ cursor: 'pointer' }}></Text>
</Popover>}
</span>)
}
return (
<>
<Spin spinning={spintype}>
<Card bordered={false} bodyStyle={{ padding: '0px 24px' }}>
<div style={{ textAlign: 'right' }}>
<Space style={{ margin: '16px 0px' }}>
<Input type="text" placeholder={`${name3}名称`} value={name} onChange={(event) => setName(event.target.value)} />
<Button type="primary" key='c' onClick={() => {
setRefresh(Refresh + 1);
}}></Button>
<Button key='reload' onClick={() => {
setName('');
setRefresh(Refresh + 1);
}}></Button>
</Space>
</div>
<List
grid={{
gutter: 16,
xs: 1,
sm: 1,
md: 1,
lg: 1,
xl: 1,
xxl: 1,
}}
style={{ paddingTop: "24px;" }}
itemLayout="vertical"
rowKey="sectionId"
dataSource={ListData}
renderItem={(item: any, index: any) => (
<Collapse defaultActiveKey={index == 0 ? item.sectionId : ""} className="calibration-panel">
<Panel
header={item.sectionName} key={item.sectionId}>
<List
grid={{
gutter: 16,
@ -401,7 +380,7 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
return (
<ProTable
size={"small"}
loading={pageloading}
key={index}
scroll={{ x: true }}
search={false}
options={false}
@ -416,10 +395,8 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
<Button
hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase']) || defId != 'negotiation_single_simple' || item1.pushStatus == "1"}
type="primary"
disabled={spintype}
onClick={async () => {
setSpintype(true);
await form.validateFields().then(async () => {
onClick={() => {
form.validateFields().then(async () => {
await saveResult({
id: form.getFieldValue("resultId"),
suppliers: [
@ -433,9 +410,9 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
}
]
}).then((res) => {
if (res.success) { message.success('保存成功!') }
if (res.success) { message.success('保存成功!'); setRefresh(); }
})
})
}).finally(() => setSpintype(false));
}}
></Button>
{
@ -447,7 +424,7 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
!item1.reviewList[0].priceReview
}
disabled={item1.pushStatus == "1" ? true : false} key={"1"}
onClick={() => pushResult(item1)} type="primary" loading={spintype}>{name2}</Button>
onClick={() => pushResult(item1)} type="primary">{name2}</Button>
:
<Button hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} disabled={item1.pushStatus == "1" ? true : false} key={"1"} onClick={() => pushResult(item1)} type="primary"> {name2} </Button>
}
@ -463,10 +440,32 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
}}
>
</List>
)
}
return (
<>
<Spin spinning={spintype}>
<Card bordered={false} bodyStyle={{ padding: '0px 24px' }}>
<div style={{ textAlign: 'right' }}>
<Space style={{ margin: '16px 0px' }}>
<Input type="text" placeholder={`${name3}名称`} value={name} onChange={(event) => setName(event.target.value)} />
<Button type="primary" key='c' onClick={() => {
setRefresh(Refresh + 1);
}}></Button>
<Button key='reload' onClick={() => {
setName('');
setRefresh(Refresh + 1);
}}></Button>
</Space>
</div>
<Collapse activeKey={collapseActiveKeys} onChange={onCollapseChange} className="calibration-panel">
{ListData.map((item, index) => (
<Panel header={item.sectionName} key={index}>
<ResultListRender item={item} setRefresh={() => { setRefresh(Refresh + 1); }} getResultList={getResultList} ListData={ListData} pushResult={pushResult} />
</Panel>
))}
</Collapse>
)}
/>
<CurrentTable assessRoomId={assessRoomId} ChangeNoticeListVisible={currentTable}
onCancel={() => setCurrentTable(false)} />
</Card>

View File

@ -0,0 +1,45 @@
import React, { useEffect, useState } from 'react';
import { Collapse } from 'antd';
import { getRiskSupplierList } from '../service';
import { getRoomId, getSessionProjectData } from '@/utils/session';
interface ViewRiskSupplierModalProps {
modalVisible: boolean;
values: any;
onCancel: any;
}
const ViewRiskSupplierModal: React.FC<ViewRiskSupplierModalProps> = (props) => {
const [riskSupplierData, setRiskSupplierData] = useState({});
useEffect(() => {
getRiskSupplierInfo();
}, [])
const getRiskSupplierInfo = async () => {
let roomId = getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId')
let projectId = getSessionProjectData().id;
//黑名单
await getRiskSupplierList(projectId, roomId).then((res) => {
if (res.success == true && res.data.success==false) {
setRiskSupplierData(res.data.data.result[0].regulationData[0].message);
} else {
setRiskSupplierData("暂无数据");
}
})
}
return (
<>
<Collapse >
<Collapse.Panel header="风控中心-风险限定供应商" key="1">
{riskSupplierData}
</Collapse.Panel>
</Collapse>
</>
);
};
export default ViewRiskSupplierModal;

View File

@ -1,65 +1,13 @@
import React, { useState,useRef, useEffect } from 'react';
import { Tabs,Table, Spin, message, Popconfirm,Card,Collapse, Modal, Button} from 'antd';
import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table';
import React, { useState } from 'react';
import ViewRishFormModal from './components/ViewRishFormModal';
import ViewQuoteWarningFormModal from './components/ViewQuoteWarningFormModal';
import { getRoomId, getSessionUserData } from '@/utils/session';
import ViewBlacklistFormModal from './components/ViewBlacklistFormModal';
import ViewReviewResultFormModal from './components/ViewReviewResultFormModal';
import ViewJuryScoringRemindFormModal from './components/ViewJuryScoringRemindFormModal';
import ViewJuryScoringAnalysisFormModal from './components/ViewJuryScoringAnalysisFormModal';
import ViewRiskSupplierModal from './components/ViewRiskSupplierModal';
import BidDocSmartCheckFormModal from './components/BidDocSmartCheckFormModal';
function callback(key) {
//getSessionUserData.roleIds;
}
const title2 = [
{
title: '序号',
dataIndex: 'num',
key: 'num',
},
{
title: '投标人及报价',
dataIndex: 'tbrbj',
key: 'tbrbj',
},
{
title: '预警信息',
dataIndex: 'yjxx',
key: 'yjxx',
},
{
title: '操作',
dataIndex: 'cz',
key: 'cz',
},
];
const columns: ProColumns<any>[] = [
{ title: '序号', dataIndex: 'num', width: 50, },
{ title: '供应商名称', dataIndex: 'gysmc', },
{ title: 'IP地址',width: '20%', dataIndex: 'ip', },
{ title: 'MAC地址', dataIndex: 'mac', },
{ title: '上传时间', dataIndex: 'uploadTime',},
];
const columnsMac: ProColumns<any>[] = [
{ title: '序号', dataIndex: 'num', width: 50, },
{ title: '供应商名称', dataIndex: 'gysmc', },
{ title: '相同的MAC地址', dataIndex: 'mac', },
];
const columns2: ProColumns<any>[] = [
{ title: '序号', dataIndex: 'num', width: 50, },
{ title: '投标人及报价', dataIndex: 'tbrbj', },
{ title: '预警信息', dataIndex: 'yjxx', },
{ title: '操作', dataIndex: '', },
];
const Sing: React.FC<{}> = () => {
//ip mac
@ -91,15 +39,15 @@ const Sing: React.FC<{}> = () => {
const [ViewJuryScoringAnalysisFormVisible, setViewJuryScoringAnalysisFormVisible] = useState<any>(false);
//查看详情窗口record
const [ViewJuryScoringAnalysisValues, setViewJuryScoringAnalysisValues] = useState<any>({});
//风控中心-风险限定供应商
const [BidRiskSupplierVisible, setBidRiskSupplierVisible] = useState<any>(false);
//风控中心-风险限定供应商record
const [BidRiskSupplierValues, setRiskSupplierValues] = useState<any>({});
//投标文件智能审查
const [BidDocSmartCheckFormVisible, setBidDocSmartCheckFormVisible] = useState<any>(false);
//查看详情窗口record
const [BidDocSmartCheckValues, setBidDocSmartCheckValues] = useState<any>({});
const getWarningList = async() => {
}
return (
<>
{
@ -194,6 +142,19 @@ const Sing: React.FC<{}> = () => {
</BidDocSmartCheckFormModal>
) : null
}
{
ViewRiskSupplierModal ? (
<ViewRiskSupplierModal
modalVisible={BidRiskSupplierVisible}
values={BidRiskSupplierValues}
onCancel={() => {
setBidRiskSupplierVisible(!BidRiskSupplierVisible);
setRiskSupplierValues({});
}}
>
</ViewRiskSupplierModal>
) : null
}
</>
)
}

View File

@ -120,7 +120,16 @@ export async function replace(a: any,b: any,c: any){
return a.replace(b,c);
}
//风险限定供应商
export async function getRiskSupplierList(projectId: any, assessRoomId: any) {
return request('/api/biz-service-ebtp-rsms/v1/riskcenter/querySupplierLimit', {
method: 'post',
data: {
"assessRoomId": assessRoomId,
"projectId": projectId
}
});
}

View File

@ -100,7 +100,7 @@ const FileDecode: React.FC<{}> = () => {
if (JSON.stringify(record) == "{}") {
return '';
} else {
const status = record?.registerInfoVOList[0].decryptStatus;
const status = record?.quoteOrOther == "1" ? record?.registerInfoVOList[0].decryptOtherStatus : record?.registerInfoVOList[0].decryptStatus;
if (status == null || status === '1') { return '未解密' }
else if (status === '2') { return '解密成功' }
else if (status === '3') { return '解密失败' }
@ -124,7 +124,7 @@ const FileDecode: React.FC<{}> = () => {
title: '操作', width: 80,
render: (_: any, record: any) => {
if (JSON.stringify(record) !== "{}" && jm) {
const status = record?.registerInfoVOList[0].decryptStatus;
const status = record?.quoteOrOther == "1" ? record?.registerInfoVOList[0].decryptOtherStatus : record?.registerInfoVOList[0].decryptStatus;
if (record?.decryptEndDate !== '' && record?.decryptEndDate !== null && status !== '2') {
return <Button type='primary' disabled={dis} onClick={async () => {
spinSet(true); disSet(true);

View File

@ -1,7 +1,7 @@
import { Button, Card, Col, Collapse, Divider, Form, Input, message, Modal, Popover, Row, Space, Spin, Tooltip, Typography } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import '@/utils/lq.style.less';
import { getReviewResult, saveToExpertConfirm, submitReviewResult, submitToExpertConfirm, unlockResult } from '../service';
import { beforeRiskControl, getReviewResult, saveToExpertConfirm, submitReviewResult, submitToExpertConfirm, unlockResult } from '../service';
import { commonMessage } from '@/utils/MessageUtils';
import { getDictName, isEmpty, isNotEmpty } from '@/utils/CommonUtils';
import ProTable, { EditableProTable } from '@ant-design/pro-table';
@ -16,10 +16,12 @@ import ReviewReportUpload from '@/utils/ReviewReportUpload';
import { ExclamationCircleOutlined } from '@ant-design/icons';
import { getFileListByBid } from '@/utils/DownloadUtils';
import MACAddressPrompt from '@/pages/Evaluation/BidControl/BidControlManager/components/MACAddressPrompt';
import RiskPreventionSoft from '@/utils/RiskPreventionSoft';
const { Panel } = Collapse;
const { TextArea } = Input;
const { Paragraph, Text } = Typography;
const { confirm, warning } = Modal;
const firstRvwResult = ['否', '是'];
//是否中标候选人
@ -125,6 +127,10 @@ const GroupLeader: React.FC = () => {
const [reportUploadId, setReportUploadId] = useState<string>('');
//评审报告附件列表
const [reportFileList, setReportFileList] = useState<any[]>([]);
//风控弹窗 2022.7.27 zhoujianlong
const [riskVisible, setRiskVisible] = useState<boolean>(false);
//风控数据 2022.7.27 zhoujianlong
const [riskData, setRiskData] = useState<any[]>([]);
useEffect(() => {
init();
}, []);
@ -1194,7 +1200,8 @@ const GroupLeader: React.FC = () => {
// }
verificationMoneyIsEdit(data);
}
function submit(data: any) {
//提交接口调用
function submit() {
setSpinning(true);
let suppliers = JSON.parse(JSON.stringify(supplierTableData))//2021.10.14 zhoujianlong 改为深拷贝,解决保存字段闪烁问题
suppliers.forEach((item: any) => {
@ -1202,11 +1209,23 @@ const GroupLeader: React.FC = () => {
item.detailRvwResult = isEmpty(item?.detailRvwResult) ? null : parseInt(item?.detailRvwResult)
item.winnerBidder = isEmpty(item?.winnerBidder) ? null : parseInt(item?.winnerBidder)
});
data.suppliers = suppliers
let data: any = {
id: resultReviewForm.getFieldValue('id'),
remarks: resultReviewForm.getFieldValue('remarks'),
suppliers: [...suppliers]
}
// 提交专家确认
submitToExpertConfirm(data).then(res => {
if (res?.code == 200) {
commonMessage(res);
init();
} else {
message.destroy();
warning({
title: res?.message,
centered: true,
});
}
}).finally(() => {
setSpinning(false);
})
@ -1239,10 +1258,9 @@ const GroupLeader: React.FC = () => {
let res = false;
let gys: any = [];
if (roomType === '1' || bidMethodDict === 'procurement_mode_7' || bidMethodDict === 'procurement_mode_4') {//预审 询价 招募不需要金额
submit(params);
verificationRiskControl(params);
return;
}
const { confirm } = Modal;
function showConfirm() {
confirm({
title: `您有供应商未填写【拟签约金额】或【增值税金额】,请确认是否提交`,
@ -1257,7 +1275,7 @@ const GroupLeader: React.FC = () => {
}
</>,
onOk() {
submit(params)
verificationRiskControl(params);
},
});
}
@ -1269,11 +1287,35 @@ const GroupLeader: React.FC = () => {
}
})
if (res) {
showConfirm()
showConfirm();
} else {
submit(params);
verificationRiskControl(params);
}
}
/**
* 风控中心校验
* @param params
*/
const verificationRiskControl = (params: any) => {
let suppliers = JSON.parse(JSON.stringify(supplierTableData))//2021.10.14 zhoujianlong 改为深拷贝,解决保存字段闪烁问题
suppliers.forEach((item: any) => {
item.winnerCandidate = saveWinnerCandidate(item.winnerCandidate)
item.detailRvwResult = isEmpty(item?.detailRvwResult) ? null : parseInt(item?.detailRvwResult)
item.winnerBidder = isEmpty(item?.winnerBidder) ? null : parseInt(item?.winnerBidder)
});
params.suppliers = suppliers
params["evalMethodDict"] = evalMethodDict;
beforeRiskControl(params).then(res => {
if (res?.code == 200) {
if (res?.data.length > 0) {
setRiskData(res?.data);
setRiskVisible(true);
} else {
submit();
}
}
})
}
/**
* 验证增值税金额是否能高于拟签约的金额
@ -1604,6 +1646,16 @@ const GroupLeader: React.FC = () => {
fileId={reportUploadId}
readOnly={true}
/>}
{/**风控组件 */}
{riskVisible && <RiskPreventionSoft
modalVisible={riskVisible}
onCancel={() => {
setRiskVisible(false);
setRiskData([]);
}}
onSubmit={() => submit()}
data={riskData}
/>}
</Card>
</Spin>
</>

View File

@ -53,7 +53,7 @@ export function submitReviewResult(id: any) {
* 评审结果解锁
* @param id
*/
export function unlockResult(id: any) {
export function unlockResult(id: any) {
return request(`/api/biz-service-ebtp-rsms/v1/reviewresult/unlock/result/${id}`, {
method: 'post',
});
@ -62,8 +62,18 @@ export function submitReviewResult(id: any) {
* 评审报告解锁
* @param id
*/
export function unlockReportIF(id: any) {
export function unlockReportIF(id: any) {
return request(`/api/biz-service-ebtp-evaluation/v1/review/report/unlock/${id}`, {
method: 'post',
});
}
/**
* 提交前风险防控校验接口
* @param data
*/
export function beforeRiskControl(data: any) {
return request("/api/biz-service-ebtp-rsms/v1/riskcenter/getRemindResult", {
method: 'post',
data: data,
});
}

View File

@ -1,19 +0,0 @@
import React, { useEffect,useState } from 'react';
import {} from '@/utils/CommonUtils'
const BidOpeningFormModal: React.FC<{}> = () =>{
useEffect(() => {
window.open("../bidOpening/bidOpening.html?roomType=2");
},[])
return (
<>
</>
//<div dangerouslySetInnerHTML={{ __html: '<!DOCTYPE html><html lang="en"><script type="text/javascript"src="../jquery.js"></script><head><meta charset="UTF-8"><title>开标大厅-招标采购中心</title><link href="css/bidOpening.css"rel="stylesheet"type="text/css"></head><body><!--内容区--><div><!--红头--><div class="headerArea"><img src="images/logo.svg"alt=""width="30"class="headerPic"/><h2>中国联通智慧供应链平台|招标采购中心</h2></div><!--<!--开标大厅--><div class="openMeeting"><!--上部--><div class="meetingTop"><!--当前时间--><div class="bidLeft"><p>当前时间:</p><p id="dateTime"><span></span>/<span></span>/<span></span><span></span>:<span></span>:<span></span></p></div><!--<div class="tableBlock"><table class="bidOpeningTable"cellpadding="0"cellspacing="0"><thead><tr><th width="10%">序号</th><th width="20%">标段名称</th><th width="15%">标段编号</th><th width="15%">开标时间</th><th width="10%">开标状态</th><th width="*">操作</th></tr></thead><tbody id="dataDev"><tr style="height: 0px;"><th width="10%"></th><th width="21%"></th><th width="15%"></th><th width="15%"></th><th width="10%"></th><th width="*"></th></tr></tbody></table></div></div><!--<!--下部--><div class="meetingBottom"><img src="images/elementPic.png"alt=""/></div><!--</div><!--</div><!--<script>var tpId="1111111";$.ajax({url:"http://10.242.31.158:8100/biz-service-ebtp-opening/v1/bizbidopenroom/openRoomList/"+tpId,data:{pageNo:"1",pageSize:"100",roomType:"2"},type:"GET",success:function(re){var list=re.data.records;var tr="";for(var i=0;i<list.length;i++){tr=tr+"<tr>";tr=tr+"<td>"+(i+1)+"</td>";tr=tr+"<td>"+(list[i].sectionName)+"</td>";tr=tr+"<td>"+(list[i].sectionNo)+"</td>";tr=tr+"<td>"+(list[i].opingTime)+"</td>";tr=tr+"<td>"+(getRoomStateValue(list[i].roomState))+"</td>";tr=tr+"<td>";if(list[i].roomState>0){tr=tr+"<button type="button" onClick=onClickToOpenRoom("+list[i].id+","+list[i].turnSort+","+list[i].roomType+","+list[i].roomState+") class="bidBtn01">在线唱标</button>"}tr=tr+"<button type="button" onClick=onClickDown("+list[i].sectionId+") class="bidBtn02">导出投标记录</button></td>";tr=tr+"</tr>"}$("#dataDev").html("");$("#dataDev").append("<tr style="height: 0px;" id="dataTr"></tr>");$("#dataTr").append("<th width="10%"></th>").append("<th width="21%"></th>").append("<th width="15%"></th>").append("<th width="15%"></th>").append("<th width="10%"></th>").append("<th width="*"></th>");$("#dataDev").append(tr)}});function getRoomStateValue(state){var value="";if(state=="0"){value="未开标"}if(state=="1"){value="开标"}if(state=="2"){value="唱标"}if(state=="3"){value="唱标结束"}if(state=="4"){value="取消开标"}return value}function time(){var date=new Date();var n=date.getFullYear();var y=date.getMonth()+1;y=y<10?"0"+y:y;var t=date.getDate();t=t<10?"0"+t:t;var h=date.getHours();h=h<10?"0"+h:h;var m=date.getMinutes();m=m<10?"0"+m:m;var s=date.getSeconds();s=s<10?"0"+s:s;$("#dateTime span").eq(0).html(n);$("#dateTime span").eq(1).html(y);$("#dateTime span").eq(2).html(t);$("#dateTime span").eq(3).html(h);$("#dateTime span").eq(4).html(m);$("#dateTime span").eq(5).html(s);for(var i=0;i<$("#dateTime").length;i++){if($("div").eq(i).text().length==1){$("div").eq(i).html(function(index,html){return 0+html})}}}time();setInterval(time,1000);function onClickToOpenRoom(aa,bb,roomType,roomState){if(roomState>0){window.open("http://10.242.31.158:18022/room/index?aa="+aa+"&bb="+bb+"&roomType="+roomType)}}function onClickDown(bsId){window.open("http://10.242.31.158:8100/biz-service-ebtp-opening/v1/bizbidopenroom/exportTenderRecords/"+bsId)}</script></body></html>' }} />
);
};
export default BidOpeningFormModal;

View File

@ -242,7 +242,7 @@ const Sing: React.FC<{}> = () => {
<div className='xsy-headerDiv pd24'>
<h3 className="first-title floatLeft">{showNameT.kb}</h3>
<div className='xsy-rightDiv-struct'>
<Button type="primary" onClick={() => window.open(`../bidOpening/bidOpening.html?&roomType=${roomType}`)}></Button>
<Button type="primary" onClick={() => window.open(`/bidOpening/bidOpening.html?&roomType=${roomType}`)}></Button>
</div>
</div>
<ProTable

View File

@ -699,9 +699,12 @@ const Room: React.FC<{}> = () => {
//解密时限
function onOkJmsx(value: any) {
endTimeSet(value.format('yyyy-MM-DD HH:mm:ss'));
// endTimeSet(value.format('yyyy-MM-DD HH:mm:ss'));
setTime.current = value.format('yyyy-MM-DD HH:mm:ss');
}
const [sxLoading, sxLoadingSet] = useState<boolean>(false);
//设置解密时限存储
const setTime = useRef<string>('')
const jmTime = () => {
return (
<Modal
@ -715,14 +718,14 @@ const Room: React.FC<{}> = () => {
onCancel={() => { jmTimeVisSet(false); }}
onOk={async () => {
sxLoadingSet(true);
if (endTime != '') {
await endTimeConfig({ id: tdocId, decryptEndDate: endTime });
if (setTime.current != '') {
await endTimeConfig({ id: tdocId, decryptEndDate: setTime.current });
jmTimeVisSet(false);
countSet(count + 1);
} else {
message.error('您未设置解密截止时间')
}
sxLoadingSet(false);
countSet(count + 1);
}}
>
<Spin spinning={sxLoading}>
@ -733,7 +736,7 @@ const Room: React.FC<{}> = () => {
showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}
// disabled={disabled}
showNow={false}
onOk={onOkJmsx}
onChange={onOkJmsx}
/>
</Spin>
</Modal>

View File

@ -4,7 +4,7 @@ import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
import { proTableValueEnum, returnDictVal } from '@/utils/CommonUtils';
import { getPage, queryEntrust } from './service';
import './styles.less';
import { getDicData, getSessionUserData } from '@/utils/session';
import { getDicData, getSessionRoleData, getSessionUserData } from '@/utils/session';
const entrust: React.FC<{}> = () => {
const modalHeight = window.innerHeight * 96 / 100;
@ -20,6 +20,7 @@ const entrust: React.FC<{}> = () => {
const [form] = Form.useForm();
//人员信息
const userData = getSessionUserData();
const roleData = getSessionRoleData();
//protable actionRef
const actionRef = useRef<ActionType>();
//显隐 查看及分派弹窗
@ -390,11 +391,11 @@ const entrust: React.FC<{}> = () => {
...params,
basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
}
if (userData?.roleIds == 'ebtp-purchase') {//采购经理
if (roleData?.roleCode == 'ebtp-purchase') {//采购经理
req['purchasingManager'] = userData?.userId
} else if (userData?.roleIds == 'ebtp-agency-admin') {//代理机构业务管理员
} else if (roleData?.roleCode == 'ebtp-agency-admin') {//代理机构业务管理员
req['agencyCompany'] = userData?.organizationId
} else if (userData?.roleIds == 'ebtp-agency-project-manager') {//代理机构业务经理 项目经理
} else if (roleData?.roleCode == 'ebtp-agency-project-manager') {//代理机构业务经理 项目经理
req['projectManager'] = userData?.userId
} else {
return []

View File

@ -0,0 +1,99 @@
import React from 'react';
import { Modal, Tag } from 'antd';
import { ExclamationCircleOutlined } from '@ant-design/icons';
import type { ProColumns } from '@ant-design/pro-table';
import ProTable from '@ant-design/pro-table';
import './riskStyle.less'
interface RiskPreventionSoftProps {
modalVisible: boolean;
onCancel: () => void;
onSubmit: () => void;
data: Array<any>;
}
const modalHeight = window.innerHeight * 96 / 100;
/**
* 风险防控通用(软控)
* @param props
* @returns
*/
const RiskPreventionSoft: React.FC<RiskPreventionSoftProps> = (props) => {
const { modalVisible, onCancel, onSubmit, data } = props;
const columns: ProColumns<any[]>[] = [
{
dataIndex: 'regulationStrategy',
title: '规则响应策略',
width: '13%',
valueEnum: {
hard: { text: '强控', status: 'Error' },
soft: { text: '软控', status: 'Warning' },
alarm: { text: '预警', status: 'Processing' }
},
},
{
dataIndex: 'regulationName',
title: '规则模型名称',
width: '13%',
},
{
dataIndex: 'regulationRank',
title: '风险响应等级',
width: '13%',
valueEnum: {
first: { text: '风险一级' },
second: { text: '风险二级' },
third: { text: '风险三级' }
},
},
{
dataIndex: 'message',
title: '规则相应内容',
},
];
return (
<Modal
destroyOnClose
title="风控中心校验结果"
visible={modalVisible}
width={'60%'}
style={{ maxHeight: modalHeight }}
bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', padding: '8px 24px 16px' }}
centered
onCancel={() => onCancel()}
onOk={() => {
onSubmit();
onCancel();
}}
>
<div>
<Tag icon={<ExclamationCircleOutlined />} color="warning" className="risk-top-tag">
</Tag>
{data.map(ite => ite?.result.map((item: any) => (
<div>
<div className="risk-table-title">
<span className="table-scene-name"><span>{item.sceneName}</span></span>
<span>{item.publishDepartName}</span>
</div>
<ProTable<any>
columns={columns}
dataSource={item.regulationData}
rowKey="regulationId"
size='small'
pagination={false}
toolBarRender={false}
search={false}
/>
</div>
)
))}
</div>
</Modal>
);
};
export default RiskPreventionSoft;

View File

@ -0,0 +1,19 @@
.risk-top-tag {
font-size: 14px;
width: 100%;
padding: 8px 16px;
}
.risk-table-title {
height: 40px;
line-height: 40px;
display: flex;
justify-content: space-between;
font-weight: bold;
.table-scene-name {
color: #7c7c7c;
}
:last-child {
color: #000;
}
}