diff --git a/src/pages/401.tsx b/src/pages/401.tsx index 2666dbf..376be42 100644 --- a/src/pages/401.tsx +++ b/src/pages/401.tsx @@ -11,6 +11,7 @@ const messageMap = { 403: '您的用户角色信息异常,请重新登录', 90401: '您的登录已超时,请重新登录', 404: '系统错误,请联系管理员', + 405: '您的用户无权限访问' }; const RequestTimeoutPage: React.FC<{}> = () => { diff --git a/src/pages/ElecEvaluation/Monitor/Exception/index.tsx b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx index ff237e6..356e943 100644 --- a/src/pages/ElecEvaluation/Monitor/Exception/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Exception/index.tsx @@ -1,10 +1,9 @@ -import { Col, Progress, Row, Table } from 'antd'; -import { debounce } from 'lodash'; +import { Col, Row } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import '../style.less' -import { onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable } from '../Home'; +import { authCheck, onCell, onHeaderCell, OverviewItem, ScreenLabel, ScreenTitle, ScrollTable } from '../Home'; import Circle3199 from '@/assets/monitor/circle-3199.png'; -import { getDecryptDataAPI, getNoOpenAssessListAPI, getNoOpenListAPI, getNoOpenNumberAPI, getThreeDayNoEndAPI } from '../service'; +import { getDecryptDataAPI, getNoOpenAssessListAPI, getNoOpenListAPI, getNoOpenNumberAPI, getThreeDayNoEndAPI, getThreeDaysUnSendAnnoCountAPI, getThreeDaysUnSendAnnoListAPI } from '../service'; const columns: any[] = [ { @@ -119,104 +118,6 @@ const columnsSecond: any[] = [ }, }, ]; -const dataSource = [ - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "10:30", - vital: "1", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "10:30", - vital: "1", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "10:30", - vital: "1", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "10:30", - vital: "1", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, - { - provinceDictId: "0012", - projectName: "天津设备采购", - number: "320万", - time: "9:30", - vital: "0", - people: "曹鹏", - }, -] const MonitorException: React.FC<{}> = () => { //超过1小时未开标数量 @@ -224,11 +125,17 @@ const MonitorException: React.FC<{}> = () => { //开启评审后3日未结束评标-列表 const [threeDayNoEndData, setThreeDayNoEndData] = useState([]); //超过1小时未开标数量-列表 - const [noOpenListData, setNoOpenListData] = useState([]); + const [noOpenListData, setNoOpenListData] = useState(); //开标后超过6小时未开启评审室-列表 const [noOpenAssessListData, setNoOpenAssessListData] = useState(); //异常监控-解密异常、mac地址相同及相关项目列表 const [decryptData, setDecryptData] = useState(); + //评审室关闭3日内未发布公示数 + const [threeDaysUnSendAnnoCount, setThreeDaysUnSendAnnoCount] = useState(""); + //评审室关闭3日内未发布公示列表 + const [threeDaysUnSendAnnoList, setThreeDaysUnSendAnnoList] = useState([]); + //权限校验 + const auth = useRef(authCheck()); //超过1小时未开标数量 const getNoOpenNumber = () => { getNoOpenNumberAPI().then(res => { @@ -269,23 +176,45 @@ const MonitorException: React.FC<{}> = () => { } }) } + + //异常监控-评审室关闭3日内未发布公示数 + const getThreeDaysUnSendAnnoCount = () => { + getThreeDaysUnSendAnnoCountAPI().then(res => { + if (res?.code == 200) { + setThreeDaysUnSendAnnoCount(res?.data); + } + }) + } + + //异常监控-评审室关闭3日内未发布公示列表 + const getThreeDaysUnSendAnnoList = () => { + getThreeDaysUnSendAnnoListAPI().then(res => { + if (res?.code == 200) { + setThreeDaysUnSendAnnoList(res?.data); + } + }) + } useEffect(() => { - getNoOpenNumber(); - getThreeDayNoEnd(); - getNoOpenList(); - getNoOpenAssessList(); - getDecryptData(); + if (auth.current) { + getNoOpenNumber(); + getThreeDayNoEnd(); + getNoOpenList(); + getNoOpenAssessList(); + getDecryptData(); + getThreeDaysUnSendAnnoCount(); + getThreeDaysUnSendAnnoList(); + } }, []) return (
- - - - - - + + + + + +
@@ -294,7 +223,7 @@ const MonitorException: React.FC<{}> = () => {
more} />
- +
more} />
@@ -322,7 +251,7 @@ const MonitorException: React.FC<{}> = () => {
more} />
- +
diff --git a/src/pages/ElecEvaluation/Monitor/Home/index.tsx b/src/pages/ElecEvaluation/Monitor/Home/index.tsx index 1008172..ebeb4ac 100644 --- a/src/pages/ElecEvaluation/Monitor/Home/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Home/index.tsx @@ -14,8 +14,11 @@ import right from '@/assets/monitor/right.png'; import { CaretRightOutlined, DownOutlined } from '@ant-design/icons'; import './china'; import * as echarts from 'echarts'; -import { getActiveSupplierAPI, getAnnualAndTenderAgentAPI, getOpeningListAPI, getReviewDistributionAPI, getTodayOpeningAPI } from '../service'; +import { getActiveSupplierAPI, getAnnoCountAPI, getAnnualAndTenderAgentAPI, getExpertNumberAPI, getOpeningListAPI, getReviewDistributionAPI, getSupplierCountAPI, getTodayOpeningAPI } from '../service'; import moment from 'moment'; +import { isNotEmpty } from '@/utils/CommonUtils'; +import { getSessionUserData } from '@/utils/session'; +import { history } from 'umi'; export const onCell = () => ({ className: "monitor-table-content" }); export const onHeaderCell = () => ({ className: "monitor-table-header", }); @@ -180,7 +183,7 @@ const todayColumns: any[] = [ width: '23%', onCell, onHeaderCell, - render: (_: any, record: any, index: any) => + render: (_: any, record: any, index: any) => }, { title: '参加项目数量', @@ -224,7 +227,7 @@ const tjColumns: any[] = [ width: '25%', onCell, onHeaderCell, - render: (_: any, record: any, index: any) => + render: (_: any, record: any, index: any) => }, { title: '采购预算', @@ -233,177 +236,9 @@ const tjColumns: any[] = [ width: '20%', onCell, onHeaderCell, + render: (_: any, record: any, index: any) => isNotEmpty(record.ys) ? record.ys.toFixed(2) : 0 }, ]; -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 todayDataSource = [ - { - supplierName: "华为", - zbsl: "92", - progress: "80", - cjxmsl: "990", - zbdl: "公诚", - xmsss: "243", - cgys: "6,300" - }, - { - supplierName: "中兴", - zbsl: "83", - progress: "83", - cjxmsl: "680", - zbdl: "中招", - xmsss: "202", - cgys: "3,400" - }, - { - supplierName: "腾讯", - zbsl: "70", - progress: "70", - cjxmsl: "700", - zbdl: "国信", - xmsss: "198", - cgys: "3,800" - }, - { - supplierName: "华为", - zbsl: "92", - progress: "80", - cjxmsl: "990", - zbdl: "公诚", - xmsss: "243", - cgys: "6,300" - }, - { - supplierName: "中兴", - zbsl: "83", - progress: "83", - cjxmsl: "680", - zbdl: "中招", - xmsss: "202", - cgys: "3,400" - }, - { - supplierName: "腾讯", - zbsl: "70", - progress: "70", - cjxmsl: "700", - zbdl: "国信", - xmsss: "198", - cgys: "3,800" - }, - { - supplierName: "华为", - zbsl: "92", - progress: "80", - cjxmsl: "990", - zbdl: "公诚", - xmsss: "243", - cgys: "6,300" - }, - { - supplierName: "中兴", - zbsl: "83", - progress: "83", - cjxmsl: "680", - zbdl: "中招", - xmsss: "202", - cgys: "3,400" - }, - { - supplierName: "腾讯", - zbsl: "70", - progress: "70", - cjxmsl: "700", - zbdl: "国信", - xmsss: "198", - cgys: "3,800" - }, -] //指标项 export const MetricItems = (props: { title: string, number: string | number, unit: string, icon: string }) => { return ( @@ -411,7 +246,7 @@ export const MetricItems = (props: { title: string, number: string | number, uni
{props?.title}
- {props?.number}{props?.unit} + {isNotEmpty(props?.number) ? props?.number : "0"}{props?.unit}
) @@ -451,23 +286,22 @@ export const ProgressItem = (props: { title: string, progress: number, leftTitle ) } //下拉框封装 -export const SelectItem = (props: { onSelectChange: (value: string | number | null) => void, options: ({ label: string, value: string | number })[] }) => { +export const SelectItem = (props: { onSelectChange: (value: string | number) => void, options: ({ label: string, value: string | number })[] }) => { const { onSelectChange, options } = props; - const [selectedItem, setSelectItem] = useState("all"); + const [selectedItem, setSelectItem] = useState("全部"); const menu = ( - { setSelectItem("all"); onSelectChange(null); }}>全部 {options?.map(item => ( { setSelectItem(item.label); onSelectChange(item.value); }}>{item.label} ))} ); return ( - +
- {selectedItem == "all" ? "全部" : selectedItem} + {selectedItem} @@ -533,7 +367,7 @@ export const StageCard = (props: { percentage: string | number, total: string | export const ScrollTable = (props: { dataSource: any[], columns: any[], rollTime?: number, rollNum?: number, ynum?: number }) => { const { dataSource, columns, rollTime = 50, rollNum = 5, ynum = 300 } = props; return ( -
+
{ const { dataSource, columns, rollTime = 50, rollNum = 5, ynum = 300 } = props; return ( -
+
{ - const dataLength = data1.length; - setTimeout(() => { - myChart.dispatchAction({ - type: 'showTip', - seriesIndex: 2, - dataIndex: index, - position: (point: number[], params: any, dom: any, rect: any, size: { contentSize: number[] }) => { - return [point[0] + 20, point[1] - size.contentSize[1] + 45]; - }, - }); - index++; - if (index >= dataLength) { - index = 0; - } - autoTooltip(); - }, 10000); + const autoTooltip = (index: number) => { + myChart.dispatchAction({ + type: 'showTip', + seriesIndex: 2, + dataIndex: index, + position: (point: number[], params: any, dom: any, rect: any, size: { contentSize: number[] }) => { + return [point[0] + 20, point[1] - size.contentSize[1] + 45]; + }, + }); } const colors = ['#1B7EF2', '#29F1FA', '#1B7EF2']; const categoryOption: EChartsOption = { @@ -762,9 +587,7 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: return value + ' 个'; } }, - data: [ - 2.0, 4.9, 7.0, 23.2, 25.6 - ] + data: chartData?.[1] }, { name: '项目金额', @@ -775,9 +598,7 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: return value + ' 亿元'; } }, - data: [ - 2.6, 5.9, 9.0, 26.4, 28.7 - ] + data: chartData?.[2] }, { name: '完成率', @@ -789,55 +610,7 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: return value + ' %'; } }, - data: [2.0, 2.2, 3.3, 4.5, 6.3] - } - ] - }; - const pieOption: EChartsOption = { - legend: { - orient: 'vertical', - right: '3%', - top: 'middle', - textStyle: { color: '#fff' }, - icon: 'circle', - formatter: (name) => { - let total = 0; // 用于计算总数 - let target; // 遍历拿到数据 - for (let i = 0, chartLength = chartData.length; i < chartLength; i++) { - total += chartData[i].value; - if (chartData[i].name == name) { - target = chartData[i].value; - } - } - let v = total == 0 ? 0 : ((target / total) * 100).toFixed(0); - return `${name} ${target}个,占比${v}%`; - }, - }, - tooltip: { - trigger: 'item' - }, - series: [ - { - type: 'pie', - radius: ['40%', '70%'], - center: ['30%', '50%'], - avoidLabelOverlap: false, - label: { - show: false, - position: 'center' - }, - emphasis: { - label: { - show: true, - fontSize: '20px', - fontWeight: 'bold', - color: '#fff' - } - }, - labelLine: { - show: false - }, - data: chartData, + data: chartData?.[0] } ] }; @@ -1063,18 +836,21 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: } const mapTwiceOption: EChartsOption = { tooltip: { - show: false + trigger: 'item', + showDelay: 0, + transitionDuration: 0.2, + show: false, }, geo: { map: "china", roam: false,// 一定要关闭拖拽 zoom: 1.2, - label: { - show: false//不显示label - }, - emphasis: { - disabled: true,//关闭hover高亮 - }, + // label: { + // show: false//不显示label + // }, + // emphasis: { + // disabled: true,//关闭hover高亮 + // }, itemStyle: { areaColor: "rgba(128,128,128,0)", borderColor: "#29F0F9", @@ -1085,6 +861,23 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: shadowColor: "#0e6f7a" } }, + visualMap: { + min: 1, + max: 50, + inRange: { + color: [ + '#01417f', + '#26c4ff', + '#abd5fc', + '#42p4b7', + '#1a315a', + '#cacdda', + '#0d4697', + '#01192d', + ] + }, + show: false + }, series: [ { type: "map", @@ -1092,56 +885,33 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: roam: false, zoom: 1.2, showLegendSymbol: false, // 存在legend时显示 - label: { - show: false - }, + // label: { + // show: false + // }, emphasis: { - disabled: true + label: { + show: true, + color: '#fff' + }, + itemStyle: { + areaColor: '#127dff' + } }, select: { - disabled: true + label: { + show: true, + color: '#fff' + }, + itemStyle: { + areaColor: '#127dff' + } }, itemStyle: { areaColor: "rgba(128,128,128,0)", borderColor: "#29F0F9", borderWidth: 0.5 - } - }, - { - name: "", - type: "scatter", - coordinateSystem: "geo", - data: dataValue, - symbolSize: function (val) { - return Math.floor(val[2] / 1.2); - }, - symbol: "circle", - // symbolSize: 8, - tooltip: { - // formatter(value) { - // return value.data.name + "
" + "物流量:" + "22"; - // }, - show: true - }, - encode: { - value: 2 - }, - label: { - formatter: "{b}", - position: "right", - show: false - }, - itemStyle: { - color: "rgb(36,203,255)" - }, - emphasis: { - label: { - show: false - } - }, - select: { - disabled: true }, + data: [], }, ] }; @@ -1189,8 +959,12 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: show: true }, }; + if (type == "mapTwice") { + myChart.on('click', function (params) { + console.log("params", params) + }) + } const optionsMap = { - "pie": pieOption, "map": mapOption, "gauge": gaugeOption, "mapTwice": mapTwiceOption, @@ -1202,16 +976,37 @@ export const GraphChart = (props: { type: string, chartData: any[], chartColor?: const resize = () => { myChart && myChart.resize(); }; - type == "map" && autoTooltip();//地图自动轮播tooltip + let interval: any = null; + if (type == "map") {//地图自动轮播tooltip + let index = 0; + interval = setInterval(() => { + autoTooltip(index) + index++; + if (index >= data1.length) { + index = 0; + } + }, 10000) + } window.addEventListener("resize", debounce(() => resize(), 100)); return () => { window.removeEventListener("resize", debounce(() => resize(), 100)); + clearInterval(interval); } }, [chartData]) return (
) } +//角色校验 +export const authCheck = () => { + //获取角色列表 + const authorityList: any[] = getSessionUserData()?.authorityList; + if (authorityList.findIndex(item => item.roleCode == "ebtp-watcher") == -1) {//监看人员校验 + history.replace({ pathname: "/401", query: { code: "405" } }); + return false; + } + return true; +} const MonitorHome: React.FC<{}> = () => { //今日开标 @@ -1224,6 +1019,16 @@ const MonitorHome: React.FC<{}> = () => { const [annualAndTenderAgentData, setAnnualAndTenderAgentData] = useState(); //活跃供应商 const [activeSupplierData, setActiveSupplierData] = useState([]); + //参与供应商数 + const [supplierCount, setSupplierCount] = useState(""); + //公告公示数量 + const [annoCount, setAnnoCount] = useState(""); + //评审专家数量 + const [expertNumber, setExpertNumber] = useState(""); + //年度&月度 year-年度 month-月度 + const [ymChange, setYmChange] = useState("year"); + //权限校验 + const auth = useRef(authCheck()); 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() }] } const mapChart = useMemo(() => { @@ -1257,7 +1062,21 @@ const MonitorHome: React.FC<{}> = () => { const getAnnualAndTenderAgent = () => { getAnnualAndTenderAgentAPI().then(res => { if (res?.code == 200) { - setAnnualAndTenderAgentData(res?.data); + const data = res?.data; + if (data.agencyProjectYear.length > 0) { + const max1 = data.agencyProjectYear[0].num; + for (let i = 0, length = data.agencyProjectYear.length; i < length; i++) { + data.agencyProjectYear[i]["maxNum"] = max1; + } + } + if (data.agencyProjectMonth.length > 0) { + const max2 = data.agencyProjectMonth[0].num; + + for (let i = 0, length = data.agencyProjectMonth.length; i < length; i++) { + data.agencyProjectMonth[i]["maxNum"] = max2; + } + } + setAnnualAndTenderAgentData(data); } }) } @@ -1265,29 +1084,72 @@ const MonitorHome: React.FC<{}> = () => { const getActiveSupplier = () => { getActiveSupplierAPI().then(res => { if (res?.code == 200) { - setActiveSupplierData(res?.data); + const data = res?.data; + if (data.length > 0) { + const max = data[0].tenderCount; + for (let i = 0, length = data.length; i < length; i++) { + data[i]["maxTenderCount"] = max; + } + } + setActiveSupplierData(data); + } + }) + } + //参与供应商数 + const getSupplierCount = (ym: string) => { + getSupplierCountAPI({ type: ym }).then(res => { + if (res?.code == 200) { + setSupplierCount(res?.data); + } + }) + } + //公告公示数量 + const getAnnoCount = (ym: string) => { + getAnnoCountAPI({ type: ym }).then(res => { + if (res?.code == 200) { + setAnnoCount(res?.data); + } + }) + } + //评审专家数量 + const getExpertNumber = (ym: string) => { + getExpertNumberAPI(ym).then(res => { + if (res?.code == 200) { + setExpertNumber(res?.data); } }) } useEffect(() => { - getTodayOpening(); - getReviewDistribution(); - getOpeningList(); - getAnnualAndTenderAgent(); - getActiveSupplier(); + if (auth.current) { + getTodayOpening(); + getReviewDistribution(); + getOpeningList(); + getAnnualAndTenderAgent(); + getActiveSupplier(); + } }, []) + useEffect(() => { + if (auth.current) { + getSupplierCount(ymChange); + getAnnoCount(ymChange); + getExpertNumber(ymChange); + } + }, [ymChange]) + return (
- {/* */} +
+ { setYmChange("year") }}>年度 | { setYmChange("month") }}>月度 +
-
- - - - - + + + + + + @@ -1343,8 +1205,8 @@ const MonitorHome: React.FC<{}> = () => {
上午
MORNING
- {openingList.slice(0, 2).map(item => ( -
+ {openingList.slice(0, 2).map((item, index) => ( +
{item.startTime}-{item.endTime}
{item.num}/{item.max}
@@ -1357,8 +1219,8 @@ const MonitorHome: React.FC<{}> = () => {
下午
AFTERNOON
- {openingList.slice(2, 5).map(item => ( -
+ {openingList.slice(2, 5).map((item, index) => ( +
{item.startTime}-{item.endTime}
{item.num}/{item.max}
@@ -1369,7 +1231,7 @@ const MonitorHome: React.FC<{}> = () => {
- +
diff --git a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx index 9cfdb53..0a2c59e 100644 --- a/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/OpenToday/index.tsx @@ -1,13 +1,10 @@ -import { Col, Progress, Row, Table } from 'antd'; -import { debounce } from 'lodash'; -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { Col, Row } from 'antd'; +import React, { useEffect, useRef, useState } from 'react'; import '../style.less' -import { GraphChart, onCell, onHeaderCell, OverviewItem, ProgressItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StageCard, StatisticTable } from '../Home'; -import Circle3197 from '@/assets/monitor/circle-3197.png'; -import Circle3198 from '@/assets/monitor/circle-3198.png'; +import { authCheck, onCell, onHeaderCell, OverviewItem, ProgressItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StageCard } from '../Home'; import Circle3199 from '@/assets/monitor/circle-3199.png'; -import Circle3200 from '@/assets/monitor/circle-3200.png'; import { getDecryptSuccessRateTodayAPI, getTodayInfoAPI } from '../service'; +import { isNotEmpty } from '@/utils/CommonUtils'; const columns: any[] = [ { @@ -183,6 +180,8 @@ const OpenToday: React.FC<{}> = () => { const [todayInfoData, setTodayInfoData] = useState(); //今日开标-解密成功率 const [decryptSuccessRateTodayData, setDecryptSuccessRateTodayData] = useState(); + //权限校验 + const auth = useRef(authCheck()); //今日开标-评标阶段,评标及时率 const getTodayInfo = () => { getTodayInfoAPI().then(res => { @@ -200,8 +199,10 @@ const OpenToday: React.FC<{}> = () => { }) } useEffect(() => { - getTodayInfo(); - getDecryptSuccessRateToday(); + if (auth.current) { + getTodayInfo(); + getDecryptSuccessRateToday(); + } }, []) return ( @@ -222,16 +223,16 @@ const OpenToday: React.FC<{}> = () => {
- + - +
- +
diff --git a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx index 4eb0a31..72fff81 100644 --- a/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/Supplier/index.tsx @@ -1,11 +1,10 @@ -import { Col, Progress, Row, Table } from 'antd'; -import { debounce } from 'lodash'; +import { Col, Progress, Row } from 'antd'; import React, { useEffect, useMemo, useRef, useState } from 'react'; import '../style.less' -import { GraphChart, MetricItems, onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, SelectItem, StatisticTable } from '../Home'; +import { authCheck, GraphChart, MetricItems, onCell, onHeaderCell, ScreenLabel, ScreenTitle, SelectItem, StatisticTable } from '../Home'; import Frame10116 from '@/assets/monitor/Frame-10116.png'; import Frame10121 from '@/assets/monitor/Frame-10121.png'; -import { getActiveSupplierRankAPI, getProvinceActiveSupplierInfoAPI, getSupplierInfoAPI, getSupplierCountAPI } from '../service'; +import { getActiveSupplierRankAPI, getProvinceActiveSupplierInfoAPI, getSupplierInfoAPI } from '../service'; const columns: any[] = [ { @@ -39,7 +38,7 @@ const columns: any[] = [ width: '25%', onCell, onHeaderCell, - render: (_: any, record: any, index: any) => + render: (_: any, record: any, index: any) => }, { title: '中选次数', @@ -182,12 +181,14 @@ const dataSource = [ const Supplier: React.FC<{}> = () => { //上面六个指标 const [supplierInfoData, setSupplierInfoData] = useState(); + //rackDataRef + const rankDataRef = useRef(); //全国活跃供应商排名 const [activeSupplierRankData, setActiveSupplierRankData] = useState([]); //供应商概况-省份活跃供应商 const [provinceActiveSupplierInfoData, setProvinceActiveSupplierInfoData] = useState(); - //活跃供应商 - const [supplierCount, setSupplierCount] = useState([]); + //权限校验 + const auth = useRef(authCheck()); const transverseBarChart = useMemo(() => { return true && }, []) @@ -209,7 +210,9 @@ const Supplier: React.FC<{}> = () => { const getActiveSupplierRank = () => { getActiveSupplierRankAPI().then(res => { if (res?.code == 200) { - setActiveSupplierRankData(res?.data); + const data = JSON.parse(res?.data) + rankDataRef.current = data; + onSelectChange("procurement_mode"); } }) } @@ -221,19 +224,26 @@ const Supplier: React.FC<{}> = () => { } }) } - //供应商概况-参与供应商 - const getSupplierCount = () => { - getSupplierCountAPI({ type: "year" }).then(res => { - if (res?.code == 200) { - setSupplierCount(res?.data); + //onSelectChange select变更事件 + const onSelectChange = (value: string | number) => { + if (rankDataRef.current) { + const data = rankDataRef.current[value]; + if (data.length > 0) { + const max = data[0].tenderCount; + for (let i = 0, length = data.length; i < length; i++) { + data[i]["maxTenderCount"] = max; + } + setActiveSupplierRankData(data) } - }) + + } } useEffect(() => { - getSupplierInfo(); - getActiveSupplierRank(); - getProvinceActiveSupplierInfo(); - getSupplierCount(); + if (auth.current) { + getSupplierInfo(); + getActiveSupplierRank(); + getProvinceActiveSupplierInfo(); + } }, []) return ( @@ -252,10 +262,10 @@ const Supplier: React.FC<{}> = () => {
- 交易方式    { console.log(value) }} /> + 交易方式   
- +
diff --git a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx index 61c2741..3d23f7b 100644 --- a/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx +++ b/src/pages/ElecEvaluation/Monitor/TenderAgent/index.tsx @@ -1,18 +1,20 @@ -import { Col, Progress, Row, Table } from 'antd'; +import { Col, Progress, Radio, Row, Table } from 'antd'; import { debounce } from 'lodash'; import React, { useEffect, useMemo, useRef, useState } from 'react'; import '../style.less' -import { GraphChart, onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, StatisticTable, vitalEnum } from '../Home'; +import { authCheck, GraphChart, onCell, onHeaderCell, OverviewItem, proviceEnum, ScreenLabel, ScreenTitle, ScrollTable, SelectItem, StatisticTable } from '../Home'; import Circle3197 from '@/assets/monitor/circle-3197.png'; import Circle3198 from '@/assets/monitor/circle-3198.png'; import Circle3199 from '@/assets/monitor/circle-3199.png'; import Circle3200 from '@/assets/monitor/circle-3200.png'; +import { getTenderAgentDataAPI, getProvinceByAgencyAPI } from '../service'; +import { isNotEmpty } from '@/utils/CommonUtils'; const columns: any[] = [ { title: '代理机构', - dataIndex: 'dljg', - key: 'dljg', + dataIndex: 'agencyName', + key: 'agencyName', width: '20%', ellipsis: true, onCell, @@ -20,35 +22,37 @@ const columns: any[] = [ }, { title: '项目数量总计(个)', - dataIndex: 'xmslzj', - key: 'xmslzj', + dataIndex: 'dlxms', + key: 'dlxms', width: '20%', onCell, onHeaderCell, }, { title: '项目金额总计(亿元)', - dataIndex: 'xmjezj', - key: 'xmjezj', + dataIndex: 'dlxmys', + key: 'dlxmys', width: '20%', onCell, onHeaderCell, + render: (_: any, record: any) => isNotEmpty(record.dlxmys) ? record.dlxmys.toFixed(2) : 0, }, { title: '平均完成率(%)', - dataIndex: 'pjwcl', - key: 'pjwcl', - width: '20%', - onCell, - onHeaderCell, - }, - { - title: '平均满意度(%)', - dataIndex: 'pjmyd', + dataIndex: 'wcl', + key: 'wcl', width: '20%', onCell, onHeaderCell, + render: (_: any, record: any) => isNotEmpty(record.wcl) ? (record.wcl * 100).toFixed(0) : 0, }, + // { + // title: '平均满意度(%)', + // dataIndex: 'pjmyd', + // width: '20%', + // onCell, + // onHeaderCell, + // }, ]; const dataSource = [ { @@ -150,38 +154,97 @@ const dataSource = [ ] const TenderAgent: React.FC<{}> = () => { + //相关统计数据 + const [tenderAgentData, setTenderAgentData] = useState(); + //条形图数据 + const [monthData, setMonthData] = useState([]); + //下拉框数据 + const [selectData, setSelectData] = useState([]); + //代理分布省分 + const [provinceByAgencyData, setProvinceByAgencyData] = 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 && - }, [gaugeChartData]) - const gaugeYellowChart = useMemo(() => { - return gaugeChartData && - }, [gaugeChartData]) - const gaugeBlueChart = useMemo(() => { - return gaugeChartData && - }, [gaugeChartData]) + // const gaugeChartData = [{ value: 20 }] + // const gaugeGreenChart = useMemo(() => { + // return gaugeChartData && + // }, [gaugeChartData]) + // const gaugeYellowChart = useMemo(() => { + // return gaugeChartData && + // }, [gaugeChartData]) + // const gaugeBlueChart = useMemo(() => { + // return gaugeChartData && + // }, [gaugeChartData]) const categoryChart = useMemo(() => { - return - }, []) + 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 && + return centerMapData?.list && }, [centerMapData]) + + //相关统计数据 + const getTenderAgentData = () => { + getTenderAgentDataAPI().then(res => { + if (res?.code == 200) { + setTenderAgentData(res?.data); + const data = res?.data.agencyProjectMonth;//左侧条形图数据处理 + const wclList: any[] = []; + const dlxmsList: any[] = []; + const dlxmysList: any[] = []; + data.slice(7, 12).forEach((item: any) => { + wclList.push(Number((item.wcl * 100).toFixed(1))); + dlxmsList.push(item.dlxms); + dlxmysList.push(Number(item.dlxmys.toFixed(2))); + }); + const monthDataMap = [wclList, dlxmsList, dlxmysList]; + setMonthData(monthDataMap) + + const selectData: any[] = res?.data.agencyList.map((item: any) => ({ label: item.agencyName, value: item.agencyId }));//右侧代理机构下拉 + selectData.unshift({ label: "全部", value: "all" }); + setSelectData(selectData); + } + }) + } + //代理分布省分 + const getProvinceByAgency = () => { + getProvinceByAgencyAPI("101152137").then(res => { + if (res?.code == 200) { + setProvinceByAgencyData(res?.data); + } + }) + } + const onChange = (e: any) => { + setBtnSelect(e.target.value); + } + //onSelectChange select变更事件 + const onSelectChange = (value: string | number) => { + + } + useEffect(() => { + if (auth.current) { + getTenderAgentData(); + getProvinceByAgency(); + } + }, []) return (
-
+
- - - - + + + + {/* tenderAgentData?.agencyProjectCountYear.dlxmys */} + +
-
+ {/*
@@ -197,7 +260,7 @@ const TenderAgent: React.FC<{}> = () => {
代理项目归档率
- + */} @@ -207,11 +270,18 @@ const TenderAgent: React.FC<{}> = () => { {categoryChart}
- +
+
+ + 代理分布省分 + 省分代理分布 + + +
{mapChart}
diff --git a/src/pages/ElecEvaluation/Monitor/service.ts b/src/pages/ElecEvaluation/Monitor/service.ts index 6db1ec9..21fa073 100644 --- a/src/pages/ElecEvaluation/Monitor/service.ts +++ b/src/pages/ElecEvaluation/Monitor/service.ts @@ -51,6 +51,35 @@ export async function getActiveSupplierAPI() { }); } +/** + * 首页-参与供应商数 + */ +export async function getSupplierCountAPI(params: any) { + return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/supplierCount', { + method: 'GET', + params: { ...params } + }); +} + +/** + * 首页-公告公示数量 + */ +export async function getAnnoCountAPI(params: any) { + return request('/api/biz-service-ebtp-statistics/indexMonitor/annoCount', { + method: 'GET', + params: { ...params } + }); +} + +/** + * 首页-评审专家数量 + */ +export async function getExpertNumberAPI(params: any) { + return request(`/api/biz-service-ebtp-statistics/api/evaluation/monitor/expertNumber/${params}`, { + method: 'GET', + }); +} + /** * 异常监控-超过1小时未开标数量 */ @@ -100,6 +129,24 @@ export async function getDecryptDataAPI() { }); } +/** + * 异常监控-评审室关闭3日内未发布公示数 + */ +export async function getThreeDaysUnSendAnnoCountAPI() { + return request('/api/biz-service-ebtp-statistics/exceptionMonitor/threeDaysUnSendAnnoCount', { + method: 'GET', + }); +} + +/** + * 异常监控-评审室关闭3日内未发布公示列表 + */ +export async function getThreeDaysUnSendAnnoListAPI() { + return request('/api/biz-service-ebtp-statistics/exceptionMonitor/threeDaysUnSendAnnoList', { + method: 'GET', + }); +} + /** * 今日开标-评标阶段,评标及时率 */ @@ -146,11 +193,18 @@ export async function getProvinceActiveSupplierInfoAPI() { } /** - * 供应商概况-参与供应商 + * 招标代理机构概况-相关统计数据 */ -export async function getSupplierCountAPI(params: any) { - return request('/api/biz-service-ebtp-statistics/v1/tenderMonitor/supplierCount', { +export async function getTenderAgentDataAPI() { + return request('/api/biz-service-ebtp-statistics/tenderAgent/getTenderAgentData', { + method: 'GET', + }); +} +/** + * 招标代理机构概况-代理分布省分 + */ +export async function getProvinceByAgencyAPI(agencyId: any) { + return request(`/api/biz-service-ebtp-statistics/tenderAgent/getProvinceByAgency/${agencyId}`, { method: 'GET', - params: { ...params } }); } \ No newline at end of file diff --git a/src/pages/ElecEvaluation/Monitor/style.less b/src/pages/ElecEvaluation/Monitor/style.less index 1ed403b..f040f1f 100644 --- a/src/pages/ElecEvaluation/Monitor/style.less +++ b/src/pages/ElecEvaluation/Monitor/style.less @@ -84,6 +84,25 @@ margin-top: 20px; } + .monitor-top-exchange { + height: 16px; + line-height: 16px; + color: #FFFFFF; + text-align: right; + + &>span { + font-size: 14px; + color: #FFFFFF; + line-height: 16px; + cursor: pointer; + + &:hover { + color: #1b7ef2; + text-decoration: underline; + } + } + } + .monitor-top-space-flex { margin-left: 0; margin-top: 20px; @@ -387,7 +406,54 @@ .monitor-tender-map { margin-top: 20px; - height: 690px; + height: 650px; + } + + .monitor-tender-select { + margin-top: 10px; + + .monitor-tender-select-radio { + margin-right: 8px; + } + + .ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + background: #1b7ef2; + border-color: #1b7ef2; + + &:hover { + background: #1b7ef2; + border-color: #1b7ef2; + } + } + + .ant-radio-button-wrapper-checked:not([class*=' ant-radio-button-wrapper-disabled']).ant-radio-button-wrapper:first-child { + border-right-color: #1b7ef2; + } + + .ant-radio-button-wrapper:hover { + color: #fff; + } + + .ant-radio-button-wrapper { + color: #fff; + border: 1px solid #1b7ef2; + border-left-width: 0; + border-top-width: 1.02px; + background: none; + } + + .ant-radio-button-wrapper:first-child { + border-left: 1px solid #1b7ef2; + } + + .ant-radio-button-wrapper:not(:first-child)::before { + background-color: #1b7ef2; + } + + .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before, + .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before { + background-color: #1b7ef2; + } } .monitor-supplier-rank { @@ -603,6 +669,14 @@ .ant-table-tbody>tr>td { border-bottom: 0; } + + .ant-table-placeholder { + height: var(--monitor-table-height); + } + + .ant-table-body { + height: var(--monitor-table-height); + } } .monitor-statistic-table { @@ -694,6 +768,14 @@ .ant-table-tbody>tr>td { border-bottom: 0; } + + .ant-table-placeholder { + height: var(--monitor-table-height); + } + + .ant-table-body { + height: var(--monitor-table-height); + } } .monitor-stage-card {