feat: Add i18n support with English and Thai locales and implement the new classroom learning page with course curriculum and video playback.
This commit is contained in:
parent
6146d65949
commit
38e7f1bf06
3 changed files with 45 additions and 6 deletions
|
|
@ -145,7 +145,9 @@
|
|||
"invalidEmail": "Invalid email address",
|
||||
"invalidPhone": "Invalid phone number",
|
||||
"passwordTooShort": "At least 6 characters",
|
||||
"passwordsDoNotMatch": "Passwords do not match"
|
||||
"passwordsDoNotMatch": "Passwords do not match",
|
||||
"next": "Next",
|
||||
"back": "Back"
|
||||
},
|
||||
"classroom": {
|
||||
"backToDashboard": "Back to My Courses",
|
||||
|
|
@ -155,7 +157,8 @@
|
|||
"notAvailable": "This lesson is not yet available.",
|
||||
"loadingTitle": "Loading...",
|
||||
"chapter": "Chapter",
|
||||
"lessons": "Lessons"
|
||||
"lessons": "Lessons",
|
||||
"attachments": "Attachments"
|
||||
},
|
||||
"quiz": {
|
||||
"exitTitle": "Exit Quiz",
|
||||
|
|
@ -169,6 +172,7 @@
|
|||
"prevBtn": "Previous Question",
|
||||
"submitBtn": "Submit Answers",
|
||||
"submitConfirm": "Are you sure you want to submit your answers?",
|
||||
"submitValues": "Submit Answers",
|
||||
"scoreTitle": "Quiz Results",
|
||||
"passMessage": "Congratulations! You passed the quiz.",
|
||||
"failMessage": "You didn't pass this time. Please review the lessons and try again.",
|
||||
|
|
@ -177,6 +181,16 @@
|
|||
"timeLeft": "Time Left",
|
||||
"noQuizData": "Sorry, no quiz data found",
|
||||
"noQuizDesc": "This lesson might not have a quiz yet or it is being updated.",
|
||||
"underDevelopment": "System is loading questions..."
|
||||
"underDevelopment": "System is loading questions...",
|
||||
"questions": "Questions",
|
||||
"minutes": "Minutes",
|
||||
"question": "Question",
|
||||
"submitting": "Submitting...",
|
||||
"resultPassed": "Congratulations! Passed",
|
||||
"resultFailed": "Sorry, Failed",
|
||||
"scoreLabel": "Score",
|
||||
"correctLabel": "Correct",
|
||||
"retryBtn": "Retry Quiz",
|
||||
"pleaseSelectAnswer": "Please select an answer"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,7 +145,9 @@
|
|||
"invalidEmail": "อีเมลไม่ถูกต้อง",
|
||||
"invalidPhone": "เบอร์โทรศัพท์ไม่ถูกต้อง",
|
||||
"passwordTooShort": "รหัสผ่านต้องมีอย่างน้อย 6 ตัวอักษร",
|
||||
"passwordsDoNotMatch": "รหัสผ่านใหม่ไม่ตรงกัน"
|
||||
"passwordsDoNotMatch": "รหัสผ่านใหม่ไม่ตรงกัน",
|
||||
"next": "ถัดไป",
|
||||
"back": "ย้อนกลับ"
|
||||
},
|
||||
"classroom": {
|
||||
"backToDashboard": "กลับไปคอร์สของฉัน",
|
||||
|
|
@ -185,6 +187,10 @@
|
|||
"noQuizData": "ไม่มีข้อมูลแบบทดสอบ",
|
||||
"noQuizDesc": "ไม่พบข้อมูลแบบทดสอบในขณะนี้",
|
||||
"pleaseSelectAnswer": "กรุณาเลือกคำตอบก่อนดำเนินการต่อ",
|
||||
"underDevelopment": "ส่วนนี้กำลังพัฒนา"
|
||||
"underDevelopment": "ส่วนนี้กำลังพัฒนา",
|
||||
"nextBtn": "ข้อถัดไป",
|
||||
"prevBtn": "ข้อย้อนกลับ",
|
||||
"submitBtn": "ส่งคำตอบ",
|
||||
"reviewAnswers": "ทบทวนคำตอบ"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ useHead({
|
|||
})
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const { t } = useI18n()
|
||||
const { user } = useAuth()
|
||||
const { fetchCourseLearningInfo, fetchLessonContent, saveVideoProgress, markLessonComplete, checkLessonAccess, fetchVideoProgress } = useCourse()
|
||||
|
|
@ -415,8 +416,26 @@ const onVideoEnded = async () => {
|
|||
const res = await markLessonComplete(courseId.value, currentLesson.value.id)
|
||||
if (res.success) {
|
||||
markLessonAsCompletedLocally(currentLesson.value.id)
|
||||
|
||||
// If course completed
|
||||
if (res.data.is_course_completed) {
|
||||
alert("ยินดีด้วย! คุณเรียนจบหลักสูตรแล้ว")
|
||||
// Refresh course data to update certificate status
|
||||
await loadCourseData()
|
||||
alert(t('course.completed') || "ยินดีด้วย! คุณเรียนจบหลักสูตรแล้ว")
|
||||
} else if (res.data.next_lesson_id) {
|
||||
// Suggest next lesson
|
||||
if (confirm(t('common.next') + '?')) {
|
||||
const nextId = res.data.next_lesson_id
|
||||
|
||||
// Update URL without reload if possible, but router.push is standard
|
||||
await router.push({
|
||||
path: '/classroom/learning',
|
||||
query: { ...route.query, lesson_id: nextId }
|
||||
})
|
||||
|
||||
// Manually load the lesson since we don't have a watcher on query
|
||||
handleLessonSelect(nextId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue