/** * 一键匹配汇总卡片组件 * 遵循前端开发规范的组件设计原则 */ import React from 'react'; import { CheckCircle, XCircle, Target, Clock, Film, Users, TrendingUp, TrendingDown, BarChart3, } from 'lucide-react'; import { BatchMatchingResult, formatDuration, calculateSuccessRate, } from '../types/batchMatching'; interface BatchMatchingSummaryCardProps { result: BatchMatchingResult; className?: string; } export const BatchMatchingSummaryCard: React.FC = ({ result, className = '', }) => { const successRate = calculateSuccessRate(result.successful_matches, result.total_bindings); const getOverallStatusColor = () => { if (result.failed_matches === 0 && result.successful_matches > 0) { return 'border-green-200 bg-green-50'; } else if (result.successful_matches > 0 && result.failed_matches > 0) { return 'border-yellow-200 bg-yellow-50'; } else { return 'border-red-200 bg-red-50'; } }; const getOverallStatusIcon = () => { if (result.failed_matches === 0 && result.successful_matches > 0) { return ; } else if (result.successful_matches > 0 && result.failed_matches > 0) { return ; } else { return ; } }; const getOverallStatusText = () => { if (result.failed_matches === 0 && result.successful_matches > 0) { return '全部成功'; } else if (result.successful_matches > 0 && result.failed_matches > 0) { return '部分成功'; } else { return '全部失败'; } }; return (
{/* 头部状态 */}
{getOverallStatusIcon()}

{getOverallStatusText()}

一键匹配结果汇总

{successRate}%
成功率
{/* 核心统计 */}
{result.successful_matches}
成功
{result.failed_matches}
失败
{result.total_bindings}
总数
{formatDuration(result.total_duration_ms)}
耗时
{/* 详细统计 */}

匹配详情

匹配片段: {result.summary.total_segments_matched}
使用素材: {result.summary.total_materials_used}
使用模特: {result.summary.total_models_used}
平均成功率: {Math.min(result.summary.average_success_rate * 100, 100).toFixed(1)}%
{result.summary.best_matching_template && (
最佳模板: {result.summary.best_matching_template}
)} {result.summary.worst_matching_template && (
最差模板: {result.summary.worst_matching_template}
)}
{/* 建议和提示 */} {result.failed_matches > 0 && (

优化建议

{result.failed_matches} 个模板匹配失败。建议检查模板配置、素材分类情况或增加更多符合条件的素材。

)} {result.successful_matches === result.total_bindings && result.total_bindings > 0 && (

匹配完美!

所有模板都成功匹配,您的项目素材配置非常完善。

)}
); };