tansci-boot/tansci-boot-ui/src/router/index.ts

62 lines
1.7 KiB
TypeScript

import { createRouter, createWebHistory } from "vue-router"
import { ElMessage } from 'element-plus'
import { getToken, removeToken, removeUser, setMenus } from "@/api/auth"
import { generateRoutes } from "./permission"
import common from './common'
const router = createRouter({
history: createWebHistory(),
routes: [
...common
]
})
const whiteList = ['/login']
let load = false
router.beforeEach(async (to:any, from:any, next) => {
// 设置头部
if(to.meta.title){
document.title = to.meta.title
} else {
document.title = "Tansci Boot"
}
if(getToken()){
// if(to.path === '/login'){
// next({ path: '/index' })
// } else {
if(load){
next()
} else {
load = true
try {
// 获取菜单
await generateRoutes().then( (accessRoutes:any) => {
accessRoutes.push({path:'/:pathMatch(.*)*', redirect:'/404'})
accessRoutes.forEach( (item:any) => {
router.addRoute(item)
})
let routers = common.concat(accessRoutes)
setMenus([...routers])
})
next({ ...to, replace: true })
} catch (error:any) {
removeToken()
removeUser()
ElMessage.error(error.data || 'Has Error')
next(`/login`)
}
}
// }
} else {
if(whiteList.indexOf(to.path) !== -1){
next()
} else {
next({ path: "/login" })
}
}
})
export default router