TraceStudio-dev/docs/web/ui.md
Boshuang Zhao 5790ec164f add web v2
2026-01-10 19:08:49 +08:00

173 lines
10 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.

# 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 脚本来做这件事。