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
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
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
8c31dee000
fix(c2c): 修复买方待付款页面灰色无法操作问题
...
根因: c2c_order_model.dart 的 _parsePaymentMethod 不识别 GREEN_POINTS,
导致 paymentMethod=null → hasPaymentInfo=false → 收款信息卡片隐藏 → 页面不可操作
前端修复:
- C2cPaymentMethod 枚举增加 greenPoints,解析器支持 GREEN_POINTS
- 支持逗号分隔的多支付方式字符串(取第一个作为主要方式)
- 订单详情页增加绿积分图标和卖方 Kava 地址显示(买方可复制)
后端修复:
- takeOrder() 接买单时自动获取卖方 Kava 地址写入 sellerKavaAddress
- 买方在订单详情页可看到卖方 Kava 地址用于转绿积分
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:41:14 -08:00
hailin
9e83127113
fix(mining-app): C2C"我的"列表待接单订单增加取消按钮
...
在我的订单卡片上直接显示取消按钮(PENDING状态),
弹出确认对话框后调用 cancelOrder API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:46:50 -08:00
hailin
7d548dac4e
fix(mining-app): C2C接单验证收款信息 + 数字显示优化
...
- 接BUY单时验证收款账号和姓名必填,仅绿积分时自动使用账户ID
- 所有C2C价格/数量/金额显示改用formatCompact,去掉多余小数位
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:31:08 -08:00
hailin
b50091eb1e
fix(mining-app): C2C 发布页"积分值金额"改为"绿积分数量"
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:09:17 -08:00
hailin
a0750fbd42
fix(mining-app): C2C 发布页单价单位改为"绿积分/积分值"
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:07:31 -08:00
hailin
94d4524ee3
fix(c2c): 积分股→积分值,C2C交易对象修正为积分值(cash)
...
C2C交易的产品是积分值,支付方式是绿积分(外部1.0系统),与积分股无关。
前端:
- c2c_publish_page: 余额卡、数量输入、提示文案、确认弹窗全部改为积分值
- c2c_market_page: 余额概览(availableShares→availableCash)、订单数量标签、接单弹窗
- c2c_order_detail_page: 订单详情、划转提示、确认收款弹窗
后端 c2c.service.ts:
- createOrder SELL: freezeShares→freezeCash
- takeOrder BUY(taker=卖方): freezeShares→freezeCash
- takeOrder SELL(taker=买方): 移除冻结(买方通过外部支付绿积分)
- cancelOrder SELL: unfreezeShares→unfreezeCash
- expireOrder: unfreezeShares→unfreezeCash,SELL不再解冻taker
- executeTransfer: 统一BUY/SELL为单向积分值划转,assetType改为CASH
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 12:41:23 -08:00
hailin
187b82e9ac
feat(c2c): 修复6项C2C交易问题 (#11-#16)
...
- #11 : 价格固定1:1,最小交易数量为1
- #12 : BUY买单不再冻结买方积分值(绿积分通过外部1.0系统支付)
- #13 : 支持部分成交,taker可指定数量,剩余自动拆分为新PENDING订单
- #14 : 发布页双向输入,积分股数量与积分值金额1:1联动
- #15 : 接BUY单时弹出收款信息输入(收款方式、账号、姓名)
- #16 : BUY单创建时验证积分值余额但不冻结
后端: cancelOrder/expireOrder/executeTransfer 均按BUY/SELL分别处理
前端: 发布页价格只读、市场页接单对话框增加数量和收款输入
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 11:36:57 -08:00
hailin
263f1ecf8e
feat(c2c): 卖单自动获取账户ID和Kava地址,移除手动输入
...
后端创建卖单时自动从 identity-service 获取卖家 Kava 地址并存入订单,
前端发布页面自动展示 accountSequence(只读),不再需要手动输入1.0系统ID。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:08:56 -08:00
hailin
0c0750ce93
feat(c2c): 前端添加 Bot 自动购买信息展示
...
- C2cOrderModel 添加 botPurchased/sellerKavaAddress/paymentTxHash 字段
- 订单详情页新增 Bot 支付信息卡片,显示 dUSDT 交易哈希
- 支持复制 Kava 地址和交易哈希
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 07:26:36 -08:00
hailin
21e536d829
fix(ui): 移除所有人民币符号,统一使用积分值单位
...
- asset_page: 总资产估值改为显示"积分值"后缀
- asset_page: 估值占位符移除¥符号
- c2c_publish_page: 交易总额、单价、总额改为积分值单位
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 04:19:52 -08:00
hailin
d31bfc4221
feat(c2c): 修改C2C交易为积分值并添加绿积分支付方式
...
- C2C交易的商品从积分股改为积分值
- 添加绿积分作为默认且不可取消的支付方式
- 添加1.0系统ID输入框(绿积分支付必填)
- 支持多种支付方式同时选择
- 更新交易提示说明
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:07:35 -08:00
hailin
61203d1baf
feat(frontend): extend dark mode support to more pages
...
- Update asset_page.dart with full dark mode support
- Update c2c_market_page.dart with full dark mode support
- Update login_page.dart with full dark mode support
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 19:21:40 -08:00
hailin
af339b19b9
feat(c2c): 完善C2C场外交易功能 - 收款信息与订单超时处理
...
## 后端更新
### Prisma Schema (0008_add_c2c_orders migration)
- 新增 C2cPaymentMethod 枚举 (ALIPAY/WECHAT/BANK)
- C2cOrder 模型新增字段:
- 收款信息:paymentMethod, paymentAccount, paymentQrCode, paymentRealName
- 超时配置:paymentTimeoutMinutes (默认15分钟), confirmTimeoutMinutes (默认60分钟)
- 截止时间:paymentDeadline, confirmDeadline
- 新增索引优化超时查询
### API层
- c2c.dto.ts: 新增收款信息和超时配置字段
- c2c.controller.ts: 新增C2C控制器,支持完整的订单生命周期管理
### 业务层
- c2c.service.ts:
- createOrder: 卖单必须提供收款信息验证
- takeOrder: 接单时自动设置付款截止时间
- confirmPayment: 确认付款时设置确认收款截止时间
- processExpiredOrders/expireOrder: 处理超时订单(释放冻结资产)
- c2c-expiry.scheduler.ts: 每分钟执行超时订单检查(带分布式锁)
### 数据层
- c2c-order.repository.ts: 新增 findExpiredOrders 方法
- trading-account.repository.ts: 新增 unfreezeShares/unfreezeCash 方法
## 前端更新
### 数据模型
- c2c_order_model.dart:
- 新增 C2cPaymentMethod 枚举
- 新增收款信息和超时相关字段
- 新增辅助方法:paymentMethodText, hasPaymentInfo, paymentRemainingSeconds, confirmRemainingSeconds
### API层
- trading_remote_datasource.dart: createC2cOrder/takeC2cOrder 支持收款信息参数
### 状态管理
- c2c_providers.dart: createOrder/takeOrder 方法支持收款信息参数
### UI层
- c2c_publish_page.dart:
- 新增收款方式选择器 (支付宝/微信/银行卡)
- 新增收款账号和收款人姓名输入框
- 卖单发布时验证收款信息必填
- 确认对话框显示收款信息摘要
- c2c_order_detail_page.dart:
- 新增收款信息卡片展示(买家视角/卖家视角区分)
- 新增倒计时进度条显示(付款/确认收款截止时间)
- 剩余时间<5分钟时高亮警告
- 支持复制收款账号
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:17:22 -08:00
hailin
20a90fce4c
feat(mining-app): add professional kline chart with technical indicators
...
- Add KlineChartWidget with pinch-to-zoom, fullscreen mode
- Implement MA, EMA, BOLL indicators for main chart
- Implement MACD, KDJ, RSI indicators for sub chart
- Add volume display with crossline info
- Add C2C trading feature with market/publish/detail pages
- Add P2P transfer functionality (send/receive shares)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:51:00 -08:00