diff --git a/src/layout.tsx b/src/layout.tsx
index 7f9dfcb..2208909 100644
--- a/src/layout.tsx
+++ b/src/layout.tsx
@@ -1,11 +1,15 @@
import React, { useState, useMemo, useRef, useEffect } from 'react';
import { Switch, Route, Redirect, useHistory } from 'react-router-dom';
-import { Layout, Menu, Breadcrumb, Spin } from '@arco-design/web-react';
+import { Layout, Menu, Spin, Button } from '@arco-design/web-react';
import cs from 'classnames';
import {
IconUser,
IconMenuFold,
IconMenuUnfold,
+ IconApps,
+ IconHome,
+ IconRefresh,
+ IconQuestionCircle,
} from '@arco-design/web-react/icon';
import { useSelector, useDispatch } from 'react-redux';
import qs from 'query-string';
@@ -19,7 +23,9 @@ import useLocale from './utils/useLocale';
import getUrlParams from './utils/getUrlParams';
import lazyload from './utils/lazyload';
import { GlobalState } from './store';
+import { useUserStore } from './store/userStore';
import { TabItem } from './types/tabs';
+import { getUserInfo as fetchUserInfoAPI } from '@/api/auth';
import styles from './style/layout.module.less';
const MenuItem = Menu.Item;
@@ -28,6 +34,21 @@ const SubMenu = Menu.SubMenu;
const Sider = Layout.Sider;
const Content = Layout.Content;
+function findRouteByKey(key: string, routeList: IRoute[] = []): IRoute | null {
+ for (const route of routeList) {
+ if (route.key === key) {
+ return route;
+ }
+ if (route.children?.length) {
+ const child = findRouteByKey(key, route.children);
+ if (child) {
+ return child;
+ }
+ }
+ }
+ return null;
+}
+
// 简单的404页面组件
function NotFound() {
return (
@@ -54,7 +75,7 @@ function getIconFromKey(key) {
case 'user-management':
return ;
default:
- return
;
+ return ;
}
}
@@ -92,22 +113,65 @@ function PageLayout() {
const pathname = history.location.pathname;
const currentComponent = qs.parseUrl(pathname).url.slice(1);
const locale = useLocale();
- const { settings, userLoading, userInfo } = useSelector(
- (state: GlobalState) => state
- );
+
+ // 从 Redux 获取 settings 和 tabs
+ const { settings } = useSelector((state: GlobalState) => state);
+
+ // 从 Zustand 获取用户信息
+ const { userInfo, userLoading, setUserInfo, updateUserInfo, setUserLoading } =
+ useUserStore();
const [routes, defaultRoute] = useRoute(userInfo?.permissions);
const defaultSelectedKeys = [currentComponent || defaultRoute];
const paths = (currentComponent || defaultRoute).split('/');
const defaultOpenKeys = paths.slice(0, paths.length - 1);
- const [breadcrumb, setBreadCrumb] = useState([]);
+ const [breadcrumb, setBreadCrumb] = useState([]);
const [collapsed, setCollapsed] = useState(false);
const [selectedKeys, setSelectedKeys] =
useState(defaultSelectedKeys);
const [openKeys, setOpenKeys] = useState(defaultOpenKeys);
- const routeMap = useRef