sass警告
This commit is contained in:
@@ -10,6 +10,7 @@ import type { MenuItemRaw } from '@/api/menu'
|
||||
* 【新增页面时】在这里加一条映射即可,后端返回对应的 key 就能自动注册路由
|
||||
*/
|
||||
const componentMap: Record<string, () => Promise<any>> = {
|
||||
'Jobs': () => import('@/views/Jobs.vue'),
|
||||
'Agent': () => import('@/views/Agent.vue'),
|
||||
'Profile': () => import('@/views/Profile.vue'),
|
||||
'Resume': () => import('@/views/Resume.vue'),
|
||||
@@ -19,11 +20,17 @@ const componentMap: Record<string, () => Promise<any>> = {
|
||||
* 把后端返回的菜单数据转换成 vue-router 能识别的 RouteRecordRaw
|
||||
*
|
||||
* 如果后端返回了一个 component 字符串在映射表里找不到,会跳过该条路由并打印警告
|
||||
* 已在静态路由中注册的路径(如 /jobs)不再重复注册
|
||||
*/
|
||||
const STATIC_PATHS = ['/', '/jobs', '/resume/:id', '/jobs/:id']
|
||||
|
||||
export function buildDynamicRoutes(menus: MenuItemRaw[]): RouteRecordRaw[] {
|
||||
const routes: RouteRecordRaw[] = []
|
||||
|
||||
for (const item of menus) {
|
||||
// 跳过已在静态路由中注册的路径
|
||||
if (STATIC_PATHS.includes(item.path)) continue
|
||||
|
||||
const comp = componentMap[item.component]
|
||||
if (!comp) {
|
||||
console.warn(`[dynamicRoutes] 组件映射表中找不到 "${item.component}",已跳过`)
|
||||
|
||||
+6
-2
@@ -37,10 +37,11 @@ const CHECK_INTERVAL = 5 * 60 * 1000 // 5 分钟
|
||||
* 全局前置守卫 — 核心逻辑:
|
||||
*
|
||||
* 1. 动态路由未加载 → 先拉取并注册,再重新进入当前路由
|
||||
* 2. 需要鉴权的路由 → 调 checkLogin 接口验证 Cookie 是否有效
|
||||
* 2. 每次页面切换都刷新路由菜单数据(权限可能变化)
|
||||
* 3. 需要鉴权的路由 → 调 checkLogin 接口验证 Cookie 是否有效
|
||||
* - 有效:同步 isAuthenticated = true,放行
|
||||
* - 无效:同步 isAuthenticated = false,弹登录框,阻止导航
|
||||
* 3. 不需要鉴权的路由 → 静默同步登录状态(不阻止导航、不弹登录框),5 分钟内节流
|
||||
* 4. 不需要鉴权的路由 → 静默同步登录状态(不阻止导航、不弹登录框),5 分钟内节流
|
||||
*/
|
||||
router.beforeEach(async (to, _from, next) => {
|
||||
// 动态路由只需加载一次,与登录状态无关
|
||||
@@ -55,6 +56,9 @@ router.beforeEach(async (to, _from, next) => {
|
||||
return
|
||||
}
|
||||
|
||||
// 每次页面切换时静默刷新路由菜单数据(更新权限状态),不阻塞导航
|
||||
store.dispatch('refreshDynamicMenus')
|
||||
|
||||
// 需要鉴权的路由,每次都通过接口校验登录状态
|
||||
if (to.meta?.requiresAuth) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user