123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import router from "./router";
- import { ElMessage } from "element-plus";
- import NProgress from "nprogress";
- import "nprogress/nprogress.css";
- import { getToken } from "/src/utils/auth";
- import { isHttp } from "/src/utils/validate";
- import { isRelogin } from "/src/utils/request";
- import useUserStore from "/src/store/modules/user";
- import useSettingsStore from "/src/store/modules/settings";
- import usePermissionStore from "/src/store/modules/permission";
- import axios from "axios";
- NProgress.configure({ showSpinner: false });
- const whiteList = ["/login", "/register"];
- const checkVersion = async () => {
- const url = `/version.json?t=${Date.now()}`;
- let res = null;
- try {
- res = await axios.get(url);
- } catch (err) {
- console.error("checkVersion error: ", err);
- }
- let version = null;
- if (res) {
- version = res.data.version;
- }
- const localVersion = localStorage.getItem("sd_web_version");
- if (version && localVersion && JSON.parse(localVersion).version && JSON.parse(localVersion).version !== version) {
- localStorage.setItem("sd_web_version", JSON.stringify({ version: version }));
- window.location.reload();
- } else {
- localStorage.setItem("sd_web_version", JSON.stringify({ version: version }));
- }
- };
- const isRefresh = import.meta.env.VITE_REFRESH;
- router.beforeEach((to, from, next) => {
- // 检测版本更新;
- if (from.path !== "/" && isRefresh === "true") {
- checkVersion();
- }
- NProgress.start();
- if (getToken()) {
- to.meta.title && useSettingsStore().setTitle(to.meta.title);
- /* has token*/
- if (to.path === "/login") {
- next({ path: "/" });
- NProgress.done();
- } else {
- if (useUserStore().roles.length === 0) {
- isRelogin.show = true;
- // 判断当前用户是否已拉取完user_info信息
- useUserStore()
- .getInfo()
- .then(() => {
- isRelogin.show = false;
- usePermissionStore()
- .generateRoutes()
- .then((accessRoutes) => {
- // 根据roles权限生成可访问的路由表
- accessRoutes.forEach((route) => {
- if (!isHttp(route.path)) {
- router.addRoute(route); // 动态添加可访问路由表
- }
- });
- next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
- });
- })
- .catch((err) => {
- useUserStore()
- .logOut()
- .then(() => {
- ElMessage.error(err);
- next({ path: "/" });
- });
- });
- } else {
- next();
- }
- }
- } else {
- // 没有token
- if (whiteList.indexOf(to.path) !== -1) {
- // 在免登录白名单,直接进入
- next();
- } else {
- next(`/login?redirect=${to.fullPath}`); // 否则全部重定向到登录页
- NProgress.done();
- }
- }
- });
- router.afterEach(() => {
- NProgress.done();
- });
|