diff --git a/config/router.config.ts b/config/router.config.ts index f12a093..34acf9b 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -51,7 +51,11 @@ export default [ path: '/401', component: './401', }, - + { + exact: true, + path: '/404', + component: './404', + }, {//开标室 path: '/room', component: '../layouts/RoomLayout', diff --git a/src/assets/monitor/title-icon.png b/src/assets/monitor/title-icon.png new file mode 100644 index 0000000..372b993 Binary files /dev/null and b/src/assets/monitor/title-icon.png differ diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 7e65e2b..7a11e17 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -6,12 +6,12 @@ const NoFoundPage: React.FC<{}> = () => ( history.push('/')}> - Back Home - - } + subTitle="对不起,您访问的页面不存在。" + // extra={ + // + // } /> ); diff --git a/src/pages/ElecEvaluation/Monitor/Exception/index.tsx b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx index 3820875..95ed88e 100644 --- a/src/pages/ElecEvaluation/Monitor/Exception/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx @@ -87,7 +87,7 @@ const MonitorException: React.FC<{}> = () => { data.decryptExceptionList[i]["projectName"] = data.decryptExceptionList[i].projectRecord?.projectName; data.decryptExceptionList[i]["ownerContactName"] = data.decryptExceptionList[i].projectRecord?.ownerContactName; 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]["recruitStartTime"] = data.decryptExceptionList[i].projectRecord?.recruitStartTime; 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]["ownerContactName"] = data.macSameList[i].projectRecord?.ownerContactName; 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]["recruitStartTime"] = data.macSameList[i].projectRecord?.recruitStartTime; data.macSameList[i]["bidMethodDict"] = data.macSameList[i].projectRecord?.bidMethodDict; @@ -238,7 +238,7 @@ const MonitorException: React.FC<{}> = () => { onHeaderCell, render: (_: any, record: any) => { return ( - { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看 + { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看 ) }, }, @@ -301,7 +301,7 @@ const MonitorException: React.FC<{}> = () => { onHeaderCell, render: (_: any, record: any) => { return ( - { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看 + { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看 ) }, }, @@ -364,7 +364,7 @@ const MonitorException: React.FC<{}> = () => { onHeaderCell, render: (_: any, record: any) => { return ( - { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看 + { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看 ) }, }, @@ -427,7 +427,7 @@ const MonitorException: React.FC<{}> = () => { onHeaderCell, render: (_: any, record: any) => { return ( - { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看 + { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看 ) }, }, @@ -490,7 +490,7 @@ const MonitorException: React.FC<{}> = () => { onHeaderCell, render: (_: any, record: any) => { return ( - { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看 + { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看 ) }, }, @@ -517,7 +517,7 @@ const MonitorException: React.FC<{}> = () => { { setExceptionType(null); setModalListData(noOpenAssessListData); setModalListVisible(true); }}>more} />
- +
@@ -525,11 +525,11 @@ const MonitorException: React.FC<{}> = () => {
{ setExceptionType("解密异常"); setModalListData(decryptData?.decryptExceptionList ? decryptData?.decryptExceptionList : []); setModalListVisible(true); }}>more} />
- +
{ setExceptionType("开启评审后3日未结束评标"); setModalListData(threeDayNoEndData); setModalListVisible(true); }}>more} />
- +
@@ -537,11 +537,11 @@ const MonitorException: React.FC<{}> = () => {
{ setExceptionType("MAC地址重复"); setModalListData(decryptData?.macSameList ? decryptData?.macSameList : []); setModalListVisible(true); }}>more} />
- +
{ setExceptionType("评标结束后3日内未发布公示"); setModalListData(threeDaysUnSendAnnoList); setModalListVisible(true); }}>more} />
- +
diff --git a/src/pages/ElecEvaluation/Monitor/Home/index.tsx b/src/pages/ElecEvaluation/Monitor/Home/index.tsx index 5cb9fa9..081eef3 100644 --- a/src/pages/ElecEvaluation/Monitor/Home/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Home/index.tsx @@ -9,6 +9,7 @@ import Frame10118 from '@/assets/monitor/Frame-10118.png'; import Frame10119 from '@/assets/monitor/Frame-10119.png'; import Frame10120 from '@/assets/monitor/Frame-10120.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 right from '@/assets/monitor/right.png'; 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[] }) => { const { modalVisible, onCancel, exceptionType, exceptionData } = props; const modalHeight = window.innerHeight * 96 / 100; - const labelStyle = { color: "#29F1FA", fontWeight: "bold" }; - const contentStyle = { color: "#fff" }; - const titleStyle = { color: "#1b7ef2", fontWeight: "bold", marginBottom: '24px' }; - const dividerStyle = { borderColor: "#999", margin: "12px 0 24px" }; + const labelStyle = { color: "#29F0F9", fontWeight: "bold", width: "100px" }; + const contentStyle = { color: "#fff", paddingLeft: "20px" }; + const titleStyle = { color: "#01C2FF", fontWeight: 700, marginBottom: 0 }; + // const dividerStyle = { borderColor: "#999", margin: "12px 0 24px" }; //初始化字典 let dic: any = getDicData(); let dicData: any = JSON.parse(dic); @@ -598,34 +599,39 @@ export const ModalList = (props: { modalVisible: boolean, onCancel: () => void, onCancel={() => onCancel()} width={"60%"} style={{ maxHeight: modalHeight }} - bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', }} + bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', padding: "20px 24px 24px" }} centered footer={null} >

重点监测异常明细单

{exceptionData.length > 0 ? exceptionData.map((item, index) => { - return <> - {index == 0 ? null : } - - {isNotEmpty(exceptionType) ? exceptionType : item?.exType} - {item?.projectName} - {item?.bidSectName || item?.sectionName} - {item?.provinceName || item?.regionDictName || item?.province} - {item?.ownerContactName} - {item?.ownerContactTel} - {(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)} - {item?.tenderAgencyName} - {item?.appManagerTel} - {item?.openTime || item?.recruitStartTime || item?.openingTime} - {isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"} - - + return ( +
1 ? 'modal-list-block' : 'modal-list-block modal-list-block-border0'}> +
+ {item?.projectName} +
{item?.bidSectName || item?.sectionName}
+
+
+ + {isNotEmpty(exceptionType) ? exceptionType : item?.exType} + {item?.openTime || item?.recruitStartTime || item?.openingTime} + {isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"} + {item?.provinceName || item?.regionDictName || item?.province} + {item?.ownerContactName} + {item?.ownerContactTel} + {(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)} + {item?.appManagerName} + {item?.appManagerTel} + +
+
+ ) }) : } -
+ {/*
onCancel()}> 确 定
-
+
*/} ) } @@ -1363,7 +1369,7 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: } }, 10000) } - if (type == "mapTwice") {//地图自动轮播tooltip + if (type == "mapTwice" || type == "mapThird") {//地图自动轮播tooltip let index = 1; autoSelect(0); if (chartData.length > 1) { @@ -1391,6 +1397,7 @@ export const authCheck = () => { //获取角色列表 const authorityList: any[] | undefined = getSessionUserData()?.authorityList; if (isEmpty(authorityList)) { + history.replace({ pathname: "/404" }); return false; } if (authorityList?.findIndex(item => item.roleCode == "ebtp-watcher") == -1) {//监看人员校验 @@ -1423,6 +1430,8 @@ const MonitorHome: React.FC<{}> = () => { const [todayInfoData, setTodayInfoData] = useState(); //权限校验 const auth = useRef(authCheck()); + //定时器秒数 + const _time = 20000; const bidStatusMap = ["准备评标", "正在评标", "评标结束", ""]; const statusColorMap = ["card-text-orange", "card-text-green", "card-text-purple", "card-text-white"]; //year select @@ -1474,7 +1483,7 @@ const MonitorHome: React.FC<{}> = () => { const getActiveSupplier = (ym: string) => { getActiveSupplierAPI(ym).then(res => { if (res?.code == 200) { - const data = res?.data; + const data = res?.data?.slice(0, 20); if (data.length > 0) { const max = data[0].tenderCount; for (let i = 0, length = data.length; i < length; i++) { @@ -1548,7 +1557,6 @@ const MonitorHome: React.FC<{}> = () => { useEffect(() => { if (auth.current) { - getTodayOpening(); getReviewDistribution(); getOpeningList(); getMonitorList(); @@ -1566,6 +1574,19 @@ const MonitorHome: React.FC<{}> = () => { } }, [yearSelect]) + useEffect(() => { + let interval: any; + if (auth.current) { + getTodayOpening(); + interval = setInterval(() => { + getTodayOpening(); + }, _time); + } + return () => { + clearInterval(interval); + } + }, []) + return (
@@ -1588,13 +1609,13 @@ const MonitorHome: React.FC<{}> = () => { 标段总数  {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}%} />
- +
{ window.open("/ElecMonitor/Supplier") }}> - +
- +
@@ -1636,7 +1657,7 @@ const MonitorHome: React.FC<{}> = () => {
MORNING
{openingList.slice(0, 2).map((item, index) => ( -
+
{item.startTime}-{item.endTime}
{item.num}/{item.max}
@@ -1650,7 +1671,7 @@ const MonitorHome: React.FC<{}> = () => {
AFTERNOON
{openingList.slice(2, 5).map((item, index) => ( -
+
{item.startTime}-{item.endTime}
{item.num}/{item.max}
@@ -1663,7 +1684,7 @@ const MonitorHome: React.FC<{}> = () => {
- +
diff --git a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx index 1ad88b7..8dbd3e2 100644 --- a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx @@ -158,7 +158,20 @@ const OpenToday: React.FC<{}> = () => { const getDecryptSuccessRateToday = () => { getDecryptSuccessRateTodayAPI().then(res => { 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<{}> = () => {
- +
- +
diff --git a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx index 9ce581a..cdb6a89 100644 --- a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx @@ -124,7 +124,7 @@ const Supplier: React.FC<{}> = () => { //onSelectChange select变更事件 const onSelectChange = (value: string | number) => { 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) { const max = data[0].tenderCount; for (let i = 0, length = data.length; i < length; i++) { @@ -194,12 +194,12 @@ const Supplier: React.FC<{}> = () => {
- +
交易方式   
- +
diff --git a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx index 6c74abb..260f1f8 100644 --- a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx @@ -71,7 +71,7 @@ const TenderAgent: React.FC<{}> = () => { //省分代理分布 const [provinceData, setProvinceData] = useState([]); //btn select - const [btnSelect, setBtnSelect] = useState("0"); + const [btnSelect, setBtnSelect] = useState("1"); //year select const localYear: string = moment().month() < 2 ? String(moment().year() - 1) : String(moment().year()); const [yearSelect, setYearSelect] = useState(localYear); @@ -207,15 +207,15 @@ const TenderAgent: React.FC<{}> = () => { {categoryChart}
- +
- 代理分布省分 省分代理分布 + 代理分布省分
diff --git a/src/pages/ElecEvaluation/Monitor/style.less b/src/pages/ElecEvaluation/Monitor/style.less index e4ef4c0..138085c 100644 --- a/src/pages/ElecEvaluation/Monitor/style.less +++ b/src/pages/ElecEvaluation/Monitor/style.less @@ -11,6 +11,7 @@ height: 100%; background: url("~@/assets/monitor/background-3.jpg") left top no-repeat; background-size: cover; + font-family: 'Microsoft Yahei', '宋体'; // background-color: #0a0c11; .screen-wrapper { @@ -835,14 +836,13 @@ align-items: center; justify-content: space-between; padding: 18px 16px 16px 20px; - gap: 40px; background: rgba(27, 126, 242, 0.12); .stage-left-img { - width: 179.18px; - height: 179.18px; + width: 166.18px; + height: 166.18px; box-sizing: border-box; - padding: 10px; + padding: 8px; .box-wrap { --front-color: #1b7ef2; @@ -945,7 +945,7 @@ text-align: center; &>span { - font-size: 20px; + font-size: 18px; font-weight: normal; line-height: 22px; letter-spacing: 0.8px; @@ -1104,8 +1104,13 @@ } .monitor-modal-list { + font-family: 'Microsoft Yahei', '宋体'; + .ant-modal-body { - background: #0A1A34cc; + background: #0d142bcc; + border: 2px solid #1b7ef2; + box-shadow: inset 0px 0px 16px 0px #00a3ff; + border-radius: 6px; &::-webkit-scrollbar { display: none; @@ -1113,39 +1118,52 @@ } .ant-modal-content { - background: #0A1A34cc; + background: #0d142bcc; + border-radius: 6px; } .ant-modal-close-x { - color: #1B7EF2; + color: #01C2FF; } - .monitor-modal-btn { - display: flex; - justify-content: center; - margin-top: 16px; + .ant-descriptions-item-container .ant-descriptions-item-label { + justify-content: flex-end; } - .modal-list-btn { - padding: 4px 15px; - background-color: #0A1A34; - border-radius: 20px; - cursor: pointer; - border: 1px solid #1b7ef2; - width: 64px; + .modal-list-block { + padding: 20px 0 16px; + box-sizing: border-box; + border-width: 0px 0px 1px 0px; + border-style: solid; + border-color: #093B64; + } - &:hover { - background-color: #1b7ef2; - - &>span { - color: #fff; - } - } + .modal-list-block-border0 { + border-width: 0; + } + .modal-list-pname { &>span { - color: #1b7ef2; - line-height: 16px; + 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; + } + } + + .modal-list-desc { + padding-top: 24px; } }