Commit Graph

74 Commits

Author SHA1 Message Date
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 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 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 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 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 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 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 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
hailin 74175336af fix: 修复验证码输入框数字显示不全
- 增加输入框尺寸 48x56 -> 50x60
- 增大字体 20sp -> 24sp
- 移除 height: 1.2 行高限制

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:37:12 -08:00
hailin bee48e8b87 fix: 修正推荐码验证的返回值类型处理
verifyReferralCode()返回Map<String, dynamic>,需要提取valid字段
同时从响应中获取message字段用于错误提示

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 05:52:52 -08:00
hailin 2a5cb0d2ec feat: 在向导页添加推荐码API验证
在用户点击"继续"按钮时,调用API验证推荐码是否有效:
- 推荐码不存在或已失效时显示错误提示
- 网络错误时显示友好提示
- 验证通过后才保存并跳转到注册页

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 05:47:02 -08:00
hailin 9102a2a6d7 refactor: 移除恢复账号页面的标题和副标题
- 移除「手机号+密码登录」标题
- 移除「输入您的手机号和密码」副标题
- 页面更简洁,顶部只保留「恢复账号」导航标题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:47:29 -08:00
hailin 9e26b2750f fix: 修复推荐码文字颜色并统一恢复账号页面为龙虎榜风格
向导页修复:
- 推荐码输入框文字改为黑色,确保可见性

恢复账号页面重构:
- 背景改为与龙虎榜一致的渐变色(浅米色到浅橙色)
- 所有文字颜色改为棕色系,与背景协调
- 边框颜色改为金棕色(#D4A574)
- 登录按钮改为深棕色(#8B5A2B)
- 移除 AppBar,使用自定义顶部导航栏
- 保持 100% Flutter 兼容性和最佳实践

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:39:04 -08:00
hailin 6bbd4a6c78 fix: 修复恢复账号页面键盘弹出时的溢出错误
- 将 Column 改为 SingleChildScrollView 包裹,支持滚动
- 在底部添加额外间距,避免内容被键盘遮挡
- 修复 RenderFlex overflowed by 18 pixels 错误

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:35:43 -08:00
hailin 6b0194089a fix: 修复推荐码文字可见性和统一恢复账号页面设计
向导页修复:
- 推荐码输入文字改为金黄色(#FFD700),与白色底边框形成对比

恢复账号页面重构:
- 背景改为白色,与手机号注册等页面保持一致
- 添加标准 AppBar,标题居中显示"恢复账号"
- 输入框改为完全透明底部边框设计,与外部容器无感融合
- 文字颜色与底色反色:深灰色(#333333)
- 登录按钮改为金色背景(#D4A84B) + 白色文字
- 更新所有颜色以适配白色背景主题
- "立即注册"文字改为金色

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:29:03 -08:00
hailin 3be10493a0 refactor: 优化向导页推荐码输入框和恢复账号页面设计
向导页优化:
- 推荐码输入框改为透明底部边框设计,更好融入背景
- 增大输入框高度和字体大小,提升可读性
- 扫码图标改为白色,尺寸加大至 28sp
- 输入文字改为白色,与背景形成对比

恢复账号页面改版:
- 标题改为"恢复账号"并居中显示
- 移除副标题,界面更简洁
- 背景改为金色渐变,与 App 整体风格一致
- 登录按钮改为白色背景+深金色文字
- 优化所有输入框和文字颜色以适配金色背景
- "立即注册"文字改为白色带下划线

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 03:10:40 -08:00
hailin eee8f38ea6 refactor: 简化启动流程和优化向导页文案
- 简化 splash 页面跳转逻辑:账号已创建直接进主页,首次启动进向导页
- 优化向导页第5页文案:更亲切的标题和更清晰的说明
- 改进推荐码输入框和扫码图标颜色:黑色文字与白色底色形成更好对比
- 简化"恢复账号"按钮文字

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 01:31:43 -08:00
hailin 8519b9e608 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>
2025-12-20 22:59:29 -08:00
hailin 00996bf160 fix: 修改密码登录页面文案
- 标题从恢复账号改为手机号+密码登录(更准确)
- 副标题从使用手机号和密码登录改为输入您的手机号和密码(更简洁)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 22:53:16 -08:00
hailin ef7169f433 fix: 修复推荐码输入框颜色问题
- 改为白色背景(alpha: 0.9),更不透明
- 文字颜色改为 black87,清晰可见
- 边框改为绿色,更突出
- 提示文字改为灰色,易于区分

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 22:49:40 -08:00
hailin b4c4239593 feat: 实现手机号+密码登录和账号恢复功能
## 后端更改

### 新增功能
- 添加手机号+密码登录 API (`POST /user/login-with-password`)
  - 新增 LoginWithPasswordDto 验证手机号格式和密码长度
  - 实现 loginWithPassword 服务方法,使用 bcrypt 验证密码
  - 返回 JWT tokens(accessToken + refreshToken)

### 代码优化
- 修复 phone.validator.ts 中的 TypeScript 类型错误(Object -> object)

## 前端更改

### 新增功能
- 实现手机号+密码登录页面 (phone_login_page.dart)
  - 完整的表单验证(手机号格式、密码长度)
  - 集成 AccountService.loginWithPassword API
  - 登录成功后自动更新认证状态并跳转主页

### 账号服务优化
- 在 AccountService 中添加 loginWithPassword 方法
  - 调用后端 login-with-password API
  - 自动保存认证数据(tokens、用户信息)
  - 使用 _savePhoneAuthData 统一保存逻辑

### UI 文案更新
- 向导页文案修改:"创建账号" → "注册账号"
  - 更新标题、副标题和按钮文本
  - 添加"恢复账号"按钮,跳转到手机号密码登录页

## 已验证功能

 前端代码编译通过(0 errors, 仅有非关键警告)
 后端代码编译通过(0 errors, 仅有非关键警告)
 30天登录状态保持(JWT refresh token 已配置为30天)
 自动路由逻辑(有登录状态直接进入主页)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 20:35:44 -08:00
hailin 65f3e75f59 feat(mobile-app): 添加手机号+密码登录页面和路由
功能:
- 创建 PhoneLoginPage 用于账号恢复功能
- 实现手机号和密码输入界面
- 添加输入验证(手机号格式、密码长度)
- 添加密码可见性切换
- 添加登录按钮和加载状态
- 配置 phoneLogin 路由到 app_router
- 添加 RouteNames.phoneLogin 常量

UI设计:
- 深色渐变背景(与其他认证页面一致)
- 返回按钮
- 手机号和密码输入框
- 错误提示区域
- 登录按钮(带加载状态)
- 注册提示链接

待实现:
- 后端手机号+密码登录 API
- 登录成功后的token保存和状态更新

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 20:13:09 -08:00
hailin ed6c08914c feat(mobile-app): 添加钱包生成状态轮询和UI显示
功能:
- 创建 WalletStatusProvider 管理钱包生成状态
- 每5秒轮询钱包状态直到就绪或失败
- 在个人资料页面显示钱包生成状态
  - 钱包生成中:显示"账号创建审核中"和进度指示器
  - 钱包生成失败:显示失败状态和重试按钮
  - 钱包已就绪:显示序列号
- 在 AccountService 添加 retryWalletGeneration API 调用
- 页面初始化时自动检查并启动轮询
- 页面销毁时自动停止轮询

实现细节:
- 使用 Riverpod 状态管理
- 轮询间隔:5秒
- 自动停止轮询条件:钱包就绪或失败
- 支持手动重试钱包生成

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 19:59:02 -08:00
hailin 4906fa1815 feat(mobile-app): 重构向导页5注册流程
1. **推荐码改为必填项**
   - 移除"我没有推荐人"选项
   - 推荐码输入框始终可见
   - 支持手动输入和扫码两种方式
   - 添加推荐码验证逻辑

2. **隐藏导入助记词入口**
   - 保留代码但设置为 if (false) 隐藏
   - 需要时可修改为 true 启用

3. **添加恢复账号入口**
   - 新增"恢复账号(手机号+密码登录)"按钮
   - 点击跳转到 phoneLogin 页面

4. **路由更新**
   - 添加 RoutePaths.phoneLogin 路由常量

UI改进:
- 推荐码输入框样式更新:半透明白色背景
- 扫码按钮图标改为 qr_code_scanner
- 副标题文案改为"请输入推荐码"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 19:08:13 -08:00
hailin cdb55ec4cb fix(mobile-app): 修复短信验证码界面问题
- 减小验证码输入框字体大小从 24.sp 到 20.sp,防止在某些设备上被截断
- 添加行高 height: 1.2 确保文字垂直居中
- 在手机号注册页面添加 60 秒倒计时功能
- 倒计时期间禁用获取验证码按钮
- 显示剩余秒数提示 "X秒后重新发送"
2025-12-20 17:40:09 -08:00
hailin 943fd9efe9 chore: 提交所有未提交的修改
包括:
- admin-service: 系统配置功能
- authorization-service: 自助授权申请功能
- planting-service: 资金分配服务
- reward-service: 奖励计算服务
- admin-web: 用户管理和设置页面
- mobile-app: 授权、认证、路由等功能

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 06:09:43 -08:00
hailin bbd6f2ee38 feat(mobile-app): 优化创建钱包页面UI
- 添加背景图片 onboarding_bg.jpg
- 移除重复的logo和标题(背景图已包含)
- 添加白色半透明卡片背景提高文字可读性
- 调整颜色主题为绿色系匹配背景
- 修改认种确认弹窗标题为"一旦确认,无法更改"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 19:33:04 -08:00
hailin 80b74e9877 feat(sentry): 集成 Sentry 自建崩溃收集与错误追踪系统
Backend (infrastructure/sentry):
- 添加 Sentry 自建部署 Docker Compose 配置
- 包含 PostgreSQL, Redis, Kafka, ClickHouse, Snuba 等组件
- 添加 Relay (事件网关) 和 Symbolicator (符号化服务) 配置
- 添加部署脚本 deploy.sh 和配置文件
- 更新 infrastructure README 文档

Frontend (mobile-app):
- 添加 sentry_flutter SDK 依赖
- 创建 SentryService 封装类,统一管理崩溃收集
- 创建 SentryConfig 配置类,支持开发/生产环境配置
- 创建 SentryNavigationObserver 自动追踪页面导航
- 创建 SentryDioInterceptor 自动追踪 HTTP 请求
- 在 bootstrap.dart 中集成 Sentry 初始化
- 支持 Flutter 错误和异步错误捕获
- 自动过滤敏感信息 (密码、助记词、私钥等)
- 在登录/登出/切换账号时同步 Sentry 用户信息

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 07:15:13 -08:00
hailin cc06638e0e feat(telemetry): 将userId改为userSerialNum字符串格式并完善遥测追踪
Backend (presence-service):
- 将EventLog.userId从BigInt改为String类型,存储userSerialNum(如D25121400005)
- 更新Prisma schema,userId字段改为VarChar(20)并添加索引
- 更新心跳相关命令和事件,统一使用userSerialNum字符串
- 添加数据库迁移文件
- 更新相关单元测试和集成测试

Frontend (mobile-app):
- TelemetryEvent新增toServerJson()方法,格式化为后端API期望的格式
- AccountService登录/恢复时设置TelemetryService的userId
- MultiAccountService切换账号时同步更新TelemetryService的userId
- 退出登录时清除TelemetryService的userId
- AuthProvider初始化时设置userId

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:55:25 -08:00
hailin 306f003679 refactor(splash): 简化开屏动画为纯帧播放,恢复监控Tab
- 重构 splash_page.dart: 移除 video_player 依赖,改用纯帧动画播放
- 帧数从53张调整为36张,添加预加载优化
- 移除 pubspec.yaml 中的 video_player 依赖
- 恢复底部导航栏"监控"Tab(原"矿机")
- 调整路由索引:0-龙虎榜, 1-监控, 2-兑换, 3-我
- 移除"我的"页面的"领取全部"按钮

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 03:28:53 -08:00
hailin f3a475a6f4 feat(account): 实现多账号管理功能
- 新增 MultiAccountService 处理多账号存储和切换
- 新增 AccountSwitchPage 账号切换页面
- 修改 storage_keys.dart 添加多账号相关键和前缀方法
- 修改 ProfilePage 切换账号按钮跳转到账号切换页面
- 修改退出登录逻辑,保留账号数据只清除会话状态
- 新账号创建时自动添加到账号列表
- 支持旧单账号数据自动迁移到多账号架构
- 支持删除账号(带确认对话框)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 02:57:13 -08:00
hailin 09e66cef10 refactor: 多项UI优化和品牌更名
- 品牌更名: 将"榴莲女皇"全部替换为"榴莲皇后"(前端+后端共15处)
- 导航优化: 将"交易"Tab改名为"兑换"
- 创建钱包页: 添加返回按钮,可返回向导页第5页(仅账号未创建时显示)
- 兑换页面: 禁用"一键结算"和"卖出DST"按钮,提款按钮在余额为0时禁用

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 01:43:47 -08:00
hailin 11d9b57bda feat(splash): 将 fallback 动画改为帧动画以提升兼容性
- 将 Tween 动画替换为 53 帧 PNG 序列动画
- 添加 splash_frames 资源目录(15fps,约3.5秒)
- 使用 gaplessPlayback 防止帧切换闪烁
- 保留帧加载失败时的静态 fallback

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 20:18:12 -08:00
hailin ada8a44076 feat(splash): 添加视频播放失败时的 fallback 动画
当设备硬件解码器无法播放视频时(如部分华为老机型),
显示 Logo 缩放 + 文字淡入的 Flutter 动画作为替代方案。

- 添加 fallback 动画控制器和动画序列
- Logo 从小到大弹性缩放 + 透明度渐显
- 文字延迟淡入显示
- 动画时长 3 秒,支持跳过按钮
- 保持与视频相同的用户体验流程

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 20:00:20 -08:00
hailin 7bfd6822a7 fix(splash): 修复华为设备启动动画兼容性问题
- 添加 core-splashscreen 依赖支持 Android 12+ SplashScreen API
- 配置原生 Splash 主题消除冷启动白屏
- 添加 values-v31 和 values-night-v31 适配 Android 12+
- 更新 launch_background.xml 显示品牌 Logo
- MainActivity 添加 installSplashScreen() 处理
- 视频转码为 H.264 格式解决华为 HEVC 解码器兼容问题
- 添加视频初始化调试日志

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 19:54:40 -08:00
hailin 0860ff23b8 fix(guide): 修复向导页5导入助记词按钮导航问题
将 Navigator.of(context).pushNamed() 改为 context.push(),
使用 go_router 进行页面导航,与 onboarding_page 保持一致。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 09:19:25 -08:00
hailin 4be9c1fb82 refactor!: 重构账户序列号格式 (BREAKING CHANGE)
将 accountSequence 从数字类型改为字符串类型,新格式为:
- 普通用户: D + YYMMDD + 5位序号 (例: D2512120001)
- 系统账户: S + 10位序号 (例: S0000000001)

主要变更:
- identity-service: AccountSequence 值对象改为字符串类型
- identity-service: 序列号生成器改为按日期重置计数
- 所有服务: Prisma schema 字段类型从 BigInt/Int 改为 String
- 所有服务: DTO、Command、Event 中的类型定义更新
- Flutter 前端: 相关数据模型类型更新

涉及服务:
- identity-service (核心变更)
- referral-service
- authorization-service
- wallet-service
- reward-service
- blockchain-service
- backup-service
- planting-service
- mpc-service
- admin-service
- mobile-app (Flutter)

注意: 此为破坏性变更,需要清空数据库并重新运行 migration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 09:11:18 -08:00
hailin 033268deb9 feat(mobile): improve UX with QR scanning and Huawei compatibility fixes
- Disable Impeller rendering engine to fix video playback on Huawei devices
- Update splash screen text from "榴莲女皇" to "榴莲皇后" and use app logo
- Make referral code input scan-only (disable manual input) on guide page 5
- Add "import mnemonic" entry on guide page 5 for account recovery
- Replace paste button with QR scanner in USDT withdraw address input
- Add camera and gallery QR scanning support for wallet addresses

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 05:39:58 -08:00
hailin 7bf88cd6a8 feat(mobile): replace splash screen with video player
- Add video_player dependency for video playback
- Create assets/videos directory for splash video
- Implement video splash screen with:
  - Full-screen video playback (splash.mp4)
  - Skip button appears after 1 second
  - Fallback to logo view if video fails to load
  - Auto-navigate when video completes
- Video file should be placed at: assets/videos/splash.mp4

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 04:23:04 -08:00
hailin 176a4b1493 fix(guide): change referral code input text color to black for visibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 10:44:39 -08:00
hailin 908f50ab11 fix(mobile): move update check to HomeShellPage with valid context
- Move checkForAppUpdate from SplashPage to HomeShellPage
- Use WidgetsBindingObserver to check on app resume
- Add 24-hour interval check to avoid frequent API calls
- Fix: context.go() invalidates context, so check was never executed

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 03:05:19 -08:00
hailin 91e54946ba fix(mobile): avatar URL handling + API paths + guide page layout
1. Avatar display:
   - Detect if _avatarSvg is URL or SVG string
   - Use Image.network for URLs, SvgPicture.string for SVG

2. API endpoints:
   - Remove /api/v1 prefix from endpoints (already in baseUrl)
   - Fixes duplicate /api/v1/api/v1 in requests

3. Guide page:
   - Restore BoxFit.cover for fullscreen images
   - Fix page indicator positioning with SafeArea

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 18:50:34 -08:00
hailin 243105f97f fix(guide): use fitWidth to prevent image stretching + add debug logs
- Change BoxFit.cover to BoxFit.fitWidth for guide page images
- Add screen info logging (resolution, pixel ratio, aspect ratio)
- Add detailed avatar loading logs in frontend and backend
- Log avatarUrl from DB and API response during recovery

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 18:36:43 -08:00
hailin 9dd4bb3ac5 fix(mobile): update guide_5 to jpg and add AnimatedSize for smooth transition
- 将 guide_5.png 改为 guide_5.jpg
- 使用 AnimatedSize 包裹推荐码输入框,切换选项时平滑过渡,消除跳跃闪烁

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 17:49:07 -08:00
hailin 07448b381b feat(mobile): redesign guide pages with fullscreen background images
向导页重新设计:

1. 页面1-4 改为全屏背景图片布局
   - 移除 SafeArea,图片延伸到状态栏
   - 移除文字标题和副标题(文字设计在图片中)
   - 仅保留底部页面指示器(白色圆点)

2. 页面5(欢迎加入页)也改为全屏背景图片
   - 添加渐变遮罩(30%~60%黑色)提高可读性
   - 表单区域改为透明背景
   - 所有文字、输入框、单选按钮改为白色系
   - 退出按钮文字从"退出 Exit"改为"退出"

3. 添加5张向导页背景图片
   - guide_1.jpg ~ guide_4.jpg: 介绍页背景
   - guide_5.png: 欢迎加入页背景

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 17:44:38 -08:00