/**
* 方法学评估报告组件
*/
import { XCircle, AlertTriangle, CheckCircle } from 'lucide-react';
import type { MethodologyReviewResult } from '../types';
import ScoreRing from './ScoreRing';
interface MethodologyReportProps {
data: MethodologyReviewResult;
}
export default function MethodologyReport({ data }: MethodologyReportProps) {
const getSeverityStyle = (severity: 'major' | 'minor') => {
return severity === 'major'
? { border: 'border-red-200', bg: 'bg-red-50', icon: , label: '严重' }
: { border: 'border-amber-200', bg: 'bg-amber-50', icon: , label: '轻微' };
};
const getOverallStatus = () => {
if (data.overall_score >= 80) return { label: '通过', color: 'text-green-700', bg: 'bg-green-50' };
if (data.overall_score >= 60) return { label: '存疑', color: 'text-amber-700', bg: 'bg-amber-50' };
return { label: '不通过', color: 'text-red-700', bg: 'bg-red-50' };
};
const status = getOverallStatus();
return (
{/* 总分卡片 */}
= 80 ? 'border-green-200' :
data.overall_score >= 60 ? 'border-amber-200' : 'border-red-200'
}`}>
方法学评估
{status.label}
{data.summary}
{/* 分项详情 */}
{data.parts.map((part, partIndex) => (
{part.part}
{part.score}分
{part.issues.length === 0 ? (
无问题
) : (
{part.issues.length}个问题
)}
{part.issues.length > 0 ? (
{part.issues.map((issue, issueIndex) => {
const severity = getSeverityStyle(issue.severity);
return (
{severity.icon}
{issue.type}
{severity.label}
{issue.description}
{issue.location && (
位置:{issue.location}
)}
{issue.suggestion && (
)}
);
})}
) : (
该部分未发现问题
)}
))}
);
}