9.6 KiB
9.6 KiB
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_settingsmező sem aUsermodellen, sem azOrganizationmodellen - Az
Organization.notification_settings(JSON) ésOrganization.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_settingsJSONB mező aUsertáblában (pl.:theme_mode,primary_color,animations_enabled,compact_mode)visual_settingsJSONB mező azOrganizationtá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
UserProfileinterface-ben nincsvisual_settingsmező - Az
OrganizationIteminterface-ben nincsvisual_settingsmező
🟡 #229 - RBAC/ABAC Engedélyezés (40% kész)
Már létezik:
UserRoleenum:superadmin,admin,user,fleet_manager,sales,guestOrgUserRoleenum:owner,admin,manager,driver,viewerUser.subscription_plan:server_default="FREE"Organization.subscription_plan: létező mezőUser.custom_permissions: JSON mező (kiterjeszthető ABAC-hoz)UserProfile:role,subscription_plan,scope_levelmezők léteznekOrganizationItem:subscription_planmező létezik
Hiányzik:
allow_custom_skinésallow_advanced_animationsfeature flag-ok a subscription_plan JSON-ben- Backend feature flag check utility/service
- Frontend
hasFeature(featureName: string): booleanmetó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-delCorporateLayout.vue: 98 sor, céges sidebar, quick stats placeholder-ekkelAdminLayout.vue: 195 sor, admin sötét sidebar- Mindhárom layout
<slot />-ot használ a tartalom beillesztésére
Hiányzik:
- KRITIKUS:
<slot />→<router-view />csere mindhárom layout-ban ConsumerLayout.vueátnevezésePrivateLayout.vue-raCorporateLayout.vueátnevezéseOrganizationLayout.vue-ra- "Privát felület" gomb az
OrganizationLayout.vue-ban (auth storeswitchOrganization(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 (
<Transition>wrapper)
🟡 #232 - Vue Router átírás Nested Routing (50% kész)
Már létezik:
router/index.ts: 83 sor, globálisbeforeEachguard, auth ellenőrzés, landing redirect- Route-ok:
/,/dashboard,/complete-kyc,/profile,/verify,/reset-password,/company/onboard,/company/garage beforeEachguard: kezeli arequiresAuthmeta-t, token ellenőrzést
Hiányzik:
- Nincs nested routing - minden route gyökér szinten
- Nincs layout wrapper pattern
/company/garageroute-nak nincs/:idparamétere- Route meta kiterjesztése:
meta: { layout: 'private' | 'organization' | 'admin', requiresOrg: boolean }
Cél nested struktúra:
{
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:
Translationmodell - TELJESEN KÉSZ (system.translationstábla) - Frontend:
vue-i18nbeüzemelvelegacy: falsemó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.tskulcsstruktúra:menu.*,header.*,dashboard.*,zen.*,auth.*DashboardHeader.vuerészleges i18n használat ({{ t('menu.features') }})- Backend JSON locale fájlok:
backend/static/locales/hu.json
Hiányzik - Hardcoded szövegek:
DashboardView.vue:SZERVIZNAPTÁR,SERVICE FINDER,Irányítópultod és járműveid áttekintéseConsumerLayout.vue:Vehicle Registration,Service Booking,Cost Tracking,Tracking,Documents(6 db),© 2024 Your Company. All rights reserved.CorporateLayout.vue:Organization,Overview,Vehicles,Drivers,Maintenance,Reports(6 db sidebar),42 vehicles,7 pending,€12,450CompanyGarageView.vue:Céges garázs
Hiányzó i18n kulcsok:
garage.private.title,garage.company.titlebuttons.next,buttons.save,buttons.cancelerrors.*(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-ringanimációk
Hiányzik:
- CSS Custom Properties a
tailwind.config.js-ben - nincsvar(--theme-*)referencia AppThemeStorePinia store - nem létezik- Témaváltó logika:
light,dark,corporatemódok :rootCSS 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.vuejármű kártyái group hover effekteket használnak
Hiányzik:
- Teljes
ExpansionCard.vuekomponens (Vue 3<script setup lang="ts">) - Props:
title,subtitle,icon,expanded(v-model),variant('default' | 'premium' | 'glass') - Animációk:
@keyframes expandIn/expandOut - Slots:
#header,#default,#actions
🟠 #236 - Kontextuális Vészjelző Rendszer (10% kész)
Már létezik:
hotspot-pulseéshotspot-ringanimációk amain.css-benConsumerLayout.vuescoped CSS pulse animáció- Base alert stílus a
btn-premiumosztályban (glassmorphism)
Hiányzik:
ContextAlert.vuekomponens - nem létezik- Props:
type('info' | 'warning' | 'error' | 'success'),message,autoClose,dismissible,action - Alert store (
useAlertStorePinia store) - Animációk: belépés (
slideInDown), kilépés (fadeOutUp) - Global alert renderelés (App.vue)
- Z-index kezelés
🔗 Ajánlott Implementációs Sorrend
Fázis 1 (Backend alapozás):
#228 (JSONB) ──► #229 (RBAC)
Fázis 2 (Frontend struktúra):
#231 (Layout-ok) ──► #232 (Router)
Fázis 3 (i18n + Téma):
#230 (Fordítás) ──► #233 (i18n audit)
#234 (Témaváltó) - független a #228/#229-től, de azok adják az adatforrást
Fázis 4 (UI Kit):
#235 (Expansion Card) - független
#236 (Alert System) - független
⚠️ Breaking Change Kockázatok
| Változtatás | Érintett komponensek | Kockázat |
|---|---|---|
<slot /> → <router-view /> |
Minden view | 🔴 Magas |
| Layout átnevezés | Importok minden fájlban | 🟡 Közepes |
| CSS variable bevezetés | Minden komponens színe | 🔴 Magas |
| Router nested átírás | beforeEach guard, view path-ok | 🔴 Magas |
| i18n kulcs átnevezés | Minden $t() hívás |
🟡 Közepes |