# TradeDetail.vue **路径**:`src/views/TradeDetail.vue` **路由**:`/trade-detail/:id`,name: `trade-detail` ## 功能用途 交易详情页,展示单个市场的分时图、订单簿、Comments/Top Holders/Activity 标签页,以及右侧交易组件(Buy/Sell、Merge/Split)。支持桌面端与移动端布局,移动端使用底部 Yes/No 栏 + 弹窗。 ## 核心能力 - 分时图:ECharts 渲染,支持 Past、时间粒度切换 - 订单簿:`OrderBook` 组件,通过 **ClobSdk** 对接 CLOB WebSocket 实时数据(全量快照、增量更新、成交推送);份额接口按 6 位小数传(1_000_000 = 1 share),`priceSizeToRows` 与 `mergeDelta` 会将 raw 值除以 `ORDER_BOOK_SIZE_SCALE` 转为展示值 - 交易:`TradeComponent`,传入 `market`、`initialOption`、`positions`(持仓数据) - 持仓列表:通过 `getPositionList` 获取当前市场持仓,传递给 `TradeComponent` 用于计算可合并份额 - 限价订单:通过 `getOrderList` 获取当前市场未成交限价单,支持撤单 - 移动端:底部栏 + `v-bottom-sheet` 嵌入 `TradeComponent` - Merge/Split:通过 `TradeComponent` 或底部菜单触发,成功后监听 `mergeSuccess`/`splitSuccess` 事件刷新持仓 - **401 权限错误**:加载详情失败时,通过 `useAuthError().formatAuthError` 统一提示「请先登录」或「权限不足」 ## 使用方式 - 从首页卡片点击进入,或直接访问 `/trade-detail/123` - 路由参数 `id` 为 Event ID,用于 `findPmEvent` ## 持仓刷新机制 - **下单成功**:`TradeComponent` 触发 `orderSuccess` → `onOrderSuccess()` 刷新持仓和未成交订单 - **合并成功**:`TradeComponent` 触发 `mergeSuccess` → `onMergeSuccess()` 刷新持仓,显示 toast 提示 - **拆分成功**:`TradeComponent` 触发 `splitSuccess` → `onSplitSuccess()` 刷新持仓 持仓刷新调用 `loadMarketPositions()`,通过 `/clob/position/getPositionList` 接口获取最新持仓数据,并根据 `tokenId` 匹配 Yes/No 方向。 ## 扩展方式 1. **订单簿**:已通过 `sdk/clobSocket.ts` 的 ClobSdk 对接 CLOB WebSocket,使用 **Yes/No token ID** 订阅 `price_size_all`、`price_size_delta`、`trade` 消息 2. **分时图**:可接入 WebSocket 推送的图表数据 3. **Comments**:对接评论接口,替换 placeholder 4. **Top Holders**:对接持仓接口 5. **Activity**:已对接 CLOB `trade` 消息,实时追加成交记录