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

73 lines
1.9 KiB

import type { ISettingProvider, SettingValue } from '@abp/core';
import type { SettingGroup } from '../types/settings';
import { ref } from 'vue';
interface UserDefineSettingProvider extends ISettingProvider {
/**
* 初始化配置项
* @param groups 配置分组
*/
initlize(groups: SettingGroup[]): void;
}
/**
* 自定义设置管理Hooks
* @returns 自定义设置管理器
* @summary 请事先获取配置分组后通过 initlize 函数设置初始化设置值
*/
export function useDefineSettings(): UserDefineSettingProvider {
const settings = ref<SettingValue[]>([]);
function initlize(groups: SettingGroup[]) {
const setSettings: SettingValue[] = [];
groups.forEach((group) => {
group.settings.forEach((setting) => {
setting.details.forEach((detail) => {
setSettings.push({
name: detail.name,
value: detail.value ?? detail.defaultValue,
});
});
});
});
settings.value = setSettings;
}
function get(name: string): SettingValue | undefined {
return settings.value.find((setting) => name === setting.name);
}
function getAll(...names: string[]): SettingValue[] {
if (names) {
return settings.value.filter((setting) => names.includes(setting.name));
}
return settings.value;
}
function getOrDefault<T>(name: string, defaultValue: T): string | T {
const setting = get(name);
if (!setting) {
return defaultValue;
}
return setting.value;
}
return {
getAll,
getNumber(name: string, defaultValue: number = 0) {
const value = getOrDefault(name, defaultValue);
const num = Number(value);
return Number.isNaN(num) ? defaultValue : num;
},
getOrEmpty(name: string) {
return getOrDefault(name, '');
},
initlize,
isTrue(name: string) {
const value = getOrDefault(name, 'false');
return value?.toLowerCase() === 'true';
},
};
}