这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

102 lines
3.6 KiB

import { defineStore } from 'pinia';
import { store } from '/@/store';
import { ABP_APP_KEY, ABP_API_KEY } from '/@/enums/cacheEnum';
import { createLocalStorage } from '/@/utils/cache';
import { i18n } from '/@/locales/setupI18n';
import { GetAsyncByModel as getApiDefinition } from '/@/api/abp/api-definition';
import { ApplicationApiDescriptionModel } from '/@/api/abp/api-definition/model';
import { GetAsyncByOptions as getApplicationConfiguration } from '/@/api/abp/application-configuration';
const ls = createLocalStorage();
const defaultApp = {};
const defaultApi = new ApplicationApiDescriptionModel();
const lsApplication = (ls.get(ABP_APP_KEY) || defaultApp) as ApplicationConfigurationDto;
const lsApiDefinition = (ls.get(ABP_API_KEY) || defaultApi) as ApplicationApiDescriptionModel;
interface AbpState {
application: ApplicationConfigurationDto;
apidefinition: ApplicationApiDescriptionModel;
}
export const useAbpStore = defineStore({
id: 'abp',
state: (): AbpState => ({
application: lsApplication,
apidefinition: lsApiDefinition,
}),
getters: {
getApplication(state) {
return state.application ?? defaultApp;
},
getApiDefinition(state) {
return state.apidefinition ?? defaultApi;
},
},
actions: {
resetSession() {
// 清除与用户相关的信息
this.application.auth = {} as ApplicationAuthConfigurationDto;
this.application.currentUser = {} as CurrentUser;
},
setApplication(application: ApplicationConfigurationDto) {
this.application = application;
ls.set(ABP_APP_KEY, application);
},
setApiDefinition(apidefinition: ApplicationApiDescriptionModel) {
this.apidefinition = apidefinition;
ls.set(ABP_API_KEY, apidefinition);
},
mergeLocaleMessage(localization: ApplicationLocalizationConfigurationDto) {
if (localization.languagesMap['vben-admin-ui']) {
const transferCulture = localization.languagesMap['vben-admin-ui'].filter(
(x) => x.value === localization.currentCulture.cultureName,
);
function transformAbpLocaleMessageDicToI18n(abpLocaleMessageDic) {
const i18nLocaleMessageDic = {};
Object.keys(abpLocaleMessageDic).forEach((vKey) => {
i18nLocaleMessageDic[vKey] = {};
Object.keys(abpLocaleMessageDic[vKey]).forEach((mKey) => {
let msgKey = mKey;
// 处理最后一个字符以适配 i18n
if (msgKey.endsWith('.')) {
msgKey = msgKey.substring(0, msgKey.length - 1);
}
i18nLocaleMessageDic[vKey][msgKey] = abpLocaleMessageDic[vKey][mKey];
});
});
return i18nLocaleMessageDic;
}
if (transferCulture && transferCulture.length > 0) {
i18n.global.mergeLocaleMessage(
transferCulture[0].name,
transformAbpLocaleMessageDicToI18n(localization.values),
);
} else {
i18n.global.mergeLocaleMessage(
localization.currentCulture.cultureName,
transformAbpLocaleMessageDicToI18n(localization.values),
);
}
}
},
async initlizeAbpApplication() {
const application = await getApplicationConfiguration();
this.setApplication(application);
const { localization } = application;
this.mergeLocaleMessage(localization);
},
async initlizaAbpApiDefinition() {
const apidefinition = await getApiDefinition();
this.setApiDefinition(apidefinition);
},
},
});
export function useAbpStoreWithOut() {
return useAbpStore(store);
}