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

4.5 KiB
Raw Permalink Blame History

移动端错误提示中文化操作日志

操作时间2026-09-02 20:56:00 操作类型:修改、扩展 影响模块:用户端 App、工作人员端 App、移动端需求文档

操作前状态

用户端和工作人员端的 HTTP 客户端会直接展示服务端 message。当接口返回 Invalid ArgumentPassword 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._sendRequestApiClient._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需求.mddocs/04-服务端App需求.md
    • 补充移动端接口错误中文化和登录手机号校验要求。

行为变化

场景 修改前 修改后
登录手机号带 +86 服务端返回并展示 Invalid Argument 输入框提示“请输入正确的11位手机号”不发起请求
密码错误 展示 Password Incorrect 展示“手机号或密码错误”
已知 SDK 接口错误 可能展示英文原文 按稳定错误码展示中文
未知纯英文错误 直接展示英文原文 展示“操作失败,请稍后重试”
中文业务错误 直接展示中文原文 保持中文原文

验证结果

  • apps/user_app 执行 flutter analyze:通过,无问题。
  • apps/user_app 执行 flutter test4 个测试全部通过。
  • apps/service_app 执行 flutter analyze:通过,无问题。
  • apps/service_app 执行 flutter test5 个测试全部通过。
  • 执行 git diff --check:未发现空白符错误;仅提示仓库现有的 LF/CRLF 转换规则。
  • 边界测试覆盖:带 +86 的手机号、参数错误码、密码错误码、未知中文业务消息和未知英文消息。

风险评估

  • 当前手机号规则与后端保持一致,仅接受纯 11 位号码;系统自动填充带 +86 时仍需用户手动修改,这是已确认的产品选择。
  • 未知英文消息会被安全兜底文案替代,客户端界面不再包含原始诊断信息;排障应依赖稳定错误码和服务端日志。
  • 两个 App 目前各自维护同一份映射;后端 SDK 新增错误码时需要同步补充两端映射及测试。
  • 本次不修改认证逻辑、令牌、服务端错误码或数据库,影响仅限客户端输入校验和错误展示。