38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
// CEFR等級映射
|
|
export const getCEFRToLevel = (cefr: string): number => {
|
|
const mapping: { [key: string]: number } = {
|
|
'A1': 20, 'A2': 35, 'B1': 50, 'B2': 65, 'C1': 80, 'C2': 95
|
|
}
|
|
return mapping[cefr] || 50
|
|
}
|
|
|
|
// 根據CEFR等級獲取複習類型
|
|
export const getReviewTypesByCEFR = (userCEFR: string, wordCEFR: string): string[] => {
|
|
const userLevel = getCEFRToLevel(userCEFR)
|
|
const wordLevel = getCEFRToLevel(wordCEFR)
|
|
const difficulty = wordLevel - userLevel
|
|
|
|
if (userCEFR === 'A1') {
|
|
return ['flip-memory', 'vocab-choice']
|
|
} else if (difficulty < -10) {
|
|
return ['sentence-reorder', 'sentence-fill']
|
|
} else if (difficulty >= -10 && difficulty <= 10) {
|
|
return ['sentence-fill', 'sentence-reorder']
|
|
} else {
|
|
return ['flip-memory', 'vocab-choice']
|
|
}
|
|
}
|
|
|
|
// 模式標籤映射
|
|
export const getModeLabel = (mode: string): string => {
|
|
const labels: { [key: string]: string } = {
|
|
'flip-memory': '翻卡記憶',
|
|
'vocab-choice': '詞彙選擇',
|
|
'sentence-fill': '例句填空',
|
|
'sentence-reorder': '例句重組',
|
|
'vocab-listening': '詞彙聽力',
|
|
'sentence-listening': '例句聽力',
|
|
'sentence-speaking': '例句口說'
|
|
}
|
|
return labels[mode] || mode
|
|
} |