# Moba Workspace 回归清单 适用范围: - `frontend/src/layouts/MobaLayout.vue` - `frontend/src/components/SessionTree.vue` - `frontend/src/components/WorkspacePanel.vue` - `frontend/src/components/SftpPanel.vue` - `frontend/src/views/TransfersView.vue` - 旧深链接兼容入口 `/terminal/:id`、`/sftp/:id` ## 基础验证 ### 构建 ```bash cd frontend npm run build ``` ### 启动 ```bash cd backend mvn spring-boot:run cd frontend npm run dev ``` 访问: - `http://localhost:5173/login` - 登录后应进入 `/moba` ## 登录与入口 ### 登录 - 使用有效账号登录 - 首次管理员登录时,若触发强制改密,应能弹出改密弹窗 - 登录后默认进入 `/moba` ### 兼容入口 - 访问 `/connections` 应进入 `/moba` - 访问 `/terminal` 应进入 `/moba` - 访问 `/transfers` 应进入 `/moba?tool=transfers` - 访问 `/terminal/:id` 应打开对应连接的终端工作区后进入 `/moba` - 访问 `/sftp/:id` 应打开对应连接的文件工作区后进入 `/moba` ## 工作区 ### 多实例 - 在左侧连续点击同一连接两次,应创建两个独立工作区实例 - 两个实例的顶部标签应能区分序号 - 关闭其中一个实例,不应影响另一个实例 ### 标签行为 - 点击标签可切换活动工作区 - 右键菜单中的“关闭当前 / 关闭其他 / 关闭右侧 / 关闭全部”行为正确 - 顶部“复制会话”可基于当前实例创建一个新实例 ### 面板控制 - 顶部“终端”按钮可显隐终端面板 - 顶部“文件”按钮可显隐 SFTP 面板 - 两个面板都隐藏时,工作区应显示空态提示 - “重置分屏”应把终端/SFTP 比例恢复为默认值 ## 会话树 ### 基础操作 - 创建根文件夹 - 创建子文件夹 - 重命名文件夹 - 删除文件夹 - 删除连接节点 ### 排序与拖拽 - 手动排序模式下,节点可拖拽排序 - 名称排序模式下,拖拽应禁用 - 切换为名称排序后,文件夹应排在连接前面 ### 搜索 - 输入关键字后,应只显示匹配结果和必要层级 - 匹配节点应显示高亮标记 - 清空搜索后,应恢复完整树 ### 同步 - 修改连接名称后,会话树中的连接节点名称应同步更新 - 删除连接后,会话树中的对应节点应被移除 ## SFTP ### 基础功能 - 打开文件面板后应能列出目录 - 可进入子目录 - 可返回上级目录 - 可直接输入路径并跳转 - 可切换显示/隐藏隐藏文件 - 可搜索当前目录文件 ### 文件操作 - 上传单个文件 - 上传多个文件 - 查看上传进度 - 下载文件 - 创建目录 - 删除文件 - 删除目录 ### 远程传输 - 从当前连接选择文件并打开远程传输弹窗 - 选择目标连接和目标路径后可开始传输 - 传输过程中应显示进度 - 取消传输后应显示取消状态或取消提示 ## Transfers ### Local -> Many - 选择本机文件 - 选择目标目录 - 选择多个目标连接 - 调整并发 - 开始后应生成队列任务 ### Remote -> Many - 选择源连接 - 手输源文件路径并添加 - 使用远程文件浏览器选择源文件 - 选择目标目录或精确路径 - 选择多个目标连接 - 开始后应生成队列任务 ### 队列 - 队列应显示运行状态、进度、明细项 - 运行中任务应可取消 - 已完成/失败任务应保留在最近任务列表 - 点击“清空队列”后,最近任务列表应被清空 ## 响应式 ### 窄屏 - 小屏下左侧会话树应通过顶部按钮展开/收起 - 打开工作区后,小屏侧栏应自动收起 - Transfers 区域在小屏下不应出现明显横向溢出 - 目标连接选择区、队列卡片和源文件按钮区应可正常折行 ## 持久化 ### 刷新恢复 - 刷新页面后,工作区标签顺序应保留 - 活动工作区应保留 - SFTP 当前路径应保留 - 分屏比例应保留 - 会话树排序模式应保留 ## 风险关注点 - 同一连接多实例下,不应误复用旧工作区 - 会话树在大量节点下不应出现明显卡顿或错位渲染 - `/terminal/:id` 与 `/sftp/:id` 兼容入口不应丢失目标连接语义 - SFTP 远程传输与 Transfers 页面应避免状态来源不一致