| ¶Ô±ÈÐÂÎļþ | 
|  |  |  | 
|---|
|  |  |  | import Vue from 'vue' | 
|---|
|  |  |  | import App from './App.vue' | 
|---|
|  |  |  | import router from './router' | 
|---|
|  |  |  | import store from './store' | 
|---|
|  |  |  | import ElementUI from 'element-ui' | 
|---|
|  |  |  | import './assets/style/element-variables.scss' | 
|---|
|  |  |  | import VueClipboard from 'vue-clipboard2' | 
|---|
|  |  |  | import directives from './directives' | 
|---|
|  |  |  | import filters from './filters' | 
|---|
|  |  |  | import plugins from './plugins' | 
|---|
|  |  |  | import { mapState, mapMutations } from 'vuex' | 
|---|
|  |  |  | import { fetchMenuTree } from './api/system/menu' | 
|---|
|  |  |  | import Treeselect from '@riophae/vue-treeselect' | 
|---|
|  |  |  | import '@riophae/vue-treeselect/dist/vue-treeselect.css' | 
|---|
|  |  |  | Vue.component('treeselect', Treeselect) | 
|---|
|  |  |  | Vue.config.productionTip = false | 
|---|
|  |  |  | Vue.use(ElementUI, { | 
|---|
|  |  |  | size: 'small' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | Vue.use(VueClipboard) | 
|---|
|  |  |  | Vue.use(directives) | 
|---|
|  |  |  | Vue.use(filters) | 
|---|
|  |  |  | Vue.use(plugins) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | new Vue({ | 
|---|
|  |  |  | data: { | 
|---|
|  |  |  | loading: false | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | router, | 
|---|
|  |  |  | store, | 
|---|
|  |  |  | computed: { | 
|---|
|  |  |  | ...mapState(['userInfo', 'homePage']) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | watch: { | 
|---|
|  |  |  | async userInfo () { | 
|---|
|  |  |  | if (this.userInfo == null) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await this.initRoutes() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | ...mapMutations(['switchCollapseMenu', 'setHomePage']), | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * åå§åæ¬å°é
ç½® | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | initLocalConfig () { | 
|---|
|  |  |  | // èåç¶æé
ç½® | 
|---|
|  |  |  | const menuStatus = window.localStorage.getItem('MENU_STATUS') | 
|---|
|  |  |  | if (menuStatus != null) { | 
|---|
|  |  |  | this.switchCollapseMenu(menuStatus === 'true') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * åå§åè·¯ç± | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @returns {Promise<void>} | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | async initRoutes () { | 
|---|
|  |  |  | if (this.loading || this.userInfo == null) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.loading = true | 
|---|
|  |  |  | // éç½®èå | 
|---|
|  |  |  | this.$store.commit('resetMenus') | 
|---|
|  |  |  | // è·åèå | 
|---|
|  |  |  | const storeMenus = this.$store.state.menuData.list | 
|---|
|  |  |  | if (storeMenus.length > 0 && this.homePage == null) { | 
|---|
|  |  |  | this.setHomePage(storeMenus[0]) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await fetchMenuTree() | 
|---|
|  |  |  | .then(menus => { | 
|---|
|  |  |  | // æ·»å èå | 
|---|
|  |  |  | storeMenus.push.apply(storeMenus, menus) | 
|---|
|  |  |  | // æ·»å è·¯ç± | 
|---|
|  |  |  | this.__addRouters(storeMenus) | 
|---|
|  |  |  | // 404 | 
|---|
|  |  |  | router.addRoute({ | 
|---|
|  |  |  | path: '*', | 
|---|
|  |  |  | redirect: '/not-found' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | // é¦é¡µ | 
|---|
|  |  |  | router.addRoute({ | 
|---|
|  |  |  | name: 'index', | 
|---|
|  |  |  | path: '/', | 
|---|
|  |  |  | redirect: this.homePage.url | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | // è·¯ç±å è½½å®æåï¼å¦æè®¿é®çæ¯/ï¼è·³è½¬è³å¨æè¯å«çé¦é¡µ | 
|---|
|  |  |  | if (this.$route.path === '/') { | 
|---|
|  |  |  | this.$router.push(this.homePage.url) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(e => { | 
|---|
|  |  |  | throw e | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .finally(() => { | 
|---|
|  |  |  | this.loading = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * æ°å»ºè·¯ç± | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param routes éæ·»å çè·¯ç± | 
|---|
|  |  |  | * @param parents éæ·»å å°çç®æ å表 | 
|---|
|  |  |  | * @private | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | __addRouters (routes, parents = []) { | 
|---|
|  |  |  | if (routes == null || routes.length === 0) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const rs = router.getRoutes() | 
|---|
|  |  |  | for (const route of routes) { | 
|---|
|  |  |  | const parentsDump = JSON.parse(JSON.stringify(parents)) | 
|---|
|  |  |  | parentsDump.push(route) | 
|---|
|  |  |  | if (route.url == null || route.url === '') { | 
|---|
|  |  |  | this.__addRouters(route.children, parentsDump) | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (rs.findIndex(r => r.path === route.url) > -1) { | 
|---|
|  |  |  | this.__addRouters(route.children, parentsDump) | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.homePage == null) { | 
|---|
|  |  |  | this.setHomePage(route) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | router.addRoute('layout', { | 
|---|
|  |  |  | path: route.url, | 
|---|
|  |  |  | name: route.label, | 
|---|
|  |  |  | meta: { | 
|---|
|  |  |  | title: route.label, | 
|---|
|  |  |  | paths: [...parents.map(p => p.label), route.label] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | component: () => import('@/views' + route.url) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.__addRouters(route.children, parentsDump) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | async created () { | 
|---|
|  |  |  | if (this.userInfo == null) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await this.initRoutes() | 
|---|
|  |  |  | .catch(() => {}) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | mounted () { | 
|---|
|  |  |  | this.initLocalConfig() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | render: h => h(App) | 
|---|
|  |  |  | }).$mount('#app') | 
|---|