|
|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
import React, { useEffect, useRef, useState } from 'react';
|
|
|
|
|
import { Card, Result, Select, Button, Segmented } from 'antd';
|
|
|
|
|
import { CheckCircleOutlined, ExportOutlined, HeartFilled, LineHeightOutlined } from '@ant-design/icons';
|
|
|
|
|
import { Card, Result, Select, Button, Segmented, Progress, Input } from 'antd';
|
|
|
|
|
import { CheckCircleOutlined, ExportOutlined, HeartFilled, LineHeightOutlined, ExclamationCircleOutlined, SearchOutlined } from '@ant-design/icons';
|
|
|
|
|
import * as echarts from 'echarts';
|
|
|
|
|
import StandardTable from '@/components/StandardTable';
|
|
|
|
|
import styles from './EvaluationReport.less';
|
|
|
|
|
@ -27,9 +27,10 @@ const EvaluationReport = () => {
|
|
|
|
|
const [dataSource, setDataSource] = useState([]);
|
|
|
|
|
const [pagination, setPagination] = useState({
|
|
|
|
|
current: 1,
|
|
|
|
|
pageSize: 5,
|
|
|
|
|
pageSize: 8,
|
|
|
|
|
total: 0,
|
|
|
|
|
});
|
|
|
|
|
const [searchText, setSearchText] = useState('');
|
|
|
|
|
|
|
|
|
|
// 柱状图初始化
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
@ -140,7 +141,7 @@ const EvaluationReport = () => {
|
|
|
|
|
axisPointer: {
|
|
|
|
|
type: 'shadow'
|
|
|
|
|
},
|
|
|
|
|
formatter: function(params) {
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
return `${params[0].name}<br/>使用次数: ${params[0].value}`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -175,6 +176,7 @@ const EvaluationReport = () => {
|
|
|
|
|
|
|
|
|
|
legend: {
|
|
|
|
|
show: true,
|
|
|
|
|
top: '5%',
|
|
|
|
|
left: 'center',
|
|
|
|
|
itemWidth: 20,
|
|
|
|
|
itemHeight: 8,
|
|
|
|
|
@ -187,7 +189,7 @@ const EvaluationReport = () => {
|
|
|
|
|
left: '5%',
|
|
|
|
|
right: '5%',
|
|
|
|
|
bottom: '10%',
|
|
|
|
|
top: '15%',
|
|
|
|
|
top: '20%',
|
|
|
|
|
containLabel: true
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
@ -444,7 +446,7 @@ const EvaluationReport = () => {
|
|
|
|
|
width: 60,
|
|
|
|
|
render: (text, record, index) => {
|
|
|
|
|
const page = pagination.current || 1;
|
|
|
|
|
const pageSize = pagination.pageSize || 5;
|
|
|
|
|
const pageSize = pagination.pageSize || 8;
|
|
|
|
|
const number = (page - 1) * pageSize + index + 1;
|
|
|
|
|
return `0${number}`.slice(-2);
|
|
|
|
|
}
|
|
|
|
|
@ -462,26 +464,27 @@ const EvaluationReport = () => {
|
|
|
|
|
width: 110,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '型号规格',
|
|
|
|
|
title: '类型',
|
|
|
|
|
dataIndex: 'modelSpec',
|
|
|
|
|
key: 'modelSpec',
|
|
|
|
|
width: 140,
|
|
|
|
|
width: 120,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '安装位置',
|
|
|
|
|
dataIndex: 'installLocation',
|
|
|
|
|
key: 'installLocation',
|
|
|
|
|
width: 200,
|
|
|
|
|
width: 100,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '状态',
|
|
|
|
|
dataIndex: 'status',
|
|
|
|
|
key: 'status',
|
|
|
|
|
width: 80,
|
|
|
|
|
width: 100,
|
|
|
|
|
render: (text) => {
|
|
|
|
|
const statusMap = {
|
|
|
|
|
'故障': { color: '#FF4D4F', bg: '#FFF2F0' },
|
|
|
|
|
'预警': { color: '#FAAD14', bg: '#FFF3E9' },
|
|
|
|
|
'报废': { color: '#FF3E48', bg: '#FFE0E2' },
|
|
|
|
|
'待维修': { color: '#FF8800', bg: '#FFF3E9' },
|
|
|
|
|
'已使用': { color: '#00AAFA', bg: '#DAF3FF' },
|
|
|
|
|
'正常': { color: '#44BB5F', bg: '#D8F7DE' }
|
|
|
|
|
};
|
|
|
|
|
const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' };
|
|
|
|
|
@ -499,7 +502,7 @@ const EvaluationReport = () => {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '最后维护',
|
|
|
|
|
title: '最后维护时间',
|
|
|
|
|
dataIndex: 'lastMaintenance',
|
|
|
|
|
key: 'lastMaintenance',
|
|
|
|
|
width: 150,
|
|
|
|
|
@ -523,11 +526,12 @@ const EvaluationReport = () => {
|
|
|
|
|
<Button type="link" size="small" style={{
|
|
|
|
|
padding: '2px 8px',
|
|
|
|
|
fontSize: 12,
|
|
|
|
|
border: '1px solid #E6E9FB',
|
|
|
|
|
color: '#FF2526',
|
|
|
|
|
border: '1px solid #FFE0E2',
|
|
|
|
|
backgroundColor: 'transparent',
|
|
|
|
|
borderRadius: '4px'
|
|
|
|
|
}}>
|
|
|
|
|
详情
|
|
|
|
|
删除
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
),
|
|
|
|
|
@ -540,122 +544,162 @@ const EvaluationReport = () => {
|
|
|
|
|
key: '1',
|
|
|
|
|
id: '001',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼1层大厅',
|
|
|
|
|
status: '故障',
|
|
|
|
|
deviceName: '干粉灭火器',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '1层大厅',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '2',
|
|
|
|
|
id: '002',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼3层 东区',
|
|
|
|
|
status: '预警',
|
|
|
|
|
deviceId: 'HQ-XF-02-015',
|
|
|
|
|
deviceName: '室内消火栓',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '3层东区',
|
|
|
|
|
status: '已使用',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '3',
|
|
|
|
|
id: '003',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
deviceId: 'HQ-XF-03-007',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '正常',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '4',
|
|
|
|
|
id: '004',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '故障',
|
|
|
|
|
deviceId: 'HQ-XF-03-008',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '待维修',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '5',
|
|
|
|
|
id: '005',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '正常',
|
|
|
|
|
deviceId: 'HQ-XF-01-009',
|
|
|
|
|
deviceName: '干粉灭火器',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '6',
|
|
|
|
|
id: '006',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '预警',
|
|
|
|
|
deviceId: 'HQ-XF-01-010',
|
|
|
|
|
deviceName: '室内消火栓',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '已使用',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '7',
|
|
|
|
|
id: '007',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '故障',
|
|
|
|
|
deviceId: 'HQ-XF-01-011',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '待维修',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '8',
|
|
|
|
|
id: '008',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
deviceId: 'HQ-XF-01-012',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '正常',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '9',
|
|
|
|
|
id: '009',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '预警',
|
|
|
|
|
deviceId: 'HQ-XF-01-013',
|
|
|
|
|
deviceName: '干粉灭火器',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '已使用',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '10',
|
|
|
|
|
id: '010',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '故障',
|
|
|
|
|
deviceId: 'HQ-XF-01-014',
|
|
|
|
|
deviceName: '室内消火栓',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '待维修',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '11',
|
|
|
|
|
id: '011',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
deviceId: 'HQ-XF-01-015',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '正常',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '12',
|
|
|
|
|
id: '012',
|
|
|
|
|
deviceId: 'HQ-XF-01-001',
|
|
|
|
|
deviceName: '消防水泵',
|
|
|
|
|
modelSpec: 'XBD5.0/30-125',
|
|
|
|
|
installLocation: '总部大楼地下一层',
|
|
|
|
|
status: '预警',
|
|
|
|
|
deviceId: 'HQ-XF-01-016',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下一层',
|
|
|
|
|
status: '已使用',
|
|
|
|
|
lastMaintenance: '2025-09-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '13',
|
|
|
|
|
id: '013',
|
|
|
|
|
deviceId: 'HQ-XF-01-017',
|
|
|
|
|
deviceName: '干粉灭火器',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '2层西区',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2024-08-15',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '14',
|
|
|
|
|
id: '014',
|
|
|
|
|
deviceId: 'HQ-XF-02-018',
|
|
|
|
|
deviceName: '室内消火栓',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '4层南区',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2024-07-20',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '15',
|
|
|
|
|
id: '015',
|
|
|
|
|
deviceId: 'HQ-XF-03-019',
|
|
|
|
|
deviceName: '火警报警器',
|
|
|
|
|
modelSpec: '报警设备',
|
|
|
|
|
installLocation: '地下二层',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2024-06-10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: '16',
|
|
|
|
|
id: '016',
|
|
|
|
|
deviceId: 'HQ-XF-01-020',
|
|
|
|
|
deviceName: '干粉灭火器',
|
|
|
|
|
modelSpec: '灭火设备',
|
|
|
|
|
installLocation: '5层北区',
|
|
|
|
|
status: '报废',
|
|
|
|
|
lastMaintenance: '2024-05-05',
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// 初始化数据
|
|
|
|
|
@ -698,9 +742,16 @@ const EvaluationReport = () => {
|
|
|
|
|
}));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 搜索处理
|
|
|
|
|
const handleSearchChange = (e) => {
|
|
|
|
|
setSearchText(e.target.value);
|
|
|
|
|
console.log('搜索:', e.target.value);
|
|
|
|
|
// TODO: 实现搜索逻辑,根据设备名称、编号等筛选数据
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className={styles.Econtainer}>
|
|
|
|
|
{/* 第二个div - 高度39% */}
|
|
|
|
|
{/* 第1个div - 高度39% */}
|
|
|
|
|
<div className={styles.EcontainerMiddle}>
|
|
|
|
|
<div className={styles.sectionContent}>
|
|
|
|
|
<div className={styles.middleBlock1}>
|
|
|
|
|
@ -741,7 +792,7 @@ const EvaluationReport = () => {
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* 第三个div - 占满剩余位置 */}
|
|
|
|
|
{/* 第2个div - 占满剩余位置 */}
|
|
|
|
|
<div className={styles.EcontainerBottom}>
|
|
|
|
|
<div className={styles.sectionContent}>
|
|
|
|
|
<div className={styles.leftBlock}>
|
|
|
|
|
@ -751,14 +802,57 @@ const EvaluationReport = () => {
|
|
|
|
|
<div className={styles.titleIcon}></div>
|
|
|
|
|
<div>近期维护提醒</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceContent}></div>
|
|
|
|
|
<div className={styles.maintenanceContent1}>
|
|
|
|
|
<div className={styles.maintenanceItem}>
|
|
|
|
|
<div className={styles.maintenanceLeft}>
|
|
|
|
|
<div className={styles.maintenanceText1}>SH-MHQ-023-C 干粉灭火器</div>
|
|
|
|
|
<div className={styles.maintenanceText2}>位置: 4楼办公区丨维护类型: 季度检查</div>
|
|
|
|
|
<div className={styles.maintenanceText3}>负责人: 张三</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceRight}>
|
|
|
|
|
<div className={styles.maintenanceStatus}>3天后到期</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceItem}>
|
|
|
|
|
<div className={styles.maintenanceLeft}>
|
|
|
|
|
<div className={styles.maintenanceText1}>SH-XHS-045-D 室内消火栓</div>
|
|
|
|
|
<div className={styles.maintenanceText2}>位置: 2楼东侧走廊丨维护类型: 水压测试</div>
|
|
|
|
|
<div className={styles.maintenanceText3}>负责人: 李四</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceRight2}>
|
|
|
|
|
<div className={styles.maintenanceStatus}>8天后到期</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceSection}>
|
|
|
|
|
<div className={styles.maintenanceTitle}>
|
|
|
|
|
<div className={styles.titleIcon}></div>
|
|
|
|
|
<div>维护任务进度</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.maintenanceContent}></div>
|
|
|
|
|
<div className={styles.maintenanceContent2}>
|
|
|
|
|
{/* 进度条区域 */}
|
|
|
|
|
<div className={styles.progressSection}>
|
|
|
|
|
|
|
|
|
|
<div className={styles.progressLabel}>月度维护计划</div>
|
|
|
|
|
<Progress percent={75} status="active" />
|
|
|
|
|
|
|
|
|
|
<div className={styles.progressLabel}>季度维护计划</div>
|
|
|
|
|
<Progress percent={60} status="active" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div className={styles.progressLabel}>年度维护计划</div>
|
|
|
|
|
<Progress percent={85} status="active" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* 警告提示框 */}
|
|
|
|
|
<div className={styles.warningBox}>
|
|
|
|
|
<ExclamationCircleOutlined className={styles.warningIcon} />
|
|
|
|
|
<span className={styles.warningText}>本月有5项维护任务即将到期</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
@ -768,10 +862,24 @@ const EvaluationReport = () => {
|
|
|
|
|
<div className={styles.tableHeader}>
|
|
|
|
|
<div className={styles.tableTitle}>
|
|
|
|
|
<div className={styles.titleIcon}></div>
|
|
|
|
|
<div>消防设备台账</div>
|
|
|
|
|
<div>消防设施与器材列表</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* 操作按钮 */}
|
|
|
|
|
<div className={styles.tableActions}>
|
|
|
|
|
<div className={styles.leftActions}>
|
|
|
|
|
<Input
|
|
|
|
|
placeholder="搜索设备名称、编号..."
|
|
|
|
|
onChange={handleSearchChange}
|
|
|
|
|
value={searchText}
|
|
|
|
|
style={{ width: 250, fontSize: 12 }}
|
|
|
|
|
allowClear
|
|
|
|
|
suffix={<SearchOutlined />}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div className={styles.rightActions}>
|
|
|
|
|
<button className={styles.actionButton} onClick={handleAddDevice}>
|
|
|
|
|
<span className={styles.buttonIcon}>+</span>
|
|
|
|
|
<span>新增设备</span>
|
|
|
|
|
|