Commit Graph

696 Commits

Author SHA1 Message Date
hailin b9b6dacbab fix(scripts): 使用 docker exec blockchain-service 计算地址
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:32:43 -08:00
hailin 6fe615eac5 fix(scripts): 进入 blockchain-service 目录使用 ethers 计算地址
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:30:19 -08:00
hailin a4d3f21475 revert(scripts): 恢复到 578a865 版本
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:28:05 -08:00
hailin 8465f53996 fix(scripts): 使用项目目录的 ethers 计算地址
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:27:42 -08:00
hailin 578a865c4d feat(scripts): 获取 mpc-system 实际创建的 username
- 添加 get_actual_username 函数从数据库查询实际 username
- mpc-system 自动生成 wallet-xxx 格式,脚本输出实际值
- show_result 使用 ACTUAL_USERNAME 显示正确配置

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:22:34 -08:00
hailin cdf858520d revert(scripts): 恢复脚本到JWT认证版本,不修改username
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:20:43 -08:00
hailin 8641529028 revert: 移除 verify_and_fix_username 调用
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:19:28 -08:00
hailin 0bf52c7b2c fix(scripts): 自动修复热钱包 username
- verify_and_fix_username 函数通过 docker exec 直接查询和更新数据库
- 移除手动回退,全自动化处理
- 将函数添加到主流程中

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:18:33 -08:00
hailin 2af5938821 fix(mpc-service): 规范化 messageHash 去掉 0x 前缀
mpc-system 期望纯 hex 字符串(不带 0x 前缀),
blockchain-service 发送的 messageHash 带有 0x 前缀导致 400 错误

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 10:00:21 -08:00
hailin 54ac2ee225 feat(mpc): 将 blockchain-service MPC 签名从 HTTP 改为 Kafka 事件驱动
重构 blockchain-service 和 mpc-service 之间的 MPC 签名通信方式:
- blockchain-service: MpcSigningClient 改用 Kafka 发布签名请求事件
- blockchain-service: MpcEventConsumerService 新增 SigningCompleted 事件监听
- mpc-service: SigningRequestedHandler 支持识别请求来源 (source 字段)

事件流:
blockchain-service → Kafka(mpc.SigningRequested) → mpc-service
mpc-service → HTTP → mpc-system
mpc-service → Kafka(mpc.SigningCompleted) → blockchain-service

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 09:45:39 -08:00
hailin 0682f6aac3 Revert "fix(mpc-service): 添加 DTO 验证装饰器"
This reverts commit 6eb4b6b153.
2025-12-15 09:36:31 -08:00
hailin 6eb4b6b153 fix(mpc-service): 添加 DTO 验证装饰器
添加 class-validator 装饰器到 CreateKeygenDto 和 CreateSigningDto,
修复 NestJS ValidationPipe 的 forbidNonWhitelisted 验证错误。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 09:36:03 -08:00
hailin 9b3f33ea42 fix(blockchain): 修复 MPC 签名 API 路径
mpc-service 使用全局前缀 api/v1,调整签名 API 路径:
- /mpc/sign → /api/v1/mpc/sign
- /mpc/sign/:sessionId/status → /api/v1/mpc/sign/:sessionId/status

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 09:28:47 -08:00
hailin 71e805b1fd feat(deploy): 添加 HOT_WALLET 配置到 install 模板
在 deploy.sh 的 install() 函数中添加热钱包配置,
新部署时会自动包含这些环境变量。

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 09:06:51 -08:00
hailin 317532109d config: 添加热钱包配置
HOT_WALLET_USERNAME=rwadurian-system-hot-wallet-01
HOT_WALLET_ADDRESS=0x895aaf83C57f807416E3BbBd093d7aB74a6FDd33

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:58:42 -08:00
hailin 93c658d914 fix(scripts): 添加 JWT 认证支持
mpc-system account-service 需要 JWT 认证,脚本需要:
- 添加 --jwt-secret 参数或从 MPC_JWT_SECRET 环境变量读取
- 使用 openssl 生成 HS256 JWT token
- 所有 API 请求添加 Authorization: Bearer header

用法:
  export MPC_JWT_SECRET='your_secret'
  ./init-hot-wallet.sh --username rwadurian-system-hot-wallet-01 --threshold-n 3 --threshold-t 2

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:52:40 -08:00
hailin c0e6e1f620 refactor(scripts): 简化热钱包初始化脚本参数
- 只保留 --username, --threshold-n, --threshold-t 参数
- 移除 --host, --verbose, --help 参数(host 固定为 localhost:4000)
- username 改为必填参数
- 更新使用说明和错误提示

用法: ./init-hot-wallet.sh --username rwadurian-system-hot-wallet-01 --threshold-n 3 --threshold-t 2

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:48:51 -08:00
hailin fce8a919ff fix(scripts): 修改热钱包初始化脚本直接调用mpc-system
- 改为直接调用 mpc-system account-service (端口 4000)
- 使用 snake_case API 格式 (threshold_n, threshold_t, require_delegate)
- 系统热钱包设置 require_delegate: false (不需要用户持有share)
- 更新状态查询路径为 /api/v1/mpc/sessions/{sessionId}

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:44:45 -08:00
hailin 9531405c9b fix(scripts): 修复热钱包初始化脚本默认端口为3006
mpc-service 实际运行在 3006 端口,将脚本默认值从 3013 改为 3006

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:20:48 -08:00
hailin ad22c23656 refactor(scripts): 完善热钱包MPC初始化脚本
主要改进:
- 修复API路径: /mpc/keygen -> /api/v1/mpc/keygen
- 添加彩色日志输出 (info/success/warn/error/debug)
- 添加依赖检查 (curl, jq)
- 添加服务连通性检查 (health endpoint)
- 添加参数验证
- 添加详细模式 (-v/--verbose)
- 改进等待进度显示 (spinner动画)
- 支持多种地址派生方式 (Node.js ethers / Python eth_keys)
- 改进错误处理和用户提示
- 添加使用示例
- 完成后提供一键复制的环境变量配置命令

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:17:40 -08:00
hailin 9cac91b5f0 feat(blockchain): 将提现转账从私钥签名改为 MPC 签名
背景:
- 原实现使用 HOT_WALLET_PRIVATE_KEY 进行热钱包签名
- 私钥直接存储存在安全风险
- 系统已有 MPC 基础设施,应该复用

改动内容:

1. 新增 MPC 签名客户端
   - infrastructure/mpc/mpc-signing.client.ts: 调用 mpc-service 的签名 API
   - 支持创建签名会话、轮询等待、获取签名结果

2. 重构 ERC20 转账服务
   - domain/services/erc20-transfer.service.ts: 从私钥签名改为 MPC 签名
   - 移除 Wallet 依赖,改用 Transaction 手动构建交易
   - 使用 MPC 签名后广播已签名交易

3. 新增初始化服务
   - mpc-transfer-initializer.service.ts: 启动时注入 MPC 客户端
   - 解决 Domain 层和 Infrastructure 层的循环依赖

4. 新增热钱包初始化脚本
   - scripts/init-hot-wallet.sh: 便捷创建系统热钱包的 MPC 密钥
   - 支持配置门限值、用户名等参数

5. 更新配置
   - 移除 HOT_WALLET_PRIVATE_KEY 依赖
   - 新增 MPC_SERVICE_URL, HOT_WALLET_USERNAME, HOT_WALLET_ADDRESS
   - 更新 docker-compose.yml 和 .env.example

部署前需要:
1. 运行 init-hot-wallet.sh 初始化热钱包
2. 配置 HOT_WALLET_USERNAME 和 HOT_WALLET_ADDRESS
3. 向热钱包充值 USDT 和原生币(gas)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 08:04:17 -08:00
hailin 28c44d7219 fix(wallet): 提现失败解冻时优先使用 accountSequence 查找钱包
问题背景:
- 原实现使用 userId 查找钱包进行解冻操作
- userId 来自外部 identity-service,存在变化风险
- 如果 userId 发生变化,可能导致解冻到错误的钱包

解决方案:
- 优先使用 accountSequence 查找钱包(wallet-service 内部主键,稳定可靠)
- 保留 userId 作为兜底查找方式,确保向后兼容
- 增加钱包找不到时的详细错误日志

改动点:
- withdrawal-status.handler.ts: handleWithdrawalFailed() 方法
- 与认种(planting)的钱包查找逻辑保持一致

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 07:37:36 -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 3942cb405a fix(frontend): 添加新账号时显示加载状态提示
- 添加 _isAddingAccount 状态变量
- 点击"添加新账号"时显示"正在准备..."加载提示
- 添加 try-catch 错误处理,失败时显示错误提示
- 防止重复点击

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:14:49 -08:00
hailin 2a4efe0828 fix(frontend): 修复添加新账号时旧状态未清除的问题
问题: logoutCurrentAccount() 方法只清除了 5 个状态,导致添加新账号时
旧账号的钱包地址、助记词备份状态等仍然存在,影响新账号创建/导入流程。

修复: 现在清除全部 16 个账号相关状态:
- Token: accessToken, refreshToken
- 账号信息: userSerialNum, username, avatarSvg, avatarUrl,
  referralCode, inviterSequence, isAccountCreated
- 钱包信息: walletAddressBsc, walletAddressKava, walletAddressDst,
  mnemonic, isWalletReady, isMnemonicBackedUp

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 06:07:23 -08:00
hailin 579e8c241e fix(backend): 修复构建错误并添加 TOTP 数据库迁移
修复内容:
- identity-service: 添加 CurrentUserPayload 接口定义
- identity-service: 添加 user_totp 表的数据库迁移文件
- wallet-service: 安装 axios 依赖
- wallet-service: 修复 withdrawal-status.handler.ts 中的类型错误
  - userId.toString() → userId.value (BigInt 类型)
  - unfreezeUsdt() → unfreeze() (正确的方法名)
  - amount.asNumber → amount.value (Money 值对象属性)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 05:29:29 -08:00
hailin b01277ab7d feat(withdraw): 实现完整的提取功能 - TOTP验证和KAVA转账
功能实现:
- identity-service: 添加TOTP二次验证功能
  - 新增 UserTotp 数据模型
  - 实现 TotpService (生成/验证/启用/禁用)
  - 添加 /totp/* API端点

- wallet-service: 提取API添加TOTP验证
  - withdrawal.dto 添加可选 totpCode 字段
  - 添加 IdentityClientService 调用identity-service验证TOTP
  - 添加 WithdrawalStatusHandler 处理区块链确认/失败事件

- blockchain-service: 实现真实KAVA ERC20转账
  - 新增 Erc20TransferService (热钱包USDT转账)
  - 更新 withdrawal-requested.handler 执行真实转账
  - 发布确认/失败事件回wallet-service

- 前端: 对接真实提取API
  - withdraw_confirm_page 调用 walletService.withdrawUsdt

环境变量配置:
- TOTP_ENCRYPTION_KEY (identity-service)
- IDENTITY_SERVICE_URL (wallet-service)
- HOT_WALLET_PRIVATE_KEY (blockchain-service)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 05:16:42 -08:00
hailin 2dba7633d8 fix(withdraw): 将确认页面中的提款改为提取
- 页面标题"确认提款" → "确认提取"
- "提款详情" → "提取详情"
- "提款网络" → "提取网络"
- "提款地址" → "接收地址"
- "提款金额" → "提取数量"
- "提款申请已提交" → "提取申请已提交"
- 按钮文字"确认提款" → "确认提取"
- 错误提示"提款失败" → "提取失败"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:54:28 -08:00
hailin 9cc66d8c61 fix(trading): 将提取/转动按钮下的人民币改为积分
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:49:44 -08:00
hailin 53cc4623ff chore(trading): 暂时屏蔽BNB、OG、DST结算币种,只保留人民币
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:39:34 -08:00
hailin a81aaa6acd fix(withdraw): 修改提款页面文字并暂时屏蔽BSC网络
- 屏蔽 BSC (BNB Chain) 网络选项
- "提款地址" → "接收地址"
- "请输入 KAVA 或 EVM 地址" → "请输入接收积分的地址"
- "提款金额" → "积分提取数量"
- "请输入提款金额" → "请输入积分数量"
- "最小提款金额" → "最小提取数量"
- 注意事项中的"提款"改为"提取"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:38:34 -08:00
hailin a7417be0e1 chore(trading): 暂时屏蔽卖出DST功能和DST余额显示
待功能开放后取消注释即可恢复

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:31:40 -08:00
hailin 83f10df29e fix(trading): 将结算币种中的积分更换为人民币
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:30:50 -08:00
hailin 7db38114d9 fix(profile): 修复伞下树图居中问题;更名提款/转账为提取/转动
- 使用 LayoutBuilder 获取实际容器宽度计算节点显示
- 修改兑换页面按钮文字从"提款/转账"改为"提取/转动"

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:28:58 -08:00
hailin 4d6ce3ce08 fix(profile): 修复伞下树图未居中问题
使用 LayoutBuilder 获取实际容器宽度而不是屏幕宽度

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:25:19 -08:00
hailin 6dd7e64a95 feat(frontend): 多项功能改进
- 将所有 USDT 文本替换为 积分
- 监控页面:将"挖矿待开启"改为"开启监控",开启时显示关闭按钮
- 我的伞下:树图默认居中显示
- 树图节点:长按查看详情(序列号、认种数、直推人数)
- 分享页面:显示推荐码并支持复制

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 04:04:21 -08:00
hailin 8d68b292c8 fix(deps): 降级 share_plus 版本修复 Android 构建错误
将 share_plus 从 ^10.0.0 降级到 ^7.2.2,解决 Android SDK 35 构建时的 Kotlin 编译错误

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 03:38:24 -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 04644ea3f8 feat(profile): 添加退出登录和切换账号功能
- 在版本信息栏添加构建模式显示(Debug/Release/Profile)
- 在版本信息栏下方添加切换账号按钮(暂显示即将上线提示)
- 在版本信息栏下方添加退出登录按钮(带确认对话框)
- 退出登录后清除本地数据并跳转到向导页

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 02:16:36 -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 5219a5a39f chore(nav): 暂时隐藏矿机Tab
- 底部导航从4个减少到3个: 龙虎榜、交易、我
- 保留矿机相关代码注释,方便后续恢复
- 调整索引映射以匹配新的Tab顺序

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 01:05:28 -08:00
hailin db37fbf860 feat(notification): 添加通知中心功能
后端 (admin-service):
- 新增 Notification 和 NotificationRead 数据模型
- 支持通知类型: 系统/活动/收益/升级/公告
- 实现管理端 API: 创建/更新/删除/列表
- 实现移动端 API: 获取通知列表/未读数量/标记已读

前端 (mobile-app):
- 新增 NotificationService 和 Provider
- 新增通知中心页面 (NotificationInboxPage)
- 在"我的"页面右上角添加通知图标(带未读角标)
- 支持查看通知详情、标记已读、全部已读

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 20:45:03 -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 2e44263834 feat(profile): 添加我的伞下功能 - 展示下级用户树形结构
- 后端新增 GET /referral/user/:accountSequence/direct-referrals API
- 前端新增伞下树组件,支持懒加载、缓存、展开/收起
- 使用 CustomPaint 绘制父子节点连接线
- 超出屏幕宽度时显示省略号,点击弹出底部列表

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 10:34:56 -08:00
hailin 2eda3be275 fix(frontend): 修正权益金额显示与后端实际配置一致
- 省团队权益: 10 → 20 USDT
- 市区域权益: 20 → 35 USDT
- 省区域权益: 10 → 15 USDT

权益金额配置参考 reward-service/prisma/seed.ts

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 09:46:30 -08:00
hailin c4be2f59f7 fix(frontend): 修正市团队权益描述金额 30 → 40 USDT
市团队权益每棵树实际是 40 USDT,前端显示文案错误写成 30 USDT

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 09:45:05 -08:00