1.11 第十四版,修改
This commit is contained in:
@ -51,7 +51,11 @@ export default [
|
|||||||
path: '/401',
|
path: '/401',
|
||||||
component: './401',
|
component: './401',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
exact: true,
|
||||||
|
path: '/404',
|
||||||
|
component: './404',
|
||||||
|
},
|
||||||
{//开标室
|
{//开标室
|
||||||
path: '/room',
|
path: '/room',
|
||||||
component: '../layouts/RoomLayout',
|
component: '../layouts/RoomLayout',
|
||||||
|
BIN
src/assets/monitor/title-icon.png
Normal file
BIN
src/assets/monitor/title-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 B |
@ -6,12 +6,12 @@ const NoFoundPage: React.FC<{}> = () => (
|
|||||||
<Result
|
<Result
|
||||||
status="404"
|
status="404"
|
||||||
title="404"
|
title="404"
|
||||||
subTitle="Sorry, the page you visited does not exist."
|
subTitle="对不起,您访问的页面不存在。"
|
||||||
extra={
|
// extra={
|
||||||
<Button type="primary" onClick={() => history.push('/')}>
|
// <Button type="primary" onClick={() => history.push('/')}>
|
||||||
Back Home
|
// Back Home
|
||||||
</Button>
|
// </Button>
|
||||||
}
|
// }
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
data.decryptExceptionList[i]["projectName"] = data.decryptExceptionList[i].projectRecord?.projectName;
|
data.decryptExceptionList[i]["projectName"] = data.decryptExceptionList[i].projectRecord?.projectName;
|
||||||
data.decryptExceptionList[i]["ownerContactName"] = data.decryptExceptionList[i].projectRecord?.ownerContactName;
|
data.decryptExceptionList[i]["ownerContactName"] = data.decryptExceptionList[i].projectRecord?.ownerContactName;
|
||||||
data.decryptExceptionList[i]["ownerContactTel"] = data.decryptExceptionList[i].projectRecord?.ownerContactTel;
|
data.decryptExceptionList[i]["ownerContactTel"] = data.decryptExceptionList[i].projectRecord?.ownerContactTel;
|
||||||
data.decryptExceptionList[i]["tenderAgencyName"] = data.decryptExceptionList[i].projectRecord?.tenderAgencyName;
|
data.decryptExceptionList[i]["appManagerName"] = data.decryptExceptionList[i].projectRecord?.appManagerName;
|
||||||
data.decryptExceptionList[i]["appManagerTel"] = data.decryptExceptionList[i].projectRecord?.appManagerTel;
|
data.decryptExceptionList[i]["appManagerTel"] = data.decryptExceptionList[i].projectRecord?.appManagerTel;
|
||||||
data.decryptExceptionList[i]["recruitStartTime"] = data.decryptExceptionList[i].projectRecord?.recruitStartTime;
|
data.decryptExceptionList[i]["recruitStartTime"] = data.decryptExceptionList[i].projectRecord?.recruitStartTime;
|
||||||
data.decryptExceptionList[i]["bidMethodDict"] = data.decryptExceptionList[i].projectRecord?.bidMethodDict;
|
data.decryptExceptionList[i]["bidMethodDict"] = data.decryptExceptionList[i].projectRecord?.bidMethodDict;
|
||||||
@ -100,7 +100,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
data.macSameList[i]["projectName"] = data.macSameList[i].projectRecord?.projectName;
|
data.macSameList[i]["projectName"] = data.macSameList[i].projectRecord?.projectName;
|
||||||
data.macSameList[i]["ownerContactName"] = data.macSameList[i].projectRecord?.ownerContactName;
|
data.macSameList[i]["ownerContactName"] = data.macSameList[i].projectRecord?.ownerContactName;
|
||||||
data.macSameList[i]["ownerContactTel"] = data.macSameList[i].projectRecord?.ownerContactTel;
|
data.macSameList[i]["ownerContactTel"] = data.macSameList[i].projectRecord?.ownerContactTel;
|
||||||
data.macSameList[i]["tenderAgencyName"] = data.macSameList[i].projectRecord?.tenderAgencyName;
|
data.macSameList[i]["appManagerName"] = data.macSameList[i].projectRecord?.appManagerName;
|
||||||
data.macSameList[i]["appManagerTel"] = data.macSameList[i].projectRecord?.appManagerTel;
|
data.macSameList[i]["appManagerTel"] = data.macSameList[i].projectRecord?.appManagerTel;
|
||||||
data.macSameList[i]["recruitStartTime"] = data.macSameList[i].projectRecord?.recruitStartTime;
|
data.macSameList[i]["recruitStartTime"] = data.macSameList[i].projectRecord?.recruitStartTime;
|
||||||
data.macSameList[i]["bidMethodDict"] = data.macSameList[i].projectRecord?.bidMethodDict;
|
data.macSameList[i]["bidMethodDict"] = data.macSameList[i].projectRecord?.bidMethodDict;
|
||||||
@ -238,7 +238,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
onHeaderCell,
|
onHeaderCell,
|
||||||
render: (_: any, record: any) => {
|
render: (_: any, record: any) => {
|
||||||
return (
|
return (
|
||||||
<a onClick={() => { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
<a onClick={() => { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -301,7 +301,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
onHeaderCell,
|
onHeaderCell,
|
||||||
render: (_: any, record: any) => {
|
render: (_: any, record: any) => {
|
||||||
return (
|
return (
|
||||||
<a onClick={() => { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
<a onClick={() => { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -364,7 +364,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
onHeaderCell,
|
onHeaderCell,
|
||||||
render: (_: any, record: any) => {
|
render: (_: any, record: any) => {
|
||||||
return (
|
return (
|
||||||
<a onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
<a onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -427,7 +427,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
onHeaderCell,
|
onHeaderCell,
|
||||||
render: (_: any, record: any) => {
|
render: (_: any, record: any) => {
|
||||||
return (
|
return (
|
||||||
<a onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
<a onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -490,7 +490,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
onHeaderCell,
|
onHeaderCell,
|
||||||
render: (_: any, record: any) => {
|
render: (_: any, record: any) => {
|
||||||
return (
|
return (
|
||||||
<a onClick={() => { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
<a onClick={() => { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -517,7 +517,7 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
</div>
|
</div>
|
||||||
<ScreenLabel title="开标后六小时未开启评审" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType(null); setModalListData(noOpenAssessListData); setModalListVisible(true); }}>more</span>} />
|
<ScreenLabel title="开标后六小时未开启评审" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType(null); setModalListData(noOpenAssessListData); setModalListVisible(true); }}>more</span>} />
|
||||||
<div className="monitor-exception-card">
|
<div className="monitor-exception-card">
|
||||||
<ScrollTable dataSource={noOpenAssessListData} columns={columns} ynum={266} selectKey={selectKey} />
|
<ScrollTable dataSource={noOpenAssessListData} columns={columns} ynum={266} rowKey="sectionId" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
@ -525,11 +525,11 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
<div className="monitor-center-main">
|
<div className="monitor-center-main">
|
||||||
<ScreenLabel title="解密异常项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("解密异常"); setModalListData(decryptData?.decryptExceptionList ? decryptData?.decryptExceptionList : []); setModalListVisible(true); }}>more</span>} />
|
<ScreenLabel title="解密异常项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("解密异常"); setModalListData(decryptData?.decryptExceptionList ? decryptData?.decryptExceptionList : []); setModalListVisible(true); }}>more</span>} />
|
||||||
<div className="monitor-exception-card">
|
<div className="monitor-exception-card">
|
||||||
<ScrollTable dataSource={decryptData?.decryptExceptionList} columns={columnsSecond} selectKey={selectKey} ynum={266} />
|
<ScrollTable dataSource={decryptData?.decryptExceptionList} columns={columnsSecond} rowKey="id" selectKey={selectKey} ynum={266} />
|
||||||
</div>
|
</div>
|
||||||
<ScreenLabel title="开启评审后3日未结束评标" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData(threeDayNoEndData); setModalListVisible(true); }}>more</span>} />
|
<ScreenLabel title="开启评审后3日未结束评标" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData(threeDayNoEndData); setModalListVisible(true); }}>more</span>} />
|
||||||
<div className="monitor-exception-card">
|
<div className="monitor-exception-card">
|
||||||
<ScrollTable dataSource={threeDayNoEndData} columns={columnsForth} ynum={266} selectKey={selectKey} />
|
<ScrollTable dataSource={threeDayNoEndData} columns={columnsForth} ynum={266} rowKey="id" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
@ -537,11 +537,11 @@ const MonitorException: React.FC<{}> = () => {
|
|||||||
<div className="monitor-right-main">
|
<div className="monitor-right-main">
|
||||||
<ScreenLabel title="MAC地址重复项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("MAC地址重复"); setModalListData(decryptData?.macSameList ? decryptData?.macSameList : []); setModalListVisible(true); }}>more</span>} />
|
<ScreenLabel title="MAC地址重复项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("MAC地址重复"); setModalListData(decryptData?.macSameList ? decryptData?.macSameList : []); setModalListVisible(true); }}>more</span>} />
|
||||||
<div className="monitor-exception-card">
|
<div className="monitor-exception-card">
|
||||||
<ScrollTable dataSource={decryptData?.macSameList} columns={columnsFifth} ynum={266} selectKey={selectKey} />
|
<ScrollTable dataSource={decryptData?.macSameList} columns={columnsFifth} ynum={266} rowKey="id" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
<ScreenLabel title="评标结束后3日内未发布公示" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData(threeDaysUnSendAnnoList); setModalListVisible(true); }}>more</span>} />
|
<ScreenLabel title="评标结束后3日内未发布公示" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData(threeDaysUnSendAnnoList); setModalListVisible(true); }}>more</span>} />
|
||||||
<div className="monitor-exception-card">
|
<div className="monitor-exception-card">
|
||||||
<ScrollTable dataSource={threeDaysUnSendAnnoList} columns={columnsThird} ynum={266} selectKey={selectKey} />
|
<ScrollTable dataSource={threeDaysUnSendAnnoList} columns={columnsThird} ynum={266} rowKey="bidSectName" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
|
@ -9,6 +9,7 @@ import Frame10118 from '@/assets/monitor/Frame-10118.png';
|
|||||||
import Frame10119 from '@/assets/monitor/Frame-10119.png';
|
import Frame10119 from '@/assets/monitor/Frame-10119.png';
|
||||||
import Frame10120 from '@/assets/monitor/Frame-10120.png';
|
import Frame10120 from '@/assets/monitor/Frame-10120.png';
|
||||||
import Frame10121 from '@/assets/monitor/Frame-10121.png';
|
import Frame10121 from '@/assets/monitor/Frame-10121.png';
|
||||||
|
import titleIcon from '@/assets/monitor/title-icon.png';
|
||||||
import left from '@/assets/monitor/left.png';
|
import left from '@/assets/monitor/left.png';
|
||||||
import right from '@/assets/monitor/right.png';
|
import right from '@/assets/monitor/right.png';
|
||||||
import { CaretRightOutlined, DownOutlined } from '@ant-design/icons';
|
import { CaretRightOutlined, DownOutlined } from '@ant-design/icons';
|
||||||
@ -583,10 +584,10 @@ export const ScreenTitle = (props: { title: string, children: any }) => {
|
|||||||
export const ModalList = (props: { modalVisible: boolean, onCancel: () => void, exceptionType?: string, exceptionData: any[] }) => {
|
export const ModalList = (props: { modalVisible: boolean, onCancel: () => void, exceptionType?: string, exceptionData: any[] }) => {
|
||||||
const { modalVisible, onCancel, exceptionType, exceptionData } = props;
|
const { modalVisible, onCancel, exceptionType, exceptionData } = props;
|
||||||
const modalHeight = window.innerHeight * 96 / 100;
|
const modalHeight = window.innerHeight * 96 / 100;
|
||||||
const labelStyle = { color: "#29F1FA", fontWeight: "bold" };
|
const labelStyle = { color: "#29F0F9", fontWeight: "bold", width: "100px" };
|
||||||
const contentStyle = { color: "#fff" };
|
const contentStyle = { color: "#fff", paddingLeft: "20px" };
|
||||||
const titleStyle = { color: "#1b7ef2", fontWeight: "bold", marginBottom: '24px' };
|
const titleStyle = { color: "#01C2FF", fontWeight: 700, marginBottom: 0 };
|
||||||
const dividerStyle = { borderColor: "#999", margin: "12px 0 24px" };
|
// const dividerStyle = { borderColor: "#999", margin: "12px 0 24px" };
|
||||||
//初始化字典
|
//初始化字典
|
||||||
let dic: any = getDicData();
|
let dic: any = getDicData();
|
||||||
let dicData: any = JSON.parse(dic);
|
let dicData: any = JSON.parse(dic);
|
||||||
@ -598,34 +599,39 @@ export const ModalList = (props: { modalVisible: boolean, onCancel: () => void,
|
|||||||
onCancel={() => onCancel()}
|
onCancel={() => onCancel()}
|
||||||
width={"60%"}
|
width={"60%"}
|
||||||
style={{ maxHeight: modalHeight }}
|
style={{ maxHeight: modalHeight }}
|
||||||
bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', }}
|
bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', padding: "20px 24px 24px" }}
|
||||||
centered
|
centered
|
||||||
footer={null}
|
footer={null}
|
||||||
>
|
>
|
||||||
<h3 style={titleStyle}>重点监测异常明细单</h3>
|
<h3 style={titleStyle}>重点监测异常明细单</h3>
|
||||||
{exceptionData.length > 0 ? exceptionData.map((item, index) => {
|
{exceptionData.length > 0 ? exceptionData.map((item, index) => {
|
||||||
return <>
|
return (
|
||||||
{index == 0 ? null : <Divider style={dividerStyle} />}
|
<div key={index} className={exceptionData.length > 1 ? 'modal-list-block' : 'modal-list-block modal-list-block-border0'}>
|
||||||
|
<div className='modal-list-pname'>
|
||||||
|
<img src={titleIcon} /><span>{item?.projectName}</span>
|
||||||
|
<div>{item?.bidSectName || item?.sectionName}</div>
|
||||||
|
</div>
|
||||||
|
<div className='modal-list-desc'>
|
||||||
<Descriptions>
|
<Descriptions>
|
||||||
<Descriptions.Item label="异常类型" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(exceptionType) ? exceptionType : item?.exType}</Descriptions.Item>
|
<Descriptions.Item label="异常类型" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(exceptionType) ? exceptionType : item?.exType}</Descriptions.Item>
|
||||||
<Descriptions.Item label="项目名称" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.projectName}</Descriptions.Item>
|
<Descriptions.Item label="开标时间" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.openTime || item?.recruitStartTime || item?.openingTime}</Descriptions.Item>
|
||||||
<Descriptions.Item label="标段名称" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.bidSectName || item?.sectionName}</Descriptions.Item>
|
<Descriptions.Item label="采购预算" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"}</Descriptions.Item>
|
||||||
<Descriptions.Item label="省分" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.provinceName || item?.regionDictName || item?.province}</Descriptions.Item>
|
<Descriptions.Item label="省分" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.provinceName || item?.regionDictName || item?.province}</Descriptions.Item>
|
||||||
<Descriptions.Item label="采购经理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactName}</Descriptions.Item>
|
<Descriptions.Item label="采购经理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactName}</Descriptions.Item>
|
||||||
<Descriptions.Item label="采购经理电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactTel}</Descriptions.Item>
|
<Descriptions.Item label="采购经理电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactTel}</Descriptions.Item>
|
||||||
<Descriptions.Item label="标段状态" labelStyle={labelStyle} contentStyle={contentStyle}>{(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)}</Descriptions.Item>
|
<Descriptions.Item label="标段状态" labelStyle={labelStyle} contentStyle={contentStyle}>{(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)}</Descriptions.Item>
|
||||||
<Descriptions.Item label="招标代理机构" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.tenderAgencyName}</Descriptions.Item>
|
<Descriptions.Item label="招标代理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerName}</Descriptions.Item>
|
||||||
<Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item>
|
<Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item>
|
||||||
<Descriptions.Item label="开标时间" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.openTime || item?.recruitStartTime || item?.openingTime}</Descriptions.Item>
|
|
||||||
<Descriptions.Item label="采购预算" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"}</Descriptions.Item>
|
|
||||||
</Descriptions>
|
</Descriptions>
|
||||||
</>
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
}) : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} className="monitor-modal-empty" />}
|
}) : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} className="monitor-modal-empty" />}
|
||||||
<div className='monitor-modal-btn'>
|
{/* <div className='monitor-modal-btn'>
|
||||||
<div className='modal-list-btn' onClick={() => onCancel()}>
|
<div className='modal-list-btn' onClick={() => onCancel()}>
|
||||||
<span>确 定</span>
|
<span>确 定</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> */}
|
||||||
</Modal>
|
</Modal>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -1363,7 +1369,7 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?:
|
|||||||
}
|
}
|
||||||
}, 10000)
|
}, 10000)
|
||||||
}
|
}
|
||||||
if (type == "mapTwice") {//地图自动轮播tooltip
|
if (type == "mapTwice" || type == "mapThird") {//地图自动轮播tooltip
|
||||||
let index = 1;
|
let index = 1;
|
||||||
autoSelect(0);
|
autoSelect(0);
|
||||||
if (chartData.length > 1) {
|
if (chartData.length > 1) {
|
||||||
@ -1391,6 +1397,7 @@ export const authCheck = () => {
|
|||||||
//获取角色列表
|
//获取角色列表
|
||||||
const authorityList: any[] | undefined = getSessionUserData()?.authorityList;
|
const authorityList: any[] | undefined = getSessionUserData()?.authorityList;
|
||||||
if (isEmpty(authorityList)) {
|
if (isEmpty(authorityList)) {
|
||||||
|
history.replace({ pathname: "/404" });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (authorityList?.findIndex(item => item.roleCode == "ebtp-watcher") == -1) {//监看人员校验
|
if (authorityList?.findIndex(item => item.roleCode == "ebtp-watcher") == -1) {//监看人员校验
|
||||||
@ -1423,6 +1430,8 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
const [todayInfoData, setTodayInfoData] = useState<any>();
|
const [todayInfoData, setTodayInfoData] = useState<any>();
|
||||||
//权限校验
|
//权限校验
|
||||||
const auth = useRef<boolean>(authCheck());
|
const auth = useRef<boolean>(authCheck());
|
||||||
|
//定时器秒数
|
||||||
|
const _time = 20000;
|
||||||
const bidStatusMap = ["准备评标", "正在评标", "评标结束", ""];
|
const bidStatusMap = ["准备评标", "正在评标", "评标结束", ""];
|
||||||
const statusColorMap = ["card-text-orange", "card-text-green", "card-text-purple", "card-text-white"];
|
const statusColorMap = ["card-text-orange", "card-text-green", "card-text-purple", "card-text-white"];
|
||||||
//year select
|
//year select
|
||||||
@ -1474,7 +1483,7 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
const getActiveSupplier = (ym: string) => {
|
const getActiveSupplier = (ym: string) => {
|
||||||
getActiveSupplierAPI(ym).then(res => {
|
getActiveSupplierAPI(ym).then(res => {
|
||||||
if (res?.code == 200) {
|
if (res?.code == 200) {
|
||||||
const data = res?.data;
|
const data = res?.data?.slice(0, 20);
|
||||||
if (data.length > 0) {
|
if (data.length > 0) {
|
||||||
const max = data[0].tenderCount;
|
const max = data[0].tenderCount;
|
||||||
for (let i = 0, length = data.length; i < length; i++) {
|
for (let i = 0, length = data.length; i < length; i++) {
|
||||||
@ -1548,7 +1557,6 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (auth.current) {
|
if (auth.current) {
|
||||||
getTodayOpening();
|
|
||||||
getReviewDistribution();
|
getReviewDistribution();
|
||||||
getOpeningList();
|
getOpeningList();
|
||||||
getMonitorList();
|
getMonitorList();
|
||||||
@ -1566,6 +1574,19 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
}
|
}
|
||||||
}, [yearSelect])
|
}, [yearSelect])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let interval: any;
|
||||||
|
if (auth.current) {
|
||||||
|
getTodayOpening();
|
||||||
|
interval = setInterval(() => {
|
||||||
|
getTodayOpening();
|
||||||
|
}, _time);
|
||||||
|
}
|
||||||
|
return () => {
|
||||||
|
clearInterval(interval);
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScreenTitle title="智能招标采购室">
|
<ScreenTitle title="智能招标采购室">
|
||||||
<div className="top-main">
|
<div className="top-main">
|
||||||
@ -1588,13 +1609,13 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
<ScreenLabel title="今日开标" extra={<span>标段总数 {isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber : 0} 开标完成率 {isNotEmpty(todayOpeningData?.sectionNumber) && todayOpeningData?.sectionNumber != "0" ? Number(((Number(todayOpeningData?.banner) / todayOpeningData?.sectionNumber) * 100).toFixed(0)) : 0}% 评标完成率 {(isNotEmpty(todayInfoData?.sectionNumber) && todayInfoData?.sectionNumber != "0") ? Number(((Number(todayInfoData?.resultNumber) / todayInfoData?.sectionNumber) * 100).toFixed(0)) : 0}%</span>} />
|
<ScreenLabel title="今日开标" extra={<span>标段总数 {isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber : 0} 开标完成率 {isNotEmpty(todayOpeningData?.sectionNumber) && todayOpeningData?.sectionNumber != "0" ? Number(((Number(todayOpeningData?.banner) / todayOpeningData?.sectionNumber) * 100).toFixed(0)) : 0}% 评标完成率 {(isNotEmpty(todayInfoData?.sectionNumber) && todayInfoData?.sectionNumber != "0") ? Number(((Number(todayInfoData?.resultNumber) / todayInfoData?.sectionNumber) * 100).toFixed(0)) : 0}%</span>} />
|
||||||
</div>
|
</div>
|
||||||
<div className="scroll-table">
|
<div className="scroll-table">
|
||||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={266} />
|
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} rowKey="sectionId" ynum={266} />
|
||||||
</div>
|
</div>
|
||||||
<div className="monitor-label-pointer" onClick={() => { window.open("/ElecMonitor/Supplier") }}>
|
<div className="monitor-label-pointer" onClick={() => { window.open("/ElecMonitor/Supplier") }}>
|
||||||
<ScreenLabel title="活跃供应商" />
|
<ScreenLabel title="活跃供应商排名(Top20)" />
|
||||||
</div>
|
</div>
|
||||||
<div className="active-supplier">
|
<div className="active-supplier">
|
||||||
<StatisticTable columns={todayColumns} dataSource={activeSupplierData} ynum={340} />
|
<StatisticTable columns={todayColumns} dataSource={activeSupplierData} rowKey="companyName" ynum={340} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
@ -1636,7 +1657,7 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
<div>MORNING</div>
|
<div>MORNING</div>
|
||||||
</div>
|
</div>
|
||||||
{openingList.slice(0, 2).map((item, index) => (
|
{openingList.slice(0, 2).map((item, index) => (
|
||||||
<div className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
<div key={index} className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||||
<div>
|
<div>
|
||||||
<div>{item.startTime}-{item.endTime}</div>
|
<div>{item.startTime}-{item.endTime}</div>
|
||||||
<div>{item.num}/{item.max}</div>
|
<div>{item.num}/{item.max}</div>
|
||||||
@ -1650,7 +1671,7 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
<div>AFTERNOON</div>
|
<div>AFTERNOON</div>
|
||||||
</div>
|
</div>
|
||||||
{openingList.slice(2, 5).map((item, index) => (
|
{openingList.slice(2, 5).map((item, index) => (
|
||||||
<div className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
<div key={index} className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||||
<div>
|
<div>
|
||||||
<div>{item.startTime}-{item.endTime}</div>
|
<div>{item.startTime}-{item.endTime}</div>
|
||||||
<div>{item.num}/{item.max}</div>
|
<div>{item.num}/{item.max}</div>
|
||||||
@ -1663,7 +1684,7 @@ const MonitorHome: React.FC<{}> = () => {
|
|||||||
<ScreenLabel title="招标代理实施项目统计" />
|
<ScreenLabel title="招标代理实施项目统计" />
|
||||||
</div>
|
</div>
|
||||||
<div className="tender-agent">
|
<div className="tender-agent">
|
||||||
<StatisticTable columns={tjColumns} dataSource={annualAndTenderAgentData?.agencyProjectYear} ynum={340} />
|
<StatisticTable columns={tjColumns} dataSource={annualAndTenderAgentData?.agencyProjectYear} rowKey="tender_agency_name" ynum={340} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
|
@ -158,7 +158,20 @@ const OpenToday: React.FC<{}> = () => {
|
|||||||
const getDecryptSuccessRateToday = () => {
|
const getDecryptSuccessRateToday = () => {
|
||||||
getDecryptSuccessRateTodayAPI().then(res => {
|
getDecryptSuccessRateTodayAPI().then(res => {
|
||||||
if (res?.code == 200) {
|
if (res?.code == 200) {
|
||||||
setDecryptSuccessRateTodayData(res?.data);
|
const data = res?.data;
|
||||||
|
if (data?.decryptFailProjectList?.length > 0) {
|
||||||
|
for (let i = 0, length = data.decryptFailProjectList.length; i < length; i++) {
|
||||||
|
data.decryptFailProjectList[i]["regionDictName"] = data.decryptFailProjectList[i].projectRecord?.regionDictName;
|
||||||
|
data.decryptFailProjectList[i]["projectName"] = data.decryptFailProjectList[i].projectRecord?.projectName;
|
||||||
|
data.decryptFailProjectList[i]["ownerContactName"] = data.decryptFailProjectList[i].projectRecord?.ownerContactName;
|
||||||
|
data.decryptFailProjectList[i]["ownerContactTel"] = data.decryptFailProjectList[i].projectRecord?.ownerContactTel;
|
||||||
|
data.decryptFailProjectList[i]["appManagerName"] = data.decryptFailProjectList[i].projectRecord?.appManagerName;
|
||||||
|
data.decryptFailProjectList[i]["appManagerTel"] = data.decryptFailProjectList[i].projectRecord?.appManagerTel;
|
||||||
|
data.decryptFailProjectList[i]["recruitStartTime"] = data.decryptFailProjectList[i].projectRecord?.recruitStartTime;
|
||||||
|
data.decryptFailProjectList[i]["bidMethodDict"] = data.decryptFailProjectList[i].projectRecord?.bidMethodDict;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setDecryptSuccessRateTodayData(data);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -300,13 +313,13 @@ const OpenToday: React.FC<{}> = () => {
|
|||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<ScreenLabel title="今日开标明细" />
|
<ScreenLabel title="今日开标明细" />
|
||||||
<div className='monitor-tender-card'>
|
<div className='monitor-tender-card'>
|
||||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} selectKey={selectKey} />
|
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} rowKey="sectionId" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<ScreenLabel title="重保项目" />
|
<ScreenLabel title="重保项目" />
|
||||||
<div className='monitor-tender-card'>
|
<div className='monitor-tender-card'>
|
||||||
<ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} selectKey={selectKey} />
|
<ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} rowKey="id" selectKey={selectKey} />
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
@ -124,7 +124,7 @@ const Supplier: React.FC<{}> = () => {
|
|||||||
//onSelectChange select变更事件
|
//onSelectChange select变更事件
|
||||||
const onSelectChange = (value: string | number) => {
|
const onSelectChange = (value: string | number) => {
|
||||||
if (rankDataRef.current) {
|
if (rankDataRef.current) {
|
||||||
const data = rankDataRef.current[value] ? rankDataRef.current[value] : [];
|
const data = rankDataRef.current[value] ? rankDataRef.current[value]?.slice(0, 20) : [];
|
||||||
if (data.length > 0) {
|
if (data.length > 0) {
|
||||||
const max = data[0].tenderCount;
|
const max = data[0].tenderCount;
|
||||||
for (let i = 0, length = data.length; i < length; i++) {
|
for (let i = 0, length = data.length; i < length; i++) {
|
||||||
@ -194,12 +194,12 @@ const Supplier: React.FC<{}> = () => {
|
|||||||
<Row>
|
<Row>
|
||||||
<Col span={8}>
|
<Col span={8}>
|
||||||
<div className="monitor-left-main">
|
<div className="monitor-left-main">
|
||||||
<ScreenLabel title="全国活跃供应商排名" />
|
<ScreenLabel title="全国活跃供应商排名(Top20)" />
|
||||||
<div className="monitor-supplier-card">
|
<div className="monitor-supplier-card">
|
||||||
<span className='monitor-supplier-select-label'>交易方式</span> <SelectItem options={[{ label: "全部", value: "全部" }, { label: "公开招标", value: "公开招标" }, { label: "公开比选", value: "公开比选" }, { label: "公开招募", value: "公开招募" }, { label: "竞争性谈判", value: "竞争性谈判" }, { label: "单一来源", value: "单一来源" }, { label: "公开询价", value: "公开询价" }, { label: "邀请招标", value: "邀请招标" }]} onSelectChange={onSelectChange} />
|
<span className='monitor-supplier-select-label'>交易方式</span> <SelectItem options={[{ label: "全部", value: "全部" }, { label: "公开招标", value: "公开招标" }, { label: "公开比选", value: "公开比选" }, { label: "公开招募", value: "公开招募" }, { label: "竞争性谈判", value: "竞争性谈判" }, { label: "单一来源", value: "单一来源" }, { label: "公开询价", value: "公开询价" }, { label: "邀请招标", value: "邀请招标" }]} onSelectChange={onSelectChange} />
|
||||||
</div>
|
</div>
|
||||||
<div className="monitor-tender-card">
|
<div className="monitor-tender-card">
|
||||||
<StatisticTable dataSource={activeSupplierRankData} columns={columns} ynum={670} />
|
<StatisticTable dataSource={activeSupplierRankData} columns={columns} rowKey="companyName" ynum={670} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
|
@ -71,7 +71,7 @@ const TenderAgent: React.FC<{}> = () => {
|
|||||||
//省分代理分布
|
//省分代理分布
|
||||||
const [provinceData, setProvinceData] = useState<any[]>([]);
|
const [provinceData, setProvinceData] = useState<any[]>([]);
|
||||||
//btn select
|
//btn select
|
||||||
const [btnSelect, setBtnSelect] = useState<string>("0");
|
const [btnSelect, setBtnSelect] = useState<string>("1");
|
||||||
//year select
|
//year select
|
||||||
const localYear: string = moment().month() < 2 ? String(moment().year() - 1) : String(moment().year());
|
const localYear: string = moment().month() < 2 ? String(moment().year() - 1) : String(moment().year());
|
||||||
const [yearSelect, setYearSelect] = useState<string>(localYear);
|
const [yearSelect, setYearSelect] = useState<string>(localYear);
|
||||||
@ -207,15 +207,15 @@ const TenderAgent: React.FC<{}> = () => {
|
|||||||
{categoryChart}
|
{categoryChart}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<StatisticTable dataSource={tenderAgentData?.agencyProjectListYear?.slice(0, 15)} columns={columns} ynum={266} />
|
<StatisticTable dataSource={tenderAgentData?.agencyProjectListYear?.slice(0, 15)} columns={columns} rowKey="agencyName" ynum={266} />
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={16}>
|
<Col span={16}>
|
||||||
<ScreenLabel title="代理机构分布" />
|
<ScreenLabel title="代理机构分布" />
|
||||||
<div className="monitor-tender-select">
|
<div className="monitor-tender-select">
|
||||||
<Radio.Group buttonStyle="solid" onChange={onChange} value={btnSelect} className="monitor-tender-select-radio">
|
<Radio.Group buttonStyle="solid" onChange={onChange} value={btnSelect} className="monitor-tender-select-radio">
|
||||||
<Radio.Button value="0">代理分布省分</Radio.Button>
|
|
||||||
<Radio.Button value="1">省分代理分布</Radio.Button>
|
<Radio.Button value="1">省分代理分布</Radio.Button>
|
||||||
|
<Radio.Button value="0">代理分布省分</Radio.Button>
|
||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
<SelectRadio options={selectData} onSelectChange={onSelectChange} defaultText="请选择" hidden={btnSelect == "1"} />
|
<SelectRadio options={selectData} onSelectChange={onSelectChange} defaultText="请选择" hidden={btnSelect == "1"} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
background: url("~@/assets/monitor/background-3.jpg") left top no-repeat;
|
background: url("~@/assets/monitor/background-3.jpg") left top no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
|
font-family: 'Microsoft Yahei', '宋体';
|
||||||
// background-color: #0a0c11;
|
// background-color: #0a0c11;
|
||||||
|
|
||||||
.screen-wrapper {
|
.screen-wrapper {
|
||||||
@ -835,14 +836,13 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 18px 16px 16px 20px;
|
padding: 18px 16px 16px 20px;
|
||||||
gap: 40px;
|
|
||||||
background: rgba(27, 126, 242, 0.12);
|
background: rgba(27, 126, 242, 0.12);
|
||||||
|
|
||||||
.stage-left-img {
|
.stage-left-img {
|
||||||
width: 179.18px;
|
width: 166.18px;
|
||||||
height: 179.18px;
|
height: 166.18px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 10px;
|
padding: 8px;
|
||||||
|
|
||||||
.box-wrap {
|
.box-wrap {
|
||||||
--front-color: #1b7ef2;
|
--front-color: #1b7ef2;
|
||||||
@ -945,7 +945,7 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
&>span {
|
&>span {
|
||||||
font-size: 20px;
|
font-size: 18px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
letter-spacing: 0.8px;
|
letter-spacing: 0.8px;
|
||||||
@ -1104,8 +1104,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.monitor-modal-list {
|
.monitor-modal-list {
|
||||||
|
font-family: 'Microsoft Yahei', '宋体';
|
||||||
|
|
||||||
.ant-modal-body {
|
.ant-modal-body {
|
||||||
background: #0A1A34cc;
|
background: #0d142bcc;
|
||||||
|
border: 2px solid #1b7ef2;
|
||||||
|
box-shadow: inset 0px 0px 16px 0px #00a3ff;
|
||||||
|
border-radius: 6px;
|
||||||
|
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
@ -1113,39 +1118,52 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ant-modal-content {
|
.ant-modal-content {
|
||||||
background: #0A1A34cc;
|
background: #0d142bcc;
|
||||||
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-modal-close-x {
|
.ant-modal-close-x {
|
||||||
color: #1B7EF2;
|
color: #01C2FF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.monitor-modal-btn {
|
.ant-descriptions-item-container .ant-descriptions-item-label {
|
||||||
display: flex;
|
justify-content: flex-end;
|
||||||
justify-content: center;
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-list-btn {
|
.modal-list-block {
|
||||||
padding: 4px 15px;
|
padding: 20px 0 16px;
|
||||||
background-color: #0A1A34;
|
box-sizing: border-box;
|
||||||
border-radius: 20px;
|
border-width: 0px 0px 1px 0px;
|
||||||
cursor: pointer;
|
border-style: solid;
|
||||||
border: 1px solid #1b7ef2;
|
border-color: #093B64;
|
||||||
width: 64px;
|
}
|
||||||
|
|
||||||
&:hover {
|
.modal-list-block-border0 {
|
||||||
background-color: #1b7ef2;
|
border-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-list-pname {
|
||||||
&>span {
|
&>span {
|
||||||
color: #fff;
|
font-size: 16px;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 38px;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>img {
|
||||||
|
position: relative;
|
||||||
|
top: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>div {
|
||||||
|
padding-left: 28px;
|
||||||
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&>span {
|
.modal-list-desc {
|
||||||
color: #1b7ef2;
|
padding-top: 24px;
|
||||||
line-height: 16px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user