Private
Public Access
1
0
Files
u-desk/docs/03-模块文档/更新通知/update-notification-design.md

491 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 升级提示交互设计文档
## 设计理念
### 核心价值
将升级从"干扰"转变为"期待",创造专业、可信、流畅的更新体验。
### 设计原则
1. **无感检测** - 后台静默检查,不打扰工作流
2. **优雅提示** - 精美的弹窗设计,而非生硬的系统提示
3. **透明反馈** - 清晰的进度展示,让用户掌控全局
4. **安全信任** - 强调版本信息和安全性,建立信任
---
## 交互流程
### 1. 自动检查更新(后台)
```
应用启动
等待 3 秒(避免阻塞启动)
检查更新配置
是否开启自动检查?
├─ 否 → 跳过
└─ 是 → 请求版本信息
版本比较
├─ 无更新 → 记录日志
└─ 有更新 → 检查是否已跳过
├─ 已跳过且非强制 → 跳过
└─ 未跳过或强制更新 → 延迟 2 秒显示弹窗
```
**关键点:**
- ✅ 异步检查,不阻塞应用启动
- ✅ 3 秒延迟,优先显示应用界面
- ✅ 2 秒延迟显示弹窗,让用户先熟悉界面
- ✅ 支持跳过非强制更新
### 2. 升级提示弹窗
#### 弹窗触发时机
- **自动触发**:应用启动检测到新版本(延迟 5 秒)
- **手动触发**:用户在"版本更新"面板点击"检查更新"
#### 弹窗状态
**状态 1初始显示**
```
┌─────────────────────────────────────────────┐
│ 🔍 发现新版本 v0.1.0 → v0.1.1 [✕] │
├─────────────────────────────────────────────┤
│ │
│ 📅 发布日期 2026-01-28 │
│ 📁 文件大小 45.2 MB │
│ │
│ 📖 更新内容 │
│ ┌─────────────────────────────────────────┐ │
│ │ • 修复文件列表刷新问题 │ │
│ │ • 优化启动性能 │ │
│ │ • 新增暗色模式支持 │ │
│ └─────────────────────────────────────────┘ │
│ │
│ [ 跳过此版本 ] [ 立即更新 ↓ ] │
│ │
│ ☐ 提醒我稍后更新(下次启动时提醒) │
└─────────────────────────────────────────────┘
```
**状态 2下载中**
```
┌─────────────────────────────────────────────┐
│ 🔍 发现新版本 v0.1.0 → v0.1.1 [✕] │
├─────────────────────────────────────────────┤
│ │
│ 📥 下载中... │
│ ████████████████░░░░░░░░ 65% │
│ 28.5 MB / 45.2 MB 2.3 MB/s │
│ │
│ [ 跳过此版本 ] [ 准备中... ] │
└─────────────────────────────────────────────┘
```
**状态 3下载完成**
```
┌─────────────────────────────────────────────┐
│ 🔍 发现新版本 v0.1.0 → v0.1.1 [✕] │
├─────────────────────────────────────────────┤
│ │
│ ✅ 下载完成! │
│ 文件已保存到: │
│ C:\Users\xxx\.u-desk\downloads\update.exe │
│ │
│ [ ✓ 下载完成,点击安装 ] │
└─────────────────────────────────────────────┘
```
**状态 4强制更新**
```
┌─────────────────────────────────────────────┐
│ ⚠ 重要更新 v0.1.0 → v0.1.1 │
├─────────────────────────────────────────────┤
│ │
│ ⚠️ 此版本包含重要的安全更新和修复, │
│ 建议立即更新以继续使用 │
│ │
│ 📖 更新内容 │
│ ┌─────────────────────────────────────────┐ │
│ │ • 修复严重安全漏洞 │ │
│ │ • 修复数据损坏问题 │ │
│ └─────────────────────────────────────────┘ │
│ │
│ [ 立即更新 ↓ ] │
└─────────────────────────────────────────────┘
```
### 3. 用户操作流程
#### 立即更新流程
```
点击"立即更新"
开始下载
显示下载进度(实时更新)
下载完成
显示"点击安装"按钮
点击"安装"
确认对话框
开始安装
显示"安装中..."
安装成功,延迟 2 秒重启应用
```
#### 跳过流程
```
点击"跳过此版本"
检查"提醒我稍后更新"
├─ 选中 → 保存到 localStorageskipped_version
└─ 未选中 → 清除 localStorage
关闭弹窗
下次启动时不再提示(除非是强制更新)
```
---
## 视觉设计
### 配色方案
**主要颜色**
- **主色调**`#165dff` - 专业蓝,代表信任和稳定
- **成功色**`#00b42a` - 下载成功、安装完成
- **警告色**`#ff7d00` - 一般更新
- **错误色**`#f53f3f` - 强制更新、下载失败
**渐变效果**
```css
/* 版本徽章渐变 */
background: linear-gradient(135deg, #165dff 0%, #4facfe 100%);
/* 强制更新徽章渐变 */
background: linear-gradient(135deg, #f53f3f 0%, #ff7875 100%);
/* 弹窗头部渐变 */
background: linear-gradient(135deg, #f0f5ff 0%, #ffffff 100%);
```
### 字体设计
**显示字体**:系统默认(保持一致性)
**代码字体**`'Menlo', 'Monaco', 'Courier New', monospace`(更新日志)
**字号层级**
```css
版本徽章15px / 600 /* 主要 CTA */
标题14px / 600 /* 区块标题 */
正文14px / 400 /* 内容文字 */
辅助文字12px / 400 /* 标签、提示 */
小字13px / 400 /* 代码、日志 */
```
### 间距系统
```css
弹窗内边距24px
卡片间距20px
区块间距16px
元素间距12px
小间距8px
```
### 圆角系统
```css
弹窗8px
卡片/容器12px
按钮8px
信息图标8px
```
### 阴影系统
```css
版本徽章0 2px 8px rgba(22, 93, 255, 0.3)
信息图标0 2px 6px rgba(22, 93, 255, 0.2)
```
---
## 动画设计
### 弹窗动画
```css
@keyframes modalFadeIn {
from {
opacity: 0;
transform: scale(0.95) translateY(-20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
/* 持续时间0.3s */
/* 缓动函数ease-out */
```
### 进度条动画
```css
@keyframes progressPulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.8; }
}
/* 持续时间1.5s */
/* 循环播放 */
```
### 按钮交互
- **Hover**0.15s 背景色过渡
- **Active**轻微缩放scale: 0.98
---
## 组件结构
```
UpdateNotification.vue
├── 模板层Template
│ ├── 弹窗容器a-modal
│ ├── 标题栏(自定义)
│ │ ├── 版本徽章(带图标)
│ │ └── 版本对比(当前 → 最新)
│ ├── 内容区域
│ │ ├── 版本信息卡片
│ │ │ ├── 发布日期
│ │ │ └── 文件大小
│ │ ├── 更新日志
│ │ ├── 强制更新提示(条件显示)
│ │ ├── 下载进度(条件显示)
│ │ ├── 操作按钮
│ │ └── 后台更新选项(条件显示)
├── 脚本层Script
│ ├── PropsmodelValue, updateInfo
│ ├── Emitsupdate:modelValue, download, install, skip
│ ├── 状态管理
│ │ ├── 下载状态
│ │ ├── 安装状态
│ │ ├── 进度信息
│ │ └── 用户选择
│ ├── 方法
│ │ ├── handleDownload()
│ │ ├── handleInstall()
│ │ ├── handleSkip()
│ │ ├── 事件监听器(下载进度、完成)
│ │ └── 工具方法(文件大小格式化等)
│ └── 生命周期
│ ├── onMounted设置事件监听
│ └── onUnmounted清理事件监听
└── 样式层Style
├── 弹窗样式
├── 版本徽章
├── 信息卡片
├── 更新日志
├── 进度条
├── 按钮样式
└── 动画效果
```
---
## 后端集成
### API 接口
```javascript
// 检查更新
await window.go.main.App.CheckUpdate()
// 返回: { success: true, data: { has_update, current_version, latest_version, ... } }
// 下载更新
await window.go.main.App.DownloadUpdate(downloadURL)
// 返回: { success: true, data: { message: "下载已开始" } }
// 安装更新
await window.go.main.App.InstallUpdate(filePath, autoRestart)
// 返回: { success: true, data: { success: true, message: "安装成功" } }
```
### 事件系统
```javascript
// 监听下载进度
window.runtime.EventsOn('download-progress', (event) => {
const data = JSON.parse(event)
// { progress: 65, speed: 2345678, downloaded: 28576892, total: 45234567 }
})
// 监听下载完成
window.runtime.EventsOn('download-complete', (event) => {
const data = JSON.parse(event)
// { success: true, file_path: "xxx", file_size: 45234567 }
})
```
---
## 配置选项
### 用户可配置
**设置 → 版本更新** 中:
-**自动检查更新**:开启/关闭
-**检查间隔**1-1440 分钟
- 🔒 **检查地址**:只读(系统配置)
### 版本信息文件格式
```json
{
"version": "0.1.1",
"download_url": "https://img.1216.top/u-desk/go-desk-0.1.1-windows-amd64.exe",
"changelog": "• 修复文件列表刷新问题\n• 优化启动性能\n• 新增暗色模式支持",
"force_update": false,
"release_date": "2026-01-28",
"file_size": 45234567
}
```
---
## 边界情况处理
### 1. 网络错误
```
检查更新失败 → 记录日志,不显示弹窗
下载失败 → 显示错误提示,允许重试
```
### 2. 下载中断
```
支持断点续传
下次下载从断点继续
```
### 3. 安装失败
```
显示错误信息
自动回滚到备份版本
```
### 4. 用户跳过
```
非强制更新 → 允许跳过
强制更新 → 不允许跳过(禁用关闭按钮)
```
### 5. 版本回退
```
不主动提示降级
如需降级,手动下载安装
```
---
## 可访问性
### 键盘导航
- ✅ Tab 键:切换焦点
- ✅ Enter 键:激活按钮
- ✅ Esc 键:关闭弹窗(非强制更新)
### 屏幕阅读器
- ✅ 语义化 HTML
- ✅ ARIA 标签
- ✅ 清晰的焦点指示器
### 对比度
- ✅ 文字与背景对比度 ≥ 4.5:1
- ✅ 重要信息使用高对比度颜色
---
## 性能优化
### 前端
- ✅ 异步加载组件(按需)
- ✅ 防抖处理(避免频繁更新)
- ✅ 事件监听器及时清理
### 后端
- ✅ 异步下载(不阻塞 UI
- ✅ 流式下载(支持大文件)
- ✅ 断点续传(节省带宽)
---
## 测试要点
### 功能测试
- ✅ 自动检查更新正常触发
- ✅ 弹窗正确显示版本信息
- ✅ 下载进度实时更新
- ✅ 安装成功后重启
- ✅ 跳过功能正常工作
- ✅ 强制更新无法关闭
### 边界测试
- ✅ 网络断开时的处理
- ✅ 下载失败后的重试
- ✅ 安装失败后的回滚
- ✅ 跳过后不再提示
- ✅ 强制更新必须安装
### UI 测试
- ✅ 弹窗动画流畅
- ✅ 进度条更新平滑
- ✅ 按钮状态正确
- ✅ 响应式布局正常
---
## 未来改进方向
### 短期1-2 周)
- [ ] 增量更新支持(仅下载差异包)
- [ ] 更新历史记录
- [ ] 更新统计(次数、节省时间)
### 中期1-2 月)
- [ ] 多渠道更新(稳定版、测试版)
- [ ] 自动更新后台下载
- [ ] 更新预约(定时更新)
### 长期3-6 月)
- [ ] 智能更新(根据使用习惯)
- [ ] A/B 测试更新策略
- [ ] 用户反馈收集
---
## 总结
这个升级提示系统设计遵循了现代 UX 最佳实践:
**专业感** - 精美的视觉设计,建立用户信任
🚀 **流畅感** - 细腻的动画过渡,提升体验
🎯 **掌控感** - 清晰的进度反馈,用户有掌控权
🔒 **安全感** - 强制更新保护,跳过选项灵活
**高效感** - 后台检测,不干扰工作流
用户将从"被迫更新"的烦恼,转变为"期待更新"的积极体验。