这是基于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.
 
 
 
 
 
 

83 lines
2.1 KiB

import { computed } from 'vue';
import { useAbpStoreWithOut } from '/@/store/modules/abp';
type SettingValue = NameValue<string>;
/**
* 设置接口
*/
export interface ISettingProvider {
/**
* 查询 number 类型设定值
* @param name 设置名称
* @returns 返回类型为 number 的设定值, 默认0
*/
getNumber(name: string): number;
/**
* 查询 boolean 类型设定值
* @param name 设置名称
*/
isTrue(name: string): boolean;
/**
* 获取设定值,如果为空返回空字符串
* @param name 设置名称
*/
getOrEmpty(name: string): string;
/**
* 获取设定值结合
* @param names 过滤的设置名称
*/
getAll(...names: string[]): SettingValue[];
}
export function useSettings() {
const getSettings = computed(() => {
const abpStore = useAbpStoreWithOut();
const { values: settings } = abpStore.getApplication.setting;
const settingValues = Object.keys(settings).map((key): SettingValue => {
return {
name: key,
value: settings[key],
};
});
return settingValues;
});
function get(name: string): SettingValue | undefined {
return getSettings.value.find((setting) => name === setting.name);
}
function getAll(...names: string[]): SettingValue[] {
if (names) {
return getSettings.value.filter((setting) => names.includes(setting.name));
}
return getSettings.value;
}
function getOrDefault<T>(name: string, defaultValue: T): T | string {
var setting = get(name);
if (!setting) {
return defaultValue;
}
return setting.value;
}
const settingProvider: ISettingProvider = {
getOrEmpty(name: string) {
return getOrDefault(name, '');
},
getAll(...names: string[]) {
return getAll(...names);
},
getNumber(name: string, defaultValue: number = 0) {
var value = getOrDefault(name, defaultValue);
const num = Number(value);
return isNaN(num) ? defaultValue : num;
},
isTrue(name: string) {
var value = getOrDefault(name, 'false');
return value.toLowerCase() === 'true';
},
};
return { settingProvider };
}