import httputils from '@/utils/httputils' import store from '@/store' import menus from '@/data/menus' function toLogin() { let ssoServer = process.env.SSO_SERVER let redirectUrl = window.location.protocol + '//' + window.location.host window.location.href = `${ssoServer}/login?redirectUrl=${redirectUrl}/auth` } function checkMenu(menu, ps) { let result = { name: menu.name, icon: menu.icon, path: menu.path } if (menu.children) { // 如果有下级菜单权限,则自动拥有上级菜单权限 result.children = [] menu.children.forEach(child => { let submenu = checkMenu(child, ps) if (submenu) { result.children.push(submenu) } }) return result.children.length > 0 ? result : null } else if (menu.opts) { return menu.opts.some(opt => ps[opt.permission]) ? result : null } else { // 如果没有下级菜单且没有opts属性, 菜单可以直接访问,不需要权限 return result } } export default { /** * 路由守卫, 每次路由跳转时验证登录 * @param {*} to * @param {*} from * @param {*} next */ routerBeforeEach: async function(to, from, next) { console.log('router before ', to) if (to.path == '/auth' || to.path == '/nouser') { next() } else { // let userInfo = store.getters['layout/userInfo'] // if (!userInfo) { // // 本地是未登录状态, 保存目标页面地址, 去登录 // let lastRoute = { path: to.path, params: to.params, query: to.query } // store.commit('setLastRoute', lastRoute) // toLogin() // } else { // if (to.meta.breadcrumbs) { // store.dispatch('setBreadcrumb', to.meta.breadcrumbs) // } // next() // } // return true next(); } }, routerBeforeEach2: async function(to, from, next) { console.log('router before ', to) if (to.path == '/login') { next() return false } let userInfo = store.getters['layout/userInfo'] console.log('user info ', userInfo) if (!userInfo) { // 本地是未登录状态, 检查是否有sso令牌 var token = httputils.getCookie('sagacloud-auth-token') console.log('sso token ', token) if (!token) { // 没有sso令牌, 跳转登录页面 toLogin() return false } else { // 有sso令牌, 去服务端校验令牌并获取用户信息 // next({ path: to.path, params: to.params, query: to.query }) store.dispatch('layout/loadUserInfo').then(resp => { console.log('store dispatch result ', resp) if (resp.result == 'success') { next({ path: to.path, params: to.params, query: to.query }) } else { toLogin() } }) } } else { next() } return true }, getMenus(permissions) { let result = [] let allMenus = [] // 开发环境下展示demo页面 // if (process.env.NODE_ENV === 'development') { // allMenus = menus.demoMenus // } allMenus = allMenus.concat(menus.menus) let ps = !permissions ? {} : permissions allMenus.forEach(item => { let menu = checkMenu(item, ps) if (menu) { result.push(menu) } }) return result }, toLogout() { // TODO store.commit('setSsoToken', null) let ssoServer = process.env.SSO_SERVER let redirectUrl = window.location.protocol + '//' + window.location.host + '/' window.location.href = `${ssoServer}/logout?redirectUrl=${redirectUrl}` }, toLoginPage: toLogin }