From 8519b9e60893b1a91a696e82d546c9d7e789256c Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 20 Dec 2025 22:59:29 -0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=E5=8F=91=E9=80=81=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E5=89=8D=E9=AA=8C=E8=AF=81=E6=8E=A8=E8=8D=90=E7=A0=81?= =?UTF-8?q?=20&=20=E4=BF=AE=E5=A4=8D=E6=8C=89=E9=92=AE=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端改进: - 在发送短信验证码之前验证推荐码是否有效 - 新增 verifyReferralCode() 方法到 AccountService - 调用后端 GET /user/by-referral-code/:code API - 手机号输入时立即更新按钮状态(更及时的用户反馈) 流程优化: - 推荐码验证提前到短信发送前,避免用户输入验证码后才发现推荐码无效 - 按钮在手机号输入时即时响应,无需额外点击或失焦 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .../lib/core/services/account_service.dart | 25 +++++++++++++++++++ .../pages/phone_register_page.dart | 18 +++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/frontend/mobile-app/lib/core/services/account_service.dart b/frontend/mobile-app/lib/core/services/account_service.dart index 56ab0cab..1aa382f4 100644 --- a/frontend/mobile-app/lib/core/services/account_service.dart +++ b/frontend/mobile-app/lib/core/services/account_service.dart @@ -1411,6 +1411,31 @@ class AccountService { } } + /// 验证推荐码是否存在 + /// + /// [referralCode] - 推荐码 + /// 返回用户信息(如果存在),否则抛出异常 + Future> verifyReferralCode(String referralCode) async { + debugPrint('$_tag verifyReferralCode() - 验证推荐码: $referralCode'); + + try { + final response = await _apiClient.get( + '/user/by-referral-code/$referralCode', + ); + debugPrint('$_tag verifyReferralCode() - 推荐码有效'); + + final responseData = response.data as Map; + return responseData['data'] as Map? ?? responseData; + } on ApiException catch (e) { + debugPrint('$_tag verifyReferralCode() - 推荐码无效: $e'); + throw ApiException('推荐码不存在或无效'); + } catch (e, stackTrace) { + debugPrint('$_tag verifyReferralCode() - 未知异常: $e'); + debugPrint('$_tag verifyReferralCode() - 堆栈: $stackTrace'); + throw ApiException('推荐码验证失败: $e'); + } + } + /// 发送短信验证码 /// /// [phoneNumber] - 手机号(中国大陆格式:1开头,11位) diff --git a/frontend/mobile-app/lib/features/auth/presentation/pages/phone_register_page.dart b/frontend/mobile-app/lib/features/auth/presentation/pages/phone_register_page.dart index e76c0422..f1d25ec3 100644 --- a/frontend/mobile-app/lib/features/auth/presentation/pages/phone_register_page.dart +++ b/frontend/mobile-app/lib/features/auth/presentation/pages/phone_register_page.dart @@ -76,12 +76,12 @@ class _PhoneRegisterPageState extends ConsumerState { } void _onPhoneChanged() { - // 清除错误信息 - if (_errorMessage != null) { - setState(() { + // 手机号变化时更新按钮状态 + setState(() { + if (_errorMessage != null) { _errorMessage = null; - }); - } + } + }); } /// 验证手机号格式 @@ -111,6 +111,14 @@ class _PhoneRegisterPageState extends ConsumerState { try { final accountService = ref.read(accountServiceProvider); + // 验证推荐码(如果有) + if (widget.inviterReferralCode != null && + widget.inviterReferralCode!.isNotEmpty) { + debugPrint('[PhoneRegisterPage] 验证推荐码: ${widget.inviterReferralCode}'); + await accountService.verifyReferralCode(widget.inviterReferralCode!); + debugPrint('[PhoneRegisterPage] 推荐码验证通过'); + } + // 发送验证码 debugPrint('[PhoneRegisterPage] 发送验证码...'); await accountService.sendSmsCode(phone, SmsCodeType.register);