|
@@ -1,6 +1,6 @@
|
|
import { AxiosWrapper } from '@/utils/axios-wrapper'
|
|
import { AxiosWrapper } from '@/utils/axios-wrapper'
|
|
import { UserStore } from '@/store/user'
|
|
import { UserStore } from '@/store/user'
|
|
-import { cloneDeep, isArray, omit } from 'lodash-es'
|
|
|
|
|
|
+import { cloneDeep, get, isArray, omit } from 'lodash-es'
|
|
import NProgress from 'nprogress'
|
|
import NProgress from 'nprogress'
|
|
import 'nprogress/nprogress.css'
|
|
import 'nprogress/nprogress.css'
|
|
import { ElMessageBox } from 'element-plus'
|
|
import { ElMessageBox } from 'element-plus'
|
|
@@ -73,7 +73,7 @@ const routesRegister = (menus, defaultRoutes, router) => {
|
|
for (const route of menus) {
|
|
for (const route of menus) {
|
|
const { type, route_name, path, component, parent_id } = route
|
|
const { type, route_name, path, component, parent_id } = route
|
|
if (!path) {
|
|
if (!path) {
|
|
- console.log(route)
|
|
|
|
|
|
+ // console.log(route)
|
|
}
|
|
}
|
|
// 检查路由是否已存在,存在跳过
|
|
// 检查路由是否已存在,存在跳过
|
|
const hasRoute = defaultRoutes.find((f) => f.path === path)
|
|
const hasRoute = defaultRoutes.find((f) => f.path === path)
|
|
@@ -127,6 +127,8 @@ const resetMenus = (menus) => {
|
|
return result
|
|
return result
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const dontRedirectList = ['/login', '/', '/401', '/404']
|
|
|
|
+
|
|
// 注册前置守卫
|
|
// 注册前置守卫
|
|
export const registerBeforeRouter = async (router) => {
|
|
export const registerBeforeRouter = async (router) => {
|
|
router.beforeEach(async (to, from, next) => {
|
|
router.beforeEach(async (to, from, next) => {
|
|
@@ -141,43 +143,91 @@ export const registerBeforeRouter = async (router) => {
|
|
NProgress.inc()
|
|
NProgress.inc()
|
|
if (to.path === '/login') next()
|
|
if (to.path === '/login') next()
|
|
NProgress.inc()
|
|
NProgress.inc()
|
|
- const { menus, errcode, errmsg } = await getUserMeta(token)
|
|
|
|
- // 登录信息有问题
|
|
|
|
- if (errcode !== 0) {
|
|
|
|
- if (errcode.includes('FRAMEERROR_401')) {
|
|
|
|
- await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
|
|
|
|
- confirmButtonText: i18n.global.t('common.re_login'),
|
|
|
|
- type: 'error',
|
|
|
|
- })
|
|
|
|
- next('/login')
|
|
|
|
|
|
+ try {
|
|
|
|
+ const { menus, errcode, errmsg } = await getUserMeta(token)
|
|
|
|
+ // 登录信息有问题
|
|
|
|
+ if (errcode !== 0) {
|
|
|
|
+ if (errcode.includes('FRAMEERROR_401')) {
|
|
|
|
+ await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
|
|
|
|
+ confirmButtonText: i18n.global.t('common.re_login'),
|
|
|
|
+ type: 'error'
|
|
|
|
+ })
|
|
|
|
+ const fp = from.path
|
|
|
|
+ const noneed = dontRedirectList.includes(fp)
|
|
|
|
+ if (noneed) next('/login')
|
|
|
|
+ else next(`/login?redirect=${from.fullPath}`)
|
|
|
|
+ return
|
|
|
|
+ } else {
|
|
|
|
+ await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
|
|
|
|
+ confirmButtonText: i18n.global.t('common.re_login'),
|
|
|
|
+ type: 'error'
|
|
|
|
+ })
|
|
|
|
+ // location.reload()
|
|
|
|
+ const fp = from.path
|
|
|
|
+ const noneed = dontRedirectList.includes(fp)
|
|
|
|
+ if (noneed) next('/login')
|
|
|
|
+ else next(`/login?redirect=${from.fullPath}`)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 菜单格式不正确
|
|
|
|
+ if (!menus) {
|
|
|
|
+ next('/401')
|
|
return
|
|
return
|
|
- } else {
|
|
|
|
- await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
|
|
|
|
- confirmButtonText: i18n.global.t('common.re_login'),
|
|
|
|
- type: 'error'
|
|
|
|
- })
|
|
|
|
- location.reload()
|
|
|
|
}
|
|
}
|
|
- }
|
|
|
|
- // 菜单格式不正确
|
|
|
|
- if (!menus) {
|
|
|
|
- next('/401')
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- // 检查目的地路由是否注册
|
|
|
|
- const hasRoute = hasNecessaryRoute(to, router)
|
|
|
|
- NProgress.inc()
|
|
|
|
- if (hasRoute || to.meta.hidden) {
|
|
|
|
- // 注册了直接进入
|
|
|
|
- next()
|
|
|
|
- } else {
|
|
|
|
- // 没注册就先注册再重定向进入直到进入为止
|
|
|
|
- await addUserRoutes(menus, router)
|
|
|
|
|
|
+ // 检查目的地路由是否注册
|
|
|
|
+ const hasRoute = hasNecessaryRoute(to, router)
|
|
NProgress.inc()
|
|
NProgress.inc()
|
|
- next({ ...to, replace: true })
|
|
|
|
|
|
+ // console.log(`hasRoute`)
|
|
|
|
+ // console.log(hasRoute)
|
|
|
|
+ // const t = router.getRoutes()
|
|
|
|
+ // console.log(`t`)
|
|
|
|
+ // console.log(JSON.parse(JSON.stringify(t)))
|
|
|
|
+ if (hasRoute || to.meta.hidden) {
|
|
|
|
+ // 注册了直接进入
|
|
|
|
+ // console.log(`if: to.path`)
|
|
|
|
+ if (get(from, 'query.redirect')) {
|
|
|
|
+ const redirect = get(from, 'query.redirect')
|
|
|
|
+ from.query = {}
|
|
|
|
+ next(redirect)
|
|
|
|
+ return
|
|
|
|
+ } else {
|
|
|
|
+ next()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 没注册就先注册再重定向进入直到进入为止
|
|
|
|
+ await addUserRoutes(menus, router)
|
|
|
|
+ NProgress.inc()
|
|
|
|
+ // const t2 = router.getRoutes()
|
|
|
|
+ // console.log(`t2`)
|
|
|
|
+ // console.log(JSON.parse(JSON.stringify(t2)))
|
|
|
|
+ // const t3 = hasNecessaryRoute(to, router)
|
|
|
|
+ // console.log('t3')
|
|
|
|
+ // console.log(JSON.parse(JSON.stringify(t3)))
|
|
|
|
+ // console.log('to')
|
|
|
|
+ // console.log(JSON.parse(JSON.stringify(to)))
|
|
|
|
+ // console.log(`else: to.path`)
|
|
|
|
+ if (get(from, 'query.redirect')) {
|
|
|
|
+ const redirect = get(from, 'query.redirect')
|
|
|
|
+ from.query = {}
|
|
|
|
+ next(redirect)
|
|
|
|
+ } else {
|
|
|
|
+ await next(to)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // next({ ...to, replace: true })
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {
|
|
|
|
+ const fp = from.path
|
|
|
|
+ const noneed = dontRedirectList.includes(fp)
|
|
|
|
+ if (noneed) next('/login')
|
|
|
|
+ else next(`/login?redirect=${from.fullPath}`)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- next('/login')
|
|
|
|
|
|
+ const fp = from.path
|
|
|
|
+ const noneed = dontRedirectList.includes(fp)
|
|
|
|
+ if (noneed) next('/login')
|
|
|
|
+ else next(`/login?redirect=${from.fullPath}`)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|