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

9.8 KiB
Raw Permalink Blame History

升级提示功能实现总结

已完成的工作

1. 前端组件开发

UpdateNotification.vue

文件路径: frontend/src/components/UpdateNotification.vue

功能特性:

  • 精美的弹窗UI设计
  • 版本信息展示(当前版本 → 最新版本)
  • 发布日期和文件大小显示
  • 更新日志格式化展示
  • 下载进度实时显示(进度条 + 速度 + 文件大小)
  • 强制更新支持(不可关闭)
  • 灵活的跳过选项(支持稍后提醒)
  • 完整的状态管理(初始、下载中、下载完成、安装中)
  • 事件系统集成(监听下载进度和完成事件)

UI亮点

  • 🎨 渐变色版本徽章(蓝色普通更新 / 红色强制更新)
  • 🎨 卡片式信息展示
  • 🎨 流畅的动画效果(淡入、缩放)
  • 🎨 响应式布局
  • 🎨 清晰的视觉层次

2. 应用集成

App.vue 修改

文件路径: frontend/src/App.vue

新增功能:

  • 导入 UpdateNotification 组件
  • 应用启动后自动检查更新(延迟 3 秒)
  • 发现新版本后自动显示弹窗(延迟 5 秒总时长)
  • 跳过版本记忆功能localStorage
  • 完整的事件处理(安装、跳过)

实现逻辑:

1. 应用启动
2. 等待 3 避免阻塞启动
3. 检查更新配置
4. 如果开启自动检查
   - 调用 CheckUpdate() API
   - 比较版本号
   - 检查是否已跳过
   - 如果有更新且未跳过  延迟 2 秒显示弹窗

3. 后端支持

已有的后端接口(无需修改)

  • CheckUpdate() - 检查更新
  • DownloadUpdate() - 下载更新包(支持进度事件)
  • InstallUpdate() - 安装更新
  • GetUpdateConfig() - 获取更新配置
  • SetUpdateConfig() - 保存更新配置

事件系统

  • download-progress - 下载进度事件
  • download-complete - 下载完成事件

4. 文档

设计文档

文件路径: docs/update-notification-design.md

包含内容:

  • 设计理念和原则
  • 完整的交互流程图
  • 视觉设计规范(配色、字体、间距、圆角、阴影)
  • 动画设计细节
  • 组件结构说明
  • 后端集成指南
  • 配置选项说明
  • 版本信息文件格式
  • 边界情况处理
  • 可访问性考虑
  • 性能优化建议
  • 测试要点
  • 未来改进方向

使用指南

文件路径: docs/update-notification-usage.md

包含内容:

  • 功能概述
  • 主要特性列表
  • 详细使用流程
  • 配置选项说明
  • 手动检查更新方法
  • 常见问题解答FAQ
  • 技术实现说明
  • 最佳实践建议

5. 代码修复

app.go

文件路径: app.go:68

修改:

// 修改前:
if updateAPI, err := api.NewUpdateAPI("https://img.1216.top/go-desk/last-version.json")

// 修改后:
if updateAPI, err := api.NewUpdateAPI("https://img.1216.top/u-desk/last-version.json")

原因: 确保使用正确的版本检查地址u-desk 而非 go-desk

UpdatePanel.vue

文件路径: frontend/src/components/UpdatePanel.vue

修改:

  • 将"更新检查地址"字段设置为 disabled(只读)
  • 添加提示文字:"系统默认配置,不可修改"
  • 移除 @change 事件(不需要保存)

原因: 防止用户误改检查地址,导致无法更新


🎨 设计亮点

视觉设计

  1. 版本徽章

    • 普通更新:蓝色渐变 #165dff → #4facfe
    • 强制更新:红色渐变 #f53f3f → #ff7875
    • 带图标和阴影,突出重要信息
  2. 信息卡片

    • 图标化信息展示(日历、文件)
    • 卡片式布局,清晰分组
    • 柔和的背景色和圆角
  3. 进度条

    • 实时进度更新
    • 显示下载速度和文件大小
    • 脉冲动画效果
  4. 动画效果

    • 弹窗淡入 + 缩放
    • 进度条脉冲动画
    • 按钮悬停效果

交互设计

  1. 非阻塞式检查

    • 应用启动后 3 秒才检查(优先显示界面)
    • 弹窗延迟 5 秒显示(让用户先熟悉界面)
  2. 灵活的控制

    • 非强制更新可跳过
    • 支持稍后提醒选项
    • 记忆跳过的版本
  3. 透明反馈

    • 实时显示下载进度
    • 清晰的错误提示
    • 确认对话框防止误操作

📊 技术细节

组件通信

App.vue (父组件)
  ↓ 提供数据
UpdateNotification.vue (子组件)
  ↓ 发出事件
App.vue (父组件)
  ↓ 调用后端 API
Go Backend (后端)
  ↓ 发出事件
UpdateNotification.vue (子组件)

数据流

用户启动应用
  ↓
App.vue: checkForUpdates()
  ↓
Go Backend: CheckUpdate()
  ↓
返回更新信息
  ↓
App.vue: 判断是否显示弹窗
  ↓
UpdateNotification.vue: 显示弹窗
  ↓
用户点击"立即更新"
  ↓
UpdateNotification.vue: handleDownload()
  ↓
Go Backend: DownloadUpdate()
  ↓
推送进度事件: download-progress
  ↓
UpdateNotification.vue: 更新进度条
  ↓
下载完成事件: download-complete
  ↓
UpdateNotification.vue: 显示"安装"按钮
  ↓
用户点击"安装"
  ↓
UpdateNotification.vue: emit('install')
  ↓
App.vue: handleUpdateInstall()
  ↓
Go Backend: InstallUpdate()
  ↓
应用重启

状态管理

// UpdateNotification.vue 的状态
const visible = ref(false)           // 弹窗显示状态
const downloading = ref(false)       // 下载中状态
const downloaded = ref(false)        // 下载完成状态
const installing = ref(false)        // 安装中状态
const downloadProgress = ref(0)      // 下载进度 (0-100)
const remindLater = ref(false)       // 稍后提醒选项
const progressInfo = ref({           // 进度详情
  progress: 0,
  speed: 0,
  downloaded: 0,
  total: 0
})

// App.vue 的状态
const showUpdateNotification = ref(false)  // 显示升级提示
const updateInfo = ref(null)               // 更新信息
const checkedUpdate = ref(false)           // 是否已检查

🧪 测试要点

功能测试

  • 应用启动自动检查更新
  • 弹窗正确显示版本信息
  • 下载按钮正常工作
  • 下载进度实时更新
  • 下载完成后显示安装按钮
  • 安装成功后应用重启
  • 跳过功能正常工作
  • 强制更新无法关闭
  • 前端构建成功

UI 测试

  • 弹窗动画流畅
  • 版本徽章颜色正确
  • 进度条更新平滑
  • 按钮状态正确
  • 响应式布局正常

边界测试(待测试)

  • 网络断开时的处理
  • 下载失败后的重试
  • 安装失败后的回滚
  • 跳过后不再提示
  • 强制更新必须安装

🚀 部署清单

前端

  • UpdateNotification.vue - 升级提示组件
  • App.vue - 集成自动检查逻辑
  • 前端构建成功

后端

  • 所有必要的API接口已存在
  • 事件系统已就绪
  • app.go 检查地址已修复

配置

  • 版本信息文件地址:https://img.1216.top/u-desk/last-version.json
  • 配置文件不可修改(前端限制)

文档

  • 设计文档:docs/update-notification-design.md
  • 使用指南:docs/update-notification-usage.md
  • 实现总结:docs/update-notification-implementation.md

📝 使用方法

1. 准备版本信息文件

在服务器上创建 last-version.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
}

2. 编译应用

wails build

3. 测试

# 启动应用
wails dev

# 或运行编译后的应用
./build/go-desk.exe

应用启动后 5 秒会自动检查更新并显示弹窗。

4. 用户体验

  1. 首次更新:弹窗自动显示,用户可选择立即更新或跳过
  2. 跳过版本:如果用户选择跳过且不勾选"稍后提醒",下次不再提示
  3. 强制更新:无法跳过,必须安装
  4. 下载过程:显示实时进度和速度
  5. 安装完成:应用自动重启

🎯 成果总结

实现的功能

自动检查更新(应用启动后 5 秒) 精美的升级提示弹窗 实时下载进度显示 灵活的跳过机制 强制更新支持 完整的文档说明

用户体验提升

从"被动打扰"到"主动期待" 从"生硬提示"到"优雅体验" 从"黑盒下载"到"透明反馈" 从"强制升级"到"灵活选择"

技术质量

模块化组件设计 完整的状态管理 事件驱动架构 详细的文档说明 专业的视觉设计


🔮 后续优化建议

短期(可选)

  1. 增量更新 - 仅下载差异文件,节省流量
  2. 更新历史 - 记录更新历史,查看已安装的版本
  3. 更新统计 - 统计更新次数、节省时间等

中期(可选)

  1. 后台下载 - 在用户不使用时自动下载
  2. 多渠道支持 - 稳定版、测试版、开发版
  3. 更新预约 - 定时更新,避免打扰工作

长期(可选)

  1. 智能更新 - 根据用户习惯选择更新时机
  2. A/B 测试 - 测试不同的更新策略
  3. 用户反馈 - 收集用户对新版本的反馈

结语

升级提示系统已经完整实现,提供了专业、流畅、友好的更新体验。

核心价值:

  • 将升级从"干扰"转变为"期待"
  • 精美的 UI 设计,建立用户信任
  • 流畅的交互体验,提升产品质感
  • 灵活的控制选项,尊重用户选择

用户反馈预期:

  • "这个更新提示真漂亮!"
  • "下载速度显示很清晰"
  • "我喜欢可以稍后再更新的选项"
  • "强制更新保护得很到位"

享受专业级的更新体验!🎉