1.11 第十四版,修改
This commit is contained in:
BIN
src/assets/monitor/title-icon.png
Normal file
BIN
src/assets/monitor/title-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 B |
@ -6,12 +6,12 @@ const NoFoundPage: React.FC<{}> = () => (
|
||||
<Result
|
||||
status="404"
|
||||
title="404"
|
||||
subTitle="Sorry, the page you visited does not exist."
|
||||
extra={
|
||||
<Button type="primary" onClick={() => history.push('/')}>
|
||||
Back Home
|
||||
</Button>
|
||||
}
|
||||
subTitle="对不起,您访问的页面不存在。"
|
||||
// extra={
|
||||
// <Button type="primary" onClick={() => history.push('/')}>
|
||||
// Back Home
|
||||
// </Button>
|
||||
// }
|
||||
/>
|
||||
);
|
||||
|
||||
|
@ -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 (
|
||||
<a onClick={() => { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
||||
<a onClick={() => { setExceptionType(null); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||
)
|
||||
},
|
||||
},
|
||||
@ -301,7 +301,7 @@ const MonitorException: React.FC<{}> = () => {
|
||||
onHeaderCell,
|
||||
render: (_: any, record: any) => {
|
||||
return (
|
||||
<a onClick={() => { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
||||
<a onClick={() => { setExceptionType("解密异常"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||
)
|
||||
},
|
||||
},
|
||||
@ -364,7 +364,7 @@ const MonitorException: React.FC<{}> = () => {
|
||||
onHeaderCell,
|
||||
render: (_: any, record: any) => {
|
||||
return (
|
||||
<a onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
||||
<a onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||
)
|
||||
},
|
||||
},
|
||||
@ -427,7 +427,7 @@ const MonitorException: React.FC<{}> = () => {
|
||||
onHeaderCell,
|
||||
render: (_: any, record: any) => {
|
||||
return (
|
||||
<a onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
||||
<a onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||
)
|
||||
},
|
||||
},
|
||||
@ -490,7 +490,7 @@ const MonitorException: React.FC<{}> = () => {
|
||||
onHeaderCell,
|
||||
render: (_: any, record: any) => {
|
||||
return (
|
||||
<a onClick={() => { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#fff" }}>查看</a>
|
||||
<a onClick={() => { setExceptionType("MAC地址重复"); setModalListData([record]); setModalListVisible(true); }} className='monitor-extra-pointer' style={{ color: "#1b7ef2" }}>查看</a>
|
||||
)
|
||||
},
|
||||
},
|
||||
@ -517,7 +517,7 @@ const MonitorException: React.FC<{}> = () => {
|
||||
</div>
|
||||
<ScreenLabel title="开标后六小时未开启评审" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType(null); setModalListData(noOpenAssessListData); setModalListVisible(true); }}>more</span>} />
|
||||
<div className="monitor-exception-card">
|
||||
<ScrollTable dataSource={noOpenAssessListData} columns={columns} ynum={266} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={noOpenAssessListData} columns={columns} ynum={266} rowKey="sectionId" selectKey={selectKey} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
@ -525,11 +525,11 @@ const MonitorException: React.FC<{}> = () => {
|
||||
<div className="monitor-center-main">
|
||||
<ScreenLabel title="解密异常项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("解密异常"); setModalListData(decryptData?.decryptExceptionList ? decryptData?.decryptExceptionList : []); setModalListVisible(true); }}>more</span>} />
|
||||
<div className="monitor-exception-card">
|
||||
<ScrollTable dataSource={decryptData?.decryptExceptionList} columns={columnsSecond} selectKey={selectKey} ynum={266} />
|
||||
<ScrollTable dataSource={decryptData?.decryptExceptionList} columns={columnsSecond} rowKey="id" selectKey={selectKey} ynum={266} />
|
||||
</div>
|
||||
<ScreenLabel title="开启评审后3日未结束评标" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("开启评审后3日未结束评标"); setModalListData(threeDayNoEndData); setModalListVisible(true); }}>more</span>} />
|
||||
<div className="monitor-exception-card">
|
||||
<ScrollTable dataSource={threeDayNoEndData} columns={columnsForth} ynum={266} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={threeDayNoEndData} columns={columnsForth} ynum={266} rowKey="id" selectKey={selectKey} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
@ -537,11 +537,11 @@ const MonitorException: React.FC<{}> = () => {
|
||||
<div className="monitor-right-main">
|
||||
<ScreenLabel title="MAC地址重复项目列表" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("MAC地址重复"); setModalListData(decryptData?.macSameList ? decryptData?.macSameList : []); setModalListVisible(true); }}>more</span>} />
|
||||
<div className="monitor-exception-card">
|
||||
<ScrollTable dataSource={decryptData?.macSameList} columns={columnsFifth} ynum={266} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={decryptData?.macSameList} columns={columnsFifth} ynum={266} rowKey="id" selectKey={selectKey} />
|
||||
</div>
|
||||
<ScreenLabel title="评标结束后3日内未发布公示" extra={<span className='monitor-extra-pointer' onClick={() => { setExceptionType("评标结束后3日内未发布公示"); setModalListData(threeDaysUnSendAnnoList); setModalListVisible(true); }}>more</span>} />
|
||||
<div className="monitor-exception-card">
|
||||
<ScrollTable dataSource={threeDaysUnSendAnnoList} columns={columnsThird} ynum={266} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={threeDaysUnSendAnnoList} columns={columnsThird} ynum={266} rowKey="bidSectName" selectKey={selectKey} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
|
@ -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}
|
||||
>
|
||||
<h3 style={titleStyle}>重点监测异常明细单</h3>
|
||||
{exceptionData.length > 0 ? exceptionData.map((item, index) => {
|
||||
return <>
|
||||
{index == 0 ? null : <Divider style={dividerStyle} />}
|
||||
<Descriptions>
|
||||
<Descriptions.Item label="异常类型" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(exceptionType) ? exceptionType : item?.exType}</Descriptions.Item>
|
||||
<Descriptions.Item label="项目名称" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.projectName}</Descriptions.Item>
|
||||
<Descriptions.Item label="标段名称" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.bidSectName || item?.sectionName}</Descriptions.Item>
|
||||
<Descriptions.Item label="省分" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.provinceName || item?.regionDictName || item?.province}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购经理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactName}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购经理电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactTel}</Descriptions.Item>
|
||||
<Descriptions.Item label="标段状态" labelStyle={labelStyle} contentStyle={contentStyle}>{(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)}</Descriptions.Item>
|
||||
<Descriptions.Item label="招标代理机构" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.tenderAgencyName}</Descriptions.Item>
|
||||
<Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item>
|
||||
<Descriptions.Item label="开标时间" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.openTime || item?.recruitStartTime || item?.openingTime}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购预算" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"}</Descriptions.Item>
|
||||
</Descriptions>
|
||||
</>
|
||||
return (
|
||||
<div key={index} className={exceptionData.length > 1 ? 'modal-list-block' : 'modal-list-block modal-list-block-border0'}>
|
||||
<div className='modal-list-pname'>
|
||||
<img src={titleIcon} /><span>{item?.projectName}</span>
|
||||
<div>{item?.bidSectName || item?.sectionName}</div>
|
||||
</div>
|
||||
<div className='modal-list-desc'>
|
||||
<Descriptions>
|
||||
<Descriptions.Item label="异常类型" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(exceptionType) ? exceptionType : item?.exType}</Descriptions.Item>
|
||||
<Descriptions.Item label="开标时间" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.openTime || item?.recruitStartTime || item?.openingTime}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购预算" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? Number(item?.bidSectContractPrice).toFixed(2) : "0"}</Descriptions.Item>
|
||||
<Descriptions.Item label="省分" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.provinceName || item?.regionDictName || item?.province}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购经理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactName}</Descriptions.Item>
|
||||
<Descriptions.Item label="采购经理电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactTel}</Descriptions.Item>
|
||||
<Descriptions.Item label="标段状态" labelStyle={labelStyle} contentStyle={contentStyle}>{(item?.state || item?.sectionState || item?.sectionStatus) == 9 ? "异常处理" : changeDict(item?.bidMethodDict ? dicData[`business_module=${item?.bidMethodDict}`] : [], item?.businessModule)}</Descriptions.Item>
|
||||
<Descriptions.Item label="招标代理" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerName}</Descriptions.Item>
|
||||
<Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item>
|
||||
</Descriptions>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}) : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} className="monitor-modal-empty" />}
|
||||
<div className='monitor-modal-btn'>
|
||||
{/* <div className='monitor-modal-btn'>
|
||||
<div className='modal-list-btn' onClick={() => onCancel()}>
|
||||
<span>确 定</span>
|
||||
</div>
|
||||
</div>
|
||||
</div> */}
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
@ -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<any>();
|
||||
//权限校验
|
||||
const auth = useRef<boolean>(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 (
|
||||
<ScreenTitle title="智能招标采购室">
|
||||
<div className="top-main">
|
||||
@ -1588,13 +1609,13 @@ const MonitorHome: React.FC<{}> = () => {
|
||||
<ScreenLabel title="今日开标" extra={<span>标段总数 {isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber : 0} 开标完成率 {isNotEmpty(todayOpeningData?.sectionNumber) && todayOpeningData?.sectionNumber != "0" ? Number(((Number(todayOpeningData?.banner) / todayOpeningData?.sectionNumber) * 100).toFixed(0)) : 0}% 评标完成率 {(isNotEmpty(todayInfoData?.sectionNumber) && todayInfoData?.sectionNumber != "0") ? Number(((Number(todayInfoData?.resultNumber) / todayInfoData?.sectionNumber) * 100).toFixed(0)) : 0}%</span>} />
|
||||
</div>
|
||||
<div className="scroll-table">
|
||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={266} />
|
||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} rowKey="sectionId" ynum={266} />
|
||||
</div>
|
||||
<div className="monitor-label-pointer" onClick={() => { window.open("/ElecMonitor/Supplier") }}>
|
||||
<ScreenLabel title="活跃供应商" />
|
||||
<ScreenLabel title="活跃供应商排名(Top20)" />
|
||||
</div>
|
||||
<div className="active-supplier">
|
||||
<StatisticTable columns={todayColumns} dataSource={activeSupplierData} ynum={340} />
|
||||
<StatisticTable columns={todayColumns} dataSource={activeSupplierData} rowKey="companyName" ynum={340} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
@ -1636,7 +1657,7 @@ const MonitorHome: React.FC<{}> = () => {
|
||||
<div>MORNING</div>
|
||||
</div>
|
||||
{openingList.slice(0, 2).map((item, index) => (
|
||||
<div className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||
<div key={index} className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||
<div>
|
||||
<div>{item.startTime}-{item.endTime}</div>
|
||||
<div>{item.num}/{item.max}</div>
|
||||
@ -1650,7 +1671,7 @@ const MonitorHome: React.FC<{}> = () => {
|
||||
<div>AFTERNOON</div>
|
||||
</div>
|
||||
{openingList.slice(2, 5).map((item, index) => (
|
||||
<div className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||
<div key={index} className={index == 0 ? "bid-opening-card bid-opening-card-first" : index == 1 ? "bid-opening-card bid-opening-card-second" : "bid-opening-card bid-opening-card-third"}>
|
||||
<div>
|
||||
<div>{item.startTime}-{item.endTime}</div>
|
||||
<div>{item.num}/{item.max}</div>
|
||||
@ -1663,7 +1684,7 @@ const MonitorHome: React.FC<{}> = () => {
|
||||
<ScreenLabel title="招标代理实施项目统计" />
|
||||
</div>
|
||||
<div className="tender-agent">
|
||||
<StatisticTable columns={tjColumns} dataSource={annualAndTenderAgentData?.agencyProjectYear} ynum={340} />
|
||||
<StatisticTable columns={tjColumns} dataSource={annualAndTenderAgentData?.agencyProjectYear} rowKey="tender_agency_name" ynum={340} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
|
@ -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<{}> = () => {
|
||||
<Col span={12}>
|
||||
<ScreenLabel title="今日开标明细" />
|
||||
<div className='monitor-tender-card'>
|
||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} rowKey="sectionId" selectKey={selectKey} />
|
||||
</div>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<ScreenLabel title="重保项目" />
|
||||
<div className='monitor-tender-card'>
|
||||
<ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} selectKey={selectKey} />
|
||||
<ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} rowKey="id" selectKey={selectKey} />
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
|
@ -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<{}> = () => {
|
||||
<Row>
|
||||
<Col span={8}>
|
||||
<div className="monitor-left-main">
|
||||
<ScreenLabel title="全国活跃供应商排名" />
|
||||
<ScreenLabel title="全国活跃供应商排名(Top20)" />
|
||||
<div className="monitor-supplier-card">
|
||||
<span className='monitor-supplier-select-label'>交易方式</span> <SelectItem options={[{ label: "全部", value: "全部" }, { label: "公开招标", value: "公开招标" }, { label: "公开比选", value: "公开比选" }, { label: "公开招募", value: "公开招募" }, { label: "竞争性谈判", value: "竞争性谈判" }, { label: "单一来源", value: "单一来源" }, { label: "公开询价", value: "公开询价" }, { label: "邀请招标", value: "邀请招标" }]} onSelectChange={onSelectChange} />
|
||||
</div>
|
||||
<div className="monitor-tender-card">
|
||||
<StatisticTable dataSource={activeSupplierRankData} columns={columns} ynum={670} />
|
||||
<StatisticTable dataSource={activeSupplierRankData} columns={columns} rowKey="companyName" ynum={670} />
|
||||
</div>
|
||||
</div>
|
||||
</Col>
|
||||
|
@ -71,7 +71,7 @@ const TenderAgent: React.FC<{}> = () => {
|
||||
//省分代理分布
|
||||
const [provinceData, setProvinceData] = useState<any[]>([]);
|
||||
//btn select
|
||||
const [btnSelect, setBtnSelect] = useState<string>("0");
|
||||
const [btnSelect, setBtnSelect] = useState<string>("1");
|
||||
//year select
|
||||
const localYear: string = moment().month() < 2 ? String(moment().year() - 1) : String(moment().year());
|
||||
const [yearSelect, setYearSelect] = useState<string>(localYear);
|
||||
@ -207,15 +207,15 @@ const TenderAgent: React.FC<{}> = () => {
|
||||
{categoryChart}
|
||||
</div>
|
||||
<div>
|
||||
<StatisticTable dataSource={tenderAgentData?.agencyProjectListYear?.slice(0, 15)} columns={columns} ynum={266} />
|
||||
<StatisticTable dataSource={tenderAgentData?.agencyProjectListYear?.slice(0, 15)} columns={columns} rowKey="agencyName" ynum={266} />
|
||||
</div>
|
||||
</Col>
|
||||
<Col span={16}>
|
||||
<ScreenLabel title="代理机构分布" />
|
||||
<div className="monitor-tender-select">
|
||||
<Radio.Group buttonStyle="solid" onChange={onChange} value={btnSelect} className="monitor-tender-select-radio">
|
||||
<Radio.Button value="0">代理分布省分</Radio.Button>
|
||||
<Radio.Button value="1">省分代理分布</Radio.Button>
|
||||
<Radio.Button value="0">代理分布省分</Radio.Button>
|
||||
</Radio.Group>
|
||||
<SelectRadio options={selectData} onSelectChange={onSelectChange} defaultText="请选择" hidden={btnSelect == "1"} />
|
||||
</div>
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user