import { useAuthStore } from '~/stores/auth' import { MENU_GROUPS, menuItemByPath } from '~/utils/menus' // 菜单权限路由守卫:侧边栏只是隐藏入口,直接敲 URL 也要拦。 // 命中菜单目录里的路径且当前账号无该菜单权限时,跳到第一个有权限的菜单(兜底登录页)。 // 仅客户端执行:auth 状态存 localStorage,服务端渲染阶段拿不到、判定必然误伤。 export default defineNuxtRouteMiddleware((to) => { if (!import.meta.client) return const auth = useAuthStore() if (!auth.token) return // 未登录由布局/登录页自身逻辑处理 const item = menuItemByPath(to.path) if (!item || auth.hasAccess(item.id)) return for (const g of MENU_GROUPS) { for (const m of g.items) { if (auth.hasAccess(m.id)) return navigateTo(m.to) } } return navigateTo('/') })