*/}
-
+
onCardClick(item)}>

-
{index == 0 ? "未开始" : index == 1 ? "评标中" : "已结束"}
+
{bidStatusMap[item.status]}
- 吉林省XXX项目
+ {item.projectName}
{/*
*/}
diff --git a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx
index 9973747..6d96a9c 100644
--- a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx
+++ b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx
@@ -1,10 +1,11 @@
import { Col, Row } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import '../style.less'
-import { authCheck, onCell, onHeaderCell, OverviewItem, ProgressItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StageCard } from '../Home';
+import { authCheck, ModalList, onCell, onHeaderCell, OverviewItem, ProgressItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StageCard } from '../Home';
import Circle3199 from '@/assets/monitor/circle-3199.png';
-import { getDecryptSuccessRateTodayAPI, getTodayInfoAPI, getTodayOpeningAPI } from '../service';
+import { getDecryptSuccessRateTodayAPI, getNoOpenListAPI, getNoOpenNumberAPI, getTodayInfoAPI, getTodayOpeningAPI, getUnopenSixAPI, getUnopenTenAPI } from '../service';
import { isNotEmpty } from '@/utils/CommonUtils';
+const statusMap = ["未开标", "开标", "唱标", "唱标结束", "取消开标", "", "", "", "", "异常处理"];
const columns: any[] = [
{
@@ -12,6 +13,48 @@ const columns: any[] = [
dataIndex: 'provinceName',
key: 'provinceName',
width: '20%',
+ align: "center",
+ ellipsis: true,
+ onCell,
+ onHeaderCell,
+ // render: (_: any, record: any) => proviceEnum[record.provinceDictId],
+ },
+ {
+ title: '项目名称',
+ dataIndex: 'projectName',
+ key: 'projectName',
+ align: "center",
+ ellipsis: true,
+ width: '30%',
+ onCell,
+ onHeaderCell,
+ },
+ {
+ title: '采购预算',
+ dataIndex: 'bidSectContractPrice',
+ key: 'bidSectContractPrice',
+ align: "center",
+ width: '30%',
+ onCell,
+ onHeaderCell,
+ },
+ {
+ title: '开标时间',
+ dataIndex: 'openTime',
+ key: 'openTime',
+ align: "center",
+ width: '20%',
+ onCell,
+ onHeaderCell,
+ },
+];
+const reiColumns: any[] = [
+ {
+ title: '省分',
+ dataIndex: 'provinceName',
+ key: 'provinceName',
+ align: "center",
+ width: '20%',
ellipsis: true,
onCell,
onHeaderCell,
@@ -21,8 +64,9 @@ const columns: any[] = [
title: '项目名称',
dataIndex: 'projectName',
key: 'projectName',
+ align: "center",
ellipsis: true,
- width: '30%',
+ width: '20%',
onCell,
onHeaderCell,
},
@@ -30,7 +74,8 @@ const columns: any[] = [
title: '采购预算',
dataIndex: 'bidSectContractPrice',
key: 'bidSectContractPrice',
- width: '30%',
+ align: "center",
+ width: '20%',
onCell,
onHeaderCell,
},
@@ -38,143 +83,22 @@ const columns: any[] = [
title: '开标时间',
dataIndex: 'openTime',
key: 'openTime',
- width: '20%',
- onCell,
- onHeaderCell,
- },
-];
-const reiColumns: any[] = [
- {
- title: '省分',
- dataIndex: 'provinceDictId',
- key: 'provinceDictId',
- width: '20%',
- ellipsis: true,
- onCell,
- onHeaderCell,
- render: (_: any, record: any) => proviceEnum[record.provinceDictId],
- },
- {
- title: '项目名称',
- dataIndex: 'projectName',
- key: 'projectName',
- ellipsis: true,
- width: '20%',
- onCell,
- onHeaderCell,
- },
- {
- title: '采购预算',
- dataIndex: 'number',
- key: 'number',
- width: '20%',
- onCell,
- onHeaderCell,
- },
- {
- title: '开标时间',
- dataIndex: 'time',
- key: 'time',
+ align: "center",
width: '20%',
onCell,
onHeaderCell,
},
{
title: '状态',
- dataIndex: 'time',
- key: 'time',
+ dataIndex: 'state',
+ key: 'state',
+ align: "center",
width: '20%',
onCell,
onHeaderCell,
+ render: (_: any, record: any) => statusMap[record.state],
},
];
-const dataSource = [
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "10:30",
- vital: "1",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "10:30",
- vital: "1",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "10:30",
- vital: "1",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "10:30",
- vital: "1",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
- {
- provinceDictId: "0012",
- projectName: "天津设备采购",
- number: "320万",
- time: "9:30",
- vital: "0",
- },
-]
-
const OpenToday: React.FC<{}> = () => {
//今日开标-评标阶段,评标及时率
const [todayInfoData, setTodayInfoData] = useState
();
@@ -182,6 +106,24 @@ const OpenToday: React.FC<{}> = () => {
const [decryptSuccessRateTodayData, setDecryptSuccessRateTodayData] = useState();
//今日开标-首页开标数据
const [todayOpeningData, setTodayOpeningData] = useState();
+ //今日开标-评标阶段10小时未评标
+ const [unopenTenData, setUnopenTenData] = useState([]);
+ //今日开标-评标阶段6小时未评标
+ const [unopenSixData, setUnopenSixData] = useState([]);
+ //超过2小时未开标数量
+ const [noOpenNumberTwo, setNoOpenNumberTwo] = useState("0");
+ //超过5小时未开标数量
+ const [noOpenNumberFive, setNoOpenNumberFive] = useState("0");
+ //超过2小时未开标列表
+ const [noOpenListTwo, setNoOpenListTwo] = useState([]);
+ //超过5小时未开标列表
+ const [noOpenListFive, setNoOpenListFive] = useState([]);
+ //ModalList visible
+ const [modalListVisible, setModalListVisible] = useState(false);
+ //ModalList Data
+ const [modalListData, setModalListData] = useState([]);
+ //ModalList Type
+ const [exceptionType, setExceptionType] = useState();
//权限校验
const auth = useRef(authCheck());
//今日开标-评标阶段,评标及时率
@@ -208,35 +150,85 @@ const OpenToday: React.FC<{}> = () => {
}
})
}
+ //评标阶段6小时未评标
+ const getUnopenSix = () => {
+ getUnopenSixAPI().then(res => {
+ if (res?.code == 200) {
+ setUnopenSixData(res?.data);
+ }
+ })
+ }
+ //评标阶段10小时未评标
+ const getUnopenTen = () => {
+ getUnopenTenAPI().then(res => {
+ if (res?.code == 200) {
+ setUnopenTenData(res?.data);
+ }
+ })
+ }
+ //超n小时未开标数量
+ const getNoOpenNumber = () => {
+ getNoOpenNumberAPI({ "timeLimit": "2", "dayNumber": "1" }).then(res => {
+ if (res?.code == 200) {
+ setNoOpenNumberTwo(res?.data);
+ }
+ })
+ getNoOpenNumberAPI({ "timeLimit": "5", "dayNumber": "1" }).then(res => {
+ if (res?.code == 200) {
+ setNoOpenNumberFive(res?.data);
+ }
+ })
+ }
+ //超n小时未开标列表
+ const getNoOpenList = () => {
+ getNoOpenListAPI({ "timeLimit": "2", "dayNumber": "1" }).then(res => {
+ if (res?.code == 200) {
+ setNoOpenListTwo(res?.data?.records);
+ }
+ })
+ getNoOpenListAPI({ "timeLimit": "5", "dayNumber": "1" }).then(res => {
+ if (res?.code == 200) {
+ setNoOpenListFive(res?.data?.records);
+ }
+ })
+ }
+
useEffect(() => {
if (auth.current) {
getTodayInfo();
getDecryptSuccessRateToday();
getTodayOpening();
+ getUnopenSix();
+ getUnopenTen();
+ getNoOpenNumber();
+ getNoOpenList();
}
}, [])
return (
+
+ { window.open("/ElecMonitor/Exception") }}>异常监控
+
-
+
-
-
-
-
+
+
{ }} rightClick={() => { setExceptionType("解密异常"); setModalListData(isNotEmpty(decryptSuccessRateTodayData?.decryptFailProjectList) ? decryptSuccessRateTodayData?.decryptFailProjectList : []); setModalListVisible(true); }} />
+ { setExceptionType(null); setModalListData(noOpenListTwo); setModalListVisible(true); }} rightClick={() => { setExceptionType(null); setModalListData(noOpenListFive); setModalListVisible(true); }} />
+ { setExceptionType(null); setModalListData(unopenSixData); setModalListVisible(true); }} rightClick={() => { setExceptionType(null); setModalListData(unopenTenData); setModalListVisible(true); }} />
@@ -259,10 +251,11 @@ const OpenToday: React.FC<{}> = () => {
-
+
+
{ setModalListVisible(false); setModalListData([]); }} exceptionData={modalListData} exceptionType={exceptionType} />
);
};
diff --git a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx
index c9ef3b1..b267dcc 100644
--- a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx
+++ b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx
@@ -5,6 +5,7 @@ import { authCheck, GraphChart, MetricItems, onCell, onHeaderCell, ScreenLabel,
import Frame10116 from '@/assets/monitor/Frame-10116.png';
import Frame10121 from '@/assets/monitor/Frame-10121.png';
import { getActiveSupplierRankAPI, getProvinceActiveSupplierInfoAPI, getSupplierInfoAPI } from '../service';
+import { isNotEmpty } from '@/utils/CommonUtils';
const columns: any[] = [
{
@@ -19,6 +20,7 @@ const columns: any[] = [
title: '供应商',
dataIndex: 'companyName',
key: 'companyName',
+ align: 'center',
width: '25%',
ellipsis: true,
onCell,
@@ -28,6 +30,7 @@ const columns: any[] = [
title: '投标次数',
dataIndex: 'tenderCount',
key: 'tenderCount',
+ align: 'center',
ellipsis: true,
width: '20%',
onCell,
@@ -36,6 +39,7 @@ const columns: any[] = [
{
dataIndex: 'progress',
width: '25%',
+ align: 'center',
onCell,
onHeaderCell,
render: (_: any, record: any, index: any) =>
@@ -44,6 +48,7 @@ const columns: any[] = [
title: '中选次数',
dataIndex: 'selectCount',
key: 'selectCount',
+ align: 'center',
width: '20%',
onCell,
onHeaderCell,
@@ -58,17 +63,32 @@ const Supplier: React.FC<{}> = () => {
//全国活跃供应商排名
const [activeSupplierRankData, setActiveSupplierRankData] = useState([]);
//供应商概况-省份活跃供应商
- const [provinceActiveSupplierInfoData, setProvinceActiveSupplierInfoData] = useState();
+ const provinceActiveSupplierInfoData = useRef([]);
+ //供应商概况-省份数据
+ const [provinceData, setProvinceData] = useState([]);
+ //月度年度 yearData-年度 monthData-月度
+ const monthOrYear = useRef("yearData");
+ //指标项 tenderCount-投标次数 selectCount-中选次数 bidCost-中选金额
+ const metric = useRef("tenderCount");
+ const metricMap = { tenderCount: "投标次数", selectCount: "中选次数", bidCost: "中选金额" };
+ //省份
+ const province = useRef("");
+ //图表数据
+ const [chartData, setChartData] = useState([]);
//权限校验
const auth = useRef(authCheck());
const transverseBarChart = useMemo(() => {
- return true &&
- }, [])
- const randomData = () => Math.round(Math.random() * 100);
- const centerMapData = { "number": 3060, "list": [{ "provinceDictId": "0022", "provinceDictName": "吉林", "placeNumber": 6, "openingNumber": 30, "expertNumber": 60, "cumulativePlaceNumber": 95 }, { "provinceDictId": "0011", "provinceDictName": "北京", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 86 }, { "provinceDictId": "0012", "provinceDictName": "天津", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 77 }, { "provinceDictId": "0013", "provinceDictName": "河北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0014", "provinceDictName": "山西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0015", "provinceDictName": "内蒙古", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0021", "provinceDictName": "辽宁", "placeNumber": 2, "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0023", "provinceDictName": "黑龙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0031", "provinceDictName": "上海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0032", "provinceDictName": "江苏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0033", "provinceDictName": "浙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0034", "provinceDictName": "安徽", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0035", "provinceDictName": "福建", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0036", "provinceDictName": "江西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0037", "provinceDictName": "山东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0041", "provinceDictName": "河南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0042", "provinceDictName": "湖北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0043", "provinceDictName": "湖南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0044", "provinceDictName": "广东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0045", "provinceDictName": "广西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0046", "provinceDictName": "海南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0050", "provinceDictName": "重庆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0051", "provinceDictName": "四川", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0052", "provinceDictName": "贵州", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0053", "provinceDictName": "云南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0054", "provinceDictName": "西藏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0061", "provinceDictName": "陕西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0062", "provinceDictName": "甘肃", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0063", "provinceDictName": "青海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0064", "provinceDictName": "宁夏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0065", "provinceDictName": "新疆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }] }
+ return chartData.length > 0 &&
+ }, [chartData])
+ //选择省份
+ const onSelect = (value: string) => {
+ console.log("value", value);
+ province.current = value;
+ chartDataChange();
+ }
const mapChart = useMemo(() => {
- return centerMapData?.list &&
- }, [])
+ return provinceData.length > 0 &&
+ }, [provinceData])
//上面六个指标
const getSupplierInfo = () => {
@@ -92,7 +112,8 @@ const Supplier: React.FC<{}> = () => {
const getProvinceActiveSupplierInfo = () => {
getProvinceActiveSupplierInfoAPI().then(res => {
if (res?.code == 200) {
- setProvinceActiveSupplierInfoData(res?.data);
+ provinceActiveSupplierInfoData.current = res?.data;
+ setProvinceData(res?.data.map((item: any) => ({ name: item.provinceName, value: 0 })))
}
})
}
@@ -110,6 +131,34 @@ const Supplier: React.FC<{}> = () => {
}
}
+ //展示条形图
+ const chartDataChange = () => {
+ if (provinceActiveSupplierInfoData.current.length > 0) {
+ if (province.current != "") {//省份不为空
+ let count = 0;
+ for (const item of provinceActiveSupplierInfoData.current) {
+ if (item.provinceName == province.current) {
+ const initData: any[] = item[monthOrYear.current];
+ const name: any[] = [];
+ const value: any[] = [];
+ for (const ite of initData) {
+ name.push(ite.companyName);
+ value.push(isNotEmpty(ite[metric.current]) ? Number(ite[metric.current].toFixed(0)) : 0);
+ }
+ setChartData([name, value, metricMap[metric.current]]);
+ count++;
+ break;
+ }
+ }
+ if (count = 0) {
+ setChartData([]);
+ }
+ } else {
+ setChartData([]);
+ }
+ }
+ }
+
useEffect(() => {
if (auth.current) {
getSupplierInfo();
@@ -143,14 +192,14 @@ const Supplier: React.FC<{}> = () => {
-
本年 | 本月 投标次数 | 中选次数 | 中选金额 辽宁} />
-
-
+ { monthOrYear.current = "yearData"; chartDataChange(); }}>本年 | { monthOrYear.current = "monthData"; chartDataChange(); }}>本月 { metric.current = "tenderCount"; chartDataChange(); }}>投标次数 | { metric.current = "selectCount"; chartDataChange(); }}>中选次数 | { metric.current = "bidCost"; chartDataChange(); }}>中选金额 {province.current}} />
+
+
{mapChart}
-
+
{transverseBarChart}
diff --git a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx
index 3d23f7b..9da3953 100644
--- a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx
+++ b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx
@@ -15,6 +15,7 @@ const columns: any[] = [
title: '代理机构',
dataIndex: 'agencyName',
key: 'agencyName',
+ align: 'center',
width: '20%',
ellipsis: true,
onCell,
@@ -24,6 +25,7 @@ const columns: any[] = [
title: '项目数量总计(个)',
dataIndex: 'dlxms',
key: 'dlxms',
+ align: 'center',
width: '20%',
onCell,
onHeaderCell,
@@ -32,6 +34,7 @@ const columns: any[] = [
title: '项目金额总计(亿元)',
dataIndex: 'dlxmys',
key: 'dlxmys',
+ align: 'center',
width: '20%',
onCell,
onHeaderCell,
@@ -41,6 +44,7 @@ const columns: any[] = [
title: '平均完成率(%)',
dataIndex: 'wcl',
key: 'wcl',
+ align: 'center',
width: '20%',
onCell,
onHeaderCell,
@@ -54,104 +58,6 @@ const columns: any[] = [
// onHeaderCell,
// },
];
-const dataSource = [
- {
- key: '1',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '2',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '3',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '4',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '5',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '6',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '7',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '8',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '9',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '10',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '11',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
- {
- key: '12',
- dljg: "河南省信息咨询设计研究有限公司",
- xmslzj: "325",
- xmjezj: "565566",
- pjwcl: "20",
- pjmyd: "60",
- },
-]
const TenderAgent: React.FC<{}> = () => {
//相关统计数据
@@ -162,11 +68,12 @@ const TenderAgent: React.FC<{}> = () => {
const [selectData, setSelectData] = useState([]);
//代理分布省分
const [provinceByAgencyData, setProvinceByAgencyData] = useState([]);
+ //省分代理分布
+ const [provinceData, setProvinceData] = useState([]);
//btn select
const [btnSelect, setBtnSelect] = useState("0");
//权限校验
const auth = useRef(authCheck());
- const randomData = () => Math.round(Math.random() * 100);
// const gaugeChartData = [{ value: 20 }]
// const gaugeGreenChart = useMemo(() => {
// return gaugeChartData &&
@@ -180,10 +87,9 @@ const TenderAgent: React.FC<{}> = () => {
const categoryChart = useMemo(() => {
return
}, [monthData])
- const centerMapData = { "number": 3060, "list": [{ "provinceDictId": "0022", "provinceDictName": "吉林", "placeNumber": 6, "openingNumber": 30, "expertNumber": 60, "cumulativePlaceNumber": 95 }, { "provinceDictId": "0011", "provinceDictName": "北京", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 86 }, { "provinceDictId": "0012", "provinceDictName": "天津", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": 77 }, { "provinceDictId": "0013", "provinceDictName": "河北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0014", "provinceDictName": "山西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0015", "provinceDictName": "内蒙古", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0021", "provinceDictName": "辽宁", "placeNumber": 2, "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0023", "provinceDictName": "黑龙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0031", "provinceDictName": "上海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0032", "provinceDictName": "江苏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0033", "provinceDictName": "浙江", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0034", "provinceDictName": "安徽", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0035", "provinceDictName": "福建", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0036", "provinceDictName": "江西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0037", "provinceDictName": "山东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0041", "provinceDictName": "河南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0042", "provinceDictName": "湖北", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0043", "provinceDictName": "湖南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0044", "provinceDictName": "广东", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0045", "provinceDictName": "广西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0046", "provinceDictName": "海南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0050", "provinceDictName": "重庆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0051", "provinceDictName": "四川", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0052", "provinceDictName": "贵州", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0053", "provinceDictName": "云南", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0054", "provinceDictName": "西藏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0061", "provinceDictName": "陕西", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0062", "provinceDictName": "甘肃", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0063", "provinceDictName": "青海", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0064", "provinceDictName": "宁夏", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }, { "provinceDictId": "0065", "provinceDictName": "新疆", "placeNumber": randomData(), "openingNumber": randomData(), "expertNumber": randomData(), "cumulativePlaceNumber": randomData() }] }
const mapChart = useMemo(() => {
- return centerMapData?.list &&
- }, [centerMapData])
+ return provinceData.length > 0 &&
+ }, [provinceData])
//相关统计数据
const getTenderAgentData = () => {
@@ -203,8 +109,18 @@ const TenderAgent: React.FC<{}> = () => {
setMonthData(monthDataMap)
const selectData: any[] = res?.data.agencyList.map((item: any) => ({ label: item.agencyName, value: item.agencyId }));//右侧代理机构下拉
- selectData.unshift({ label: "全部", value: "all" });
+ selectData.unshift({ label: "请选择", value: "all" });
setSelectData(selectData);
+
+ const province = res?.data.agencyListByProvince;//招标代理省份分布数据
+ const pdata: any[] = []
+ for (const key in province) {
+ if (Object.prototype.hasOwnProperty.call(province, key)) {
+ const item = province[key];
+ pdata.push({ name: key, value: item.length, data: item.slice(0, 5) });
+ }
+ }
+ setProvinceData(pdata.slice(0, -3));
}
})
}
@@ -239,8 +155,7 @@ const TenderAgent: React.FC<{}> = () => {
- {/* tenderAgentData?.agencyProjectCountYear.dlxmys */}
-
+
diff --git a/src/pages/ElecEvaluation/Monitor/service.ts b/src/pages/ElecEvaluation/Monitor/service.ts
index 21fa073..77e4d77 100644
--- a/src/pages/ElecEvaluation/Monitor/service.ts
+++ b/src/pages/ElecEvaluation/Monitor/service.ts
@@ -82,10 +82,12 @@ export async function getExpertNumberAPI(params: any) {
/**
* 异常监控-超过1小时未开标数量
+ * @param data
*/
-export async function getNoOpenNumberAPI() {
+export async function getNoOpenNumberAPI(data: any) {
return request('/api/biz-service-ebtp-statistics/opening/noOpenNumber', {
method: 'POST',
+ data: { ...data },
});
}
@@ -98,6 +100,15 @@ export async function getThreeDayNoEndAPI() {
});
}
+/**
+ * 异常监控-开启评审后3日未结束评标-数量
+ */
+export async function getThreeDayNoEndCountAPI() {
+ return request('/api/biz-service-ebtp-statistics/api/evaluation/exception/threedaynoend/count', {
+ method: 'GET',
+ });
+}
+
/**
* 异常监控-超过1小时未开标数量-列表
* @param data
@@ -156,6 +167,22 @@ export async function getTodayInfoAPI() {
});
}
+/**
+ * 今日开标-评标阶段10小时未评标
+ */
+export async function getUnopenTenAPI() {
+ return request('/api/biz-service-ebtp-statistics/api/evaluation/today/unopen/ten', {
+ method: 'GET',
+ });
+}
+/**
+ * 今日开标-评标阶段6小时未评标
+ */
+export async function getUnopenSixAPI() {
+ return request('/api/biz-service-ebtp-statistics/api/evaluation/today/unopen/six', {
+ method: 'GET',
+ });
+}
/**
* 今日开标-解密成功率
*/
@@ -207,4 +234,15 @@ export async function getProvinceByAgencyAPI(agencyId: any) {
return request(`/api/biz-service-ebtp-statistics/tenderAgent/getProvinceByAgency/${agencyId}`, {
method: 'GET',
});
+}
+/**
+ * 首页-获取评标室监控列表
+ * @param data
+ * @returns
+ */
+export async function getMonitorListAPI(data: any) {
+ return request('/api/biz-service-ebtp-evaluation/v1/screen/getReviewRoomList', {
+ method: 'POST',
+ data: data,
+ });
}
\ No newline at end of file
diff --git a/src/pages/ElecEvaluation/Monitor/style.less b/src/pages/ElecEvaluation/Monitor/style.less
index 494cd08..b7497f8 100644
--- a/src/pages/ElecEvaluation/Monitor/style.less
+++ b/src/pages/ElecEvaluation/Monitor/style.less
@@ -252,8 +252,15 @@
background-repeat: no-repeat;
background-size: 100% 100%;
height: 120px;
- margin-top: 20px;
+ margin-top: 14px;
position: relative;
+ cursor: pointer;
+
+ &:hover {
+ -webkit-filter: brightness(108%);
+ filter: brightness(108%);
+ }
+
.flex-center;
&>img {
@@ -290,7 +297,7 @@
letter-spacing: 0px;
color: rgba(255, 255, 255, 0.87);
text-align: center;
- margin-top: 12px;
+ margin-top: 4px;
}
}
}
@@ -470,6 +477,14 @@
background: rgba(255, 255, 255, 0.15);
}
}
+
+ .monitor-extra-pointer {
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
}
}
@@ -590,6 +605,7 @@
justify-content: space-around;
margin-top: 10px;
+
.progress-bottom-title {
text-align: center;
@@ -620,6 +636,10 @@
color: #29F1FA;
}
}
+
+ .line-progress-pointer {
+ cursor: pointer;
+ }
}
}
@@ -1030,4 +1050,56 @@
&:active {
background-color: #12304ecc;
}
+}
+
+.monitor-modal-list {
+ .ant-modal-body {
+ background: #12304ecc;
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
+ }
+
+ .ant-modal-content {
+ background: #12304ecc;
+ }
+
+ .ant-modal-close-x {
+ color: #1B7EF2;
+ }
+
+ .monitor-modal-btn {
+ display: flex;
+ justify-content: center;
+ margin-top: 16px;
+ }
+
+ .modal-list-btn {
+ padding: 4px 15px;
+ background-color: #12304e;
+ border-radius: 20px;
+ cursor: pointer;
+ border: 1px solid #1b7ef2;
+ width: 64px;
+
+ &:hover {
+ background-color: #ffffffcc;
+ }
+
+ &>span {
+ color: #1b7ef2;
+ line-height: 16px;
+ }
+ }
+
+ .monitor-modal-empty {
+ .ant-empty-image {
+ color: #fff;
+ }
+
+ .ant-empty-description {
+ color: #fff;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/pages/ElecEvaluation/MonitorScreen/Home/style.less b/src/pages/ElecEvaluation/MonitorScreen/Home/style.less
index bd45d0d..01e6f69 100644
--- a/src/pages/ElecEvaluation/MonitorScreen/Home/style.less
+++ b/src/pages/ElecEvaluation/MonitorScreen/Home/style.less
@@ -4,7 +4,9 @@
@screen-color: #041a6d;
.screen-bg {
- background: @screen-color;
+ // background: @screen-color;
+ background: url("~@/assets/monitor/background-2.jpg") left top no-repeat;
+ background-size: cover;
width: 100%;
height: 100%;
margin: 0;
diff --git a/src/pages/userformal/login/index.tsx b/src/pages/userformal/login/index.tsx
index 4fbb8df..47eb909 100644
--- a/src/pages/userformal/login/index.tsx
+++ b/src/pages/userformal/login/index.tsx
@@ -37,7 +37,7 @@ const Index: React.FC<{}> = () => {
const mediaStreamTrack = useRef();
const { TabPane } = Tabs;
const [submitLoading, setSubmitLoading] = useState(false);
- const [faceLoginDisable, setFaceLoginDisable] = useState(false);
+ const [faceLoginDisable, setFaceLoginDisable] = useState(false);
const lv = useRef();
const [timerShow, setTimeShow] = useState(false);
const [itemShow, setItemShow] = useState(false);
@@ -46,8 +46,8 @@ const Index: React.FC<{}> = () => {
/**
* 设置活体检测token
*/
- const setLiveDetectToken = () =>{
- let appKey= 'nkYy3g1yT0alE8pF6a1UTC4I'
+ const setLiveDetectToken = () => {
+ let appKey = 'nkYy3g1yT0alE8pF6a1UTC4I'
let appSecrect = 'L30zHpTyAtTlY7tTCpbzdxxKCQgwWIQL'
// Header
var header = {
@@ -75,41 +75,41 @@ const Index: React.FC<{}> = () => {
*/
const liveDetectStart = () => {
liveDetectStop();
- let _lv = new LivingNotIE(null, {
+ let _lv = new LivingNotIE(null, {
timer: 10000,
- action : [1,3,2],
+ action: [1, 3, 2],
token: setLiveDetectToken(),
- proxy:'/living/api',
- getFacePicture:()=>{
+ proxy: '/living/api',
+ getFacePicture: () => {
return getLiveDetectFile()
},
//开始活体检测,此时token已鉴权成功
- onDetectStart:()=>{
+ onDetectStart: () => {
setSubmitLoading(true);
},
//每轮检测开始
- onDetectActionStart:(action:number)=>{
+ onDetectActionStart: (action: number) => {
setAction(action);
// this.drawCanvas()
},
//每轮检测计时
- onDetectActionProgress:(action:number,timer:number)=>{
+ onDetectActionProgress: (action: number, timer: number) => {
setTimer(timer);
},
//每轮检测结束
- onDetectActionFinish:(action:number,data:any)=>{
+ onDetectActionFinish: (action: number, data: any) => {
// this.clearCanvas()
setTimer(10000);
console.log(data)
},
//活体检测完成
- onDetectFinish:(data:any)=>{
- if(data.code == 1){
+ onDetectFinish: (data: any) => {
+ if (data.code == 1) {
setAction(4);
setTimeShow(false);
//人脸比对
hanleFaceSubmit(data.file.file, null);
- }else{
+ } else {
message.error('活体检测失败');
setSubmitLoading(false);
}
@@ -140,12 +140,12 @@ const Index: React.FC<{}> = () => {
console.log(_imgURI);
let _file = base64ToBlob(_imgURI);
return {
- file:_file//传给活体检测服务的文件
+ file: _file//传给活体检测服务的文件
}
}
- const classColor = (action:any) => {
+ const classColor = (action: any) => {
let color = '';
- switch(action){
+ switch (action) {
case 1:
color = '#409eff';
break;
@@ -161,17 +161,17 @@ const Index: React.FC<{}> = () => {
}
return color;
}
- const actionText = (action:number, timer:number) => {
+ const actionText = (action: number, timer: number) => {
let text = '';
- switch(action){
+ switch (action) {
case 1:
- text = '对准摄像头眨眨眼('+ timer + 's)';
+ text = '对准摄像头眨眨眼(' + timer + 's)';
break;
case 2:
- text = '对准摄像头张张嘴('+ timer + 's)';
+ text = '对准摄像头张张嘴(' + timer + 's)';
break;
case 3:
- text = '对准摄像头摇摇头('+ timer + 's)';
+ text = '对准摄像头摇摇头(' + timer + 's)';
break;
case 4:
text = '请稍候,正在验证中...';
@@ -428,7 +428,7 @@ const Index: React.FC<{}> = () => {
return new Blob([uInt8Array], { type: contentType });
};
- const IELiveDetectFinish2 = async(data:any) => {
+ const IELiveDetectFinish2 = async (data: any) => {
console.log(data);
setAction(4);
hanleFaceSubmit(data, null);
@@ -436,17 +436,17 @@ const Index: React.FC<{}> = () => {
//IELiveDetectFinish
const IELiveDetectFinish = async (data: any) => {
- if(data.code != 0){
+ if (data.code != 0) {
console.log(data);
setAction(4);
hanleFaceSubmit(data.file.file, null);
- }else{
+ } else {
message.error('活体检测失败');
setSubmitLoading(false);
}
}
- const UpdateDetectStatus = async(action:number, timer:number)=>{
+ const UpdateDetectStatus = async (action: number, timer: number) => {
setSubmitLoading(true);
setAction(action);
setTimer(timer);
@@ -563,7 +563,7 @@ const Index: React.FC<{}> = () => {
-
+ {/*
-
- {actionText(action)}
- {Math.round(timer/1000)}
-
- */}
+
{!whetherIE.current ? () : ()}
- {/* */}
- {/* onClick={() => {hanleFaceSubmit(null, null);}} */}
+
-
+ */}
+ {/* 加载摄像头 */}
+ {/*
+
+ {actionText(action)}
+ {Math.round(timer/1000)}
+
+ */}
+ {/* */}
+ {/* onClick={() => {hanleFaceSubmit(null, null);}} */}