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;
@ -70,35 +72,37 @@
display: flex;
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>
<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>
</div>
</div>
</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 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">
function closeBTN() {
window.open('', '_parent', '');
window.close();
}
//调用文档通用属性方法 1-打开 2-保存(另存为) 4-打印
function generalProp(param) {
var name = DocfileCode;
if(fileName != null) {
name = fileName;
function closeBTN() {
window.open('', '_parent', '');
window.close();
}
TANGER_OCX.WebFileName = name + "." + fileType;//文档默认名称
TANGER_OCX.ShowDialog(param)
}
</script>
<div class="divBody">
<script type="text/javascript" src="officecontrol/ntkoofficecontrol.min.20220624.js"></script>
</div>
//调用文档通用属性方法 1-打开 2-保存(另存为) 4-打印
function generalProp(param) {
var name = '新建文本文档';
if (fileName != null) {
name = fileName;
}
TANGER_OCX.WebFileName = name + "." + fileType;//文档默认名称
TANGER_OCX.ShowDialog(param)
}
</script>
<div class="divBody">
<script type="text/javascript" src="officecontrol/ntkoofficecontrol.min.20220624.js"></script>
</div>
</body>
</html>
</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,56 +93,356 @@ 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) {
let rule = [
{ required: must },
{ pattern: /^.{0,21}$/, message: '超长' }
];
pattern && rule.push({ pattern: /(^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d{1,4})?$)/, message: '请输入正确数值(最多4位小数)' });
return (
<Form form={form}>
<FormItem
name={name}
hidden={hid}
messageVariables={{ label: name2 }}
rules={rule}
initialValue={val}
>
<Input
readOnly={ListData[0].status == 3}
placeholder={'请输入' + name2}
/>
</FormItem>
</Form>
)
}
function returnSelect(name: any, val: any) {
return (
<Form form={form}>
<FormItem
name={name}
initialValue={val === 0 ? '否' : '是'}
>
<Select>
<Option value="否" title='否'></Option>
<Option value="是" title='是'></Option>
</Select>
</FormItem>
</Form>
)
}
//初审详审原因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>)
}
//单一简化
function returnInput(name: any, name2: any, val: any, must: boolean, pattern?: boolean, hid?: boolean) {
let rule = [
{ required: must },
{ pattern: /^.{0,21}$/, message: '超长' }
];
pattern && rule.push({ pattern: /(^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d{1,4})?$)/, message: '请输入正确数值(最多4位小数)' });
return (
<Form form={form}>
<FormItem
name={name}
hidden={hid}
messageVariables={{ label: name2 }}
rules={rule}
initialValue={val}
>
<Input
readOnly={ListData[0].status == 3}
placeholder={'请输入' + name2}
/>
</FormItem>
</Form>
<List
grid={{
gutter: 16,
xs: 1,
sm: 1,
md: 1,
lg: 1,
xl: 1,
xxl: 1,
}}
itemLayout="vertical"
rowKey="assesRoomId"
dataSource={item.assesList}
renderItem={(item1: any, index: any) => {
//标段上的报价类型确认 1-% 0-元
let sectionQuot = item?.quotationMethodDict == 'quotation_method_2' || item?.quotationMethodDict == 'quotation_method_3' ? '1' : '0'
const columns: any = [
{
title: '排名',
dataIndex: 'sort',
valueType: 'text',
width: 50,
},
{
title: '供应商名称',
dataIndex: 'companyName',
valueType: 'text',
width: 120,
},
{
hideInTable: type1,
title: proDict == 'procurement_mode_7' ? '报价总金额净价(元)' : sectionQuot == '1' ? '报价(%' : '报价(元)',
dataIndex: 'price',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('price', '报价', record.price, true, true)
} else {
return record.price
}
}
},
{
hideInTable: type2,
title: proDict == 'procurement_mode_7' ? '报价总金额含税价(元)' : sectionQuot == '1' ? '评审价(%' : '评审价(元)',
dataIndex: 'priceReview',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('priceReview', '评审价', record.priceReview, true, true)
} else {
return record.priceReview
}
}
},
{
title: '商务分',
dataIndex: 'businessScore',
width: 60,
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('businessScore', '商务分', record.businessScore, false, true)
} else {
return record.businessScore
}
}
},
{
title: '技术分',
width: 60,
dataIndex: 'technicalScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('technicalScore', '技术分', record.technicalScore, false, true)
} else {
return record.technicalScore
}
}
},
{
title: '服务分',
width: 60,
dataIndex: 'serviceScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('serviceScore', '服务分', record.serviceScore, false, true)
} else {
return record.serviceScore
}
}
},
{
title: '价格分',
width: 60,
dataIndex: 'priceScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('priceScore', '价格分', record.priceScore, false, true)
} else {
return record.priceScore
}
}
},
{
title: (
<span>
<Text keyboard onClick={() => setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"}</Text>
</span>
),
dataIndex: 'totalScore',
width: 120,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('totalScore', '综合得分', record.totalScore, false, true)
} else {
return record.totalScore
}
}
},
{
hideInTable: defId === 'negotiation_single_simple',
title: '是否通过初步评审',
dataIndex: 'firstRvwResult',
width: 100,
render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason)
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '是否通过详审',
dataIndex: 'detailRvwResult',
width: 100,
render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason)
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '应答是否有效',
width: 80,
dataIndex: 'answerValid',
render: (_: any, record: any) => {
return record.answerValid === 1 ? '是' : record.answerValid === 0 ? '否' : '-'
}
},
{
title: '是否' + name1 + '候选人',
dataIndex: 'winnerCandidate',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnSelect('winnerCandidate', record.winnerCandidate)
} else {
return record.winnerCandidate === 1 ? '是' : '否'
}
}
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '是否拟' + name1 + '人',
width: 80,
dataIndex: 'winnerBidder',
render: (_: any, record: any) => {
return record.winnerBidder === 1 ? '是' : record.winnerBidder === 0 ? '否' : '-'
}
},
{
hideInTable: type3,
title: '拟签约金额(不含增值税)(元)',
width: 150,
dataIndex: 'contractedMoney',
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return (
<>
{returnInput('contractedMoney', '拟签约金额', record.contractedMoney, false, true)}
{returnInput('id', '供应商id', record.id, false, false, true)}
{returnInput('resultId', '结果id', record.resultId, false, false, true)}
{returnInput('companyId', '公司id', record.companyId, false, false, true)}
{returnInput('companyName', '公司名称', record.companyName, false, false, true)}
</>
)
} else {
return record.contractedMoney
}
}
},
{
hideInTable: type4,
title: '增值税金额(元)',
width: 150,
dataIndex: 'taxRatePrice',
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('taxRatePrice', '增值税金额', record.taxRatePrice, false, true)
} else {
return record.taxRatePrice
}
}
},
]
return (
<ProTable
size={"small"}
key={index}
scroll={{ x: true }}
search={false}
options={false}
columns={columns}
dataSource={item1.reviewList}
toolbar={{
title: item1.againEvaluationSort == 'null' || isEmpty(item1.againEvaluationSort) ? null : `${item1.againEvaluationSort}次重审`,
}}
rowKey="id"
toolBarRender={(record: any) => [
<>
<Button
hidden={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase']) || defId != 'negotiation_single_simple' || item1.pushStatus == "1"}
type="primary"
onClick={() => {
form.validateFields().then(async () => {
await saveResult({
id: form.getFieldValue("resultId"),
suppliers: [
{
...form.getFieldsValue(),
"winnerCandidate": form.getFieldValue("winnerCandidate") == '是' ? '1' : '0',
"firstRvwResult": form.getFieldValue("firstRvwResult") == '是' ? '1' : '0',
"detailRvwResult": form.getFieldValue("detailRvwResult") == '是' ? '1' : '0',
"answerValid": form.getFieldValue("answerValid") == '是' ? '1' : '0',
"winnerBidder": form.getFieldValue("winnerBidder") == '是' ? '1' : '0',
}
]
}).then((res) => {
if (res.success) { message.success('保存成功!'); setRefresh(); }
})
})
}}
></Button>
{
defId === 'negotiation_single_simple' ?
<Button
hidden={
btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase']) ||
!item1.reviewList[0].price ||
!item1.reviewList[0].priceReview
}
disabled={item1.pushStatus == "1" ? true : false} key={"1"}
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>
}
<Button key={"2"} onClick={() => getResultList(item1)}></Button>
</>
]}
pagination={{
defaultPageSize: 10,
showSizeChanger: false,
}}
/>
)
}}
>
</List>
)
}
function returnSelect(name: any, val: any) {
return (
<Form form={form}>
<FormItem
name={name}
initialValue={val === 0 ? '否' : '是'}
>
<Select>
<Option value="否" title='否'></Option>
<Option value="是" title='是'></Option>
</Select>
</FormItem>
</Form>
)
}
return (
<>
<Spin spinning={spintype}>
@ -177,296 +459,13 @@ const BidAssessmentResults: React.FC<{}> = (props) => {
}}></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,
xs: 1,
sm: 1,
md: 1,
lg: 1,
xl: 1,
xxl: 1,
}}
itemLayout="vertical"
rowKey="assesRoomId"
dataSource={item.assesList}
renderItem={(item1: any, index: any) => {
//标段上的报价类型确认 1-% 0-元
let sectionQuot = item?.quotationMethodDict == 'quotation_method_2' || item?.quotationMethodDict == 'quotation_method_3' ? '1' : '0'
const columns: any = [
{
title: '排名',
dataIndex: 'sort',
valueType: 'text',
width: 50,
},
{
title: '供应商名称',
dataIndex: 'companyName',
valueType: 'text',
width: 120,
},
{
hideInTable: type1,
title: proDict == 'procurement_mode_7' ? '报价总金额净价(元)' : sectionQuot == '1' ? '报价(%' : '报价(元)',
dataIndex: 'price',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('price', '报价', record.price, true, true)
} else {
return record.price
}
}
},
{
hideInTable: type2,
title: proDict == 'procurement_mode_7' ? '报价总金额含税价(元)' : sectionQuot == '1' ? '评审价(%' : '评审价(元)',
dataIndex: 'priceReview',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('priceReview', '评审价', record.priceReview, true, true)
} else {
return record.priceReview
}
}
},
{
title: '商务分',
dataIndex: 'businessScore',
width: 60,
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('businessScore', '商务分', record.businessScore, false, true)
} else {
return record.businessScore
}
}
},
{
title: '技术分',
width: 60,
dataIndex: 'technicalScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('technicalScore', '技术分', record.technicalScore, false, true)
} else {
return record.technicalScore
}
}
},
{
title: '服务分',
width: 60,
dataIndex: 'serviceScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('serviceScore', '服务分', record.serviceScore, false, true)
} else {
return record.serviceScore
}
}
},
{
title: '价格分',
width: 60,
dataIndex: 'priceScore',
hideInTable: expandTotalScore,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('priceScore', '价格分', record.priceScore, false, true)
} else {
return record.priceScore
}
}
},
{
title: (
<span>
<Text keyboard onClick={() => setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"}</Text>
</span>
),
dataIndex: 'totalScore',
width: 120,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('totalScore', '综合得分', record.totalScore, false, true)
} else {
return record.totalScore
}
}
},
{
hideInTable: defId === 'negotiation_single_simple',
title: '是否通过初步评审',
dataIndex: 'firstRvwResult',
width: 100,
render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason)
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '是否通过详审',
dataIndex: 'detailRvwResult',
width: 100,
render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason)
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '应答是否有效',
width: 80,
dataIndex: 'answerValid',
render: (_: any, record: any) => {
return record.answerValid === 1 ? '是' : record.answerValid === 0 ? '否' : '-'
}
},
{
title: '是否' + name1 + '候选人',
dataIndex: 'winnerCandidate',
width: 100,
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnSelect('winnerCandidate', record.winnerCandidate)
} else {
return record.winnerCandidate === 1 ? '是' : '否'
}
}
},
{
hideInTable: type5 || defId === 'negotiation_single_simple',
title: '是否拟' + name1 + '人',
width: 80,
dataIndex: 'winnerBidder',
render: (_: any, record: any) => {
return record.winnerBidder === 1 ? '是' : record.winnerBidder === 0 ? '否' : '-'
}
},
{
hideInTable: type3,
title: '拟签约金额(不含增值税)(元)',
width: 150,
dataIndex: 'contractedMoney',
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return (
<>
{returnInput('contractedMoney', '拟签约金额', record.contractedMoney, false, true)}
{returnInput('id', '供应商id', record.id, false, false, true)}
{returnInput('resultId', '结果id', record.resultId, false, false, true)}
{returnInput('companyId', '公司id', record.companyId, false, false, true)}
{returnInput('companyName', '公司名称', record.companyName, false, false, true)}
</>
)
} else {
return record.contractedMoney
}
}
},
{
hideInTable: type4,
title: '增值税金额(元)',
width: 150,
dataIndex: 'taxRatePrice',
render: (_: any, record: any) => {
if (defId === 'negotiation_single_simple' && record.pushStatus == "0") {
return returnInput('taxRatePrice', '增值税金额', record.taxRatePrice, false, true)
} else {
return record.taxRatePrice
}
}
},
]
return (
<ProTable
size={"small"}
loading={pageloading}
scroll={{ x: true }}
search={false}
options={false}
columns={columns}
dataSource={item1.reviewList}
toolbar={{
title: item1.againEvaluationSort == 'null' || isEmpty(item1.againEvaluationSort) ? null : `${item1.againEvaluationSort}次重审`,
}}
rowKey="id"
toolBarRender={(record: any) => [
<>
<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 () => {
await saveResult({
id: form.getFieldValue("resultId"),
suppliers: [
{
...form.getFieldsValue(),
"winnerCandidate": form.getFieldValue("winnerCandidate") == '是' ? '1' : '0',
"firstRvwResult": form.getFieldValue("firstRvwResult") == '是' ? '1' : '0',
"detailRvwResult": form.getFieldValue("detailRvwResult") == '是' ? '1' : '0',
"answerValid": form.getFieldValue("answerValid") == '是' ? '1' : '0',
"winnerBidder": form.getFieldValue("winnerBidder") == '是' ? '1' : '0',
}
]
}).then((res) => {
if (res.success) { message.success('保存成功!') }
})
}).finally(() => setSpintype(false));
}}
></Button>
{
defId === 'negotiation_single_simple' ?
<Button
hidden={
btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase']) ||
!item1.reviewList[0].price ||
!item1.reviewList[0].priceReview
}
disabled={item1.pushStatus == "1" ? true : false} key={"1"}
onClick={() => pushResult(item1)} type="primary" loading={spintype}>{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>
}
<Button key={"2"} onClick={() => getResultList(item1)}></Button>
</>
]}
pagination={{
defaultPageSize: 10,
showSizeChanger: false,
}}
/>
)
}}
>
</List>
</Panel>
</Collapse>
)}
/>
<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,72 +1,20 @@
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
const [ViewRishFormVisible, setViewRishFormVisible] = useState<any>(false);
//查看详情窗口record
const [ViewRishValues, setViewRishValues] = useState<any>({});
//一致性
const [ViewQuoteWarningFormVisible, setViewQuoteWarningFormVisible] = useState<any>(false);
//查看详情窗口record
@ -86,45 +34,45 @@ const Sing: React.FC<{}> = () => {
const [ViewJuryScoringRemindFormVisible, setViewJuryScoringRemindFormVisible] = useState<any>(false);
//查看详情窗口record
const [ViewJuryScoringRemindValues, setViewJuryScoringRemindValues] = useState<any>({});
//评审专家打分偏离度分析
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 (
<>
{
ViewRishFormModal ? (
<ViewRishFormModal
modalVisible={ViewRishFormVisible}
values={ViewRishValues}
onCancel={() => {
setViewRishFormVisible(!ViewRishFormVisible);
setViewRishValues({});
}}
>
</ViewRishFormModal>
) : null
}
{
ViewQuoteWarningFormModal ? (
<ViewQuoteWarningFormModal
modalVisible={ViewQuoteWarningFormVisible}
values={ViewQuoteWarningValues}
onCancel={() => {
setViewQuoteWarningFormVisible(!ViewQuoteWarningFormVisible);
setViewQuoteWarningValues({});
}}
>
{
ViewRishFormModal ? (
<ViewRishFormModal
modalVisible={ViewRishFormVisible}
values={ViewRishValues}
onCancel={() => {
setViewRishFormVisible(!ViewRishFormVisible);
setViewRishValues({});
}}
>
</ViewRishFormModal>
) : null
}
{
ViewQuoteWarningFormModal ? (
<ViewQuoteWarningFormModal
modalVisible={ViewQuoteWarningFormVisible}
values={ViewQuoteWarningValues}
onCancel={() => {
setViewQuoteWarningFormVisible(!ViewQuoteWarningFormVisible);
setViewQuoteWarningValues({});
}}
>
</ViewQuoteWarningFormModal>
) : null
@ -193,6 +141,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 => {
commonMessage(res);
init();
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;
}
}