docs: UI/UX深度审计 — 视觉设计+功能交互全面评估

- PROJECT_EVALUATION.md: 新增UI/UX审计评分(48/100)
  - 视觉设计65分(配色专业但系统执行不严格)
  - 交互体验40分(alert/prompt泛滥,无Toast)
  - 功能便捷性45分(快捷键仅4个,无终端搜索)
  - 状态处理35分(多组件缺三态)
  - 响应式10分(完全缺失)
  - 12项Critical问题 + 8项Warning问题
  - 功能完成度矩阵 + 竞品对标
  - 3阶段优化路线(48→88分)

- ROADMAP.md: 基于UI/UX审计重写路线图
  - v1.1.0 基础可用(2周): Toast+终端搜索+会话恢复+SFTP修复
  - v1.2.0 体验升级(2周): 快捷键+拖拽+响应式+视觉打磨
  - v1.3.0 测试覆盖(2周): 核心模块50%覆盖率
  - v1.4.0 专业功能(2周): 分屏+i18n+自定义快捷键
  - v1.5.0 安全升级(1周): Electron升级+IPC加密
This commit is contained in:
OpsXShell Dev committed 2026-04-18 13:23:04 +08:00
1 parent 60c3d868c5
commit c5243df040
2 files changed
+428 -560

No files matched your search

+133 -262
View File
@@ -1,295 +1,166 @@
# ROADMAP.md - 开发路线图
# ROADMAP.md - OpsXShell 开发路线图
本文档规划 OpsXShell 的版本迭代和开发方向。
## 版本规划总览
---
## 版本规划概览
| 版本 | 代号 | 目标 | 状态 |
|------|------|------|------|
| v0.1.0 | **Alpha** | 功能骨架 + 核心 SSH | ✅ 已完成 |
| v0.2.0 | **Beta** | 功能补全 + 稳定性 | ✅ 已完成 |
| v0.3.0 | **RC** | 性能优化 + 加密 | ✅ 已完成 |
| v0.4.0 | **Pre-Stable** | UI 完善 | ✅ 已完成 |
| v0.5.0 | **Pre-Stable** | SFTP 传输优化 | ✅ 已完成 |
| v0.6.0 | **Pre-Stable** | 终端 rz/sz 支持 | ✅ 已完成 |
| v0.7.0 | **Professional** | 专业连接管理 | ✅ 已完成 |
| v0.8.0 | **Modular** | 架构模块化重构 | ✅ 已完成 |
| v0.9.0 | **Optimization** | P0/P1 全面优化 | ✅ 已完成 |
| v0.10.0 | **v0.3.0-release** | 核心功能实现 | ✅ 已完成 |
| v1.0.0 | **Stable** | 生产可用 | ✅ 已完成 |
| **v1.1.0** | **Cleanup** | **代码质量清理** | 🔄 进行中 |
| **v1.2.0** | **Refactor** | **组件拆分重构** | 📋 规划中 |
| **v1.3.0** | **Testing** | **测试覆盖达标** | 📋 规划中 |
| **v1.4.0** | **Upgrade** | **依赖升级+安全加固** | 📋 规划中 |
| **v1.5.0** | **Polish** | **功能补全+性能优化** | 📋 规划中 |
| v2.0.0 | **Professional** | 专业版发布 | 📋 远期规划 |
---
## v1.1.0 代码质量清理 🔄
**目标**: 清除生产代码中的调试残留,补全 SFTP 核心功能
**预计**: 1 周
**评分目标**: 代码质量 45→70
### 任务清单
| # | 任务 | 优先级 | 文件 | 状态 |
|---|------|--------|------|------|
| 1 | 移除所有 console.log 和彩色调试函数 | P0 | `TerminalView.tsx`, `useSFTP.ts`, `ssh-service.ts` | ⬜ |
| 2 | 移除 `DEBUG = true` 硬编码 | P0 | `TerminalView.tsx:16` | ⬜ |
| 3 | 移除 Mock 数据残留 | P0 | `useSFTP.ts:154-161` | ⬜ |
| 4 | 补全 SFTP 上传 IPC 实现 | P0 | `useSFTP.ts:399`, `sftp.ipc.ts` | ⬜ |
| 5 | 补全 disconnect() 资源释放 | P1 | `useSFTP.ts:359-373` | ⬜ |
| 6 | Math.random → uuid 生成 ID | P1 | `TerminalView.tsx:383,463` | ⬜ |
| 7 | IPC 通道名引用 IPC_CHANNELS 常量 | P2 | `preload.ts` | ⬜ |
| 8 | 移除未使用依赖 react-router-dom | P2 | `package.json` | ⬜ |
| 9 | 替换重复的彩色日志函数为统一 logger | P2 | `TerminalView.tsx`, `useSFTP.ts` | ⬜ |
| 10 | 修复 `if (false)` 等无用代码 | P2 | `TerminalView.tsx:50` | ⬜ |
### 验收标准
```bash
# 零调试残留
grep -r "console.log" src/ electron/ | wc -l # → 0
grep -r "DEBUG = true" src/ | wc -l # → 0
grep -r "logHeader\|logInfo\|logSuccess\|logError\|logWarning" src/ electron/ | wc -l # → 0
# SFTP 上传功能可用
# 手动测试:连接 → SFTP → 上传文件 → 验证远端文件存在
```
v1.1.0 基础可用 ─── 2 周 ──→ UI/UX 48→65, 代码 58→68
v1.2.0 体验升级 ─── 2 周 ──→ UI/UX 65→78, 代码 68→75
v1.3.0 测试覆盖 ─── 2 周 ──→ 测试 15→50%, 代码 75→80
v1.4.0 专业功能 ─── 2 周 ──→ UI/UX 78→88, 功能完成度 90+
v1.5.0 安全升级 ─── 1 周 ──→ 安全 55→85, 代码 80→85
```
---
## v1.2.0 组件拆分重构 📋
## v1.1.0 基础可用 (2 周) — 当前阶段
**目标**: 终端组件拆分为可维护的 Hook 体系
**预计**: 1.5 周
**评分目标**: 架构 72→85
> **目标**: 解决所有 Critical UI/UX 问题,建立基础反馈系统,产品具备日常使用价值
### 拆分计划
### 🔴 P0 — 必须完成
#### TerminalView.tsx (645行) → 拆分
| # | 任务 | 类型 | 预计 | 验收标准 |
|---|------|------|------|----------|
| 1 | Toast 通知系统 | 新增 | 2天 | `useToast()` hook + `ToastContainer`,支持 success/error/warning/info 四种类型,自动消失+手动关闭 |
| 2 | 替换所有 alert/prompt/confirm | 修复 | 2天 | `App.tsx` 5处 alert → Toast,`SFTPView.tsx` prompt → 内联输入,`PortForwardView.tsx` confirm → ConfirmDialog |
| 3 | SFTP 上传/删除真实实现 | 修复 | 3天 | 上传通过 ssh2 sftp fastPut 实现,删除通过 rimraf/unlink 实现,右键菜单 action 绑定真实函数 |
| 4 | 终端搜索 (SearchAddon) | 新增 | 1天 | Ctrl+Shift+F 打开搜索栏,支持正则/大小写/全词匹配,高亮所有匹配 |
| 5 | 会话恢复 | 新增 | 3天 | 关闭前持久化标签状态到 SQLite,启动时恢复标签+自动重连 |
| 6 | 修复私钥浏览按钮 | 修复 | 0.5天 | dialog.showOpenDialog() 绑定到 onClick,过滤 `.pem/.key/id_*` |
| 7 | 清理生产调试日志 | 修复 | 1天 | 移除 `DEBUG=true`,所有 console.log 用 logger 替代或删除 |
| 8 | 设计系统统一颜色 | 修复 | 1天 | cyan→accent-blue, sky→accent-blue, slate→dark-*,新增 accent-orange |
| 9 | StatusBar 接入实际状态 | 修复 | 0.5天 | 显示当前连接 host、延迟 ms、标签数 |
| 10 | WelcomeView 真实最近连接 | 修复 | 1天 | 从 sessionStore 获取最近 5 条连接记录,空状态显示引导 |
```
src/components/terminal/TerminalView.tsx (~150行) 纯渲染层
src/hooks/useTerminal.ts (~200行) 终端初始化 + 数据流
src/hooks/useTerminalConnection.ts (~150行) SSH 连接管理
src/hooks/useTerminalSnapshot.ts (~100行) 快照保存/恢复
src/hooks/useZmodem.ts (~100行) rz/sz 文件传输
```
#### useSFTP.ts (510行) → 拆分
```
src/hooks/useSFTPNavigation.ts (~200行) 本地/远程目录导航
src/hooks/useSFTPTransfer.ts (~200行) 上传/下载/传输队列
src/hooks/useSFTPConnection.ts (~100行) SFTP 连接管理
```
#### App.tsx (258行) → 业务逻辑外提
```
src/components/App.tsx (~150行) 纯 UI 编排
src/services/sessionImport.ts (~80行) 导入/导出逻辑
```
### Store 解耦
```
当前: lifecycleStore → 直接调用 poolStore.getState()
目标: 引入 ConnectionFacade 统一接口,Store 通过事件通信
```
### 验收标准
- 单文件不超过 300 行
- Hook 可独立导入、独立测试
- 现有功能无回归
### 里程碑推送
- [ ] SFTP 功能可用 (上传+删除+右键菜单)
- [ ] Toast 系统上线 (零 alert)
- [ ] 终端搜索可用
- [ ] 会话恢复可用
---
## v1.3.0 测试覆盖达标 📋
## v1.2.0 体验升级 (2 周)
**目标**: 核心模块测试覆盖率 ≥60%,总覆盖率 ≥50%
**预计**: 2 周
**评分目标**: 测试 15→50
> **目标**: 快捷键补全、视觉打磨、交互优化,接近 Termius 体验水平
### 测试批次
### 🟡 P1 — 重要
| 批次 | 目标模块 | 用例目标 | 优先级 |
|------|----------|----------|--------|
| 1 | `crypto.ts` (加密/解密正确性) | 15+ | P0 |
| 2 | `ssh-service.ts` (mock ssh2) | 20+ | P0 |
| 3 | `database-service.ts` (CRUD) | 15+ | P1 |
| 4 | `error-handler.ts` (错误推断) | 10+ | P1 |
| 5 | `poolStore.ts` + `lifecycleStore.ts` | 20+ | P1 |
| 6 | `IPC handlers` (8个模块) | 25+ | P1 |
| 7 | `TerminalView` 组件测试 | 10+ | P2 |
| 8 | `useSFTP` hooks 测试 | 15+ | P2 |
| **总计** | | **130+** | |
| # | 任务 | 类型 | 预计 | 验收标准 |
|---|------|------|------|----------|
| 1 | Ctrl+Tab / Ctrl+1~9 标签切换 | 新增 | 1天 | Ctrl+Tab 前后切换,Ctrl+1~9 跳转指定标签 |
| 2 | 标签拖拽排序 | 新增 | 2天 | 拖拽标签头重排序,拖出标签栏可弹出新窗口(可选) |
| 3 | SFTP 拖拽上传 | 新增 | 2天 | 从系统文件管理器拖拽文件到远程面板触发上传 |
| 4 | SFTP 右键菜单完善 | 完善 | 1天 | 新增:权限编辑、属性查看、重命名、复制路径 |
| 5 | 侧边栏会话分组折叠 | 完善 | 1天 | 点击分组头折叠/展开,带动画 |
| 6 | Sidebar 宽度可拖拽调整 | 新增 | 1天 | 拖拽分隔条调整宽度,记忆到 settings |
| 7 | 响应式布局基础 | 新增 | 2天 | 窄窗口(<800px)自动折叠侧边栏,SFTP 垂直堆叠 |
| 8 | Loading/Skeleton 加载态 | 新增 | 1天 | FileListPanel 加载时显示骨架屏,SessionTree 同理 |
| 9 | 空状态设计 | 新增 | 1天 | 每个组件空状态有引导文案+操作按钮 |
| 10 | TerminalView 组件拆分 | 重构 | 3天 | 645行拆为 TerminalCore + TerminalOverlay + TerminalSearch |
### 验收标准
### 视觉优化清单
```bash
npm test -- --coverage
# Statements ≥ 50%
# Branches ≥ 40%
# Functions ≥ 50%
# Lines ≥ 50%
```
| # | 文件 | 改进 |
|---|------|------|
| V-1 | StatusBar.tsx | `bg-accent-blue` → `bg-dark-800 border-t` |
| V-2 | SFTPView.tsx | emoji 图标 → Lucide 组件 |
| V-3 | TabBar.tsx | 添加活跃标签底部指示线 |
| V-4 | App.tsx | Sidebar 折叠/展开过渡动画 |
| V-5 | WelcomeView.tsx | 响应式 grid-cols-1 sm:grid-cols-2 |
---
## v1.4.0 依赖升级 + 安全加固 📋
## v1.3.0 测试覆盖 (2 周)
**目标**: 依赖更新到最新稳定版,安全漏洞清零
**预计**: 1 周
**评分目标**: 安全 55→75, 依赖 50→80
> **目标**: 核心模块测试覆盖率从 10% 提升到 50%
### 依赖升级
详细计划见 [TDD_PLAN.md](./TDD_PLAN.md)
| 依赖 | 当前 | 目标 | 风险 |
|------|------|------|------|
| `electron` | v28 | v33+ | 高 - Breaking changes |
| `better-sqlite3` | v9 | v11 | 中 - API 变化 |
| `zustand` | v4 | v5 | 低 - 订阅 API 变化 |
| `lucide-react` | 0.294 | 0.4xx | 低 - 图标名可能有变化 |
| `eslint` | v8 | v9 | 中 - flat config 迁移 |
| # | 模块 | 当前覆盖 | 目标覆盖 | 预计 |
|---|------|----------|----------|------|
| 1 | stores (tab/connection/settings/session) | 0% | 70% | 3天 |
| 2 | hooks (useTerminal/useSFTP/useConnection) | 0% | 50% | 3天 |
| 3 | electron services (ssh/sftp/database/crypto) | 0% | 60% | 4天 |
| 4 | 组件渲染测试 (WelcomeView/TabBar/SFTPView) | 5% | 40% | 3天 |
### 安全加固
---
| 任务 | 说明 |
## v1.4.0 专业功能 (2 周)
> **目标**: 快捷键自定义、终端分屏、i18n,达到专业级水平
| # | 任务 | 类型 | 预计 | 验收标准 |
|---|------|------|------|----------|
| 1 | 快捷键自定义系统 | 新增 | 3天 | 设置页快捷键 Tab,可重映射所有快捷键,冲突检测 |
| 2 | 终端分屏 | 新增 | 5天 | 水平/垂直分割标签页,可拖拽调整分割比例 |
| 3 | i18n 国际化 | 新增 | 5天 | zh-CN + en-US,所有 UI 文字抽离到 locale 文件 |
| 4 | Light 主题 | 新增 | 3天 | 完整 light 色板,自动跟随系统 |
| 5 | Snippets 命令片段库 | 新增 | 3天 | 创建/管理/搜索命令片段,快捷键插入到终端 |
| 6 | 代理设置 | 新增 | 2天 | HTTP/SOCKS5 代理配置,按会话独立设置 |
| 7 | 多窗口支持 | 新增 | 5天 | 右键标签"在新窗口打开",窗口位置记忆 |
---
## v1.5.0 安全升级 (1 周)
> **目标**: 安全评分从 55 提升到 85
| # | 任务 | 类型 | 预计 |
|---|------|------|------|
| 1 | IPC 传输加密 (密码不明文) | 修复 | 2天 |
| 2 | Electron 升级 v28→v33+ | 升级 | 2天 |
| 3 | CSP 策略强化 | 新增 | 1天 |
| 4 | 依赖安全审计 + 更新 | 修复 | 1天 |
---
## 长期愿景 (v2.0+)
| 功能 | 描述 |
|------|------|
| 启用 sandbox 模式 | preload 适配 |
| CSP 移除 unsafe-inline | Tailwind nonce 配置 |
| IPC 参数验证 | zod schema |
| 密码 IPC 传输审查 | 确保加密后传输 |
| 审查 socksv5 安全性 | 评估是否替换 |
| 云同步 | 会话/设置跨设备同步 |
| AI 助手 | 终端命令建议、错误诊断 |
| 团队协作 | 共享会话、权限管理 |
| 插件系统 | 第三方扩展支持 |
| 脚本录制 | 操作录制+回放 |
---
## v1.5.0 功能补全 + 性能优化 📋
## 技术栈
**目标**: 补全缺失功能,性能指标全面达标
**预计**: 2 周
**评分目标**: 功能 82→95, 综合 80+
| 类别 | 技术 | 版本 |
|------|------|------|
| 框架 | Electron | 28+ (升级至 33+) |
| UI | React | 18 |
| 语言 | TypeScript | 5 |
| 构建 | Vite | 5 |
| 状态管理 | Zustand | 4 |
| 终端 | XTerm.js | 5 |
| SSH | ssh2 | 1.15 |
| 样式 | Tailwind CSS | 3 |
| 图标 | Lucide React | — |
| 数据库 | better-sqlite3 | 11 |
| 加密 | AES-256-GCM (Node crypto) | — |
### 功能补全
## 架构设计
| 功能 | 优先级 | 说明 |
|------|--------|------|
| SFTP 拖拽上传/下载 | P1 | 界面已就绪,补全 drag/drop 事件 |
| SFTP 断点续传 | P2 | 大文件传输可靠性 |
| 会话分组树形显示 | P2 | 侧边栏分组 + 文件夹 |
| 终端分屏 | P3 | 水平/垂直分屏 |
| 命令片段(Snippets) | P3 | 常用命令快速执行 |
| 同步功能 | P3 | 多设备会话同步 |
### 性能优化
| 指标 | 当前 | 目标 | 方案 |
|------|------|------|------|
| 冷启动 | ~3s | <2s | 延迟加载非核心模块 |
| 包体积 | ~120MB | <100MB | asar + tree-shaking |
| 内存(10标签) | ~200MB | <150MB | 连接池优化 + 终端回收 |
| SSH 连接 | ~1s | <500ms | 连接预热 |
---
## 远期规划 (v2.0.0)
### 专业版特性
- 插件系统 — 支持第三方扩展
- 主题编辑器 — 自定义配色方案
- 脚本录制/回放 — 操作自动化
- 协作共享 — 团队会话管理
- 云同步 — 加密会话配置同步
- API 网关 — 命令行/CI 集成
- 容器管理 — Docker/Podman 集成
---
## 已完成版本
<details>
<summary>展开查看历史版本</summary>
### v1.0.0 Stable - 生产可用 ✅
**状态**: 已完成
#### 功能完成清单
##### SSH 终端
- ✅ 密码/密钥认证
- ✅ XTerm.js 高性能终端
- ✅ 多主题配色方案
- ✅ IP 地址高亮显示
##### SFTP 管理
- ✅ 双栏文件管理器
- ✅ 上传/下载文件
- ✅ 传输队列管理
- 🟡 拖拽上传下载 (界面就绪,待完善)
- 📋 断点续传 (规划中)
##### 端口转发
- ✅ 本地端口转发
- ✅ 远程端口转发
- ✅ 动态 SOCKS5 代理
- ✅ 转发规则管理
##### 架构特性
- ✅ IPC Handler 模块化
- ✅ 共享类型定义
- ✅ 连接池 Store 拆分
- ✅ 统一日志系统
### v0.10.0 v0.3.0-release ✅
**完成日期**: 2026-04-06
- ✅ SSH 终端核心功能(密码/密钥认证、XTerm.js、多主题、IP高亮、端口转发)
- ✅ SFTP 文件管理(双栏、上传下载、传输队列、服务器选择)
- ✅ 架构改进(模块化 IPC、连接池管理、统一日志、错误处理)
### v0.9.0 Optimization ✅
**完成日期**: 2026-04-05
- ✅ 测试框架建立(Vitest + 38 测试用例)
- ✅ SFTP 右键菜单(新建文件夹/复制路径/属性)
- ✅ WebGL 终端渲染优化
- ✅ 会话导入完整实现
### v0.8.0 Modular ✅
**完成日期**: 2026-04-05
- ✅ IPC Handler 分层(8 个独立模块)
- ✅ 共享类型统一
- ✅ 连接池 Store 拆分
- ✅ SFTP 组件拆分
### v0.7.0 Professional ✅
**完成日期**: 2026-04-05
- ✅ 连接状态机(6 个状态)
- ✅ 连接池管理(LRU淘汰、保活、超时)
- ✅ 终端快照机制
- ✅ 多标签连接隔离
### v0.6.0 ~ v0.1.0 ✅
- ✅ rz/sz 文件传输
- ✅ SFTP 传输队列优化
- ✅ AES-256-GCM 加密存储
- ✅ 端口转发
- ✅ 功能骨架 + 核心 SSH
</details>
```
┌──────────────────────────────────────────────┐
│ Electron Main │
│ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Window │ │ IPC │ │ Services │ │
│ │ Manager │ │ Handlers │ │ SSH/SFTP/DB │ │
│ └─────────┘ └──────────┘ └───────────────┘ │
├──────────────────────────────────────────────┤
│ React Renderer │
│ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Views │ │ Stores │ │ Hooks │ │
│ │Term/SFTP│ │Zustand x5│ │useTerm/useSFTP│ │
│ └─────────┘ └──────────┘ └───────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ Components (Button/Modal/...) │ │
│ └─────────────────────────────────────────┘ │
├──────────────────────────────────────────────┤
│ Shared (types/constants) │
└──────────────────────────────────────────────┘
```