建立vue項目,配置環境變量,後續須要用到。這裏只配置生產環境和開發環境。javascript
NODE_ENV=production VUE_APP_URL=http://456.com
NODE_ENV=development VUE_APP_URL=http://123.com
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) var constantRouterMap=[] export default new Router({ routes: constantRouterMap, mode:'history' })
module.exports = file => require('@/views/' + file + '.vue').default // vue-loader at least v13.0.0+
module.exports = file => () => import('@/views/' + file + '.vue')
import router from './router' import { Message } from 'element-ui' import axios from 'axios' const _import = require('./router/_import_' + process.env.NODE_ENV) //獲取組件的方法 import Layout from '@/views/layout' //Layout 是架構組件,不在後臺返回,在文件裏單獨引入 var getRouter //用來獲取後臺拿到的路由 let IsFirst = true;//是否首次進入頁面,避免默認進入地址無權限直接報錯 router.beforeEach((to, from, next) => { if (!getRouter) { //不加這個判斷,路由會陷入死循環 if (!getObjArr('router')) { axios.get('https://www.easy-mock.com/mock/5a5da330d9b48c260cb42ca8/example/antrouter').then(res => { getRouter = res.data; //後臺拿到路由 saveObjArr('router', getRouter) //存儲路由到localStorage router.push(getRouter[0].path); routerGo(to, next) //執行路由跳轉方法 }) } else { //從localStorage拿到了路由 getRouter = getObjArr('router') //拿到路由 routerGo(to, next) } } else { if (to.path == '/404') {//未加載頁面默認會跳轉至404頁面 if (IsFirst) { IsFirst = false; return; } Message.error('您沒有權限進入此頁面哦,快去聯繫管理員開通吧!'); return; } else { next() } } }) function routerGo(to, next) { getRouter = filterAsyncRouter(getRouter) //過濾路由 router.addRoutes(getRouter) //動態添加路由 global.antRouter = getRouter //將路由數據傳遞給全局變量,作側邊欄菜單渲染工做 next({ ...to, replace: true }) } function saveObjArr(name, data) { //localStorage 存儲數組對象的方法 localStorage.setItem(name, JSON.stringify(data)) } function getObjArr(name) { //localStorage 獲取數組對象的方法 return JSON.parse(window.localStorage.getItem(name)); } function filterAsyncRouter(asyncRouterMap) { //遍歷後臺傳來的路由字符串,轉換爲組件對象 const accessedRouters = asyncRouterMap.filter(route => { if (route.component) { if (route.component === 'Layout') {//Layout組件特殊處理 route.component = Layout } else { route.component = _import(route.component) } } if (route.children && route.children.length) { route.children = filterAsyncRouter(route.children) } return true }) return accessedRouters }
[{ path: '/hdedit', name: 'hdEdit', component: 'znfsgl/hdEdit/index', }, { path: '/wxtsjl', name: 'wxtsjl', component: 'znfsgl/wxtsjl/index', }, { path: '/wxsc', name: 'wxsc', component: 'znfsgl/wxsc/index', }]