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 { 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=NamePath.length)return 1; if(IsLimit(NamePath,cfg.L,at+1))return 1; } return 0; }