You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.5 KiB
87 lines
2.5 KiB
import router from "./router"; |
|
import store from "./store"; |
|
import { Message } from "element-ui"; |
|
import NProgress from "nprogress"; |
|
import "nprogress/nprogress.css"; |
|
import { getToken } from "@/utils/auth"; |
|
import { isPathMatch } from "@/utils/validate"; |
|
import { isRelogin } from "@/utils/request"; |
|
import { |
|
isFullscreenSupported, |
|
requestFullscreen, |
|
isFullscreen, |
|
} from "@/utils/fullscreen"; |
|
NProgress.configure({ showSpinner: false }); |
|
|
|
const whiteList = ["/login", "/register"]; |
|
|
|
const isWhiteList = (path) => { |
|
return whiteList.some((pattern) => isPathMatch(pattern, path)); |
|
}; |
|
|
|
let userManuallyExitedFullscreen = false; |
|
|
|
// 监听全屏状态变化事件 |
|
document.addEventListener("fullscreenchange", () => { |
|
if (!isFullscreen()) { |
|
userManuallyExitedFullscreen = true; |
|
} |
|
}); |
|
|
|
router.beforeEach((to, from, next) => { |
|
NProgress.start(); |
|
if (getToken()) { |
|
to.meta.title && store.dispatch("settings/setTitle", to.meta.title); |
|
/* has token*/ |
|
if (to.path === "/login") { |
|
next({ path: "/" }); |
|
NProgress.done(); |
|
} else if (isWhiteList(to.path)) { |
|
if (isFullscreenSupported() && !userManuallyExitedFullscreen) { |
|
const element = document.documentElement; |
|
requestFullscreen(element); |
|
} |
|
next(); |
|
} else { |
|
if (store.getters.roles.length === 0) { |
|
isRelogin.show = true; |
|
// 判断当前用户是否已拉取完user_info信息 |
|
store |
|
.dispatch("GetInfo") |
|
.then(() => { |
|
isRelogin.show = false; |
|
store.dispatch("GenerateRoutes").then((accessRoutes) => { |
|
// 根据roles权限生成可访问的路由表 |
|
router.addRoutes(accessRoutes); // 动态添加可访问路由表 |
|
next({ ...to, replace: true }); // hack方法 确保addRoutes已完成 |
|
}); |
|
}) |
|
.catch((err) => { |
|
store.dispatch("LogOut").then(() => { |
|
Message.error(err); |
|
next({ path: "/" }); |
|
}); |
|
}); |
|
} else { |
|
if (isFullscreenSupported() && !userManuallyExitedFullscreen) { |
|
const element = document.documentElement; |
|
requestFullscreen(element); |
|
} |
|
next(); |
|
} |
|
} |
|
} else { |
|
// 没有token |
|
if (isWhiteList(to.path)) { |
|
// 在免登录白名单,直接进入 |
|
next(); |
|
} else { |
|
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // 否则全部重定向到登录页 |
|
NProgress.done(); |
|
} |
|
} |
|
}); |
|
|
|
router.afterEach(() => { |
|
NProgress.done(); |
|
});
|
|
|