1.12 第十六版

This commit is contained in:
jl-zhoujl2
2023-01-12 15:40:58 +08:00
parent 2c1157f0cf
commit d78b495090
4 changed files with 70 additions and 35 deletions

View File

@ -282,7 +282,7 @@ const MonitorException: React.FC<{}> = () => {
width: '25%', width: '25%',
onCell, onCell,
onHeaderCell, onHeaderCell,
// render: (_: any, record: any) => isNotEmpty(record.budgetAmount) ? record.budgetAmount.toFixed(2) : 0, render: (_: any, record: any) => isNotEmpty(record.bidSectContractPrice) ? record.bidSectContractPrice.toFixed(2) : 0,
}, },
{ {
title: '采购经理', title: '采购经理',
@ -345,7 +345,7 @@ const MonitorException: React.FC<{}> = () => {
width: '25%', width: '25%',
onCell, onCell,
onHeaderCell, onHeaderCell,
// render: (_: any, record: any) => isNotEmpty(record.bidSectContractPrice) ? record.bidSectContractPrice.toFixed(2) : 0, render: (_: any, record: any) => isNotEmpty(record.bidSectContractPrice) ? record.bidSectContractPrice.toFixed(2) : 0,
}, },
{ {
title: '采购经理', title: '采购经理',
@ -471,7 +471,7 @@ const MonitorException: React.FC<{}> = () => {
width: '25%', width: '25%',
onCell, onCell,
onHeaderCell, onHeaderCell,
// render: (_: any, record: any) => isNotEmpty(record.budgetAmount) ? record.budgetAmount.toFixed(2) : 0, render: (_: any, record: any) => isNotEmpty(record.bidSectContractPrice) ? record.bidSectContractPrice.toFixed(2) : 0,
}, },
{ {
title: '采购经理', title: '采购经理',

View File

@ -459,8 +459,8 @@ export const StageCard = (props: { percentage: string | number, total: string |
) )
} }
//滚动列表 //滚动列表
export const ScrollTable = (props: { dataSource: any[], columns: any[], rollTime?: number, rollNum?: number, ynum?: number, rowKey?: string, selectKey?: number }) => { export const ScrollTable = (props: { dataSource: any[], columns: any[], ynum?: number, rowKey?: string, selectKey?: number, onDoubleClick?: (record: any) => void }) => {
const { dataSource, columns, rollTime = 10, rollNum = 5, ynum = 300, rowKey = "id", selectKey = -1 } = props; const { dataSource, columns, ynum = 300, rowKey = "id", selectKey = -1, onDoubleClick = () => { } } = props;
return ( return (
<div style={{ ["--monitor-table-height" as any]: `${ynum}px` }}> <div style={{ ["--monitor-table-height" as any]: `${ynum}px` }}>
<Table <Table
@ -483,7 +483,7 @@ export const ScrollTable = (props: { dataSource: any[], columns: any[], rollTime
columns={columns} columns={columns}
onRow={record => { onRow={record => {
return { return {
onClick: () => { }, onDoubleClick: () => { onDoubleClick(record) },
} }
}} }}
/> />
@ -491,8 +491,8 @@ export const ScrollTable = (props: { dataSource: any[], columns: any[], rollTime
) )
} }
//统计列表 //统计列表
export const StatisticTable = (props: { dataSource: any[], columns: any[], rollTime?: number, rollNum?: number, ynum?: number, rowKey?: string }) => { export const StatisticTable = (props: { dataSource: any[], columns: any[], ynum?: number, rowKey?: string }) => {
const { dataSource, columns, rollTime = 50, rollNum = 5, ynum = 300, rowKey = "id" } = props; const { dataSource, columns, ynum = 300, rowKey = "id" } = props;
return ( return (
<div style={{ ["--monitor-table-height" as any]: `${ynum}px` }}> <div style={{ ["--monitor-table-height" as any]: `${ynum}px` }}>
<Table <Table
@ -581,8 +581,8 @@ export const ScreenTitle = (props: { title: string, children: any }) => {
} }
//modal大弹窗 //modal大弹窗
export const ModalList = (props: { modalVisible: boolean, onCancel: () => void, exceptionType?: string, exceptionData: any[] }) => { export const ModalList = (props: { modalVisible: boolean, onCancel: () => void, exceptionType?: string, exceptionData: any[], title?: string | null }) => {
const { modalVisible, onCancel, exceptionType, exceptionData } = props; const { modalVisible, onCancel, exceptionType, exceptionData, title } = props;
const modalHeight = window.innerHeight * 96 / 100; const modalHeight = window.innerHeight * 96 / 100;
const labelStyle = { color: "#29F0F9", fontWeight: "bold", width: "100px" }; const labelStyle = { color: "#29F0F9", fontWeight: "bold", width: "100px" };
const contentStyle = { color: "#fff", paddingLeft: "14px" }; const contentStyle = { color: "#fff", paddingLeft: "14px" };
@ -603,23 +603,30 @@ export const ModalList = (props: { modalVisible: boolean, onCancel: () => void,
centered centered
footer={null} footer={null}
> >
<h3 style={titleStyle}></h3> <h3 style={titleStyle}>{isNotEmpty(title) ? title : "重点监测异常明细单"}</h3>
{exceptionData.length > 0 ? exceptionData.map((item, index) => { {exceptionData.length > 0 ? exceptionData.map((item, index) => {
return ( return (
<div key={index} className={exceptionData.length > 1 ? 'modal-list-block' : 'modal-list-block modal-list-block-border0'}> <div key={index} className={exceptionData.length > 1 ? 'modal-list-block' : 'modal-list-block modal-list-block-border0'}>
<div className='modal-list-pname'> <div className='modal-list-pname'>
<img src={titleIcon} /><span>{item?.projectName}</span> <div className='modal-list-left'>
<div>{item?.bidSectName || item?.sectionName}</div> <img src={titleIcon} /><span>{item?.projectName}</span>
<div>{item?.bidSectName || item?.sectionName}</div>
</div>
{isEmpty(title) && <div className='modal-list-right'>
<div className='modal-list-proc'>
<span>{changeDict(dicData['procurement_mode=entrust'], item?.bidMethodDict)}</span>
</div>
</div>}
</div> </div>
<div className='modal-list-desc'> <div className='modal-list-desc'>
<Descriptions> <Descriptions>
<Descriptions.Item label="异常类型" labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(exceptionType) ? exceptionType : item?.exType}</Descriptions.Item> <Descriptions.Item label={isNotEmpty(title) ? "采购方式" : "异常类型"} labelStyle={labelStyle} contentStyle={contentStyle}>{isNotEmpty(title) ? changeDict(dicData['procurement_mode=entrust'], item?.bidMethodDict) : 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}>{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}>{isNotEmpty(item?.budgetAmount) ? Number(item?.budgetAmount).toFixed(2) : isNotEmpty(item?.bidSectContractPrice) ? typeof item?.bidSectContractPrice == "number" ? Number(item?.bidSectContractPrice).toFixed(2) : item?.bidSectContractPrice : "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?.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?.ownerContactName}</Descriptions.Item>
<Descriptions.Item label="采购经理电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.ownerContactTel}</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?.sectionState || item?.sectionStatus || item?.state) == 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?.appManagerName}</Descriptions.Item>
<Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item> <Descriptions.Item label="代理机构电话" labelStyle={labelStyle} contentStyle={contentStyle}>{item?.appManagerTel}</Descriptions.Item>
</Descriptions> </Descriptions>

View File

@ -35,6 +35,8 @@ const OpenToday: React.FC<{}> = () => {
const [exceptionType, setExceptionType] = useState<any>(); const [exceptionType, setExceptionType] = useState<any>();
//selectKey //selectKey
const [selectKey, setSelectKey] = useState<number>(-1); const [selectKey, setSelectKey] = useState<number>(-1);
//modal title
const [modalTitle, setModalTitle] = useState<string | null>(null);
//权限校验 //权限校验
const auth = useRef<boolean>(authCheck()); const auth = useRef<boolean>(authCheck());
//定时器描述 //定时器描述
@ -294,9 +296,9 @@ const OpenToday: React.FC<{}> = () => {
<OverviewItem icon={Circle3199} title="已评标" number={isNotEmpty(todayInfoData?.openAssessNumber) ? todayInfoData?.openAssessNumber : 0} unit="个" /> <OverviewItem icon={Circle3199} title="已评标" number={isNotEmpty(todayInfoData?.openAssessNumber) ? todayInfoData?.openAssessNumber : 0} unit="个" />
</div> </div>
<div className="monitor-top-space-flex"> <div className="monitor-top-space-flex">
<ProgressItem progress={isNotEmpty(decryptSuccessRateTodayData?.successRate) ? Number(Number(decryptSuccessRateTodayData?.successRate).toFixed(0)) : 100} title="解密成功率" leftTitle='解密成功' rightTitle='解密失败' leftNumber={isNotEmpty(decryptSuccessRateTodayData?.successNum) ? Number(decryptSuccessRateTodayData?.successNum) : 0} rightNumber={isNotEmpty(decryptSuccessRateTodayData?.failNum) ? Number(decryptSuccessRateTodayData?.failNum) : 0} leftClick={() => { }} rightClick={() => { setExceptionType("解密异常"); setModalListData(isNotEmpty(decryptSuccessRateTodayData?.decryptFailProjectList) ? decryptSuccessRateTodayData?.decryptFailProjectList : []); setModalListVisible(true); }} /> <ProgressItem progress={isNotEmpty(decryptSuccessRateTodayData?.successRate) ? Number(Number(decryptSuccessRateTodayData?.successRate).toFixed(0)) : 100} title="解密成功率" leftTitle='解密成功' rightTitle='解密失败' leftNumber={isNotEmpty(decryptSuccessRateTodayData?.successNum) ? Number(decryptSuccessRateTodayData?.successNum) : 0} rightNumber={isNotEmpty(decryptSuccessRateTodayData?.failNum) ? Number(decryptSuccessRateTodayData?.failNum) : 0} leftClick={() => { }} rightClick={() => { setExceptionType("解密异常"); setModalTitle(null); setModalListData(isNotEmpty(decryptSuccessRateTodayData?.decryptFailProjectList) ? decryptSuccessRateTodayData?.decryptFailProjectList : []); setModalListVisible(true); }} />
<ProgressItem progress={isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber != 0 ? Number((((todayOpeningData?.sectionNumber - Number(noOpenNumberTwo)) / Number(todayOpeningData?.sectionNumber)) * 100).toFixed(0)) : 100 : 100} title="开标及时率" leftTitle='2小时未开标' rightTitle='5小时未开标' leftNumber={noOpenNumberTwo} rightNumber={noOpenNumberFive} leftClick={() => { setExceptionType("2小时未开标"); setModalListData(noOpenListTwo); setModalListVisible(true); }} rightClick={() => { setExceptionType("5小时未开标"); setModalListData(noOpenListFive); setModalListVisible(true); }} /> <ProgressItem progress={isNotEmpty(todayOpeningData?.sectionNumber) ? todayOpeningData?.sectionNumber != 0 ? Number((((todayOpeningData?.sectionNumber - Number(noOpenNumberTwo)) / Number(todayOpeningData?.sectionNumber)) * 100).toFixed(0)) : 100 : 100} title="开标及时率" leftTitle='2小时未开标' rightTitle='5小时未开标' leftNumber={noOpenNumberTwo} rightNumber={noOpenNumberFive} leftClick={() => { setExceptionType("2小时未开标"); setModalTitle(null); setModalListData(noOpenListTwo); setModalListVisible(true); }} rightClick={() => { setExceptionType("5小时未开标"); setModalTitle(null); setModalListData(noOpenListFive); setModalListVisible(true); }} />
<ProgressItem progress={isNotEmpty(todayInfoData?.sectionNumber) ? todayInfoData?.sectionNumber != 0 ? Number((((todayInfoData?.sectionNumber - Number(todayInfoData?.sixTimelyRate)) / Number(todayInfoData?.sectionNumber)) * 100).toFixed(0)) : 100 : 100} title="评标及时率" leftTitle='6小时未评标' rightTitle='10小时未评标' leftNumber={todayInfoData?.sixTimelyRate} rightNumber={todayInfoData?.tenTimelyRate} leftClick={() => { setExceptionType("6小时未评标"); setModalListData(unopenSixData); setModalListVisible(true); }} rightClick={() => { setExceptionType("10小时未评标"); setModalListData(unopenTenData); setModalListVisible(true); }} /> <ProgressItem progress={isNotEmpty(todayInfoData?.sectionNumber) ? todayInfoData?.sectionNumber != 0 ? Number((((todayInfoData?.sectionNumber - Number(todayInfoData?.sixTimelyRate)) / Number(todayInfoData?.sectionNumber)) * 100).toFixed(0)) : 100 : 100} title="评标及时率" leftTitle='6小时未评标' rightTitle='10小时未评标' leftNumber={todayInfoData?.sixTimelyRate} rightNumber={todayInfoData?.tenTimelyRate} leftClick={() => { setExceptionType("6小时未评标"); setModalTitle(null); setModalListData(unopenSixData); setModalListVisible(true); }} rightClick={() => { setExceptionType("10小时未评标"); setModalTitle(null); setModalListData(unopenTenData); setModalListVisible(true); }} />
</div> </div>
</Col> </Col>
<Col span={7}> <Col span={7}>
@ -313,17 +315,17 @@ const OpenToday: React.FC<{}> = () => {
<Col span={12}> <Col span={12}>
<ScreenLabel title="今日开标明细" /> <ScreenLabel title="今日开标明细" />
<div className='monitor-tender-card'> <div className='monitor-tender-card'>
<ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} rowKey="sectionId" selectKey={selectKey} /> <ScrollTable dataSource={todayOpeningData?.todayList} columns={columns} ynum={540} rowKey="sectionId" selectKey={selectKey} onDoubleClick={(record: any) => { setModalTitle("今日开标明细"); setModalListData([record]); setModalListVisible(true); }} />
</div> </div>
</Col> </Col>
<Col span={12}> <Col span={12}>
<ScreenLabel title="重保项目" /> <ScreenLabel title="重保项目" />
<div className='monitor-tender-card'> <div className='monitor-tender-card'>
<ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} rowKey="id" selectKey={selectKey} /> <ScrollTable dataSource={isNotEmpty(todayOpeningData?.importantList) ? todayOpeningData?.importantList : []} columns={reiColumns} ynum={540} rowKey="id" selectKey={selectKey} onDoubleClick={(record: any) => { setModalTitle("重保项目明细"); setModalListData([record]); setModalListVisible(true); }} />
</div> </div>
</Col> </Col>
</Row> </Row>
<ModalList modalVisible={modalListVisible} onCancel={() => { setModalListVisible(false); setModalListData([]); }} exceptionData={modalListData} exceptionType={exceptionType} /> <ModalList modalVisible={modalListVisible} onCancel={() => { setModalListVisible(false); setModalListData([]); }} exceptionData={modalListData} exceptionType={exceptionType} title={modalTitle} />
</ScreenTitle> </ScreenTitle>
); );
}; };

View File

@ -1143,22 +1143,48 @@
} }
.modal-list-pname { .modal-list-pname {
&>span { display: flex;
font-size: 16px; align-items: center;
font-weight: normal; justify-content: space-between;
line-height: 38px;
letter-spacing: 0px; .modal-list-left {
color: #FFFFFF; &>span {
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;
}
} }
&>img { .modal-list-right {
position: relative; .modal-list-proc {
top: -2px; align-items: center;
} padding: 2px 12px;
background: rgba(25, 198, 255, 0.17);
box-sizing: border-box;
border: 1px solid #29F0F9;
border-radius: 3px;
&>div { &>span {
padding-left: 28px; font-size: 14px;
color: #FFFFFF; font-weight: normal;
line-height: 20px;
letter-spacing: 0px;
color: #29F0F9;
z-index: 0;
}
}
} }
} }