UNPKG

vmf

Version:

vue micro service frame

236 lines (230 loc) 6.79 kB
import Vue from 'vue'; export { default as Vue } from 'vue'; import Filter from '@vmf/filter'; import I18n from '@vmf/i18n'; export { $$t, create$$t } from '@vmf/i18n'; import Power from '@vmf/power'; export { addPower, hasPower } from '@vmf/power'; import * as Utils from '@vmf/shared'; import { GlobalVar, Md5 } from '@vmf/shared'; export { Utils }; export { GlobalVar } from '@vmf/shared'; import { initialMethodMap, router } from '@vmf/router'; export * from '@vmf/router'; import { registerModule, store } from '@vmf/vuex'; export * from '@vmf/vuex'; import VueMeta from 'vue-meta'; import { get, post, postJson, href, createCancelToken, setToken } from '@vmf/request'; export * from '@vmf/request'; import { localStorage } from '@vmf/storage'; export * from '@vmf/storage'; /** * Created by henian.xu on 2019/11/24. * */ var Plugin = (vue) => { const { appConfig = {} } = GlobalVar; vue.prototype.$defaultImg = appConfig.DEFAULT_IMG; vue.use(VueMeta, appConfig.VUE_META); }; /** * Created by henian.xu on 2020/2/14. * */ const Http = Object.freeze({ get, post, postJson, href, createCancelToken, }); var Api = (vue) => { Object.defineProperty(vue, '$http', { get() { return Http; }, }); Object.defineProperty(vue.prototype, '$http', { get() { return Http; }, }); }; /** * Created by henian.xu on 2019/11/25. * */ var UtilsInstall = (vue) => { Object.defineProperty(vue, '$utils', { get() { return Utils; }, }); Object.defineProperty(vue.prototype, '$utils', { get() { return Utils; }, }); }; /** * Created by henian.xu on 2020/1/8. * */ const rawData = localStorage.get('__USER_DATA__') || {}; if (rawData.token) { setToken(rawData.token); } registerModule('User', { namespaced: true, state: { rawData, }, getters: { userData(state) { return state.rawData; }, userInfo(state, getters) { return (getters.userData || {}).user || {}; }, token(state) { return state.rawData.token; }, account(state, getters) { const { userInfo } = getters; return userInfo.account || ''; }, fullName(state, getters) { const { userInfo } = getters; return userInfo.fullName || ''; }, }, mutations: { setRawData(state, data) { state.rawData = data || {}; if (data) setToken(data.token); localStorage.set('__USER_DATA__', data); }, setUserInfo(state, data) { if (!state.rawData) state.rawData = {}; rawData.user = { ...state.rawData.user, ...data, }; localStorage.set('__USER_DATA__', state.rawData); }, }, actions: { async login({ commit }, options) { const params = { ...options, password: options.password ? Md5(options.password) : '', }; const { data } = await post(`${GlobalVar.appConfig.USER_API}/login`, params, { isSuccessTip: true, isAxiosResponseData: true, }); commit('setRawData', data); try { commit('remoteSelectCache/clearCacheData', null, { root: true }); } catch (e) { console.error(e); } }, async logout() { await post(`${GlobalVar.appConfig.USER_API}/logout`, {}, { isSuccessTip: true, }); Object.values(initialMethodMap).forEach(initialMethod => { initialMethod.isCalled = false; }); const backUrl = `?backUrl=${encodeURIComponent('/')}`; await router.replace(`/login${backUrl}`); }, async modifyPassword({ commit }, options) { const params = { ...options, password: options.password ? Md5(options.password) : '', oldPassword: options.oldPassword ? Md5(options.oldPassword) : '', }; await post(`${GlobalVar.appConfig.USER_API}/modifyPwdByUser`, params, { isSuccessTip: true, }); }, async clearCache() { await post(`${GlobalVar.appConfig.USER_API}/clearCache`, {}, { isSuccessTip: true, }); }, }, }); registerModule('App', { namespaced: true, state: { rawData: null, }, getters: { appList(state) { return state.rawData; }, }, mutations: { setRawData(state, data) { state.rawData = data; }, }, actions: { async getAppList({ state, commit }) { if (state.rawData !== null) return; const { data } = await get(GlobalVar.appConfig.APP_LIST_API, {}, { isAxiosResponseData: true, }); commit('setRawData', data); }, }, }); /** * Created by henian.xu on 2019/11/18. * */ Vue.use(Filter); Vue.use(Power); Vue.use(Plugin); Vue.use(Api); Vue.use(UtilsInstall); // TODO 处理使用 cdn 引用vue.min.js 时无效的问题 // Vue.config.productionTip = Utils.GlobalVar.productionTip; const beforeCreateFns = []; const requireProject = require.context('@', true, /main\.js$/); requireProject.keys().forEach((fileName) => { // 只会获取1级和2级目录下的main.js文件 if (fileName.split('/').length > 3) return; const res = requireProject(fileName); if (res.beforeCreate) beforeCreateFns.push(res.beforeCreate()); }); Vue.use(I18n); Promise.all(beforeCreateFns).then(res => { // vue-meta 处理标题 const keyName = (GlobalVar.appConfig && GlobalVar.appConfig.VUE_META && GlobalVar.appConfig.VUE_META.keyName) || 'metaInfo'; new Vue({ router, store, [keyName]() { const { meta: { title = '', subTitle = '', i18nKey = '' }, } = this.$route; return { title: this.$$t(i18nKey || '', `${title}${subTitle ? `-${subTitle}` : subTitle}` || GlobalVar.DocTitle), }; }, render: h => h('div', { attrs: { id: 'app', }, }, [h('router-view')]), }).$mount('#app'); }); //# sourceMappingURL=vmf.esm-bundler.js.map