58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
|
|
import { BimComponent } from '../core/component';
|
|||
|
|
import { BimTree } from '../components/tree/index';
|
|||
|
|
import { TreeOptions } from '../components/tree/types';
|
|||
|
|
import type { BimEngine } from '../bim-engine';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 树组件管理器
|
|||
|
|
* 负责创建和管理 BimTree 实例
|
|||
|
|
*/
|
|||
|
|
export class TreeManager extends BimComponent {
|
|||
|
|
|
|||
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|||
|
|
constructor(engine: BimEngine, _container: HTMLElement) {
|
|||
|
|
super(engine);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建一个新的树组件实例
|
|||
|
|
* @param options 配置选项
|
|||
|
|
*/
|
|||
|
|
public create(options: TreeOptions): BimTree {
|
|||
|
|
const tree = new BimTree(options);
|
|||
|
|
|
|||
|
|
// 绑定事件桥接
|
|||
|
|
tree.onNodeCheck = (node) => {
|
|||
|
|
this.emit('ui:tree-node-check', {
|
|||
|
|
id: node.config.id,
|
|||
|
|
checked: node.config.checked || false,
|
|||
|
|
node: node.config
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
tree.onNodeSelect = (node) => {
|
|||
|
|
this.emit('ui:tree-node-select', {
|
|||
|
|
id: node.config.id,
|
|||
|
|
selected: true,
|
|||
|
|
node: node.config
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
tree.onNodeExpand = (node) => {
|
|||
|
|
this.emit('ui:tree-node-expand', {
|
|||
|
|
id: node.config.id,
|
|||
|
|
expanded: node.config.expanded || false
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
tree.init();
|
|||
|
|
return tree;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public destroy(): void {
|
|||
|
|
// TreeManager 本身不持有 Tree 实例的强引用列表
|
|||
|
|
// 实例通常由调用者(如 Dialog)持有并销毁
|
|||
|
|
// 这里可以做一些全局清理工作
|
|||
|
|
}
|
|||
|
|
}
|