Client 设置页当前纵向占用较大:
目标是在不削弱标签、键盘访问、密码保护和更新线程边界的前提下,压缩设置页首屏高度,让“当前设备”和“软件更新”成为连续的常用配置区。
另外,Client 当前通常在操作员保存设备信息或开始领取任务时才登记到 Admin。若程序已经启动但尚未领取任务,Admin 可能仍显示离线。本工单增加启动登记:已有 Client 身份时,窗口启动后异步调用现有登记接口一次,刷新 Admin 的 last_seen_at,明确告诉 Admin 本 Client 已上线。
last_seen_at
用户明确要求修改项目红线:软件更新默认密码固定为 chengma,必须作为公开的引导默认值写入 Client 源码,并在首次打开设置页时填入密码框。该值不按生产秘密处理;密码框仍使用隐藏回显。用户保存后,密码继续写入 Windows 凭据管理器,不写入 SQLite 或日志。
chengma
docs/task
client/src/settings_ui.py
QHBoxLayout
QGridLayout
softwareUpdateCard
currentDeviceCard
DEFAULT_UPDATE_PASSWORD = "chengma"
updatePasswordInput
register_client
ClaimCapabilities
collect,purchase
purchase_mode=live
collect
purchase_mode=dry_run
QObject + moveToThread
client/src/update_ui_event.py
client/src/settings_ui_event.py
client/test/test_settings_ui_event.py
client/test/test_update_ui_event.py
docs/client/04-admin-api-contract.md
docs/client/05-ui-specification.md
docs/client/06-quality-security.md
purchase_mode
从 client/ 执行:
client/
C:/Python310/python.exe -m py_compile src/settings_ui.py src/update_ui_event.py $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m pytest test/test_settings_ui_event.py test/test_update_ui_event.py test/test_http_admin_gateway.py -q --disable-warnings C:/Python310/python.exe -m pytest test -q --disable-warnings C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM
人工界面验证:
项目红线已按用户明确授权更新:
规则提交:0b65de8。本次只更新规则和工单,尚未实施 #116 的界面与密码默认值代码。
0b65de8
范围扩展已确认:Client 启动且已有本地 Client ID 时,异步调用现有幂等登记接口一次,刷新 Admin last_seen_at 和最新能力,让 Admin 立即显示上线。该行为不新增接口、不建立心跳、不阻塞 Qt 主线程、不连接 Android,也不领取任务。当前仍只更新工单,尚未实施代码。
用户已确认新版字段布局与管理端地址配置方案,已拆为 #130 实施。#130 替代本工单中“当前设备、软件更新表单布局”的旧方案;本工单保留启动自动登记与默认更新密码等未实施范围,避免两个工单重复修改同一布局。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
Client 设置页当前纵向占用较大:
目标是在不削弱标签、键盘访问、密码保护和更新线程边界的前提下,压缩设置页首屏高度,让“当前设备”和“软件更新”成为连续的常用配置区。
另外,Client 当前通常在操作员保存设备信息或开始领取任务时才登记到 Admin。若程序已经启动但尚未领取任务,Admin 可能仍显示离线。本工单增加启动登记:已有 Client 身份时,窗口启动后异步调用现有登记接口一次,刷新 Admin 的
last_seen_at,明确告诉 Admin 本 Client 已上线。用户明确要求修改项目红线:软件更新默认密码固定为
chengma,必须作为公开的引导默认值写入 Client 源码,并在首次打开设置页时填入密码框。该值不按生产秘密处理;密码框仍使用隐藏回显。用户保存后,密码继续写入 Windows 凭据管理器,不写入 SQLite 或日志。做什么 / 不做什么
做
chengma填入密码框;已有凭据时不回填明文,继续显示“密码已安全保存;留空表示不修改”。不做
chengma必须进入 Client 源码、Git、#116 工单和对应基线/归档这一项明确例外外,其他密码仍不得进入源码、Git、SQLite、日志、异常信息、测试固件、Gitea 或docs/task。怎么做
布局
client/src/settings_ui.py中:QHBoxLayout/QGridLayout重排当前设备字段,不使用固定坐标;softwareUpdateCard的加入顺序调整到currentDeviceCard之后;更新密码默认值
DEFAULT_UPDATE_PASSWORD = "chengma",避免在多个界面或测试位置重复字面值。updatePasswordInput始终使用 Password 回显模式。启动时登记上线
register_clientGateway 调用和 Admin 登记路由,不新增“查询状态”或心跳接口。ClaimCapabilities:collect,purchase和purchase_mode=live;collect和purchase_mode=dry_run。QObject + moveToThreadWorker 执行,禁止阻塞 Qt 主线程。last_seen_at;登记失败只在设置页显示可恢复提示,不能阻止 Client 启动、打开页面或后续手动保存/领取重试。预计修改文件
client/src/settings_ui.pyclient/src/update_ui_event.pyclient/src/settings_ui_event.py或启动装配边界中的等价文件client/test/test_settings_ui_event.pyclient/test/test_update_ui_event.pydocs/client/04-admin-api-contract.mddocs/client/05-ui-specification.mddocs/client/06-quality-security.md验收标准
chengma,已有凭据时不回填���实密码。chengma这一明确例外外,其他密码仍不得进入源码、Git、工单或文档。last_seen_at被刷新并显示上线。purchase_mode与领取任务时的能力规则一致。怎么验证
从
client/执行:人工界面验证:
last_seen_at刷新为在线;关闭后不应继续发送心跳。风险和回退
项目红线已按用户明确授权更新:
chengma,必须以单一源码常量随 Git 管理;规则提交:
0b65de8。本次只更新规则和工单,尚未实施 #116 的界面与密码默认值代码。Client:压缩设置页设备与软件更新布局to Client:压缩设置页布局并在启动时登记上线范围扩展已确认:Client 启动且已有本地 Client ID 时,异步调用现有幂等登记接口一次,刷新 Admin
last_seen_at和最新能力,让 Admin 立即显示上线。该行为不新增接口、不建立心跳、不阻塞 Qt 主线程、不连接 Android,也不领取任务。当前仍只更新工单,尚未实施代码。用户已确认新版字段布局与管理端地址配置方案,已拆为 #130 实施。#130 替代本工单中“当前设备、软件更新表单布局”的旧方案;本工单保留启动自动登记与默认更新密码等未实施范围,避免两个工单重复修改同一布局。