feat: 在发送短信前验证推荐码 & 修复按钮响应

前端改进:
- 在发送短信验证码之前验证推荐码是否有效
- 新增 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 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-20 22:59:29 -08:00
parent 00996bf160
commit 8519b9e608
2 changed files with 38 additions and 5 deletions

View File

@ -1411,6 +1411,31 @@ class AccountService {
}
}
///
///
/// [referralCode] -
///
Future<Map<String, dynamic>> 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<String, dynamic>;
return responseData['data'] as Map<String, dynamic>? ?? 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] - 111

View File

@ -76,12 +76,12 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
}
void _onPhoneChanged() {
//
if (_errorMessage != null) {
setState(() {
//
setState(() {
if (_errorMessage != null) {
_errorMessage = null;
});
}
}
});
}
///
@ -111,6 +111,14 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
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);