前端开发指南
前端代码位于 src/,使用 React 19 + TypeScript。
入口与窗口模型
前端入口在 src/main.tsx,它会根据 URL 中的 ?window= 参数决定加载哪套应用:
- 主窗口:
AppProvider+App.tsx - 子窗口:
ChildAppProvider+ChildWindowRouter
当前子窗口包括:
- settings
- new-session
- quick-command
- auto-upload
如果你要修改这些流程,优先查看:
src/main.tsxsrc/ChildWindowRouter.tsxsrc/lib/windowManager.ts
组件与目录结构
src/
├── components/ # UI 组件
│ ├── dialog/ # 对话框与子窗口相关组件
│ ├── panel/ # 左右侧栏 / 底部区域面板
│ ├── terminal/ # xterm 工作区与终端相关组件
│ ├── layout/ # 外层布局、标题栏、活动栏
│ └── ui/ # 基础 UI 组件(shadcn/ui)
├── context/ # React Context providers
├── hooks/ # 自定义 hooks
├── i18n/ # 国际化
├── lib/ # invoke、window 管理、工作区模型等工具
├── pages/ # 子窗口页面
├── types/ # 类型定义
├── App.tsx # 主应用壳层
└── main.tsx # 前端入口
状态管理
AppContext
src/context/AppContext.tsx 是主窗口核心状态容器,管理:
- 标签页与 pane 树
- 活动 tab / pane
- 已保存连接 / 分组刷新
- 应用设置与 UI 设置
- 启动恢复工作区
- 左右活动栏和底部区域布局
ChildAppProvider
src/context/ChildAppProvider.tsx 是子窗口用的轻量 Provider:
- 只加载 / 保存设置
- 不持有完整工作区状态
- 通过事件向主窗口同步设置变化
TransferContext
src/context/TransferContext.tsx 监听 transfer-event,集中维护:
- 传输队列列表
- 进度 / 暂停 / 取消 / 错误状态
- pause / resume / cancel / retry 操作
调用 Tauri 命令
前端应优先通过 src/lib/invoke.ts 中的统一包装调用后端,而不是直接到处散写 @tauri-apps/api/core 的 invoke()。
import { invoke } from '@/lib/invoke';
const sessionId = await invoke<string>('create_ssh_session', {
connectionId: 'uuid-here',
});
这个包装会统一做错误日志记录,也便于以后集中调整调用行为。
监听后端事件
前端大量能力依赖 Tauri 事件系统,例如:
terminal-output-{id}cwd-changed-{id}session-closed-{id}transfer-eventsessions-changedconnections-changedotp-requestcloud-sync-status-changedcloud-sync-history-changedcloud-sync-conflict- AI 相关流式事件
终端、文件浏览器、资源监控、传输队列、AI Assistant,以及云同步的状态 / 历史 / 冲突提示都建立在这些事件之上。