diff --git a/docs/tasks/T-209.md b/docs/tasks/T-209.md new file mode 100644 index 0000000..86c7fae --- /dev/null +++ b/docs/tasks/T-209.md @@ -0,0 +1,49 @@ +--- +id: T-209 +title: 保留失败采购登录的已填写凭证 +phase: 2 +deps: + - T-206 +status: TODO +created: 2026-07-27 +context_ref: d86a88e +work_branch: null +write_paths: + - 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:任务已登记,待实现。