| # Layout Components |
|
|
| Vue 3 layout components for the Sub2API frontend, built with Composition API, TypeScript, and TailwindCSS. |
|
|
| ## Components |
|
|
| ### 1. AppLayout.vue |
|
|
| Main application layout with sidebar and header. |
|
|
| **Usage:** |
|
|
| ```vue |
| <template> |
| <AppLayout> |
| <!-- Your page content here --> |
| <h1>Dashboard</h1> |
| <p>Welcome to your dashboard!</p> |
| </AppLayout> |
| </template> |
| |
| <script setup lang="ts"> |
| import { AppLayout } from '@/components/layout' |
| </script> |
| ``` |
|
|
| **Features:** |
|
|
| - Responsive sidebar (collapsible) |
| - Fixed header at top |
| - Main content area with slot |
| - Automatically adjusts margin based on sidebar state |
|
|
| --- |
|
|
| ### 2. AppSidebar.vue |
|
|
| Navigation sidebar with user and admin sections. |
|
|
| **Features:** |
|
|
| - Logo/brand at top |
| - User navigation links: |
| - Dashboard |
| - API Keys |
| - Usage |
| - Redeem |
| - Profile |
| - Admin navigation links (shown only if user is admin): |
| - Admin Dashboard |
| - Users |
| - Groups |
| - Accounts |
| - Proxies |
| - Redeem Codes |
| - Collapsible sidebar with toggle button |
| - Active route highlighting |
| - Icons using HTML entities |
| - Responsive (mobile-friendly) |
|
|
| **Used automatically by AppLayout** - no need to import separately. |
|
|
| --- |
|
|
| ### 3. AppHeader.vue |
|
|
| Top header with user info and actions. |
|
|
| **Features:** |
|
|
| - Mobile menu toggle button |
| - Page title (from route meta or slot) |
| - User balance display (desktop only) |
| - User dropdown menu with: |
| - Profile link |
| - Logout button |
| - User avatar with initials |
| - Click-outside handling for dropdown |
| - Responsive design |
|
|
| **Usage with custom title:** |
|
|
| ```vue |
| <template> |
| <AppLayout> |
| <template #title> Custom Page Title </template> |
| |
| <!-- Your content --> |
| </AppLayout> |
| </template> |
| ``` |
|
|
| **Used automatically by AppLayout** - no need to import separately. |
|
|
| --- |
|
|
| ### 4. AuthLayout.vue |
|
|
| Simple centered layout for authentication pages (login/register). |
|
|
| **Usage:** |
|
|
| ```vue |
| <template> |
| <AuthLayout> |
| <!-- Login/Register form content --> |
| <h2 class="mb-6 text-2xl font-bold">Login</h2> |
| |
| <form @submit.prevent="handleLogin"> |
| <!-- Form fields --> |
| </form> |
| |
| <!-- Optional footer slot --> |
| <template #footer> |
| <p> |
| Don't have an account? |
| <router-link to="/register" class="text-indigo-600 hover:underline"> Sign up </router-link> |
| </p> |
| </template> |
| </AuthLayout> |
| </template> |
| |
| <script setup lang="ts"> |
| import { AuthLayout } from '@/components/layout' |
| |
| function handleLogin() { |
| // Login logic |
| } |
| </script> |
| ``` |
|
|
| **Features:** |
|
|
| - Centered card container |
| - Gradient background |
| - Logo/brand at top |
| - Main content slot |
| - Optional footer slot for links |
| - Fully responsive |
|
|
| --- |
|
|
| ## Route Configuration |
|
|
| To set page titles in the header, add meta to your routes: |
|
|
| ```typescript |
| // router/index.ts |
| const routes = [ |
| { |
| path: '/dashboard', |
| component: DashboardView, |
| meta: { title: 'Dashboard' } |
| }, |
| { |
| path: '/api-keys', |
| component: ApiKeysView, |
| meta: { title: 'API Keys' } |
| } |
| // ... |
| ] |
| ``` |
|
|
| --- |
|
|
| ## Store Dependencies |
|
|
| These components use the following Pinia stores: |
|
|
| - **useAuthStore**: For user authentication state, role checking, and logout |
| - **useAppStore**: For sidebar state management and toast notifications |
|
|
| Make sure these stores are properly initialized in your app. |
|
|
| --- |
|
|
| ## Styling |
|
|
| All components use TailwindCSS utility classes. Make sure your `tailwind.config.js` includes the component paths: |
|
|
| ```js |
| module.exports = { |
| content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'] |
| // ... |
| } |
| ``` |
|
|
| --- |
|
|
| ## Icons |
|
|
| Components use HTML entity icons for simplicity: |
|
|
| - 📈 Chart (Dashboard) |
| - 🔑 Key (API Keys) |
| - 📊 Bar Chart (Usage) |
| - 🎁 Gift (Redeem) |
| - 👤 User (Profile) |
| - 🔌 Admin |
| - 👥 Users |
| - 📁 Folder (Groups) |
| - 🌐 Globe (Accounts) |
| - 🔄 Network (Proxies) |
| - 🏷 Ticket (Redeem Codes) |
|
|
| You can replace these with your preferred icon library (e.g., Heroicons, Font Awesome) if needed. |
|
|
| --- |
|
|
| ## Mobile Responsiveness |
|
|
| All components are fully responsive: |
|
|
| - **AppSidebar**: Fixed positioning on desktop, hidden by default on mobile |
| - **AppHeader**: Shows mobile menu toggle on small screens, hides balance display |
| - **AuthLayout**: Adapts padding and card size for mobile devices |
|
|
| The sidebar uses Tailwind's responsive breakpoints (md:) to adjust behavior. |
|
|