|
/**
* @file 本文件实现了应用初始化逻辑
* @author PRD UX R&D Dept.
*/
// 引入第三方库
import 'babel-polyfill'
import Vue from 'vue'
import { sync } from 'vuex-router-sync'
// 引入aid库
import aid from 'aid-desktop'
import createStore from './store'
import frame from './frame.vue'
import i18nManager from './i18n'
import createRouter from './router'
import PKGJson from '../package.json'
import '@/styles/index.scss' // global css
import VideoPlayer from 'vue-video-player'
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css')
Vue.use(VideoPlayer)
// 这个是为了兼容 m3u8
// const hls = require('videojs-contrib-hls')
// Vue.use(hls)
import axios from 'axios'
axios.defaults.withCredentials = true
// 安装组件库插件
Vue.use(aid, {
local: i18nManager.language,
i18n: (path, options) => {
let value = i18nManager.i18n.t(path, options)
if (value !== null && value !== undefined) return value
return ''
},
all: true
})
let router = null
let store = null
let app = null
function createApp (props = {}) {
const { container } = props
router = createRouter()
store = createStore()
// 将路由状态同步到store中
sync(store, router)
store.dispatch('permission/generateRoutes', 'user')
// webpack热更新支持
if (module.hot) {
module.hot.accept()
}
app = new Vue({
store,
router,
i18n: i18nManager.i18n,
render (h) {
return h(frame)
}
}).$mount(container ? container.querySelector('#app') : '#app')
app.$Message.config({
closable: true,
duration: 0
})
}
if (!window.__POWERED_BY_QIANKUN__) {
createApp()
}
export function bootstrap () {
return Promise.resolve().then(() => {
console.log(`${PKGJson.name} 应用已启动`)
})
}
export async function mount (props) {
return Promise.resolve().then(() => {
console.log(`${PKGJson.name} 应用已挂载`)
createApp(props)
})
}
export async function unmount () {
return Promise.resolve().then(() => {
app.$destroy()
app.$el.innerHTML = ''
app = null
store = null
router = null
})
}
|