337 lines
13 KiB
Markdown
337 lines
13 KiB
Markdown
# PROJECT_EVALUATION.md - 项目评估和质量指标
|
||
|
||
本文档定义 OpsXShell 的质量标准、评估指标和改进目标。
|
||
|
||
---
|
||
|
||
## 版本历史
|
||
|
||
| 日期 | 版本 | 评分 | 主要变更 |
|
||
|------|------|------|----------|
|
||
| 2026-04-04 | v0.1.0 | 56/100 | 初始骨架 |
|
||
| 2026-04-06 | v0.10.0 | 78/100 | 核心功能实现发布 |
|
||
| 2026-04-18 | 代码审计 | **58/100** | 独立代码质量审计 |
|
||
| 2026-04-18 | UI/UX审计 | **48/100** | UI 视觉 + 功能交互深度审计 |
|
||
|
||
> **评分说明**: 代码审计聚焦代码质量/测试/架构/安全;UI/UX 审计聚焦视觉设计、交互体验、功能便捷性。
|
||
|
||
---
|
||
|
||
## UI/UX 审计评估 (2026-04-18)
|
||
|
||
### 整体评分: **48/100**
|
||
|
||
| 维度 | 分数 | 评级 | 说明 |
|
||
|------|------|------|------|
|
||
| **视觉设计** | 65/100 | 🟡 中等 | 深色主题配色专业,但设计系统执行不严格 |
|
||
| **交互体验** | 40/100 | 🔴 差 | 大量半成品功能,反馈系统缺失 |
|
||
| **功能便捷性** | 45/100 | 🔴 差 | 快捷键薄弱,核心操作路径长 |
|
||
| **状态处理** | 35/100 | 🔴 差 | 多组件缺空状态/加载/错误三态 |
|
||
| **响应式设计** | 10/100 | 🔴 极差 | 完全缺失 |
|
||
|
||
```
|
||
视觉设计 ████████████████░░░░░░░░░ 65% 配色专业但执行不严格
|
||
交互体验 ██████████░░░░░░░░░░░░░░░ 40% alert/prompt泛滥,无Toast
|
||
功能便捷性 ███████████░░░░░░░░░░░░░░ 45% 快捷键仅4个,无终端搜索
|
||
状态处理 ████████░░░░░░░░░░░░░░░░░ 35% 多组件缺三态
|
||
响应式设计 ██░░░░░░░░░░░░░░░░░░░░░░░ 10% 完全缺失
|
||
```
|
||
|
||
### 竞品对标
|
||
|
||
| 维度 | OpsXShell | Termius | Tabby |
|
||
|------|-----------|---------|-------|
|
||
| 整体配色 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
||
| 布局结构 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||
| 图标一致性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||
| 动画/过渡 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||
| 响应式 | ⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
|
||
| 状态处理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
|
||
| 设计系统 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
||
|
||
**OpsXShell 视觉设计达到 Termius 的 70-75% 水平,但交互体验仅 40-50%。**
|
||
|
||
---
|
||
|
||
## 视觉设计详细评估
|
||
|
||
### ✅ 做得好的
|
||
|
||
| 组件 | 亮点 |
|
||
|------|------|
|
||
| **WelcomeView** | 全项目最佳 — 2×2快捷操作网格,独立配色,图标容器渐变悬停,`rounded-xl` 统一圆角 |
|
||
| **Modal** | `backdrop-blur-sm` 毛玻璃 + `shadow-2xl` 立体感 + ESC关闭 |
|
||
| **Button** | 4变体 × 3尺寸 = 12组合,disabled 态完整,loading spinner |
|
||
| **TabBar** | 连接状态圆点(黄/绿/红),`min-w/max-w` 宽度限制,悬停显示关闭按钮 |
|
||
| **TransferPanel** | 折叠动画 + 进度条 `transition-all duration-300` + 状态标签胶囊 |
|
||
| **配色系统** | `dark-900→800→700→600` 四级灰度 + `accent-blue/green/purple` 三色搭配 |
|
||
|
||
### 🔴 高优先级视觉问题
|
||
|
||
| # | 文件 | 问题 | 修复方案 |
|
||
|---|------|------|----------|
|
||
| V-1 | `StatusBar.tsx:33` | `bg-accent-blue` 状态栏过于刺眼 | → `bg-dark-800 border-t border-dark-700` |
|
||
| V-2 | `SFTPView.tsx:96-131` | 右键菜单用 emoji `📂📤📥🗑️` | → Lucide 图标组件 |
|
||
| V-3 | `FileRow.tsx:27` | 选中色 `cyan-500` 不在设计系统 | → `accent-blue/20` |
|
||
| V-4 | `TerminalView.tsx:601` | 恢复按钮 `bg-cyan-600` 不在设计系统 | → `accent-blue` |
|
||
| V-5 | `FileRow.tsx:32` | 目录图标 `sky-400` 不在设计系统 | → `accent-blue` |
|
||
|
||
### 🟡 中优先级视觉问题
|
||
|
||
| # | 文件 | 问题 |
|
||
|---|------|------|
|
||
| V-6 | `Breadcrumb.tsx:33` | `text-slate-600` 应统一为 `text-dark-600` |
|
||
| V-7 | `TransferItem.tsx:28` | `bg-slate-700` 应统一为 `bg-dark-700` |
|
||
| V-8 | `WelcomeView.tsx:26` | `grid-cols-2` 硬编码,应加 `grid-cols-1 sm:grid-cols-2` |
|
||
| V-9 | `StatusBar.tsx:36` | `Wifi` 图标语义不当,应用 `CheckCircle` |
|
||
| V-10 | `tailwind.config.js` | 缺少 `accent-orange` 定义,`orange-400` 散落 |
|
||
|
||
---
|
||
|
||
## 交互体验详细评估
|
||
|
||
### 🔴 Critical — 严重影响可用性
|
||
|
||
| # | 文件 | 问题 | 影响 |
|
||
|---|------|------|------|
|
||
| I-1 | `App.tsx:46,49,128,159,168` | 导入导出全用 `alert()` | 体验极差,与暗色主题不协调 |
|
||
| I-2 | `SFTPView.tsx:173` | 新建文件夹用 `prompt()` | 原生弹窗破坏沉浸感 |
|
||
| I-3 | `PortForwardView.tsx:150` | 删除用 `confirm()` | 同上 |
|
||
| I-4 | `SFTPView.tsx:103` | 本地上传右键菜单 action **空函数** | 功能完全不可用 |
|
||
| I-5 | `SFTPView.tsx:129-131` | 远程删除右键菜单 action **空函数** | 功能完全不可用 |
|
||
| I-6 | `useSFTP.ts:399` | 上传实现是模拟代码 | SFTP 上传不可用 |
|
||
| I-7 | `WelcomeView.tsx:12-16` | 最近连接列表是硬编码假数据 | 显示虚假信息误导用户 |
|
||
| I-8 | `SessionDialog.tsx:265-270` | 私钥"浏览"按钮 **无事件** | 点击无反应 |
|
||
| I-9 | 全局 | **无 Toast 通知系统** | 用户操作无任何非阻塞反馈 |
|
||
| I-10 | 全局 | **无终端搜索** (Ctrl+Shift+F) | 基础功能缺失 |
|
||
| I-11 | `tabStore.ts` | 标签页无持久化,重启全部丢失 | 会话恢复名存实亡 |
|
||
| I-12 | `StatusBar.tsx:33-56` | 状态栏永远显示"就绪" | 未接入实际连接状态 |
|
||
|
||
### 🟡 Warning — 显著影响效率
|
||
|
||
| # | 文件 | 问题 |
|
||
|---|------|------|
|
||
| I-13 | 快捷键仅 4 个 | 缺 Ctrl+Tab 切标签、Ctrl+1~9、F11 全屏、Ctrl+Shift+F 搜索 |
|
||
| I-14 | `WelcomeView.tsx:120` | 提示 Ctrl+T 但 **未注册** |
|
||
| I-15 | `TabBar.tsx` | 无标签拖拽排序 |
|
||
| I-16 | `QuickConnectDialog.tsx:12-17` | 不支持密钥认证,仅密码 |
|
||
| I-17 | `SettingsView.tsx:79` | light 主题选项无效(仅 dark) |
|
||
| I-18 | `SettingsView.tsx:96-101` | 语言切换无效(无 i18n) |
|
||
| I-19 | `SFTPView.tsx:208` | 左右面板共享 contextMenu 状态可能冲突 |
|
||
| I-20 | `Sidebar.tsx` | 会话分组不可折叠/展开 |
|
||
|
||
---
|
||
|
||
## 功能便捷性评分
|
||
|
||
### SSH 连接
|
||
|
||
| 场景 | 步骤 | 评分 | 竞品对比 |
|
||
|------|------|------|----------|
|
||
| 已保存会话 | 1步(双击) | 8/10 | ✅ 与 Termius 持平 |
|
||
| 快速连接 Ctrl+K | 2-4步 | 7/10 | ⚠️ 不支持 `user@host:port` 单行输入 |
|
||
| 密钥认证 | — | 3/10 | ❌ 浏览按钮无效,需手动输入路径 |
|
||
|
||
### SFTP 文件操作
|
||
|
||
| 操作 | 步骤 | 评分 | 问题 |
|
||
|------|------|------|------|
|
||
| 导航目录 | 1步 | 8/10 | ✅ |
|
||
| 上传文件 | 3步 | 3/10 | ❌ 不可用(模拟实现) |
|
||
| 下载文件 | 2步 | 7/10 | ✅ |
|
||
| 新建文件夹 | 2步 | 5/10 | ⚠️ 用 `prompt()` |
|
||
| 拖拽上传 | — | 0/10 | ❌ 缺失 |
|
||
| 文件预览 | — | 0/10 | ❌ 缺失 |
|
||
|
||
### 标签页管理
|
||
|
||
| 操作 | 方式 | 评分 | 竞品差距 |
|
||
|------|------|------|----------|
|
||
| 创建 | +按钮/Ctrl+N | 8/10 | — |
|
||
| 切换 | 点击标签 | 6/10 | ❌ 无 Ctrl+Tab |
|
||
| 关闭 | ×/Ctrl+W | 7/10 | — |
|
||
| 拖拽排序 | — | 0/10 | ❌ 缺失 |
|
||
| 会话恢复 | — | 0/10 | ❌ 重启丢失 |
|
||
|
||
### 快捷键覆盖
|
||
|
||
| 类别 | 已有 | 缺失 | 覆盖率 |
|
||
|------|------|------|--------|
|
||
| 应用级 | 4个 (N/K/Q/R) | F11全屏, Ctrl+Shift+N新标签 | 30% |
|
||
| 标签级 | 1个 (Ctrl+W) | Ctrl+Tab, Ctrl+1~9, Ctrl+Shift+T恢复 | 10% |
|
||
| 终端级 | 0 | Ctrl+Shift+F搜索, Ctrl+Shift+C/V, Ctrl+/-缩放 | 0% |
|
||
| 自定义 | ❌ | 全部 | 0% |
|
||
|
||
---
|
||
|
||
## 功能完成度矩阵
|
||
|
||
|| 功能 | 状态 | 完成度 | 备注 |
|
||
|------|------|--------|------|
|
||
| SSH 密码连接 | ✅ | 90% | |
|
||
| SSH 密钥连接 | ✅ | 80% | |
|
||
| SSH Agent 认证 | ✅ | 80% | |
|
||
| XTerm.js 终端 | ✅ | 85% | |
|
||
| 终端多主题 | ✅ | 90% | |
|
||
| IP 高亮 | ✅ | 95% | |
|
||
| SFTP 双栏浏览 | ✅ | 80% | |
|
||
| SFTP 上传 | ✅ | 75% | |
|
||
| SFTP 下载 | ✅ | 75% | |
|
||
| SFTP 右键菜单 | 🟡 | 60% | |
|
||
| SFTP 拖拽上传 | ✅ | 80% | |
|
||
| SFTP 文件预览 | ❌ | 0% | |
|
||
| 端口转发 | ✅ | 85% | |
|
||
| 标签页管理 | ✅ | 85% | |
|
||
| 会话管理 | ✅ | 75% | |
|
||
| 会话恢复 | ✅ | 85% | |
|
||
| 快捷键系统 | ✅ | 90% | v1.4.0: 自定义快捷键+冲突检测 |
|
||
| Toast 通知 | ✅ | 90% | |
|
||
| 终端搜索 | ✅ | 85% | |
|
||
| 设置系统 | ✅ | 70% | light/i18n 待实现 |
|
||
| 状态栏 | ✅ | 80% | |
|
||
| 欢迎页 | ✅ | 80% | |
|
||
| 命令片段库 | ✅ | 85% | |
|
||
| 命令面板 | ✅ | 80% | |
|
||
| 连接面板 | ✅ | 80% | |
|
||
| 主题系统 | ✅ | 90% | Dark/Light/System |
|
||
| 终端分屏 | 🚧 | 0% | v1.4.0 计划 |
|
||
| i18n 国际化 | 🚧 | 5% | v1.4.0 计划 |
|
||
| 代理设置 | 🚧 | 0% | v1.4.0 计划 |
|
||
| 多窗口支持 | 🚧 | 0% | v1.4.0 计划 |
|
||
|
||
---
|
||
|
||
## SWOT 分析
|
||
|
||
### Strengths (优势)
|
||
- 深色主题四级灰度配色系统专业(基于 Tailwind Slate)
|
||
- WelcomeView 快捷操作卡片设计出色
|
||
- 基础组件质量高(Button/Modal/Loading/ErrorBoundary)
|
||
- 连接池管理 + 终端快照恢复(独有亮点)
|
||
- AES-256-GCM 加密实现专业
|
||
|
||
### Weaknesses (劣势)
|
||
- **大量半成品功能**: SFTP 上传/删除/右键菜单为空函数
|
||
- **反馈系统缺失**: 无 Toast,大量 alert/prompt/confirm
|
||
- **快捷键极弱**: 仅 4 个,无终端搜索、无标签切换
|
||
- **调试代码未清理**: `DEBUG=true` + 50+ console.log
|
||
- **设计系统执行不严格**: cyan/sky/slate 颜色散落
|
||
|
||
### Opportunities (机会)
|
||
- Toast 通知系统建立后,全局交互体验可跃升
|
||
- xterm SearchAddon 可快速集成终端搜索
|
||
- 快捷键自定义框架一次建设,长期受益
|
||
- 响应式设计补全后可在小屏/平板使用
|
||
|
||
### Threats (威胁)
|
||
- 竞品 Termius/Tabby 功能成熟度远超
|
||
- 半成品功能影响用户第一印象
|
||
- 无会话恢复 = 重启丢工作,企业用户不可接受
|
||
|
||
---
|
||
|
||
## 优化方向与目标
|
||
|
||
### Phase 1: 基础可用 (v1.1.0) — 2 周
|
||
|
||
**目标**: 解决所有 Critical 问题,产品具备基础可用性
|
||
**评分目标**: UI/UX 48→65
|
||
|
||
| # | 任务 | 类型 | 预计 | 影响 |
|
||
|---|------|------|------|------|
|
||
| 1 | **Toast 通知系统** (组件 + 全局 hook) | 新增 | 2天 | 全局交互提升 |
|
||
| 2 | **替换所有 alert/prompt/confirm** 为自定义 UI | 修复 | 2天 | 消除原生弹窗 |
|
||
| 3 | **SFTP 上传/删除真实实现** | 修复 | 3天 | 核心功能可用 |
|
||
| 4 | **终端搜索** (xterm SearchAddon) | 新增 | 1天 | 基础功能补全 |
|
||
| 5 | **会话恢复** (标签持久化到 SQLite) | 新增 | 3天 | 重启不丢工作 |
|
||
| 6 | **修复私钥浏览按钮** | 修复 | 0.5天 | 密钥认证可用 |
|
||
| 7 | **清理生产调试日志** | 修复 | 1天 | 代码质量 |
|
||
| 8 | **设计系统统一** (cyan→accent-blue 等) | 修复 | 1天 | 视觉一致性 |
|
||
| 9 | **StatusBar 接入实际状态** | 修复 | 0.5天 | 信息准确 |
|
||
| 10 | **WelcomeView 真实最近连接** | 修复 | 1天 | 去除假数据 |
|
||
|
||
### Phase 2: 体验升级 (v1.2.0) — 2 周
|
||
|
||
**目标**: 快捷键、视觉打磨、交互优化
|
||
**评分目标**: UI/UX 65→78
|
||
|
||
| # | 任务 | 类型 | 预计 |
|
||
|---|------|------|------|
|
||
| 1 | Ctrl+Tab / Ctrl+1~9 标签切换 | 新增 | 1天 |
|
||
| 2 | 标签拖拽排序 | 新增 | 2天 |
|
||
| 3 | SFTP 拖拽上传 | 新增 | 2天 |
|
||
| 4 | SFTP 右键菜单完善(权限编辑/属性) | 完善 | 1天 |
|
||
| 5 | 侧边栏会话分组折叠/展开 | 完善 | 1天 |
|
||
| 6 | Sidebar 宽度可拖拽调整 | 新增 | 1天 |
|
||
| 7 | 响应式布局基础(窄窗口折叠侧边栏) | 新增 | 2天 |
|
||
| 8 | Loading/Skeleton 加载态补全 | 新增 | 1天 |
|
||
| 9 | 空状态插画/提示补全 | 新增 | 1天 |
|
||
| 10 | 终端组件拆分重构 | 重构 | 3天 |
|
||
|
||
### Phase 3: 专业功能 (v1.3.0) — 3 周
|
||
|
||
**目标**: 快捷键自定义、终端分屏、i18n
|
||
**评分目标**: UI/UX 78→88
|
||
|
||
| # | 任务 | 类型 | 预计 |
|
||
|---|------|------|------|
|
||
| 1 | 快捷键自定义系统 | 新增 | 3天 |
|
||
| 2 | 终端分屏(水平/垂直) | 新增 | 5天 |
|
||
| 3 | i18n 国际化 | 新增 | 5天 |
|
||
| 4 | Light 主题实现 | 新增 | 3天 |
|
||
| 5 | Snippets 命令片段库 | 新增 | 3天 |
|
||
| 6 | 代理设置 | 新增 | 2天 |
|
||
| 7 | 多窗口支持 | 新增 | 5天 |
|
||
|
||
---
|
||
|
||
## 里程碑总览
|
||
|
||
```
|
||
v1.1.0 基础可用 (2 周) → UI/UX 48→65 解决所有Critical问题
|
||
v1.2.0 体验升级 (2 周) → UI/UX 65→78 快捷键+视觉打磨
|
||
v1.3.0 专业功能 (3 周) → UI/UX 78→88 分屏+i18n+自定义快捷键
|
||
|
||
总计: ~7 周 → UI/UX 综合评分 48→88
|
||
```
|
||
|
||
### 成功指标
|
||
|
||
| 指标 | v1.0 当前 | v1.3 目标 |
|
||
|------|-----------|-----------|
|
||
| UI/UX 综合评分 | 48/100 | 88/100 |
|
||
| 有效快捷键数 | 4 | 30+ |
|
||
| alert/prompt/confirm | 8 处 | 0 处 |
|
||
| 半成品功能 | 8 个 | 0 个 |
|
||
| Toast 通知覆盖 | 0% | 100% |
|
||
| 终端搜索 | ❌ | ✅ |
|
||
| 会话恢复 | ❌ | ✅ |
|
||
| 响应式 | ❌ | ✅ |
|
||
| 快捷键可自定义 | ❌ | ✅ |
|
||
|
||
---
|
||
|
||
## 代码质量评估(代码审计结论,保留参考)
|
||
|
||
### 综合评分: 58/100
|
||
|
||
| 维度 | 分数 | 说明 |
|
||
|------|------|------|
|
||
| 功能完成度 | 82/100 | SSH/SFTP/端口转发主体完成 |
|
||
| 代码质量 | 45/100 | 50+ console.log, DEBUG=true 残留 |
|
||
| 测试覆盖 | 15/100 | 核心模块零测试 |
|
||
| 架构设计 | 72/100 | IPC 分层好,Store 有耦合 |
|
||
| 安全合规 | 55/100 | 加密优秀,传输链路有风险 |
|
||
| 依赖管理 | 50/100 | Electron v28 过旧 |
|
||
| 构建配置 | 75/100 | 基本合理 |
|
||
|
||
### 代码统计
|
||
|
||
| 目录 | 文件数 | 代码行数 | 占比 |
|
||
|------|--------|----------|------|
|
||
| `electron/` | 17 | 2,862 | 25.3% |
|
||
| `src/` | 55 | 7,480 | 66.0% |
|
||
| `shared/` | 5 | 441 | 3.9% |
|
||
| `test/` | 4 | 475 | 4.2% |
|
||
| **总计** | **81** | **11,258** | **100%** |
|