You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2592 lines
124 KiB
JavaScript

import { Button, Col, Drawer, Form, Input, Menu, Pagination, Row, Select, Space, Switch, Table, Tag, Tree } from "antd";
import { useEffect, useRef, useState } from "react";
import styles from './InspectionTaskPlan.less'
import { Title } from "@/pages/inspectiontasks/InspectionTasks";
import btnImg1 from '@/assets/img/planBtn1.png'
import btnImg2 from '@/assets/img/planBtn2.png'
import btnImg3 from '@/assets/img/planBtn3.png'
import menuInactiveBg1 from '@/assets/img/d368476fbf3b6a5e808b0274d96e1809d945da24.png' // 温度异常检测未激活背景图
import menuInactiveBg2 from '@/assets/img/3de08b72a292633bddad28950ba6c6d7fa084a23.png' // 温湿度检测未激活背景图
import menuInactiveBg3 from '@/assets/img/90501c706560228b7b68e4c8f4c9924c490578ad.png' // 跑冒滴漏检测未激活背景图
import menuInactiveBg4 from '@/assets/img/a4a0367e2a7e14611cc75be2e1a2d51127a4d390.png' // 仪器仪表采集未激活背景图
import menuInactiveBg5 from '@/assets/img/f729103541513c2e864c1f8a710db1d80125f3e7.png' // 环境监测未激活背景图
import activeBgImage from '@/assets/img/de55b2b9c8dab34462ff1b044a5a5c9668b11aa4.png'
import thermalImage from '@/assets/img/03ba6681098742e33bea38c40e3c23f16847dc1f.png'
import newBgImage from '@/assets/img/a858e701a4fde498b9c3cc56ab2b62693055dee1.png'
import paibanBg from '@/assets/img/paiban.png'
import inspectionBg from '@/assets/img/Rectangle 34624130.svg'
import taskPlanBg from '@/assets/img/image 674 1.svg'
import {
DeleteOutlined,
DownOutlined,
EditOutlined,
ExportOutlined,
EyeOutlined,
PlusOutlined,
RedoOutlined
} from "@ant-design/icons";
const { Search } = Input
export const MenuBg = (props) => {
return (
<div className={styles["parallelogram-container"]}>
<span className={styles["text-content"]}>{props.text}</span>
<span className={styles["text-content"]} style={{ margin: '0' }}>{props.icon}</span>
</div>
)
}
//抽屉
const Drawers = (props) => {
return (
<Drawer
title='详情'
closable={{ 'aria-label': 'Close Button' }}
onClose={props.onClose}
open={props.open}
width={500}
className={styles['customDrawer']}
>
<div style={{ padding: '20px' }}>
<Title title={'基本信息'} ></Title>
<Row style={{ margin: '20px 0' }}>
<Col span={12}>
<Row style={{ marginBottom: '20px' }}>
<Col span={8} className={styles['font1']}>所属班次</Col>
<Col span={16}>{props.row?.shifts}</Col>
</Row>
<Row>
<Col span={8} className={styles['font1']}>路线名称</Col>
<Col span={16}>{props.row?.name}</Col>
</Row>
</Col>
<Col span={12}>
<Row style={{ marginBottom: '20px' }}>
<Col span={8} className={styles['font1']}>所属专业</Col>
<Col span={16}>{props.row?.affiliation}</Col>
</Row>
<Row>
<Col span={8} className={styles['font1']}>创建时间</Col>
<Col span={16}>{props.row?.time}</Col>
</Row>
</Col>
</Row>
<Title title={'巡检设备范围'}></Title>
<div className={styles['box']}>
<Tag className={styles['tag']} color="magenta">发电机</Tag>
<Tag className={styles['tag']} color="red">中水处区</Tag>
<Tag className={styles['tag']} color="volcano">1#增压风机变频器</Tag>
<Tag className={styles['tag']} color="orange">1#炉右上炉膛温度</Tag>
<Tag className={styles['tag']} color="gold">1#冷干机</Tag>
</div>
<Title title={'巡视项详情'}></Title>
<Row style={{ margin: '20px 0 10px 0' }}>
<Tag className={styles['tag']} color="magenta">发电机</Tag>
</Row>
<Row style={{ margin: '0 0 20px 0' }}>
<ul className={styles['ul']}>
<li>外观检查有无破损油污 </li>
<li>温度检测轴承温度70定子温度105</li>
</ul>
</Row>
<Row style={{ margin: '20px 0 10px 0' }}>
<Tag className={styles['tag']} color="volcano">1#增压风机变频器</Tag>
</Row>
<Row style={{ margin: '0 0 20px 0' }}>
<ul className={styles['ul']}>
<li>运行指示灯是否正常亮起 </li>
<li>散热风扇是否正常转动</li>
<li>输出电压380V±5%</li>
</ul>
</Row>
</div>
</Drawer>
)
}
// End of removed code
// 员工表格组件
// </a>
// </Space>
// ),
// ]
// // 选择框配置
// const rowSelection = {
// selectedRowKeys,
// onChange: (newSelectedRowKeys) => {
// setSelectedRowKeys(newSelectedRowKeys);
// },
// };
// const fetchTableData = () => {
// try {
// setLoading(true)
// const mockData = [
// {
// key: '1',
// groupId: 'GH001',
// groupName: '输油运行一班',
// groupHeader: '钱佳仪',
// num: '8',
// position: '油罐储存区 A、B 区',
// phone: '189 7731 3118',
// status: true,
// createTime: '2025-09-13',
// remarks: '负责日常输油设备巡检与操作',
// },
// {
// key: '2',
// groupId: 'GH002',
// groupName: '消防应急班组',
// groupHeader: '何颖颀',
// num: '6',
// position: '全厂区消防系统',
// phone: '156 9747 2741',
// status: true,
// createTime: '2025-09-12',
// remarks: '含2 名持证消防设施操作员',
// },
// {
// key: '3',
// groupId: 'GH003',
// groupName: '设备维保班组',
// groupHeader: '周遵武',
// num: '10',
// position: '泵房、工艺设备区',
// phone: '151 4456 8916',
// status: true,
// createTime: '2025-08-16',
// remarks: '擅长油泵、输油管道维护',
// },
// {
// key: '4',
// groupId: 'GH004',
// groupName: '装卸作业班组',
// groupHeader: '钱博西',
// num: '7',
// position: '油品装卸区站台',
// phone: '181 8511 3486',
// status: true,
// createTime: '2025-08-15',
// remarks: '专注装卸作业安全监护',
// },
// {
// key: '5',
// groupId: 'GH005',
// groupName: '工艺调和班组',
// groupHeader: '周缙绅',
// num: '9',
// position: '调和工艺区 1-3 号罐',
// phone: '183 3220 4078',
// status: true,
// createTime: '2025-07-20',
// remarks: '负责油品调和工艺参数管控',
// },
// {
// key: '6',
// groupId: 'GH006',
// groupName: '临时支援班组',
// groupHeader: '周江',
// num: '4',
// position: '全厂区(机动)',
// phone: '187 5703 5618',
// status: false,
// createTime: '2025-07-17',
// remarks: '项目结束,暂停用待复用',
// }
// ]
// setDataSource(mockData)
// setTotal(85)
// } catch (error) {
// console.error(error)
// } finally {
// setLoading(false)
// }
// }
// // 初始加载和分页变化时重新获取数据
// useEffect(() => {
// fetchTableData();
// }, [currentPage, pageSize]);
// // 处理查看详情
// const handleView = (record) => {
// // 预留查看详情逻辑
// console.log('查看详情:', record);
// };
// // 处理编辑
// const handleEdit = (record) => {
// // 预留编辑逻辑
// console.log('编辑:', record);
// };
// // 处理删除
// const handleDelete = (record) => {
// // 预留删除逻辑
// console.log('删除:', record);
// };
// return (
// <Table
// rowSelection={{
// type: 'checkbox',
// ...rowSelection,
// }}
// columns={columns}
// dataSource={dataSource}
// loading={loading}
// pagination={false} // 关闭表格自带分页,使用外部分页组件
// rowKey="key"
// style={{ width: '100%', }}
// />
// )
// }
const TimeTable = () => {
//状态管理
const [dataSource, setDataSource] = useState([]) //表格数据
const [loading, setLoading] = useState(false) //加载状态
const [total, setTotal] = useState(0)
const [currentPage, setCurrentPage] = useState(1)
const [pageSize, setPageSize] = useState(10)
const [selectedRowKeys, setSelectedRowKeys] = useState([])//选中行的id
const [open, setOpen] = useState(false)
const [row, setRow] = useState(null)
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
align: 'center',
render: (text, record, index) => (index + 1) + (currentPage - 1) * pageSize
},
{
title: '线路ID',
dataIndex: 'id',
key: 'id',
align: 'center',
},
{
title: '线路名称',
dataIndex: 'name',
key: 'name',
align: 'center',
},
{
title: '所属班次',
dataIndex: 'shifts',
key: 'shifts',
align: 'center',
},
{
title: '所属专业',
dataIndex: 'affiliation',
key: 'affiliation',
align: 'center',
},
{
title: '涉及区域',
dataIndex: 'position',
key: 'position',
align: 'center',
},
{
title: '设备数量',
dataIndex: 'deviceNum',
key: 'deviceNum',
align: 'center',
},
{
title: '巡视项数量',
dataIndex: 'lookNum',
key: 'lookNum',
align: 'center',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
align: 'center',
render: (status) => (
<Switch checked={status} />
)
},
{
title: '操作',
key: 'action',
align: 'center',
render: (_, record) => (
<Space size="small">
<a onClick={() => handleView(record)} style={{ color: '#2C9E9D' }}>
<EyeOutlined /> 查看详情
</a>
</Space>
),
},
]
const fetchTableData = () => {
try {
setLoading(true)
const mockData = [
{
key: '1',
id: 'GH001',
name: '白班电气巡检线 1',
shifts: '白班',
affiliation: '电气专业',
position: '发电机、中水处区',
deviceNum: '22',
lookNum: 3,
status: 'true',
time: '2025-03-31'
},
{
key: '2',
id: 'GH001',
name: '白班电气巡检线 1',
shifts: '白班',
affiliation: '电气专业',
position: '发电机、中水处区',
deviceNum: '22',
lookNum: 3,
status: 'true',
time: '2025-05-31'
},
]
setDataSource(mockData)
setTotal(85)
} catch (error) {
console.error(error)
} finally {
setLoading(false)
}
}
// 初始加载和分页变化时重新获取数据
useEffect(() => {
fetchTableData();
}, [currentPage, pageSize]);
// 处理查看详情
const handleView = (record) => {
console.log('查看详情:', record);
setRow(record)
setOpen(true)
};
return (
<>
<Table
columns={columns}
dataSource={dataSource}
loading={loading}
pagination={false} // 关闭表格自带分页,使用外部分页组件
rowKey="key"
style={{ width: '100%', }}
/>
<Drawers
open={open}
onClose={() => setOpen(false)}
row={row}
>
</Drawers>
</>
)
}
const StandardTable = () => {
// 状态管理
const [dataSource, setDataSource] = useState([]); // 表格数据
const [loading, setLoading] = useState(false); // 加载状态
const [total, setTotal] = useState(0); // 总条数
const [currentPage, setCurrentPage] = useState(1); // 当前页码
const [pageSize, setPageSize] = useState(10); // 每页条数
const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 选中的行ID
// 表格列配置
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
align: 'center',
render: (text, record, index) => (index + 1) + (currentPage - 1) * pageSize
},
{
title: '方案名称',
dataIndex: 'name',
key: 'name',
align: 'center',
},
{
title: '版本',
dataIndex: 'version',
key: 'version',
align: 'center',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
align: 'center',
render: (status) => (
<Switch checked={status} />
)
},
{
title: '最后更新时间',
dataIndex: 'time',
key: 'time',
align: 'center',
},
{
title: '操作',
key: 'action',
align: 'center',
render: (_, record) => (
<Space size="small">
<a onClick={() => handleView(record)} style={{ color: '#2C9E9D' }}>
<EyeOutlined /> 查看详情
</a>
<a onClick={() => handleEdit(record)} style={{ color: '#2C9E9D' }}>
<EditOutlined /> 编辑
</a>
<a onClick={() => handleDelete(record)} style={{ color: '#ff4d4f' }}>
<DeleteOutlined /> 删除
</a>
</Space>
),
},
];
// 选择框配置
const rowSelection = {
selectedRowKeys,
onChange: (newSelectedRowKeys) => {
setSelectedRowKeys(newSelectedRowKeys);
},
};
// 获取表格数据
const fetchTableData = async () => {
try {
setLoading(true);
// 这里是预留的接口调用位置
// 实际项目中替换为真实接口请求
// const response = await api.getEmployeeList({
// page: currentPage,
// pageSize: pageSize
// });
// 模拟数据 - 实际项目中删除
const mockData = [
{
key: '1',
name: '输油设备巡检标准',
version: 'V2.0',
status: true,
time: '2025-09-13'
},
{
key: '2',
name: '消防系统巡检标准',
version: 'V1.1',
status: true,
time: '2025-09-13'
},
{
key: '3',
name: '电气设备巡检标准',
version: 'V1.0',
status: true,
time: '2025-09-13'
},
{
key: '4',
name: '输油设备巡检标准',
version: 'V2.0',
status: true,
time: '2025-09-13'
},
{
key: '5',
name: '消防系统巡检标准',
version: 'V1.1',
status: true,
time: '2025-09-13'
},
{
key: '6',
name: '电气设备巡检标准',
version: 'V1.0',
status: true,
time: '2025-09-13'
},
];
// 模拟接口返回 - 实际项目中使用接口数据
setDataSource(mockData);
setTotal(85); // 总条数,实际项目中从接口获取
} catch (error) {
console.error('获取员工数据失败:', error);
} finally {
setLoading(false);
}
};
// 初始加载和分页变化时重新获取数据
useEffect(() => {
fetchTableData();
}, [currentPage, pageSize]);
// 处理查看详情
const handleView = (record) => {
// 预留查看详情逻辑
console.log('查看详情:', record);
};
// 处理编辑
const handleEdit = (record) => {
// 预留编辑逻辑
console.log('编辑:', record);
};
// 处理删除
const handleDelete = (record) => {
// 预留删除逻辑
console.log('删除:', record);
};
// 渲染表格
return (
<Table
rowSelection={{
type: 'checkbox',
...rowSelection,
}}
columns={columns}
dataSource={dataSource}
loading={loading}
pagination={false} // 关闭表格自带分页,使用外部分页组件
rowKey="key"
style={{ width: '100%', }}
/>
);
}
const DeviceAttribute = () => {
// 状态管理
const [dataSource, setDataSource] = useState([]); // 表格数据
const [loading, setLoading] = useState(false); // 加载状态
const [total, setTotal] = useState(0); // 总条数
const [currentPage, setCurrentPage] = useState(1); // 当前页码
const [pageSize, setPageSize] = useState(10); // 每页条数
const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 选中的行ID
// 表格列配置
const columns = [
{
title: '属性名称',
dataIndex: 'attribute',
key: 'attribute',
align: 'center',
},
{
title: '属性内容',
dataIndex: 'content',
key: 'content',
align: 'center',
},
{
title: '属性分类',
dataIndex: 'class',
key: 'class',
align: 'center',
},
{
title: '阈值内容',
dataIndex: 'threshold',
key: 'threshold',
align: 'center',
render: (value) => {
return (
<div style={{ textAlign: 'left', width: '100px', margin: 'auto' }}>
<div>上限{value['上限']}</div>
<div>下限{value['下限']}</div>
<div>单位{value['单位']}</div>
</div>
)
}
},
{
title: '测点名称',
dataIndex: 'point',
key: 'point',
align: 'center',
},
{
title: '操作',
key: 'action',
align: 'center',
render: (_, record) => (
<Space size="small">
<a onClick={() => handleEdit(record)} style={{ color: '#2C9E9D' }}>
<EditOutlined /> 编辑
</a>
<a onClick={() => handleDelete(record)} style={{ color: '#ff4d4f' }}>
<DeleteOutlined /> 删除
</a>
</Space>
),
},
]
// 获取表格数据
const fetchTableData = async () => {
try {
setLoading(true);
// 这里是预留的接口调用位置
// 实际项目中替换为真实接口请求
// const response = await api.getEmployeeList({
// page: currentPage,
// pageSize: pageSize
// });
// 模拟数据 - 实际项目中删除
const mockData = [
{
key: '1',
attribute: '震动',
content: '加速度',
class: '阈值',
threshold: { '上限': 4000, '下限': 0, '单位': 'mm/s²' },
point: '测点2',
}, {
key: '2',
attribute: '震动',
content: '加速度',
class: '阈值',
threshold: { '上限': 4000, '下限': 0, '单位': 'mm/s²' },
point: '测点2',
}, {
key: '3',
attribute: '震动',
content: '加速度',
class: '阈值',
threshold: { '上限': '', '下限': '', '单位': '' },
point: '测点2',
},
];
// 模拟接口返回 - 实际项目中使用接口数据
setDataSource(mockData);
setTotal(85); // 总条数,实际项目中从接口获取
} catch (error) {
console.error('获取员工数据失败:', error);
} finally {
setLoading(false);
}
};
// 初始加载和分页变化时重新获取数据
useEffect(() => {
fetchTableData();
}, [currentPage, pageSize]);
// 处理编辑
const handleEdit = (record) => {
// 预留编辑逻辑
console.log('编辑:', record);
};
// 处理删除
const handleDelete = (record) => {
// 预留删除逻辑
console.log('删除:', record);
};
// 渲染表格
return (
<Table
columns={columns}
dataSource={dataSource}
loading={loading}
pagination={false} // 关闭表格自带分页,使用外部分页组件
rowKey="key"
style={{ width: '100%', }}
/>
);
}
// 分页组件
export const TablePagination = ({ currentPage, pageSize, total, onPageChange, onPageSizeChange }) => {
return (
<div style={{ textAlign: 'right', marginTop: 16, width: '100%' }}>
<Pagination
current={currentPage}
pageSize={pageSize}
total={total}
onChange={onPageChange}
onShowSizeChange={onPageSizeChange}
showSizeChanger
showQuickJumper
showTotal={(total) => `${total}`}
pageSizeOptions={['10', '20', '50', '100']}
/>
</div>
);
};
// TimeMange component removed
// PatrolRouteQuery component removed
const SmartInspectionRange = () => {
// 巡检范围树形数据,根据参考图更新
const treeData = [
{
title: '核心环控路径',
key: 'core-path',
children: [
{ title: '指挥调度中心', key: 'command-center' },
{ title: '罐区集群', key: 'tank-cluster' },
{ title: '泵房集群', key: 'pump-cluster' },
{ title: '管线网络', key: 'pipeline-network' },
],
},
{
title: '罐区',
key: 'tank-area',
children: [
{
title: '高危罐区',
key: 'high-risk-tank',
children: [
{ title: '顶源罐区', key: 'top-tank-area' },
{ title: '拱顶罐区', key: 'dome-top-tank' },
],
},
{
title: '常规罐区',
key: 'normal-tank',
children: [
{ title: '浮顶罐区', key: 'floating-top-tank' },
{ title: '拱顶罐区', key: 'normal-dome-tank' },
],
},
],
},
{
title: '泵房',
key: 'pump-house',
children: [
{
title: '运行中泵房',
key: 'running-pump',
children: [
{ title: '1#泵房', key: 'pump-1' },
{ title: '2#泵房', key: 'pump-2' },
]
},
{ title: '备用泵房', key: 'spare-pump' },
{
title: '3#泵房',
key: 'pump-3',
children: [
{ title: '4#泵房', key: 'pump-4' },
]
},
],
},
{ title: '智能网格', key: 'smart-grid' },
];
return (
<div style={{ backgroundColor: '#fff', padding: '20px', minHeight: '631px', borderRadius: '10px',marginBottom:20 }}>
<Row gutter={[16, 16]}>
{/* 左侧树形结构 */}
<Col span={6}>
<div style={{
backgroundColor: '#E7F2ED',
borderRadius: '10px',
padding: '15px',
height: '100%',
border: '1px solid rgba(0, 102, 101, 0.2)'
}}>
<div style={{
fontSize: '16px',
fontWeight: 'bold',
color: '#006665',
marginBottom: '15px',
paddingBottom: '10px',
borderBottom: '2px solid #006665'
}}>| 巡检范围</div>
<Tree
className={styles['tree']}
defaultExpandAll
treeData={treeData}
checkable
style={{ fontSize: '14px', color: '#006665' }}
/>
</div>
</Col>
{/* 右侧背景图和内容 */}
<Col span={18}>
<div style={{
position: 'relative',
height: '631px',
borderRadius: '10px',
overflow: 'hidden',
border: '1px solid rgba(0, 102, 101, 0.2)'
}}>
{/* 背景图 */}
<img
src={inspectionBg}
alt="智能巡检范围监控"
style={{
width: '100%',
height: '100%',
objectFit: 'cover'
}}
/>
{/* 区域基础信息框 */}
<div style={{
position: 'absolute',
top: '20%',
left: '30%',
backgroundColor: 'rgba(255, 255, 255, 0.9)',
padding: '15px',
borderRadius: '8px',
border: '1px solid #006665',
width: '200px'
}}>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>区域基础信息</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.5' }}>
<div>区域名称高危罐区 - 3#-9#罐组</div>
<div>区域编号第2节点 (指挥中心高危罐区)</div>
<div>巡检状态正在巡检</div>
<div>完成进度设备4/30</div>
</div>
</div>
{/* 巡检覆盖清单框 */}
<div style={{
position: 'absolute',
top: '10%',
right: '10%',
backgroundColor: 'rgba(255, 255, 255, 0.9)',
padding: '15px',
borderRadius: '8px',
border: '1px solid #006665',
width: '220px'
}}>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>巡检覆盖清单</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.5' }}>
<div style={{ fontWeight: 'bold', marginBottom: '5px' }}>覆盖主体</div>
<div>重点设备储罐×83#-9#罐组罐前付转装置</div>
<div>检测方式红外检测视觉识别</div>
<div>环境监控声噪消防水池监测</div>
<div>管控单位3#罐区特种管控部门</div>
</div>
</div>
{/* 机器人图标 */}
<div style={{
position: 'absolute',
bottom: '20%',
right: '25%',
textAlign: 'center'
}}>
<div style={{ fontSize: '48px', color: '#006665', marginBottom: '5px' }}>🤖</div>
<div style={{ backgroundColor: 'rgba(0, 102, 101, 0.8)', color: 'white', padding: '5px 10px', borderRadius: '15px', fontSize: '12px' }}>机器人实时位置</div>
</div>
{/* 绿色圆点标记 */}
<div style={{
position: 'absolute',
bottom: '35%',
left: '45%',
textAlign: 'center'
}}>
<div style={{
width: '20px',
height: '20px',
borderRadius: '50%',
backgroundColor: 'green',
border: '2px solid white',
boxShadow: '0 0 10px green',
margin: '0 auto 5px'
}}></div>
<div style={{ backgroundColor: 'rgba(0, 128, 0, 0.8)', color: 'white', padding: '3px 8px', borderRadius: '15px', fontSize: '11px' }}>高危罐区</div>
</div>
<div style={{
position: 'absolute',
bottom: '30%',
right: '15%',
textAlign: 'center'
}}>
<div style={{
width: '20px',
height: '20px',
borderRadius: '50%',
backgroundColor: 'green',
border: '2px solid white',
boxShadow: '0 0 10px green',
margin: '0 auto 5px'
}}></div>
<div style={{ backgroundColor: 'rgba(0, 128, 0, 0.8)', color: 'white', padding: '3px 8px', borderRadius: '15px', fontSize: '11px' }}>常规罐区</div>
</div>
</div>
</Col>
</Row>
</div>
)
};
// 智能巡检内容监控中心组件
const SmartInspectionContent = () => {
const [activeTab, setActiveTab] = useState('温度异常检测');
const [currentPage, setCurrentPage] = useState(6);
const handleTabClick = (tab) => {
setActiveTab(tab);
};
const handlePageChange = (page) => {
setCurrentPage(page);
};
const renderContent = () => {
switch (activeTab) {
case '温度异常检测':
return (
<div style={{ padding: 20 }}>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 20 }}>
<h2 style={{ margin: 0, color: 'black' }}>| 实时监测区</h2>
{/* <div style={{ display: 'flex', gap: 10 }}>
<button style={{
backgroundColor: '#52c41a',
color: 'white',
border: 'none',
padding: '8px 16px',
borderRadius: 4,
cursor: 'pointer',
fontWeight: 'bold'
}}>
实时刷新
</button>
<button style={{
backgroundColor: '#1890ff',
color: 'white',
border: 'none',
padding: '8px 16px',
borderRadius: 4,
cursor: 'pointer'
}}>
导出检测报告
</button>
<button style={{
backgroundColor: '#722ed1',
color: 'white',
border: 'none',
padding: '8px 16px',
borderRadius: 4,
cursor: 'pointer'
}}>
报警设置
</button>
</div> */}
</div>
<div style={{ display: 'flex', gap: 20 }}>
<div style={{
border: '1px solid #f0f0f0',
borderRadius: 8,
padding: 16,
width: '35%',
backgroundColor: '#fafafa'
}}>
<div style={{ position: 'relative' }}>
<img
src={thermalImage}
alt="红外热成像图"
style={{ width: '100%', height: 'auto', borderRadius: 4 }}
/>
<div style={{
position: 'absolute',
top: 10,
right: 10,
backgroundColor: 'rgba(0,0,0,0.7)',
color: 'white',
padding: '4px 8px',
borderRadius: 4,
fontSize: 12
}}>
当前最高温: 89°C
</div>
</div>
<div style={{ marginTop: 12 }}>
<p style={{ margin: '8px 0', fontSize: 14 }}>实时温度: <span style={{ color: '#ff4d4f', fontWeight: 'bold' }}>89°C</span></p>
<p style={{ margin: '8px 0', fontSize: 14 }}>高温异常: <span style={{ color: '#ff4d4f', fontWeight: 'bold' }}>80°C</span></p>
<p style={{ margin: '8px 0', fontSize: 14, color: '#666' }}>当前监测区域: 罐区管道连接处检测</p>
</div>
</div>
<div style={{ width: '65%', padding: 16 }}>
<div style={{
border: '1px solid #f0f0f0',
borderRadius: 8,
padding: 16,
marginBottom: 20,
backgroundColor: '#fafafa'
}}>
<h3 style={{ margin: '0 0 12px 0', fontSize: 16 }}>检测原理说明</h3>
<p style={{
margin: 0,
lineHeight: 1.6,
color: '#333',
backgroundColor: 'white',
padding: 12,
borderRadius: 4,
border: '1px solid #e8e8e8'
}}>
"搭载红外热成像测温仪,覆盖电缆、胶管、设备高温点;温度达到阈值时自动上报故障,同步录制热成像/可见光视频,为故障分析提供数据支撑。"
</p>
</div>
<div style={{
border: '1px solid #f0f0f0',
borderRadius: 8,
padding: 16,
backgroundColor: '#fafafa'
}}>
<h3 style={{ margin: '0 0 12px 0', fontSize: 16 }}>异常历史记录</h3>
<div style={{ overflowX: 'auto' }}>
<table style={{ width: '100%', borderCollapse: 'collapse', backgroundColor: 'white' }}>
<thead>
<tr style={{ backgroundColor: 'rgba(240, 247, 247, 1)' }}>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>序号</th>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>故障时间</th>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>检测区域</th>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>异常温度</th>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>处理状态</th>
<th style={{ padding: '10px', border: '1px solid #e8e8e8', textAlign: 'left' }}>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>1</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>2025-10-16 14:20</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>1# 泵房电机</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>92°C</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>已处理</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>
<button style={{
color: '#1890ff',
border: 'none',
backgroundColor: 'transparent',
cursor: 'pointer',
textDecoration: 'underline'
}}>
查看详情
</button>
</td>
</tr>
<tr>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>2</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>2025-10-16 14:20</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>1# 泵房电机</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>92°C</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>已处理</td>
<td style={{ padding: '10px', border: '1px solid #e8e8e8' }}>
<button style={{
color: '#1890ff',
border: 'none',
backgroundColor: 'transparent',
cursor: 'pointer',
textDecoration: 'underline'
}}>
查看详情
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginTop: 16 }}>
<span style={{ fontSize: 14, color: '#666' }}> 85 </span>
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
<span style={{ fontSize: 14 }}>10 / page</span>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
1
</button>
<span>...</span>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
4
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
5
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #1890ff',
backgroundColor: '#1890ff',
color: 'white',
cursor: 'pointer'
}}>
6
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
7
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
8
</button>
<span>...</span>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
50
</button>
<button style={{
padding: '4px 8px',
border: '1px solid #d9d9d9',
backgroundColor: 'white',
cursor: 'pointer'
}}>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
);
case '温湿度检测':
// 创建一个React兼容的ECharts组件
const EChartsGauge = ({ id, option, height, width }) => {
const chartRef = useRef(null);
const chartInstanceRef = useRef(null);
useEffect(() => {
// 确保在浏览器环境中运行
if (typeof window !== 'undefined' && chartRef.current) {
const echarts = require('echarts');
// 初始化图表
if (!chartInstanceRef.current) {
chartInstanceRef.current = echarts.init(chartRef.current);
}
// 设置配置
chartInstanceRef.current.setOption(option);
// 响应窗口大小变化
const handleResize = () => {
if (chartInstanceRef.current) {
chartInstanceRef.current.resize();
}
};
window.addEventListener('resize', handleResize);
// 清理函数
return () => {
window.removeEventListener('resize', handleResize);
if (chartInstanceRef.current) {
chartInstanceRef.current.dispose();
chartInstanceRef.current = null;
}
};
}
}, [option]);
return (
<div
ref={chartRef}
id={id}
style={{ width, height }}
/>
);
};
// 温度仪表盘配置
const temperatureOption = {
series: [
{
type: 'gauge',
startAngle: 180,
endAngle: 0,
min: 0,
max: 120,
splitNumber: 6,
itemStyle: {
color: 'rgba(4, 95, 94, 0.5)',
shadowColor: 'rgba(4, 95, 94, 0.7)',
shadowBlur: 10,
shadowOffsetX: 2,
shadowOffsetY: 2
},
progress: {
show: true,
roundCap: true,
width: 18,
itemStyle: {
color: 'rgba(4, 95, 94, 0.5)'
}
},
pointer: {
icon: 'path://M2090.36389,615.30999 L2090.36389,615.30999 C2091.48372,615.30999 2092.40383,616.194028 2092.44859,617.312956 L2096.90698,728.755929 C2097.05155,732.369577 2094.2393,735.416212 2090.62566,735.56078 C2090.53845,735.564269 2090.45117,735.566014 2090.36389,735.566014 L2090.36389,735.566014 C2086.74736,735.566014 2083.81557,732.63423 2083.81557,729.017692 C2083.81557,728.930412 2083.81732,728.84314 2083.82081,728.755929 L2088.2792,617.312956 C2088.32396,616.194028 2089.24407,615.30999 2090.36389,615.30999 Z',
length: '75%',
width: 16,
offsetCenter: [0, '5%'],
itemStyle: {
color: 'rgba(4, 95, 94, 1)'
}
},
axisLine: {
roundCap: true,
lineStyle: {
width: 18,
color: [
[1, 'rgba(4, 95, 94, 0.5)']
]
}
},
axisTick: {
splitNumber: 2,
lineStyle: {
width: 2,
color: '#999'
}
},
splitLine: {
length: 12,
lineStyle: {
width: 3,
color: 'rgba(4, 95, 94, 0.8)'
}
},
axisLabel: {
distance: 30,
color: 'rgba(4, 95, 94, 0.8)',
fontSize: 20
},
title: {
show: true,
offsetCenter: [0, '10%'],
fontSize: 18,
color: 'rgba(4, 95, 94, 0.8)'
},
detail: {
// backgroundColor: 'rgba(4, 95, 94, 0.2)',
// borderColor: 'rgba(4, 95, 94, 0.5)',
// borderWidth: 2,
width: '60%',
lineHeight: 40,
height: 40,
borderRadius: 8,
offsetCenter: [0, '35%'],
valueAnimation: true,
formatter: function (value) {
return '{value|温度:' + value.toFixed(0) + '℃}';
// return '{value|温度:' + value.toFixed(0) + '℃}{unit|°C}';
},
rich: {
value: {
fontSize: 20,
fontWeight: '400',
color: 'rgba(4, 95, 94, 1)'
},
unit: {
fontSize: 20,
color: 'rgba(4, 95, 94, 0.8)',
padding: [0, 0, -20, 10]
}
}
},
data: [
{
value: 28,
name: ''
}
]
}
]
};
// 湿度仪表盘配置
const humidityOption = {
series: [
{
type: 'gauge',
startAngle: 180,
endAngle: 0,
min: 0,
max: 120,
splitNumber: 6,
itemStyle: {
color: 'rgba(4, 95, 94, 0.5)',
shadowColor: 'rgba(4, 95, 94, 0.7)',
shadowBlur: 10,
shadowOffsetX: 2,
shadowOffsetY: 2
},
progress: {
show: true,
roundCap: true,
width: 18,
itemStyle: {
color: 'rgba(4, 95, 94, 0.5)'
}
},
pointer: {
icon: 'path://M2090.36389,615.30999 L2090.36389,615.30999 C2091.48372,615.30999 2092.40383,616.194028 2092.44859,617.312956 L2096.90698,728.755929 C2097.05155,732.369577 2094.2393,735.416212 2090.62566,735.56078 C2090.53845,735.564269 2090.45117,735.566014 2090.36389,735.566014 L2090.36389,735.566014 C2086.74736,735.566014 2083.81557,732.63423 2083.81557,729.017692 C2083.81557,728.930412 2083.81732,728.84314 2083.82081,728.755929 L2088.2792,617.312956 C2088.32396,616.194028 2089.24407,615.30999 2090.36389,615.30999 Z',
length: '75%',
width: 16,
offsetCenter: [0, '5%'],
itemStyle: {
color: 'rgba(4, 95, 94, 1)'
}
},
axisLine: {
roundCap: true,
lineStyle: {
width: 18,
color: [
[1, 'rgba(4, 95, 94, 0.5)']
]
}
},
axisTick: {
splitNumber: 2,
lineStyle: {
width: 2,
color: '#999'
}
},
splitLine: {
length: 12,
lineStyle: {
width: 3,
color: 'rgba(4, 95, 94, 0.8)'
}
},
axisLabel: {
distance: 30,
color: 'rgba(4, 95, 94, 0.8)',
fontSize: 20
},
title: {
show: true,
offsetCenter: [0, '10%'],
fontSize: 18,
color: 'rgba(4, 95, 94, 0.8)'
},
detail: {
// backgroundColor: 'rgba(4, 95, 94, 0.2)',
// borderColor: 'rgba(4, 95, 94, 0.5)',
// borderWidth: 2,
width: '60%',
lineHeight: 40,
height: 40,
borderRadius: 8,
offsetCenter: [0, '35%'],
valueAnimation: true,
formatter: function (value) {
// return '{value|' + value.toFixed(0) + '}{unit|%}';
return '{value|湿度:' + value.toFixed(0) + '%}';
},
rich: {
value: {
fontSize: 20,
fontWeight: '400',
color: 'rgba(4, 95, 94, 1)'
},
unit: {
fontSize: 20,
color: 'rgba(4, 95, 94, 0.8)',
padding: [0, 0, -20, 10]
}
}
},
data: [
{
value: 55,
name: ''
}
]
}
]
};
return (
<div style={{ padding: 20 }}>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 20 }}>
<h2 style={{ margin: 0, color: 'black' }}>| 温湿度检测</h2>
</div>
<div style={{ display: 'flex', gap: 20 }}>
<div style={{
// border: '1px solid #f0f0f0',
// borderRadius: 8,
// padding: 16,
width: '35%',
// backgroundColor: '#fafafa'
gap: 20
}}>
<div className={styles.dashboardContainer} style={{ width: '100%', height: 700 }}>
<h3 style={{ margin: '16px', fontSize: 16 }}>实时仪表盘</h3>
{/* 温度仪表盘 - 使用React兼容的ECharts组件 */}
<div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center' }}>
<div style={{ marginBottom: 0 }}>
<EChartsGauge id="temperatureGauge" option={temperatureOption} width={450} height={350} />
</div>
{/* 湿度仪表盘 - 使用React兼容的ECharts组件 */}
<div>
<EChartsGauge id="humidityGauge" option={humidityOption} width={450} height={350} />
</div>
</div>
</div>
<div className={styles.thresholdConfigContainer} style={{ marginTop: 20, padding: 16 }}>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<h3 style={{ margin: '0 0 16px 0', fontSize: 16 }}>阈值配置区</h3>
<Button className={styles['resetBtn']} style={{ backgroundImage: `url(${btnImg3})`, margin: '0 0px', width: 120 }}>保存配置</Button>
</div>
<div style={{ backgroundColor: 'white', padding: 16, borderRadius: 4 }}>
<div style={{ marginBottom: 12, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<label style={{ display: 'inline-block', width: 120, fontSize: 14 }}>低温预警阈值:</label>
<input
type="text"
value="5°C"
style={{
padding: '4px 8px',
border: '1px solid rgba(44, 158, 157, 1)',
borderRadius: 4,
width: '100%'
}}
/>
</div>
<div style={{ marginBottom: 12, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<label style={{ display: 'inline-block', width: 120, fontSize: 14 }}>高温预警阈值:</label>
<input
type="text"
value="30°C"
style={{
padding: '4px 8px',
border: '1px solid rgba(44, 158, 157, 1)',
borderRadius: 4,
width: '100%'
}}
/>
</div>
<div style={{ marginBottom: 12, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<label style={{ display: 'inline-block', width: 120, fontSize: 14 }}>湿度预警阈值:</label>
<input
type="text"
value="90%RH"
style={{
padding: '4px 8px',
border: '1px solid rgba(44, 158, 157, 1)',
borderRadius: 4,
width: '100%'
}}
/>
</div>
</div>
</div>
</div>
<div className={styles.chartContainer} style={{ width: '65%' }}>
<div style={{
border: '1px solid #f0f0f0',
borderRadius: 8,
padding: 16,
backgroundColor: '#fafafa',
height: '100%'
}}>
<h3 style={{ margin: '0 0 16px 0', fontSize: 16 }}>历史趋势图</h3>
<div style={{ backgroundColor: 'white', padding: 16, borderRadius: 4 }}>
<div style={{ display: 'flex', gap: 20, marginBottom: 16 }}>
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
<span style={{ display: 'inline-block', width: 16, height: 3, backgroundColor: '#1890ff' }}></span>
<span style={{ fontSize: 14, color: '#333' }}>温度(°C)</span>
</div>
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
<span style={{ display: 'inline-block', width: 16, height: 3, backgroundColor: '#52c41a' }}></span>
<span style={{ fontSize: 14, color: '#333' }}>湿度(%RH)</span>
</div>
</div>
<div style={{ height: 400, position: 'relative' }}>
{/* 模拟趋势图 */}
<svg width="100%" height="100%" viewBox="0 0 800 400">
{/* 网格线 */}
{[0, 25, 50, 75, 100].map((val, index) => (
<g key={index}>
<line
x1="50"
y1={400 - val * 4}
x2="750"
y2={400 - val * 4}
stroke="#f0f0f0"
strokeWidth="1"
/>
<text x="30" y={400 - val * 4 + 5} fontSize="12" fill="#666" textAnchor="end">
{val}
</text>
</g>
))}
{/* 时间标签 */}
{['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00', '24:00'].map((time, index) => (
<text
key={index}
x={50 + index * 90}
y={390}
fontSize="12"
fill="#666"
textAnchor="middle"
>
{time}
</text>
))}
{/* 温度曲线 */}
<path
d="M50,200 L140,160 L230,180 L320,120 L410,160 L500,140 L590,120 L680,140 L750,100"
stroke="#1890ff"
strokeWidth="2"
fill="none"
/>
{/* 温度数据点 */}
{[50, 140, 230, 320, 410, 500, 590, 680, 750].map((x, index) => (
<circle
key={`temp-${index}`}
cx={x}
cy={[200, 160, 180, 120, 160, 140, 120, 140, 100][index]}
r="4"
fill="#1890ff"
/>
))}
{/* 湿度曲线 */}
<path
d="M50,100 L140,140 L230,120 L320,160 L410,150 L500,180 L590,170 L680,140 L750,130"
stroke="#52c41a"
strokeWidth="2"
fill="none"
/>
{/* 湿度数据点 */}
{[50, 140, 230, 320, 410, 500, 590, 680, 750].map((x, index) => (
<circle
key={`humi-${index}`}
cx={x}
cy={[100, 140, 120, 160, 150, 180, 170, 140, 130][index]}
r="4"
fill="#52c41a"
/>
))}
</svg>
</div>
</div>
</div>
</div>
</div>
</div >
);
case '跑冒滴漏检测':
return (
<div style={{ padding: '20px', display: 'flex', gap: 20, height: '100%' }}>
<div style={{ marginBottom: '20px', width: '60%', height: '100%' }}>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
<div>
实时检测画面
</div>
<div style={{
display: 'flex',
justifyContent: 'end',
gap: '10px',
marginBottom: '15px'
}}>
<button style={{
padding: '8px 16px',
backgroundColor: '#2c9e9d',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer'
}}>红外热成像检测</button>
<button style={{
padding: '8px 16px',
backgroundColor: '#f0f0f0',
color: '#333',
border: '1px solid #d9d9d9',
borderRadius: '4px',
cursor: 'pointer'
}}>DCAM双摄像头分析</button>
</div>
</div>
<div style={{
width: '100%',
height: 'auto',
borderRadius: '8px',
overflow: 'hidden',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#f5f5f5'
}}>
<img
src={newBgImage}
alt="热成像检测画面"
style={{
width: '100%',
height: '100%',
// objectFit: 'cover'
}}
/>
</div>
</div>
<div style={{ width: '40%', height: '100%', display: 'flex', flexDirection: 'column' }}>
<h3>异常记录表格</h3>
<div style={{ overflowX: 'auto' }}>
<table style={{
width: '100%',
borderCollapse: 'collapse',
marginTop: '10px'
}}>
<thead>
<tr style={{ backgroundColor: 'rgba(240, 247, 247, 1)' }}>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>序号</th>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>故障时间</th>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>检测区域</th>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>检测技术</th>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>处理状态</th>
<th style={{
padding: '10px',
textAlign: 'left',
borderBottom: '1px solid #e8e8e8'
}}>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>1</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>2025-10-16 14:20</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>1#泵房电机</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>红外热成像</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>
<span style={{
color: '#52c41a',
backgroundColor: '#f6ffed',
padding: '2px 8px',
borderRadius: '4px',
fontSize: '12px'
}}>已处理</span>
</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>
<button style={{
padding: '4px 8px',
backgroundColor: '#1890ff',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer',
fontSize: '12px'
}}>查看详情</button>
</td>
</tr>
<tr>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>2</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>2025-10-16 14:20</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>2#泵房电机</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>红外热成像</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>
<span style={{
color: '#52c41a',
backgroundColor: '#f6ffed',
padding: '2px 8px',
borderRadius: '4px',
fontSize: '12px'
}}>已处理</span>
</td>
<td style={{
padding: '10px',
borderBottom: '1px solid #e8e8e8'
}}>
<button style={{
padding: '4px 8px',
backgroundColor: '#1890ff',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer',
fontSize: '12px'
}}>查看详情</button>
</td>
</tr>
</tbody>
</table>
</div>
<div style={{
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'center',
marginTop: 'auto',
gap: '10px'
}}>
<span> 05 10 / page</span>
<div>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>上一页</button>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #1890ff',
backgroundColor: '#1890ff',
color: 'white',
cursor: 'pointer'
}}>1</button>
<span>...</span>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>4</button>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>5</button>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>6</button>
<button style={{
padding: '4px 8px',
margin: '0 2px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>下一页</button>
</div>
</div>
</div>
</div>
);
case '仪器仪表采集':
return (
<div style={{ padding: '20px', height: '100%', display: 'flex', flexDirection: 'column' }}>
{/* 顶部批量编辑按钮 */}
<div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '20px' }}>
<div style={{ size: '20px' }}>| 仪器仪表采集</div>
<button style={{
padding: '8px 16px',
backgroundColor: '#2c9e9d',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer'
}}>批量设备阈值</button>
</div>
{/* 状态统计卡片 */}
<div style={{ marginBottom: '20px' }}>
<h4 style={{ marginBottom: '10px' }}>状态统计卡片</h4>
<div style={{ display: 'flex', gap: '15px' }}>
{/* 正常仪表卡片 */}
<div style={{
flex: 1,
backgroundColor: '#e6f7ff',
borderRadius: '8px',
padding: '15px',
borderLeft: '4px solid #1890ff',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between'
}}>
<div>
<div style={{ fontSize: '14px', color: '#666', marginBottom: '5px' }}>正常仪表</div>
<div style={{ fontSize: '24px', fontWeight: 'bold', color: '#1890ff' }}>28</div>
</div>
<div style={{ width: '40px', height: '40px', backgroundColor: '#bae7ff', borderRadius: '50%' }}></div>
</div>
{/* 超限仪表卡片 */}
<div style={{
flex: 1,
backgroundColor: '#fff2e8',
borderRadius: '8px',
padding: '15px',
borderLeft: '4px solid #ff7875',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between'
}}>
<div>
<div style={{ fontSize: '14px', color: '#666', marginBottom: '5px' }}>超限仪表</div>
<div style={{ fontSize: '24px', fontWeight: 'bold', color: '#ff7875' }}>2</div>
</div>
<div style={{ width: '40px', height: '40px', backgroundColor: '#ffccc7', borderRadius: '50%' }}></div>
</div>
{/* 待确认卡片 */}
<div style={{
flex: 1,
backgroundColor: '#f6ffed',
borderRadius: '8px',
padding: '15px',
borderLeft: '4px solid #52c41a',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between'
}}>
<div>
<div style={{ fontSize: '14px', color: '#666', marginBottom: '5px' }}>待确认</div>
<div style={{ fontSize: '24px', fontWeight: 'bold', color: '#52c41a' }}>0</div>
</div>
<div style={{ width: '40px', height: '40px', backgroundColor: '#b7eb8f', borderRadius: '50%' }}></div>
</div>
</div>
</div>
{/* 采集数据列表 */}
<div style={{ marginBottom: '20px' }}>
<h4 style={{ marginBottom: '10px' }}>统计数据列表</h4>
<div style={{ overflow: 'auto' }}>
<table style={{
width: '100%',
borderCollapse: 'collapse',
backgroundColor: '#fff',
boxShadow: '0 1px 3px rgba(0,0,0,0.1)'
}}>
<thead>
<tr style={{ backgroundColor: 'rgba(240, 247, 247, 1)' }}>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>序号</th>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>仪表名称</th>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>采集值</th>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>设备位置</th>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>状态</th>
<th style={{ padding: '12px', textAlign: 'left', borderBottom: '1px solid #e8e8e8' }}>报警阈值</th>
</tr>
</thead>
<tbody>
<tr>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>1</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>1# 罐液位计</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>8.2m</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>高危罐区 3# </td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>
<span style={{ color: '#52c41a' }}>正常</span>
</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8', color: '#1890ff' }}>0-10m</td>
</tr>
<tr>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>2</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>2# 泵出口压力表</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>0.5MPa</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>1# 泵房</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8' }}>
<span style={{ color: '#52c41a' }}>正常</span>
</td>
<td style={{ padding: '12px', borderBottom: '1px solid #e8e8e8', color: '#1890ff' }}>0.4-0.8MPa</td>
</tr>
</tbody>
</table>
</div>
</div>
{/* 分页控件 */}
<div style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center', marginTop: 'auto' }}>
<div style={{ marginRight: '20px' }}>共95条 10/95</div>
<div style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>上一页</button>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#1890ff',
color: '#fff',
cursor: 'pointer'
}}>1</button>
<span>...</span>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>4</button>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>5</button>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>6</button>
<button style={{
padding: '5px 10px',
border: '1px solid #d9d9d9',
backgroundColor: '#fff',
cursor: 'pointer'
}}>下一页</button>
</div>
</div>
</div>
);
case '环境监测':
return (
<div style={{ padding: 40, textAlign: 'center', color: '#666' }}>
<h3>该模块正在开发中...</h3>
</div>
);
default:
return null;
}
};
return (
<div style={{ minHeight: '98vh', backgroundColor: '#fff', borderRadius: 10, marginBottom: 20 }}>
<div style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
backgroundColor: '#fff',
padding: '16px 24px',
color: 'black',
fontWeight: '400',
fontSize: 18
}}>
<div>
| 智能巡检内容监控中心
</div>
<div>
<Button className={styles['addBtn']} style={{ backgroundImage: `url(${btnImg1})`, }}>实时刷新</Button>
<Button className={styles['resetBtn']} style={{ backgroundImage: `url(${btnImg3})`, margin: '0 20px', width: 120 }}>导出巡检报告</Button>
<Button className={styles['delBtn']} style={{ backgroundImage: `url(${btnImg2})` }}>报警设置</Button>
</div>
</div>
<div style={{ display: 'flex' }}>
<div style={{
width: 240,
backgroundColor: '#fff',
minHeight: 'calc(100vh - 60px)',
padding: 16
}}>
<nav>
<ul style={{ listStyle: 'none', padding: 0, margin: 0 }}>
{['温度异常检测', '温湿度检测', '跑冒滴漏检测', '仪器仪表采集', '环境监测'].map((tab) => (
<li key={tab} style={{ marginBottom: 22 }}>
<button
onClick={() => handleTabClick(tab)}
className={`${styles.tabButton} ${activeTab === tab ? styles.active : styles.inactive}`}
style={{
backgroundImage: activeTab === tab ? `url(${activeBgImage})` :
tab === '温度异常检测' ? `url(${menuInactiveBg1})` :
tab === '温湿度检测' ? `url(${menuInactiveBg2})` :
tab === '跑冒滴漏检测' ? `url(${menuInactiveBg3})` :
tab === '仪器仪表采集' ? `url(${menuInactiveBg4})` :
tab === '环境监测' ? `url(${menuInactiveBg5})` : `url(${menuInactiveBg2})`
}}
>
{tab}
</button>
</li>
))}
</ul>
</nav>
</div>
<div style={{ flex: 1 }}>
{renderContent()}
</div>
</div>
</div>
);
};
// 任务规划与执行流程组件
const TaskPlanningFlow = () => {
return (
<div style={{ backgroundColor: '#fff', padding: '20px', minHeight: '631px', borderRadius: '10px',marginBottom:20 }}>
{/* 顶部标题 */}
<div style={{ display: 'flex', flexDirection: 'row', textAlign: 'center', lineHeight: '31.43px', gap: '10px' }}>
<div style={{ fontSize: '20px', fontWeight: 'bold', color: '#006665', marginBottom: '20px' }}>
接班班组签到
</div>
<div style={{ marginRight: '10px', fontSize: '14px', color: 'rgba(153, 153, 153, 1)' }}>当前多机协作任务完成时间较单机缩短 62%</div>
</div>
{/* 顶部控制区域 */}
<Row gutter={[16, 16]} style={{ marginBottom: '20px' }}>
{/* 左侧任务状态选择框 */}
<Col span={6}>
<div style={{ display: 'flex', alignItems: 'center' }}>
<span style={{ marginRight: '10px', fontSize: '14px', color: '#333' }}>任务状态</span>
<Select
defaultValue="全部"
style={{ width: 220 }}
options={[
{ value: '全部', label: '全部' },
{ value: '运行中', label: '运行中' },
{ value: '待充电', label: '待充电' },
{ value: '已完成', label: '已完成' },
]}
/>
</div>
</Col>
{/* 右侧按钮组 */}
<Col span={18} style={{ display: 'flex', justifyContent: 'flex-end' }}>
<Space size="16px" style={{ gap: '20px' }}>
<Button
style={{
width: '120px',
height: '40px',
fontSize: '14px',
fontWeight: '400',
color: 'white',
backgroundImage: `url(${btnImg1})`,
backgroundSize: '100% 100%',
border: 'none',
borderRadius: '5px'
}}
>
新建任务
</Button>
<Button
style={{
width: '120px',
height: '40px',
fontSize: '14px',
fontWeight: '400',
color: 'black',
backgroundImage: `url(${btnImg2})`,
backgroundSize: '100% 100%',
border: 'none',
borderRadius: '5px'
}}
>
暂停所有任务
</Button>
<Button
style={{
width: '120px',
height: '40px',
fontSize: '14px',
fontWeight: '400',
color: 'white',
backgroundImage: `url(${btnImg3})`,
backgroundSize: '100% 100%',
border: 'none',
borderRadius: '5px'
}}
>
刷新状态
</Button>
</Space>
</Col>
</Row>
{/* 主要内容区域 - 左右布局 */}
<Row gutter={[16, 16]} style={{}}>
{/* 左侧实时监控信息区域 */}
<Col span={6}>
<div style={{
height: '100%',
background: '#e8f1ec',
padding: '15px',
borderRadius: '8px',
// border: '1px solid #006665',
overflow: 'auto'
}}>
{/* 自主导航规则 */}
<div style={{ fontSize: '16px', fontWeight: 'bold', color: '#006665', marginBottom: '10px', borderBottom: '1px solid #006665', paddingBottom: '5px' }}>自主导航规则</div>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>罐区高级规则</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px', marginBottom: '15px' }}>
<div> 陌生区域基于罐区坐标生成"宇"字形环绕路径</div>
<div> 高度 10m 的罐体距离罐体0.5m环绕</div>
1 month ago
<div> 高度 {'>'} 10m 的罐体距离罐体2m环绕</div>
</div>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>障碍物规则</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px', marginBottom: '15px' }}>
1 month ago
<div> 距离障碍物 {'>'} 1.5m继续沿当前路径行驶</div>
<div> 距离障碍物 1.5m触发停止并执行路径重规划</div>
</div>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>示例配置</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px' }}>
<div> 罐区A优先级高检查点15个</div>
<div> 罐区B优先级中检查点10个</div>
<div> 罐区C优先级低检查点8个</div>
</div>
</div>
</Col>
{/* 右侧背景图和监控信息区域 */}
<Col span={18}>
<div style={{
position: 'relative',
width: '100%',
height: '100%',
borderRadius: '10px',
overflow: 'hidden',
border: '1px solid rgba(0, 102, 101, 0.2)'
}}>
{/* 背景图 */}
<img
src={taskPlanBg}
alt="任务规划与执行流程"
style={{
width: '100%',
height: '100%',
objectFit: 'cover'
}}
/>
{/* 多级实时监控信息 - 右上角 */}
<div style={{
position: 'absolute',
top: '20px',
right: '20px',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
padding: '15px',
borderRadius: '8px',
border: '1px solid #006665',
width: '300px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)'
}}>
<div style={{ fontSize: '16px', fontWeight: 'bold', color: '#006665', marginBottom: '10px', borderBottom: '1px solid #006665', paddingBottom: '5px' }}>多级实时监控</div>
{/* 一级监控信息 */}
<div style={{ marginBottom: '15px' }}>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>1. 高危罐区监控</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px' }}>
<div> 罐区A - 红外检测正常压力稳定</div>
<div> 罐区B - 温度监测中运行状态良好</div>
<div> 泄漏检测系统 - 无异常信号</div>
</div>
</div>
{/* 二级监控信息 */}
<div style={{ marginBottom: '15px' }}>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>2. 机器人状态监控</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px' }}>
<div> ROB-001 - 高危罐区A电量85%运行中</div>
<div> ROB-002 - 高危罐区B电量72%运行中</div>
<div> ROB-003 - 泵房区域电量15%待充电</div>
</div>
</div>
{/* 三级监控信息 */}
<div>
<div style={{ fontSize: '14px', fontWeight: 'bold', color: '#006665', marginBottom: '8px' }}>3. 环境参数监控</div>
<div style={{ fontSize: '12px', color: '#333', lineHeight: '1.6', paddingLeft: '10px' }}>
<div> 温度 - 26°C湿度 - 58%</div>
<div> 风速 - 2.3m/s风向 - 东北</div>
<div> 气体浓度 - 正常范围</div>
</div>
</div>
</div>
{/* 浮动标签 */}
<div style={{
position: 'absolute',
top: '30%',
left: '20%',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
padding: '8px 12px',
borderRadius: '15px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
fontSize: '12px',
color: '#006665'
}}>
📦 更多功能
</div>
<div style={{
position: 'absolute',
bottom: '40%',
left: '40%',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
padding: '8px 12px',
borderRadius: '15px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
fontSize: '12px',
color: '#006665'
}}>
📋 调拨出库
</div>
<div style={{
position: 'absolute',
bottom: '25%',
right: '35%',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
padding: '8px 12px',
borderRadius: '15px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
fontSize: '12px',
color: '#006665'
}}>
📥 生产入库
</div>
<div style={{
position: 'absolute',
bottom: '15%',
right: '15%',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
padding: '8px 12px',
borderRadius: '15px',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
fontSize: '12px',
color: '#006665'
}}>
📦 其他入库
</div>
{/* 机器人位置标记 */}
<div style={{
position: 'absolute',
bottom: '35%',
left: '45%',
textAlign: 'center'
}}>
<div style={{
width: '15px',
height: '15px',
borderRadius: '50%',
backgroundColor: '#52c41a',
border: '2px solid white',
boxShadow: '0 0 10px #52c41a',
margin: '0 auto 5px'
}}></div>
<div style={{ backgroundColor: 'rgba(82, 196, 26, 0.8)', color: 'white', padding: '3px 8px', borderRadius: '15px', fontSize: '11px' }}>ROB-001</div>
</div>
<div style={{
position: 'absolute',
bottom: '30%',
right: '15%',
textAlign: 'center'
}}>
<div style={{
width: '15px',
height: '15px',
borderRadius: '50%',
backgroundColor: '#52c41a',
border: '2px solid white',
boxShadow: '0 0 10px #52c41a',
margin: '0 auto 5px'
}}></div>
<div style={{ backgroundColor: 'rgba(82, 196, 26, 0.8)', color: 'white', padding: '3px 8px', borderRadius: '15px', fontSize: '11px' }}>ROB-002</div>
</div>
</div>
</Col>
</Row>
</div>
);
};
const StandardManagement = () => {
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [total, setTotal] = useState(85); // 总条数,实际项目中从接口获取
// 处理页码变化
const handlePageChange = (page, pageSize) => {
setCurrentPage(page);
setPageSize(pageSize);
};
// 处理每页条数变化
const handlePageSizeChange = (current, size) => {
setPageSize(size);
setCurrentPage(1); // 重置到第一页
};
return (
<div style={{ backgroundColor: '#fff', padding: '20px', borderBottomLeftRadius: '10px', }}>
<Title title={'巡检标准管理'}></Title>
<Row style={{ marginTop: '20px' }}>
<Button icon={<PlusOutlined />} className={styles['addBtn']} style={{ backgroundImage: `url(${btnImg1})`, marginRight: '30px' }}>新建方案</Button>
<Button className={styles['delBtn']} style={{ backgroundImage: `url(${btnImg2})` }}>删除</Button>
</Row>
<Row style={{ marginTop: '20px', minHeight: '450px' }}>
<StandardTable></StandardTable>
</Row>
<Row style={{ marginTop: '20px' }}>
<TablePagination
currentPage={currentPage}
pageSize={pageSize}
total={total}
onPageChange={handlePageChange}
onPageSizeChange={handlePageSizeChange}
></TablePagination>
</Row>
</div>
)
}
const DeviceAttributeSettings = () => {
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [total, setTotal] = useState(85); // 总条数,实际项目中从接口获取
const treeData = [
{
title: '发电机区域',
key: '发电机区域',
children: [
{ title: '#1 发电机', key: '#1发电机', },
{ title: '#2 发电机', key: '#2发电机', },
{ title: '#3 发电机', key: '#3发电机', },
{ title: '#4 发电机', key: '#4发电机', },
{ title: '#5 发电机', key: '#5发电机', },
]
},
{
title: '中水处理区',
key: '中水处理区',
children: [
{ title: '中水过滤装置A', key: '中水过滤装置A', },
{ title: '中水过滤装置B', key: '中水过滤装置B', },
]
},
{
title: '除盐水区',
key: '除盐水区',
children: [
{ title: '除盐水泵1', key: '除盐水泵1', },
{ title: '除盐水泵2', key: '除盐水泵2', },
{ title: '除盐水泵3', key: '除盐水泵3', },
]
}]
// 处理页码变化
const handlePageChange = (page, pageSize) => {
setCurrentPage(page);
setPageSize(pageSize);
};
// 处理每页条数变化
const handlePageSizeChange = (current, size) => {
setPageSize(size);
setCurrentPage(1); // 重置到第一页
};
return (
<div style={{ backgroundColor: '#fff', padding: '20px' }}>
<Row>
<Col span={4} style={{ backgroundColor: 'rgb(231, 242, 237)', padding: '20px' }}>
<Title title={'巡检区域&设备'}></Title>
<Search style={{ margin: '20px 0' }}
placeholder={'搜索节点'}
></Search>
<Tree
treeData={treeData}
className={styles['tree']}
checkable
showLine
defaultExpandParent={true}
defaultExpandedKeys={['发电机区域', '中水处理区', '除盐水区',]}
>
</Tree>
</Col>
<Col span={20} style={{ padding: '10px' }}>
<Row style={{ marginBottom: '20px' }}>
<Button className={styles['addBtn']} style={{ backgroundImage: `url(${btnImg1})` }}>重新选择</Button>
</Row>
<Title title={'#1 发电机'}></Title>
<Row style={{ marginTop: '20px', minHeight: '450px' }}>
<DeviceAttribute></DeviceAttribute>
</Row>
<Row style={{ marginTop: '20px' }}>
<TablePagination
currentPage={currentPage}
pageSize={pageSize}
total={total}
onPageChange={handlePageChange}
onPageSizeChange={handlePageSizeChange}
></TablePagination>
</Row>
</Col>
</Row>
</div>
)
}
const items = [
{
label: <MenuBg text={'智能巡检范围监控'}></MenuBg>,
key: '智能巡检范围监控',
},
{
label: <MenuBg text={'任务规划与执行流程'}></MenuBg>,
key: '任务规划与执行流程',
},
{
label: <MenuBg text={'巡检内容'}></MenuBg>,
key: '巡检内容',
},
]
const list = {
'巡检标准管理': <StandardManagement />,
'设备属性设置': <DeviceAttributeSettings />,
'智能巡检范围监控': <SmartInspectionRange />,
'巡检内容': <SmartInspectionContent />,
'任务规划与执行流程': <TaskPlanningFlow />,
}
const InspectionTaskPlan = () => {
const [current, setCurrent] = useState('智能巡检范围监控')
const onclick = (e) => {
console.log(e.key)
setCurrent(e.key)
}
return (
<>
<div className={styles['header']}>
<div className={styles['logo']}>
<span style={{ marginLeft: '-20px' }}> 当前:&nbsp;&nbsp;{current}</span>
</div>
<Menu
onClick={onclick}
items={items}
selectedKeys={[current]}
mode={'horizontal'}
style={{ flex: '1' }}
className={styles['menu']}
>
</Menu>
</div>
{list[current]}
</>
)
}
export default InspectionTaskPlan