permission - 副本1.js
3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import router from './router'
import store from './store'
import {
Message
} from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import {
getUserId,
getToken
} from '@/utils/auth' // get token from cookie
import {
adminBuild
} from '@/api/user.js'
import { filterAsyncRouter } from '@/store/modules/permission.js'
import getPageTitle from '@/utils/get-page-title'
import {authenticate} from "@/api/getCode";
NProgress.configure({
showSpinner: false
}) // NProgress Configuration
const whiteList = ['/login'] // no redirect whitelist
let isFirstVisit = true; // 新增标志位,记录是否是首次访问
const extractParamsAndHandleToken = () => {
let urlPart = window.location.href
const queryIndex = urlPart.indexOf('?');
if (queryIndex === -1) {
return null;
}
const queryString = urlPart.slice(queryIndex + 1);
const paramPairs = queryString.split('&');
let idValue = localStorage.getItem("code") || null;
let tokenValue = null;
paramPairs.forEach(pair => {
const [key, value] = pair.split('=');
if (key === 'code') {
idValue = value;
}
});
if (idValue == null) {
window.location.href = 'https://admin-uat.028wlkj.com:1020/login';
} else {
authenticate({ needOpinion: idValue }).then(res => {
if (res.data.idValue != '200') {
window.location.href = 'https://admin-uat.028wlkj.com:1020/login';
}
})
}
// localStorage.setItem("code", idValue);
// this.yanzheng(idValue)
}
router.beforeEach(async (to, from, next) => {
// start progress bar
NProgress.start()
// set page title
document.title = getPageTitle(to.meta.title)
// determine whether the user has logged in
const hasToken = getToken()
if (hasToken) {
console.log(to.path, 'path')
if (to.path === '/login') {
// if is logged in, redirect to the home page
next({
path: '/'
})
NProgress.done()
} else {
if (isFirstVisit) {
extractParamsAndHandleToken();
isFirstVisit = false; // 首次访问判断完成后,将标志位设为 false
}
if (store.getters.routers.length === 0) { // 条件加载
loadMenus(next, to)
store.commit('SET_LOAD', true)
} else if (!store.getters.hasLoad) { // 是否加载过动态路由
// // 修改hasLoad为false,防止死循环
store.commit('SET_LOAD', true)
loadMenus(next, to)
} else {
try {
next()
} catch (error) {
await store.dispatch('user/resetToken')
Message.error(error || 'Has Error')
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
}
} else {
/* has no token*/
if (whiteList.indexOf(to.path) !== -1) {
console.log('no token')
if (isFirstVisit) {
extractParamsAndHandleToken();
isFirstVisit = false; // 首次访问判断完成后,将标志位设为 false
}
next()
} else {
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
})
export const loadMenus = (next, to) => {
adminBuild({ platformUserId: getUserId() }).then(res => {
const asyncRouter = filterAsyncRouter(res.data)
// 画布设置
asyncRouter.forEach(item => {
if (item.path.indexOf('.html') !== -1) {
item.path = item.path + '?' + getToken()
}
})
// 异常跳转添加
asyncRouter.push({ path: '*', redirect: '/404', hidden: true })
store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由
router.addRoutes(asyncRouter) // 动态添加可访问路由表
next({ ...to, replace: true })
})
})
}
router.afterEach(() => {
// finish progress bar
NProgress.done()
})