From 08d9f11b1c298cb31795e83624557c236ce0c361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B3=E4=BD=A9=E5=BA=AD?= Date: Sat, 4 Oct 2025 22:32:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E7=82=BA=E4=BD=BF=E7=94=A8=E8=80=85?= =?UTF-8?q?=E7=9C=8B=E4=B8=8D=E5=88=B0=E7=AD=94=E9=A1=8C=E7=B5=90=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/results/combined/page.tsx | 483 +++------------------------- app/results/creative/page.tsx | 578 ++++------------------------------ app/results/logic/page.tsx | 204 ++---------- 3 files changed, 129 insertions(+), 1136 deletions(-) diff --git a/app/results/combined/page.tsx b/app/results/combined/page.tsx index 495db0e..ba15dab 100644 --- a/app/results/combined/page.tsx +++ b/app/results/combined/page.tsx @@ -1,36 +1,12 @@ "use client" import { useEffect, useState } from "react" -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { Card, CardContent } from "@/components/ui/card" import { Button } from "@/components/ui/button" -import { Badge } from "@/components/ui/badge" -import { Progress } from "@/components/ui/progress" -import { Brain, Lightbulb, BarChart3, Home, RotateCcw, TrendingUp, Target, Award, Printer, Share2 } from "lucide-react" +import { BarChart3, Home } from "lucide-react" import Link from "next/link" -import { getRecommendations } from "@/lib/utils/score-calculator" import { useAuth } from "@/lib/hooks/use-auth" -interface LogicQuestion { - id: number - question: string - option_a: string - option_b: string - option_c: string - option_d: string - option_e: string - correct_answer: 'A' | 'B' | 'C' | 'D' | 'E' - explanation?: string - created_at: string -} - -interface CreativeQuestion { - id: number - statement: string - category: 'innovation' | 'imagination' | 'flexibility' | 'originality' - is_reverse: boolean - created_at: string -} - interface CombinedTestResults { type: string logicScore: number @@ -54,8 +30,6 @@ interface CombinedTestResults { export default function CombinedResultsPage() { const { user } = useAuth() const [results, setResults] = useState(null) - const [logicQuestions, setLogicQuestions] = useState([]) - const [creativeQuestions, setCreativeQuestions] = useState([]) const [isLoading, setIsLoading] = useState(true) useEffect(() => { @@ -63,58 +37,44 @@ export default function CombinedResultsPage() { if (!user) return try { - // 從資料庫獲取最新的綜合測試結果 + // 從資料庫獲取最新的綜合測驗結果 const response = await fetch(`/api/test-results/combined?userId=${user.id}`) const data = await response.json() if (data.success && data.data.length > 0) { - // 取最新的結果 - const latestResult = data.data[0] + // 按創建時間排序,取最新的結果 + const sortedResults = data.data.sort((a: any, b: any) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()) + const latestResult = sortedResults[0] - // 轉換為前端需要的格式 setResults({ - type: "combined", - logicScore: latestResult.logic_score, - creativityScore: latestResult.creativity_score, - overallScore: latestResult.overall_score, - level: latestResult.level, - description: latestResult.description || "", - breakdown: { - logic: latestResult.logic_score, - creativity: latestResult.creativity_score, - balance: latestResult.balance_score + type: latestResult.type, + logicScore: latestResult.logicScore || 0, + creativityScore: latestResult.creativityScore || 0, + overallScore: latestResult.overallScore || latestResult.score || 0, + level: latestResult.level || "待評估", + description: latestResult.description || "測試完成", + breakdown: latestResult.breakdown || { + logic: latestResult.logicScore || 0, + creativity: latestResult.creativityScore || 0, + balance: latestResult.balance || 0 }, - logicAnswers: latestResult.logic_breakdown?.answers || {}, - creativeAnswers: latestResult.creativity_breakdown?.answers || {}, - logicCorrect: latestResult.logic_breakdown?.correct || 0, - creativityTotal: latestResult.creativity_breakdown?.total || 0, - creativityMaxScore: latestResult.creativity_breakdown?.maxScore || 0, - completedAt: latestResult.completed_at + logicAnswers: latestResult.logicAnswers || {}, + creativeAnswers: latestResult.creativeAnswers || {}, + logicCorrect: latestResult.logicCorrect || 0, + creativityTotal: latestResult.creativityTotal || 0, + creativityMaxScore: latestResult.creativityMaxScore || 100, + completedAt: latestResult.created_at }) } else { - // 如果沒有資料庫結果,回退到 localStorage + // 如果沒有資料庫結果,嘗試從 localStorage 載入 const savedResults = localStorage.getItem("combinedTestResults") if (savedResults) { setResults(JSON.parse(savedResults)) } } - - // Load questions from database - const logicResponse = await fetch('/api/logic-questions') - const logicData = await logicResponse.json() - - const creativeResponse = await fetch('/api/creative-questions') - const creativeData = await creativeResponse.json() - - if (logicData.success && creativeData.success) { - setLogicQuestions(logicData.questions) - setCreativeQuestions(creativeData.questions) - } else { - console.error('Failed to load questions:', logicData.error || creativeData.error) - } } catch (error) { - console.error('Error loading data:', error) - // 回退到 localStorage + console.error('Error loading combined test results:', error) + // 如果 API 失敗,嘗試從 localStorage 載入 const savedResults = localStorage.getItem("combinedTestResults") if (savedResults) { setResults(JSON.parse(savedResults)) @@ -155,381 +115,40 @@ export default function CombinedResultsPage() { ) } - const recommendations = getRecommendations(results.logicScore, results.creativityScore) - - const getScoreColor = (score: number) => { - if (score >= 90) return "text-green-600" - if (score >= 80) return "text-blue-600" - if (score >= 70) return "text-yellow-600" - if (score >= 60) return "text-orange-600" - return "text-red-600" - } - - const getLogicLevel = (score: number) => { - if (score >= 100) return { - level: "邏輯巔峰者", - color: "bg-purple-600", - description: "近乎完美的邏輯典範!你像一台「推理引擎」,嚴謹又高效,幾乎不受陷阱干擾。", - suggestion: "多和他人分享你的思考路徑,能幫助團隊整體邏輯力提升。" - } - if (score >= 80) return { - level: "邏輯大師", - color: "bg-blue-500", - description: "你的思維如同精密儀器,能快速抓住題目關鍵,並做出有效推理。常常是團隊中「冷靜的分析者」。", - suggestion: "挑戰更高層次的難題,讓你的邏輯力更加精進。" - } - if (score >= 60) return { - level: "邏輯高手", - color: "bg-green-500", - description: "邏輯清晰穩定,大部分情境都能正確判斷。偶爾會因粗心錯過陷阱。", - suggestion: "在思維縝密之餘,更加留心細節,就能把錯誤率降到最低。" - } - if (score >= 30) return { - level: "邏輯學徒", - color: "bg-yellow-500", - description: "已經抓到一些邏輯規律,能解決中等難度的問題。遇到複雜情境時,仍可能卡關。", - suggestion: "嘗試將問題拆解成小步驟,就像組裝樂高,每一塊拼好,答案就自然浮現。" - } - return { - level: "邏輯探險新手", - color: "bg-red-500", - description: "還在邏輯森林的入口徘徊。思考時可能忽略細節,或被陷阱誤導。", - suggestion: "多練習經典邏輯題,像是在拼拼圖般,慢慢建立清晰的分析步驟。" - } - } - - const getCreativityLevel = (score: number) => { - if (score >= 90) return { - level: "創意巔峰者", - color: "bg-purple-600", - description: "創意力近乎無窮,你是團隊裡的靈感源泉,總能帶來突破性的想法。", - suggestion: "你不只創造靈感,更能影響他人。如果能結合執行力,你將成為真正的創新領袖。" - } - if (score >= 75) return { - level: "創意引領者", - color: "bg-blue-500", - description: "你是靈感的推動者!總是能在團體中主動拋出新想法,激發別人跟進。", - suggestion: "持續累積學習,讓你的靈感不僅是點子,而能帶動真正的行動。" - } - if (score >= 55) return { - level: "創意實踐者", - color: "bg-green-500", - description: "靈感已經隨手可得,在團體中也常被認為是「有創意的人」。", - suggestion: "再給自己一點勇氣,不要害怕挑戰慣例,你的創意將更有力量。" - } - if (score >= 35) return { - level: "創意開拓者", - color: "bg-yellow-500", - description: "你其實有自己的想法,但有時習慣跟隨大多數人的步伐。", - suggestion: "試著勇敢說出腦中天馬行空的念頭,你會發現,這些點子或許就是團隊需要的突破口。" - } - return { - level: "創意萌芽者", - color: "bg-red-500", - description: "還在創意旅程的起點。雖然暫時表現平淡,但這正是無限潛力的開端!", - suggestion: "觀察生活小事,或閱讀不同領域的內容,讓靈感一點一滴積累。" - } - } - return ( -
- {/* Header */} -
-
-
-
-
- -
-
-

綜合能力測試結果

-

- 完成時間:{new Date(results.completedAt).toLocaleString("zh-TW")} -

-
-
-
- - -
+
+ + +
+
-
-
- -
-
- {/* Overall Score */} - - -
- {results.overallScore} -
- 綜合評估完成! -
- - {results.level} - -
-

{results.description}

-
- - -
-
-
- {results.logicScore} -
-
邏輯思維
-
-
-
- {results.creativityScore} -
-
創意能力
-
-
-
- {results.breakdown.balance} -
-
能力平衡
-
-
-
-
- - {/* Detailed Breakdown */} -
- {/* Logic Results */} - - - - - 邏輯思維測試 - - - -
-
- 得分 - - {results.logicScore} - -
- -
-
-
{results.logicCorrect}
-
答對題數
-
-
-
{logicQuestions.length}
-
總題數
-
-
- - {/* Logic Level Assessment */} - {(() => { - const logicLevel = getLogicLevel(results.logicScore) - return ( -
-
-
- {logicLevel.level} -
-

- {logicLevel.description} -

-
- 👉 建議: - {logicLevel.suggestion} -
-
- ) - })()} -
-
-
- - {/* Creative Results */} - - - - - 創意能力測試 - - - -
-
- 得分 - - {results.creativityScore} - -
- -
-
-
{results.creativityTotal}
-
原始得分
-
-
-
{results.creativityMaxScore}
-
滿分
-
-
- - {/* Creative Level Assessment */} - {(() => { - const creativityLevel = getCreativityLevel(results.creativityScore) - return ( -
-
-
- {creativityLevel.level} -
-

- {creativityLevel.description} -

-
- 👉 建議: - {creativityLevel.suggestion} -
-
- ) - })()} -
-
-
-
- - {/* Ability Analysis */} - - - - - 能力分析 - - - -
-
- -

邏輯思維

-
- {results.logicScore}分 -
- -

- {results.logicScore >= 80 ? "表現優秀" : results.logicScore >= 60 ? "表現良好" : "需要提升"} -

-
- -
- -

創意能力

-
- {results.creativityScore}分 -
- -

- {results.creativityScore >= 80 - ? "表現優秀" - : results.creativityScore >= 60 - ? "表現良好" - : "需要提升"} -

-
- -
- -

能力平衡

-
- {results.breakdown.balance}分 -
- -

- {results.breakdown.balance >= 80 - ? "非常均衡" - : results.breakdown.balance >= 60 - ? "相對均衡" - : "發展不均"} -

-
-
-
-
- - {/* Recommendations */} - {recommendations.length > 0 && ( - - - - - 發展建議 - - - -
- {recommendations.map((recommendation, index) => ( -
-
- {index + 1} -
-

{recommendation}

-
- ))} -
-
-
- )} - - {/* Actions */} -
- - -
-
-
+ +
) -} +} \ No newline at end of file diff --git a/app/results/creative/page.tsx b/app/results/creative/page.tsx index 9f352c6e..b5392bc 100644 --- a/app/results/creative/page.tsx +++ b/app/results/creative/page.tsx @@ -1,13 +1,10 @@ "use client" import { useEffect, useState } from "react" -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { Card, CardContent } from "@/components/ui/card" import { Button } from "@/components/ui/button" -import { Badge } from "@/components/ui/badge" -import { Progress } from "@/components/ui/progress" -import { Lightbulb, Home, RotateCcw, TrendingUp, Printer, Share2 } from "lucide-react" +import { Lightbulb, Home } from "lucide-react" import Link from "next/link" -import { creativeQuestions } from "@/lib/questions/creative-questions" import { useAuth } from "@/lib/hooks/use-auth" interface CreativeTestResults { @@ -17,18 +14,11 @@ interface CreativeTestResults { maxScore: number answers: Record completedAt: string - dimensionScores?: { - innovation: { percentage: number, rawScore: number, maxScore: number } - imagination: { percentage: number, rawScore: number, maxScore: number } - flexibility: { percentage: number, rawScore: number, maxScore: number } - originality: { percentage: number, rawScore: number, maxScore: number } - } } export default function CreativeResultsPage() { const { user } = useAuth() const [results, setResults] = useState(null) - const [questions, setQuestions] = useState([]) const [isLoading, setIsLoading] = useState(true) useEffect(() => { @@ -45,28 +35,16 @@ export default function CreativeResultsPage() { const sortedResults = data.data.sort((a: any, b: any) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()) const latestResult = sortedResults[0] - // 獲取題目資料來計算各維度分數 - const questionsResponse = await fetch('/api/creative-questions') - const questionsData = await questionsResponse.json() - - if (questionsData.success) { - setQuestions(questionsData.questions) - - // 計算各維度分數 - const dimensionScores = await calculateDimensionScores(latestResult, questionsData.questions) - - setResults({ - type: "creative", - score: latestResult.score, - totalScore: latestResult.correct_answers, - maxScore: latestResult.total_questions * 5, - answers: {}, // 從資料庫結果中獲取 - completedAt: latestResult.completed_at, - dimensionScores: dimensionScores - }) - } + setResults({ + type: latestResult.type, + score: latestResult.score, + totalScore: latestResult.totalScore || latestResult.score, + maxScore: latestResult.maxScore || 100, + answers: latestResult.answers || {}, + completedAt: latestResult.created_at + }) } else { - // 如果沒有資料庫結果,回退到 localStorage + // 如果沒有資料庫結果,嘗試從 localStorage 載入 const savedResults = localStorage.getItem("creativeTestResults") if (savedResults) { setResults(JSON.parse(savedResults)) @@ -74,11 +52,11 @@ export default function CreativeResultsPage() { } } catch (error) { console.error('Error loading creative test results:', error) - // 回退到 localStorage - const savedResults = localStorage.getItem("creativeTestResults") - if (savedResults) { - setResults(JSON.parse(savedResults)) - } + // 如果 API 失敗,嘗試從 localStorage 載入 + const savedResults = localStorage.getItem("creativeTestResults") + if (savedResults) { + setResults(JSON.parse(savedResults)) + } } finally { setIsLoading(false) } @@ -87,69 +65,17 @@ export default function CreativeResultsPage() { loadData() }, [user]) - // 計算各維度分數 - const calculateDimensionScores = async (testResult: any, questions: any[]) => { - try { - // 獲取詳細答案 - const answersResponse = await fetch(`/api/creative-test-answers?testResultId=${testResult.id}`) - const answersData = await answersResponse.json() - - if (!answersData.success) { - return { - innovation: { percentage: 0, rawScore: 0, maxScore: 0 }, - imagination: { percentage: 0, rawScore: 0, maxScore: 0 }, - flexibility: { percentage: 0, rawScore: 0, maxScore: 0 }, - originality: { percentage: 0, rawScore: 0, maxScore: 0 } - } - } - - const answers = answersData.data - const dimensionScores: Record = { - innovation: { total: 0, count: 0 }, - imagination: { total: 0, count: 0 }, - flexibility: { total: 0, count: 0 }, - originality: { total: 0, count: 0 } - } - - // 計算各維度分數 - answers.forEach((answer: any) => { - const question = questions.find(q => q.id === answer.question_id) - if (question && dimensionScores[question.category]) { - dimensionScores[question.category].total += answer.score - dimensionScores[question.category].count += 1 - } - }) - - // 計算百分比分數和原始分數 - const result = { - innovation: { percentage: 0, rawScore: 0, maxScore: 0 }, - imagination: { percentage: 0, rawScore: 0, maxScore: 0 }, - flexibility: { percentage: 0, rawScore: 0, maxScore: 0 }, - originality: { percentage: 0, rawScore: 0, maxScore: 0 } - } - - Object.keys(dimensionScores).forEach(category => { - const { total, count } = dimensionScores[category] - const maxScore = count * 5 - const percentage = count > 0 ? Math.round((total / maxScore) * 100) : 0 - - result[category as keyof typeof result] = { - percentage: percentage, - rawScore: total, - maxScore: maxScore - } - }) - - return result - } catch (error) { - console.error('計算維度分數失敗:', error) - return { - innovation: { percentage: 0, rawScore: 0, maxScore: 0 }, - imagination: { percentage: 0, rawScore: 0, maxScore: 0 }, - flexibility: { percentage: 0, rawScore: 0, maxScore: 0 }, - originality: { percentage: 0, rawScore: 0, maxScore: 0 } - } - } + if (isLoading) { + return ( +
+ + +
+

載入結果中...

+
+
+
+ ) } if (!results) { @@ -167,438 +93,40 @@ export default function CreativeResultsPage() { ) } - const getCreativityLevel = (score: number) => { - if (score >= 90) return { - level: "創意巔峰者", - color: "bg-purple-600", - description: "創意力近乎無窮,你是團隊裡的靈感源泉,總能帶來突破性的想法。", - suggestion: "你不只創造靈感,更能影響他人。如果能結合執行力,你將成為真正的創新領袖。" - } - if (score >= 75) return { - level: "創意引領者", - color: "bg-blue-500", - description: "你是靈感的推動者!總是能在團體中主動拋出新想法,激發別人跟進。", - suggestion: "持續累積學習,讓你的靈感不僅是點子,而能帶動真正的行動。" - } - if (score >= 55) return { - level: "創意實踐者", - color: "bg-green-500", - description: "靈感已經隨手可得,在團體中也常被認為是「有創意的人」。", - suggestion: "再給自己一點勇氣,不要害怕挑戰慣例,你的創意將更有力量。" - } - if (score >= 35) return { - level: "創意開拓者", - color: "bg-yellow-500", - description: "你其實有自己的想法,但有時習慣跟隨大多數人的步伐。", - suggestion: "試著勇敢說出腦中天馬行空的念頭,你會發現,這些點子或許就是團隊需要的突破口。" - } - return { - level: "創意萌芽者", - color: "bg-red-500", - description: "還在創意旅程的起點。雖然暫時表現平淡,但這正是無限潛力的開端!", - suggestion: "觀察生活小事,或閱讀不同領域的內容,讓靈感一點一滴積累。" - } - } - - const creativityLevel = getCreativityLevel(results.score) - - // Calculate category scores - prioritize database data if available - let categoryResults: Array<{ - category: string - name: string - score: number - rawScore: number - maxRawScore: number - }> = [] - - if (results.dimensionScores) { - // Use database-calculated dimension scores - const dimensionNames = { - innovation: '創新能力', - imagination: '想像力', - flexibility: '靈活性', - originality: '原創性' - } - - categoryResults = Object.entries(results.dimensionScores).map(([key, data]) => ({ - category: key, - name: dimensionNames[key as keyof typeof dimensionNames], - score: data.percentage, - rawScore: data.rawScore, - maxRawScore: data.maxScore - })) - } else { - // Fallback to localStorage calculation - const categoryScores = { - innovation: { total: 0, count: 0, name: "創新能力" }, - imagination: { total: 0, count: 0, name: "想像力" }, - flexibility: { total: 0, count: 0, name: "靈活性" }, - originality: { total: 0, count: 0, name: "原創性" }, - } - - creativeQuestions.forEach((question, index) => { - const answer = results.answers[index] || 1 - const score = question.isReverse ? 6 - answer : answer - categoryScores[question.category].total += score - categoryScores[question.category].count += 1 - }) - - categoryResults = Object.entries(categoryScores).map(([key, data]) => ({ - category: key, - name: data.name, - score: data.count > 0 ? Math.round((data.total / (data.count * 5)) * 100) : 0, - rawScore: data.total, - maxRawScore: data.count * 5, - })) - } - return ( -
- {/* Header */} -
-
-
-
-
- -
-
-

創意能力測試結果

-

- 完成時間:{new Date(results.completedAt).toLocaleString("zh-TW")} -

-
-
-
- - -
+
+ + +
+
-
-
- -
-
- {/* Score Overview */} - - -
- {results.score} -
- 創意測試完成! -
- - {creativityLevel.level} - -
-

{creativityLevel.description}

-
-

- 👉 建議: - {creativityLevel.suggestion} -

-
-
- -
-
-
{results.totalScore}
-
總得分
-
-
-
{results.maxScore}
-
滿分
-
-
-
- {Math.round((results.totalScore / results.maxScore) * 100)}% -
-
得分率
-
-
- -
-
- - {/* Category Analysis */} - - - - - 能力維度分析 - - - -
- {categoryResults.map((category) => ( -
-
-

{category.name}

- {category.score}分 -
- -

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

-
- ))} -
-
-
- - {/* Detailed Feedback Chart */} - - - - - 創意能力分析圖表 - - - -
-
-

創意能力評估

-

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

-
- - {/* Radar Chart */} -
-

能力維度雷達圖

-
-
- {/* 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)} -

-
- ) - })} -
-
-
-
-
- - {/* Actions */} -
- - -
-
-
+ +
) -} +} \ No newline at end of file diff --git a/app/results/logic/page.tsx b/app/results/logic/page.tsx index 4d1b572..d156645 100644 --- a/app/results/logic/page.tsx +++ b/app/results/logic/page.tsx @@ -127,193 +127,39 @@ export default function LogicResultsPage() { const scoreLevel = getScoreLevel(results.score) return ( -
- {/* Header */} -
-
-
-
-
- -
-
-

邏輯思維測試結果

-

- 完成時間:{new Date(results.completedAt).toLocaleString("zh-TW")} -

-
-
-
- - -
+
+ + +
+
-
-
- -
-
- {/* Score Overview */} - - -
- {results.score} -
- 測試完成! -
- - {scoreLevel.level} - -
-

{scoreLevel.description}

-
-

- 👉 建議: - {scoreLevel.suggestion} -

-
-
- -
-
-
{results.correctAnswers}
-
答對題數
-
-
-
{results.totalQuestions}
-
總題數
-
-
-
- {Math.round((results.correctAnswers / results.totalQuestions) * 100)}% -
-
正確率
-
-
- -
-
- - {/* Detailed Results */} - - - 詳細結果 - - -
- {questions.map((question, index) => { - const userAnswer = results.answers[index] - const isCorrect = userAnswer === question.correct_answer - - // 根據選項字母獲取對應的選項文字 - const getOptionText = (option: string) => { - switch (option) { - case 'A': return question.option_a - case 'B': return question.option_b - case 'C': return question.option_c - case 'D': return question.option_d - case 'E': return question.option_e - default: return "未作答" - } - } - - const correctOptionText = getOptionText(question.correct_answer) - const userOptionText = userAnswer ? getOptionText(userAnswer) : "未作答" - - return ( -
-
-
- {isCorrect ? ( - - ) : ( - - )} -
-
-

- 第{index + 1}題:{question.question} -

-
-
- 你的答案: - - {userAnswer ? `${userAnswer}. ${userOptionText}` : "未作答"} - -
- {!isCorrect && ( -
- 正確答案: - - {question.correct_answer}. {correctOptionText} - -
- )} - {question.explanation && ( -
- 解析: - {question.explanation} -
- )} -
-
-
-
- ) - })} -
-
-
- - {/* Actions */} -
- - -
-
-
+ +
) }