permission.js 1.87 KB
/*
 * @Description:
 * @Autor: renchao
 * @LastEditTime: 2023-03-23 15:17:36
 */
import Vue from 'vue'
import router from "./router";
import store from "./store";
import { getMenuInfo } from "@/api/user";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import getPageTitle from "@/utils/get-page-title";
import getTheme from "@/utils/theme";
import Cookies from "js-cookie";
NProgress.configure({ showSpinner: false });
router.beforeEach(async (to, from, next) => {
  getTheme()
  NProgress.start();
  window.document.documentElement.setAttribute("data-theme", 'blue');
  document.title = getPageTitle(to.meta.title);
  let hasAddDict = store.state.dict.addDict;
  let hasUser = store.state.user.hasUser;
  let hasAddRoute = store.state.permission.addRoutes;
  if (to.path == "/sb" || to.path == "/jg") {
    localStorage.removeItem("token");
    next();
  } else {
    let code = Vue.prototype.BASE_API.THEME == "sb" ? "BDCSBPT" : "BDCJGPT"
    //请求用户信息
    if (!hasUser) {
      store.dispatch("user/getUserInfo");
    }
    if (hasAddRoute) {
      next();
    } else {
      //请求菜单
      const { result: getMenuData } = (await getMenuInfo(code)) || [];
      const accessRoutes = await store.dispatch(
        "permission/generateRoutes",
        getMenuData
      );
      router.addRoutes([
        ...accessRoutes,
        { path: "*", redirect: "/404", hidden: true }
      ]);
      const routeTo = Cookies.get("routerTo");
      if (!hasAddDict) {
        await store.dispatch("dict/generateDic");
      }
      if (routeTo && routeTo !== "/" && routeTo !== "/sb" && routeTo !== "/jg") {
        next({ ...to, replace: true });
      } else {
        next();
      }
    }
  }
  NProgress.done()
})
router.afterEach((to) => {
  // 解决刷新页面报404问题
  Cookies.set("routerTo", to.fullPath);
  NProgress.done();
});