1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import router from "./router";
- import store from "./store";
- import { Message } from "element-ui";
- import NProgress from "nprogress"; // progress bar
- import "nprogress/nprogress.css"; // progress bar style
- import { getToken } from "@/utils/auth"; // get token from cookie
- import getPageTitle from "@/utils/get-page-title";
- NProgress.configure({ showSpinner: false }); // NProgress Configuration
- const whiteList = ["/login"]; // no redirect whitelist
- router.beforeEach(async (to, from, next) => {
- // start progress bar
- NProgress.start();
- // set page title
- document.title = getPageTitle(to.meta.title);
- // determine whether the user has logged in
- const hasToken = getToken();
- if (hasToken) {
- if (to.path === "/login") {
- // if is logged in, redirect to the home page
- next({ path: "/" });
- NProgress.done();
- } else {
- const hasRoles = store.getters.roles && store.getters.roles.length > 0;
- if (hasRoles) {
- next();
- } else {
- try {
- const { roles } = await store.dispatch("user/getInfo");
- if (roles && roles.length) {
- const accessRoutes = await store.dispatch("permission/generateRoutes", roles);
- router.addRoutes(accessRoutes);
- next({ ...to, replace: true });
- } else {
- await store.dispatch("user/resetToken");
- Message.error("当前账号无相关权限,请联系管理员");
- next(`/login?redirect=${to.path}`);
- NProgress.done();
- setTimeout(() => {
- location.reload();
- }, 2000);
- }
- } catch (error) {
- // remove token and go to login page to re-login
- await store.dispatch("user/resetToken");
- Message.error(error || "Has Error");
- next(`/login?redirect=${to.path}`);
- NProgress.done();
- }
- }
- }
- } else {
- /* has no token*/
- if (whiteList.indexOf(to.path) !== -1) {
- // in the free login whitelist, go directly
- next();
- } else {
- // other pages that do not have permission to access are redirected to the login page.
- next(`/login?redirect=${to.path}`);
- NProgress.done();
- }
- }
- });
- router.afterEach(() => {
- // finish progress bar
- NProgress.done();
- });
|