hailin
34ba209e44
fix(app-assets): 修复公开API路径双重前缀 + Kong网关路由缺失
...
问题:移动端配置的开屏图/引导图无效
根因:
1. PublicAppAssetController 和 PublicSystemConfigController 的
@Controller('api/v1/xxx') 与 NestJS 全局前缀 api/v1 叠加,
导致实际端点为 api/v1/api/v1/xxx(双重前缀)
2. Kong 网关缺少 /api/v1/app-assets 和 /api/v1/system-config 路由
3. Flutter 端使用 /admin-service/api/v1/xxx 路径,不匹配任何 Kong 路由
修复:
- 后端:Controller 路径去掉 api/v1 前缀,由全局前缀统一添加
- Kong:新增 admin-app-assets-public 和 admin-system-config-public 路由
- Flutter:API 路径改为 /app-assets 和 /system-config/display/settings
受影响文件:
- backend/api-gateway/kong.yml (新增2条路由)
- backend/.../app-asset.controller.ts (Controller路径修正)
- backend/.../system-config.controller.ts (Controller路径修正)
- frontend/.../app_asset_service.dart (API路径修正)
- frontend/.../system_config_service.dart (API路径修正)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 04:36:53 -08:00
hailin
cba7ff590a
fix(mining-app): K线蜡烛图最小实体高度优化,消除横线"-"显示
...
问题:销毁时段(无交易)的小时K线中,open ≈ close(价差仅 ~2.8e-10),
蜡烛实体映射到像素后高度接近0,旧代码强制最小1px导致显示为横线"-"。
修复:将蜡烛实体最小高度从固定1px改为 max(bodyWidth * 0.4, 3.0)px,
即至少为蜡烛宽度的40%或3像素(取较大值),使 doji 蜡烛显示为
可辨识的小方块而非横线。有正常涨跌幅的蜡烛不受影响。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:31:52 -08:00
hailin
ef5ac2bf94
fix(mining-app): 价格刷新倒计时与后端销毁调度器同步
...
- 倒计时不再从页面打开时任意起点开始
- 自动计算距下一个整分钟第3秒的剩余秒数作为初始值
(销毁在每分钟第0秒执行,留3秒余量等数据库写完)
- 倒计时归零时通过 ref.invalidate 主动刷新价格数据
- 确保每次刷新都能拿到最新的销毁后价格
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:17:10 -08:00
hailin
abb0da36a9
feat(mining-app): 兑换页价格刷新改为60秒并显示倒计时
...
- 价格 Provider 刷新间隔从15秒改为60秒,与后端销毁调度器同步
(销毁每分钟执行一次,15秒内数据不会变化,避免无意义请求)
- 兑换页"当前积分股价值"右侧新增倒计时显示(60s→1s)
让用户直观知道下次数据刷新时间
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:14:16 -08:00
hailin
b639b5d499
fix(mining-app): 价格显示优化 + 涨跌幅精度再提升
...
- 兑换页顶部价格改用 formatPriceFull 显示完整零(不再用 0.0{n} 缩写)
- K线纵坐标有效数字从7位精简为4位,节省空间更简洁
- 涨跌幅精度再提升:后端 toFixed(8)→toFixed(12),前端 6位→10位小数
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:43:48 -08:00
hailin
2e91686a88
fix(mining-app): 优化页面文案与涨跌幅精度
...
- 兑换页顶部隐藏价格后方"积分值"文字,界面更简洁
- 兑换页"较上线首日"涨跌幅精度从2位小数提升至6位,每分钟销毁引起的涨幅尾数可见
- 兑换页"黑洞销毁量"文案改为"已销毁量",更直观易懂
- 贡献值页"积分股池实时余量"文案改为"100亿销毁剩余量"
- 后端 priceChangePercent 精度从 toFixed(2) 提升至 toFixed(8),支持前端高精度显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:23:59 -08:00
hailin
dcc46c37b6
fix(mining-app): 价格有效数字从6位调整为7位,最后2位每分钟可见变化
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:12:15 -08:00
hailin
f5d25afab8
fix(mining-app): 价格显示有效数字从3位增加到6位
...
每分钟销毁引起的价格变化约 4.66e-12(第7位有效数字),
原来只显示3位有效数字 0.0{5}979 无法观察到变化。
改为6位后 0.0{5}979941,最后一位每1-2分钟变化一次,
用户可在兑换页面实时观察到销毁带来的价格上涨。
影响范围:formatPrice、K线图Y轴/十字线、交易记录、挖矿记录
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 20:09:32 -08:00
hailin
deffdab18b
fix(mobile-upgrade): 股行App版本管理API地址改为 mapi.szaiai.com
...
mobile-upgrade 部署在榴莲皇后服务器上,股行的 mining-admin-service
运行在另一台服务器(103.39.231.240),需通过 mapi.szaiai.com 域名访问。
原配置 rwaapi.szaiai.com/mining-admin 无法路由到股行服务器,导致 30s 超时。
修改: NEXT_PUBLIC_MINING_API_URL 从 rwaapi.szaiai.com → mapi.szaiai.com
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 19:04:56 -08:00
hailin
59acea33fe
feat(trading): K线图增加周/月/年周期
...
- 前端周期选项增加「周」「月」「年」
- 后端 parsePeriodToMinutes 增加 1w/1M/1y 映射
- getPeriodStart 对日历周期按自然边界对齐:
- 1w → 周一 00:00 UTC(ISO 周标准)
- 1M → 月初1日 00:00 UTC
- 1y → 年初1月1日 00:00 UTC
- 固定周期(1m~1d)仍使用 epoch 模运算,不受影响
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:42:38 -08:00
hailin
c24f383501
fix(trading): K线Y轴动态缩放 + 价格显示格式统一 + 首日涨幅修复
...
- K线图Y轴改为只基于可见K线计算范围,实现动态缩放(类似TradingView)
- 价格显示统一使用 0.0{n}xxx 格式替代科学计数法,覆盖全局 formatPrice、
K线图、交易记录页、挖矿记录页
- 修复"较上线首日"百分比始终显示 +0.00% 的问题:getFirstSnapshot 过滤
price=0 的早期快照
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:36:26 -08:00
hailin
f13814e577
fix(mobile-app): 排名详情页隐藏敏感统计字段
...
火柴人排名详情页 (UserProfilePage) 暂时隐藏以下显示元素(代码保留,注释隐藏):
- 统计卡片:引荐数、同伴数、本人认种数(仅保留"同伴认种")
- 基本信息卡片:用户ID (accountSequence)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 17:41:11 -08:00
hailin
d075853a7f
feat(app-assets): 应用图片管理 — 开屏图/引导图可从 admin-web 配置
...
新增从 admin-web 后台管理开屏图(2张)和引导图(5张+标题/副标题)的完整功能链路。
移动端优先使用后台配置的远程图片,无配置或加载失败时自动回退到本地 asset。
### Backend (admin-service)
- Prisma schema 新增 AppAssetType 枚举 + AppAsset 模型 (type/sortOrder 唯一约束)
- 新增 AdminAppAssetController: 图片上传(multipart)、列表查询、元数据更新、删除
- 新增 PublicAppAssetController: 公开查询接口供移动端消费 (仅返回 isEnabled=true)
- 新增数据库 migration: 20260204100000_add_app_assets
### Admin-web
- endpoints.ts 新增 APP_ASSETS 端点组
- 新增 appAssetService.ts: list/upload/update/delete 方法
- Settings 页新增"应用图片管理"区块: 开屏图 2 卡槽 + 引导图 5 卡槽
- 每个卡槽支持: 图片上传预览、启用/禁用开关、删除、引导图额外支持标题和副标题编辑
### Mobile-app (Flutter)
- 新增 AppAssetService: 3 级缓存策略 (内存 5min TTL → SharedPreferences → 后台静默刷新)
- splash_page.dart: 支持远程开屏图 (CachedNetworkImage),fallback 到本地 asset
- guide_page.dart: 支持远程引导图+标题/副标题覆盖,fallback 到本地 asset
- 替换 2 张开屏图为新版 (1280x1826/1834, ~245KB)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:20:26 -08:00
hailin
50dc18a224
feat(admin-web): 用户管理高级筛选增加"已认种/未认种"过滤
...
在用户管理页面的"用户状态"下拉框中新增"已认种"和"未认种"两个筛选选项。
实现方式:
- 复用后端已有的 minAdoptions/maxAdoptions 查询参数
- "已认种"映射为 minAdoptions=1(personalAdoptionCount >= 1)
- "未认种"映射为 maxAdoptions=0(personalAdoptionCount = 0)
- 与原有"正常/冻结"状态筛选互斥(同一下拉框)
- 切换筛选时自动重置分页到第 1 页
后端无改动:admin-service 的 ListUsersDto 和 UserQueryRepository
已支持 minAdoptions/maxAdoptions 参数及对应的 WHERE 条件。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:58:24 -08:00
hailin
ebe7123583
feat(market-maker): 积分股(eUSDT)和积分值(fUSDT)使用独立 MPC 钱包
...
- Prisma: MarketMakerConfig 新增 eusdt_wallet_address 字段
- 后端: 初始化/更新配置时读取 EUSDT_MARKET_MAKER_ADDRESS 环境变量
- 后端: getConfig API 返回 eusdtWalletAddress
- 前端: 积分股充值弹窗使用 eusdtWalletAddress (不再共用 kavaWalletAddress)
- 前端: 积分值充值弹窗继续使用 kavaWalletAddress (fUSDT 钱包)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:39:54 -08:00
hailin
8cfd107a92
refactor(pool-accounts): 移除硬编码钱包名,改为从后端 API 动态获取
...
- 后端: 新增 GET /admin/pool-accounts 接口,返回从 .env 配置的池账户列表
- 前端: 新增 usePoolAccounts hook,动态渲染池账户卡片
- 前端: 提取 PoolAccountCard 子组件,消除重复代码
- 移除前端硬编码的 BURN_POOL_WALLET_NAME / MINING_POOL_WALLET_NAME 常量
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 02:57:40 -08:00
hailin
a5f6b23a95
feat(pool-account): 池账户充值弹窗新增中心化充值 tab
...
与做市商管理一致,充值弹窗包含"中心化充值"和"区块链充值"两个 tab。
中心化充值直接调整池账户余额(ADJUSTMENT 类型分类账),无需区块链交易。
变更:
- wallet-service: pool-account.service 新增 centralizedDeposit 方法
- wallet-service: pool-account.controller 新增 POST /centralized-deposit
- admin-service: pool-account.controller 新增 POST /:walletName/centralized-deposit 代理
- frontend: configs.api + use-configs hook + configs page 充值弹窗 Tabs UI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 02:26:31 -08:00
hailin
4f5b18be48
feat(pool-account): 实现池账户区块链充值检测和提现功能
...
为100亿销毁池和200万挖矿池实现完整的区块链充值/提现流程:
- 充值:独立扫描器检测 fUSDT 转入 → Kafka 事件 → wallet-service 入账
- 提现:前端 → admin-service 代理 → blockchain-service MPC签名转账 → wallet-service 记账
mining-blockchain-service:
- 新增 PoolAccountDeposit/PoolAccountBlockCheckpoint Prisma 模型
- 新增 PoolAccountDepositDetectionService(每5秒扫描 fUSDT 充值,每30秒更新确认数)
- 扩展 MPC 签名客户端支持 burnPool/miningPool 2-of-3 门限钱包
- 扩展 ERC20TransferService 支持池账户 fUSDT 转账
- 新增 API: POST /transfer/pool-account, GET /pool-accounts/:poolType/wallet-info
- 新增 Kafka topic 映射: pool_account.deposit.confirmed → pool_account.deposits
mining-wallet-service:
- TransactionType 枚举新增 BLOCKCHAIN_DEPOSIT/BLOCKCHAIN_WITHDRAW
- Seed: SHARE_POOL_A/B 初始余额改为0(完全靠链上充值)
- PoolAccountService 新增 blockchainDeposit()/blockchainWithdraw() 方法
- 新增 PoolAccountDepositConsumer 监听 Kafka 充值确认事件(Redis+DB 双重幂等)
- 新增 POST /pool-accounts/blockchain-withdraw 内部 API
mining-admin-service:
- 新增 PoolAccountController 代理到 wallet-service + blockchain-service
- GET /admin/pool-accounts/:walletName/balance(并行查询链下余额+链上钱包信息)
- POST /admin/pool-accounts/:walletName/blockchain-withdraw(先链上转账再记账)
- 新增配置: MINING_WALLET_SERVICE_URL, MINING_BLOCKCHAIN_SERVICE_URL, 池钱包用户名
frontend (mining-admin-web):
- 池账户 API 从 tradingClient (→trading-service) 改为 apiClient (→admin-service)
- 移除未使用的 tradingClient 和 axios 依赖
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 01:34:06 -08:00
hailin
4d2bcc7568
fix(mining-admin): 池账户钱包配置移到后端 .env,前端从 API 读取
...
做市商的 kavaWalletAddress 是后端 API 返回的,池账户应该一样。
- 后端 mining-blockchain-service/.env.example: 新增
BURN_POOL_WALLET_USERNAME/ADDRESS 和
MINING_POOL_WALLET_USERNAME/ADDRESS(同做市商钱包配置模式)
- 前端 .env.production: 移除 NEXT_PUBLIC_BURN/MINING_POOL 变量
- 前端 configs/page.tsx: 钱包地址改从 API 响应
(poolAccountBalance.walletAddress) 读取,未配置时显示提示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 00:14:38 -08:00
hailin
6dbb620e82
feat(mining-admin): 配置管理新增100亿销毁池和200万挖矿池账户
...
在配置管理页面新增两个池账户卡片,UI 风格对齐做市商管理中的
"现金余额(积分值)",仅支持区块链方式充值与提现:
- 100亿销毁池 (wallet-22fd661f, 2-of-3 门限)
地址: 0xdE2932D2A25e1698c1354A41e2e46B414C46F5a1
- 200万挖矿池 (wallet-974e78f5, 2-of-3 门限)
地址: 0x8BC9091375ae8ef43ae011F0f9bAf10e51bC9D59
具体改动:
- .env.production: 新增 BURN_POOL / MINING_POOL 钱包名和地址环境变量
- configs.api.ts: 新增 tradingClient、PoolAccountBalance 接口、
getPoolAccountBalance 和 poolAccountBlockchainWithdraw API
- use-configs.ts: 新增 usePoolAccountBalance (30s 刷新) 和
usePoolAccountBlockchainWithdraw hooks
- configs/page.tsx: 新增两个并排池账户 Card,包含余额展示、
QR 码充值弹窗、区块链提现弹窗(含 0x 地址校验)
后端需实现:
- GET /admin/pool-accounts/:walletName/balance
- POST /admin/pool-accounts/:walletName/blockchain-withdraw
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 00:02:32 -08:00
hailin
6f43408da5
fix(mining-admin-web): docker-compose 自动连接 rwa-2-network
...
mining-admin-web 需要同时连接 rwa-network 和 rwa-2-network,
以便通过 Next.js rewrite 直连 rwa-2-network 上的后端服务。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:43:06 -08:00
hailin
e99dc122ad
fix(nginx): API 请求改为代理到 Next.js 而非直连 mining-admin-service
...
nginx /api/ 直连 mining-admin-service:3023 会绕过 Next.js rewrite,
导致 /api/trading 和 /api/mining 无法路由到对应服务 (404)。
改为代理到 Next.js (3100), 由 rewrite 规则分发到各后端服务。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:36:55 -08:00
hailin
0b8c76f8b5
fix(mining-admin-web): Dockerfile 添加 build ARG 传入后端服务地址
...
next.config.js 的 rewrite 在 next build 时计算, Docker build 阶段
环境变量不可用导致 rewrite 使用 localhost 默认值 (容器内不可达)。
添加 ARG 将服务地址传入 build 阶段:
- NEXT_PUBLIC_API_URL -> mining-admin-service:3023
- TRADING_SERVICE_URL -> trading-service:3022
- MINING_SERVICE_URL -> mining-service:3021
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:32:29 -08:00
hailin
59efdb1f78
fix(mining-admin-web): 修复 API 请求超时和路由问题
...
问题:
- mining-admin-web 容器与后端服务在不同 Docker 网络, 无法通过公网 IP 回连 (hairpin NAT 失败)
- next.config.js 生产模式强制走 mapi.szaiai.com Kong 网关, 容器内无法访问
- client.ts 使用 NEXT_PUBLIC_API_URL 导致外部 URL 被 build 时内联到客户端包
- mining-service controller 有 mining/ 前缀, 直连模式 rewrite 丢失该前缀
修复:
- next.config.js: 改用 API_GATEWAY_URL 判断路由模式, 未设置则直连后端服务
- next.config.js: mining rewrite 保留 mining/ 前缀匹配 controller 路由
- client.ts: baseURL 固定为 /api, 所有请求统一走 Next.js rewrite 代理
- docker-compose.2.0.yml: 添加 TRADING_SERVICE_URL 和 MINING_SERVICE_URL 环境变量
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 01:14:19 -08:00
hailin
394f2529cd
fix(mining-admin-web): ensure public dir exists in Docker build
...
mkdir -p public before build so COPY --from=builder /app/public works
even without static assets.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 22:03:44 -08:00
hailin
ad51aa521f
fix(mining-admin-web): add public/.gitkeep to fix Docker build
...
Dockerfile COPY --from=builder /app/public fails when public dir is missing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 22:03:01 -08:00
hailin
88ad3ab53d
feat: 2.0 API 域名从 rwaapi.szaiai.com 迁移到 mapi.szaiai.com
...
- mining-admin-web: .env.production, next.config.js fallback URL
- mining-app: environment.dart baseUrl, update_config.dart checkUpdateUrl
- docker-compose.2.0.yml: mining-admin-service UPLOAD_BASE_URL
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 21:58:03 -08:00
hailin
f39fd52001
feat(c2c-bot): rename HOT_WALLET to C2C_BOT_WALLET and change dUSDT to 绿积分
...
- Rename env vars HOT_WALLET_ADDRESS/USERNAME to C2C_BOT_WALLET_ADDRESS/USERNAME
in mining-blockchain-service to avoid conflict with existing hot wallet
- Update docker-compose.2.0.yml with new env var names
- Change all "dUSDT" labels to "绿积分" on C2C Bot admin page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:40:45 -08:00
hailin
251e37f772
feat(c2c-bot): 添加C2C Bot管理页面,支持运行时开关和热钱包查看
...
- 新增C2C Bot管理页面(mining-admin-web):Bot开关、热钱包余额/地址/QR码、统计、订单历史
- 新增admin API端点(trading-service):status/enable/disable/orders
- 重构Bot调度器enabled为Redis驱动,支持运行时开关(多实例安全)
- C2cOrderRepository新增findBotPurchasedOrders和getBotStats查询方法
- 侧边栏添加C2C Bot导航入口
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:47:28 -08:00
hailin
bf772967f5
feat(mining): 批量补发30%分配到运营和总部账户,并添加交易筛选器
...
- 批量补发时将剩余30%分配到运营(12%)和总部(18%)系统账户
- SystemMiningAccountRepository.mine()支持referenceId/referenceType参数
- BatchMiningExecution新增operationAmount/headquartersAmount字段(含DB迁移)
- 三层架构(mining-service→admin-service→admin-web)全链路支持referenceType筛选
- 系统账户交易记录页面增加"全部/批量补发"筛选按钮
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:25:20 -08:00
hailin
bcfa5143e3
fix(mining-app): C2C订单详情页自动刷新,列表刷新间隔缩短
...
- 订单详情 Provider 活跃状态(PENDING/MATCHED/PAID)每10秒自动刷新
过期/完成/取消后停止刷新,节省资源
- 市场订单和我的订单列表刷新间隔从1分钟缩短到30秒
- 离开订单详情页时立即刷新市场和我的订单列表
确保过期恢复的新PENDING订单及时在列表中显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:23:21 -08:00
hailin
7f2479d995
fix(mining-app): 更新弹窗不可点击外部关闭,订单详情按买卖角色显示不同倒计时文案
...
- 更新提示弹窗 barrierDismissible 始终为 false,防止用户误触关闭
- 订单详情页根据买家/卖家角色显示不同的倒计时提示文案
- 买方:你需要在xx:xx内完成付款 / 等待卖方确认收款
- 卖方:对方将在xx:xx内完成付款 / 请在xx:xx内确认收款
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 01:58:53 -08:00
hailin
73a617b88c
fix(c2c): 单价和总金额单位改为绿积分,待付款提示改为对方
...
- C2C市场列表/接单弹窗中单价和总金额单位从"积分值"改为"绿积分"
- 订单详情待付款倒计时提示改为"对方将在xx:xx内完成付款"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 00:57:30 -08:00
hailin
64d998c7b3
fix(trading): 卖出金额超过可用积分股时提示并禁用确认按钮
...
- 新增 _getSellValidationError 校验方法
- 输入金额反算的积分股数量 > 可用余额时显示红色提示
- 校验失败时禁用"确认交易"按钮(灰色)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:29:33 -08:00
hailin
b8f8831516
feat: PENDING订单自动过期、接单显示余额、积分股金额输入
...
1. C2C PENDING订单24小时自动过期并解冻冻结资产
- 新增 DEFAULT_PENDING_TIMEOUT_HOURS 常量
- findExpiredOrders 支持 PENDING 状态查询
- expireOrder 处理 PENDING 卖单解冻
2. C2C接单对话框显示卖方可用余额
- 确认出售时显示用户账户可用积分值(非订单数量)
- 新增订单数量行,方便对比
3. 积分股兑换页面新增金额输入
- 卖出时显示金额输入框(积分值),与数量双向联动
- 输入数量自动计算金额,输入金额自动反算数量
- 全部按钮同步更新两个字段
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:15:47 -08:00
hailin
83c29f8540
fix(c2c): 订单详情单价和总金额标签改为绿积分
...
- 单价: "积分值" → "绿积分/积分值"
- 总金额: "积分值" → "绿积分"(买方实际支付的绿积分数量)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:46:26 -08:00
hailin
6ec829a804
fix(c2c): 隐藏订单详情页的买入/卖出标签
...
订单信息卡片中移除"买入"/"卖出"类型标签,
仅保留"我发布的"标记(当用户是maker时显示)。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:43:50 -08:00
hailin
a1c3657390
fix(c2c): 修复付款水单图片无法显示的问题
...
1. 后端: proofs 图片端点添加 @Public() 装饰器,
Image.network 无法携带 JWT token
2. 前端: paymentProofUrl 是相对路径,拼接 baseUrl
构建完整 URL 供 Image.network 加载
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:16:53 -08:00
hailin
f9835c388e
fix(c2c): 我的订单显示用户角色视角,修复详情页缓存
...
1. "我的"列表根据用户是maker/taker判断实际角色,
接买单(taker)时显示"卖出"而非"买入"
2. 订单详情 provider 改为 autoDispose,每次进入详情页
都从API获取最新数据,避免显示旧的数量和状态
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:02:04 -08:00
hailin
f1c99949ad
fix(c2c): 发布页绿积分输入框和预估卡片单位标签修正
...
- 第二个输入框后缀 "积分值" → "绿积分"
- 预估卡片第二行标签 "积分值数量" → "绿积分数量",单位 → "绿积分"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:50:32 -08:00
hailin
6bcc571453
revert(c2c): 还原C2C市场页资产概览为原始状态
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:25:03 -08:00
hailin
0ad1136e48
fix(c2c): 修正资产概览显示,C2C只涉及积分值不涉及积分股
...
左栏改回"可用积分值",右栏改为"冻结积分值",消除重复显示。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:23:59 -08:00
hailin
f60e3751b8
fix(c2c): 修复水单上传权限、手机号、卖方ID、资产显示
...
- Dockerfile: 用 su-exec 模式解决 Docker volume 权限问题
- JWT guard: 从 token 提取 phone 字段
- 订单详情: 新增卖方ID显示
- C2C市场页: 修复资产概览两列重复显示 availableCash,
改为左列显示可用积分股、右列显示可用积分值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:19:38 -08:00
hailin
e783661002
fix(c2c): 修复水单上传权限、手机号显示、卖方ID显示
...
- Dockerfile 预创建 /app/uploads/c2c-proofs 并设置正确权限
- JWT guard 从 token payload 提取 phone 字段(之前仅提取 accountSequence)
- 订单详情页订单信息组新增卖方ID显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:13:46 -08:00
hailin
ce173451f5
feat(c2c): 订单详情增强、付款水单上传、买单逻辑修复及schema对齐
...
- 订单详情页显示完整手机号和收款账号信息
- 新增付款水单上传功能(前后端全链路)
- 修复时间显示为本地时区格式
- 移除买单发布时的积分值余额验证(买方通过外部绿积分支付)
- 前端买单发布页隐藏余额卡片和"全部"按钮
- 补齐 Prisma migration 与 schema 差异(payment_proof_url、
bot_purchased索引、market_maker_deposits/withdraws表)
- docker-compose 新增 trading-uploads 卷用于水单持久化
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:54:05 -08:00
hailin
c5126187d2
feat(mining-app): 二维码扫描支持从相册选择图片识别
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:21:56 -08:00
hailin
286b82c63b
fix(c2c): 修复 RangeError 崩溃及订单详情灰色页面问题
...
根因:多处 [0] 访问空列表/空字符串导致 RangeError 崩溃
- api_client.dart: 后端错误 message 为空数组时 ?[0] 崩溃,改为安全检查
- c2c_order_detail_page.dart: nickname 和 phone 均为 null 时 name[0] 崩溃,
添加 isNotEmpty 检查和 '未知用户' 回退
- c2c_market_page.dart: makerNickname 为空字符串时 [0] 崩溃,添加 isNotEmpty 检查
这是 C2C 买方"待付款灰色页面"的根本原因:页面在渲染交易双方信息时
因空用户名 RangeError 崩溃,导致整个页面无法显示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:10:05 -08:00
hailin
8e63547a3e
fix(transfer): 修复积分股划转到分配账户失败问题
...
后端:
- transfer.service.ts: Error → BadRequestException,业务错误返回HTTP 400而非500
- transfer.controller.ts: Error → UnauthorizedException,正确返回HTTP 401
- 错误信息改为中文:余额不足、账户不存在等提示更明确
前端:
- asset_display.dart: 新增 tradingAvailableShares 计算属性(总可用 - 挖矿可用)
- trading_page.dart: 划转弹窗显示可用余额(扣除冻结)而非总余额
- trading_page.dart: 划转失败时显示后端具体错误信息而非通用提示
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:24:35 -08:00
hailin
0ffa875a85
fix(mining-app): 移除 debug applicationIdSuffix 修复升级后双图标
...
debug buildType 设置了 applicationIdSuffix = ".debug",导致
debug 包名为 com.rwadurian.mining_app.debug,release 包名为
com.rwadurian.mining_app。Android 将它们视为两个不同应用,
升级安装 release 包时不覆盖 debug 包,出现两个相同图标。
移除 applicationIdSuffix 后 debug/release 使用同一包名,
升级安装时会正确覆盖旧版本。versionNameSuffix 保留用于区分版本号。
注:用户手机上需手动卸载旧的 debug 包才能清除已存在的重复图标。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:57:34 -08:00
hailin
03cc5bc324
fix(mining-app): QR码解析加固 + debugPrint排查
...
- 清除不可见字符(BOM/零宽空格)
- 三级宽松解析:正则→Uri.parse→兜底phone=提取
- 添加 [QR_SCAN] 调试日志定位实际扫码值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:54:34 -08:00