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.
271 lines
7.9 KiB
271 lines
7.9 KiB
3 years ago
|
import Vue from 'vue'
|
||
|
import Router from 'vue-router'
|
||
|
import { getUrlKey } from "@/utils/getUrlKey.js";
|
||
|
import { Decrypt, Encrypt } from '@/utils/my-aes-crypto.js'
|
||
|
import { getKey } from '../utils/my-aes-crypto';
|
||
|
import http from '@/utils/request'
|
||
|
import Cookies from "js-cookie";
|
||
|
import { pageRoutes, childrenRoutes, moduleRoutes } from '@/router/config'
|
||
|
import {
|
||
|
isURL
|
||
|
} from '@/utils/validate'
|
||
|
import baseUrl from '@/config'
|
||
|
Vue.use(Router)
|
||
|
|
||
|
const router = new Router({
|
||
|
mode: 'hash',
|
||
|
scrollBehavior: () => ({
|
||
|
y: 0
|
||
|
}),
|
||
|
routes: pageRoutes.concat(moduleRoutes)
|
||
|
})
|
||
|
export function addDynamicRoute(routeParams, router) {
|
||
|
// 组装路由名称, 并判断是否已添加, 如是: 则直接跳转
|
||
|
var routeName = routeParams.routeName
|
||
|
var dynamicRoute = window.SITE_CONFIG['dynamicRoutes'].filter(item => item.name === routeName)[0]
|
||
|
if (dynamicRoute) {
|
||
|
return router.push({
|
||
|
name: routeName,
|
||
|
params: routeParams.params
|
||
|
})
|
||
|
}
|
||
|
// 否则: 添加并全局变量保存, 再跳转
|
||
|
dynamicRoute = {
|
||
|
path: routeName,
|
||
|
component: () =>
|
||
|
import(`@/views/modules/${routeParams.path}`),
|
||
|
name: routeName,
|
||
|
meta: {
|
||
|
...window.SITE_CONFIG['contentTabDefault'],
|
||
|
menuId: routeParams.menuId,
|
||
|
title: `${routeParams.title}`
|
||
|
}
|
||
|
}
|
||
|
router.addRoutes([{
|
||
|
...moduleRoutes,
|
||
|
name: `main-dynamic__${dynamicRoute.name}`,
|
||
|
children: [dynamicRoute]
|
||
|
}])
|
||
|
window.SITE_CONFIG['dynamicRoutes'].push(dynamicRoute)
|
||
|
router.push({
|
||
|
name: dynamicRoute.name,
|
||
|
params: routeParams.params
|
||
|
})
|
||
|
}
|
||
|
|
||
|
let appendRoutes = (dataList) => {
|
||
|
for (let i = 0; i < childrenRoutes.length; i++) {
|
||
|
concatRoutes(dataList, childrenRoutes[i]);
|
||
|
}
|
||
|
|
||
|
return dataList;
|
||
|
}
|
||
|
|
||
|
let concatRoutes = (parentList, appendNode) => {
|
||
|
for (let i = 0; i < parentList.length; i++) {
|
||
|
let value = parentList[i];
|
||
|
|
||
|
//向路由的每个结点追加isLastLevel属性,标识是否为最后一级导航结点,按配置到数据库中的算,页面上后append的,默认都是页面内部路由,不算
|
||
|
if (value.children == null) {
|
||
|
value.children = [];
|
||
|
}
|
||
|
|
||
|
if (value.isLastLevel == null || value.isLastLevel == false) {
|
||
|
value.isLastLevel = value.children.length == 0;
|
||
|
}
|
||
|
|
||
|
//依据rootUrl寻找父级结点
|
||
|
if (value.url && appendNode.rootUrl == value.url) { //找到了,为children赋值,结束循环
|
||
|
value.children = value.children.concat(appendNode.children);
|
||
|
return;
|
||
|
} else { //没找到,递归
|
||
|
concatRoutes(value.children, appendNode);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
router.beforeEach((to, from, next) => {
|
||
|
|
||
|
var userId = getUrlKey("userId");
|
||
|
var token = getUrlKey("token");
|
||
|
var key = getUrlKey("key");
|
||
|
if (userId && token) {
|
||
|
userId = userId.replace(/\ +/g, "+");//去掉空格
|
||
|
userId = userId.replace(/[ ]/g, "+"); //去掉空格
|
||
|
userId = userId.replace(/[\r\n]/g, "+");//去掉回车换行
|
||
|
token = token.replace(/\ +/g, "+");//去掉空格
|
||
|
token = token.replace(/[ ]/g, "+"); //去掉空格
|
||
|
token = token.replace(/[\r\n]/g, "+");//去掉回车换行
|
||
|
}
|
||
|
var deUserId = "";
|
||
|
var deToken = "";
|
||
|
console.log("userId", userId);
|
||
|
console.log("token", token);
|
||
|
console.log("key", key);
|
||
|
|
||
|
if( Cookies.get('cookieFlag') != '1'){
|
||
|
if (userId && token && key && Number("123" + getKey()) - Number("123" + key) < 600000) {
|
||
|
deUserId = Decrypt(userId, "123" + key, "123" + key);
|
||
|
deToken = Decrypt(token, "123" + key, "123" + key);
|
||
|
console.log("deUserId", deUserId);
|
||
|
console.log("deToken", deToken);
|
||
|
Cookies.set("token", deToken);
|
||
|
Cookies.set("userId", deUserId);
|
||
|
} else {
|
||
|
console.log("已经超时了");
|
||
|
}
|
||
|
}else{
|
||
|
Cookies.remove('cookieFlag');
|
||
|
}
|
||
|
|
||
|
if (to.name != "logout") {
|
||
|
// if (!Cookies.get("token") || !Cookies.get("userId")) {
|
||
|
// window.location.replace(baseUrl.IDM_APPROVE_URL)
|
||
|
// }
|
||
|
}
|
||
|
// 添加动态(菜单)路由
|
||
|
// 已添加或者当前路由为页面路由, 可直接访问
|
||
|
if (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) {
|
||
|
return next()
|
||
|
}
|
||
|
// 获取菜单列表, 添加并全局变量保存
|
||
|
http.get(baseUrl.JMPS_ADMIN_URL + '/sys/menu/nav').then(({
|
||
|
data: res
|
||
|
}) => {
|
||
|
console.log("beforeEachbeforeEachbeforeEach");
|
||
|
|
||
|
if (res.code !== 0) {
|
||
|
Vue.prototype.$message({
|
||
|
message: res.msg,
|
||
|
type: "error",
|
||
|
duration: 2000
|
||
|
});
|
||
|
return next({
|
||
|
name: 'login'
|
||
|
})
|
||
|
// window.location.replace(baseUrl.IDM_APPROVE_URL)
|
||
|
}
|
||
|
window.SITE_CONFIG['menuList'] = appendRoutes(res.data);
|
||
|
fnAddDynamicMenuRoutes(window.SITE_CONFIG['menuList'])
|
||
|
next({
|
||
|
...to,
|
||
|
replace: true
|
||
|
})
|
||
|
}).catch(() => {
|
||
|
next({
|
||
|
name: 'login'
|
||
|
})
|
||
|
// window.location.replace(baseUrl.IDM_APPROVE_URL)
|
||
|
})
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
})
|
||
|
|
||
|
/**
|
||
|
* 判断当前路由是否为页面路由
|
||
|
* @param {*} route 当前路由
|
||
|
* @param {*} pageRoutes 页面路由
|
||
|
*/
|
||
|
function fnCurrentRouteIsPageRoute(route, pageRoutes = []) {
|
||
|
var temp = []
|
||
|
for (var i = 0; i < pageRoutes.length; i++) {
|
||
|
if (route.path === pageRoutes[i].path) {
|
||
|
return true
|
||
|
}
|
||
|
if (pageRoutes[i].children && pageRoutes[i].children.length >= 1) {
|
||
|
temp = temp.concat(pageRoutes[i].children)
|
||
|
}
|
||
|
}
|
||
|
return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false
|
||
|
}
|
||
|
|
||
|
const createRouteConfig = (menu) => {
|
||
|
// 组装路由
|
||
|
var route = {
|
||
|
url: menu.url,
|
||
|
path: '',
|
||
|
component: null,
|
||
|
name: '',
|
||
|
meta: {
|
||
|
...window.SITE_CONFIG['contentTabDefault'],
|
||
|
menuId: menu.id,
|
||
|
title: menu.name
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (menu.meta && menu.meta.isBreadcrumb) {
|
||
|
route.meta = {
|
||
|
...route.meta,
|
||
|
...menu.meta
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line
|
||
|
let URL = (menu.url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量
|
||
|
if (isURL(URL)) {
|
||
|
route['path'] = route['name'] = `i-${menu.id}`
|
||
|
route['meta']['iframeURL'] = URL
|
||
|
} else {
|
||
|
URL = URL.replace(/^\//, '').replace(/_/g, '-')
|
||
|
route['path'] = route['name'] = URL.replace(/\//g, '-')
|
||
|
route['component'] = () =>
|
||
|
import(`@/views/modules/${URL}`)
|
||
|
}
|
||
|
|
||
|
if (menu.routeName && menu.routeName != "") {
|
||
|
route['name'] = menu.routeName;
|
||
|
}
|
||
|
|
||
|
return route;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 添加动态(菜单)路由
|
||
|
* @param {*} menuList 菜单列表
|
||
|
* @param {*} routes 递归创建的动态(菜单)路由
|
||
|
*/
|
||
|
function fnAddDynamicMenuRoutes(menuList = [], routes = []) {
|
||
|
var temp = []
|
||
|
for (var i = 0; i < menuList.length; i++) {
|
||
|
|
||
|
//逻辑需要,对于其下配置了children的结点,本身也要能够跳转
|
||
|
if (menuList[i].url && menuList[i].children && menuList[i].children.length >= 1) {
|
||
|
routes.push(createRouteConfig(menuList[i]));
|
||
|
}
|
||
|
|
||
|
if (menuList[i].children && menuList[i].children.length >= 1) {
|
||
|
temp = temp.concat(menuList[i].children)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
routes.push(createRouteConfig(menuList[i]))
|
||
|
}
|
||
|
if (temp.length >= 1) {
|
||
|
return fnAddDynamicMenuRoutes(temp, routes)
|
||
|
}
|
||
|
// 添加路由
|
||
|
router.addRoutes([{
|
||
|
...moduleRoutes,
|
||
|
name: 'main-dynamic-menu',
|
||
|
children: routes
|
||
|
},
|
||
|
{
|
||
|
path: '*',
|
||
|
redirect: {
|
||
|
name: '404'
|
||
|
}
|
||
|
}
|
||
|
])
|
||
|
window.SITE_CONFIG['dynamicMenuRoutes'] = routes
|
||
|
window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = true
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
export default router
|