# Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer ## Megvalósíthatósági Elemzés **Dátum:** 2026-06-08 **Készítette:** Rendszer-Architect **Mérföldkő:** #26 - Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer --- ## 📊 Készültségi Összesítő | Kártya | Cím | Készültség | Függőség | Fázis | |--------|-----|-----------|---------|-------| | #228 | JSONB `visual_settings` | **0%** | - | 1. Backend | | #229 | RBAC/ABAC Engedélyezés | **40%** | #228 (opc.) | 1. Backend | | #230 | Dinamikus/Statikus Fordítás | **80%** | - | 3. i18n | | #231 | Layout komponensek | **60%** | #232 | 2. Frontend | | #232 | Vue Router Nested Routing | **50%** | #231 | 2. Frontend | | #233 | i18n audit | **30%** | #230, #232 | 3. i18n | | #234 | Tailwind Témaváltó | **0%** | #228, #229 | 3. Téma | | #235 | Expansion Card | **0%** | #232 | 4. UI Kit | | #236 | Vészjelző Rendszer | **10%** | #232 | 4. UI Kit | --- ## 1. FÁZIS: Adatbázis és Backend Alapozás ### 🔴 #228 - JSONB `visual_settings` (0% kész) **Már létezik:** - Nincs `visual_settings` mező sem a `User` modellen, sem az `Organization` modellen - Az `Organization.notification_settings` (`JSON`) és `Organization.external_integration_config` (`JSON`) mintaként szolgálnak a JSONB használathoz - A `User.custom_permissions` (`JSON`) szintén minta a JSON mezőkhöz **Hiányzik:** - `visual_settings` JSONB mező a `User` táblában (pl.: `theme_mode`, `primary_color`, `animations_enabled`, `compact_mode`) - `visual_settings` JSONB mező az `Organization` táblában (pl.: `wall_logo_url`, `brand_color`, `custom_css_overrides`) - Backend API végpont: `PATCH /users/me/visual-settings`, `PATCH /organizations/{id}/visual-settings` - A `UserProfile` interface-ben nincs `visual_settings` mező - Az `OrganizationItem` interface-ben nincs `visual_settings` mező --- ### 🟡 #229 - RBAC/ABAC Engedélyezés (40% kész) **Már létezik:** - `UserRole` enum: `superadmin`, `admin`, `user`, `fleet_manager`, `sales`, `guest` - `OrgUserRole` enum: `owner`, `admin`, `manager`, `driver`, `viewer` - `User.subscription_plan`: `server_default="FREE"` - `Organization.subscription_plan`: létező mező - `User.custom_permissions`: JSON mező (kiterjeszthető ABAC-hoz) - `UserProfile`: `role`, `subscription_plan`, `scope_level` mezők léteznek - `OrganizationItem`: `subscription_plan` mező létezik **Hiányzik:** - `allow_custom_skin` és `allow_advanced_animations` feature flag-ok a subscription_plan JSON-ben - Backend feature flag check utility/service - Frontend `hasFeature(featureName: string): boolean` metódus - Subscription plan definíciók (FREE=max 3 vehicle, BASIC=10, PREMIUM=unlimited) --- ## 2. FÁZIS: Frontend Struktúra & Layout Szétválasztás ### 🟡 #231 - Layout komponensek (60% kész) **Már létezik:** - `ConsumerLayout.vue`: **195 sor**, teljes layout headerrel, footerral, dekorációs elemekkel, quick actions grid-del - `CorporateLayout.vue`: **98 sor**, céges sidebar, quick stats placeholder-ekkel - `AdminLayout.vue`: **195 sor**, admin sötét sidebar - Mindhárom layout ``-ot használ a tartalom beillesztésére **Hiányzik:** - **KRITIKUS**: `` → `` csere mindhárom layout-ban - `ConsumerLayout.vue` átnevezése `PrivateLayout.vue`-ra - `CorporateLayout.vue` átnevezése `OrganizationLayout.vue`-ra - "Privát felület" gomb az `OrganizationLayout.vue`-ban (auth store `switchOrganization(null)` hívás) - "Céges felület" gomb a `PrivateLayout.vue`-ban (első business org-ra váltás) - Layout transition animációk (`` wrapper) --- ### 🟡 #232 - Vue Router átírás Nested Routing (50% kész) **Már létezik:** - `router/index.ts`: **83 sor**, globális `beforeEach` guard, auth ellenőrzés, landing redirect - Route-ok: `/`, `/dashboard`, `/complete-kyc`, `/profile`, `/verify`, `/reset-password`, `/company/onboard`, `/company/garage` - `beforeEach` guard: kezeli a `requiresAuth` meta-t, token ellenőrzést **Hiányzik:** - **Nincs nested routing** - minden route gyökér szinten - Nincs layout wrapper pattern - `/company/garage` route-nak nincs `/:id` paramétere - Route meta kiterjesztése: `meta: { layout: 'private' | 'organization' | 'admin', requiresOrg: boolean }` **Cél nested struktúra:** ```typescript { path: '/', component: PrivateLayout, children: [ { path: '', name: 'Landing', component: LandingView }, { path: 'dashboard', name: 'Dashboard', component: DashboardView, meta: { requiresAuth: true } }, { path: 'profile', name: 'Profile', component: ProfileView, meta: { requiresAuth: true } }, ] }, { path: '/company/:id', component: OrganizationLayout, children: [ { path: 'dashboard', name: 'OrgDashboard', component: OrgDashboardView, meta: { requiresAuth: true, requiresOrg: true } }, { path: 'garage', name: 'OrgGarage', component: CompanyGarageView, meta: { requiresAuth: true, requiresOrg: true } }, ] } ``` --- ## 3. FÁZIS: Többnyelvűség (i18n) & Vizuális Témaváltó ### 🟢 #230 - Dinamikus és Statikus Fordítási Rendszer (80% kész) **Már létezik:** - **Backend**: `Translation` modell - **TELJESEN KÉSZ** (`system.translations` tábla) - **Frontend**: `vue-i18n` beüzemelve `legacy: false` módban, `detectLocale()` függvénnyel - 6 nyelvi fájl: `hu.ts`, `en.ts`, `de.ts`, `ro.ts`, `cz.ts`, `sk.ts` - `translationService.ts`: `fetchTranslations()`, `fetchAllTranslations()`, `updateTranslation()` - `appModeStore.ts`: `setLanguage(lang)`, `loadTranslations(lang)`, `getTranslation(key, defaultValue)` - `LanguageSwitcher.vue`: létező komponens **Hiányzik:** - Backend API végpontok ellenőrzése (létezik-e `GET /api/v1/translations`?) - Cache stratégia a dinamikus fordításokhoz (localStorage + verziószám) --- ### 🟠 #233 - i18n audit és szövegek kiszervezése (30% kész) **Már létezik:** - 6 db nyelvi fájl a `frontend/src/i18n/` mappában - `hu.ts` kulcsstruktúra: `menu.*`, `header.*`, `dashboard.*`, `zen.*`, `auth.*` - `DashboardHeader.vue` részleges i18n használat (`{{ t('menu.features') }}`) - Backend JSON locale fájlok: `backend/static/locales/hu.json` **Hiányzik - Hardcoded szövegek:** 1. **`DashboardView.vue`**: `SZERVIZNAPTÁR`, `SERVICE FINDER`, `Irányítópultod és járműveid áttekintése` 2. **`ConsumerLayout.vue`**: `Vehicle Registration`, `Service Booking`, `Cost Tracking`, `Tracking`, `Documents` (6 db), `© 2024 Your Company. All rights reserved.` 3. **`CorporateLayout.vue`**: `Organization`, `Overview`, `Vehicles`, `Drivers`, `Maintenance`, `Reports` (6 db sidebar), `42 vehicles`, `7 pending`, `€12,450` 4. **`CompanyGarageView.vue`**: `Céges garázs` **Hiányzó i18n kulcsok:** - `garage.private.title`, `garage.company.title` - `buttons.next`, `buttons.save`, `buttons.cancel` - `errors.*` (validációs hibák) - `organization.*` (szervezeti nézetek) - `layout.*` (layout elemek) - `quickActions.*` (gyors akciók) --- ### 🔴 #234 - Tailwind CSS Változók és Témakezelő (0% kész) **Már létezik:** - `tailwind.config.js`: **38 sor**, egyedi színrendszer (sf-wall, sf-green, sf-blue, sf-accent, sf-dark stb.) - `main.css`: **117 sor**, `btn-premium`, `hotspot-pulse`, `hotspot-ring` animációk **Hiányzik:** - **CSS Custom Properties** a `tailwind.config.js`-ben - nincs `var(--theme-*)` referencia - `AppThemeStore` Pinia store - nem létezik - Témaváltó logika: `light`, `dark`, `corporate` módok - `:root` CSS változók (`--theme-bg`, `--theme-primary`, `--theme-text`, `--theme-accent`, `--theme-glass`) - Sötét mód CSS (`dark:` osztályok hiányoznak) - `applyTheme(settings)` függvény --- ## 4. FÁZIS: Animált UI Készlet ### 🔴 #235 - Expansion Card komponens (0% kész) **Már létezik:** - Nincs dedikált Expansion/ExpandableCard komponens - A `DashboardView.vue` jármű kártyái group hover effekteket használnak **Hiányzik:** - Teljes `ExpansionCard.vue` komponens (Vue 3 `