vmf
Version:
vue micro service frame
236 lines (230 loc) • 6.79 kB
JavaScript
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