/* * @Description: 项目权限 * @Autor: renchao * @LastEditTime: 2023-06-13 16:28:25 */ import Vue from 'vue' import axios from 'axios' import router from './router' import store from './store' import Cookies from 'js-cookie' import { getMenuInfo } from '@/api/user' import { getUrlParam } from '@/utils/operation' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import getPageTitle from '@/utils/get-page-title' NProgress.configure({ showSpinner: false }) // NProgress Configuration router.beforeEach(async (to, from, next) => { Vue.prototype.$currentRoute = to NProgress.start() document.title = getPageTitle(to.meta.title) let hasAddDict = store.state.dict.addDict let hasAddRoute = store.state.permission.addRoutes // cas操作 const token = localStorage.getItem("token") || Cookies.get('ACCESS_TOKEN'); if (to.path === '/login') { if (token) { next('/') } else { next() } return } if (window._config.casEnable === true) { let locationUrl = window.location.protocol + '//' + window.location.host + window.location.pathname; if (!token) { let ticket = getUrlParam('ticket'); if (ticket) { axios.get(Vue.prototype.BASE_API.ip + "/management/cas/validate", { params: { 'ticket': ticket, 'service': locationUrl } }).then(async (res) => { if (process.env.NODE_ENV === 'development') { localStorage.setItem('token', res.data.content.accessToken) } else { Cookies.set('ACCESS_TOKEN', res.data.content.accessToken) } window.location.href = localStorage.getItem('location') }).catch(e => { console.log(e) }) } else { localStorage.setItem("location", window.location.href) window.location.href = window._config.casBaseURL + '/login?service=' + encodeURIComponent(locationUrl); } } else { permission() } async function permission () { if (!hasAddDict) { store.dispatch('dict/generateDic') } if (hasAddRoute) { next() // next({ ...to, replace: true }) } else { const { result: getMenuData } = await getMenuInfo() const accessRoutes = await store.dispatch('permission/generateRoutes', getMenuData) // 获取用户信息 await store.dispatch('user/getUserInfo') router.addRoutes([...accessRoutes, { path: '*', redirect: '/404', hidden: true }]) const routeTo = Cookies.get('routerTo') if (routeTo && routeTo !== '/') { next({ ...to, replace: true }) } else { next('/home') } } } } else { if (!token) { const redirectData = { path: '/login', replace: true, } if (to.path) { redirectData.query = { ...redirectData.query, redirect: to.path, }; } next(redirectData) return } next() } NProgress.done() }) router.afterEach(to => { // 解决刷新页面报404问题 Cookies.set("routerTo", to.fullPath) NProgress.done() })