refactor: 重构 Manager 架构,引入 ManagerRegistry 和 BaseManager 基类

- 新增 ManagerRegistry 单例注册表,统一管理所有 Manager 实例
- 新增 BaseManager 基类,自动管理事件订阅清理
- 新增 BaseDialogManager 基类,统一对话框生命周期管理
- 重构 15 个 Manager 使用新基类
- 重构 Toolbar 按钮和 Menu 按钮移除 engine 参数依赖
- 删除 BimComponent 基类(已不再使用)
- 为所有 Manager 和核心模块添加中文 JSDoc 注释
This commit is contained in:
yuding
2026-01-22 15:23:57 +08:00
parent f2460fb981
commit 31b60e84ce
47 changed files with 5580 additions and 5341 deletions

View File

@@ -1,46 +1,65 @@
/**
* 按钮组管理器
* 负责创建和管理按钮组实例
*/
import { BimButtonGroup } from '../components/button-group';
import type { ButtonGroupOptions } from '../components/button-group/index.type';
import type { ThemeConfig } from '../themes/types';
import { BimComponent } from '../core/component';
import type { BimEngine } from '../bim-engine';
import { BaseManager } from '../core/base-manager';
/**
* 通用按钮组管理器 (ButtonGroupManager)
* 负责创建和管理通用的按钮组实例。
* 按钮组管理器
* 统一管理多个按钮组的创建、主题更新和销毁
*/
export class ButtonGroupManager extends BimComponent {
export class ButtonGroupManager extends BaseManager {
/** 按钮组映射表 */
private groups: Map<string, BimButtonGroup> = new Map();
/** 容器元素 */
private container: HTMLElement;
constructor(engine: BimEngine, container: HTMLElement) {
super(engine);
constructor(container: HTMLElement) {
super();
this.container = container;
}
/**
* 创建按钮组
* @param id 按钮组 ID
* @param options 按钮组配置
* @returns 按钮组实例
*/
public create(id: string, options: Omit<ButtonGroupOptions, 'container'>): BimButtonGroup {
const group = new BimButtonGroup({
container: this.container,
...options
});
// @ts-ignore
group.setEngine(this.engine);
group.init();
this.groups.set(id, group);
return group;
}
/**
* 获取按钮组
* @param id 按钮组 ID
* @returns 按钮组实例
*/
public get(id: string): BimButtonGroup | undefined {
return this.groups.get(id);
}
/**
* 更新所有按钮组的主题
* @param theme 主题配置
*/
public updateTheme(theme: ThemeConfig) {
this.groups.forEach(group => group.setTheme(theme));
}
/** 销毁管理器和所有按钮组 */
public destroy() {
this.groups.forEach(group => group.destroy());
this.groups.clear();
super.destroy();
}
}