feat: 对未设置 redirect 的父路由,访问时将自动重定向到允许访问的子路由

This commit is contained in:
Hooray
2025-05-05 00:59:11 +08:00
parent 1edf486160
commit 8d4e226c17
6 changed files with 429 additions and 202 deletions
+1 -1
View File
@@ -57,7 +57,7 @@
"zod": "^3.24.3"
},
"devDependencies": {
"@antfu/eslint-config": "4.3.0",
"@antfu/eslint-config": "^4.12.0",
"@faker-js/faker": "^9.7.0",
"@iconify/json": "^2.2.333",
"@iconify/vue": "^4.3.0",
+406 -194
View File
File diff suppressed because it is too large Load Diff
@@ -10,7 +10,7 @@ import { useFocus } from '@vueuse/core'
import hotkeys from 'hotkeys-js'
defineOptions({
name: 'Search',
name: 'NavSearchModal',
})
const isShow = defineModel<boolean>({
-3
View File
@@ -18,7 +18,6 @@ export default defineFakeRoute([
{
path: '/multilevel_menu_example',
component: 'Layout',
redirect: '/multilevel_menu_example/page',
name: 'multilevelMenuExample',
meta: {
title: '多级导航',
@@ -36,7 +35,6 @@ export default defineFakeRoute([
{
path: 'level2',
name: 'multilevelMenuExample2',
redirect: '/multilevel_menu_example/level2/page',
meta: {
title: '导航2',
},
@@ -52,7 +50,6 @@ export default defineFakeRoute([
{
path: 'level3',
name: 'multilevelMenuExample2-2',
redirect: '/multilevel_menu_example/level2/level3/page1',
meta: {
title: '导航2-2',
},
+21
View File
@@ -112,6 +112,26 @@ function setupRoutes(router: Router) {
})
}
// 当父级路由未配置重定向时,自动重定向到有访问权限的子路由
function setupRedirectAuthChildendRoute(router: Router) {
router.beforeEach((to, _from, next) => {
const { auth } = useAuth()
const currentRoute = router.getRoutes().find(route => route.path === (to.matched.at(-1)?.path ?? ''))
if (!currentRoute?.redirect) {
const findAuthRoute = currentRoute?.children?.find(route => route.meta?.menu !== false && auth(route.meta?.auth ?? ''))
if (findAuthRoute) {
next(findAuthRoute)
}
else {
next()
}
}
else {
next()
}
})
}
// 进度条
function setupProgress(router: Router) {
const { isLoading } = useNProgress()
@@ -208,6 +228,7 @@ function setupOther(router: Router) {
export default function setupGuards(router: Router) {
setupRoutes(router)
setupRedirectAuthChildendRoute(router)
setupProgress(router)
setupTitle(router)
setupKeepAlive(router)
@@ -7,7 +7,6 @@ function Layout() {
const routes: RouteRecordRaw = {
path: '/multilevel_menu_example',
component: Layout,
redirect: '/multilevel_menu_example/page',
name: 'multilevelMenuExample',
meta: {
title: '多级导航',
@@ -25,7 +24,6 @@ const routes: RouteRecordRaw = {
{
path: 'level2',
name: 'multilevelMenuExample2',
redirect: '/multilevel_menu_example/level2/page',
meta: {
title: '导航2',
},
@@ -41,7 +39,6 @@ const routes: RouteRecordRaw = {
{
path: 'level3',
name: 'multilevelMenuExample2-2',
redirect: '/multilevel_menu_example/level2/level3/page1',
meta: {
title: '导航2-2',
},