123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- // 路由前置操作
- import store from '@/store/index.js';
- import {
- Message
- } from 'element-ui';
- import {
- getCookie,
- setCookie,
- dgTree
- } from '@/utils/util.js';
- // 免登录白名单
- const whiteList = ['/', '/login'];
- /**
- * 当前路由取标题
- * @param {Object} to 当前路由
- * @param {Array} constantRouterMap 路由map
- * @param {Array} menu 菜单树
- * @returns {String} 标题
- */
- const titleFn = function (to, menu) {
- let title = '';
- if (to.meta && to.meta.title) {
- return to.meta.title;
- }
- //
- if (to.meta && to.meta.code) {
- // 查找标题
- let code = to.meta.code;
- dgTree(menu, '', item => {
- if (item.menuCode === code) {
- title = item.menuLabel;
- }
- });
- }
- return title;
- }
- /**
- * matched 添加标题名称
- * @param {Array} matched
- * @param {Array} menu 菜单树
- * @returns {Array} matched
- */
- const breadcrumbFn = function (to, menu) {
- let code = to.meta.code;
- let list = [];
- let item = null;
- let data = [];
- let getPid = function (pId) {
- for (let ii of list) {
- if (ii.menuId === pId) {
- return ii;
- }
- }
- return null;
- }
- dgTree(menu, '', leaf => {
- list.push(leaf);
- if (leaf.menuCode === code) {
- item = leaf;
- }
- });
- let init = function (pId) {
- let itemPid = getPid(pId);
- if (itemPid) {
- data.push(itemPid);
- init(itemPid.pId);
- }
- }
- //
- if (item) {
- data.push(item);
- init(item.pId);
- }
- if (data.length > 1) {
- return data.reverse();
- }
- //
- to.matched.forEach(item => {
- dgTree(menu, '', leaf => {
- if (item.meta && item.meta.code === leaf.menuCode) {
- data.push(leaf);
- }
- });
- });
- return data;
- }
- // 路由前置操作
- const routerBefore = function (router, constantRouterMap) {
- let flag = false
- router.beforeEach((to, from, next) => {
- // 面包屑
- console.log('进入路由', to.name)
- store.commit('breadcrumb', breadcrumbFn(to, store.state.routes));
- // 标题
- if (to.meta && !to.meta.title) {
- document.title = titleFn(to, store.state.routes) + ' ' + document.title.substr(document.title.indexOf('-'));
- } else {
- document.title = to.meta.title + ' ' + document.title.substr(document.title.indexOf('-'));
- }
- //
- if (getCookie('accessToken')) { // 判断是否有token
- if (window.top.document.URL === window.document.URL && !window.top.localStorage.getItem('ownPrivilege')) {
- store.dispatch('getOwnMenuUrl');
- }
- if (to.path === '/login') {
- next({
- path: '/'
- });
- } else {
- if (window.top.document.URL === window.document.URL && store.state.userInfo === null) { // 判断当前用户是否已拉取完路由信息
- // 前期无后台测试用
- // next();
- // /*
- store.dispatch('getUserInfo').then(res => { // 拉取info
- if (res.code === '0') {
- const userInfo = res.data;
- store.dispatch('generateRoutes', {
- userInfo
- }).then(() => { // 生成可访问的路由表
- // router.addRoutes(store.state.routes) // 动态添加可访问路由表
- if (flag) {
- next()
- } else {
- next({
- ...to,
- replace: true
- })
- flag = true
- }
- // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
- console.log('这是个什么东西', {
- ...to,
- replace: true
- })
- })
- } else {
- Message('登录已过期,请重新登录');
- // next('/login'); // 否则全部重定向到登录页
- // window.location.href = '/views/index.html';
- setCookie('accessToken', '', -1, '/');
- setCookie('refreshToken', '', -1, '/');
- setCookie('workDate', '', -1);
- window.top.location.href = store.getters.ctx;
- }
- }).catch(err => {
- console.log(err);
- Message('登录已过期,请重新登录');
- // next('/login'); // 否则全部重定向到登录页
- // window.location.href = '/views/index.html';
- setCookie('accessToken', '', -1, '/');
- setCookie('refreshToken', '', -1, '/');
- setCookie('workDate', '', -1);
- window.top.location.href = store.getters.ctx;
- });
- // */
- } else {
- next() // 当有用户权限的时候,说明所有可访问路由已生成 如访问没权限的全面会自动进入404页面
- }
- }
- } else {
- if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入
- next();
- } else {
- Message('未登录');
- // next('/login'); // 否则全部重定向到登录页
- // window.location.href = '/views/index.html';
- setCookie('accessToken', '', -1, '/');
- setCookie('refreshToken', '', -1, '/');
- setCookie('workDate', '', -1);
- window.top.location.href = store.getters.ctx;
- }
- }
- });
- }
- export default routerBefore;
|