import { router, Route } from './router'; 
 | 
import NProgress from 'nprogress'; // progress bar 
 | 
import 'nprogress/nprogress.css'; // progress bar style 
 | 
import { getToken } from '@/utils/storage'; // get token from cookie 
 | 
import { setPageTitle } from '@/utils'; 
 | 
import { usePermissionStoreHook } from '@/store/modules/permission'; 
 | 
import { useUserStoreHook } from '@/store/modules/user'; 
 | 
  
 | 
NProgress.configure({ showSpinner: false }); // NProgress Configuration 
 | 
  
 | 
const whiteList = [ 
 | 
  '/login', 
 | 
  '/home', 
 | 
  '/Interview', 
 | 
  '/Inter', 
 | 
  '/OnlineSign', 
 | 
  '/OnlineSignResult', 
 | 
  '/ContractPreview', 
 | 
  '/OnlineAuthFail', 
 | 
]; // no redirect whitelist 
 | 
  
 | 
router.beforeEach(async (to, from, next) => { 
 | 
  // start progress bar 
 | 
  NProgress.start(); 
 | 
  
 | 
  // set page title 
 | 
  setPageTitle(to.meta.title as string); 
 | 
  
 | 
  // determine whether the user has logged in 
 | 
  const hasToken = getToken(); 
 | 
  
 | 
  const permissionStoreHook = usePermissionStoreHook(); 
 | 
  const userStoreHook = useUserStoreHook(); 
 | 
  
 | 
  if (hasToken) { 
 | 
    if (!userStoreHook.userDetail) { 
 | 
      await userStoreHook.getCurrentUserInfo(); 
 | 
    } 
 | 
    if (!userStoreHook.token) { 
 | 
      userStoreHook.initToken(); 
 | 
    } 
 | 
    if (to.path === '/login') { 
 | 
      // if is logged in, redirect to the home page 
 | 
      next({ path: '/' }); 
 | 
      NProgress.done(); 
 | 
    } else { 
 | 
      const modules = permissionStoreHook.permission_routes; 
 | 
      if (modules.length !== 0) { 
 | 
        if (to.matched.length === 0) { 
 | 
          next({ path: '/404' }); 
 | 
        } else { 
 | 
          next(); 
 | 
        } 
 | 
      } else { 
 | 
        try { 
 | 
          // generate accessible routes map based on roles 
 | 
          const accessRoutes = await permissionStoreHook.getModuleList(); 
 | 
          console.log('accessRoutes: ', accessRoutes); 
 | 
          // // dynamically add accessible routes 
 | 
          accessRoutes.forEach((route: Route) => { 
 | 
            router.addRoute(route); 
 | 
          }); 
 | 
          next({ ...to, replace: true }); 
 | 
        } catch (error) { 
 | 
          console.log('getModuleList error: ', error); 
 | 
          // remove token and go to login page to re-login 
 | 
          userStoreHook.resetToken(); 
 | 
          permissionStoreHook.resetModuleList(); 
 | 
          // Message.error(error || 'Has Error') 
 | 
          next(`/login?redirect=${to.path}`); 
 | 
          NProgress.done(); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } else { 
 | 
    if (whiteList.some((x) => to.path.toLowerCase().includes(x.toLowerCase()))) { 
 | 
      next(); 
 | 
    } else { 
 | 
      permissionStoreHook.resetModuleList(); 
 | 
      next(`/login?redirect=${to.path}`); 
 | 
      NProgress.done(); 
 | 
    } 
 | 
    // const accessRoutes = await permissionStoreHook.getModuleList(); 
 | 
    // console.log('accessRoutes: ', accessRoutes); 
 | 
    // // // dynamically add accessible routes 
 | 
    // accessRoutes.forEach((route: Route) => { 
 | 
    //   router.addRoute(route); 
 | 
    // }); 
 | 
    // next({ ...to, replace: true }); 
 | 
  } 
 | 
}); 
 | 
  
 | 
router.afterEach(() => { 
 | 
  // finish progress bar 
 | 
  NProgress.done(); 
 | 
}); 
 |