hailin
fd04de8696
fix(mobile-app): 增加合同签署页面重试时间
...
KYC 成功后后端通过 Kafka 异步创建合同任务,可能需要较长时间。
将重试从 5 次/500ms 改为 15 次/2s,总等待时间最多 30 秒。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 07:33:04 -08:00
hailin
6b72831cd9
feat(mobile-app): KYC成功后自动跳转合同签署页面
...
从认种流程进入KYC时传递orderNo参数:
- 认种页面 -> KYC Entry -> KYC ID 传递 orderNo
- KYC成功后如果有orderNo则跳转合同签署
- 直接进入KYC(无orderNo)则正常返回
修改文件:
- app_router.dart: KYC路由支持orderNo参数
- kyc_entry_page.dart: 接收并传递orderNo
- kyc_id_page.dart: 成功后判断是否跳转合同签署
- planting_location_page.dart: 跳转KYC时传递orderNo
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 07:07:43 -08:00
hailin
8163804f23
fix(contract-signing): 修复合同签署流程的持仓更新时机
...
问题:支付后直接更新持仓和开启挖矿,导致款还在冻结中树就种下去了
修复:
- planting-application.service: 支付时不再更新持仓和开启挖矿
- contract-signing.service: signContract 在事务里同时完成合同+持仓+挖矿
- contract-signing.service: handleExpiredTasks 超时也更新持仓+挖矿(钱扣总部)
- KYCVerifiedEvent 添加 accountSequence 字段
- kyc-verified-event.consumer 直接用事件里的 accountSequence
流程变为:支付冻结 → 签署合同 → [事务: 合同+持仓+挖矿] → 发事件
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 06:50:03 -08:00
hailin
0e93d2a343
feat(contract): 使用合同编号代替订单号
...
合同编号格式: accountSequence-yyyyMMddHHmm
例如: 10001-202512251003
修改内容:
- 数据库: 添加 contract_no 字段
- 后端: 聚合根、Repository、Service、PDF生成器支持 contractNo
- 前端: 显示合同编号代替订单号
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 04:58:39 -08:00
hailin
9cf1bbbbd3
fix(mobile-app): 合同签署页面添加重试机制解决竞态问题
...
前端在支付完成后立即请求合同签署任务,但后端 Kafka 事件可能还未完成
任务创建。添加最多5次重试,使用指数退避策略(500ms * attempt)。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 04:01:25 -08:00
hailin
82ca233d54
fix(mobile-app): 签署成功后跳转到"我的"页面
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 03:55:23 -08:00
hailin
36e4e875bf
fix(mobile-app): 修复签署成功后导航报错问题
...
- 签署成功后检查 canPop() 再决定返回方式
- 如果没有上一页则跳转到首页
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 03:54:18 -08:00
hailin
2607907bad
fix(mobile-app): 修复合同签署页面问题
...
- 修复 markScrollComplete/acknowledgeContract API 响应处理
(后端返回 success:true 但无 data 时重新获取任务详情)
- 将合同签署页面的 USDT 改成绿积分
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 03:44:39 -08:00
hailin
299de2005a
fix(mobile-app): 修复待签署合同列表重复显示问题
...
之前同时调用 getPendingTasks 和 getUnsignedTasks 然后合并,
导致待签署的任务显示两次。现在只使用 getUnsignedTasks。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 03:07:24 -08:00
hailin
c509daa353
feat(contract-signing): 使用 pdf-lib 实现专业 PDF 合同展示
...
后端改动:
- 添加 pdf-lib 和 @pdf-lib/fontkit 依赖
- 新建 PdfGeneratorService 使用 PDF 模板直接填充用户数据
- 添加中文字体支持 (NotoSansSC-Regular.ttf)
- 新增 GET /tasks/:orderNo/pdf 接口返回 PDF 文件
- 合同模板存放于 templates/contract-template.pdf
前端改动:
- 添加 flutter_pdfview 依赖
- 重写合同签署页面使用 PDFView 组件展示 PDF
- 下载 PDF 到临时目录后展示
- 滑动到最后一页自动标记已阅读
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 02:27:54 -08:00
hailin
c826da164c
fix(mobile-app): 支付成功后跳转到合同签署页面
...
修改认种支付成功后的流程:
- 合同签署启用且已完成实名认证 → 跳转到合同签署页面
- 合同签署启用但未完成实名认证 → 弹窗提示去做实名认证
- 合同签署未启用 → 显示成功提示返回个人中心
符合设计流程: 支付(冻结) → 签合同 → 24小时内签署完成/超时取消
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 01:04:00 -08:00
hailin
0c6e73de85
fix(mobile-app): 修复实名认证响应解析层级错误
...
后端返回嵌套结构 { data: { data: {...} } },
前端需要双层解析才能获取实际数据
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 00:45:52 -08:00
hailin
181d11d656
feat(kyc): 升级实名认证为三要素验证(姓名+身份证号+手机号)
...
- 后端 aliyun-kyc.provider.ts: 改用 ID_CARD_THREE 类型,添加 PhoneNumber 参数
- 后端 kyc-application.service.ts: 从用户账户获取手机号传递给 KYC provider
- 前端 kyc_id_page.dart: 更新文案为"三要素验证"
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 23:54:13 -08:00
hailin
2edcfc3d0d
fix(kyc): 修复KYC状态接口响应解析错误
...
后端返回的数据结构是嵌套的 data.data,修复前端解析逻辑以正确读取 phoneVerified 等字段。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:40:51 -08:00
hailin
b10a158684
fix(kyc): 验证成功后刷新KYC状态
...
在跳转到实名认证页面前调用 ref.invalidate(kycStatusProvider)
确保手机号验证状态能正确更新
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:27:59 -08:00
hailin
1c62a8cb29
fix(kyc): 验证成功后点击完成跳转到实名认证页面
...
使用 context.go() 替代 context.pop(),直接跳转到实名认证页面
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:25:42 -08:00
hailin
a51fa39a2d
feat(kyc): 首次验证手机号成功后显示选择页面
...
- 添加 verifySuccess 步骤替代弹窗
- 显示"恭喜您!手机号已验证成功"
- 提供两个选择按钮:
- "仅验证手机号,不更换" - 返回上一页
- "继续更换手机号" - 进入输入新手机号步骤
- 已验证过的用户直接进入更换流程
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 22:23:13 -08:00
hailin
59e9cddf5b
feat(planting): 认种成功后检查实名认证状态
...
当CONTRACT_SIGNING_ENABLED=true时,认种成功后检查用户是否已完成实名认证:
- 如果未完成实名认证,显示提示弹窗引导用户去认证
- 如果已完成或功能未启用,按原有流程返回个人中心
新增:
- KycRequiredDialog 实名认证提示弹窗组件
- ContractSigningConfig 配置类和getConfig()方法
- kycServiceProvider 依赖注入
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 21:10:55 -08:00
hailin
bc34907a84
fix(auth): 注册验证码页面显示完整手机号
...
验证码页面不再隐藏手机号中间数字,改为完整显示
格式: 138 1234 5678
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 21:03:30 -08:00
hailin
1d6cbf9335
feat(kyc): 实名认证前检查手机号验证状态
...
- 点击实名认证时检查手机号是否已验证
- 未验证时显示提示弹窗,引导用户先验证手机号
- 实名认证卡片显示"请先验证手机号"提示
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 21:00:53 -08:00
hailin
a7dc85d8e1
fix(frontend): 添加 geolocator 依赖并移除未使用的 webview_flutter
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 20:45:51 -08:00
hailin
5b8c6bc317
feat(frontend): 添加电子合同签署功能前端实现
...
- 添加 ContractSigningService 合同签署 API 调用服务
- 添加 ContractCheckService App 启动时检查待签署合同
- 添加 ContractSigningPage 完整签署流程页面
- 24小时倒计时
- 滚动阅读 → 确认法律效力 → 手写签名
- 支持超时后补签
- 添加 PendingContractsPage 待签署合同列表
- 添加 SignaturePad 手写签名板组件
- HomeShellPage 启动时检查未签署合同,强制签署
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 20:15:13 -08:00
hailin
934323e4c6
feat(kyc): 优化手机号验证/更换流程
...
- 将入口重命名为"验证/更换手机号"
- 验证旧手机成功后更新 phoneVerified 状态
- 首次验证成功时显示恭喜弹窗,用户可选择完成或继续更换
- 已验证过的用户验证通过后直接进入下一步
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 07:50:54 -08:00
hailin
0a4ec49c8a
fix(kyc): 修复更换手机号页面发送验证码按钮可重复点击的问题
...
- 添加 _isSendingCode 状态检查,防止发送中重复点击
- 发送中显示 loading 指示器
- 倒计时期间和发送中均禁用按钮
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 07:38:26 -08:00
hailin
0f745a17fd
feat(kyc): 实现完整三层KYC认证功能
...
实现三层KYC认证系统,支持后台配置开关:
- 层级1: 实名认证 (二要素: 姓名+身份证号)
- 层级2: 实人认证 (人脸活体检测)
- 层级3: KYC (证件照上传验证)
后端变更:
- 更新 Schema 添加三层认证字段和 KycConfig 表
- 添加 migration 支持增量字段和配置表
- 重写 AliyunKycProvider 支持阿里云实人认证 API
- 重写 KycApplicationService 实现三层认证逻辑
- 更新 KycController 添加用户端和管理端 API
前端变更:
- 更新 KycService 支持三层认证 API
- 重构 KycEntryPage 显示三层认证状态
- 重构 KycIdPage 用于层级1实名认证
- 新增 KycFacePage 用于层级2人脸认证
- 新增 KycIdCardPage 用于层级3证件照上传
- 添加 uploadFile 方法到 ApiClient
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 07:14:11 -08:00
hailin
a549768de4
feat(kyc): 实现实名认证和更换手机号功能
...
主要变更:
- 注册流程: 添加跳过短信验证选项(3分钟后显示)
- KYC功能: 手机号验证 + 身份证实名认证(阿里云二要素)
- 更换手机号: 四步验证流程(旧手机验证→输入新号→新手机验证→确认)
- 独立管控: phoneVerified, emailVerified, kycStatus 三个状态分别管理
后端:
- 新增 KYC 控制器和服务
- 新增更换手机号 API 端点
- Schema 添加 KYC 和验证状态字段
- 集成阿里云身份二要素验证
前端:
- 新增 KYC 入口页、手机验证页、身份证验证页
- 新增更换手机号页面
- Profile 页面添加实名认证入口
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 06:38:39 -08:00
hailin
50bc5a5a20
fix(stickman): 使用顶部对齐实现昵称与数量标签的中心对齐
...
昵称标签和数量标签高度相同,顶部对齐即可实现水平中心对齐
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 04:06:33 -08:00
hailin
d4b802502e
fix: 修复验证码竞态条件和火柴人对齐问题
...
1. 修复验证码发送的竞态条件:
- 调整执行顺序,先存储验证码到 Redis,再发送短信/邮件
- 避免用户收到验证码后立即输入但 Redis 中尚未存储的情况
- 影响:sendSmsCode、sendWithdrawSmsCode、sendResetPasswordSmsCode、sendEmailCode
2. 修复火柴人组件昵称与数量标签对齐问题:
- 使用底部对齐 + Padding 让昵称标签与数量标签在同一水平线
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:54:25 -08:00
hailin
ee4cac59c7
fix(profile): 修复嵌套 Row 无界约束导致的白屏问题
...
在 _buildSettlementSection 的"已结算"区域,内层 Row 中使用了 Flexible,
但内层 Row 没有宽度约束,导致 RenderFlex unbounded width constraints 错误。
通过在内层 Row 外添加 Expanded 包裹来提供宽度约束。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:41:23 -08:00
hailin
1cd4b352a4
debug(mobile): 添加火柴人组件调试日志
...
- 记录宽度计算的各个参数
- 添加clamp保护防止负值宽度
- 打印排名数据详情
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:32:22 -08:00
hailin
ba3e96c606
fix(mobile): 修复SVG头像渲染导致的布局问题
...
- 使用RepaintBoundary隔离SVG渲染
- 添加placeholderBuilder防止加载时闪烁
- 确保SizedBox固定尺寸约束
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:26:24 -08:00
hailin
a38727eb7f
Revert "revert(profile): 回滚profile_page.dart到稳定版本"
...
This reverts commit b06f186836 .
2025-12-24 03:16:39 -08:00
hailin
b06f186836
revert(profile): 回滚profile_page.dart到稳定版本
...
修复SVG头像渲染导致的白屏问题
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:11:24 -08:00
hailin
e2872b13fb
revert(mobile): 回滚火柴人组件到稳定版本
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 03:00:52 -08:00
hailin
27bee6d7f1
fix(mobile): 修复火柴人组件布局错误,避免嵌套Stack
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 02:53:21 -08:00
hailin
0623169d19
fix(mobile): 修正火柴人进度计算,使用固定目标值
...
- 省公司: 目标固定5万,达到或超过5万停在红旗
- 市公司: 目标固定1万,达到或超过1万停在红旗
- 进度 = completedCount / targetCount,clamp到0-1
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 02:16:54 -08:00
hailin
7d1a392d9e
fix(mobile): 调整火柴人终点位置,停在红旗左边
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 02:14:27 -08:00
hailin
a823490c96
fix(mobile): 修正火柴人终点位置计算
...
- 起点: 70 (昵称区域右边)
- 终点: containerWidth - 92 (红旗左边 - 火柴人宽度)
- 100%时火柴人右边对齐红旗左边
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 02:12:36 -08:00
hailin
3e59d56f92
fix(mobile): 简化火柴人位置计算逻辑
...
使用简单直接的比例计算:
- 起点 = 昵称区域右边 (70px)
- 终点 = 红旗左边 (containerWidth - 62px)
- 火柴人位置 = 起点 + (终点 - 起点) * 进度
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:48:08 -08:00
hailin
71304dbb69
fix(mobile): 改进用户详情页风格和火柴人进度计算
...
- 用户详情页使用与"我的"页面一致的浅黄色渐变背景
- 移除深金棕色AppBar,改用简洁的顶部导航栏
- 火柴人进度使用后端返回的progressPercentage而非前端计算
- 添加finalTarget和progressPercentage字段到排名响应
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:41:41 -08:00
hailin
906279ee8a
fix(mobile): 修复用户详情页头像和用户ID显示问题
...
- 修复avatarUrl为SVG数据时的渲染问题,添加SVG检测逻辑
- 修复后端getUserInfoBySequence响应解析,处理包装格式
- 将用户详情弹窗改为全屏页面,提供更好的用户体验
- 新增统计数据卡片展示直推人数、伞下用户、认种数量
- 改进卡片样式,添加图标和阴影效果
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:28:28 -08:00
hailin
12c0c796f4
fix(mobile): 修正火柴人100%进度时到达红旗位置的计算
...
- 精确计算终点位置:火柴人列右边缘对齐红旗左边缘
- 起点从昵称标签右边4px间距开始
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:18:27 -08:00
hailin
c1c4a52ad3
fix(mobile): 优化火柴人动画布局避免标签重叠
...
- 昵称和数量标签顶部对齐在同一水平高度
- 添加4px最小间距防止起步阶段标签重叠
- 火柴人从昵称右边开始移动到红旗位置
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:09:27 -08:00
hailin
6745721399
fix: 修复火柴人排名点击查看用户详情功能
...
- 后端DTO添加accountSequence字段
- 后端服务返回accountSequence
- 前端映射accountSequence到StickmanRankingData
- 优化错误提示样式与页面风格一致
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:05:18 -08:00
hailin
f73e477041
fix(mobile-app): 待领取奖励卡片也去掉重复的权益类型前缀
...
与可结算卡片保持一致,只显示"来自用户xxx的认种"部分
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:02:38 -08:00
hailin
e8f65f3fcd
fix(mobile-app): 可结算奖励卡片去掉重复的权益类型前缀
...
memo 中已包含权益类型(如"分享权益:来自用户xxx的认种"),
卡片标题也显示了权益类型,所以只显示"来自用户xxx的认种"部分
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 01:01:19 -08:00
hailin
93f6a53bdb
feat(mobile): 优化火柴人赛跑组件布局
...
- 将昵称移到左侧固定位置,与右边红旗相呼应
- 保持数量标签在火柴人上方,间距2像素
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:37:42 -08:00
hailin
5ed1a0b143
feat(mobile): 优化火柴人赛跑组件布局
...
- 将昵称移到左侧固定位置,与右边红旗相呼应
- 缩小数量标签与动画之间的间距
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:28:01 -08:00
hailin
f0f4aa474a
feat(mobile-app): 可结算奖励卡片显示来源信息
...
在"我的"页面可结算板块中,每笔收益现在会显示来源信息(通过 memo 字段)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:21:58 -08:00
hailin
27a4bbfbef
feat(authorization): 实现火柴人排名用户详情查看功能
...
后端:
- identity-service: 新增内部API获取用户详情(手机号、邮箱、KYC等)
- referral-service: 新增内部API获取用户团队统计(直推人数、伞下用户数、认种数量)
- authorization-service:
- 新增用户公开资料和私密资料API
- 聚合identity-service和referral-service数据
- 省团队以上权限可查看私密信息(脱敏处理)
前端:
- 新增UserProfileDialog弹窗组件,支持查看用户详情
- stickman_race_widget: 排名列表项可点击查看用户详情
- authorization_service: 新增getUserProfile/getUserPrivateProfile方法
用户详情包括:
- 基本信息: 用户ID、昵称、头像、注册时间、所在地区
- 团队数据: 推荐人、直推人数、伞下用户数、个人/团队认种数
- 授权信息: 授权类型、权益激活状态
- 联系信息(特权用户可见): 手机号、邮箱、真实姓名(脱敏)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 22:42:19 -08:00
hailin
4e670ad774
fix(wallet): 隐藏临时流水记录并统一充值名称显示
...
- 在流水明细查询中排除冻结/解冻等临时记录
- 将"充值 (KAVA)"统一改为"充值"
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 21:00:31 -08:00
hailin
a38aac5581
feat(email): 实现邮箱绑定/解绑功能
...
后端:
- 新增 EmailService 邮件发送服务,支持 Gmail SMTP
- 新增 EmailCode 数据模型用于存储邮箱验证码
- UserAccount 添加 email 字段
- 新增 API 接口:
- GET /user/email-status 获取邮箱绑定状态
- POST /user/send-email-code 发送邮箱验证码
- POST /user/bind-email 绑定邮箱
- POST /user/unbind-email 解绑邮箱
- 新增 DTOs: SendEmailCodeDto, BindEmailDto, UnbindEmailDto
- 新增 Commands: SendEmailCodeCommand, BindEmailCommand, UnbindEmailCommand
前端:
- account_service 新增邮箱相关方法和 EmailStatus 类
- bind_email_page 更新为使用真实 API:
- 绑定/更换邮箱功能
- 独立的解绑验证码输入和倒计时
- 解绑确认对话框
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 20:53:20 -08:00
hailin
69fa43ebee
feat(auth): 实现修改密码API和Token过期自动跳转登录
...
后端:
- 新增 ChangePasswordCommand 和 ChangePasswordDto
- 新增 POST /user/change-password 接口
- 实现 changePassword() 方法,验证旧密码后更新新密码
前端:
- 新增 AuthEventService 认证事件服务,处理 token 过期事件
- api_client 在 token 刷新失败时发送过期事件
- App 监听认证事件,token 过期时清除账号状态并跳转登录页
- splash_page 优化路由逻辑:退出登录后跳转手机登录页而非向导页
- change_password_page 调用真实 API 修改密码
- account_service 新增 changePassword() 方法
- multi_account_service 退出登录时清除 phoneNumber 和 isPasswordSet
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 20:25:56 -08:00
hailin
19bd804a21
feat(frontend): 前端时间显示统一转换为本地时间
...
- mobile-app: 新增 DateTimeUtils 工具类处理 UTC -> 本地时间转换
- mobile-app: 修改 ledger_detail_page 和 profile_page 使用本地时间
- admin-web: 添加 dayjs 自动转换注释说明
- mobile-upgrade: 优化 toLocaleString 格式化选项
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 19:45:51 -08:00
hailin
6f8eaa8e92
fix(mobile-app): 优化数字显示组件防止自动换行
...
使用 FittedBox(fit: BoxFit.scaleDown) 包装所有可变数字显示组件,
确保当数字位数多时自动缩小字号而不是换行,提升用户视觉体验。
优化的页面和组件:
- stickman_race_widget: 火柴人标签、排名列表数量、进度百分比
- team_tree_widget: 节点认种数、省略节点数量、详情弹窗
- ranking_page: 龙虎榜团队认种量
- trading_page: DST余额、绿积分余额
- profile_page: 各类收益金额、奖励项金额
- withdraw_usdt_page: 提款页余额
- deposit_usdt_page: 充值页余额
- ledger_detail_page: 净收益、收支概览、流水金额
- authorization_apply_page: 累计认种数
- planting_quantity_page: 可用余额
- mining_page: 用户序列号
- account_switch_page: 账号用户名、序列号
- wallet_created_page: 钱包地址信息
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 18:33:51 -08:00
hailin
085cb3f40b
fix(mobile-app): 排名详情本月收益单位从 USDT 改为绿积分
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 05:35:22 -08:00
hailin
b052afa065
feat(mobile-app): 使用 Lottie 动画替换火柴人 CustomPaint 实现
...
- 用 Lottie.asset 加载 stickman_runner.json 替换手动绘制的火柴人
- 使用 ColorFiltered 保持颜色自定义功能(当前用户金色,其他用户棕色)
- 修复火柴人到达100%时无法到达红旗位置的问题
- 代码从约200行精简到约30行,动画效果更流畅
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 04:34:15 -08:00
hailin
0a64024773
fix(mobile-app): 为每个火柴人跑道添加独立终点旗帜
...
- 移除单一的共享终点旗帜
- 为每个跑道生成独立的红旗,与火柴人垂直位置对齐
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 03:29:11 -08:00
hailin
63cf52b9c1
fix(mobile-app): 修复火柴人容器宽度与其他组件不一致
...
- 移除火柴人容器的水平margin,与页面其他内容保持一致
- 重新计算火柴人位置,正确处理容器边距
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 03:27:43 -08:00
hailin
fd9df5d065
fix(mobile-app): 修复火柴人超出屏幕边界问题
...
- 重新计算火柴人水平位置,预留终点区域和火柴人宽度
- 使用 clamp 确保火柴人不会超出右边界
- 当进度达到100%时,火柴人停在终点红旗旁边
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 03:25:33 -08:00
hailin
5fa195e4bc
fix: 修复火柴人排名显示问题
...
1. identity-service: 添加批量获取用户信息内部接口
- 新增 InternalController 提供 POST /internal/users/batch
- repository 添加 findByUserIds 批量查询方法
2. authorization-service: 修复 cumulativeCompleted=0 问题
- assessAndRankRegion 改用 findByAccountSequence 查询团队统计
- referral-service 使用 accountSequence 作为主键
3. mobile-app: 修复火柴人UI显示问题
- 容器边距调整为16px与其他组件一致
- 行高增加到100px避免火柴人重叠
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:48:16 -08:00
hailin
e275724359
feat(mobile-app): 使用 CustomPaint 绘制跑步火柴人动画
...
替换 Lottie 动画为自定义绘制的跑步火柴人:
- 使用 CustomPaint 绘制火柴人形状
- 添加腿部和手臂摆动动画
- 添加速度线效果
- 当前用户显示金色,其他用户显示棕色
- 移除 lottie 依赖
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:13:03 -08:00
hailin
770bcb85a2
fix(mobile-app): 修复火柴人组件宽度和行间隔问题
...
1. 将水平边距从16改为20,与其他组件一致
2. 根据火柴人数量动态计算赛道高度,每个火柴人85px
3. 避免火柴人数量标签覆盖到其他火柴人
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:10:38 -08:00
hailin
2d3891740c
feat(authorization): 火柴人排名改为全系统排名,不按区域过滤
...
- 后端新增 findRankingsByMonthAndRoleType 方法查询全系统排名
- 修改 getStickmanRanking 不再按 regionCode 过滤
- 前端简化加载条件,只要有授权就加载排名
- 添加详细调试日志帮助排查问题
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:20:35 -08:00
hailin
f91aeb7d92
fix(mobile-app): 调整账本明细流水类型筛选顺序和标签
...
- REWARD_SETTLED 标签从"提取"改为"结算"
- 调整筛选选项顺序:转入/转出放到全部后面,充值绿积分放到最后
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 23:39:45 -08:00
hailin
428ac91737
feat(authorization): 优化市/省团队自助申请逻辑
...
- 团队链区域唯一性:同一直推链上只阻止申请已被占用的城市/省份,非全部阻止
- 市/省团队互斥:同一用户只能拥有市团队或省团队之一
- 前端优化:显示已占用区域数量提示,选择时验证区域可用性
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 22:52:39 -08:00
hailin
30f3487bd3
fix(mobile-app): 点击"全部"时扣除手续费计算最大可转金额
...
- FeeConfig 新增 calculateMaxAmount 方法计算扣除手续费后的最大金额
- 修改提取页面 _setMaxAmount,点击"全部"时显示扣费后金额
- 固定费率:maxAmount = balance - fixedFee
- 百分比费率:maxAmount = balance / (1 + rate)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 22:36:20 -08:00
hailin
3f5203c142
feat: 已认种用户分享权益直接进入可结算状态
...
- 新增 hasPlanted 字段标记用户是否已认种
- 已认种用户的分享权益直接进入可结算余额,无需待领取
- 修正前端权益考核数值(576/288/252/144/108 绿积分)
- 修复账本明细筛选栏选择后滚动位置重置问题
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 21:10:49 -08:00
hailin
723d70e4b8
fix(mobile-app): 修复账本明细筛选栏滚动重置问题
...
使用 ScrollController 保持筛选栏滚动位置
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 20:21:31 -08:00
hailin
c91bfa4952
fix(mobile-app): 修正认种价格为15831 USDT/棵
...
与后台 planting-service 保持一致
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 20:15:49 -08:00
hailin
87b23ee2de
fix(mobile-app): 修复提款页面 _feeRate 未定义错误
...
将 _feeRate 改为 _feeConfig?.feeValue ?? 0.02,
使用 FeeConfig 对象中的 feeValue 字段。
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 19:19:05 -08:00
hailin
cb0f10af34
feat: 多项业务功能增强
...
- 动态提取手续费配置:支持固定/百分比两种费率类型,默认2绿积分/笔
- 找回密码功能:新增手机号+短信验证码重置密码流程
- 授权申请优化:自助申请时验证团队链授权状态
- UI文案调整:登录账号、监控页待开启等
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 19:00:02 -08:00
hailin
06df38b918
fix(mobile-app): 隐藏提取页面的网络选择功能
...
- 提取绿积分页面隐藏"选择网络"组件
- 确认提取页面隐藏"提取网络"显示行
- 保留原有网络功能逻辑不变
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 17:32:58 -08:00
hailin
857beeb196
fix(mobile-app): 修复 CityPickers locationCode 类型错误
...
添加空字符串默认值,确保 locationCode 参数类型为 String
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 06:58:00 -08:00
hailin
da69ecec44
fix(mobile-app): 移除自助申请页面中的'后台手动授权'说明
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 06:42:34 -08:00
hailin
ddeb3f227a
fix(mobile-app): 社区权益考核仅在有社区授权时显示
...
用户需要先通过自助申请获得社区授权,才会在'我的'页面显示社区权益考核
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 06:38:21 -08:00
hailin
3f34b11181
feat(mobile-app): 授权申请弹窗支持省市选择器
...
- 市团队和省团队申请弹窗使用 city_pickers 选择省市
- 默认选中本地存储的省市(来自认种时的选择)
- 允许用户重新选择省市
- 社区申请保持只输入社区名称(无省市选择)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 06:34:44 -08:00
hailin
4daee6a650
feat(mobile-app): 自助申请授权添加确认弹窗和省市参数传递
...
- 从本地存储加载认种时保存的省市信息
- 市团队申请时显示城市确认弹窗
- 省团队申请时显示省份确认弹窗
- 社区申请时显示社区名称输入弹窗
- 提交时传递对应的省市/社区参数
- 更新申请说明文字为'立即生效'
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 06:29:01 -08:00
hailin
9bc7bb1200
fix(withdraw): 修复提取功能短信验证和手续费计算
...
- 修复 wallet-service 调用 identity-service 的 API 路径(添加 /user 前缀)
- 修复 identity-client 默认端口从 3001 改为 3000
- 添加 docker-compose 中 IDENTITY_SERVICE_URL 环境变量配置
- 手续费改为按 0.1% 费率动态计算(前后端统一)
- 最小提取金额从 10 改为 100
- 文案修改:Kava EVM 网络 → Kava安全网络,接收地址 → 接收账号
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 03:14:22 -08:00
hailin
be09a8beac
fix(mobile-app): 添加缺失的 authProvider 导入
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:17:01 -08:00
hailin
bd320f1fbf
fix(mobile-app): 显示'创建账号审核中...'而不是'钱包生成中...'
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:10:41 -08:00
hailin
7e1f9e952b
fix(mobile-app): 正确的钱包状态检查逻辑
...
逻辑:
1. 先检查本地标志 isWalletReady
2. 如果已 ready,直接显示序列号
3. 如果不 ready,调用 API 检查钱包状态
4. API 返回 ready 后,设置本地标志并刷新 UI
5. API 返回未 ready,启动轮询直到成功
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:08:15 -08:00
hailin
fefaeb29d6
fix(mobile-app): 不依赖本地状态,直接显示序列号
...
问题:用户有序列号但 isAccountCreated 为 false 时显示"审核中"
修复:
1. _buildSerialNumberOrStatus(): 只要有有效序列号就直接显示
2. _checkAndStartWalletPolling(): 只要有序列号就调用 API 检查钱包状态
3. 不再依赖本地的 isAccountCreated/isWalletReady 状态
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:05:27 -08:00
hailin
8fa975a19e
fix(mobile-app): 自动修复 isAccountCreated 状态
...
问题:已注册用户重新安装 App 后,isAccountCreated 可能为 false,
导致"我的"页面显示"创建账号审核中..."
修复:
1. checkAuthStatus() 中检测到有 token 和 userSerialNum 但
isAccountCreated 为 false 时,自动修复为 true
2. 添加 loadAuthState() 方法(checkAuthStatus 的别名)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 02:03:34 -08:00
hailin
836bfe7f36
fix(mobile-app): 修复注册后"审核中"状态不更新的问题
...
问题:用户手机号注册成功后,"我的"页面仍显示"创建账号审核中..."
原因:
- set_password_page 注册成功后直接跳转,没有刷新 AuthProvider 状态
- ProfilePage.dispose() 中使用 ref.read() 导致 widget disposed 后报错
修复:
1. set_password_page: 跳转前调用 loadAuthState() 刷新状态
2. profile_page: dispose() 中用 try-catch 包裹 ref.read()
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 01:59:58 -08:00
hailin
6a2e0bf4f1
fix: 添加钱包状态检查日志用于调试
...
在 _checkAndStartWalletPolling() 中添加详细日志:
- 打印 isWalletReady, isAccountCreated, _serialNumber 的值
- 打印条件不满足时的原因
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:48:36 -08:00
hailin
be505d1070
fix: change USDT to CNY in authorization apply page
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 22:09:39 -08:00
hailin
ecf3755227
feat: integrate real API for authorization apply page
...
Changes:
- Add generic image upload API endpoint (POST /user/upload-image)
- Add uploadImage method in StorageService for backend
- Add uploadImage method in AccountService for frontend
- Add selfApplyStatus and selfApplyAuthorization methods in AuthorizationService
- Replace mock data with real API calls in authorization apply page
- Add API endpoints for self-apply status and self-apply authorization
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 22:01:28 -08:00
hailin
93b623398e
fix: add missing StorageKeys import in profile_page.dart
...
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 21:38:29 -08:00
hailin
c0657f88b9
fix: 我的页面进入时直接检查钱包状态并更新UI
...
- 页面初始化时调用API检查钱包状态,不再只依赖60秒轮询
- 钱包就绪后刷新authProvider和触发UI重建
- 确保与监控页面状态同步
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 21:31:02 -08:00
hailin
188075b2be
fix: 短信超时返回成功状态避免前端报错
...
超时情况下短信可能已发送成功,返回 success: true + uncertain: true
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 20:55:31 -08:00
hailin
2897a0c74c
feat: 添加 register-by-phone API 实现手机号一步注册
...
- 后端: 添加 POST /user/register-by-phone 接口
- 验证短信验证码、创建账户、绑定手机号、设置密码、触发钱包生成
- 添加 RegisterByPhoneCommand 和 RegisterByPhoneDto
- 前端: 修改注册流程使用新 API
- SmsVerifyPage 直接跳转到密码页面传递验证码
- SetPasswordPage 调用 registerByPhoneWithPassword 一步完成
- AccountService 添加 registerByPhoneWithPassword 方法
修复手机号注册流程中手机号和密码未正确保存的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 20:19:46 -08:00
hailin
10b25e222e
fix: 防止钱包生成中状态下重复触发MPC keygen
...
问题:
- 前端在钱包状态为"generating"时仍然调用retryWalletGeneration
- 后端identity-service没有检查生成中状态
- mpc-service没有幂等保护,可能导致同一用户多次keygen
修复:
1. 前端 wallet_status_provider.dart:
- 只在"failed"状态下才触发重试
- "generating"状态只更新UI,继续轮询等待
2. 后端 identity-service user-application.service.ts:
- retryWalletGeneration添加Redis状态检查
- pending/generating/deriving状态下跳过重试
- 只有failed或无状态时才触发重试
3. 后端 mpc-service keygen-requested.handler.ts:
- 使用分布式锁防止同一用户重复keygen
- 锁TTL为5分钟,覆盖整个keygen过程
- 无法获取锁时跳过请求
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:55:51 -08:00
hailin
5b731498de
feat: 充值页面添加长按二维码10秒切换到真实钱包地址模式
...
- 长按二维码超过10秒可切换到显示真实KAVA钱包地址
- 切换后显示完整区块链地址和对应二维码
- 页面退出后自动恢复到充值ID模式
- 隐藏功能,不影响普通用户使用
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:46:35 -08:00
hailin
54a225ebf2
feat: 充值/提现页面添加钱包状态检查,优化钱包状态轮询逻辑
...
- 充值页面: 先检查钱包状态,未就绪时显示"账号审核中..."
- 提现页面: 先检查钱包状态,未就绪时显示"账号审核中..."
- 监控页面: 先从本地存储读取钱包状态,已就绪则跳过轮询
- wallet_status_provider: 先检查本地存储,避免不必要的API调用
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:36:44 -08:00
hailin
3e352dbcfe
refactor: 钱包状态轮询自动重试,移除手动重试按钮
...
设计原则:只要钱包不是 ready 状态,就持续轮询并自动重试生成
- 移除 failed 状态和重试按钮(用户无需手动操作)
- 非 ready 时自动调用 retryWalletGeneration API(幂等)
- 轮询间隔改为60秒(API 1-10分钟幂等)
- 只有 ready 时停止轮询
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:20:10 -08:00
hailin
ffd4fae0b6
fix: 只有钱包ready时才显示序列号
...
- mining_page: unknown状态也显示"创建账号审核中..."
- profile_page: 默认分支改为显示"创建账号审核中..."
- 符合设计:只要不成功就持续轮询重试
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:15:15 -08:00
hailin
b49c9e1af5
fix: 通过移除内边距解决验证码数字显示不全问题
...
- 添加 contentPadding: EdgeInsets.zero 移除默认内边距
- 添加 isDense: true 使用紧凑模式
- 移除之前错误的 showCursor 逻辑
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:59:21 -08:00
hailin
979780dd7e
fix: 优化验证码输入框光标显示逻辑
...
- 空输入框时显示光标,让用户知道当前输入位置
- 输入数字后隐藏光标,避免光标占用空间导致数字显示不全
- 每次输入触发setState确保showCursor状态正确更新
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:57:15 -08:00
hailin
c1b8a441b6
fix: 隐藏验证码输入框光标解决数字显示不全
...
- 添加 showCursor: false 隐藏光标
- 光标移走后数字不再被遮挡偏移
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:54:37 -08:00