import Vue from 'vue' import VueRouter from 'vue-router' import Cookies from 'js-cookie' import pathPosix from 'path-posix' import _get from 'lodash.get' Vue.use(VueRouter) const routesMaker = ({publicPath, namePrefix, req}) => { const win2posix = pathString => pathString.split('\\').join('/') return req.keys().map(req).map(page => { // 每个文件的路径 已经转换为 posix const pagePath = pathPosix.dirname(win2posix(page.default.__file)) // 路由中使用的路径 const path = pagePath .replace(win2posix(publicPath), '') .replace(new RegExp('/page/', 'g'), '/') const name = `${namePrefix}${path.split('/').join('-')}` const route = { path: `${path}${_get(page, 'router.pathSuffix', '')}`, name, ...page.router, meta: { requiresAuth: true }, component: page.default } console.log(JSON.stringify({ path: route.path, name: route.name })) return route }) } const routes = [ // 首页 { path: '/', redirect: { name: 'index' }, component: resolve => { require(['@/components/core/MainLayout/index.vue'], resolve) }, children: [ { path: 'index', name: 'index', meta: { requiresAuth: true }, component: resolve => { require(['@/pages/core/index/index.vue'], resolve) } } ] }, { path: '/demo/plugins', name: 'demo-plugins', meta: { requiresAuth: true }, redirect: { name: 'demo-plugins-index' }, component: resolve => { require(['@/components/core/MainLayout/index.vue'], resolve) }, children: routesMaker({ publicPath: 'src/pages/demo/plugins/', namePrefix: 'demo-plugins-', req: require.context('@/pages/demo/plugins', true, /page\.vue$/) }) }, // 登陆 { path: '/login', name: 'login', component: resolve => { require(['@/pages/core/login/index.vue'], resolve) } } ] console.log(routes) let router = new VueRouter({ routes }) router.beforeEach((to, from, next) => { // 需要身份校验 if (to.meta.requiresAuth) { // 这里暂时将cookie里是否存有token作为验证是否登陆的条件 // 请根据自身业务需要修改 if (Cookies.get('token')) { next() } else { // 没有登陆的时候跳转到登陆界面 next({ name: 'login' }) } } else { // 不需要身份校验 直接通过 next() } }) export default router