1.11 第十四版,修改

This commit is contained in:
jl-zhoujl2
2023-01-11 16:28:42 +08:00
parent bf1d8a3a03
commit 873bbd1181
9 changed files with 144 additions and 88 deletions

View File

@ -51,7 +51,11 @@ export default [
path: '/401',
component: './401',
},
{
exact: true,
path: '/404',
component: './404',
},
{//开标室
path: '/room',
component: '../layouts/RoomLayout',

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

View File

@ -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>
// }
/>
);

View File

@ -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>

View File

@ -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>&nbsp;&nbsp;{isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber : 0}&nbsp;&nbsp;&nbsp;&nbsp;{isNotEmpty(todayOpeningData?.sectionNumber) && todayOpeningData?.sectionNumber != "0" ? Number(((Number(todayOpeningData?.banner) / todayOpeningData?.sectionNumber) * 100).toFixed(0)) : 0}%&nbsp;&nbsp;&nbsp;&nbsp;{(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>

View File

@ -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>

View File

@ -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>&nbsp;&nbsp;&nbsp;<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>

View File

@ -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>

View File

@ -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;
}
}