diff --git a/lib/core/network/api_exception.dart b/lib/core/network/api_exception.dart index 3e3604e..de6fe78 100644 --- a/lib/core/network/api_exception.dart +++ b/lib/core/network/api_exception.dart @@ -19,6 +19,9 @@ abstract final class ApiCodes { /// 手机号重复。 static const phoneTaken = 40901; + + /// 登录失败次数过多,账号临时锁定(HTTP 423,见 openapi.yaml)。 + static const loginLocked = 42300; } /// API 调用的类型化异常。页面按类型映射为三层错误呈现 diff --git a/lib/features/auth/login_page.dart b/lib/features/auth/login_page.dart index a1b89e3..cb1e623 100644 --- a/lib/features/auth/login_page.dart +++ b/lib/features/auth/login_page.dart @@ -110,9 +110,11 @@ class _LoginPageState extends State { // 认证状态机随 saveSession 切换,根路由 300ms fade 进主壳。 } on ApiBusinessException catch (error) { if (!mounted) return; - _showFormError( - error.code == ApiCodes.badCredentials ? '用户名或密码错误' : '登录失败,请稍后重试', - ); + _showFormError(switch (error.code) { + ApiCodes.badCredentials => '用户名或密码错误', + ApiCodes.loginLocked => '尝试次数过多,账号已临时锁定,请稍后再试', + _ => '登录失败,请稍后重试', + }); } on ApiRateLimitException { if (!mounted) return; _showFormError('尝试次数过多,请稍后再试');