Files
urbanLifeline/urbanLifelineWeb/packages/workcase/src/router/index.ts
2025-12-13 14:13:31 +08:00

95 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
// @ts-ignore
import { TokenManager } from 'shared/api'
// @ts-ignore
import { APP_CONFIG } from 'shared/config'
// @ts-ignore
import { loadRoutesFromStorage } from './dynamicRoute'
// workcase应用的动态路由会根据layout字段自动添加不需要预定义Root布局
const routes: RouteRecordRaw[] = []
const router = createRouter({
history: createWebHistory('/workcase'), // 与nginx保持一致使用/workcase前缀
routes
})
// 标记动态路由是否已加载
let dynamicRoutesLoaded = false
// 路由守卫
router.beforeEach((to, from, next) => {
console.log('[Workcase Router] 路由守卫触发:', {
to: to.path,
from: from.path,
meta: to.meta
})
// 设置页面标题
if (to.meta.title) {
document.title = `${to.meta.title} - 工单管理系统`
}
// 检查是否需要登录
const requiresAuth = to.meta.requiresAuth !== false
const hasToken = TokenManager.hasToken()
console.log('[Workcase Router] 认证检查:', {
requiresAuth,
hasToken,
tokenValue: localStorage.getItem('token')
})
// 其他页面:检查是否需要登录
if (requiresAuth && !hasToken) {
// 需要登录但未登录,重定向到 platform 的登录页
// 重要必须使用完整URL包含origin避免被workcase的路由拦截造成循环
const currentUrl = window.location.href
const origin = window.location.origin
// 构建platform登录页的完整URL
const loginUrl = `${origin}/login?redirect=${encodeURIComponent(currentUrl)}`
console.log('[Workcase Router] 未登录重定向到Platform登录页:', loginUrl)
// 使用完整URL跳转跳出workcase的路由系统
window.location.href = loginUrl
return
}
// 如果已登录且动态路由未加载,先加载动态路由
if (hasToken && !dynamicRoutesLoaded) {
console.log('[Workcase Router] 开始加载动态路由...')
console.log('[Workcase Router] LocalStorage 内容:', {
loginDomain: localStorage.getItem('loginDomain'),
token: localStorage.getItem('token')
})
dynamicRoutesLoaded = true
const loaded = loadRoutesFromStorage?.()
console.log('[Workcase Router] 动态路由加载结果:', loaded)
console.log('[Workcase Router] 当前路径:', to.path)
console.log('[Workcase Router] 所有路由:', router.getRoutes().map(r => r.path))
if (loaded) {
// 动态路由加载成功,重新导航以匹配新添加的路由
console.log('[Workcase Router] 动态路由加载成功,重新导航到:', to.path)
next({ ...to, replace: true })
return
} else {
console.warn('[Workcase Router] 动态路由加载失败')
}
}
console.log('[Workcase Router] 继续正常导航')
next()
})
// 重置动态路由加载状态
export function resetDynamicRoutes() {
dynamicRoutesLoaded = false
}
export default router