From 76b64a30aea340d3a482c081a3491a05bc4d3e5c Mon Sep 17 00:00:00 2001 From: supalerk-ar66 Date: Thu, 19 Feb 2026 13:12:14 +0700 Subject: [PATCH] feat: Initialize project with core Nuxt configuration, Quasar layouts, global Tailwind CSS, and essential components. --- Frontend-Learner/assets/css/main.css | 3 +- .../components/layout/AppHeader.vue | 8 - .../components/layout/LandingFooter.vue | 90 ++++++ .../components/layout/LandingHeader.vue | 270 +++++++++++------- Frontend-Learner/error.vue | 2 +- Frontend-Learner/layouts/default.vue | 2 +- Frontend-Learner/layouts/landing.vue | 3 + Frontend-Learner/nuxt.config.ts | 2 +- Frontend-Learner/pages/dashboard/index.vue | 55 ++-- Frontend-Learner/pages/index.vue | 36 +-- 10 files changed, 311 insertions(+), 160 deletions(-) create mode 100644 Frontend-Learner/components/layout/LandingFooter.vue diff --git a/Frontend-Learner/assets/css/main.css b/Frontend-Learner/assets/css/main.css index db18a4fb..960858a7 100644 --- a/Frontend-Learner/assets/css/main.css +++ b/Frontend-Learner/assets/css/main.css @@ -27,7 +27,7 @@ /* Typography */ /* Typography */ --font-main: - "Prompt", "Sarabun", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", + "Prompt", "Inter", "Sarabun", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif; /* Layout */ @@ -634,6 +634,7 @@ ul { } .font-bold { font-weight: 700; + letter-spacing: normal; } .w-full { width: 100%; diff --git a/Frontend-Learner/components/layout/AppHeader.vue b/Frontend-Learner/components/layout/AppHeader.vue index b8ef5613..ab1444d8 100644 --- a/Frontend-Learner/components/layout/AppHeader.vue +++ b/Frontend-Learner/components/layout/AppHeader.vue @@ -69,15 +69,7 @@ const searchText = ref('')
- - - - - - - 2 - diff --git a/Frontend-Learner/components/layout/LandingFooter.vue b/Frontend-Learner/components/layout/LandingFooter.vue new file mode 100644 index 00000000..ac3ed521 --- /dev/null +++ b/Frontend-Learner/components/layout/LandingFooter.vue @@ -0,0 +1,90 @@ + + + diff --git a/Frontend-Learner/components/layout/LandingHeader.vue b/Frontend-Learner/components/layout/LandingHeader.vue index 19ad4d27..ee6d8fd9 100644 --- a/Frontend-Learner/components/layout/LandingHeader.vue +++ b/Frontend-Learner/components/layout/LandingHeader.vue @@ -3,22 +3,35 @@ * @file LandingHeader.vue * @description The main header for the public landing pages. * Features a transparent background that becomes solid/glass upon scrolling. + * Responsive: Collapses into a drawer on mobile (md breakpoint). */ // Track scrolling state to adjust header styling const isScrolled = ref(false) const { isAuthenticated } = useAuth() +// Mobile Drawer State +const mobileMenuOpen = ref(false) const handleScroll = () => { isScrolled.value = window.scrollY > 20 } +// Lock body scroll when mobile menu is open +watch(mobileMenuOpen, (isOpen) => { + if (isOpen) { + document.body.style.overflow = 'hidden' + } else { + document.body.style.overflow = '' + } +}) + onMounted(() => { window.addEventListener('scroll', handleScroll) }) onUnmounted(() => { window.removeEventListener('scroll', handleScroll) + document.body.style.overflow = '' // Cleanup }) @@ -28,139 +41,180 @@ onUnmounted(() => { - Transitions between transparent and glass effect based on scroll. -->
-
- -
- - -
- E -
-
- - E-Learning - - - Platform - -
+
+ + +
+ E +
+
+ + E-Learning + + + Platform + +
+
+ + + - - -
- - -
+ + + + + + + +
+ +
+
+ + + + + + +
+ + +
+
+
+
diff --git a/Frontend-Learner/error.vue b/Frontend-Learner/error.vue index 4d957a3b..75540c71 100644 --- a/Frontend-Learner/error.vue +++ b/Frontend-Learner/error.vue @@ -86,7 +86,7 @@ const handleError = () => { background-color: var(--bg-body); color: var(--text-main); padding: 24px; - font-family: 'Inter', 'Prompt', 'Sarabun', sans-serif; + font-family: var(--font-main); } .error-content { diff --git a/Frontend-Learner/layouts/default.vue b/Frontend-Learner/layouts/default.vue index 42ef7e83..8bd52170 100644 --- a/Frontend-Learner/layouts/default.vue +++ b/Frontend-Learner/layouts/default.vue @@ -53,6 +53,6 @@ const toggleLeftDrawer = () => { diff --git a/Frontend-Learner/layouts/landing.vue b/Frontend-Learner/layouts/landing.vue index c05167bf..75e90c7e 100644 --- a/Frontend-Learner/layouts/landing.vue +++ b/Frontend-Learner/layouts/landing.vue @@ -36,6 +36,9 @@ onMounted(() => { + + + diff --git a/Frontend-Learner/nuxt.config.ts b/Frontend-Learner/nuxt.config.ts index b3079964..ed929816 100644 --- a/Frontend-Learner/nuxt.config.ts +++ b/Frontend-Learner/nuxt.config.ts @@ -69,7 +69,7 @@ export default defineNuxtConfig({ { rel: "stylesheet", // โหลด Font: Inter, Prompt, Sarabun - href: "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Prompt:wght@300;400;500;600;700;800;900&family=Sarabun:wght@300;400;500;600;700;800&display=swap", + href: "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Prompt:wght@300;400;500;600;700;800;900&family=Sarabun:wght@300;400;500;600;700;800&family=Poppins:wght@300;400;500;600;700;800;900&display=swap", }, ], }, diff --git a/Frontend-Learner/pages/dashboard/index.vue b/Frontend-Learner/pages/dashboard/index.vue index 08ba4d77..191c62b8 100644 --- a/Frontend-Learner/pages/dashboard/index.vue +++ b/Frontend-Learner/pages/dashboard/index.vue @@ -91,17 +91,7 @@ const sideCourses = computed(() => enrolledCourses.value.slice(1, 3))