diff --git a/frontend/app/generate/page.tsx b/frontend/app/generate/page.tsx index a9e2ae1..ff2d92b 100644 --- a/frontend/app/generate/page.tsx +++ b/frontend/app/generate/page.tsx @@ -36,6 +36,11 @@ function GenerateContent() { const toast = useToast() const { findWordAnalysis, getWordClass } = useWordAnalysis() const [textInput, setTextInput] = useState('') + + // 獲取用戶等級 + const userLevel = typeof window !== 'undefined' + ? localStorage.getItem('userEnglishLevel') || 'A2' + : 'A2' const [isAnalyzing, setIsAnalyzing] = useState(false) const [showAnalysisView, setShowAnalysisView] = useState(false) const [sentenceAnalysis, setSentenceAnalysis] = useState | null>(null) @@ -420,7 +425,7 @@ function GenerateContent() { return ( setSelectedWord(cleanToken)} role="button" tabIndex={0} diff --git a/frontend/hooks/word/useWordAnalysis.ts b/frontend/hooks/word/useWordAnalysis.ts index c5ce991..fec235d 100644 --- a/frontend/hooks/word/useWordAnalysis.ts +++ b/frontend/hooks/word/useWordAnalysis.ts @@ -32,7 +32,7 @@ export function useWordAnalysis() { return matchKey ? analysis[matchKey] : null }, []) - const getWordClass = useCallback((word: string, analysis: Record = {}) => { + const getWordClass = useCallback((word: string, analysis: Record = {}, userLevel: string = 'A2') => { const wordAnalysis = findWordAnalysis(word, analysis) if (!wordAnalysis) return 'cursor-default text-gray-900' @@ -42,23 +42,25 @@ export function useWordAnalysis() { if (wordAnalysis.isIdiom) { classes += 'bg-purple-50 text-purple-700 border-purple-200 hover:bg-purple-100' } else { - // 根據 CEFR 等級設置顏色主題 + // 根據用戶等級與詞彙等級的相對關係設置顏色 const cefr = wordAnalysis.cefr || 'A1' - switch (cefr) { - case 'A1': - case 'A2': - classes += 'bg-green-50 text-green-700 border-green-200 hover:bg-green-100' - break - case 'B1': - case 'B2': - classes += 'bg-blue-50 text-blue-700 border-blue-200 hover:bg-blue-100' - break - case 'C1': - case 'C2': - classes += 'bg-red-50 text-red-700 border-red-200 hover:bg-red-100' - break - default: - classes += 'bg-gray-50 text-gray-700 border-gray-200 hover:bg-gray-100' + const levelOrder = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2'] + const userLevelIndex = levelOrder.indexOf(userLevel) + const wordLevelIndex = levelOrder.indexOf(cefr) + const levelDiff = wordLevelIndex - userLevelIndex + + if (levelDiff <= -1) { + // 太簡單(低於用戶等級)- 綠色 + classes += 'bg-green-50 text-green-700 border-green-200 hover:bg-green-100' + } else if (levelDiff === 0) { + // 適中(等於用戶等級)- 藍色 + classes += 'bg-blue-50 text-blue-700 border-blue-200 hover:bg-blue-100' + } else if (levelDiff === 1) { + // 挑戰(高1級)- 橘色 + classes += 'bg-orange-50 text-orange-700 border-orange-200 hover:bg-orange-100' + } else { + // 困難(高2級以上)- 紅色 + classes += 'bg-red-50 text-red-700 border-red-200 hover:bg-red-100' } }