整体链接
Change-Id: Id3379c6188613acdc95548964f19e317eda8dc4f
diff --git a/src/route/privateRoute.tsx b/src/route/privateRoute.tsx
index 992f372..2a1441a 100644
--- a/src/route/privateRoute.tsx
+++ b/src/route/privateRoute.tsx
@@ -1,6 +1,10 @@
import { Navigate, Outlet } from 'react-router-dom'
-import React from 'react'
+import React, { useEffect, useState } from 'react'
import { useSelector } from 'react-redux'
+import { useApi } from '@/hooks/request'
+import request from '@/utils/request'
+import { getUserInfo } from '@/api/user'
+import { useAppDispatch } from '@/hooks/store'
interface PrivateRouteProps {
role: number
@@ -15,6 +19,30 @@
}: PrivateRouteProps) => {
const isLogin = useSelector((state: any) => state.user.isLogin)
const userRole = useSelector((state: any) => state.user.role)
+ const userId = useSelector((state: any) => state.user.userId)
+ const dispatch = useAppDispatch()
+ const [hasFetchedUser, setHasFetchedUser] = useState(false) // 防止重复请求
+ const { refresh: getUserInfoRefresh } = useApi(
+ () => request.get(getUserInfo),
+ false
+ )
+
+ useEffect(() => {
+ if (isLogin && !userId && !hasFetchedUser) {
+ const fetchUserInfo = async () => {
+ try {
+ const userInfo = await getUserInfoRefresh()
+ if (userInfo && !(userInfo as any).error) {
+ dispatch({ type: 'user/getUserInfo', payload: userInfo.userInfo })
+ setHasFetchedUser(true) // 标记已请求
+ }
+ } catch (error) {
+ console.error('获取用户信息失败:', error)
+ }
+ }
+ fetchUserInfo()
+ }
+ }, [isLogin, userId, hasFetchedUser, dispatch, getUserInfoRefresh])
if (!isLogin) {
return <Navigate to={redirectPath} replace />
@@ -24,12 +52,7 @@
return <Navigate to={redirectPath} replace />
}
- return children ? (
- <>{children}</>
- ) : (
- <Outlet />
- )
-
+ return children ? <>{children}</> : <Outlet />
}
export default PrivateRoute
\ No newline at end of file