Files
cmroubao/docs/tasks/T-209.md
T

2.8 KiB
Raw Blame History

id, title, phase, deps, status, created, context_ref, work_branch, write_paths
id title phase deps status created context_ref work_branch write_paths
T-209 保留失败采购登录的已填写凭证 2
T-206
DONE 2026-07-27 d86a88e null
android-buyer/app/src/main/java/com/roubao/autopilot/MainActivity.kt
android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt
android-buyer/app/src/test/**
docs/tasks/T-209.md

问题 / 背景

采购任务登录页在点击“登录”后立即清空密码和设备密钥,不区分成功、网络失败、服务端 拒绝或本地校验失败。采购员无法直接更正一项输入后重试,尤其设备密钥较长时操作成本高。

已定合约

  1. 登录失败时,后台地址、账号、密码、设备 ID 和设备密钥都保留在当前登录页内存中。
  2. 密码和设备密钥仍不得写入普通 SharedPreferences、日志、错误消息或分析事件。
  3. 登录成功后才清理输入状态;成功会离开登录页,已加密保存的设备密钥维持现有行为。
  4. 重复点击受现有 busy 状态约束;本任务不改变账号鉴权、设备绑定、令牌或后端 API。

方案

让登录 UI 等待 Repository 的布尔结果,仅在成功时清空敏感输入。失败、超时和本地 校验错误保持 Compose 内存状态,不新增任何持久化字段。

验收要点

  • 服务端拒绝、网络失败和本地校验失败后,五个已填写字段可直接修改并重试。
  • 成功登录后不保留登录页敏感输入,设备密钥只进入既有加密存储。
  • 密码和设备密钥不进入日志、普通 Preferences 或错误文案。
  • Android 单元测试与 Debug 构建通过。

边界

  • 不增加“记住密码”、明文自动填充或密码找回。
  • 不改动 T-208 候选决策数据闭环。

执行记录

  • 2026-07-27:任务已登记,待实现。
  • 2026-07-27:登录 UI 改为等待 Repository 布尔结果;失败时保留 Compose 内存中的 后台地址、账号、密码、设备 ID 和设备密钥,成功才清理敏感输入。新增本地提交锁, 防止请求尚未开始时重复点击。
  • 2026-07-27:./gradlew.bat :app:compileDebugKotlin :app:testDebugUnitTest :app:assembleDebug 通过;最新 Debug APK 已安装并冷启动至 PKG110,无 crash/ANR。
  • 2026-07-27:首次修复后真机复测仍复现。根因是错误信息作为新的 LazyColumn 项插在 登录表单之前,无 key 的表单项位置变化后被 Compose 重新创建。登录项改用稳定 procurement-login key,并移除会在 profile 发布时重置字段的 remember key。
  • 2026-07-27:PKG110 真机以无效后台地址触发“后台地址必须包含主机”;错误显示后测试 的后台地址、账号和设备 ID 仍可见。强制重启 App 后测试值消失,确认表单只在内存中 保留,未持久化凭证。