ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TradingAgents-CN 模拟交易报告关联跳转修复指南:从“分析页“到“报告详情页“的闭环改造

TradingAgents-CN 模拟交易报告关联跳转修复指南:从“分析页“到“报告详情页“的闭环改造 TradingAgents-CN 模拟交易报告关联跳转修复指南从分析页到报告详情页的闭环改造【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN导读本文档聚焦 TradingAgents-CN 前端模拟交易模块Paper Trading中关联分析报告跳转链路的一次针对性修复当用户在订单记录或下单对话框中点击查看报告时页面由原先的单股分析页需重新输入股票代码改为报告详情页直接展示完整分析报告从而打通报告 → 交易 → 报告的完整闭环。读者将掌握该修复涉及的前端按钮文案、路由跳转函数params与query的选择、下单对话框改造以及后端报告查询对ObjectId / analysis_id / task_id三种 ID 的统一兼容机制并可直接在本地复现验证。问题描述点击关联分析却跳不到报告在模拟交易页面的订单记录中每笔由分析报告下单生成的订单会携带analysis_id关联字段。修复前订单列表关联分析列与下单对话框中的按钮均绑定goAnalysis()函数点击后通过router.push({ name: SingleAnalysis, query: { analysis_id, code } })跳转到单股分析页。用户期望的行为是点击查看分析按钮直接跳转到报告详情页查看完整的分析报告内容而实际发生的却是跳转到分析页面需要重新输入股票代码无法查看原始报告这一问题的根源在于订单中保存的analysis_id本身是报告的唯一标识但前端把查看报告和发起新分析两条语义混用导致路由目标错误、链路断裂。修复方案三处改动打通跳转链路1. 修改按钮文案按钮从查看分析改为查看报告语义更精确——用户点击的不是去重新分析而是回看生成这笔订单的那份报告。修改前el-button clickgoAnalysis(row.analysis_id, row.code) 查看分析 /el-button修改后el-button clickviewReport(row.analysis_id) 查看报告 /el-button2. 修改跳转函数核心差异在于路由参数的使用方式旧函数用query携带analysis_id与code跳转到分析页新函数用params携带id直接命中报告详情页路由。修改前// 跳转到分析页面 function goAnalysis(analysisId: string, stockCode?: string) { if (!analysisId) return const query: any { analysis_id: analysisId } if (stockCode) { query.code stockCode } router.push({ name: SingleAnalysis, query }) }修改后// 跳转到报告详情页 function viewReport(analysisId: string) { if (!analysisId) return router.push({ name: ReportDetail, params: { id: analysisId } }) }3. 修改下单对话框下单对话框顶部原有一行来自分析提示点击其中的按钮同样会跳到分析页本次一并改为来自分析报告按钮同样改为viewReport()。修改前template #title 来自分析span{{ analysis_id }}/span el-button clickgoAnalysis(analysis_id)查看分析/el-button /template修改后template #title 来自分析报告span{{ analysis_id }}/span el-button clickviewReport(analysis_id)查看报告/el-button /template数据流报告 → 交易 → 报告 的完整闭环修复后的完整交易链路如下1. 分析报告详情页 ↓ 点击应用到交易 2. 模拟交易页面自动填充 - 股票代码601288 - 买卖方向buy - 交易数量28900 - 分析IDabc123 ↓ 提交订单 3. 订单记录保存 analysis_id { code: 601288, side: buy, quantity: 28900, price: 6.67, analysis_id: abc123, ← 关联的分析报告ID created_at: 2025-10-04T03:40:53 } ↓ 点击查看报告 4. 报告详情页 ✅ - URL: /reports/view/abc123 - 显示完整的分析报告 - 包含所有分析模块在源码层面这一闭环的每一环都有对应实现证据报告详情页发起点在 ReportDetail.vue 中应用到交易按钮仅在报告包含买入/卖出建议时出现canApplyToTrading判断recommendation是否包含买入/卖出/buy/sell下单时通过paperApi.placeOrder({ code, side, quantity, analysis_id: currentReport.analysis_id || currentReport.id })把报告 ID 一并提交——注意这里对analysis_id缺失时回退到报告id的兜底逻辑。模拟交易页预填在 PaperTrading/index.vue 的onMounted中从路由query读取code / side / quantity / analysis_id并自动打开下单对话框analysis_id会暂存到order对象上submitOrder()提交时若有analysis_id则将其加入请求体。后端持久化在 paper.py 中PlaceOrderRequest模型声明了可选字段analysis_id: Optional[str] Noneapp/routers/paper.py第 24-30 行下单成功后analysis_id会被同时写入paper_orders与paper_trades两条集合记录。报告回读在 reports.py 中_build_report_query()构建{$or: [{analysis_id: ...}, {task_id: ...}, {_id: ObjectId(...)}]}查询直接支持用订单里的analysis_id反查报告。修复效果订单列表时间方向代码成交价数量状态关联分析11:40:53买入6012886.6728900已成交[查看报告]← 点击跳转到报告详情页22:29:39买入300750380.40100已成交-修复后订单列表中关联分析列的行为是订单携带analysis_id时渲染查看报告按钮无关联报告的订单如手动下单则显示灰色-占位符。该逻辑对应 PaperTrading/index.vue 第 195-203 行的实现el-table-column label关联分析 width120 template #default{ row } el-button v-ifrow.analysis_id sizesmall typeprimary link clickviewReport(row.analysis_id) 查看报告 /el-button span v-else stylecolor: #909399;-/span /template /el-table-column下单对话框┌─────────────────────────────────────────┐ │ 下市场单 │ ├─────────────────────────────────────────┤ │ ℹ️ 来自分析报告abc123 │ │ [查看报告] ← 点击跳转到报告详情页 │ │ │ │ 方向● 买入 ○ 卖出 │ │ 代码601288 │ │ 数量28900 │ │ │ │ [取消] [确认下单] │ └─────────────────────────────────────────┘当前仓库源码中下单对话框内该提示区还进一步扩展了正在加载分析摘要…与标的 / 模型建议上下文展示见 PaperTrading/index.vue 第 211-225 行在跳转之外为用户提供了更丰富的下单决策信息。技术实现细节路由配置报告详情页路由定义于 frontend/src/router/index.ts 第 225-233 行嵌套在/reports父路由下使用动态段view/:id{ path: view/:id, name: ReportDetail, component: () import(/views/Reports/ReportDetail.vue), meta: { title: 报告详情, requiresAuth: true } }因此完整的报告详情 URL 为/reports/view/:id。需要注意的是该路由带有requiresAuth: true元信息未登录访问会被拦截——这与模拟交易页面一致均属于登录后功能。跳转方式params 优于 query本次修复的关键技术点在于路由参数的选择// ✅ 正确使用 params router.push({ name: ReportDetail, params: { id: analysisId } }) // URL: /reports/view/abc123 // ❌ 错误使用 query router.push({ name: SingleAnalysis, query: { analysis_id: analysisId } }) // URL: /analysis/single?analysis_idabc123params会填充路由的动态段view/:id生成语义化的 RESTful 路径且直接由ReportDetail路由组件按id取参query则把参数附加为查询字符串仅适用于可选的、不影响路由匹配的附加信息值得注意params在 Vue Router 中只对命名路由name生效若使用路径字符串router.push(/reports/view/ id)也可达到同样效果——报告中列表页的viewReport()正是采用这种字符串拼接方式见 frontend/src/views/Reports/index.vue 第 303-306 行。后端支持多 ID 兼容查询后端 app/routers/reports.py 的_build_report_query()统一构建报告查询同时支持三种 ID 形式保证订单里的analysis_id一定能反查到报告# 统一构建报告查询支持 _id(ObjectId) / analysis_id / task_id 三种 def _build_report_query(report_id: str) - Dict[str, Any]: ors [ {analysis_id: report_id}, {task_id: report_id}, ] try: from bson import ObjectId ors.append({_id: ObjectId(report_id)}) except Exception: pass return {$or: ors}报告详情接口GET /api/reports/{report_id}/detail见 app/routers/reports.py 第 239-251 行直接复用该查询若在analysis_reports集合中未命中还会兜底从analysis_tasks.result中还原报告内容按task_id或result.analysis_id匹配并对stock_name、model_info、recommendation、confidence_score等字段做补充最后统一把 UTC 时间转换为 UTC8。因此从订单点击查看报告时无论传入的是analysis_id还是报告的_id后端都能正确返回完整报告。前端函数全景修复后 PaperTrading/index.vue 中的导航函数形成清晰分工第 468-506 行// 查看报告详情跳转到报告详情页 function viewReport(analysisId: string) { if (!analysisId) return // 跳转到报告详情页 router.push({ name: ReportDetail, params: { id: analysisId } }) } // 跳转到分析页面带股票代码和市场 function goAnalysisWithCode(stockCode: string) { if (!stockCode) return // 根据股票代码判断市场 const market getMarketByCode(stockCode) router.push({ name: SingleAnalysis, query: { stock: stockCode, market } }) } // 查看股票详情跳转到股票详情页 function viewStockDetail(stockCode: string) { if (!stockCode) return router.push({ name: StockDetail, params: { code: stockCode } }) }其中getMarketByCode()按代码格式判定市场6 位纯数字为 A 股、含.HK后缀为港股、其余按美股处理。原来的goAnalysis()跳转分析页在本页面已被移除不再需要。测试步骤测试 1从报告到交易再回到报告打开报告详情页http://localhost:5173/reports/view/abc123点击应用到交易验证跳转到模拟交易页面验证股票代码、方向、数量已填充验证下单对话框显示来自分析报告abc123提交订单验证订单提交成功验证订单记录中包含analysis_id点击查看报告验证跳转到报告详情页验证 URL 为/reports/view/abc123验证显示完整的分析报告测试 2下单对话框中的报告链接从报告详情页点击应用到交易验证下单对话框打开验证显示来自分析报告abc123点击查看报告按钮验证跳转到报告详情页验证 URL 为/reports/view/abc123测试 3无关联报告的订单手动下单不从报告页面跳转点击下市场单按钮手动输入股票代码和数量提交订单查看订单记录验证关联分析列显示-验证没有查看报告按钮补充说明本地联调时模拟交易页面默认开发端口为 5173Vite报告详情 URL 依赖前端路由view/:id的 history 模式配置同时应用到交易按钮仅在报告包含买卖建议recommendation含买入/卖出关键词时可见测试时请选择带明确投资建议的报告。修改文件清单前端文件frontend/src/views/PaperTrading/index.vue修改内容✅ 修改订单列表的关联分析列按钮文案查看分析→查看报告点击事件goAnalysis()→viewReport()✅ 修改下单对话框的提示标题来自分析→来自分析报告按钮文案查看分析→查看报告点击事件goAnalysis()→viewReport()✅ 新增viewReport()函数function viewReport(analysisId: string) { if (!analysisId) return router.push({ name: ReportDetail, params: { id: analysisId } }) }✅ 删除goAnalysis()函数不再需要后端已具备能力本次无需改动app/routers/paper.py下单请求模型PlaceOrderRequest已支持可选analysis_id字段下单时写入paper_orders与paper_trades查询时原样返回app/routers/reports.py_build_report_query()已支持ObjectId / analysis_id / task_id三种 ID报告详情、模块内容、删除、下载等接口均复用该查询。文档文件模拟交易页面改进修改内容✅ 更新关联分析章节✅ 更新数据流图✅ 更新测试步骤✅ 更新路由跳转示例修改前后对比与体验提升对比总览功能修改前修改后按钮文案查看分析查看报告 ✅跳转目标分析页面报告详情页 ✅URL/analysis/single?analysis_idxxx/reports/view/xxx✅用户体验需要重新输入代码直接查看完整报告 ✅用户体验提升✅一键查看报告点击按钮直接跳转到报告详情页✅完整报告内容显示所有分析模块市场分析、基本面分析、新闻分析等✅闭环流程报告 → 交易 → 报告形成完整闭环✅清晰的文案查看报告比查看分析更准确后续优化建议围绕报告与交易双向关联这一主题文档给出以下可选的演进方向报告预览在订单列表中悬停显示报告摘要快速预览投资建议和关键指标报告标签在订单记录中显示报告类型标签例如技术分析、基本面分析、综合分析报告评分显示报告的置信度评分帮助用户评估交易决策质量交易回溯在报告详情页显示基于该报告的所有交易统计交易成功率和盈亏情况其中交易回溯依赖后端paper_trades中已写入的analysis_id索引字段数据基础在当前实现中已经具备。相关文档模拟交易页面改进报告详情页报告API路由配置【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表