"use client" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Progress } from "@/components/ui/progress" import { TrendingUp } from "lucide-react" interface DimensionScore { percentage: number rawScore: number maxScore: number } interface CreativeAnalysisProps { score: number dimensionScores: { innovation: DimensionScore imagination: DimensionScore flexibility: DimensionScore originality: DimensionScore } creativityLevel: { level: string description: string suggestion: string } totalScore?: number maxScore?: number } export function CreativeAnalysis({ score, dimensionScores, creativityLevel, totalScore, maxScore }: CreativeAnalysisProps) { // 計算各維度分數 const categoryResults = [ { category: 'innovation', name: '創新能力', score: dimensionScores.innovation.percentage, rawScore: dimensionScores.innovation.rawScore, maxRawScore: dimensionScores.innovation.maxScore }, { category: 'imagination', name: '想像力', score: dimensionScores.imagination.percentage, rawScore: dimensionScores.imagination.rawScore, maxRawScore: dimensionScores.imagination.maxScore }, { category: 'flexibility', name: '靈活性', score: dimensionScores.flexibility.percentage, rawScore: dimensionScores.flexibility.rawScore, maxRawScore: dimensionScores.flexibility.maxScore }, { category: 'originality', name: '原創性', score: dimensionScores.originality.percentage, rawScore: dimensionScores.originality.rawScore, maxRawScore: dimensionScores.originality.maxScore } ] return (
{/* 創意能力評估 */} 創意能力評估

創意能力評估

基於您的測試結果,您在創意思維方面表現為「{creativityLevel.level}」水平。 {score >= 75 && "您具備出色的創新思維能力,善於從不同角度思考問題,能夠產生獨特的想法和解決方案。"} {score >= 50 && score < 75 && "您具有一定的創造性思維潛力,建議多參與創新活動,培養發散性思維。"} {score < 50 && "建議您多接觸創新思維訓練,培養好奇心和探索精神,提升創造性解決問題的能力。"}

{/* 能力維度分析 */} 能力維度分析
{categoryResults.map((category) => (

{category.name}

{category.score}分

{category.rawScore} / {category.maxRawScore} 分

))}
{/* 創意能力分析圖表 */} 創意能力分析圖表
{/* 能力維度雷達圖 */}

能力維度雷達圖

{/* Radar Chart Background */} {/* Grid circles */} {/* Grid lines - 4 axes for 4 dimensions */} {[0, 90, 180, 270].map((angle, index) => { const x1 = 100 + 60 * Math.cos((angle - 90) * Math.PI / 180) const y1 = 100 + 60 * Math.sin((angle - 90) * Math.PI / 180) return ( ) })} {/* Data points and area */} {categoryResults.map((category, index) => { const angle = (index * 90 - 90) * Math.PI / 180 const radius = (category.score / 100) * 60 const x = 100 + radius * Math.cos(angle) const y = 100 + radius * Math.sin(angle) // Calculate label position - more space for text let labelRadius = 75 let labelX = 100 + labelRadius * Math.cos(angle) let labelY = 100 + labelRadius * Math.sin(angle) // Special adjustments for imagination and originality if (angle === 0) { // Right - 想像力 labelRadius = 70 labelX = 100 + labelRadius * Math.cos(angle) labelY = 100 + labelRadius * Math.sin(angle) } else if (angle === 180 * Math.PI / 180) { // Left - 原創性 labelRadius = 70 labelX = 100 + labelRadius * Math.cos(angle) labelY = 100 + labelRadius * Math.sin(angle) } // Adjust text anchor based on position let textAnchor: "middle" | "start" | "end" = "middle" let dominantBaseline: "middle" | "hanging" | "alphabetic" = "middle" if (angle === -90 * Math.PI / 180) { // Top dominantBaseline = "hanging" } else if (angle === 90 * Math.PI / 180) { // Bottom dominantBaseline = "alphabetic" } else if (angle === 0) { // Right textAnchor = "start" } else if (angle === 180 * Math.PI / 180) { // Left textAnchor = "end" } return ( {/* Data point */} {/* Label - positioned closer to the chart */} {category.name} {/* Score label - positioned above the data point */} {category.score}% ) })} {/* Area fill */} { const angle = (index * 90 - 90) * Math.PI / 180 const radius = (category.score / 100) * 60 const x = 100 + radius * Math.cos(angle) const y = 100 + radius * Math.sin(angle) return `${x},${y}` }).join(' ')} fill="rgba(59, 130, 246, 0.2)" stroke="#3b82f6" strokeWidth="2" />
{/* Legend */}
{categoryResults.map((category) => (
{category.name}
))}
{/* Dimension Details */}
{categoryResults.map((category) => { const getDescription = (categoryName: string) => { switch (categoryName) { case '創新能力': return '善於提出新想法,勇於嘗試不同的解決方案' case '想像力': return '能夠從不同角度思考,具有豐富的創意思維' case '靈活性': return '適應變化能力強,能夠靈活調整思維方式' case '原創性': return '具有獨特的創見,能夠產生原創性想法' default: return '' } } const getLevel = (score: number) => { if (score >= 80) return { text: '優秀', color: 'text-green-600' } if (score >= 60) return { text: '良好', color: 'text-blue-600' } if (score >= 40) return { text: '一般', color: 'text-yellow-600' } return { text: '待提升', color: 'text-red-600' } } const level = getLevel(category.score) return (
{category.name}
{category.score}% {level.text}

{getDescription(category.name)}

) })}
) }