1.12 第十六版
This commit is contained in:
@ -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: '采购经理',
|
||||||
|
@ -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'>
|
||||||
|
<div className='modal-list-left'>
|
||||||
<img src={titleIcon} /><span>{item?.projectName}</span>
|
<img src={titleIcon} /><span>{item?.projectName}</span>
|
||||||
<div>{item?.bidSectName || item?.sectionName}</div>
|
<div>{item?.bidSectName || item?.sectionName}</div>
|
||||||
</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 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>
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -1143,6 +1143,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.modal-list-pname {
|
.modal-list-pname {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.modal-list-left {
|
||||||
&>span {
|
&>span {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -1162,6 +1167,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.modal-list-right {
|
||||||
|
.modal-list-proc {
|
||||||
|
align-items: center;
|
||||||
|
padding: 2px 12px;
|
||||||
|
background: rgba(25, 198, 255, 0.17);
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid #29F0F9;
|
||||||
|
border-radius: 3px;
|
||||||
|
|
||||||
|
&>span {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 20px;
|
||||||
|
letter-spacing: 0px;
|
||||||
|
color: #29F0F9;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.modal-list-desc {
|
.modal-list-desc {
|
||||||
padding-top: 24px;
|
padding-top: 24px;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user