完善移动端错误提示中文化
This commit is contained in:
72
docs/操作日志_移动端错误提示中文化_20260902.md
Normal file
72
docs/操作日志_移动端错误提示中文化_20260902.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# 移动端错误提示中文化操作日志
|
||||
|
||||
操作时间: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 新增错误码时需要同步补充两端映射及测试。
|
||||
- 本次不修改认证逻辑、令牌、服务端错误码或数据库,影响仅限客户端输入校验和错误展示。
|
||||
Reference in New Issue
Block a user