diff --git a/frontend/components/review/quiz/FlipMemory.tsx b/frontend/components/review/quiz/FlipMemory.tsx
index bc01f33..bafc4de 100644
--- a/frontend/components/review/quiz/FlipMemory.tsx
+++ b/frontend/components/review/quiz/FlipMemory.tsx
@@ -3,6 +3,7 @@
import { useState, useRef, useEffect, useCallback } from 'react'
import { CardState } from '@/lib/data/reviewSimpleData'
import { QuizHeader } from '../ui/QuizHeader'
+import { BluePlayButton } from '@/components/shared/BluePlayButton'
interface SimpleFlipCardProps {
card: CardState
@@ -120,6 +121,15 @@ export function FlipMemory({ card, onAnswer, onSkip }: SimpleFlipCardProps) {
{card.pronunciation && (
{card.pronunciation}
)}
+
e.stopPropagation()}>
+
+
@@ -154,6 +164,15 @@ export function FlipMemory({ card, onAnswer, onSkip }: SimpleFlipCardProps) {
例句
"{card.example}"
+
e.stopPropagation()}>
+
+
{card.exampleTranslation}
diff --git a/frontend/components/review/quiz/VocabChoiceQuiz.tsx b/frontend/components/review/quiz/VocabChoiceQuiz.tsx
index d99e419..101ed06 100644
--- a/frontend/components/review/quiz/VocabChoiceQuiz.tsx
+++ b/frontend/components/review/quiz/VocabChoiceQuiz.tsx
@@ -3,6 +3,8 @@
import { useState, useCallback } from 'react'
import { CardState } from '@/lib/data/reviewSimpleData'
import { QuizHeader } from '../ui/QuizHeader'
+import { BluePlayButton } from '@/components/shared/BluePlayButton'
+
interface VocabChoiceTestProps {
card: CardState
@@ -14,30 +16,35 @@ interface VocabChoiceTestProps {
export function VocabChoiceQuiz({ card, options, onAnswer, onSkip }: VocabChoiceTestProps) {
const [selectedAnswer, setSelectedAnswer] = useState(null)
const [showResult, setShowResult] = useState(false)
+ const [hasAnswered, setHasAnswered] = useState(false)
const handleAnswerSelect = useCallback((answer: string) => {
- if (showResult) return
+ if (showResult || hasAnswered) return
setSelectedAnswer(answer)
setShowResult(true)
-
- // 判斷答案是否正確,正確給3分,錯誤給1分
- const isCorrect = answer === card.word
- const confidence = isCorrect ? 2 : 0
-
- // 延遲一點再調用回調,讓用戶看到選擇結果
- setTimeout(() => {
- onAnswer(confidence)
- // 重置狀態為下一題準備
- setSelectedAnswer(null)
- setShowResult(false)
- }, 1500)
- }, [showResult, card.word, onAnswer])
+ setHasAnswered(true)
+ }, [showResult, hasAnswered])
const handleSkipClick = useCallback(() => {
onSkip()
}, [onSkip])
+ const handleNext = useCallback(() => {
+ if (!hasAnswered || !selectedAnswer) return
+
+ // 判斷答案是否正確,正確給2分,錯誤給0分
+ const isCorrect = selectedAnswer === card.word
+ const confidence = isCorrect ? 2 : 0
+
+ onAnswer(confidence)
+
+ // 重置狀態為下一題準備
+ setSelectedAnswer(null)
+ setShowResult(false)
+ setHasAnswered(false)
+ }, [hasAnswered, selectedAnswer, card.word, onAnswer])
+
const isCorrect = selectedAnswer === card.word
return (
@@ -91,7 +98,7 @@ export function VocabChoiceQuiz({ card, options, onAnswer, onSkip }: VocabChoice