diff --git a/Frontend-Learner/composables/useAuth.ts b/Frontend-Learner/composables/useAuth.ts
index aa8e7078..61f5ee0a 100644
--- a/Frontend-Learner/composables/useAuth.ts
+++ b/Frontend-Learner/composables/useAuth.ts
@@ -1,45 +1,4 @@
-
-// Interface สำหรับข้อมูลผู้ใช้งาน (User)
-interface User {
- id: number
- username: string
- email: string
- email_verified_at?: string | null
- created_at?: string
- updated_at?: string
- role: {
- code: string // เช่น 'STUDENT', 'INSTRUCTOR', 'ADMIN'
- name: { th: string; en: string }
- }
- profile?: {
- prefix: { th: string; en: string }
- first_name: string
- last_name: string
- phone: string | null
- avatar_url: string | null
- }
-}
-
-
-
-// Interface สำหรับข้อมูลตอบกลับตอน Login
-interface loginResponse {
- token: string
- refreshToken: string
- user: User
- profile: User['profile']
-}
-
-// Interface สำหรับข้อมูลที่ใช้ลงทะเบียน
-interface RegisterPayload {
- username: string
- email: string
- password: string
- first_name: string
- last_name: string
- prefix: { th: string; en: string }
- phone: string
-}
+import type { User, LoginResponse, RegisterPayload } from '@/types/auth'
// ==========================================
// Composable: useAuth
diff --git a/Frontend-Learner/composables/useCourse.ts b/Frontend-Learner/composables/useCourse.ts
index 66ab5ade..d320302a 100644
--- a/Frontend-Learner/composables/useCourse.ts
+++ b/Frontend-Learner/composables/useCourse.ts
@@ -1,125 +1,14 @@
-// Interface สำหรับข้อมูลคอร์สเรียน (Public Course Data)
-export interface Course {
- id: number
- title: string | { th: string; en: string } // รองรับ 2 ภาษา
- slug: string
- description: string | { th: string; en: string }
- thumbnail_url: string
- price: string
- is_free: boolean
- original_price?: string
- have_certificate: boolean
- status: string // DRAFT, PUBLISHED
- category_id: number
- created_at?: string
- updated_at?: string
- created_by?: number
- updated_by?: number
- approved_at?: string
- approved_by?: number
- rejection_reason?: string
- enrolled?: boolean
- total_lessons?: number
-
-
- rating?: string
- lessons?: number | string
- levelType?: 'neutral' | 'warning' | 'success' // ใช้สำหรับการแสดงผล Badge ระดับความยาก (Frontend Logic)
-
- // โครงสร้างบทเรียน (Chapters & Lessons)
- chapters?: {
- id: number
- title: string | { th: string; en: string }
- lessons: {
- id: number
- title: string | { th: string; en: string }
- duration_minutes: number
- video_url?: string
- }[]
- }[]
-}
-
-interface CourseResponse {
- code: number
- message: string
- data: Course[]
- total: number
- page?: number
- limit?: number
- totalPages?: number
-}
-
-interface SingleCourseResponse {
- code: number
- message: string
- data: Course
-}
-
-// Interface สำหรับคอร์สที่ผู้ใช้ลงทะเบียนเรียนแล้ว (My Course)
-export interface EnrolledCourse {
- id: number
- course_id: number
- course: Course
- status: 'ENROLLED' | 'IN_PROGRESS' | 'COMPLETED' | 'DROPPED'
- progress_percentage: number
- enrolled_at: string
- started_at?: string
- completed_at?: string
- last_accessed_at?: string
-}
-
-interface EnrolledCourseResponse {
- code: number
- message: string
- data: EnrolledCourse[]
- total: number
- page: number
- limit: number
-}
-
-// Interface สำหรับการส่งคำตอบแบบทดสอบ (Quiz Submission)
-export interface QuizAnswerSubmission {
- question_id: number
- choice_id: number
-}
-
-export interface QuizSubmitRequest {
- answers: QuizAnswerSubmission[]
-}
-
-// Interface สำหรับผลลัพธ์การสอบ (Quiz Result)
-export interface QuizResult {
- answers_review: {
- score: number
- is_correct: boolean
- correct_choice_id: number
- selected_choice_id: number
- question_id: number
- }[]
- completed_at: string
- started_at: string
- attempt_number: number
- passing_score: number
- is_passed: boolean
- correct_answers: number
- total_questions: number
- total_score: number
- score: number
- quiz_id: number
- attempt_id: number
-}
-
-// Interface สำหรับ Certificate
-export interface Certificate {
- certificate_id: number
- course_id: number
- course_title: {
- en: string
- th: string
- }
- issued_at: string
- download_url: string
-}
+import type {
+ Course,
+ CourseResponse,
+ SingleCourseResponse,
+ EnrolledCourse,
+ EnrolledCourseResponse,
+ QuizAnswerSubmission,
+ QuizSubmitRequest,
+ QuizResult,
+ Certificate
+} from '@/types/course'
// ==========================================
// Composable: useCourse
@@ -145,6 +34,7 @@ export const useCourse = () => {
category_id?: number;
page?: number;
limit?: number;
+ search?: string;
random?: boolean;
is_recommended?: boolean;
forceRefresh?: boolean
@@ -167,6 +57,7 @@ export const useCourse = () => {
if (apiParams.category_id) queryParams.append('category_id', apiParams.category_id.toString())
if (apiParams.page) queryParams.append('page', apiParams.page.toString())
if (apiParams.limit) queryParams.append('limit', apiParams.limit.toString())
+ if (apiParams.search) queryParams.append('search', apiParams.search)
if (apiParams.random !== undefined) queryParams.append('random', apiParams.random.toString())
if (apiParams.is_recommended !== undefined) queryParams.append('is_recommended', apiParams.is_recommended.toString())
diff --git a/Frontend-Learner/constants/landing.ts b/Frontend-Learner/constants/landing.ts
new file mode 100644
index 00000000..76747d36
--- /dev/null
+++ b/Frontend-Learner/constants/landing.ts
@@ -0,0 +1,43 @@
+/**
+ * @file landing.ts
+ * @description Static data for the landing page.
+ */
+
+export const CATEGORY_CARDS = [
+ {
+ title: 'โปรแกรมมิ่ง',
+ desc: 'เชี่ยวชาญการเขียนโค้ดและพัฒนาซอฟต์แวร์',
+ icon: 'o_code',
+ slug: 'programming',
+ },
+ {
+ title: 'การออกแบบ',
+ desc: 'ทักษะ UI/UX และการออกแบบระดับมือโปร',
+ icon: 'o_palette',
+ slug: 'design',
+ },
+ {
+ title: 'ธุรกิจ',
+ desc: 'ทักษะการจัดการและความเป็นผู้นำสากล',
+ icon: 'o_business_center',
+ slug: 'business',
+ }
+]
+
+export const WHY_CHOOSE_US = [
+ {
+ title: 'ผู้สอนเชี่ยวชาญ',
+ desc: 'เรียนรู้จากผู้นำในอุตสาหกรรมที่มีประสบการณ์การทำงานหลายปีในบริษัทเทคโนโลยีชั้นนำระดับโลก',
+ icon: 'o_groups',
+ },
+ {
+ title: 'การเรียนรู้ที่ยืดหยุ่น',
+ desc: 'เรียนตามจังหวะของคุณเอง ได้ทุกที่ทุกเวลา เข้าถึงเนื้อหาคอร์สที่สมัครเรียนได้ตลอดชีพ',
+ icon: 'o_schedule',
+ },
+ {
+ title: 'ประกาศนียบัตรเมื่อเรียนจบ',
+ desc: 'รับวุฒิบัตรที่เป็นที่ยอมรับเพื่อเสริมพอร์ตโฟลิโอระดับมืออาชีพของคุณและแชร์ลง LinkedIn ได้โดยตรง',
+ icon: 'o_verified',
+ }
+]
diff --git a/Frontend-Learner/i18n/locales/en.json b/Frontend-Learner/i18n/locales/en.json
index f51861ff..b854b7c6 100644
--- a/Frontend-Learner/i18n/locales/en.json
+++ b/Frontend-Learner/i18n/locales/en.json
@@ -5,7 +5,27 @@
},
"dashboard": {
"welcomeTitle": "Welcome back",
- "welcomeSubtitle": "Today is a great day to learn something new. Let's gain more knowledge!"
+ "welcomeSubtitle": "Today is a great day to learn something new. Let's gain more knowledge!",
+ "heroTitle": "Continually upskill yourself",
+ "heroSubtitle": "to achieve your goals",
+ "heroDesc": "How many minutes have you learned today? Let's build a great learning habit. We have many new recommended courses waiting for you.",
+ "goToMyCourses": "Go to My Courses",
+ "searchNewCourses": "Find New Courses",
+ "continueLearningTitle": "Continue learning with your courses",
+ "myCourses": "My Courses",
+ "studyAgain": "Study Again",
+ "continue": "Continue",
+ "startNewCourse": "Start new courses to fill this section",
+ "knowledgeLibrary": "Knowledge Library",
+ "libraryDesc": "You can choose to learn from courses you own",
+ "chooseLibrary": "Choose to learn from your knowledge library",
+ "viewAll": "View All",
+ "emptyLibraryTitle": "No courses in library yet",
+ "emptyLibraryDesc": "Start learning new things today. Browse interesting courses to develop your skills.",
+ "viewAllCourses": "View All Courses",
+ "recommendedCourses": "Recommended Courses",
+ "noRecommended": "No recommended courses found",
+ "moreCourses": "More Courses"
},
"menu": {
"continueLearning": "Continue Learning",
@@ -40,28 +60,42 @@
"studyAgain": "Study Again",
"downloadCertificate": "Download Certificate",
"completed": "Completed",
- "includes": "Course includes",
- "fullLifetimeAccess": "Full lifetime access",
- "accessOnMobile": "Access on mobile and TV",
"lifetimeAccess": "Lifetime access",
"unlimitedQuizzes": "Unlimited quizzes",
"satisfactionGuarantee": "Satisfaction guarantee, 7-day refund",
"noContent": "No content available yet",
- "buyNow": "Buy this course",
"enrollFree": "Enroll for free",
"loginToEnroll": "Log in to enroll",
"minutes": "Minutes",
"noVideoPreview": "Video preview not available",
- "videoNotSupported": "Your browser does not support the video tag"
+ "videoNotSupported": "Your browser does not support the video tag",
+ "aboutCourse": "About Course",
+ "lessonDetails": "Lesson Details",
+ "courseStats": {
+ "level": "Level",
+ "duration": "Duration",
+ "lessons": "Lessons",
+ "students": "Students"
+ },
+ "certificatePreview": "Certificate Preview",
+ "certificateDesc": "Upon completion and passing criteria",
+ "includes": "This course includes",
+ "fullLifetimeAccess": "Full lifetime access",
+ "accessOnMobile": "Access on mobile and tablet",
+ "buyNow": "Buy Now"
},
"sidebar": {
"overview": "Home",
"myCourses": "My Courses",
"browseCourses": "Browse Courses",
- "onlineCourses": "Online Courses",
+ "onlineCourses": "All Courses",
"recommendedCourses": "Recommended Courses",
"announcements": "Announcements",
- "profile": "My Profile"
+ "profile": "My Profile",
+ "accountGroup": "Account",
+ "promoTitle": "Find the right course",
+ "promoSubtitle": "Level up your skills",
+ "learnMore": "Learn More"
},
"discovery": {
"title": "All Courses",
@@ -69,6 +103,9 @@
"sortRecent": "Sort by: Recent",
"sortPopular": "Popular",
"categoryTitle": "Categories",
+ "design": "Design",
+ "programming": "Programming",
+ "business": "Business",
"showMore": "Show More",
"showLess": "Show Less",
"emptyTitle": "No courses found",
@@ -76,15 +113,24 @@
"showAll": "Show All",
"loadMore": "Load More",
"backToCatalog": "Back to Catalog",
- "selectable": "Selected"
+ "selectable": "Selected",
+ "foundTotal": "Found Total",
+ "items": "items",
+ "subtitle": "Choose to learn new skills from our curated quality courses",
+ "searchBtn": "Search"
},
"myCourses": {
+ "title": "My Courses",
+ "subtitle": "Track your progress and continue learning from where you left off",
+ "searchPlaceholder": "Search my courses...",
"filterAll": "All",
"filterProgress": "In Progress",
"filterCompleted": "Completed",
"emptyTitle": "No courses in this category",
"emptyDesc": "You don't have any courses here yet. Browse our catalog to find interesting courses.",
- "goToDiscovery": "Go to Courses"
+ "goToDiscovery": "Go to Courses",
+ "searchNoResult": "No matching courses found",
+ "searchNoResultDesc": "Try changing category or your search term"
},
"enrollment": {
"successTitle": "Enrollment Successful!",
@@ -109,9 +155,11 @@
"email": "Email",
"phone": "Phone",
"joinedAt": "Joined",
+ "generalInfo": "General Information",
+ "accountDetails": "Account Details",
"editPersonalDesc": "Edit Personal Information",
"yourAvatar": "Your Profile Photo",
- "avatarHint": "PNG, JPG only",
+ "avatarHint": "Only JPG, PNG",
"uploadNew": "Upload New Photo",
"changeAvatar": "Change Profile Photo",
"removeAvatar": "Remove Profile Photo",
@@ -142,7 +190,15 @@
"emailVerified": "Email Verified",
"myCertificates": "My Certificates",
"viewCertificate": "View Certificate",
- "issuedAt": "Issued at"
+ "issuedAt": "Issued at",
+ "publicInfo": "Information visible to the public on the platform",
+ "uploading": "Uploading...",
+ "selectPrefix": "Select Prefix",
+ "verifyNow": "Click to verify email",
+ "verifying": "Sending...",
+ "saving": "Saving...",
+ "securitySubtitle": "Manage password and account access",
+ "password": "Password"
},
"userMenu": {
"home": "Home",
@@ -165,7 +221,9 @@
"emailVerifiedDesc": "Your account has been successfully verified.",
"invalidToken": "Invalid verification token",
"tokenExpired": "Token expired or invalid",
- "logout": "Log Out"
+ "logout": "Log Out",
+ "logoutConfirmTitle": "Confirm Logout",
+ "logoutConfirmMessage": "Are you sure you want to log out of the system?"
},
"language": {
"label": "Language / ภาษา",
@@ -176,6 +234,7 @@
"newBadge": "New",
"popularBadge": "Popular",
"save": "Save",
+ "saveChanges": "Save Changes",
"ok": "OK",
"close": "Close",
"cancel": "Cancel",
@@ -189,7 +248,9 @@
"backToHome": "Back to Home",
"error": "Error",
"loading": "Loading",
- "items": "Items"
+ "items": "Items",
+ "student": "Student",
+ "latest": "Latest"
},
"classroom": {
"backToDashboard": "Back to My Courses",
@@ -258,5 +319,16 @@
"statusNotStarted": "Not Started",
"alertIncomplete": "Please answer all questions",
"yourAnswer": "Your Answer"
+ },
+ "footer": {
+ "location": "LOCATION",
+ "connectWithUs": "CONNECT WITH US",
+ "broncoHorse": "Bronco Hourse",
+ "address": "123 อาคารสยามทาวเวอร์ ชั้น 15 เขตปทุมวัน กรุงเทพฯ 10330",
+ "emailLabel": "Email",
+ "emailValue": "info{'@'}chamomind.com",
+ "telLabel": "Tel",
+ "telValue": "02-123-4567",
+ "copyright": "© 2026 E-Learning Platform. All rights reserved."
}
}
diff --git a/Frontend-Learner/i18n/locales/th.json b/Frontend-Learner/i18n/locales/th.json
index 29a7c0f1..d096b4ad 100644
--- a/Frontend-Learner/i18n/locales/th.json
+++ b/Frontend-Learner/i18n/locales/th.json
@@ -5,7 +5,27 @@
},
"dashboard": {
"welcomeTitle": "ยินดีต้อนรับกลับ",
- "welcomeSubtitle": "วันนี้เป็นวันที่ดีสำหรับการเรียนรู้สิ่งใหม่ๆ มาเก็บความรู้เพิ่มกันเถอะ"
+ "welcomeSubtitle": "วันนี้เป็นวันที่ดีสำหรับการเรียนรู้สิ่งใหม่ๆ มาเก็บความรู้เพิ่มกันเถอะ",
+ "heroTitle": "อัปสกิลของคุณต่อเนื่อง",
+ "heroSubtitle": "เพื่อเป้าหมายที่วางไว้",
+ "heroDesc": "วันนี้คุณเรียนไปกี่นาทีแล้ว? มาสร้างนิสัยการเรียนรู้ที่ยอดเยี่ยมกันเถอะ เรามีคอร์สแนะนำใหม่ๆ มากมายรอคุณอยู่",
+ "goToMyCourses": "ไปที่คอร์สเรียนของฉัน",
+ "searchNewCourses": "ค้นหาคอร์สใหม่",
+ "continueLearningTitle": "เรียนต่อกับคอร์สของคุณ",
+ "myCourses": "คอร์สเรียนของฉัน",
+ "studyAgain": "เรียนอีกครั้ง",
+ "continue": "เรียนต่อ",
+ "startNewCourse": "เริ่มเรียนคอร์สใหม่ๆ เพื่อเติมเต็มส่วนนี้",
+ "knowledgeLibrary": "คลังความรู้",
+ "libraryDesc": "คุณสามารถเลือกเรียนคอร์สเรียนที่คุณเป็นเจ้าของ",
+ "chooseLibrary": "เลือกเรียนคอร์สในคลังความรู้ของคุณ",
+ "viewAll": "ดูทั้งหมด",
+ "emptyLibraryTitle": "ยังไม่มีคอร์สเรียนในคลัง",
+ "emptyLibraryDesc": "เริ่มเรียนรู้สิ่งใหม่ๆ วันนี้ เลือกดูคอร์สเรียนที่น่าสนใจเพื่อพัฒนาทักษะของคุณ",
+ "viewAllCourses": "ดูคอร์สเรียนทั้งหมด",
+ "recommendedCourses": "คอร์สแนะนำ",
+ "noRecommended": "ไม่พบข้อมูลคอร์สแนะนำ",
+ "moreCourses": "คอร์สเพิ่มเติม"
},
"menu": {
"continueLearning": "เรียนต่อจากเดิม",
@@ -40,28 +60,42 @@
"studyAgain": "ทบทวนบทเรียน",
"downloadCertificate": "ดาวน์โหลดประกาศนียบัตร",
"completed": "เรียนจบเรียบร้อย",
- "includes": "สิ่งที่รวมอยู่ในคอร์ส",
- "fullLifetimeAccess": "เข้าเรียนได้ตลอดชีพ",
- "accessOnMobile": "เรียนได้บนมือถือและแท็บเล็ต",
"lifetimeAccess": "เข้าเรียนได้ตลอดชีพ",
"unlimitedQuizzes": "ทำแบบทดสอบไม่จำกัด",
"satisfactionGuarantee": "รับประกันความพึงพอใจ คืนเงินภายใน 7 วัน",
"noContent": "ยังไม่มีเนื้อหาในขณะนี้",
- "buyNow": "ซื้อคอร์สเรียนนี้",
"enrollFree": "ลงทะเบียนเรียนฟรี",
"loginToEnroll": "เข้าสู่ระบบเพื่อลงทะเบียน",
"minutes": "นาที",
"noVideoPreview": "วิดีโอตัวอย่างยังไม่พร้อมใช้งาน",
- "videoNotSupported": "เบราว์เซอร์ของคุณไม่รองรับการเล่นวิดีโอ"
+ "videoNotSupported": "เบราว์เซอร์ของคุณไม่รองรับการเล่นวิดีโอ",
+ "aboutCourse": "เกี่ยวกับคอร์ส",
+ "lessonDetails": "รายละเอียดบทเรียน",
+ "courseStats": {
+ "level": "ระดับ",
+ "duration": "ระยะเวลา",
+ "lessons": "บทเรียน",
+ "students": "ผู้เรียน"
+ },
+ "certificatePreview": "ตัวอย่างใบประกาศนียบัตร",
+ "certificateDesc": "เมื่อเรียนจบและสอบผ่านตามเกณฑ์ที่กำหนด",
+ "includes": "สิ่งที่รวมอยู่ในคอร์ส",
+ "fullLifetimeAccess": "เข้าเรียนได้ตลอดชีพ",
+ "accessOnMobile": "เรียนได้บนมือถือและแท็บเล็ต",
+ "buyNow": "ซื้อคอร์สนี้"
},
"sidebar": {
"overview": "หน้าหลัก",
"myCourses": "คอร์สของฉัน",
"browseCourses": "ค้นหาคอร์ส",
- "onlineCourses": "คอร์สออนไลน์",
- "recommendedCourses": "คอร์สเรียนออนไลน์แนะนำ",
+ "onlineCourses": "คอร์สเรียนทั้งหมด",
+ "recommendedCourses": "คอร์สเรียนแนะนำ",
"announcements": "ข่าวประกาศ",
- "profile": "บัญชีผู้ใช้"
+ "profile": "บัญชีผู้ใช้",
+ "accountGroup": "บัญชี",
+ "promoTitle": "ค้นหาคอร์สที่ใช่",
+ "promoSubtitle": "ยกระดับทักษะของคุณ",
+ "learnMore": "เรียนรู้เพิ่มเติม"
},
"discovery": {
"title": "รายการคอร์สทั้งหมด",
@@ -69,6 +103,9 @@
"sortRecent": "เรียงตาม: ล่าสุด",
"sortPopular": "ยอดนิยม",
"categoryTitle": "หมวดหมู่",
+ "design": "การออกแบบ",
+ "programming": "การเขียนโปรแกรม",
+ "business": "ธุรกิจ",
"showMore": "แสดงเพิ่มเติม",
"showLess": "แสดงน้อยลง",
"emptyTitle": "ไม่พบผลการค้นหา",
@@ -76,15 +113,24 @@
"showAll": "แสดงทั้งหมด",
"loadMore": "โหลดเพิ่มเติม",
"backToCatalog": "กลับหน้ารายการคอร์ส",
- "selectable": "รายการที่เลือก"
+ "selectable": "รายการที่เลือก",
+ "foundTotal": "พบทั้งหมด",
+ "items": "รายการ",
+ "subtitle": "เลือกเรียนรู้ทักษะใหม่ๆ จากหลักสูตรคุณภาพที่คัดสรรมาเพื่อคุณ",
+ "searchBtn": "ค้นหา"
},
"myCourses": {
+ "title": "คอร์สของฉัน",
+ "subtitle": "ติดตามความคืบหน้าและเรียนรู้ต่อจากจุดที่ค้างไว้",
+ "searchPlaceholder": "ค้นหาชื่อคอร์สของฉัน...",
"filterAll": "ทั้งหมด",
"filterProgress": "กำลังเรียน",
"filterCompleted": "เรียนจบแล้ว",
"emptyTitle": "ยังไม่มีคอร์สในหมวดหมู่นี้",
"emptyDesc": "คุณยังไม่มีคอร์สเรียนในส่วนนี้ ลองเลือกดูคอร์สที่น่าสนใจในระบบของเรา",
- "goToDiscovery": "ไปที่รายการคอร์ส"
+ "goToDiscovery": "ไปที่รายการคอร์ส",
+ "searchNoResult": "ไม่พบคอร์สที่สอดคล้อง",
+ "searchNoResultDesc": "ลองเปลี่ยนหมวดหมู่หรือคำค้นหาของคุณ"
},
"enrollment": {
"successTitle": "ลงทะเบียนสำเร็จ!",
@@ -109,9 +155,11 @@
"email": "อีเมล",
"phone": "เบอร์โทรศัพท์",
"joinedAt": "สมัครสมาชิกเมื่อ",
+ "generalInfo": "ข้อมูลทั่วไป",
+ "accountDetails": "รายละเอียดบัญชี",
"editPersonalDesc": "แก้ไขข้อมูลส่วนตัว",
"yourAvatar": "รูปโปรไฟล์ของคุณ",
- "avatarHint": "เฉพาะไฟล์ png , jpg",
+ "avatarHint": "เฉพาะไฟล์ JPG, PNG",
"uploadNew": "อัพโหลดรูปโปรไฟล์",
"changeAvatar": "เปลี่ยนรูปโปรไฟล์",
"removeAvatar": "ลบรูปโปรไฟล์",
@@ -142,7 +190,15 @@
"emailVerified": "ยืนยันอีเมลเสร็จสิ้น",
"myCertificates": "ประกาศนียบัตรของฉัน",
"viewCertificate": "ดูประกาศนียบัตร",
- "issuedAt": "ออกเมื่อ"
+ "issuedAt": "ออกเมื่อ",
+ "publicInfo": "ข้อมูลที่แสดงต่อสาธารณะบนแพลตฟอร์ม",
+ "uploading": "กำลังอัปโหลด...",
+ "selectPrefix": "เลือกคำนำหน้า",
+ "verifyNow": "คลิกเพื่อยืนยันอีเมล",
+ "verifying": "กำลังส่ง...",
+ "saving": "กำลังบันทึก...",
+ "securitySubtitle": "จัดการรหัสผ่านและการเข้าถึงบัญชี",
+ "password": "รหัสผ่าน"
},
"userMenu": {
"home": "หน้าหลัก",
@@ -153,7 +209,7 @@
"logout": "ออกจากระบบ"
},
"landing": {
- "allCourses": "คอร์สทั้งหมด",
+ "allCourses": "คอร์สเรียนทั้งหมด",
"discovery": "ค้นพบ",
"goToDashboard": "เข้าสู่หน้าจัดการเรียน"
},
@@ -165,7 +221,9 @@
"emailVerifiedDesc": "บัญชีของคุณได้รับการยืนยันเรียบร้อยแล้ว",
"invalidToken": "Token ยืนยันตัวตนไม่ถูกต้อง",
"tokenExpired": "Token หมดอายุหรือล้มเหลว",
- "logout": "ออกจากระบบ"
+ "logout": "ออกจากระบบ",
+ "logoutConfirmTitle": "ยืนยันการออกจากระบบ",
+ "logoutConfirmMessage": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?"
},
"language": {
"label": "ภาษา / Language",
@@ -176,6 +234,7 @@
"newBadge": "ใหม่",
"popularBadge": "ยอดนิยม",
"save": "บันทึก",
+ "saveChanges": "บันทึกการเปลี่ยนแปลง",
"ok": "ตกลง",
"close": "ปิด",
"cancel": "ยกเลิก",
@@ -189,7 +248,9 @@
"backToHome": "กลับสู่หน้าหลัก",
"error": "เกิดข้อผิดพลาด",
"loading": "กำลังโหลด",
- "items": "รายการ"
+ "items": "รายการ",
+ "student": "นักเรียน",
+ "latest": "ล่าสุด"
},
"classroom": {
"backToDashboard": "กลับไปคอร์สของฉัน",
@@ -258,5 +319,16 @@
"statusNotStarted": "ยังไม่ทำ",
"alertIncomplete": "กรุณาเลือกคำตอบให้ครบทุกข้อ",
"yourAnswer": "คำตอบของคุณ"
+ },
+ "footer": {
+ "location": "สถานที่ตั้ง",
+ "connectWithUs": "ติดต่อเรา",
+ "broncoHorse": "Bronco Hourse",
+ "address": "123 อาคารสยามทาวเวอร์ ชั้น 15 เขตปทุมวัน กรุงเทพฯ 10330",
+ "emailLabel": "อีเมล",
+ "emailValue": "info{'@'}chamomind.com",
+ "telLabel": "เบอร์โทรศัพท์",
+ "telValue": "02-123-4567",
+ "copyright": "© 2026 E-Learning Platform. All rights reserved."
}
}
diff --git a/Frontend-Learner/layouts/dashboard-index.vue b/Frontend-Learner/layouts/dashboard-index.vue
new file mode 100644
index 00000000..d9ff4593
--- /dev/null
+++ b/Frontend-Learner/layouts/dashboard-index.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentUser?.firstName || 'Guest' }} {{ currentUser?.lastName || '' }}
+
+
{{ currentUser?.email || 'e-learning@platform.com' }}
+
+
+
+
+
+
+
+
+ เมนูหลัก
+
+
+
+ {{ $t("sidebar.overview") }}
+
+
+
+
+ {{ $t("landing.allCourses") }}
+
+
+
+
+ {{ $t("sidebar.myCourses") || 'คอร์สเรียนของฉัน' }}
+
+
+
+
+
+ เครื่องมือและการตั้งค่า
+
+
+
+
+
+
+ ภาษา
+
+
+
+
+
+
+
+
+
+
+ โหมดกลางคืน
+
+
+
+
+
+
+
+ จัดการโปรไฟล์
+
+
+
+
+
+
+
+
+ ออกจากระบบ
+
+
+ E-Learning Platform v1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Frontend-Learner/layouts/default.vue b/Frontend-Learner/layouts/default.vue
index 8bd52170..b3c48c41 100644
--- a/Frontend-Learner/layouts/default.vue
+++ b/Frontend-Learner/layouts/default.vue
@@ -1,58 +1,65 @@
-
+
+
-
+
-
+
-
-
+
+
+
+
-
-
-
-
diff --git a/Frontend-Learner/nuxt.config.ts b/Frontend-Learner/nuxt.config.ts
index ed929816..e0617f89 100644
--- a/Frontend-Learner/nuxt.config.ts
+++ b/Frontend-Learner/nuxt.config.ts
@@ -33,8 +33,11 @@ export default defineNuxtConfig({
// การตั้งค่า Quasar Framework
quasar: {
+ iconSet: 'material-icons-outlined',
extras: {
- fontIcons: ["material-icons"],
+ fontIcons: [
+ "material-icons",
+ "material-icons-outlined"] // ใช้ไอคอน Material Icons, material-icons-outlined
},
plugins: ["Notify", "Dialog"], // เปิดใช้ Plugin Notify และ Dialog
config: {
@@ -66,6 +69,7 @@ export default defineNuxtConfig({
{ name: "viewport", content: "width=device-width, initial-scale=1" },
],
link: [
+ { rel: 'icon', type: 'image/png', href: '/img/logo.png' },
{
rel: "stylesheet",
// โหลด Font: Inter, Prompt, Sarabun
diff --git a/Frontend-Learner/pages/auth/login.vue b/Frontend-Learner/pages/auth/login.vue
index e30602df..7e75ee5a 100644
--- a/Frontend-Learner/pages/auth/login.vue
+++ b/Frontend-Learner/pages/auth/login.vue
@@ -237,17 +237,24 @@ onMounted(() => {
+
+
+
บัญชีสำหรับทดสอบ (Test Account)
+
+
+ studentedtest@example.com
+
+
+ Password:
+ admin123
+
+
+
+
-
-
-
-
+
ยังไม่มีบัญชีสมาชิก?
diff --git a/Frontend-Learner/pages/browse/discovery.vue b/Frontend-Learner/pages/browse/discovery.vue
index 51401e36..e8f15f77 100644
--- a/Frontend-Learner/pages/browse/discovery.vue
+++ b/Frontend-Learner/pages/browse/discovery.vue
@@ -1,9 +1,7 @@
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
- {{ $t('discovery.title') }}
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+ {{ course.category_name }}
+
+
+
+
+
+
{{ getLocalizedText(course.title) }}
+
+
+
+
+
+ {{ course.formatted_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+ {{ course.category_name }}
+
+
+
+
+
{{ getLocalizedText(course.title) }}
+
+
+
+
+ {{ course.formatted_price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t("discovery.emptyTitle") }}
+
{{ $t("discovery.emptyDesc") }}
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
{{ $t('discovery.emptyTitle') }}
-
- {{ $t('discovery.emptyDesc') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Frontend-Learner/pages/browse/index.vue b/Frontend-Learner/pages/browse/index.vue
index b2c1366c..669fa5d5 100644
--- a/Frontend-Learner/pages/browse/index.vue
+++ b/Frontend-Learner/pages/browse/index.vue
@@ -1,26 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- คอร์สเรียนออนไลน์ทั้งหมด
-
-
-
- เริ่มต้นอัปสกิลของคุณวันนี้ด้วยหลักสูตรคุณภาพที่ออกแบบโดยผู้เชี่ยวชาญในอุตสาหกรรม
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- รายการคอร์สเรียน
-
-
-
-
-
-
-
-