添加折叠面板

This commit is contained in:
yuding
2025-12-22 15:39:58 +08:00
parent 005535a26d
commit ed0414c75b
29 changed files with 2759 additions and 1416 deletions

View File

@@ -461,28 +461,19 @@ interface IBimComponent {
- **BimEngine**: 总控制器,通过 Manager 统一管理所有组件
#### 为什么必须通过 Manager
1. **统一管理**: Manager 负责组件的生命周期管理,确保资源正确释放
1. **强制统一管理**: SDK 入口不再导出组件类(如 `BimDialog`),物理上切断了直接实例化的可能。
2. **主题和语言**: Manager 统一应用主题和国际化,保证一致性
3. **事件总线**: Manager 可以监听和发送事件,实现组件间解耦通信
- 简单场景:直接调用 Manager 方法
- 复杂场景:通过事件总线进行发布订阅
4. **容器管理**: Manager 管理组件的挂载容器,避免冲突
5. **API 封装**: Manager 提供统一的公共 API隐藏组件实现细节
#### 使用示例
**❌ 错误方式 - 直接使用组件:**
**❌ 错误方式 - 尝试直接导入组件:**
```typescript
// 错误:直接创建和使用组件
import { BimDialog } from 'bim-engine-sdk';
const dialog = new BimDialog({
container: document.getElementById('container'),
title: '测试弹窗',
content: '这是内容'
});
dialog.init();
// 问题:没有通过 Manager 管理,无法统一应用主题、语言等
// 错误:BimDialog 类未导出,会导致编译错误
import { BimDialog } from 'bim-engine-sdk';
// Error: Module 'bim-engine-sdk' has no exported member 'BimDialog'.
```
**✅ 正确方式 - 通过 Manager 使用:**
@@ -500,41 +491,15 @@ const dialog = engine.dialog.create({
title: '测试弹窗',
content: '这是内容'
});
// 优势:
// 1. 自动应用当前主题
// 2. 自动应用当前语言
// 3. 统一管理弹窗实例
// 4. 可以监听事件总线
```
**✅ 另一个正确示例 - 工具栏按钮:**
```typescript
// 正确:通过 ToolbarManager 操作工具栏
import { BimEngine } from 'bim-engine-sdk';
const engine = new BimEngine('container');
// 通过 ToolbarManager 添加按钮
engine.toolbar.addButton({
id: 'my-button',
groupId: 'group-1',
type: 'button',
label: 'toolbar.myButton',
icon: '<svg>...</svg>',
onClick: (button) => {
console.log('按钮被点击');
}
});
// 通过 ToolbarManager 控制可见性
engine.toolbar.setButtonVisibility('my-button', false);
```
#### 组件导出说明
虽然 `src/index.ts` 中导出了 `BimButtonGroup` 和 `Toolbar` 组件,但这是为了:
- 高级用户需要完全自定义的场景
- 内部 Manager 的实现需要
- **不推荐** 外部用户直接使用,应该通过 Manager
`src/index.ts` **仅导出** `BimEngine` 主类和必要的类型定义(如 `DialogOptions`)。
所有具体的组件类(如 `BimDialog`、`Toolbar`)均视为**内部实现细节**,不对外暴露。这意味着:
- 用户不能继承这些组件类进行扩展。
- 用户必须依赖 SDK 提供的 Manager API。
- 这保证了 SDK 内部架构的封闭性和稳定性。
### 4.1 Manager 类清单
@@ -545,7 +510,8 @@ engine.toolbar.setButtonVisibility('my-button', false);
| `ButtonGroupManager` | `src/managers/button-group-manager.ts` | 管理通用按钮组 | `BimComponent` |
| `EngineManager` | `src/managers/engine-manager.ts` | 管理 3D 引擎 | `BimComponent` |
| `RightKeyManager` | `src/managers/right-key-manager.ts` | 管理右键菜单 (Context Menu) | `BimComponent` |
| `ModelTreeManager` | `src/managers/model-tree-manager.ts` | 模型树业务管理器 (组合 Dialog 和 Tree),管理 Tree 实例 | `BimComponent` |
| `ModelTreeManager` | `src/managers/model-tree-manager.ts` | 模型树业务管理器 | `BimComponent` |
| `PropertyPanelManager` | `src/managers/property-panel-manager.ts` | 属性面板业务管理器 (演示 Collapse) | `BimComponent` |
### 4.2 组件类清单
@@ -559,7 +525,8 @@ engine.toolbar.setButtonVisibility('my-button', false);
| `BimRightKey` | `src/components/right-key/index.ts` | 右键浮层容器 | `IBimComponent` |
| `BimMenu` | `src/components/menu/index.ts` | 通用菜单列表 | `IBimComponent` |
| `BimTree` | `src/components/tree/index.ts` | 通用树形组件 | `IBimComponent` |
| `BimTab` | `src/components/tab/index.ts` | 固定标签页组件(无运行时增删,当前在 ConstructTreeManagerBtn 内直接使用) | `IBimComponent` |
| `BimTab` | `src/components/tab/index.ts` | 固定标签页组件 | `IBimComponent` |
| `BimCollapse` | `src/components/collapse/index.ts` | 折叠面板组件 | `IBimComponent` |
### 4.3 服务类清单