From 8e96b07d7128e76920a3de71677efb0eaeda322c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=84=AD=E6=B2=9B=E8=BB=92?= Date: Tue, 7 Oct 2025 00:31:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=96=B0=E7=B5=84?= =?UTF-8?q?=E7=B9=94=E8=A4=87=E7=BF=92=E9=A0=81=E9=9D=A2=E7=B5=90=E6=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 將 review-simple 重命名為 review-dev (開發測試頁面) - 新增 /review 作為正式複習頁面 - 複製相同功能作為新頁面的修改基礎 - 準備進行正式頁面的功能開發 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../{review-simple => review-dev}/page.tsx | 2 +- frontend/app/review/page.tsx | 161 ++++++++++++++++++ 2 files changed, 162 insertions(+), 1 deletion(-) rename frontend/app/{review-simple => review-dev}/page.tsx (96%) create mode 100644 frontend/app/review/page.tsx diff --git a/frontend/app/review-simple/page.tsx b/frontend/app/review-dev/page.tsx similarity index 96% rename from frontend/app/review-simple/page.tsx rename to frontend/app/review-dev/page.tsx index 3c6f04c..9cb9158 100644 --- a/frontend/app/review-simple/page.tsx +++ b/frontend/app/review-dev/page.tsx @@ -7,7 +7,7 @@ import { QuizProgress } from '@/components/review/ui/QuizProgress' import { QuizResult } from '@/components/review/quiz/QuizResult' import { useReviewSession } from '@/hooks/review/useReviewSession' -export default function SimpleReviewPage() { +export default function ReviewDevPage() { // 使用重構後的 Hook 管理線性複習狀態 const { quizItems, diff --git a/frontend/app/review/page.tsx b/frontend/app/review/page.tsx new file mode 100644 index 0000000..5d27b20 --- /dev/null +++ b/frontend/app/review/page.tsx @@ -0,0 +1,161 @@ +'use client' + +import { Navigation } from '@/components/shared/Navigation' +import { FlipMemory } from '@/components/review/quiz/FlipMemory' +import { VocabChoiceQuiz } from '@/components/review/quiz/VocabChoiceQuiz' +import { QuizProgress } from '@/components/review/ui/QuizProgress' +import { QuizResult } from '@/components/review/quiz/QuizResult' +import { useReviewSession } from '@/hooks/review/useReviewSession' + +export default function ReviewPage() { + // 使用重構後的 Hook 管理線性複習狀態 + const { + quizItems, + score, + isComplete, + currentQuizItem, + currentCard, + vocabOptions, + totalQuizItems, + completedQuizItems, + handleAnswer, + handleSkip, + handleRestart, + isLoading, + error, + flashcards + } = useReviewSession() + + // 顯示載入狀態 + if (isLoading) { + return ( +
+ +
+
+
+
+

載入詞卡中...

+

正在從後端獲取您的複習詞卡

+
+
+
+
+ ) + } + + // 顯示錯誤狀態 + if (error) { + return ( +
+ +
+
+
+
⚠️
+

載入失敗

+

{error}

+ +
+
+
+
+ ) + } + + // 顯示結果頁面 + if (isComplete) { + return ( +
+ +
+
+ + + {/* 線性測驗完成統計 */} +
+

測驗統計

+
+
+
{completedQuizItems}
+
完成測驗項目
+
+
+
{flashcards.length}
+
練習詞卡數
+
+
+
+ {score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0}% +
+
正確率
+
+
+
+
+
+
+ ) + } + + // 主要線性測驗頁面 + return ( +
+ + +
+
+ {/* 使用修改後的 SimpleProgress 組件 */} + + + {/* 根據當前測驗項目類型渲染對應組件 */} + {currentQuizItem && currentCard && ( + <> + {currentQuizItem.quizType === 'flip-card' && ( + + )} + + {currentQuizItem.quizType === 'vocab-choice' && ( + + )} + + )} + + {/* 控制按鈕 */} +
+ +
+
+
+
+ ) +} \ No newline at end of file