3 changed files with 75 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
export * from './useDefineSettings'; |
||||
@ -0,0 +1,73 @@ |
|||||
|
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'; |
||||
|
}, |
||||
|
}; |
||||
|
} |
||||
@ -1,3 +1,4 @@ |
|||||
export * from './api'; |
export * from './api'; |
||||
export * from './components'; |
export * from './components'; |
||||
|
export * from './hooks'; |
||||
export * from './types'; |
export * from './types'; |
||||
|
|||||
Loading…
Reference in new issue