diff --git a/frontend/src/components/AdminLayout.tsx b/frontend/src/components/AdminLayout.tsx index 59366ad..8b6f70f 100644 --- a/frontend/src/components/AdminLayout.tsx +++ b/frontend/src/components/AdminLayout.tsx @@ -28,8 +28,13 @@ const AdminLayout = () => { const { message } = App.useApp(); const { themeMode, toggleTheme } = useThemeStore(); + // 跟踪用户是否手动修改过 openKeys + const [userInteracted, setUserInteracted] = useState(false); + // 用户手动设置的 openKeys + const [userOpenKeys, setUserOpenKeys] = useState([]); + // 根据当前路径计算应该展开的菜单 - const openKeys = useMemo(() => { + const defaultOpenKeys = useMemo(() => { const path = location.pathname; if (path.startsWith('/admin/users')) { return ['user']; @@ -37,6 +42,17 @@ const AdminLayout = () => { return []; }, [location.pathname]); + // 最终使用的 openKeys:如果用户手动修改过,使用用户的设置;否则使用默认值 + const openKeys = useMemo(() => { + return userInteracted ? userOpenKeys : defaultOpenKeys; + }, [userInteracted, userOpenKeys, defaultOpenKeys]); + + // 处理菜单展开/收起 + const handleOpenChange = (keys: string[]) => { + setUserInteracted(true); + setUserOpenKeys(keys); + }; + const handleLogout = async () => { try { await adminAuthService.logout(); @@ -97,6 +113,7 @@ const AdminLayout = () => { mode="inline" selectedKeys={[location.pathname]} openKeys={openKeys} + onOpenChange={handleOpenChange} items={menuItems} onClick={({ key }) => navigate(key)} /> diff --git a/frontend/src/theme/index.ts b/frontend/src/theme/index.ts index 64cc9fb..0c37a03 100644 --- a/frontend/src/theme/index.ts +++ b/frontend/src/theme/index.ts @@ -82,4 +82,4 @@ export const getThemeByMode = (mode: ThemeMode): ThemeConfig => { }; // 默认主题配置(向后兼容) -export const appTheme: ThemeConfig = darkTheme; +export const appTheme: ThemeConfig = lightTheme;