diff --git a/docs/task/6-为当前设备增加保存与设备号生成.md b/docs/task/6-为当前设备增加保存与设备号生成.md new file mode 100644 index 0000000..b6740e0 --- /dev/null +++ b/docs/task/6-为当前设备增加保存与设备号生成.md @@ -0,0 +1,68 @@ +# 6 为当前设备增加保存与设备号生成 + +- 类型:需求 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 / MVP +- 状态:已完成 +- 日期:2026-08-06 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/6 + +## 背景与目标 + +设置页的“当前设备”组原来只有设备号和设备名,没有独立保存按钮。此次增加当前设备保存入口,并在首次保存时生成设备号;已有设备号不会被重新生成。 + +## 最终方案 + +- 在“当前设备”组右下方增加独立的 Fluent 保存按钮。 +- 事件层新增 `currentDeviceSaveRequested(device_id, device_name)`,不与 Android 设备保存信号混用。 +- 设备号为空或为“待生成”时,组合本机系统名称、主机名称、机器架构和硬件节点信息,再用 SHA-256 生成 `CLIENT-<16位十六进制>`。 +- 只显示摘要后的设备号,不显示原始系统或硬件信息。 +- 已有设备号时直接复用;设备名去除首尾空格后随信号发出。 +- 忙碌状态下禁用当前设备保存按钮。 + +本任务只增加 UI 与事件接口,不接入 SQLite。后续持久化服务接收保存信号并落库。 + +这是已确认设置页的小型局部调整,没有制作 HTML 原型。 + +## 改了哪些 + +- `client/src/settings_ui.py`:增加当前设备保存按钮并放入当前设备卡片。 +- `client/src/settings_ui_event.py`:增加设备号生成函数、当前设备保存信号和按钮事件。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 当前设备组显示独立保存按钮 | 通过 | +| 首次保存生成并回填格式正确的设备号 | 通过 | +| 重复保存时设备号保持不变 | 通过 | +| 已有设备号不会被重新生成 | 通过 | +| 保存信号包含设备号和去除首尾空格后的设备名 | 通过 | +| 当前设备保存与 Android 设备保存使用不同按钮和信号 | 通过 | +| 忙碌状态下当前设备保存按钮不可用 | 通过 | +| 语法检查和主窗口离屏装配通过 | 通过 | + +## 测试 + +- 执行的命令: + + ```powershell + C:/Python310/python.exe -m py_compile src/settings_ui.py src/settings_ui_event.py + ``` + + ```powershell + $env:QT_QPA_PLATFORM="offscreen" + # 创建 SettingsPage,验证首次生成、重复保存、已有设备号、信号隔离和忙碌状态。 + # 创建 MainWindow,验证当前设备保存按钮装配。 + ``` + +- 结果:语法检查和 `git diff --check` 通过;事件测试输出 `CURRENT_DEVICE_SAVE_OK`;主窗口测试输出 `MAIN_WINDOW_CURRENT_DEVICE_SAVE_OK`。 +- **没验证到的部分**:没有接入 SQLite,因此没有验证重启后的设备号读取和设备名持久化;没有人工验证 200% 缩放、高对比度和 Narrator。离屏环境的既有 PyQt5 字体目录警告不影响断言。 + +## 遗留问题 + +- 后续 SQLite 工单负责接收当前设备保存信号、写入本地设置并在启动时回填页面。 + +## 相关提交 + +- `ed66390` 增加当前设备保存与设备号生成