feat: Implement initial e-learning platform frontend structure including dashboard, course management, authentication, and common UI components.

This commit is contained in:
supalerk-ar66 2026-02-27 10:05:33 +07:00
parent aceeb80d9a
commit ad11c6b7c5
44 changed files with 720 additions and 578 deletions

View file

@ -1,11 +1,11 @@
<script setup lang="ts">
/**
* @file dashboard-index.vue
* @description Layout for the Dashboard Index page, without the sidebar.
* Uses Quasar QLayout for responsive structure.
* @description เลยเอาตสำหรบหนาแรกของ Dashboard (ไมแผงเมนานขางเพอเนนพนทเนอหา)
* ใชโครงสรางจาก Quasar QLayout เพอใหรองร Responsive
*/
// Initialize global theme management
// Global
useThemeMode()
const { currentUser, logout } = useAuth()
@ -18,7 +18,7 @@ const toggleRightDrawer = () => {
<template>
<q-layout view="hHh lpR fFf" class="bg-slate-50 dark:!bg-[#020617] text-slate-900 dark:!text-slate-50">
<!-- Header -->
<!-- แถบดานบนของโครงสราง (Header) -->
<q-header
class="bg-white/80 dark:!bg-[#0f172a]/80 backdrop-blur-md text-slate-900 dark:!text-white"
>
@ -29,7 +29,7 @@ const toggleRightDrawer = () => {
/>
</q-header>
<!-- Master Mobile Drawer (The Everything Hub) -->
<!-- แถบลนชกมอถอหล (เมนรวมทกอยางเมอปดหนาจอ/กดไอคอนบนสดสวนเล) -->
<q-drawer
v-model="rightDrawerOpen"
side="right"
@ -39,7 +39,7 @@ const toggleRightDrawer = () => {
:width="300"
>
<div class="flex flex-col h-full bg-white dark:bg-[#0f172a]">
<!-- 1. Account Section (Premium Look) -->
<!-- 1. วนบญชใช (Account Section) ไซนพรเมยม -->
<div class="p-6 bg-slate-50/50 dark:bg-slate-800/30 border-b border-slate-100 dark:border-slate-800">
<div class="flex items-center justify-between mb-8">
<div class="flex items-center gap-3">
@ -62,10 +62,10 @@ const toggleRightDrawer = () => {
</div>
</div>
<!-- 2. Integrated Content Hub -->
<!-- 2. นยรวมเมนและเนอหา (Integrated Content Hub) -->
<div class="flex-grow overflow-y-auto pt-4">
<q-list padding class="text-slate-600 dark:text-slate-300">
<!-- Navigation -->
<!-- การนำทาง (Navigation) -->
<q-item-label header class="text-[11px] font-black tracking-[0.2em] text-slate-400 uppercase px-6 pb-2">เมนหล</q-item-label>
<q-item to="/dashboard" clickable v-ripple class="px-6 py-4" active-class="bg-blue-50 text-blue-600 dark:bg-blue-900/20 dark:text-blue-400 font-bold" @click="rightDrawerOpen = false">
@ -85,10 +85,10 @@ const toggleRightDrawer = () => {
<q-separator class="my-4 mx-6 opacity-50" />
<!-- Tools & Settings -->
<!-- เครองมอทวไปและการตงคาระบบ -->
<q-item-label header class="text-[11px] font-black tracking-[0.2em] text-slate-400 uppercase px-6 pb-2">เครองมอและการตงค</q-item-label>
<!-- Language Selection -->
<!-- มสลบภาษา -->
<q-item class="px-6 py-2">
<q-item-section avatar><q-icon name="language" size="22px" /></q-item-section>
<q-item-section>
@ -99,7 +99,7 @@ const toggleRightDrawer = () => {
</q-item-section>
</q-item>
<!-- Dark Mode Toggle -->
<!-- เปดปดโหมดม (Dark Mode Toggle) -->
<q-item class="px-6 py-2">
<q-item-section avatar><q-icon :name="isDark ? 'dark_mode' : 'light_mode'" size="22px" /></q-item-section>
<q-item-section>
@ -121,7 +121,7 @@ const toggleRightDrawer = () => {
</q-list>
</div>
<!-- 3. Bottom Actions -->
<!-- 3. วนลางส เช อกเอาต หรอระบเวอรนระบบ -->
<div class="p-6 mt-auto border-t border-slate-100 dark:border-slate-800">
<q-btn
unelevated
@ -138,18 +138,16 @@ const toggleRightDrawer = () => {
</div>
</q-drawer>
<!-- Sidebar Removed for this layout -->
<!-- หมายเหต: สำหรบหนาน จะไมไดการโชว Sidebar เปนลนชกซาย -->
<!-- Main Content -->
<!-- นทแสดงเนอหาหล -->
<q-page-container>
<q-page class="relative">
<slot />
</q-page>
</q-page-container>
<!-- Mobile Bottom Nav - Optional, keeping it consistent with default but maybe not needed if full width?
If we remove sidebar, we might still want mobile nav if it's main navigation.
Let's keep it for now as it doesn't hurt. -->
<!-- เมนมกดลางหนาจอบนมอถ (สำหรบชวยใหเขาถงหนาหลกไดไวข) -->
<q-footer
v-if="$q.screen.lt.md"
class="!bg-white dark:!bg-[#1e293b] text-primary"