5.8 KiB
5.8 KiB
MobaXterm 风格重构实施状态
已完成 ✅
Phase 1: 基础架构 (100%)
- ✅ 安装依赖 @vueuse/core
- ✅ 创建类型定义
frontend/src/types/sessionTree.tsfrontend/src/types/workspace.ts
- ✅ 实现 Pinia stores
frontend/src/stores/sessionTree.tsfrontend/src/stores/workspace.ts
Phase 2: 核心组件开发 (100%)
- ✅
SplitPane.vue- 可拖拽分割面板 - ✅
TopToolbar.vue- 顶部工具栏(样式占位) - ✅
SessionTreeNode.vue- 递归树节点组件 - ✅
SessionTree.vue- 会话树主组件 - ✅
SftpPanel.vue- SFTP 面板(props 驱动) - ✅
WorkspacePanel.vue- 工作区面板
Phase 3: 拖拽功能 (100%)
- ✅
useTreeDragDropcomposable 实现 - ✅ SessionTreeNode 集成拖拽事件
- ✅ 拖拽约束(不能拖到自己/子节点)
- ✅ 拖拽视觉反馈(半透明、指示线、高亮)
- ✅ 支持 before/after/inside 放置位置
Phase 4: 布局集成 (100%)
- ✅
MobaLayout.vue- 主布局 - ✅ 路由配置更新
- 新增
/moba路由 - 默认首页重定向到
/moba
- 新增
- ✅ 构建测试通过
Phase 5: 数据迁移和同步 (100%)
- ✅
MigrationPrompt.vue- 迁移提示组件 - ✅
useConnectionSynccomposable - 双向同步 - ✅ syncNewConnections/syncDeletedConnections 方法
- ✅ syncConnectionName 方法
- ✅ 首次使用迁移提示
- ✅ 自动同步新增/删除的连接
Phase 6: 优化完善 (100%)
- ✅
useKeyboardShortcutscomposable - ✅ 键盘快捷键: F2(重命名), Delete(删除), Ctrl+N(新建文件夹), Ctrl+F(搜索)
- ✅
ContextMenu.vue- 右键菜单组件 - ✅ 右键菜单: 重命名、删除、新建子文件夹
- ✅ 重命名对话框
- ✅ 删除确认提示
- ✅
useTreeSearch- 搜索功能 - ✅ 搜索高亮和结果过滤
- ✅ 展开/折叠全部功能
- ⏳ 响应式设计(移动端适配)
- ⏳ 性能优化(虚拟滚动)
当前状态
可用功能
-
会话树管理
- 创建文件夹(按钮 + Ctrl+N)
- 展开/折叠文件夹
- 展开/折叠全部(工具栏按钮)
- 拖拽节点重新排序
- 拖拽节点到文件夹
- 搜索会话(Ctrl+F)
- 搜索结果高亮
- 右键菜单操作
- F2 重命名节点
- Delete 删除节点
- localStorage 持久化
-
工作区面板
- 垂直分屏(终端 + SFTP)
- 可拖拽调整分割比例
- 分割比例持久化
- 每个连接独立工作区
-
终端集成
- 复用现有 TerminalWidget
- 实时监控面板
- WebSocket 连接
-
SFTP 功能
- 文件浏览
- 上传/下载
- 创建文件夹
- 删除文件
-
数据迁移
- 首次使用迁移提示
- 自动同步连接变更
- 新旧布局共存
访问方式
- 新布局: http://localhost:5173/moba
- 旧布局: http://localhost:5173/connections (保留兼容)
测试步骤
- 启动后端服务
cd backend
go run main.go
- 启动前端服务
cd frontend
npm run dev
- 访问新布局
http://localhost:5173/moba
- 测试功能
- 点击"文件夹"按钮或按 Ctrl+N 创建文件夹
- 使用工具栏按钮展开/折叠全部文件夹
- 按 Ctrl+F 或点击搜索框搜索会话
- 拖拽节点重新排序或移动到文件夹
- 右键点击节点查看菜单
- 按 F2 重命名选中节点
- 按 Delete 删除选中节点
- 点击连接节点打开工作区
- 拖拽分割条调整终端/SFTP 比例
- 刷新页面验证状态持久化
已知问题
-
SFTP 功能简化
- 移除了搜索和隐藏文件功能
- 移除了远程传输功能
- 上传进度显示简化
-
待优化项
- 响应式设计(移动端适配)
- 大量节点时的虚拟滚动优化
下一步计划
-
短期优化
- 响应式设计(移动端/平板适配)
- 性能优化(虚拟滚动,大量节点场景)
- 添加更多键盘快捷键(Ctrl+C复制,Ctrl+V粘贴等)
-
长期扩展
- 多工作区支持(标签页)
- 会话模板功能
- 云端同步
- 导入/导出配置
- 会话分组颜色标记
- 连接状态实时显示
技术栈
- Vue 3.5.24 (Composition API)
- Pinia 3.0.4 (状态管理)
- Vue Router 5.0.2 (路由)
- Tailwind CSS 3.4.14 (样式)
- @vueuse/core (工具库)
- xterm.js 5.3.0 (终端)
- lucide-vue-next (图标)
文件结构
frontend/src/
├── types/
│ ├── sessionTree.ts # 会话树类型定义
│ └── workspace.ts # 工作区类型定义
├── stores/
│ ├── sessionTree.ts # 会话树状态管理
│ └── workspace.ts # 工作区状态管理
├── composables/
│ ├── useTreeDragDrop.ts # 拖拽逻辑
│ ├── useConnectionSync.ts # 连接同步
│ ├── useKeyboardShortcuts.ts # 键盘快捷键
│ └── useTreeSearch.ts # 会话树搜索
├── components/
│ ├── SessionTree.vue # 会话树主组件
│ ├── SessionTreeNode.vue # 树节点组件(递归)
│ ├── WorkspacePanel.vue # 工作区面板
│ ├── SplitPane.vue # 分割面板
│ ├── SftpPanel.vue # SFTP 面板
│ ├── TopToolbar.vue # 顶部工具栏
│ ├── ContextMenu.vue # 右键菜单
│ └── MigrationPrompt.vue # 迁移提示
└── layouts/
└── MobaLayout.vue # MobaXterm 风格主布局
最后更新: 2026-04-03
实施进度: Phase 1-6 全部完成
Git 提交: 6 个提交
- feat: implement MobaXterm-style layout (Phase 1-2-4)
- feat: implement drag-drop and data migration (Phase 3 & 5)
- feat: add keyboard shortcuts and context menu (Phase 6)
- feat: add session tree search functionality
- feat: add expand/collapse all functionality
- docs: update implementation status - all phases complete