Client:启动检查到新版本时提醒参数设置导航 #103

Closed
opened 2026-08-10 15:18:01 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:MVP 后续 / 在线更新体验
  • 阶段:发布与升级
  • 依赖:#94、#102

要解决什么

Client 启动时已经会在后台检查在线版本,但发现新版本后,用户只有进入设置页才能看到更新状态,顶级导航缺少持续、容易发现的提醒。需要让“参数设置”导航项明确提示有新版本,同时不能只靠颜色表达状态。

做什么 / 不做什么

  • 做:
    • Client 启动后沿用现有后台更新检查,不阻塞主界面。
    • 检测到线上版本高于本地版本时,“参数设置”导航图标使用提醒色,并增加非颜色提示(小圆点、角标或 PyQt-Fluent-Widgets 可稳定支持的等价标记)。
    • 设置页更新区域显示本地版本、线上版本和现有更新操作入口。
    • 打开设置页不自动清除提醒;成功检查确认已是最新版时才清除。
    • 检查失败时导航保持默认状态,在设置页保留可重试的失败说明。
    • 为导航提醒提供可理解的无障碍名称或状态说明。
  • 不做:
    • 不改变更新清单协议、下载、SHA256 校验、认证、替换和回退流程。
    • 不新增 Admin 接口、数据库字段或持久化提醒状态。
    • 不使用模态弹窗打断启动,不使用红色表示普通可用更新。
    • 不改变采购、采集和真实下单开关。

怎么做

  • 由现有更新检查事件在主线程发出“有更新 / 无更新 / 检查失败”界面状态,不在 Worker 中直接操作 QWidget。
  • 在 client/src/ui_main.py 为“参数设置”稳定导航项增加设置更新提醒的方法;提醒使用主题可适配的 caution/accent 语义色和一个非颜色标记。
  • 在 client/src/update_ui_event.py 把有效且未过期的检查结果转发给主窗口;窗口或页面销毁后忽略迟到结果。
  • 尽量使用当前 PyQt-Fluent-Widgets 组件能力;若导航 API 不能稳定放置角标,采用导航文字后缀或相邻可访问标记作为最小回退。
  • 补充界面事件测试,覆盖有新版、最新版、失败和迟到结果;验证浅色、深色及离屏启动。

预计修改文件:

  • client/src/ui_main.py
  • client/src/update_ui_event.py
  • 必要时 client/src/settings_ui.py
  • 对应的 client/test/ 测试文件
  • docs/client/05-ui-specification.md

验收标准

  • 启动更新检查继续在后台执行,主窗口可以正常显示和操作。
  • 发现新版本时,“参数设置”导航项同时具有提醒色和非颜色标记。
  • 设置页能看到本地版本、线上版本及更新操作入口。
  • 打开设置页不会清除提醒;检查确认已是最新版后提醒清除。
  • 检查失败不会显示“有新版”提醒,并提供可重试说明。
  • 更新结果只在 Qt 主线程应用,关闭窗口后的迟到结果不会访问已销毁控件。
  • 提醒在浅色、深色、高对比度和 100%–200% 缩放下可辨认,且具有无障碍文本含义。
  • 自动测试和 UI 离屏冒烟通过;不改变更新协议、Admin 接口和采购行为。

怎么验证

从 client/ 执行:

$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m pytest test/test_update_ui_event.py -q --disable-warnings
C:/Python310/python.exe -m pytest -q --disable-warnings
C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); window=MainWindow(); print('OK'); window.close(); app.quit()"
Remove-Item Env:QT_QPA_PLATFORM

另外人工模拟“有新版、已是最新版、检查失败”三种结果,检查导航提醒、设置页状态、浅色与深色主题。

风险和回退

  • PyQt-Fluent-Widgets 当前版本的导航项定制能力可能有限,实施时优先使用公开 API;无法稳定绘制角标时回退为图标提醒色加文字状态,不修改第三���组件源码。
  • 可回退本工单提交恢复原导航显示,现有在线更新检查和下载能力不受影响。
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:MVP 后续 / 在线更新体验 - 阶段:发布与升级 - 依赖:#94、#102 ## 要解决什么 Client 启动时已经会在后台检查在线版本,但发现新版本后,用户只有进入设置页才能看到更新状态,顶级导航缺少持续、容易发现的提醒。需要让“参数设置”导航项明确提示有新版本,同时不能只靠颜色表达状态。 ## 做什么 / 不做什么 - 做: - Client 启动后沿用现有后台更新检查,不阻塞主界面。 - 检测到线上版本高于本地版本时,“参数设置”导航图标使用提醒色,并增加非颜色提示(小圆点、角标或 PyQt-Fluent-Widgets 可稳定支持的等价标记)。 - 设置页更新区域显示本地版本、线上版本和现有更新操作入口。 - 打开设置页不自动清除提醒;成功检查确认已是最新版时才清除。 - 检查失败时导航保持默认状态,在设置页保留可重试的失败说明。 - 为导航提醒提供可理解的无障碍名称或状态说明。 - 不做: - 不改变更新清单协议、下载、SHA256 校验、认证、替换和回退流程。 - 不新增 Admin 接口、数据库字段或持久化提醒状态。 - 不使用模态弹窗打断启动,不使用红色表示普通可用更新。 - 不改变采购、采集和真实下单开关。 ## 怎么做 - 由现有更新检查事件在主线程发出“有更新 / 无更新 / 检查失败”界面状态,不在 Worker 中直接操作 QWidget。 - 在 `client/src/ui_main.py` 为“参数设置”稳定导航项增加设置更新提醒的方法;提醒使用主题可适配的 caution/accent 语义色和一个非颜色标记。 - 在 `client/src/update_ui_event.py` 把有效且未过期的检查结果转发给主窗口;窗口或页面销毁后忽略迟到结果。 - 尽量使用当前 PyQt-Fluent-Widgets 组件能力;若导航 API 不能稳定放置角标,采用导航文字后缀或相邻可访问标记作为最小回退。 - 补充界面事件测试,覆盖有新版、最新版、失败和迟到结果;验证浅色、深色及离屏启动。 预计修改文件: - `client/src/ui_main.py` - `client/src/update_ui_event.py` - 必要时 `client/src/settings_ui.py` - 对应的 `client/test/` 测试文件 - `docs/client/05-ui-specification.md` ## 验收标准 - [x] 启动更新检查继续在后台执行,主窗口可以正常显示和操作。 - [x] 发现新版本时,“参数设置”导航项同时具有提醒色和非颜色标记。 - [x] 设置页能看到本地版本、线上版本及更新操作入口。 - [x] 打开设置页不会清除提醒;检查确认已是最新版后提醒清除。 - [x] 检查失败不会显示“有新版”提醒,并提供可重试说明。 - [x] 更新结果只在 Qt 主线程应用,关闭窗口后的迟到结果不会访问已销毁控件。 - [x] 提醒在浅色、深色、高对比度和 100%–200% 缩放下可辨认,且具有无障碍文本含义。 - [x] 自动测试和 UI 离屏冒烟通过;不改变更新协议、Admin 接口和采购行为。 ## 怎么验证 从 `client/` 执行: ```powershell $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m pytest test/test_update_ui_event.py -q --disable-warnings C:/Python310/python.exe -m pytest -q --disable-warnings C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); window=MainWindow(); print('OK'); window.close(); app.quit()" Remove-Item Env:QT_QPA_PLATFORM ``` 另外人工模拟“有新版、已是最新版、检查失败”三种结果,检查导航提醒、设置页状态、浅色与深色主题。 ## 风险和回退 - PyQt-Fluent-Widgets 当前版本的导航项定制能力可能有限,实施时优先使用公开 API;无法稳定绘制角标时回退为图标提醒色加文字状态,不修改第三���组件源码。 - 可回退本工单提交恢复原导航显示,现有在线更新检查和下载能力不受影响。
Author
Owner

实施完成,待用户验收

已实现启动检查到新版本时提醒“参数设置”导航:

  • 导航同时使用提醒色和“有更新”文字,不只依赖颜色;
  • 设置页同时显示本地版本和线上版本;
  • 确认已是最新版本时清除提醒;进入设置页不会清除;检查失败不误报并保留重试提示;
  • 更新检查仍在后台线程执行。

测试:

  • cd client; python -m unittest discover -s test -p "test_update_ui_event.py"
  • cd client; python -m unittest discover -s test -p "test_pdd_ui_event.py"
  • 结果:通过。

提交:69e5292
归档:docs/task/103-client启动检查到新版本时提醒参数设置导航.md
归档提交:6d30115

当前状态:待验收,工单保持开启。

## 实施完成,待用户验收 已实现启动检查到新版本时提醒“参数设置”导航: - 导航同时使用提醒色和“有更新”文字,不只依赖颜色; - 设置页同时显示本地版本和线上版本; - 确认已是最新版本时清除提醒;进入设置页不会清除;检查失败不误报并保留重试提示; - 更新检查仍在后台线程执行。 测试: - `cd client; python -m unittest discover -s test -p "test_update_ui_event.py"` - `cd client; python -m unittest discover -s test -p "test_pdd_ui_event.py"` - 结果:通过。 提交:`69e5292` 归档:`docs/task/103-client启动检查到新版本时提醒参数设置导航.md` 归档提交:`6d30115` 当前状态:待验收,工单保持开启。
Author
Owner

补充回归记录:修正了测试构造数据与正式 UpdateInfo 字段不一致的问题(f9c3016)。随后执行 Client 全量测试:377 项全部通过。归档回归记录提交:eca6068。

补充回归记录:修正了测试构造数据与正式 `UpdateInfo` 字段不一致的问题(`f9c3016`)。随后执行 Client 全量测试:377 项全部通过。归档回归记录提交:`eca6068`。
Author
Owner

用户已于 2026-08-11 确认验收通过。

  • 本地归档状态已更新为“已完成”
  • 验收记录提交:cc595c1
  • 工单现关闭
用户已于 2026-08-11 确认验收通过。 - 本地归档状态已更新为“已完成” - 验收记录提交:`cc595c1` - 工单现关闭
ila closed this issue 2026-08-11 11:24:56 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#103