TraceStudio-dev/docs/web/ui.md

173 lines
10 KiB
Markdown
Raw Permalink Normal View History

2026-01-10 19:08:49 +08:00
# TraceStudio UI 设计说明
本文档面向开发者与 AI 助手,描述当前项目的完整 UI 架构、核心布局、各区域职责、主要交互流,以及当前实现状态(已实现 / 未实现)。目的是让任意 AI 或新开发者阅读后能对界面有明确认知,并在此基础上给出设计或实现建议。
---
## 一、总体布局Canvas-first
TraceStudio 的界面采用“Canvas-first”设计画布节点编辑区为主周边辅以工具面板、侧边栏与状态栏支持拖拽式节点编辑、属性面板即点即改、以及运行/预览控制。
主布局分为:
- 顶部导航栏HeaderBar
- 左侧节点库NodePalette文件管理器FileExplorer
- 中央画布Workspace / React Flow Canvas
- 右侧属性与 InspectorInspector
- 底部运行与日志区RunBar / Console
- 全局模态SettingsModal / FileViewer / CustomNodeEditor
下面按区域逐一说明组件职责与交互。
---
## 二、组件与职责
- HeaderBar
- 位置:界面最上方,横贯全宽。
- 职责:项目切换、保存/加载工作流、运行/停止按钮、全局状态指示(当前用户、连接状态)、快速搜索与帮助菜单。
- 交互要点:
- `Run`:触发当前图执行(带预览/全量选项)。
- `Save`:保存 `.tsflow` 工作流到用户目录。
- `Search`:快速查找节点或命令(按名称模糊匹配)。
- 当前实现状态:已实现基础布局、运行按钮和用户显示。
- NodePalette
- 位置:左侧竖列(可折叠)。
- 职责:展示可用算子/节点,支持按类别过滤、拖拽到画布、查看节点文档与快捷预览。
- 交互要点:
- 拖拽节点到画布自动创建节点实例并打开 Inspector。
- 支持搜索与按类别分组。
- 当前实现状态:已实现节点列表与拖拽,分类与搜索基础功能可用;节点详细文档弹窗待完善。
- 文件页签File Tab
- 位置与实现说明:在当前前端实现中,文件管理由独立组件 `FileExplorer.tsx` 提供,并与 `NodePalette` 并列放置在左侧面板(表现为页签或切换视图)。`NodePalette.tsx` 本身仅负责算子列表与拖拽,**并不直接包含完整的文件管理 UI**。
- 职责:轻量云文件管理器(由 `FileExplorer` 提供),用于浏览、上传、下载、创建、重命名、删除用户文件(存放于 `cloud/users/{username}/`),并作为文件节点(如 `FileLoader` / `UTraceLoader`)的数据来源。
- 功能要点:
- 列表视图与缩略视图切换(显示文件名、类型、大小、修改时间、状态标签)。
- 基本 CRUD创建文件夹、重命名、删除、移动带确认与回收站/撤销机制)。
- 上传/下载:支持单文件与批量上传、断点续传提示(可选),并显示上传进度。
- 预览CSV 文本预览、UTRACE 元数据预览(采样展示),二进制/大文件提示下载或使用专用预览器。
- 拖拽到画布:把文件从 `FileExplorer` 拖到画布时,`Workspace.tsx` 的 `onDrop` 会解析 `dataTransfer` 中的 `application/x-file-path`(或 `application/x-node`)并创建对应节点(例如 `UTraceLoader`、`CSVLoader`)。注意:实现依赖两端协同:`FileExplorer` 必须在 dragstart 时将 `application/x-file-path` 写入 `dataTransfer`,而 `Workspace` 负责解析与创建节点。当前实现:`Workspace` 已支持解析并创建 CSV/UTRACE 节点,`FileExplorer` 提供拖拽回调,但浏览器 dataTransfer 行为需在特定环境下测试。
- 自定义节点上传:允许用户上传 Python 脚本作为自定义节点源码(受限扩展名和沙箱校验),上传后可选择“注册为节点”或仅存为私有文件。
- 搜索与过滤:按扩展名、标签、修改时间、文件大小进行筛选。
- 权限与版本:显示文件权限、支持简单的版本历史(保存快照)与冲突解决提示。
- 与系统的契约:
- 所有文件操作必须走后端 API并受 `server/system_config.yaml``storage``security` 配置约束(允许的扩展名、路径限制、父路径遍历阻止等)。
- File Tab 也将作为 FileLoader 节点参数的来源:节点可以通过文件选择器引用 `cloud/users/{username}/data/...` 路径。
- 安全与校验:
- 强制文件名白名单/黑名单检查、禁止 Windows 保留名、禁止路径遍历(`../`)等。
- 上传的自定义节点代码需要经过静态分析(检测危险 API并在安全上下文中执行或等待用户确认启用。
- 当前实现状态:
- 基础文件浏览与上传 API 已实现(后端 `endpoints_upload.py`)。
- `FileExplorer.tsx` 实现了文件列表、上传、重命名、删除、下载与在新窗口预览/编辑的原型(含保存功能)。
- `Workspace.tsx``onDrop` 实现了基于文件扩展名创建节点(例如 `.csv` 生成 CSV Loader`.utrace` 可触发工作流导入)。
- 仍需完善:`FileExplorer` 与 `Workspace` 在拖拽 dataTransfer 的兼容性细节、UTRACE 深度预览、以及“上传自定义节点后自动解析并注册”为可拖拽算子的完整流程。
- WorkspaceCanvas / React Flow
- 位置:中央主区域。
- 职责:节点编辑、连线、画布缩放/平移、选区操作、切换视图preview / full results overlay
- 交互要点:
- 双击节点打开节点面板(或右侧 Inspector
- 连线时显示类型匹配提示(颜色 / tooltip
- 选中节点时显示小型操作工具条(复制、删除、调试/运行单节点)。
- 当前实现状态:画布与基本连线已实现;类型匹配提示、节点内联调试尚在开发。
- Inspector右侧
- 位置:右侧面板,展示被选中节点的参数、输入/输出说明、预览按钮和高级设置。
- 职责编辑节点参数、触发节点单独预览、展示执行日志与错误位置、切换采样率preview/full
- 交互要点:
- 参数修改即时生效(仅对 UI 预览,未触发图整体执行,除非点 Run
- 错误时高亮对应参数或字段,并提供快速定位按钮。
- 当前实现状态:属性面板已实现基本参数编辑;错误定位与高级选项待实现。
- RunBar / Console底部
- 位置:底部横栏,可收起。
- 职责:显示执行状态(队列、当前节点、耗时)、日志输出、下载结果入口、缓存与重试控制。
- 交互要点:
- 点击日志条目可在画布中定位到产生该日志的节点。
- 可用按钮停止执行、重试或仅清空缓存。
- 当前实现状态:基本执行状态显示已实现;日志与节点定位未完全联动。
- FileExplorer / FileViewer侧边或模态
- 位置:可作为左侧切换视图或独立模态。
- 职责:浏览 `cloud/users/{username}/` 目录,上传/下载文件,预览 CSV/UTRACE 文件。
- 交互要点:
- 拖拽文件到画布或节点面板自动创建 `FileLoader` 节点并绑定路径。
- 支持文件权限校验与快速筛选。
- 当前实现状态文件浏览与上传接口已实现UTRACE 预览与绑定还需完善。
- CustomNodeEditor模态
- 位置:模态窗口
- 职责:创建/编辑自定义节点模板(参数、输入输出、示例代码、单元测试设置)。
- 交互要点:
- 支持导入 Python 脚本并自动解析 `get_metadata()`
- 提供示例工作流导入按钮。
- 当前实现状态:编辑器雏形存在;自动解析与测试集成未完成。
- SettingsModal
- 位置:全局模态
- 职责系统配置API 地址、缓存策略、unreal 路径、日志等级等)。
- 当前实现状态:基本设置项和保存机制已有,部分高级项需完善。
---
## 三、视觉与可用性准则
- 主题:深色模式为主,低饱和度高对比强调操作元素(参照 shadcn/ui 工业风)。
- 可读性:字体尺寸与颜色需保证长时间盯屏舒适度。
- 动效:连线/节点状态变化使用低频率、轻微动效提示。
- 无障碍键盘导航、ARIA 标签、主题对比度需要在后续迭代中验证。
---
## 四、交互流示例(常见场景)
场景 1快速预览一段 UTrace 数据
1. 打开 `FileExplorer`,上传或选中 `护送30.utrace`
2. 将文件拖拽到画布,自动创建 `UTraceLoader` 节点并在 `Inspector` 显示预览按钮。
3. 在 Inspector 选择 `preview`(采样),点击预览,结果显示在 `Workspace` 的右侧结果面板。
场景 2创建并运行分析工作流
1.`NodePalette` 拖入 `UTraceLoader`、`TimeRangeFilter`、`FrameTimeChart`。
2. 连接连线,设置 `TimeRangeFilter` 的参数(右侧 Inspector
3. 点击 `Run`HeaderBar观察 `RunBar` 日志与图表输出。
---
## 五、已实现 / 未实现 清单(开发优先级)
- 已实现(基础):
- 画布基础(节点创建、拖拽、连线)
- NodePalette 列表与拖拽
- Inspector 基础参数编辑
- HeaderBar 基础按钮Run/Save
- 文件上传/浏览基础 API
- 进行中 / 计划中:
- 节点内联调试(单节点运行、断点式调试)
- 日志到节点定位联动
- 自定义节点自动解析与测试集成
- UTrace 原生预览与高性能采样
- 类型匹配的可视提示(连线颜色/tooltip
- 无障碍与键盘导航
- 未规划 / 后续考虑:
- 多用户协作实时编辑(多人同时编辑画布)
- 复杂权限模型(基于角色的细粒度权限)
- 可视化插件市场(在线搜索/安装节点插件)
---
## 六、后续建议与校验点(供 AI 或评审使用)
- 为每个节点补充 1 页 UI 文档(显示示例、输入输出、参数说明、典型用例)。
-`NodePalette` 中加入“状态标签”(实验/稳定/弃用),便于用户识别。
- 定义画布上的“错误灯”与“性能提示”(例如长时运行节点显示黄色警告)。
- 建议优先实现日志到节点定位联动与自定义节点解析,这两项能显著改善可用性。
---
## 七、如何参与与验证
- 快速验证:运行旧版测试服务器并打开前端,按照“交互流示例”执行一遍。若你需要,我可以生成自动化的 e2e 脚本来做这件事。