feat: 订单列表按市场分组功能重构

- 后端实现按市场分组的订单列表接口
  - 添加 MarketGroupedOrdersRequest、MarketOrderStats、MarketOrderGroup、MarketGroupedOrdersResponse DTO
  - 实现 getBuyOrderListGroupedByMarket 和 getSellOrderListGroupedByMarket 方法
  - 添加 POST /api/copy-trading/orders/grouped-by-market 接口
  - 支持分页和统计信息(订单数、总金额、盈亏、成交状态等)

- 前端重构:移除前端分组逻辑,改为调用后端分组接口
  - BuyOrdersTab 和 SellOrdersTab 使用后端分组接口
  - 移除前端 useMemo 分组计算逻辑
  - 添加分组数据状态管理和分页支持

- 分组默认折叠状态
  - 移除桌面端自动展开逻辑
  - 所有设备默认折叠,用户手动展开

- 修复 moneyline URL 逻辑
  - getPolymarketUrl 函数添加 isMoneyline 参数
  - 暂时不自动跳转到 moneyline 页面(需要后端提供标识)

- 多语言支持
  - 添加 markets 翻译键(中文、繁体中文、英文)
This commit is contained in:
WrBug
2026-01-08 13:19:52 +08:00
parent 2af2c0e86a
commit 3d5a923caf
11 changed files with 524 additions and 182 deletions
+45
View File
@@ -700,6 +700,51 @@ export interface OrderTrackingRequest {
buyOrderId?: string
}
/**
* 按市场分组的订单查询请求
*/
export interface MarketGroupedOrdersRequest {
copyTradingId: number
type: 'buy' | 'sell'
page?: number
limit?: number
}
/**
* 单个市场的订单统计信息
*/
export interface MarketOrderStats {
count: number
totalAmount: string // 总金额
totalPnl?: string // 总盈亏(买入订单未实现盈亏,此字段为空)
fullyMatched: boolean // 是否全部成交
fullyMatchedCount: number // 完全成交的订单数
partiallyMatchedCount: number // 部分成交的订单数
filledCount: number // 未成交的订单数
}
/**
* 单个市场分组的响应数据
*/
export interface MarketOrderGroup {
marketId: string
marketTitle?: string
marketSlug?: string
marketCategory?: string
stats: MarketOrderStats
orders: BuyOrderInfo[] | SellOrderInfo[] // 订单列表
}
/**
* 按市场分组的订单列表响应
*/
export interface MarketGroupedOrdersResponse {
list: MarketOrderGroup[]
total: number // 市场总数
page: number
limit: number
}
/**
* 被过滤订单信息
*/