From 2ce5d06b328cdedb21df3366ce7f381ca53d439a Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 29 Oct 2026 17:19:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BE=E7=BD=AE=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client-base/src/setting/index.ts | 1 + .../client-base/src/setting/types.ts | 106 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 packages-user/client-base/src/setting/index.ts create mode 100644 packages-user/client-base/src/setting/types.ts diff --git a/packages-user/client-base/src/setting/index.ts b/packages-user/client-base/src/setting/index.ts new file mode 100644 index 0000000..fcb073f --- /dev/null +++ b/packages-user/client-base/src/setting/index.ts @@ -0,0 +1 @@ +export * from './types'; diff --git a/packages-user/client-base/src/setting/types.ts b/packages-user/client-base/src/setting/types.ts new file mode 100644 index 0000000..fd4fb8f --- /dev/null +++ b/packages-user/client-base/src/setting/types.ts @@ -0,0 +1,106 @@ +import { ISaveableContent } from '@user/data-common'; +import { DefineComponent, DefineSetupFnComponent } from 'vue'; + +export interface ISettingComponentProps { + /** 当前设置组件对应的设置项 */ + readonly setting: ISettingItem; +} + +export interface ISettingItem extends ISaveableContent { + /** 设置项的唯一标识 */ + readonly id: string; + /** 设置项的名称,用于显示 */ + readonly name: string; + /** 设置项的说明文本 */ + readonly description: string; + + /** + * 获取当前设置项的值 + */ + getValue(): T; + + /** + * 设置当前设置项的值 + * @param value 新的设置值 + */ + setValue(value: T): void; + + /** + * 获取当前设置值的预览文本 + */ + getPreviewString(): string; + + /** + * 获取用于修改此设置项的组件 + */ + getSettingComponent(): + | DefineSetupFnComponent + | DefineComponent; +} + +export interface ISettingItemGroup { + /** 设置分组的名称 */ + readonly name: string; + /** 分组包含的设置项列表 */ + readonly items: readonly ISettingItem[]; +} + +export interface ISettingSystemSave { + /** 所有设置项的值,键为设置项 id */ + readonly values: ReadonlyMap; +} + +export interface ISettingSystem extends ISaveableContent { + /** 所有设置分组,键为分组 id */ + readonly groups: ReadonlyMap; + + /** + * 设置指定分组的设置项列表,若不存在分组则创建 + * @param group 设置分组 id + * @param name 设置分组名称,用于显示 + * @param items 分组中包含的设置项 + */ + setGroup(group: string, name: string, items: ISettingItem[]): void; + + /** + * 向设置分组中添加新的设置项 + * @param group 设置分组 id + * @param item 要添加的设置项 + */ + addSettingToGroup(group: string, item: ISettingItem): void; + + /** + * 获取指定的设置分组 + * @param group 设置分组 id + */ + getGroup(group: string): ISettingItemGroup | null; + + /** + * 获取不存在于任何分组的设置项 + */ + getUngrouped(): Iterable; + + /** + * 获取指定的设置项 + * @param id 设置项 id + */ + getSetting(id: string): ISettingItem | null; + + /** + * 迭代所有的设置分组 + */ + iterateGroups(): Iterable<[id: string, group: ISettingItemGroup]>; + + /** + * 获取指定设置项的值 + * @param id 设置项 id + */ + getValue(id: string): T | undefined; + + /** + * 设置指定设置项的值 + * @param id 设置项 id + * @param value 新的设置值 + */ + setValue(id: string, value: T): void; +}