import { Navbar } from "@contentful/f36-navbar"; import { MagnifyingGlassIcon, QuestionIcon, GearSixIcon, } from "@contentful/f36-icons"; import { useAuth } from "../../contexts/AuthContext"; import { useMenu } from "../../contexts/MenuContext"; import { useNavigate, useLocation } from "react-router-dom"; import { useEffect, useState } from "react"; import type { JeecgMenu } from "../../types/menu"; import SearchModal from "../../components/SearchModal"; export default function Header() { const { menus, loading } = useAuth(); const { activeFirstMenu, setActiveFirstMenu, setActiveSecondMenu } = useMenu(); const navigate = useNavigate(); const location = useLocation(); const [isSearchOpen, setIsSearchOpen] = useState(false); // 获取顶级菜单(一级菜单) const topMenus = menus.filter((menu) => !menu.hidden && !menu.meta?.hideMenu); // 根据当前路由自动设置活动菜单 useEffect(() => { const path = location.pathname; const segments = path.split("/").filter(Boolean); const firstPath = segments[0]; const matchedMenu = topMenus.find((menu) => { const menuPath = menu.path || ""; const menuSegments = menuPath.split("/").filter(Boolean); return menuSegments[0] === firstPath; }); if (matchedMenu && matchedMenu.id !== activeFirstMenu?.id) { setActiveFirstMenu(matchedMenu); setActiveSecondMenu(null); } }, [ location.pathname, topMenus, activeFirstMenu, setActiveFirstMenu, setActiveSecondMenu, ]); // 处理菜单点击 const handleMenuClick = (menu: JeecgMenu, child?: JeecgMenu) => { if (child) { // 点击子菜单 setActiveFirstMenu(menu); setActiveSecondMenu(child); navigate(child.path || ""); } else { // 点击一级菜单(无子菜单) setActiveFirstMenu(menu); setActiveSecondMenu(null); navigate(menu.path || ""); } }; // 跳转到权限管理 const toPermissionPage = () => { debugger; }; // 退出登录 const loginOut = () => { navigate('/login') } if (loading) { return
加载中...
; } // 渲染主导航(桌面端) const mainNavigation = ( <> {topMenus.map((menu) => { const hasChildren = menu.children && menu.children.length > 0; const isActive = activeFirstMenu?.id === menu.id; if (hasChildren) { // 有子菜单的项目 return ( {menu.children ?.filter((child) => !child.hidden && !child.meta?.hideMenu) .map((child) => ( handleMenuClick(menu, child)} /> ))} ); } else { // 无子菜单的项目 return ( handleMenuClick(menu)} /> ); } })} ); // 渲染移动端导航 const mobileNavigation = ( <> {topMenus.map((menu) => { const hasChildren = menu.children && menu.children.length > 0; if (hasChildren) { // 有子菜单的项目 return ( {menu.children ?.filter((child) => !child.hidden && !child.meta?.hideMenu) .map((child) => ( handleMenuClick(menu, child)} /> ))} ); } else { // 无子菜单的项目 return ( handleMenuClick(menu)} /> ); } })} ); // 右侧辅助导航 const secondaryNavigation = ( <> } onClick={() => setIsSearchOpen(true)} /> }> }> 通用 空间 ); return ( <> // } secondaryNavigation={secondaryNavigation} account={ } aria={{ labelMainNavigation: "主导航", labelSecondaryNavigation: "辅助导航", labelAccount: "我的账户", }} /> {/* 搜索对话框 */} setIsSearchOpen(false)} /> ); }