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 menuInactiveBg from '@/assets/img/3de08b72a292633bddad28950ba6c6d7fa084a23.png' import activeBgImage from '@/assets/img/de55b2b9c8dab34462ff1b044a5a5c9668b11aa4.png' import thermalImage from '@/assets/img/03ba6681098742e33bea38c40e3c23f16847dc1f.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 (
{props.text} {props.icon}
) } //抽屉 const Drawers = (props) => { return (
所属班次 {props.row?.shifts} 路线名称 {props.row?.name} 所属专业 {props.row?.affiliation} 创建时间 {props.row?.time}
发电机 中水处区 1#增压风机变频器 1#炉右上炉膛温度 1#冷干机
发电机
  • 外观检查:有无破损、油污
  • 温度检测:轴承温度≤70℃,定子温度≤105℃
1#增压风机变频器
  • 运行指示灯:是否正常亮起
  • 散热风扇:是否正常转动
  • 输出电压:380V±5%
) } // 员工表格组件 const EmployeeTable = () => { // 状态管理 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: 'employeeId', key: 'employeeId', align: 'center', }, { title: '姓名', dataIndex: 'name', key: 'name', align: 'center', }, { title: '性别', dataIndex: 'gender', key: 'gender', align: 'center', }, { title: '所属部门', dataIndex: 'department', key: 'department', align: 'center', }, { title: '岗位', dataIndex: 'position', key: 'position', align: 'center', }, { title: '手机号码', dataIndex: 'phone', key: 'phone', align: 'center', }, { title: '状态', dataIndex: 'status', key: 'status', align: 'center', render: (status) => ( ) }, { title: '入职时间', dataIndex: 'hireDate', key: 'hireDate', align: 'center', }, { title: '操作', key: 'action', align: 'center', render: (_, record) => ( handleView(record)} style={{ color: '#2C9E9D' }}> 查看详情 handleEdit(record)} style={{ color: '#2C9E9D' }}> 编辑 handleDelete(record)} style={{ color: '#ff4d4f' }}> 删除 ), }, ]; // 选择框配置 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', employeeId: 'GH001', name: '钱佳仪', gender: '女', department: '运行部', position: '巡检员', phone: '189 7731 3118', status: true, hireDate: '2025-09-13' }, { key: '2', employeeId: 'GH002', name: '孙兆洪', gender: '女', department: '安保部', position: '安全员', phone: '156 9747 2741', status: true, hireDate: '2025-09-12' }, { key: '3', employeeId: 'GH003', name: '季丹', gender: '男', department: '设备部', position: '维修工', phone: '151 4456 8916', status: true, hireDate: '2025-08-16' }, { key: '4', employeeId: 'GH004', name: '赵晓辉', gender: '男', department: '调度室', position: '调度员', phone: '181 8511 3486', status: true, hireDate: '2025-08-15' }, { key: '5', employeeId: 'GH005', name: '何扑金', gender: '女', department: '消防班', position: '消防员', phone: '183 3220 4078', status: true, hireDate: '2025-07-20' }, { key: '6', employeeId: 'GH006', name: '吴国立', gender: '男', department: '综合部', position: '文员', phone: '187 5703 5618', status: false, hireDate: '2025-07-17' } ]; // 模拟接口返回 - 实际项目中使用接口数据 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 ( ); }; const GroupTable = () => { //状态管理 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: 'groupId', key: 'groundId', align: 'center', }, { title: '班组姓名', dataIndex: 'groupName', key: 'groupName', align: 'center', }, { title: '班组长', dataIndex: 'groupHeader', key: 'groupHeader', align: 'center', }, { title: '成员数量', dataIndex: 'num', key: 'num', align: 'center', }, { title: '负责区域', dataIndex: 'position', key: 'position', align: 'center', }, { title: '联系电话', dataIndex: 'phone', key: 'phone', align: 'center', }, { title: '班组状态', dataIndex: 'status', key: 'status', align: 'center', render: (status) => ( ) }, { title: '创建时间', dataIndex: 'createTime', key: 'createTime', align: 'center', }, { title: '备注', dataIndex: 'remarks', key: 'remarks', align: 'center' }, { title: '操作', key: 'action', align: 'center', render: (_, record) => ( handleView(record)} style={{ color: '#2C9E9D' }}> 查看详情 handleEdit(record)} style={{ color: '#2C9E9D' }}> 编辑 handleDelete(record)} style={{ color: '#ff4d4f' }}> 删除 ), }, ] // 选择框配置 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 (
) } 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) => ( ) }, { title: '操作', key: 'action', align: 'center', render: (_, record) => ( handleView(record)} style={{ color: '#2C9E9D' }}> 查看详情 ), }, ] 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 ( <>
setOpen(false)} row={row} > ) } 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) => ( ) }, { title: '最后更新时间', dataIndex: 'time', key: 'time', align: 'center', }, { title: '操作', key: 'action', align: 'center', render: (_, record) => ( handleView(record)} style={{ color: '#2C9E9D' }}> 查看详情 handleEdit(record)} style={{ color: '#2C9E9D' }}> 编辑 handleDelete(record)} style={{ color: '#ff4d4f' }}> 删除 ), }, ]; // 选择框配置 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 (
); } 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 (
上限:{value['上限']}
下限:{value['下限']}
单位:{value['单位']}
) } }, { title: '测点名称', dataIndex: 'point', key: 'point', align: 'center', }, { title: '操作', key: 'action', align: 'center', render: (_, record) => ( handleEdit(record)} style={{ color: '#2C9E9D' }}> 编辑 handleDelete(record)} style={{ color: '#ff4d4f' }}> 删除 ), }, ] // 获取表格数据 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 (
); } // 分页组件 export const TablePagination = ({ currentPage, pageSize, total, onPageChange, onPageSizeChange }) => { return (
`共 ${total} 条`} pageSizeOptions={['10', '20', '50', '100']} />
); }; const PeopleMange = () => { 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 (
) } const ClassMange = () => { 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 (
) } const TimeMange = () => { const [viewState, setViewState] = useState('view0') const view0 = useRef(null) const view1 = useRef(null) const checkView = (viewState) => { setViewState(viewState) } useEffect(() => { view0.current.classList.remove('view-active') view1.current.classList.remove('view-active') if (viewState === 'view0') { view0.current.style.backgroundColor = '#045F5E80' view1.current.style.backgroundColor = '#B7E5D533' view0.current.style.color = '#fff' view1.current.style.color = '#000' } else { view0.current.style.backgroundColor = '#B7E5D533' view1.current.style.backgroundColor = '#045F5E80' view0.current.style.color = '#000' view1.current.style.color = '#fff' } }, [viewState]) return (
< 2025年8月 >
上次编辑: 李朔   2025-7-22 09:34
{/**/}
岗位类型} name="type" > 姓名} name="type1" > 班组} name="type2" >
) } const PatrolRouteQuery = () => { 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); // 重置到第一页 }; const treeData = [ { title: '班次', key: '班次', children: [ { title: '白班', key: '白班', }, { title: '中班', key: '中班', }, { title: '夜班', key: '夜班', }, { title: '中班巡检', key: '中班巡检', }, { title: '夜班二巡检', key: '夜班二巡检', }, ] }, { title: '专业', key: '专业', children: [ { title: '电器专业', key: '电器专业', }, { title: '水处理', key: '水处理', }, ] }, { title: '区域', key: '区域', children: [ { title: '发电机区域', key: '发电机区域', }, { title: '中水处区', key: '中水处区', }, { title: '除盐水区域', key: '除盐水区域', }, ] }, ] return (
) } 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 (
{/* 左侧树形结构 */}
| 巡检范围
{/* 右侧背景图和内容 */}
{/* 背景图 */} 智能巡检范围监控 {/* 区域基础信息框 */}
区域基础信息
区域名称:高危罐区 - 3#-9#罐组
区域编号:第2节点 (指挥中心→高危罐区)
巡检状态:正在巡检
完成进度:设备4/30台
{/* 巡检覆盖清单框 */}
巡检覆盖清单
覆盖主体
重点设备:储罐×8、3#-9#罐组、罐前付转装置
检测方式:红外检测、视觉识别
环境监控:声噪、消防水池监测
管控单位:3#罐区特种管控部门
{/* 机器人图标 */}
🤖
机器人实时位置
{/* 绿色圆点标记 */}
高危罐区
常规罐区
) }; // 智能巡检内容监控中心组件 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 (

实时监测区

{/*
*/}
红外热成像图
当前最高温: 89°C

实时温度: 89°C

高温异常: 80°C

当前监测区域: 罐区管道连接处检测

检测原理说明

"搭载红外热成像测温仪,覆盖电缆、胶管、设备高温点;温度达到阈值时自动上报故障,同步录制热成像/可见光视频,为故障分析提供数据支撑。"

异常历史记录

序号 故障时间 检测区域 异常温度 处理状态 操作
1 2025-10-16 14:20 1# 泵房电机 92°C 已处理
2 2025-10-16 14:20 1# 泵房电机 92°C 已处理
共 85 条
10 / page ... ...
); case '温湿度检测': case '跑冒滴漏检测': case '仪器仪表采集': case '环境监测': return (

该模块正在开发中...

); default: return null; } }; return (
| 智能巡检内容监控中心
{renderContent()}
); }; // 任务规划与执行流程组件 const TaskPlanningFlow = () => { return (
{/* 顶部标题 */}
接班班组签到
当前多机协作任务完成时间较单机缩短 62%
{/* 顶部控制区域 */} {/* 左侧任务状态选择框 */}
任务状态: