bricks/docs/ai/popup.md
2025-11-13 18:04:58 +08:00

227 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Popup
弹窗控件,用于在页面上显示浮动的对话框或内容窗口。属于**容器控件**,继承自 `bricks.VBox`
## 主要方法
- `open()`:打开弹窗,设置位置、显示样式,并触发 `opened` 事件。
- `dismiss()`:关闭弹窗,隐藏其 DOM 元素,并可选择自动销毁。
- `destroy()`:彻底销毁该弹窗实例,从父容器中移除并清理资源。
- `add_widget(w, i)`:向弹窗内容区域添加子控件。
- `remove_widget(w)`:从内容区域移除指定子控件。
- `clear_widgets()`:清空内容区域的所有子控件。
- `bring_to_top()`:将当前弹窗置于所有其他弹窗之上(通过提升 z-index
- `positify_tl()`根据锚点archor和屏幕尺寸计算并设置弹窗初始位置。
- `popup_from_widget(from_w)`:相对于某个源控件定位弹窗(常用于下拉菜单等场景)。
- `load_content()`:异步加载 `content` 配置中的组件并渲染到内容区。
## 主要事件
- `opened`:弹窗打开后触发。
- `dismissed`:弹窗关闭时触发。
- `destroy`:弹窗被销毁时触发(仅当 `auto_destroy` 为 true 时)。
## 源码例子
```json
{
"id": "my_popup",
"widgettype": "Popup",
"options": {
"width": "400px", // 弹窗宽度
"height": "300px", // 弹窗高度
"archor": "cc", // 居中显示:'cc' 表示 center-center
"modal": true, // 是否模态,模态时背景不可点击
"movable": true, // 是否允许拖动
"resizable": true, // 是否允许调整大小
"auto_open": false, // 是否创建后自动打开
"auto_dismiss": true, // 点击外部是否自动关闭
"auto_destroy": true, // 关闭后是否自动销毁
"timeout": 5000, // 自动关闭延时毫秒0 表示不启用
"content": { // 要加载的内容(支持嵌套控件)
"widgettype": "VBox",
"options": {
"padding": "20px",
"css": "popup-content"
},
"subwidgets": [
{
"widgettype": "Text",
"options": {
"text": "这是一个弹窗示例!",
"i18n": true
}
},
{
"widgettype": "Button",
"options": {
"text": "关闭",
"css": "primary"
},
"binds": [
{
"actiontype": "event",
"wid": "close_btn",
"event": "click",
"target": "my_popup",
"dispatch_event": "dismissed"
}
]
}
]
}
},
"binds": [
{
"actiontype": "method",
"wid": "trigger_button", // 触发控件 ID
"event": "click", // 监听点击事件
"target": "my_popup", // 目标是此弹窗
"method": "open", // 执行 open 方法
"params": {}
},
{
"actiontype": "event",
"wid": "my_popup",
"event": "dismissed",
"target": "status_text",
"dispatch_event": "setValue",
"params": {
"value": "弹窗已关闭"
}
}
]
}
```
> ✅ **注释说明**
> - 此弹窗不会自动打开(`auto_open: false`),需由按钮触发。
> - 点击“关闭”按钮会派发 `dismissed` 事件,进而触发状态更新。
> - 使用 `content` 字段定义内部结构,支持动态构建复杂界面。
> - 支持国际化文本(`i18n: true`)、拖拽、缩放、模态遮罩等功能。
---
# PopupWindow
带标题栏的可操作窗口型弹窗控件,适用于桌面风格的应用程序窗口管理。属于**容器控件**,继承自 `bricks.Popup`
## 主要方法
- `open()`:打开窗口,若设置了自动打开则延迟执行。
- `build_title_bar()`:构建顶部标题栏(含图标、工具按钮等)。
- `win_minimize()`:最小化窗口(实际是关闭但保留引用供恢复)。
- `set_title(txt)`:动态设置窗口标题。
- `destroy()`:销毁窗口,同时从全局管理列表中移除。
## 主要事件
- `opened`:窗口打开时触发。
- `dismissed`:窗口关闭(最小化)时触发。
- `destroy`:窗口被彻底销毁时触发。
## 源码例子
```json
{
"id": "app_window",
"widgettype": "PopupWindow",
"options": {
"title": "我的应用", // 窗口标题
"icon": "/resources/icons/app.png", // 标题栏左侧图标路径
"width": "60%", // 宽度百分比
"height": "70%", // 高度百分比
"movable": true, // 可拖动标题栏移动
"resizable": true, // 可调整大小
"modal": false, // 非模态,允许后台交互
"auto_open": true // 创建即打开
},
"subwidgets": [
{
"widgettype": "HtmlView",
"options": {
"html": "<div style='padding:20px;'>欢迎使用我的应用程序!</div>"
}
}
],
"binds": [
{
"actiontype": "urlwidget",
"wid": "refresh_btn",
"event": "click",
"target": "app_window",
"mode": "replace",
"options": {
"url": "/ui/myapp.content.ui", // 动态加载新内容
"method": "GET",
"params": {}
}
},
{
"actiontype": "script",
"wid": "log_btn",
"event": "click",
"target": "app_window",
"script": "console.log('用户在窗口中点击了日志按钮');",
"params": {}
}
]
}
```
> ✅ **注释说明**
> - `PopupWindow` 提供标准窗口行为:最小化、关闭、全屏。
> - 工具栏按钮由 `IconBar` 实现,内置 delete/minimize/fullscreen 功能。
> - 最小化后可通过全局 `bricks.app.mwins` 列表恢复。
> - 支持通过 `urlwidget` 动态刷新内容,实现模块化加载。
> - 适合构建多窗口 Web 应用,如 IDE、管理系统等。
---
# WindowsPanel
任务栏式窗口管理面板,列出所有最小化的 `PopupWindow` 并提供恢复功能。属于**容器控件**,继承自 `bricks.Popup`
## 主要方法
- `del_window(event)`:处理点击某个窗口项时将其恢复并从列表中移除。
- (构造函数中自动初始化数据源与事件绑定)
## 主要事件
- `record_click`:当用户点击某个窗口记录项时触发(来自 `Cols` 控件)。
## 源码例子
```json
{
"id": "windows_panel",
"widgettype": "WindowsPanel",
"options": {
"archor": "br", // 锚定在右下角
"width": "200px",
"height": "300px",
"movable": true,
"resizable": false,
"modal": false,
"auto_open": false // 不自动打开,由快捷键或按钮触发
},
"binds": [
{
"actiontype": "method",
"wid": "taskbar_btn",
"event": "click",
"target": "windows_panel",
"method": "open",
"params": {}
}
]
}
```
> ✅ **注释说明**
> - 此控件用于展示当前已最小化的所有 `PopupWindow` 实例。
> - 数据来源于 `bricks.app.mwins` 数组,在构造时自动映射为可视列表。
> - 每一项是一个图标 + 标题,点击即可还原对应窗口。
> - 常用于模拟操作系统任务栏功能。
> - 本身也是弹窗类型,点击外部可自动关闭(`auto_dismiss: true`)。