zhangzengfei
2021-11-24 dccd5c9cfc33d33ea405e3a5311c7c85d9c09f68
src/config/permission.js
@@ -1,84 +1,83 @@
/**
 * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
 * @description 路由守卫,目前两种模式:all模式与intelligence模式
 */
import router from '@/router'
import store from '@/store'
import VabProgress from 'nprogress'
import 'nprogress/nprogress.css'
import getPageTitle from '@/utils/pageTitle'
import router from "@/router";
import store from "@/store";
import VabProgress from "nprogress";
import "nprogress/nprogress.css";
import getPageTitle from "@/utils/pageTitle";
import {
  authentication,
  loginInterception,
  progressBar,
  recordRoute,
  routesWhiteList,
} from '@/config'
} from "@/config";
VabProgress.configure({
  easing: 'ease',
  easing: "ease",
  speed: 500,
  trickleSpeed: 200,
  showSpinner: false,
})
});
router.beforeResolve(async (to, from, next) => {
  if (progressBar) VabProgress.start()
  let hasToken = store.getters['user/accessToken']
  if (progressBar) VabProgress.start();
  let hasToken = store.getters["user/accessToken"];
  if (!loginInterception) hasToken = true
  if (!loginInterception) hasToken = true;
  if (hasToken) {
    if (to.path === '/login') {
      next({ path: '/' })
      if (progressBar) VabProgress.done()
    if (to.path === "/login") {
      next({ path: "/" });
      if (progressBar) VabProgress.done();
    } else {
      const hasPermissions =
        store.getters['user/permissions'] &&
        store.getters['user/permissions'].length > 0
        store.getters["user/permissions"] &&
        store.getters["user/permissions"].length > 0;
      if (hasPermissions) {
        next()
        next();
      } else {
        try {
          let permissions
          let permissions;
          if (!loginInterception) {
            //settings.js loginInterception为false时,创建虚拟权限
            await store.dispatch('user/setPermissions', ['admin'])
            permissions = ['admin']
            await store.dispatch("user/setPermissions", ["admin"]);
            permissions = ["admin"];
          } else {
            permissions = await store.dispatch('user/getUserInfo')
            permissions = await store.dispatch("user/getUserInfo");
          }
          let accessRoutes = []
          if (authentication === 'intelligence') {
            accessRoutes = await store.dispatch('routes/setRoutes', permissions)
          } else if (authentication === 'all') {
            accessRoutes = await store.dispatch('routes/setAllRoutes')
          let accessRoutes = [];
          if (authentication === "intelligence") {
            accessRoutes = await store.dispatch(
              "routes/setRoutes",
              permissions
            );
          } else if (authentication === "all") {
            accessRoutes = await store.dispatch("routes/setAllRoutes");
          }
          accessRoutes.forEach((item) => {
            router.addRoute(item)
          })
          next({ ...to, replace: true })
            router.addRoute(item);
          });
          next({ ...to, replace: true });
        } catch {
          await store.dispatch('user/resetAccessToken')
          if (progressBar) VabProgress.done()
          await store.dispatch("user/resetAccessToken");
          if (progressBar) VabProgress.done();
        }
      }
    }
  } else {
    if (routesWhiteList.indexOf(to.path) !== -1) {
      next()
      next();
    } else {
      if (recordRoute) {
        next(`/login?redirect=${to.path}`)
        next(`/login?redirect=${to.path}`);
      } else {
        next('/login')
        next("/login");
      }
      if (progressBar) VabProgress.done()
      if (progressBar) VabProgress.done();
    }
  }
  document.title = getPageTitle(to.meta.title)
})
  document.title = getPageTitle(to.meta.title);
});
router.afterEach(() => {
  if (progressBar) VabProgress.done()
})
  if (progressBar) VabProgress.done();
});