Files
bim_engine/docs/Dialog.md
yuding 4dd923f19e feat: Refactor engine structure and add UI customization support
- Refactor  to delegate logic to  and
- Add  for manager classes
- Implement dynamic styling for Toolbar (color config, CSS vars)
- Implement dynamic styling for Dialog (options, CSS vars)
- Add  example
- Add documentation for Toolbar and Dialog
- Update demo to showcase new styling features
2025-12-03 18:35:05 +08:00

2.6 KiB

弹窗组件 (Dialog)

BimEngine SDK 提供了可拖拽、可缩放的通用弹窗组件 DialogManager (底层基于 BimDialog),支持自定义内容和高度定制的样式。

1. 组件作用

  • 提供浮动的交互窗口。
  • 支持任意 HTML 内容挂载。
  • 内置拖拽移动和拖拽缩放功能。
  • 支持丰富的样式定制接口。

2. 初始化与使用

通过 BimEngine 实例访问:

const engine = new BimEngine('container-id');
// engine.dialog 即为 DialogManager 实例

3. 配置项 (DialogOptions)

engine.dialog.create(options) 方法接受以下配置:

属性 类型 默认值 说明
title string 'Dialog' 弹窗标题
content string | HTMLElement - 弹窗内容
width number | string 300 宽度
height number | string 'auto' 高度
position DialogPosition 'center' 初始位置 (支持 'center', 'top-left' 等或坐标对象)
draggable boolean true 是否可拖拽
resizable boolean false 是否可调整大小
minWidth number 200 最小宽度
minHeight number 100 最小高度
onClose Function - 关闭时的回调
backgroundColor string rgba(17, 17, 17, 0.95) 窗体背景色
headerBackgroundColor string #2a2a2a 标题栏背景色
titleColor string #fff 标题文字颜色
textColor string #ccc 内容默认文字颜色
borderColor string #444 边框颜色

4. 使用案例

案例 1: 创建基本弹窗

engine.dialog.create({
    title: '欢迎',
    content: 'Hello World!',
    width: 400
});

案例 2: 创建包含复杂 DOM 的弹窗

const div = document.createElement('div');
div.innerHTML = '<button>Click Me</button>';
div.querySelector('button').onclick = () => alert('Clicked');

engine.dialog.create({
    title: '交互组件',
    content: div,
    resizable: true
});

案例 3: 定制样式 (红色主题)

engine.dialog.create({
    title: '警告',
    content: '这是一个红色主题的警告弹窗。',
    backgroundColor: 'rgba(100, 0, 0, 0.9)', // 深红背景
    headerBackgroundColor: '#ff0000',        // 鲜红标题栏
    titleColor: '#ffffff',
    borderColor: '#ff4444'
});

案例 4: 监听关闭事件

const dlg = engine.dialog.create({
    title: '任务',
    content: '处理中...',
    onClose: () => {
        console.log('弹窗已关闭');
    }
});

// 手动关闭
// dlg.close();