diff --git a/apps/admin/src/layouts/MainLayout.tsx b/apps/admin/src/layouts/MainLayout.tsx index 0fda368..e149949 100644 --- a/apps/admin/src/layouts/MainLayout.tsx +++ b/apps/admin/src/layouts/MainLayout.tsx @@ -1,6 +1,6 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState } from 'react'; import { Outlet, useNavigate, useLocation } from 'react-router-dom'; -import { Layout, Menu, Button, Avatar, Dropdown, Drawer } from 'antd'; +import { Layout, Menu, Button, Avatar, Dropdown, Drawer, Grid } from 'antd'; import { DashboardOutlined, TeamOutlined, @@ -84,18 +84,16 @@ const allMenuItems: MenuItemType[] = [ const MainLayout: React.FC = () => { const [collapsed, setCollapsed] = useState(false); - const [isMobile, setIsMobile] = useState(window.innerWidth < 768); const [drawerOpen, setDrawerOpen] = useState(false); const navigate = useNavigate(); const location = useLocation(); const user = JSON.parse(localStorage.getItem('user') || '{}'); const { hasPermission } = usePermission(); - useEffect(() => { - const handleResize = () => setIsMobile(window.innerWidth < 768); - window.addEventListener('resize', handleResize); - return () => window.removeEventListener('resize', handleResize); - }, []); + const screens = Grid.useBreakpoint(); + const isMobile = !screens.sm; // < 576px (仅 xs) + const isTablet = (screens.sm || screens.md) && !screens.lg; // 576-991px + const isDesktop = !!screens.lg; // >= 992px // 按 permission 过滤菜单 const filterByPermission = (items: MenuItemType[]): MenuItemType[] => { @@ -152,7 +150,7 @@ const MainLayout: React.FC = () => { @@ -163,12 +161,12 @@ const MainLayout: React.FC = () => { alignItems: 'center', justifyContent: 'center', color: '#1d1d1f', - fontSize: collapsed ? 16 : 17, + fontSize: (isTablet || collapsed) ? 16 : 17, fontWeight: 600, borderBottom: '1px solid #e5e5e7', }} > - {collapsed ? '恭' : '恭学教育基地'} + {(isTablet || collapsed) ? '恭' : '恭学教育基地'} {menuContent} @@ -200,7 +198,7 @@ const MainLayout: React.FC = () => {