bricks/docs/ai.old/dataviewer.md
2025-11-18 14:59:26 +08:00

129 lines
5.1 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.

# DataViewer
DataViewer 是一个用于展示分页数据的容器控件,支持动态加载远程数据、滚动加载前后页、内置增删改查操作工具栏,并可通过子类扩展自定义记录视图。它继承自 `bricks.VBox`,属于**容器控件**。
---
## 主要方法
| 方法名 | 说明 |
|--------|------|
| `render(params)` | 根据参数从服务器加载数据并渲染列表,默认会缓存请求参数避免重复加载 |
| `build_row(record, page, pos)` | 构建单条记录对应的控件,并插入到滚动面板中(可被重写) |
| `build_record_view(record)` | 创建每条数据的显示控件,子类需重写此方法以实现自定义 UI |
| `add_record()` | 打开新增记录弹窗 |
| `update_record(row)` | 打开编辑当前选中行记录的弹窗 |
| `clone_record(row)` | 克隆当前选中记录并打开新增表单 |
| `delete_record(row)` | 删除指定行记录,触发确认对话框 |
| `load_previous_page()` | 向上滚动时加载前一页数据(支持无限滚动) |
| `load_next_page()` | 向下滚动时加载后一页数据 |
| `command_event_handle(event)` | 处理工具栏按钮点击事件(如 add/update/delete 等) |
| `get_edit_fields()` | 获取可编辑字段列表,排除配置中设置的字段 |
| `get_hidefields()` | 获取隐藏字段(通常为过滤条件或上下文参数) |
| `build_add_form()` / `build_update_form(data)` / `build_clone_form(data)` | 分别构建新增、更新、克隆用的表单控件 |
| `build_window(icon, title, form)` | 创建弹出窗口包裹表单 |
---
## 主要事件
| 事件名 | 触发时机 | 携带数据 |
|--------|--------|---------|
| `row_check_changed` | 当某一行的选择状态发生变化时 | 被选中行的数据对象(`user_data` |
| 自定义命令事件(如 `'add'`, `'update'` 等) | 用户点击工具栏按钮时 | 当前行数据(如有) |
> 注:这些事件可通过 `binds` 进行监听和处理。
---
## 源码例子
```json
{
"id": "dataviewer_main",
"widgettype": "DataViewer",
"options": {
// 数据源配置
"data_url": "/api/list_records", // 获取数据的接口地址
"data_method": "GET", // 请求方式
"data_params": { // 静态请求参数
"category": "news"
},
"page_rows": 20, // 每页加载多少条数据
"cache_limit": 5, // 最多缓存几个页面的数据
// 编辑功能配置(启用工具栏)
"editable": {
"add_icon": "imgs/add.svg",
"update_icon": "imgs/edit.svg",
"clone_icon": "imgs/clone.svg",
"delete_icon": "imgs/delete.svg",
"new_data_url": "/api/create_record", // 新增提交地址
"update_data_url": "/api/update_record", // 更新提交地址
"delete_data_url": "/api/delete_record" // 删除提交地址
},
// 行记录选项(传递给 build_record_view
"row_options": {
"fields": [
{ "name": "title", "label": "标题", "uitype": "text" },
{ "name": "author", "label": "作者", "uitype": "text" },
{ "name": "pub_date", "label": "发布时间", "uitype": "date" }
],
"editexclouded": ["pub_date"] // 编辑时不显示的字段
}
},
"subwidgets": [], // DataViewer 自动管理子控件(通过 dataHandle 渲染),一般不手动添加
"binds": [
{
"actiontype": "method",
"wid": "dataviewer_main",
"event": "row_check_changed",
"target": "logger_panel",
"method": "setValue",
"dataparams": {
"message": "Selected row changed: {{value}}"
},
"datamethod": "getValue", // 从事件中获取数据
"datawidget": "dataviewer_main"
},
{
"actiontype": "event",
"wid": "dataviewer_main",
"event": "add",
"target": "global_event_bus",
"dispatch_event": "open_statistics_panel",
"params": {
"action": "add",
"from": "DataViewer"
}
},
{
"actiontype": "bricks",
"wid": "dataviewer_main",
"event": "update",
"target": "Popup",
"mode": "replace",
"options": {
"widgettype": "Message",
"options": {
"title": "Success",
"message": "Record updated successfully!",
"level": "info"
}
}
}
]
}
```
### ✅ 注释说明:
- `"data_url"``"data_params"` 配合使用,由 `PageDataLoader` 自动发起请求。
- `"editable"` 开启后会在顶部生成包含增删改克隆图标的工具栏。
- `build_record_view()` 必须在子类中重写才能正确显示内容;否则默认显示一个空白方块。
- 工具栏按钮点击后会派发对应名称的事件(如 `add`, `update`),可用于联动其他模块。
- 使用 `binds` 可将用户操作与日志、提示、跳转等行为连接起来。
- 支持垂直滚动加载更多数据(上拉刷新 / 下拉加载)。
> 💡 提示:若要完全自定义界面,请继承 `DataViewer` 并重写 `build_record_view(record)` 方法返回你想要的控件结构。