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

10 KiB
Raw Permalink Blame History

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.tsxonDrop 会解析 dataTransfer 中的 application/x-file-path(或 application/x-node)并创建对应节点(例如 UTraceLoaderCSVLoader)。注意:实现依赖两端协同:FileExplorer 必须在 dragstart 时将 application/x-file-path 写入 dataTransfer,而 Workspace 负责解析与创建节点。当前实现:Workspace 已支持解析并创建 CSV/UTRACE 节点,FileExplorer 提供拖拽回调,但浏览器 dataTransfer 行为需在特定环境下测试。
        • 自定义节点上传:允许用户上传 Python 脚本作为自定义节点源码(受限扩展名和沙箱校验),上传后可选择“注册为节点”或仅存为私有文件。
        • 搜索与过滤:按扩展名、标签、修改时间、文件大小进行筛选。
        • 权限与版本:显示文件权限、支持简单的版本历史(保存快照)与冲突解决提示。
      • 与系统的契约:
        • 所有文件操作必须走后端 API并受 server/system_config.yamlstoragesecurity 配置约束(允许的扩展名、路径限制、父路径遍历阻止等)。
        • File Tab 也将作为 FileLoader 节点参数的来源:节点可以通过文件选择器引用 cloud/users/{username}/data/... 路径。
      • 安全与校验:
        • 强制文件名白名单/黑名单检查、禁止 Windows 保留名、禁止路径遍历(../)等。
        • 上传的自定义节点代码需要经过静态分析(检测危险 API并在安全上下文中执行或等待用户确认启用。
      • 当前实现状态:
        • 基础文件浏览与上传 API 已实现(后端 endpoints_upload.py)。
        • FileExplorer.tsx 实现了文件列表、上传、重命名、删除、下载与在新窗口预览/编辑的原型(含保存功能)。
        • Workspace.tsxonDrop 实现了基于文件扩展名创建节点(例如 .csv 生成 CSV Loader.utrace 可触发工作流导入)。
        • 仍需完善:FileExplorerWorkspace 在拖拽 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 拖入 UTraceLoaderTimeRangeFilterFrameTimeChart
  2. 连接连线,设置 TimeRangeFilter 的参数(右侧 Inspector
  3. 点击 RunHeaderBar观察 RunBar 日志与图表输出。

五、已实现 / 未实现 清单(开发优先级)

  • 已实现(基础):

    • 画布基础(节点创建、拖拽、连线)
    • NodePalette 列表与拖拽
    • Inspector 基础参数编辑
    • HeaderBar 基础按钮Run/Save
    • 文件上传/浏览基础 API
  • 进行中 / 计划中:

    • 节点内联调试(单节点运行、断点式调试)
    • 日志到节点定位联动
    • 自定义节点自动解析与测试集成
    • UTrace 原生预览与高性能采样
    • 类型匹配的可视提示(连线颜色/tooltip
    • 无障碍与键盘导航
  • 未规划 / 后续考虑:

    • 多用户协作实时编辑(多人同时编辑画布)
    • 复杂权限模型(基于角色的细粒度权限)
    • 可视化插件市场(在线搜索/安装节点插件)

六、后续建议与校验点(供 AI 或评审使用)

  • 为每个节点补充 1 页 UI 文档(显示示例、输入输出、参数说明、典型用例)。
  • NodePalette 中加入“状态标签”(实验/稳定/弃用),便于用户识别。
  • 定义画布上的“错误灯”与“性能提示”(例如长时运行节点显示黄色警告)。
  • 建议优先实现日志到节点定位联动与自定义节点解析,这两项能显著改善可用性。

七、如何参与与验证

  • 快速验证:运行旧版测试服务器并打开前端,按照“交互流示例”执行一遍。若你需要,我可以生成自动化的 e2e 脚本来做这件事。