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
}
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: <>