import router from '@/router/index'
|
import { resetRouter, filterAsyncRouter } from '@/router/index'
|
import Com from '@/com/global';
|
import { getNavigationBar, saveRefreshtime, LoginByJobNo, getUserByToken } from '@/api/api';
|
import store from "@/store";
|
import applicationUserManager from "./Auth/applicationusermanager";
|
|
let loadfns = window.LoadFns;
|
let user = null, groutes = null;
|
//检测是否自动跳转
|
let prms = Com.GetUrlParams();
|
let prm = prms["AutoLogin"];
|
if (prm) {
|
loadfns.push(() => {
|
return new Promise(rtn => {
|
var prms = { JWTToken: prm };
|
LoginByJobNo(prms).then(data => {
|
if (!data.success) {
|
console.log(data.msg);
|
return;
|
}
|
var token = data.response.token;
|
var curTime = new Date();
|
var expiredate = new Date(curTime.setSeconds(curTime.getSeconds() + data.response.expires_in));
|
store.commit("saveToken", token);
|
store.commit("saveTokenExpire", expiredate);
|
Com.SaveObj("Token", token);
|
Com.SaveObj("TokenExpire", expiredate);
|
Com.SaveObj("refreshtime", expiredate);
|
Com.SaveObj("expires_in", data.response.expires_in);
|
console.log(`成功获取令牌,项目初始化中...`);
|
var loginParams = { token: token };
|
getUserByToken(loginParams).then((data) => {
|
if (!data.success) {
|
console.log(data.msg);
|
return;
|
}
|
user = data.response;
|
console.log(`欢迎管理员:${user.uRealName} !`);
|
Com.SaveCfg("user", data.response);
|
Com.SaveCfg('router', null);
|
rtn();
|
});
|
});
|
});
|
});
|
}
|
|
//获取路由菜单
|
loadfns.push(() => {
|
return new Promise(rtn => {
|
groutes = Com.ReadCfg('router');
|
if (groutes) {
|
rtn(); return;
|
}
|
user = user || Com.ReadCfg("user");
|
if (!user || user.uID < 0) {
|
rtn(); return;
|
}
|
var loginParams = { uid: user.uID };
|
getNavigationBar(loginParams).then(data => {
|
if (data&&data.success) {
|
console.info('菜单获取完成')
|
groutes = data.response.children//后台拿到路由
|
Com.SaveCfg('router', groutes) //存储路由到localStorage
|
}
|
location.replace("/");
|
rtn();
|
});
|
});
|
});
|
|
//权限列表
|
window.DicLimit={};
|
function LoadDicLimit(Routes,Limits){
|
if(!Limits)Limits=window.DicLimit;
|
for(let i=0,c=Routes.length;i<c;i++){
|
let route=Routes[i];
|
let limit=Limits[route.name||"unname"];
|
if(!limit)limit=Limits[route.name||"unname"]=[];
|
let item={L:{},R:route};
|
limit.push(item);
|
if(route.children)LoadDicLimit(route.children,item.L);
|
}
|
}
|
|
//用来分析菜单和路由
|
loadfns.push(() => {
|
return new Promise(rtn => {
|
if (!groutes) {
|
groutes = Com.ReadCfg('router')//拿到路由
|
}
|
if (groutes) {
|
LoadDicLimit(groutes);
|
groutes = filterAsyncRouter(groutes) //过滤路由
|
router.$addRoutes(groutes) //动态添加路由
|
global.antRouter = groutes //将路由数据传递给全局变量,做侧边栏菜单渲染工作
|
}
|
var storeTemp = store;
|
router.beforeEach((to, from, next) => {
|
//验证Token
|
{
|
if (!storeTemp.state.token) {
|
storeTemp.commit("saveToken", window.localStorage.Token)
|
}
|
if (!storeTemp.state.tokenExpire) {
|
storeTemp.commit("saveTokenExpire", window.localStorage.TokenExpire)
|
}
|
saveRefreshtime();
|
if (to.meta.requireAuth) {
|
// 判断该路由是否需要登录权限
|
var curTime = new Date()
|
var expiretime = new Date(Date.parse(window.localStorage.TokenExpire))
|
if (storeTemp.state.token && storeTemp.state.token != "undefined") {
|
// 通过vuex state获取当前的token是否存在
|
next();
|
} else {
|
store.commit("saveToken", "");
|
store.commit("saveTokenExpire", "");
|
store.commit("saveTagsData", "");
|
window.localStorage.removeItem('user');
|
window.localStorage.removeItem('NavigationBar');
|
window.localStorage.removeItem('router');
|
|
|
if (global.IS_IDS4) {
|
applicationUserManager.login();
|
} else {
|
next({
|
path: "/login",
|
query: { redirect: to.fullPath } // 将跳转的路由path作为参数,登录成功后跳转到该路由
|
});
|
|
window.location.reload()
|
}
|
|
}
|
} else {
|
next();
|
}
|
}
|
|
//动态添加路由
|
{
|
//不加这个判断,路由会陷入死循环
|
if (groutes) {
|
if (to.name && to.name != 'login') {
|
global.antRouter = groutes
|
// routerGo(to, next)//执行路由跳转方法
|
}
|
next()
|
}
|
}
|
});
|
rtn();
|
});
|
});
|
|
function routerGo(to, next, gs) {
|
//过滤路由
|
groutes = filterAsyncRouter(groutes || gs)
|
resetRouter()
|
|
//动态添加路由
|
router.$addRoutes(groutes)
|
|
//将路由数据传递给全局变量,做侧边栏菜单渲染工作
|
global.antRouter = groutes
|
next({ ...to, replace: true })
|
}
|
|
//获取按钮列表
|
var buttonList = [];
|
export const GetButtonList = (routePath, routers) => {
|
routers.forEach(element => {
|
if (routePath && element.path) {
|
let path = routePath.toLowerCase();
|
if (element.path && element.path.toLowerCase() === path) {
|
buttonList = element.children;
|
return;
|
} else if (element.children) {
|
getButtonList(path, element.children);
|
}
|
}
|
});
|
return buttonList;
|
};
|
export const getButtonList = GetButtonList;
|
//是否被限制操作
|
export const IsLimit=(NamePath,Limits,at)=>{
|
debugger;
|
if(!Limits)Limits=window.DicLimit;
|
if(!at)at=0;
|
let name=NamePath[at];
|
let cfgs=Limits[name];
|
if(!cfgs)return 0;
|
for(let i=0,c=cfgs.length;i<c;i++){
|
let cfg=cfgs[i];
|
if(cfg&&at+1>=NamePath.length)return 1;
|
if(IsLimit(NamePath,cfg.L,at+1))return 1;
|
}
|
return 0;
|
}
|