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.
79 lines
2.1 KiB
79 lines
2.1 KiB
import router from './router' |
|
import store from './store' |
|
import NProgress from 'nprogress' // progress bar |
|
import 'nprogress/nprogress.css' // progress bar style |
|
import getPageTitle from '@/utils/get-page-title' |
|
|
|
import Layout from '@/layout' |
|
|
|
import serve from 'api/login.js' |
|
|
|
NProgress.configure({ showSpinner: false }) // NProgress Configuration |
|
|
|
const whiteList = ['/login'] // no redirect whitelist |
|
|
|
router.beforeEach(async (to, from, next) => { |
|
NProgress.start() |
|
document.title = getPageTitle(to.meta.title) |
|
const hasToken = localStorage.getItem('businessToken') |
|
if (hasToken) { |
|
if (to.path === '/login') { |
|
next({ path: '/' }) |
|
NProgress.done() |
|
} else { |
|
const hasAuth = store.getters.auth && store.getters.auth.length |
|
if (hasAuth) { |
|
next() |
|
} else { |
|
try { |
|
// let infoRes = await serve.getUserInfo(); |
|
// infoRes.data.authList = [1]; |
|
let infoRes = await serve.info() |
|
// infoRes.data.authList = infoRes.authList; |
|
|
|
store.dispatch('user/info', infoRes.data) |
|
|
|
let routerRes = await serve.getCustomerRouters() |
|
let realRouter = filterAsyncRouter(routerRes.data) |
|
store.dispatch('permission/generateRoutes', realRouter) |
|
router.addRoutes(realRouter) |
|
next({ ...to, replace: true }) |
|
} catch (err) { |
|
console.log('catch') |
|
// next("/login"); |
|
NProgress.done() |
|
} |
|
} |
|
} |
|
} else { |
|
if (whiteList.includes(to.path)) { |
|
next() |
|
} else { |
|
next('/login') |
|
NProgress.done() |
|
} |
|
} |
|
}) |
|
|
|
router.afterEach(() => { |
|
NProgress.done() |
|
}) |
|
|
|
function filterAsyncRouter(routers) { |
|
return routers.map(route => { |
|
if (route.component) { |
|
if (route.component === 'Layout') { |
|
route.component = Layout |
|
} else { |
|
route.component = lazyLoad(route.component) |
|
} |
|
} |
|
if (route.children && route.children.length) { |
|
route.children = filterAsyncRouter(route.children) |
|
} |
|
return route |
|
}) |
|
} |
|
function lazyLoad(path) { |
|
return resolve => require([`@/views/${path}`], resolve) |
|
}
|
|
|