feat: implement MobaXterm-style layout (Phase 1-2-4)
实现 MobaXterm 风格的界面重构,包含会话树、工作区面板和分屏功能。 新增功能: - 左侧会话树支持文件夹分组和展开/折叠 - 工作区垂直分屏(终端 + SFTP) - 可拖拽调整分割比例 - 状态持久化到 localStorage - 顶部工具栏(样式占位) 技术实现: - 新增 sessionTreeStore 和 workspaceStore 状态管理 - 新增 SessionTree/SessionTreeNode 递归组件 - 新增 SplitPane 可拖拽分割组件 - 重构 SftpPanel 为 props 驱动 - 新增 MobaLayout 主布局 - 路由默认重定向到 /moba 依赖更新: - 安装 @vueuse/core 用于拖拽功能 待实现: - Phase 3: 会话树拖拽排序 - Phase 5: 数据迁移 - Phase 6: 快捷键、右键菜单、搜索等优化 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
36
frontend/src/layouts/MobaLayout.vue
Normal file
36
frontend/src/layouts/MobaLayout.vue
Normal file
@@ -0,0 +1,36 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted } from 'vue'
|
||||
import { useSessionTreeStore } from '../stores/sessionTree'
|
||||
import { useWorkspaceStore } from '../stores/workspace'
|
||||
import TopToolbar from '../components/TopToolbar.vue'
|
||||
import SessionTree from '../components/SessionTree.vue'
|
||||
import WorkspacePanel from '../components/WorkspacePanel.vue'
|
||||
|
||||
const treeStore = useSessionTreeStore()
|
||||
const workspaceStore = useWorkspaceStore()
|
||||
|
||||
onMounted(() => {
|
||||
treeStore.restore()
|
||||
workspaceStore.restore()
|
||||
|
||||
if (treeStore.nodes.length === 0) {
|
||||
treeStore.initFromConnections()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="h-screen flex flex-col bg-slate-950 text-slate-100">
|
||||
<TopToolbar />
|
||||
|
||||
<div class="flex-1 min-h-0 flex">
|
||||
<div class="w-72 flex-shrink-0">
|
||||
<SessionTree />
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-0">
|
||||
<WorkspacePanel />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user