import { LoadingBar } from 'view-design' import router from './router' import store from './store' import createRoutes from '@/utils/createRoutes' import { getDocumentTitle, resetTokenAndClearUser } from './utils' // import { getMenuList } from './api' // 是否有菜单数据 let hasMenus = false router.beforeEach(async (to, from, next) => { document.title = getDocumentTitle(to.meta.title) LoadingBar.start() if (localStorage.getItem('token')) { if (to.path === '/login') { next({ path: '/' }) } else if (hasMenus) { next() } else { try { let menuItems = store.state.menuItems // let apiMenu = [] // await getMenuList({ token: localStorage.getItem('token') }).then((res) => { // res.forEach((i) => { // apiMenu.push({ // text: i.text, // type: i.type, // children: i.children, // }) // }) // menuItems = apiMenu // }) // 这里可以用 await 配合请求后台数据来生成路由 // const data = await axios.get('xxx') // const routes = createRoutes(data) const routes = createRoutes(menuItems) // 动态添加路由 router.addRoutes(routes) hasMenus = true next({ path: to.path || '/' }) } catch (error) { resetTokenAndClearUser() next(`/login?redirect=${to.path}`) } } } else { hasMenus = false if (to.path === '/login') { next() } else { next(`/login?redirect=${to.path}`) } } }) router.afterEach(() => { LoadingBar.finish() })