这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
2.4 KiB

import router from './router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { Message } from 'element-ui'
import { Route } from 'vue-router'
import { UserModule } from '@/store/modules/user'
import { AbpConfigurationModule } from '@/store/modules/abp'
import { PermissionModule } from '@/store/modules/permission'
import i18n from '@/lang' // Internationalization
import settings from './settings'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/auth-redirect', '/register', '/reset-password']
const getPageTitle = (key: string) => {
const hasKey = i18n.te(`route.${key}`)
if (hasKey) {
const pageName = i18n.t(`route.${key}`)
return `${pageName} - ${settings.title}`
}
return `${settings.title}`
}
router.beforeEach(async(to: Route, _: Route, next: any) => {
// Start progress bar
NProgress.start()
// Determine whether the user has logged in
if (UserModule.token) {
if (to.path === '/login') {
// If is logged in, redirect to the home page
next({ path: '/' })
NProgress.done()
} else {
// Check whether the user has obtained his permission roles
if (PermissionModule.authorizedPermissions.length === 0) {
try {
const { sub } = await UserModule.GetUserInfo()
// Generate accessible routes map based on role
await PermissionModule.GenerateRoutes(sub)
// Dynamically add accessible routes
router.addRoutes(PermissionModule.dynamicRoutes)
// Hack: ensure addRoutes is complete
// Set the replace: true, so the navigation will not leave a history record
next({ ...to, replace: true })
} catch (err) {
// Remove token and redirect to login page
UserModule.ResetToken()
PermissionModule.ResetPermissions()
Message.error(err || 'Has Error')
next(`/login?redirect=${to.path}`)
NProgress.done()
}
} else {
next()
}
}
} else {
// Has no token
if (whiteList.indexOf(to.path) !== -1) {
// In the free login whitelist, go directly
next()
} else {
// Other pages that do not have permission to access are redirected to the login page.
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
})
router.afterEach((to: Route) => {
// Finish progress bar
NProgress.done()
// set page title
document.title = getPageTitle(to.meta.title)
})