import React, { useState, useEffect } from 'react' import { history, Outlet, useLocation, matchRoutes, useModel } from '@umijs/max' import { Menu, Tabs, Select } from 'antd' import './SystemContentList.less' import { formatRoute, getDefaultRoute } from '@/utils/routeUtils' import styles from './TopNavBar.less' import { Row, Col, Avatar, Dropdown, Button } from 'antd' import { userInfo } from '@/utils/globalCommon' import { HomeOutlined, LogoutOutlined, AppstoreOutlined, UserOutlined, SettingOutlined, DatabaseOutlined, FileTextOutlined, LockOutlined, AreaChartOutlined, CaretDownOutlined, BellOutlined, SearchOutlined, QuestionCircleOutlined } from '@ant-design/icons' import { getPageQuery } from '@/utils/utils' import menuTitle from '@/assets/img/智能管控平台.svg' import menuTitle1 from '@/assets/img/智能管控平台-1.svg' import fireHydrant from '@/assets/img/fireHydrant.svg' import fireHydrant1 from '@/assets/img/fireHydrant1.svg' import riskClassification from '@/assets/img/riskclassification.svg' import trouble from '@/assets/img/trouble.svg' import book from '@/assets/img/book.svg' import danger from '@/assets/img/danger.svg' import danger1 from '@/assets/img/danger1.svg' import license from '@/assets/img/license.svg' import licenseLight from '@/assets/img/licenseLight.svg' import people from '@/assets/img/people.svg' import risk from '@/assets/img/risk.svg' import safeEducationLight from '@/assets/img/safeEducationLight.svg' import bookDark from '@/assets/img/bookDark.svg' import bookLight from '@/assets/img/bookLight.svg' import personnelPosition2 from '@/assets/img/personnelPosition2.svg' import { CustomBreadcrumb } from '@/components/GlobalComponent' // 自定义菜单项渲染组件,支持根据激活状态显示不同图片 const CustomMenuItem = ({ item, selectedKeys }) => { const isActive = selectedKeys.includes(item.key); // 为每个菜单项定义激活状态的图片 // 如果没有专门的激活状态图片,则使用默认图片 const getActiveIcon = (baseIcon) => { // 这里可以根据需要为每个图标定义对应的激活状态图片 // 目前暂时使用相同的图片,用户可以根据实际情况替换 return baseIcon; }; const renderIcon = () => { if (item.icon && typeof item.icon === 'object' && item.icon.props && item.icon.props.src) { const iconSrc = isActive ? getActiveIcon(item.icon.props.src) : item.icon.props.src; return {item.icon.props.alt } return item.icon; }; const renderMenuItem = (menuItem) => ({ ...menuItem, icon: renderIcon(), children: menuItem.children?.map(child => renderMenuItem(child)) }); return renderMenuItem(item); }; const SystemContentList = (props) => { const dynamicRoute = window.dynamicRoute console.log(dynamicRoute) const location = useLocation() const pathName = location.pathname const [openKey, setOpenKey] = useState([]) const [selectedKey, setSelectedKey] = useState([]) const [menuItems, setMenuItems] = useState([]) const [systemType, setSystemType] = useState('安全管理系统') const [isMenuCollapsed, setIsMenuCollapsed] = useState(false); // 添加菜单收缩状态 let defaultKey = '' useEffect(() => { console.log('dynamicRoute structure:', dynamicRoute) if (!dynamicRoute || dynamicRoute?.length === 0) return let newList = [] let routes = [] if (dynamicRoute?.length) { let tempRoute = dynamicRoute?.filter(item => pathName.indexOf(item.key) !== -1) ?? [] newList = formatRoute(tempRoute[0]?.children) routes = formatRoute(tempRoute[0]?.children, true) defaultKey = getDefaultRoute(routes) const mathRoute = matchRoutes(routes, pathName) setRouteActive({ key: mathRoute?.length ? pathName : defaultKey }, routes) } setMenuItems(newList) const fixedMenuItems = [ { "path": "/topnavbar00/hrefficiency/basicinformation", icon: 安全管理基础信息, "key": "/topnavbar00/hrefficiency/basicinformation", "label": "安全管理基础信息" }, { "path": "/topnavbar00/hrefficiency/safeMajorHazard", icon: 重大危险源管理, "key": "/topnavbar00/hrefficiency/safeMajorHazard", "label": "重大危险源管理" }, { "path": "/topnavbar00/hrefficiency/riskclassification", icon: 风险分级管控, "key": "/topnavbar00/hrefficiency/riskclassification", "label": "风险分级管控" }, { "path": "/topnavbar00/hrefficiency/hiddentrouble", icon: 工时仪表盘, "key": "/topnavbar00/hrefficiency/hiddentrouble", "label": "隐患排查" }, { "path": "/topnavbar00/hrefficiency/safetraining", icon: 安全教育培训, "key": "/topnavbar00/hrefficiency/safetraining", "label": "安全教育培训" }, { "path": "/topnavbar00/hrefficiency/personnellocation", icon: 人员定位, "key": "/topnavbar00/hrefficiency/personnellocation", "label": "人员定位" }, { "path": "/topnavbar00/hrefficiency/specialoperationpermit", icon: 特殊作业许可, "key": "/topnavbar00/hrefficiency/specialoperationpermit", "label": "特殊作业许可" }, { "path": "/topnavbar00/hrefficiency/system", icon: 工时仪表盘, "key": "/topnavbar00/hrefficiency/system", "label": "系统管理", "children": [ { "path": "/topnavbar00/hrefficiency/system/systemOrganization", "key": "/topnavbar00/hrefficiency/system/systemOrganization", "label": "组织管理" }, { "path": "/topnavbar00/hrefficiency/system/systemRole", "key": "/topnavbar00/hrefficiency/system/systemRole", "label": "角色配置" }, { "path": "/topnavbar00/hrefficiency/system/systemMenu", "key": "/topnavbar00/hrefficiency/system/systemMenu", "label": "菜单配置" } ] } ] setMenuItems(fixedMenuItems) // 初始化默认路由 const defaultRoute = fixedMenuItems[0]?.key || '' const mathRoute = matchRoutes(fixedMenuItems, pathName) setRouteActive({ key: mathRoute?.length ? pathName : defaultRoute }, fixedMenuItems) }, [pathName]) const setRouteActive = (value, menu) => { const curKey = value.key const tempMenu = menu ?? menuItems ?? [] const mathRoute = matchRoutes(tempMenu, curKey) let openKeys = [] let selectedKeys = [] mathRoute?.map((item, index) => { mathRoute?.length !== index + 1 && (openKeys = [...openKeys, item.pathname]) mathRoute?.length === index + 1 && (selectedKeys = [...selectedKeys, item.pathname]) }) setOpenKey(openKeys) setSelectedKey(selectedKeys) history.replace(curKey) } // 切换菜单收缩状态 const toggleMenu = () => { setIsMenuCollapsed(!isMenuCollapsed); }; const { initialState: { menu }, setInitialState } = useModel('@@initialState') const loginOut = async () => { // await outLogin() const { redirect } = getPageQuery() if (window.location.pathname !== '/login/login' && !redirect) { history.replace({ pathname: '/login', // search: stringify({ // redirect: window.location.href, // }), }) setInitialState({ currentUser: null, menu: null, menuMap: null }) window.dynamicRoute = null localStorage.clear() } } const handleMenuClick = (e) => { switch (e.key) { case 'logout': loginOut() break default: break } } const dropDownMenuItems = [ { label: <>退出登录, key: 'logout' } ] const dropDownMenu = () => ( ) return (
menuTitle menuTitle1