/** * 综合结论报告组件 * * Phase 2A: 多步骤工作流执行完成后的综合结论展示 */ import React, { useState } from 'react'; import type { ConclusionReport as ConclusionReportType, WorkflowStepResult } from '../types'; interface ConclusionReportProps { report: ConclusionReportType; stepResults?: WorkflowStepResult[]; } interface StepResultDetailProps { stepSummary: ConclusionReportType['step_summaries'][0]; stepResult?: WorkflowStepResult; } const StepResultDetail: React.FC = ({ stepSummary, stepResult }) => { const [expanded, setExpanded] = useState(false); return (
setExpanded(!expanded)}>
步骤 {stepSummary.step_number} {stepSummary.tool_name} {stepSummary.p_value !== undefined && ( p = {stepSummary.p_value < 0.001 ? '< 0.001' : stepSummary.p_value.toFixed(4)} {stepSummary.is_significant && ' *'} )}
{stepSummary.summary}
{expanded && stepResult?.result && (
{/* 结果表格 */} {stepResult.result.result_table && (
{stepResult.result.result_table.headers.map((header, idx) => ( ))} {stepResult.result.result_table.rows.map((row, rowIdx) => ( {row.map((cell, cellIdx) => ( ))} ))}
{header}
{typeof cell === 'number' ? cell.toFixed(4) : cell}
)} {/* 图表 */} {stepResult.result.plots && stepResult.result.plots.length > 0 && (
{stepResult.result.plots.map((plot, idx) => (
{plot.title}
{plot.title}
))}
)} {/* 详细解释 */} {stepResult.result.interpretation && (
💡 解读:

{stepResult.result.interpretation}

)}
)}
); }; export const ConclusionReport: React.FC = ({ report, stepResults = [] }) => { const [showFullReport, setShowFullReport] = useState(true); const getStepResult = (stepNumber: number): WorkflowStepResult | undefined => { return stepResults.find(r => r.step_number === stepNumber); }; return (
{/* 报告头部 */}

📋 {report.title}

{new Date(report.generated_at).toLocaleString('zh-CN')}
{/* AI 总结摘要 - 始终显示 */}
🤖 AI 综合结论
{report.executive_summary}
{/* 主要发现 */} {report.key_findings.length > 0 && (
🎯 主要发现
    {report.key_findings.map((finding, idx) => (
  • {finding}
  • ))}
)} {/* 统计概览 */}
📊 {report.statistical_summary.total_tests} 统计检验
{report.statistical_summary.significant_results} 显著结果
🔬 {report.statistical_summary.methods_used.length} 分析方法
{/* 展开/折叠按钮 */} {/* 详细步骤结果 */} {showFullReport && (
📝 详细分析结果
{report.step_summaries.map((stepSummary) => ( ))}
)} {/* 建议 */} {report.recommendations.length > 0 && (
💡 建议
    {report.recommendations.map((rec, idx) => (
  • {rec}
  • ))}
)} {/* 局限性 */} {report.limitations.length > 0 && (
⚠️ 局限性
    {report.limitations.map((lim, idx) => (
  • {lim}
  • ))}
)} {/* 使用的方法列表 */}
使用的分析方法:
{report.statistical_summary.methods_used.map((method, idx) => ( {method} ))}
); }; export default ConclusionReport;