@@ -88,7 +88,7 @@ function BasicLayout<AuthorityType = any>({
88
88
} ,
89
89
{ siderRender : true , headerRender : true , footerRender : true } ,
90
90
) ;
91
- const displayRoutes = useMemo ( ( ) => {
91
+ const menuRoutes = useMemo ( ( ) => {
92
92
const filterNode = ( nodes : RouteConfig [ ] ) : RouteConfig [ ] => {
93
93
return nodes
94
94
. map ( ( m ) => ( { ...m } ) )
@@ -129,16 +129,21 @@ function BasicLayout<AuthorityType = any>({
129
129
} ) ;
130
130
} ;
131
131
const newRoutes = wrapNode ( routes ) ;
132
- const firstLeafNode = getFirstLeafNode ( displayRoutes ) ;
133
132
const redirectNode = newRoutes . find ( ( m ) => m . path === '/' && m . redirect ) ;
134
133
135
- if ( firstLeafNode && redirectNode && redirectNode . redirect !== firstLeafNode . path ) {
136
- redirectNode . redirect = firstLeafNode . path ;
134
+ if ( redirectNode ) {
135
+ const targetRoute = getRouteConfigByPath ( menuRoutes , redirectNode . redirect ! ) ;
136
+ const firstLeafNode = getFirstLeafNode ( menuRoutes ) ;
137
+
138
+ // 如果重定向页面无权限访问且第一个叶节点存在,则修改为跳转到第一个叶节点
139
+ if ( ! targetRoute && firstLeafNode ) {
140
+ redirectNode . redirect = firstLeafNode . path ;
141
+ }
137
142
}
138
143
139
144
return newRoutes ;
140
145
// eslint-disable-next-line react-hooks/exhaustive-deps
141
- } , [ authInfo , displayRoutes , routes ] ) ;
146
+ } , [ authInfo , menuRoutes , routes ] ) ;
142
147
const getSider = ( ) => {
143
148
const menu = pathname !== '/' && (
144
149
< Menu
@@ -156,7 +161,7 @@ function BasicLayout<AuthorityType = any>({
156
161
}
157
162
} }
158
163
>
159
- { renderMenu ( displayRoutes ) }
164
+ { renderMenu ( menuRoutes ) }
160
165
</ Menu >
161
166
) ;
162
167
return siderRender ? siderRender ( menu ) : < Sider > { menu } </ Sider > ;
0 commit comments