Compare commits
2 Commits
4325ffc2b6
...
6585574116
| Author | SHA1 | Date |
|---|---|---|
|
|
6585574116 | 2 months ago |
|
|
492b4f70b2 | 2 months ago |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 53 KiB |
@ -0,0 +1,10 @@
|
|||||||
|
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1365_19978)">
|
||||||
|
<path d="M13.7011 12.2837C15.0335 12.7693 15.875 13.4844 15.875 14.2812C15.875 15.7475 13.0211 16.9375 9.5 16.9375C5.97888 16.9375 3.125 15.7475 3.125 14.2812C3.125 13.4844 3.9665 12.7704 5.29888 12.2837C5.87687 12.9733 6.56644 13.6788 7.36756 14.4003C7.95273 14.9271 8.71229 15.2185 9.49967 15.2183C10.2871 15.2181 11.0465 14.9263 11.6314 14.3992C12.4304 13.6788 13.1189 12.9754 13.6958 12.2869L13.7011 12.2837ZM9.5 2.0625C12.4336 2.0625 14.8125 4.1875 14.8125 7.375C14.8125 9.194 13.5152 11.2723 10.9206 13.6097C10.5308 13.9613 10.0246 14.1559 9.49967 14.1561C8.97479 14.1563 8.46844 13.962 8.07838 13.6108C5.48588 11.2723 4.1875 9.194 4.1875 7.375C4.1875 4.1875 6.56644 2.0625 9.5 2.0625ZM9.5 5.25C8.93641 5.25 8.39591 5.47388 7.9974 5.8724C7.59888 6.27091 7.375 6.81141 7.375 7.375C7.375 7.93859 7.59888 8.47909 7.9974 8.8776C8.39591 9.27612 8.93641 9.5 9.5 9.5C10.0636 9.5 10.6041 9.27612 11.0026 8.8776C11.4011 8.47909 11.625 7.93859 11.625 7.375C11.625 6.81141 11.4011 6.27091 11.0026 5.8724C10.6041 5.47388 10.0636 5.25 9.5 5.25Z" fill="#2E4CD4"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1365_19978">
|
||||||
|
<rect width="18" height="18" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1365_19988)">
|
||||||
|
<g clip-path="url(#clip1_1365_19988)">
|
||||||
|
<path d="M13.7011 13.2837C15.0335 13.7693 15.875 14.4844 15.875 15.2812C15.875 16.7475 13.0211 17.9375 9.5 17.9375C5.97888 17.9375 3.125 16.7475 3.125 15.2812C3.125 14.4844 3.9665 13.7704 5.29888 13.2837C5.87687 13.9733 6.56644 14.6788 7.36756 15.4003C7.95273 15.9271 8.71229 16.2185 9.49967 16.2183C10.2871 16.2181 11.0465 15.9263 11.6314 15.3992C12.4304 14.6788 13.1189 13.9754 13.6958 13.2869L13.7011 13.2837ZM9.5 3.0625C12.4336 3.0625 14.8125 5.1875 14.8125 8.375C14.8125 10.194 13.5152 12.2723 10.9206 14.6097C10.5308 14.9613 10.0246 15.1559 9.49967 15.1561C8.97479 15.1563 8.46844 14.962 8.07838 14.6108C5.48588 12.2723 4.1875 10.194 4.1875 8.375C4.1875 5.1875 6.56644 3.0625 9.5 3.0625ZM9.5 6.25C8.93641 6.25 8.39591 6.47388 7.9974 6.8724C7.59888 7.27091 7.375 7.81141 7.375 8.375C7.375 8.93859 7.59888 9.47909 7.9974 9.8776C8.39591 10.2761 8.93641 10.5 9.5 10.5C10.0636 10.5 10.6041 10.2761 11.0026 9.8776C11.4011 9.47909 11.625 8.93859 11.625 8.375C11.625 7.81141 11.4011 7.27091 11.0026 6.8724C10.6041 6.47388 10.0636 6.25 9.5 6.25Z" fill="#C5C9D2"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1365_19988">
|
||||||
|
<rect width="18" height="18" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip1_1365_19988">
|
||||||
|
<rect width="18" height="18" fill="white" transform="translate(0 1)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1365_20013)">
|
||||||
|
<mask id="mask0_1365_20013" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="1" width="18" height="16">
|
||||||
|
<path d="M17.0984 1.80078H0.898438V16.2008H17.0984V1.80078Z" fill="white"/>
|
||||||
|
</mask>
|
||||||
|
<g mask="url(#mask0_1365_20013)">
|
||||||
|
<path d="M15.4755 4.50146H9.8099L8.67288 2.61098C8.35219 2.07085 7.86628 1.80078 7.29292 1.80078H2.52135C1.62729 1.80078 0.898438 2.61098 0.898438 3.60483V14.4075C0.898438 15.4014 1.62729 16.2116 2.52135 16.2116H15.4755C16.3696 16.2116 17.0984 15.4014 17.0984 14.4075V6.30551C17.0984 5.31166 16.3696 4.50146 15.4755 4.50146ZM12.1034 12.7115H5.8838C5.45621 12.7115 5.10636 12.3226 5.10636 11.8473C5.10636 11.372 5.45621 10.9831 5.8838 10.9831H12.1034C12.531 10.9831 12.8808 11.372 12.8808 11.8473C12.8808 12.3226 12.5407 12.7115 12.1034 12.7115Z" fill="#C5C9D2"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1365_20013">
|
||||||
|
<rect width="18" height="18" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.9347 9.53008V10.2426C13.9241 10.2773 13.9111 10.3119 13.904 10.3473C13.8312 10.7239 13.7902 11.1103 13.6803 11.4758C13.3545 12.5542 12.744 13.453 11.8882 14.1867C11.2281 14.7531 10.4853 15.1612 9.63609 15.362C9.35687 15.4282 9.07055 15.4672 8.78733 15.5188H8.07523C8.04055 15.5081 8.00507 15.492 7.96969 15.4896C7.21773 15.4428 6.50523 15.247 5.83687 14.9055C4.57335 14.262 3.66195 13.3037 3.24569 11.9252C3.15703 11.6306 3.12007 11.3217 3.05859 11.0193V10.3395C3.08539 10.1724 3.10859 10.0039 3.14015 9.83696C3.27483 9.1075 3.59899 8.46156 4.02827 7.86524C4.43319 7.30398 4.86327 6.76048 5.24727 6.185C5.66241 5.56078 5.86327 4.8679 5.74555 4.1082C5.72235 3.95812 5.70063 3.80806 5.67781 3.65876C5.69313 3.65484 5.70851 3.65172 5.72391 3.64734C6.65063 4.6186 6.80149 5.81086 6.66913 7.09922C6.70305 7.06298 6.73141 7.03774 6.75305 7.0086C7.53961 5.94478 7.87749 4.76954 7.62109 3.45318C7.45813 2.61584 7.10555 1.8631 6.52227 1.23732C6.26897 0.96634 5.96255 0.74462 5.68013 0.5H5.97161C5.99561 0.50984 6.01811 0.5268 6.04247 0.52914C6.55529 0.5732 7.03701 0.73156 7.49591 0.95414C8.54545 1.4622 9.39623 2.21328 10.108 3.12946C11.1541 4.47758 11.8343 5.97312 11.969 7.69508C12.0206 8.35242 11.9536 8.99126 11.7784 9.62148C11.7122 9.86016 11.6188 10.0909 11.5334 10.3394C11.8728 10.1949 12.1309 9.97398 12.3302 9.68764C12.9245 8.83178 13.0907 7.8774 12.956 6.82232C12.9998 6.8731 13.0222 6.89318 13.0375 6.91834C13.3955 7.48396 13.6634 8.08732 13.8032 8.7431C13.8587 9.00266 13.891 9.2682 13.9347 9.53008ZM8.33553 8.27524C8.32217 8.2847 8.30755 8.29454 8.29381 8.304C8.27529 8.564 8.26147 8.82432 8.23631 9.08424C8.19927 9.48088 8.10435 9.8633 7.91881 10.219C7.69193 10.6546 7.31271 10.9256 6.89239 11.141C6.43911 11.3749 6.15357 11.709 6.11653 12.2364C6.07795 12.7787 6.24099 13.2343 6.67817 13.5676C7.08779 13.8795 7.56631 13.9812 8.07357 13.9643C8.88341 13.9379 9.48677 13.553 9.72865 12.7425C9.90233 12.1607 9.87397 11.575 9.75779 10.9894C9.59903 10.1867 9.30833 9.4384 8.81091 8.78262C8.67115 8.59938 8.49467 8.44382 8.33553 8.27524Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
@ -0,0 +1,56 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { Card, Row, Col, Statistic, Progress, Button, Space } from 'antd';
|
||||||
|
import styles from './FireKeynoteArea.less';
|
||||||
|
import KeypartsBasicInformation from './components/KeypartsBasicInformation'; //重点部位基础信息管理
|
||||||
|
import EmergencyPlanAssociation from './components/EmergencyPlanAssociation'; //应急预案关联管理
|
||||||
|
import EmergencyDrillRecordAssociation from './components/EmergencyDrillRecordAssociation'; //应急演练记录关联管理
|
||||||
|
|
||||||
|
const FireKeynoteArea = () => {
|
||||||
|
const [activeModule, setActiveModule] = useState('1');
|
||||||
|
|
||||||
|
const handleModuleClick = (module) => {
|
||||||
|
setActiveModule(module)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const renderModule = () => {
|
||||||
|
switch (activeModule) {
|
||||||
|
case '1':
|
||||||
|
return <KeypartsBasicInformation />;
|
||||||
|
case '2':
|
||||||
|
return <EmergencyPlanAssociation />;
|
||||||
|
case '3':
|
||||||
|
return <EmergencyDrillRecordAssociation />;
|
||||||
|
default:
|
||||||
|
return <KeypartsBasicInformation />;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.container}>
|
||||||
|
<div className={styles.TopButton}>
|
||||||
|
<Button
|
||||||
|
className={`${styles.TopButtonItem} ${activeModule === "1" ? styles.active : ""}`}
|
||||||
|
onClick={() => handleModuleClick("1")}
|
||||||
|
>重点部位基础信息管理
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
className={`${styles.TopButtonItem} ${activeModule === "2" ? styles.active : ""}`}
|
||||||
|
onClick={() => handleModuleClick("2")}
|
||||||
|
>应急预案关联管理
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
className={`${styles.TopButtonItem} ${activeModule === "3" ? styles.active : ""}`}
|
||||||
|
onClick={() => handleModuleClick("3")}
|
||||||
|
>应急演练记录关联管理
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div className={styles.content}>
|
||||||
|
{renderModule()}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FireKeynoteArea;
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
.container {
|
||||||
|
background-color: transparent;
|
||||||
|
width: 100%;
|
||||||
|
height: 89vh;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.TopButton {
|
||||||
|
background-color: white;
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px 30px;
|
||||||
|
display: flex;
|
||||||
|
gap: 24px;
|
||||||
|
margin-left: 6px;
|
||||||
|
|
||||||
|
.TopButtonItem {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #333333 !important;
|
||||||
|
font-family: 'PingFang SC', sans-serif !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
font-size: 14px !important;
|
||||||
|
line-height: 100% !important;
|
||||||
|
border-radius: 8px !important;
|
||||||
|
padding: 6px 10px !important;
|
||||||
|
height: auto !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
position: relative !important;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #333333 !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
color: #2E4CD4 !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: #2E4CD4 !important;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: -10px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 4px;
|
||||||
|
background-color: #2E4CD4;
|
||||||
|
border-radius: 0;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
// ======== 内容区域样式 ========
|
||||||
|
flex: 1; // ======== 占据剩余空间 ========
|
||||||
|
overflow-y: auto; // ======== 允许垂直滚动 ========
|
||||||
|
padding: 0; // ======== 无内边距 ========
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,429 @@
|
|||||||
|
|
||||||
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
|
import { Button, Input, Select, Tree } from 'antd';
|
||||||
|
import { ExportOutlined, PlusOutlined } from '@ant-design/icons';
|
||||||
|
import StandardTable from '@/components/StandardTable';
|
||||||
|
import styles from './KeypartsBasicInformation.less';
|
||||||
|
import eqicon1 from '@/assets/business_firekeynotearea/eqicon1.png';
|
||||||
|
import eqicon2 from '@/assets/business_firekeynotearea/eqicon2.png';
|
||||||
|
import eqicon3 from '@/assets/business_firekeynotearea/eqicon3.png';
|
||||||
|
import eqicon4 from '@/assets/business_firekeynotearea/eqicon4.png';
|
||||||
|
import eqicon5 from '@/assets/business_firekeynotearea/eqicon5.png';
|
||||||
|
|
||||||
|
const KeypartsBasicInformation = () => {
|
||||||
|
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
|
||||||
|
const [selectedRows, setSelectedRows] = useState([]);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const [dataSource, setDataSource] = useState([]);
|
||||||
|
const [pagination, setPagination] = useState({
|
||||||
|
current: 1,
|
||||||
|
pageSize: 5,
|
||||||
|
total: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// 表格列定义
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: '编号',
|
||||||
|
dataIndex: 'id',
|
||||||
|
key: 'id',
|
||||||
|
width: 60,
|
||||||
|
fixed: 'left',
|
||||||
|
render: (text, record, index) => {
|
||||||
|
const page = pagination.current || 1;
|
||||||
|
const pageSize = pagination.pageSize || 5;
|
||||||
|
const number = (page - 1) * pageSize + index + 1;
|
||||||
|
return `0${number}`.slice(-2);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '部位名称',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所属建筑',
|
||||||
|
dataIndex: 'building',
|
||||||
|
key: 'building',
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '类型',
|
||||||
|
dataIndex: 'type',
|
||||||
|
key: 'type',
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '标签',
|
||||||
|
dataIndex: 'tags',
|
||||||
|
key: 'tags',
|
||||||
|
width: 200,
|
||||||
|
render: (tags) => (
|
||||||
|
<>
|
||||||
|
{tags.map((tag, idx) => {
|
||||||
|
const tagColorMap = {
|
||||||
|
'电气风险': { color: '#F9EBBC', fontColor: '#333333' },
|
||||||
|
'重要设备': { color: '#CDDFFF', fontColor: '#333333' },
|
||||||
|
'易燃易爆': { color: '#F8C6C6', fontColor: '#333333' },
|
||||||
|
'人员密集': { color: '#B6E1F6', fontColor: '#333333' },
|
||||||
|
'关键设施': { color: '#FDDBB5', fontColor: '#333333' },
|
||||||
|
'高风险区': { color: '#F8C6C6', fontColor: '#333333' },
|
||||||
|
};
|
||||||
|
const style = tagColorMap[tag] || { color: '#eee', fontColor: '#666' };
|
||||||
|
return (
|
||||||
|
<span key={tag + idx} style={{
|
||||||
|
background: style.color,
|
||||||
|
color: style.fontColor,
|
||||||
|
borderRadius: 4,
|
||||||
|
padding: '2px 8px',
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: 600,
|
||||||
|
marginRight: 6,
|
||||||
|
display: 'inline-block',
|
||||||
|
minWidth: 40,
|
||||||
|
textAlign: 'center',
|
||||||
|
marginBottom: 2
|
||||||
|
}}>{tag}</span>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态',
|
||||||
|
dataIndex: 'status',
|
||||||
|
key: 'status',
|
||||||
|
width: 80,
|
||||||
|
render: (text) => {
|
||||||
|
const statusMap = {
|
||||||
|
'故障': { color: '#FF3E48', bg: '#FFE0E2' },
|
||||||
|
'预警': { color: '#FF8800', bg: '#FFF3E9' },
|
||||||
|
'正常': { color: '#44BB5F', bg: '#D8F7DE' }
|
||||||
|
};
|
||||||
|
const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' };
|
||||||
|
return (
|
||||||
|
<span style={{
|
||||||
|
color: status.color,
|
||||||
|
backgroundColor: status.bg,
|
||||||
|
padding: '4px 8px',
|
||||||
|
borderRadius: '4px',
|
||||||
|
fontSize: '12px',
|
||||||
|
fontWeight: 500
|
||||||
|
}}>
|
||||||
|
{text}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最后更新',
|
||||||
|
dataIndex: 'lastUpdate',
|
||||||
|
key: 'lastUpdate',
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
key: 'action',
|
||||||
|
width: 100,
|
||||||
|
align: 'center',
|
||||||
|
fixed: 'right',
|
||||||
|
render: (_, record) => (
|
||||||
|
<>
|
||||||
|
<Button type="link" size="small" style={{ fontSize: '12px', color: '#2E4CD4', fontWeight: 500, padding: 0, marginRight: 12 }}>编辑</Button>
|
||||||
|
<Button type="link" size="small" style={{ fontSize: '12px', color: '#FF2526', fontWeight: 500, padding: 0 }}>删除</Button>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 模拟数据
|
||||||
|
const mockData = [
|
||||||
|
{
|
||||||
|
key: '1',
|
||||||
|
id: '001',
|
||||||
|
name: '1号办公楼',
|
||||||
|
building: '1号办公楼',
|
||||||
|
type: '配电室',
|
||||||
|
tags: ['电气风险', '重要设备'],
|
||||||
|
status: '故障',
|
||||||
|
lastUpdate: '2025-09-10',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '2',
|
||||||
|
id: '002',
|
||||||
|
name: 'B区厨房',
|
||||||
|
building: '员工餐厅',
|
||||||
|
type: '厨房',
|
||||||
|
tags: ['易燃易爆', '人员密集'],
|
||||||
|
status: '预警',
|
||||||
|
lastUpdate: '2025-09-10',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '3',
|
||||||
|
id: '003',
|
||||||
|
name: '数据中心机房',
|
||||||
|
building: '信息中心',
|
||||||
|
type: '数据机房',
|
||||||
|
tags: ['关键设施', '重要设备'],
|
||||||
|
status: '正常',
|
||||||
|
lastUpdate: '2025-09-10',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '4',
|
||||||
|
id: '004',
|
||||||
|
name: '化学品仓库',
|
||||||
|
building: '实验楼',
|
||||||
|
type: '仓库',
|
||||||
|
tags: ['易燃易爆', '高风险区'],
|
||||||
|
status: '正常',
|
||||||
|
lastUpdate: '2025-09-10',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 初始化数据
|
||||||
|
useEffect(() => {
|
||||||
|
setPagination(prev => ({ ...prev, total: mockData.length }));
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// 根据分页获取当前页数据
|
||||||
|
const getCurrentPageData = () => {
|
||||||
|
const { current, pageSize } = pagination;
|
||||||
|
const startIndex = (current - 1) * pageSize;
|
||||||
|
const endIndex = startIndex + pageSize;
|
||||||
|
return mockData.slice(startIndex, endIndex);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表格选择变化
|
||||||
|
const onSelectChange = (newSelectedRowKeys, newSelectedRows) => {
|
||||||
|
setSelectedRowKeys(newSelectedRowKeys);
|
||||||
|
setSelectedRows(newSelectedRows);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 新增设备按钮点击事件
|
||||||
|
const handleAddDevice = () => {
|
||||||
|
console.log('新增设备');
|
||||||
|
// TODO: 实现新增设备逻辑
|
||||||
|
};
|
||||||
|
|
||||||
|
// 导出数据按钮点击事件
|
||||||
|
const handleExportData = () => {
|
||||||
|
console.log('导出数据');
|
||||||
|
// TODO: 实现导出数据逻辑
|
||||||
|
};
|
||||||
|
|
||||||
|
// 分页变化处理
|
||||||
|
const handleTableChange = (pagination) => {
|
||||||
|
setPagination(prev => ({
|
||||||
|
...prev,
|
||||||
|
current: pagination.current,
|
||||||
|
pageSize: pagination.pageSize,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.Rcontainer}>
|
||||||
|
{/* 第一个div - 高度20% */}
|
||||||
|
<div className={styles.RcontainerTop}>
|
||||||
|
<div className={styles.sectionContent}>
|
||||||
|
<div className={styles.blocksContainer}>
|
||||||
|
{/* 块1 */}
|
||||||
|
<div className={styles.blockItem + ' ' + styles.bgBlock1}>
|
||||||
|
<div className={styles.blockLeft}>
|
||||||
|
<div className={styles.blockTitle}>总重点部位数</div>
|
||||||
|
<div className={styles.blockNumber}>1820</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.blockRight}>
|
||||||
|
<img src={eqicon1} alt="总重点部位数" className={styles.blockImage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 块2 */}
|
||||||
|
<div className={styles.blockItem + ' ' + styles.bgBlock2}>
|
||||||
|
<div className={styles.blockLeft}>
|
||||||
|
<div className={styles.blockTitle}>易燃易爆场所</div>
|
||||||
|
<div className={styles.blockNumber}>386</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.blockRight}>
|
||||||
|
<img src={eqicon2} alt="易燃易爆场所" className={styles.blockImage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 块3 */}
|
||||||
|
<div className={styles.blockItem + ' ' + styles.bgBlock3}>
|
||||||
|
<div className={styles.blockLeft}>
|
||||||
|
<div className={styles.blockTitle}>人员密集区域</div>
|
||||||
|
<div className={styles.blockNumber}>269</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.blockRight}>
|
||||||
|
<img src={eqicon3} alt="人员密集区域" className={styles.blockImage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 块4 */}
|
||||||
|
<div className={styles.blockItem + ' ' + styles.bgBlock4}>
|
||||||
|
<div className={styles.blockLeft}>
|
||||||
|
<div className={styles.blockTitle}>重要设备房</div>
|
||||||
|
<div className={styles.blockNumber}>412</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.blockRight}>
|
||||||
|
<img src={eqicon4} alt="重要设备房" className={styles.blockImage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 块5 */}
|
||||||
|
<div className={styles.blockItem + ' ' + styles.bgBlock5}>
|
||||||
|
<div className={styles.blockLeft}>
|
||||||
|
<div className={styles.blockTitle}>物资储存区</div>
|
||||||
|
<div className={styles.blockNumber}>290</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.blockRight}>
|
||||||
|
<img src={eqicon5} alt="物资储存区" className={styles.blockImage} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 第二个div - 占满剩余位置 */}
|
||||||
|
<div className={styles.RcontainerBottom}>
|
||||||
|
<div className={styles.sectionContent}>
|
||||||
|
<div className={styles.leftBlock}>
|
||||||
|
|
||||||
|
{/* 表格头部 */}
|
||||||
|
<div className={styles.tableHeader}>
|
||||||
|
<div className={styles.tableTitle}>
|
||||||
|
<div className={styles.titleIcon}></div>
|
||||||
|
<div>消防设施与器材列表</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 搜索与操作栏 */}
|
||||||
|
<div className={styles.searchWrap}>
|
||||||
|
<div className={styles.searchInputWrap}>
|
||||||
|
{/* 搜索输入框 */}
|
||||||
|
<Input.Search
|
||||||
|
className={styles.searchInput}
|
||||||
|
style={{ width: 200 }}
|
||||||
|
placeholder="搜索重点部位..."
|
||||||
|
allowClear
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className={styles.searchBarWrap}>
|
||||||
|
{/* 下拉选择 */}
|
||||||
|
<Select
|
||||||
|
className={styles.selectAll}
|
||||||
|
defaultValue="全部"
|
||||||
|
style={{ width: 100 }}
|
||||||
|
options={[{ value: '全部', label: '全部' }]}
|
||||||
|
/>
|
||||||
|
{/* 新增按钮 */}
|
||||||
|
<Button className={styles.addBtn} type="primary">
|
||||||
|
<PlusOutlined /> 新增部位
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 表格内容 */}
|
||||||
|
<div className={styles.tableContainer}>
|
||||||
|
<StandardTable
|
||||||
|
columns={columns}
|
||||||
|
data={{
|
||||||
|
list: getCurrentPageData(),
|
||||||
|
pagination: pagination
|
||||||
|
}}
|
||||||
|
loading={loading}
|
||||||
|
selectionType="checkbox"
|
||||||
|
onSelectRow={onSelectChange}
|
||||||
|
onChange={handleTableChange}
|
||||||
|
pagination={{
|
||||||
|
...pagination,
|
||||||
|
showSizeChanger: false,
|
||||||
|
showQuickJumper: true,
|
||||||
|
showTotal: (total, range) =>
|
||||||
|
`共 ${total} 条`,
|
||||||
|
}}
|
||||||
|
scroll={{ x: "max-content" }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className={styles.rightBlock}>
|
||||||
|
{/* 第一行块 - 蓝色方块加标题 */}
|
||||||
|
<div className={styles.leftBlockTitle}>
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
||||||
|
<div className={styles.titleIcon}></div>
|
||||||
|
<div>分类标签管理</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Button className={styles.addBtn} type="primary">
|
||||||
|
<PlusOutlined /> 新增标签
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/* 树形结构 */}
|
||||||
|
<div className={styles.treeWrap}>
|
||||||
|
<Input.Search
|
||||||
|
className={styles.treeSearchInput}
|
||||||
|
placeholder="搜索标签..."
|
||||||
|
allowClear
|
||||||
|
style={{ marginBottom: 12 }}
|
||||||
|
/>
|
||||||
|
<Tree
|
||||||
|
className={styles.customTree}
|
||||||
|
showIcon
|
||||||
|
defaultExpandAll
|
||||||
|
treeData={[
|
||||||
|
{
|
||||||
|
title: '易燃易爆场所',
|
||||||
|
key: '0-0',
|
||||||
|
icon: <span className={styles.folderIcon} />,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
title: <span style={{ color: '#2E4CD4', fontWeight: 500 }}>危险化学品储存区</span>,
|
||||||
|
key: '0-0-0',
|
||||||
|
icon: <span className={styles.childIconSelected} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: <span>危险化学品储存区</span>,
|
||||||
|
key: '0-0-1',
|
||||||
|
icon: <span className={styles.childIcon} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: <span>危险化学品储存区</span>,
|
||||||
|
key: '0-0-2',
|
||||||
|
icon: <span className={styles.childIcon} />,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '人员密集区域',
|
||||||
|
key: '0-1',
|
||||||
|
icon: <span className={styles.folderIcon} />,
|
||||||
|
children: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '重要设备房',
|
||||||
|
key: '0-2',
|
||||||
|
icon: <span className={styles.folderIcon} />,
|
||||||
|
children: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '物资储存区',
|
||||||
|
key: '0-3',
|
||||||
|
icon: <span className={styles.folderIcon} />,
|
||||||
|
children: [],
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default KeypartsBasicInformation;
|
||||||