Files
platforms/docs/操作日志_移动端错误提示中文化_20260902.md
2026-09-02 21:07:47 +08:00

73 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 移动端错误提示中文化操作日志
操作时间2026-09-02 20:56:00
操作类型:修改、扩展
影响模块:用户端 App、工作人员端 App、移动端需求文档
## 操作前状态
用户端和工作人员端的 HTTP 客户端会直接展示服务端 `message`。当接口返回 `Invalid Argument``Password Incorrect` 等 SDK 英文错误时,页面直接向用户暴露英文技术信息。登录页未在本地校验后端要求的纯 11 位中国大陆手机号,输入带 `+86` 的号码后只能得到服务端通用参数错误。
工作区原有 `apps/service_app/pubspec.lock` 修改,本次未覆盖或调整。
## 具体操作
1. 在两个 App 的 `ApiClient` 中增加稳定错误码到中文提示的统一映射,覆盖当前 BSM SDK 的请求、业务、令牌、基础设施和标准状态错误码。
2. 保留服务端返回的中文业务提示;无法识别的纯英文消息统一显示“操作失败,请稍后重试”。
3. 将网络连接异常和无效 JSON 响应转换为明确中文提示。
4. 在两个登录页提交前校验纯 11 位中国大陆手机号格式错误时在手机号输入框下显示“请输入正确的11位手机号”。按已确认方案不增加 `+86` 自动转换或兼容。
5. 登录接口返回密码错误码 `1108` 时统一提示“手机号或密码错误”,避免泄露账号是否存在。
6. 补充 Widget 与错误映射回归测试,并同步两类 App 的错误处理需求。
## 操作后状态
- `Invalid Argument` 不再直接显示;登录页会在请求前给出手机号中文格式提示。
- 两个 App 的已知接口错误按稳定错误码展示中文。
- 未知英文接口消息不再透传到界面。
- 后端路由、请求体、响应结构和错误码保持不变,公共接口兼容。
## 代码变更
- `apps/user_app/lib/data/services/api_client.dart`
- `localizeApiErrorMessage`:新增错误码中文映射和未知英文兜底。
- `ApiClient._sendRequest``ApiClient._decode`:统一处理网络异常、响应解析和中文错误。
- `apps/user_app/lib/ui/features/auth/login_page.dart`
- `_LoginPageState._login`:新增手机号校验和登录密码错误专用提示。
- 手机号输入框:新增字段级错误展示与输入后清除行为。
- `apps/service_app/lib/data/services/api_client.dart`
- 与用户端保持一致的错误码中文映射和请求异常处理。
- `apps/service_app/lib/ui/features/auth/login_page.dart`
- 与用户端保持一致的手机号校验和登录错误提示。
- `apps/user_app/test/ui/login_page_test.dart`
- 新增手机号格式错误和接口错误中文化测试。
- `apps/service_app/test/ui/login_page_test.dart`
- 新增手机号格式错误和接口错误中文化测试。
- `docs/03-用户端App需求.md``docs/04-服务端App需求.md`
- 补充移动端接口错误中文化和登录手机号校验要求。
## 行为变化
| 场景 | 修改前 | 修改后 |
| --- | --- | --- |
| 登录手机号带 `+86` | 服务端返回并展示 `Invalid Argument` | 输入框提示“请输入正确的11位手机号”不发起请求 |
| 密码错误 | 展示 `Password Incorrect` | 展示“手机号或密码错误” |
| 已知 SDK 接口错误 | 可能展示英文原文 | 按稳定错误码展示中文 |
| 未知纯英文错误 | 直接展示英文原文 | 展示“操作失败,请稍后重试” |
| 中文业务错误 | 直接展示中文原文 | 保持中文原文 |
## 验证结果
- `apps/user_app` 执行 `flutter analyze`:通过,无问题。
- `apps/user_app` 执行 `flutter test`4 个测试全部通过。
- `apps/service_app` 执行 `flutter analyze`:通过,无问题。
- `apps/service_app` 执行 `flutter test`5 个测试全部通过。
- 执行 `git diff --check`:未发现空白符错误;仅提示仓库现有的 LF/CRLF 转换规则。
- 边界测试覆盖:带 `+86` 的手机号、参数错误码、密码错误码、未知中文业务消息和未知英文消息。
## 风险评估
- 当前手机号规则与后端保持一致,仅接受纯 11 位号码;系统自动填充带 `+86` 时仍需用户手动修改,这是已确认的产品选择。
- 未知英文消息会被安全兜底文案替代,客户端界面不再包含原始诊断信息;排障应依赖稳定错误码和服务端日志。
- 两个 App 目前各自维护同一份映射;后端 SDK 新增错误码时需要同步补充两端映射及测试。
- 本次不修改认证逻辑、令牌、服务端错误码或数据库,影响仅限客户端输入校验和错误展示。