12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import Vue from 'vue'
- import Router from 'vue-router'
- import { loginRouter } from './routes.js'
- import store from '@/store/index'
- import { Message } from 'element-ui'
- Vue.use(Router)
- const originalPush = Router.prototype.push
- const router = new Router({
- routes: [loginRouter]
- })
- Router.prototype.push = function push(location) {
- return originalPush.call(this, location).catch(err => err)
- }
- const LOGIN_PAGE_NAME = 'login'
- // 跳转之前
- router.beforeEach(async (to, from, next) => {
- const token = localStorage.getItem('Token')
- if (!token && to.name !== LOGIN_PAGE_NAME) {
- // 未登录且要跳转的页面不是登录页
- next({
- name: LOGIN_PAGE_NAME // 跳转到登录页
- })
- } else if (to.name === LOGIN_PAGE_NAME) {
- next()
- } else {
- if (token) {
- if (!store.state.permission.permissionList) {
- try {
- let accessRoutes = await store.dispatch('permission/FETCH_PERMISSION')
- await router.addRoutes(accessRoutes)
- let flag = ruleValidate(accessRoutes, to.path)
- if (flag) {
- next({ ...to, replace: true })
- }
- } catch (err) {
- if (err.code != '0') {
- next({
- name: LOGIN_PAGE_NAME // 跳转到登录页
- })
- }
- }
- } else {
- // store.dispatch('permission/FETCH_AUTHORID')
- next()
- }
- } else {
- next({
- name: LOGIN_PAGE_NAME
- })
- }
- }
- })
- function ruleValidate(data, path) {
- let flag = false
- function judgeChildren(data, path) {
- data.forEach(e => {
- if (flag) {
- return
- }
- if (e.path === path) {
- flag = true
- return
- } else if (e.children && e.children.length) {
- judgeChildren(e.children, path)
- }
- })
- }
- judgeChildren(data, path)
- return flag
- }
- export default router
|