diff --git a/src/App.vue b/src/App.vue index 68a088d..38e18d8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,10 +17,9 @@ export default { } }, created () { - let _this = this this.setLanguage(this.lang) enquireScreen(isMobile => { - _this.$store.commit('setting/setDevice', isMobile) + this.$store.commit('setting/setDevice', isMobile) }) }, mounted() { diff --git a/src/bootstrap.js b/src/bootstrap.js new file mode 100644 index 0000000..7b1ae4b --- /dev/null +++ b/src/bootstrap.js @@ -0,0 +1,23 @@ +// 应用启动时需要执行的操作放在这里 +import {loadRoutes} from '@/utils/routerUtil' + +/** + * 启动引导方法 + * @param router 应用的路由实例 + * @param store 应用的 vuex.store 实例 + * @param i18n 应用的 vue-i18n 实例 + */ +function bootstrap({router, store, i18n}) { + // 加载本地存储的异步路由 + const localRoutes = localStorage.getItem('routes') + if (localRoutes) { + try { + const routesConfig = JSON.parse(localRoutes) + loadRoutes(routesConfig, router, store, i18n) + } catch (e) { + console.error(e.message) + } + } +} + +export default bootstrap diff --git a/src/layouts/AdminLayout.vue b/src/layouts/AdminLayout.vue index 932483b..80c364e 100644 --- a/src/layouts/AdminLayout.vue +++ b/src/layouts/AdminLayout.vue @@ -35,8 +35,6 @@ import {mapState, mapMutations} from 'vuex' const minHeight = window.innerHeight - 64 - 24 - 122 -let menuData = [] - export default { name: 'AdminLayout', components: {Setting, SideMenu, Drawer, PageFooter, AdminHeader}, @@ -44,12 +42,12 @@ export default { return { minHeight: minHeight, collapsed: false, - menuData: menuData, showSetting: false } }, computed: { - ...mapState('setting', ['isMobile', 'theme', 'layout', 'footerLinks', 'copyright', 'fixedHeader', 'fixedSideBar', 'hideSetting', 'pageMinHeight']), + ...mapState('setting', ['isMobile', 'theme', 'layout', 'footerLinks', 'copyright', 'fixedHeader', 'fixedSideBar', + 'hideSetting', 'menuData']), sideMenuWidth() { return this.collapsed ? '80px' : '256px' }, @@ -74,9 +72,6 @@ export default { }, beforeDestroy() { this.correctPageMinHeight(-minHeight + 1) - }, - beforeCreate () { - menuData = this.$router.options.routes.find((item) => item.path === '/').children } } diff --git a/src/main.js b/src/main.js index 3e73cc0..f426f1c 100644 --- a/src/main.js +++ b/src/main.js @@ -9,14 +9,16 @@ import store from './store' import 'animate.css/source/animate.css' import Plugins from '@/plugins' import {initI18n} from '@/utils/i18n' +import bootstrap from '@/bootstrap' + +const i18n = initI18n(router, 'CN', 'US') +bootstrap({router, store, i18n}) Vue.config.productionTip = false Vue.use(Viser) Vue.use(Antd) Vue.use(Plugins) -const i18n = initI18n(router, 'CN', 'US') - new Vue({ router, store, diff --git a/src/mock/index.js b/src/mock/index.js index 503fc8e..a760748 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -1,5 +1,6 @@ import Mock from 'mockjs' import '@/mock/user/login' +import '@/mock/user/routes' // 设置全局延时 Mock.setup({ diff --git a/src/mock/user/routes.js b/src/mock/user/routes.js new file mode 100644 index 0000000..78f4316 --- /dev/null +++ b/src/mock/user/routes.js @@ -0,0 +1,24 @@ +import Mock from 'mockjs' + +Mock.mock('/routes', 'get', () => { + let result = {} + result.code = 0 + result.data = [{ + router: 'root', + children: ['demo', + { + router: 'parent1', + children: ['demo'], + }, + { + router: 'parent2', + children: ['demo'], + }, + { + router: 'exception', + children: ['exp404', 'exp403', 'exp500'], + } + ] + }] + return result +}) diff --git a/src/pages/login/Login.vue b/src/pages/login/Login.vue index 797f0b6..460fb79 100644 --- a/src/pages/login/Login.vue +++ b/src/pages/login/Login.vue @@ -75,8 +75,9 @@