feat(mobile-fixes-phase3): Complete US-307 - Restructurare Footer Nav (4 butoane noi)
Implemented by Ralph autonomous loop. Iteration: 1 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
253
scripts/ralph/archive/prd-phase2-20260112-133438.json
Normal file
253
scripts/ralph/archive/prd-phase2-20260112-133438.json
Normal file
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"projectName": "mobile-navigation-improvements",
|
||||
"branchName": "ralph/unified-mobile-md",
|
||||
"description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware",
|
||||
"cssRules": {
|
||||
"documentation": [
|
||||
"docs/ONBOARDING_CSS.md",
|
||||
"docs/DESIGN_TOKENS.md",
|
||||
"docs/CSS_PATTERNS.md",
|
||||
"docs/MOBILE_PATTERNS.md"
|
||||
],
|
||||
"goldenRules": [
|
||||
"Folosește DOAR design tokens - NICIODATĂ valori hardcodate",
|
||||
"Verifică CSS_PATTERNS.md înainte de a scrie CSS nou",
|
||||
"Testează în AMBELE teme (light + dark mode)",
|
||||
"NICIODATĂ :deep() în componente (PrimeVue → vendor/)",
|
||||
"NICIODATĂ duplicate CSS (write once, use everywhere)",
|
||||
"Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav",
|
||||
"Mobile: filtrele se pun în BottomSheet, NU inline",
|
||||
"Mobile: selecția afișează acțiuni în footer, NU în header"
|
||||
],
|
||||
"mobileLayoutTokens": {
|
||||
"topBarHeight": "56px",
|
||||
"bottomNavHeight": "56px",
|
||||
"fabSize": "56px",
|
||||
"fabBottomOffset": "72px",
|
||||
"touchTargetMin": "48px"
|
||||
}
|
||||
},
|
||||
"userStories": [
|
||||
{
|
||||
"id": "US-201",
|
||||
"title": "MobileBottomNav activ pe Dashboard",
|
||||
"description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară",
|
||||
"priority": 1,
|
||||
"acceptanceCriteria": [
|
||||
"DashboardView.vue include MobileBottomNav component",
|
||||
"Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard",
|
||||
"MobileTopBar adăugat cu title 'Dashboard'",
|
||||
"Verify in browser: navigarea funcționează din Dashboard",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 1"
|
||||
},
|
||||
{
|
||||
"id": "US-202",
|
||||
"title": "MobileDrawerMenu Material Design cu Profil",
|
||||
"description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil",
|
||||
"priority": 2,
|
||||
"acceptanceCriteria": [
|
||||
"Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată",
|
||||
"Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)",
|
||||
"Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări",
|
||||
"Active state pe link-ul curent (bazat pe route)",
|
||||
"Animație slide-in de la stânga",
|
||||
"Close pe tap outside sau pe link click",
|
||||
"Dark mode support",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 2"
|
||||
},
|
||||
{
|
||||
"id": "US-208",
|
||||
"title": "Actualizare Router cu noile rute",
|
||||
"description": "Ca developer vreau router-ul configurat pentru noile pagini",
|
||||
"priority": 3,
|
||||
"acceptanceCriteria": [
|
||||
"Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)",
|
||||
"Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)",
|
||||
"Rută /settings → SettingsHubView (lazy loaded)",
|
||||
"Redirect /data-entry/ocr-metrics accesibil din Settings Hub",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 3"
|
||||
},
|
||||
{
|
||||
"id": "US-206",
|
||||
"title": "Creare Pagină Hub Setări",
|
||||
"description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări",
|
||||
"priority": 4,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/SettingsHubView.vue",
|
||||
"Route: /settings",
|
||||
"Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)",
|
||||
"MobileTopBar cu title 'Setări'",
|
||||
"MobileBottomNav cu Setări activ",
|
||||
"Click pe card navighează la pagina respectivă",
|
||||
"Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 4"
|
||||
},
|
||||
{
|
||||
"id": "US-204",
|
||||
"title": "Creare Pagină Analiză Scadențe",
|
||||
"description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori",
|
||||
"priority": 5,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/MaturityAnalysisView.vue",
|
||||
"Route: /reports/maturity-analysis",
|
||||
"Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)",
|
||||
"MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard",
|
||||
"MobileBottomNav activ",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 5"
|
||||
},
|
||||
{
|
||||
"id": "US-205",
|
||||
"title": "Creare Pagină Facturi Detaliate",
|
||||
"description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate",
|
||||
"priority": 6,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/DetailedInvoicesView.vue",
|
||||
"Route: /reports/detailed-invoices",
|
||||
"Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard",
|
||||
"MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi",
|
||||
"MobileBottomNav activ",
|
||||
"Filtre în BottomSheet pe mobil",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 6"
|
||||
},
|
||||
{
|
||||
"id": "US-203",
|
||||
"title": "Dashboard KPIs Only View",
|
||||
"description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid",
|
||||
"priority": 7,
|
||||
"acceptanceCriteria": [
|
||||
"DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs",
|
||||
"Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'",
|
||||
"Click pe quick-link navighează la pagina dedicată",
|
||||
"Desktop rămâne neschimbat (toate secțiunile)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 7"
|
||||
},
|
||||
{
|
||||
"id": "US-212",
|
||||
"title": "Quick Links în Dashboard Mobile",
|
||||
"description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi",
|
||||
"priority": 8,
|
||||
"acceptanceCriteria": [
|
||||
"După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'",
|
||||
"Design: icon + titlu + săgeată dreaptă (→)",
|
||||
"Click navighează la pagina respectivă",
|
||||
"Doar pe mobil (desktop are totul în aceeași pagină)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 8"
|
||||
},
|
||||
{
|
||||
"id": "US-207",
|
||||
"title": "Actualizare MobileBottomNav cu link Setări",
|
||||
"description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări",
|
||||
"priority": 9,
|
||||
"acceptanceCriteria": [
|
||||
"MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)",
|
||||
"Icon: pi-cog",
|
||||
"Active state când pe /settings sau /settings/* sau pagini admin",
|
||||
"Actualizare în toate paginile care folosesc MobileBottomNav",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 9"
|
||||
},
|
||||
{
|
||||
"id": "US-213",
|
||||
"title": "Actualizare Hamburger Menu în toate paginile",
|
||||
"description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația",
|
||||
"priority": 10,
|
||||
"acceptanceCriteria": [
|
||||
"Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu",
|
||||
"MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil",
|
||||
"Desktop păstrează navigarea existentă",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 10"
|
||||
},
|
||||
{
|
||||
"id": "US-210",
|
||||
"title": "Creare MobileActionBar Component",
|
||||
"description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil",
|
||||
"priority": 11,
|
||||
"acceptanceCriteria": [
|
||||
"Componentă src/shared/components/mobile/MobileActionBar.vue creată",
|
||||
"Props: actions (array of {label, icon, severity, handler, disabled})",
|
||||
"Layout: butoane full-width sau side-by-side (2 butoane)",
|
||||
"Position: fixed bottom, above MobileBottomNav",
|
||||
"Animație: slide-up la mount",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 11"
|
||||
},
|
||||
{
|
||||
"id": "US-209",
|
||||
"title": "Butoane Context-Aware în Editare Bon",
|
||||
"description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului",
|
||||
"priority": 12,
|
||||
"acceptanceCriteria": [
|
||||
"ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)",
|
||||
"Draft: Salvează | Submit pentru Aprobare | Șterge",
|
||||
"Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)",
|
||||
"Approved: doar vizualizare (butoane disabled sau ascunse)",
|
||||
"Rejected: Salvează (re-edit) | Re-submit",
|
||||
"Butoane în MobileActionBar fix jos pe mobil",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 12"
|
||||
},
|
||||
{
|
||||
"id": "US-211",
|
||||
"title": "Integrare MobileActionBar în ReceiptCreateUnifiedView",
|
||||
"description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil",
|
||||
"priority": 13,
|
||||
"acceptanceCriteria": [
|
||||
"ReceiptCreateUnifiedView folosește MobileActionBar pe mobil",
|
||||
"Desktop păstrează butoanele în form",
|
||||
"Buton Înapoi în MobileTopBar (deja există din US-105)",
|
||||
"Action bar dispare când se deschide BottomSheet sau alte overlay-uri",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 13"
|
||||
},
|
||||
{
|
||||
"id": "US-214",
|
||||
"title": "Actualizare Documentație MOBILE_PATTERNS.md",
|
||||
"description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri",
|
||||
"priority": 14,
|
||||
"acceptanceCriteria": [
|
||||
"Secțiune nouă: MobileDrawerMenu (usage, props)",
|
||||
"Secțiune nouă: MobileActionBar (usage, props)",
|
||||
"Secțiune actualizată: Navigation patterns (footer → settings hub)",
|
||||
"Diagrame ASCII actualizate cu noile rute",
|
||||
"npm run build passes (doar pentru validare că nu s-a stricat nimic)"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 14"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"projectName": "mobile-navigation-improvements",
|
||||
"projectName": "mobile-fixes-phase3",
|
||||
"branchName": "ralph/unified-mobile-md",
|
||||
"description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware",
|
||||
"description": "Corectări navigare mobilă: footer restructurat, tab-uri Clienți/Furnizori, FAB pe Bonuri, hamburger grupat",
|
||||
"cssRules": {
|
||||
"documentation": [
|
||||
"docs/ONBOARDING_CSS.md",
|
||||
@@ -14,10 +14,9 @@
|
||||
"Verifică CSS_PATTERNS.md înainte de a scrie CSS nou",
|
||||
"Testează în AMBELE teme (light + dark mode)",
|
||||
"NICIODATĂ :deep() în componente (PrimeVue → vendor/)",
|
||||
"NICIODATĂ duplicate CSS (write once, use everywhere)",
|
||||
"Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav",
|
||||
"Mobile: filtrele se pun în BottomSheet, NU inline",
|
||||
"Mobile: selecția afișează acțiuni în footer, NU în header"
|
||||
"Mobile: tab-uri pentru switch Clienți/Furnizori"
|
||||
],
|
||||
"mobileLayoutTokens": {
|
||||
"topBarHeight": "56px",
|
||||
@@ -29,225 +28,189 @@
|
||||
},
|
||||
"userStories": [
|
||||
{
|
||||
"id": "US-201",
|
||||
"title": "MobileBottomNav activ pe Dashboard",
|
||||
"description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară",
|
||||
"id": "US-307",
|
||||
"title": "Restructurare Footer Nav (4 butoane noi)",
|
||||
"description": "Ca utilizator mobil vreau footer navigation cu: Dashboard | Bonuri | Facturi | Setări",
|
||||
"priority": 1,
|
||||
"acceptanceCriteria": [
|
||||
"DashboardView.vue include MobileBottomNav component",
|
||||
"Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard",
|
||||
"MobileTopBar adăugat cu title 'Dashboard'",
|
||||
"Verify in browser: navigarea funcționează din Dashboard",
|
||||
"MobileBottomNav cu 4 butoane: Dashboard, Bonuri, Facturi, Setări",
|
||||
"Dashboard: icon pi-home, route /dashboard",
|
||||
"Bonuri: icon pi-receipt, route /data-entry",
|
||||
"Facturi: icon pi-file-edit, route /reports/invoices",
|
||||
"Setări: icon pi-cog, route /settings",
|
||||
"Active state corect pe fiecare pagină",
|
||||
"Ștergere link Upload din footer (mutat în FAB)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 1"
|
||||
},
|
||||
{
|
||||
"id": "US-202",
|
||||
"title": "MobileDrawerMenu Material Design cu Profil",
|
||||
"description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil",
|
||||
"id": "US-308",
|
||||
"title": "Actualizare Hamburger Menu - Grupat pe Categorii",
|
||||
"description": "Ca utilizator mobil vreau meniul hamburger organizat pe categorii clare",
|
||||
"priority": 2,
|
||||
"acceptanceCriteria": [
|
||||
"Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată",
|
||||
"Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)",
|
||||
"Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări",
|
||||
"Active state pe link-ul curent (bazat pe route)",
|
||||
"Animație slide-in de la stânga",
|
||||
"Close pe tap outside sau pe link click",
|
||||
"Dark mode support",
|
||||
"MobileDrawerMenu.vue restructurat cu secțiuni vizuale",
|
||||
"Secțiune PRINCIPALE: Dashboard → /dashboard, Bonuri → /data-entry",
|
||||
"Secțiune RAPOARTE: Facturi → /reports/invoices, Balanță → /reports/trial-balance, Casa și Banca → /reports/bank-cash",
|
||||
"Secțiune ANALIZE: Scadențe → /reports/maturity-analysis, Facturi Detaliate → /reports/detailed-invoices",
|
||||
"Secțiune ADMINISTRARE: Setări → /settings",
|
||||
"Separatori vizuali între secțiuni",
|
||||
"Header cu logo, Footer cu profil utilizator și logout",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 2"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-208",
|
||||
"title": "Actualizare Router cu noile rute",
|
||||
"description": "Ca developer vreau router-ul configurat pentru noile pagini",
|
||||
"id": "US-304",
|
||||
"title": "Tab-uri Clienți/Furnizori în Facturi",
|
||||
"description": "Ca utilizator vreau pagina Facturi să aibă tab-uri pentru Clienți și Furnizori",
|
||||
"priority": 3,
|
||||
"acceptanceCriteria": [
|
||||
"Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)",
|
||||
"Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)",
|
||||
"Rută /settings → SettingsHubView (lazy loaded)",
|
||||
"Redirect /data-entry/ocr-metrics accesibil din Settings Hub",
|
||||
"InvoicesView.vue modificat cu tab-uri: Clienți | Furnizori",
|
||||
"Tab-uri sub MobileTopBar (design Material, full-width)",
|
||||
"Switch între tab-uri păstrează filtrele active",
|
||||
"Default: primul tab activ (Clienți)",
|
||||
"URL query param pentru tab activ (?tab=suppliers)",
|
||||
"MobileTopBar cu title Facturi",
|
||||
"MobileBottomNav activ (Facturi highlighted)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 3"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-206",
|
||||
"title": "Creare Pagină Hub Setări",
|
||||
"description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări",
|
||||
"id": "US-305",
|
||||
"title": "Tab-uri Clienți/Furnizori în Scadențe",
|
||||
"description": "Ca utilizator vreau pagina Scadențe să aibă tab-uri pentru Clienți și Furnizori",
|
||||
"priority": 4,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/SettingsHubView.vue",
|
||||
"Route: /settings",
|
||||
"Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)",
|
||||
"MobileTopBar cu title 'Setări'",
|
||||
"MobileBottomNav cu Setări activ",
|
||||
"Click pe card navighează la pagina respectivă",
|
||||
"Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)",
|
||||
"MaturityAnalysisView.vue modificat cu tab-uri: Clienți | Furnizori",
|
||||
"Tab-uri sub MobileTopBar (design Material, full-width)",
|
||||
"Switch între tab-uri păstrează filtrele active",
|
||||
"Default: primul tab activ (Clienți)",
|
||||
"URL query param pentru tab activ (?tab=suppliers)",
|
||||
"MobileTopBar cu title Scadențe și buton ← Înapoi",
|
||||
"MobileBottomNav activ",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 4"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-204",
|
||||
"title": "Creare Pagină Analiză Scadențe",
|
||||
"description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori",
|
||||
"id": "US-301",
|
||||
"title": "Buton Înapoi în Creare/Editare/Vizualizare Bon",
|
||||
"description": "Ca utilizator mobil vreau buton ← Înapoi în MobileTopBar pe pagina de bon",
|
||||
"priority": 5,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/MaturityAnalysisView.vue",
|
||||
"Route: /reports/maturity-analysis",
|
||||
"Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)",
|
||||
"MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard",
|
||||
"MobileBottomNav activ",
|
||||
"ReceiptCreateUnifiedView.vue are MobileTopBar cu showBack=true",
|
||||
"Click pe ← navighează la /data-entry (lista bonuri)",
|
||||
"Funcționează în toate modurile: create, edit, view",
|
||||
"Verify in browser: butonul apare și funcționează",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 5"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-205",
|
||||
"title": "Creare Pagină Facturi Detaliate",
|
||||
"description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate",
|
||||
"id": "US-302",
|
||||
"title": "Footer Nav pe toate Paginile de Setări",
|
||||
"description": "Ca utilizator mobil vreau MobileBottomNav pe toate paginile din secțiunea Setări",
|
||||
"priority": 6,
|
||||
"acceptanceCriteria": [
|
||||
"View nou: src/modules/reports/views/DetailedInvoicesView.vue",
|
||||
"Route: /reports/detailed-invoices",
|
||||
"Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard",
|
||||
"MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi",
|
||||
"MobileBottomNav activ",
|
||||
"Filtre în BottomSheet pe mobil",
|
||||
"OCRMetricsView.vue include MobileBottomNav cu Setări activ",
|
||||
"CacheStatsView.vue include MobileBottomNav cu Setări activ",
|
||||
"ServerLogsView.vue include MobileBottomNav cu Setări activ",
|
||||
"TelegramAdminView.vue include MobileBottomNav cu Setări activ (dacă există)",
|
||||
"SettingsHubView.vue include MobileBottomNav cu Setări activ",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 6"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-203",
|
||||
"title": "Dashboard KPIs Only View",
|
||||
"description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid",
|
||||
"id": "US-303",
|
||||
"title": "FAB pe Pagina Bonuri (Mutare Upload)",
|
||||
"description": "Ca utilizator mobil vreau funcția Upload să fie în butonul FAB (+) pe pagina Bonuri",
|
||||
"priority": 7,
|
||||
"acceptanceCriteria": [
|
||||
"DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs",
|
||||
"Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'",
|
||||
"Click pe quick-link navighează la pagina dedicată",
|
||||
"Desktop rămâne neschimbat (toate secțiunile)",
|
||||
"ReceiptsListView.vue are buton FAB (+) în colțul dreapta-jos",
|
||||
"Click pe FAB deschide meniu popup: Bon Nou | Upload Bulk",
|
||||
"FAB poziționat deasupra MobileBottomNav (bottom: 72px)",
|
||||
"Bon Nou navighează la /data-entry/receipts/new",
|
||||
"Upload Bulk navighează la /data-entry/bulk-upload",
|
||||
"FAB vizibil doar pe mobil (isMobile)",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 7"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-212",
|
||||
"title": "Quick Links în Dashboard Mobile",
|
||||
"description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi",
|
||||
"id": "US-306",
|
||||
"title": "Restaurare Butoane Export și Filtrare pe Rapoarte",
|
||||
"description": "Ca utilizator mobil vreau butoane de export și filtrare pe toate rapoartele",
|
||||
"priority": 8,
|
||||
"acceptanceCriteria": [
|
||||
"După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'",
|
||||
"Design: icon + titlu + săgeată dreaptă (→)",
|
||||
"Click navighează la pagina respectivă",
|
||||
"Doar pe mobil (desktop are totul în aceeași pagină)",
|
||||
"InvoicesView.vue: buton Export (pi-download) și Filtrare (pi-filter) în MobileTopBar actions",
|
||||
"TrialBalanceView.vue: buton Export și Filtrare în MobileTopBar actions",
|
||||
"BankCashRegisterView.vue: buton Export și Filtrare în MobileTopBar actions",
|
||||
"ReceiptsListView.vue: buton Export și Filtrare în MobileTopBar actions",
|
||||
"MaturityAnalysisView.vue: buton Export și Filtrare în MobileTopBar actions",
|
||||
"Click pe Filtrare deschide BottomSheet cu filtrele paginii",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 8"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-207",
|
||||
"title": "Actualizare MobileBottomNav cu link Setări",
|
||||
"description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări",
|
||||
"id": "US-309",
|
||||
"title": "Cleanup Dashboard Mobile",
|
||||
"description": "Ca utilizator mobil vreau Dashboard-ul să afișeze doar KPIs fără quick-links",
|
||||
"priority": 9,
|
||||
"acceptanceCriteria": [
|
||||
"MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)",
|
||||
"Icon: pi-cog",
|
||||
"Active state când pe /settings sau /settings/* sau pagini admin",
|
||||
"Actualizare în toate paginile care folosesc MobileBottomNav",
|
||||
"DashboardView.vue pe mobil: ștergere quick-link cards dacă există",
|
||||
"Doar SwipeableCards cu KPIs pe mobil",
|
||||
"Desktop rămâne neschimbat",
|
||||
"MobileTopBar cu title Dashboard",
|
||||
"MobileBottomNav cu Dashboard activ",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 9"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-213",
|
||||
"title": "Actualizare Hamburger Menu în toate paginile",
|
||||
"description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația",
|
||||
"id": "US-310",
|
||||
"title": "Actualizare Router cu Modificările",
|
||||
"description": "Ca developer vreau router-ul actualizat pentru a funcționa cu noile pagini",
|
||||
"priority": 10,
|
||||
"acceptanceCriteria": [
|
||||
"Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu",
|
||||
"MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil",
|
||||
"Desktop păstrează navigarea existentă",
|
||||
"Rută /reports/invoices → InvoicesView funcțională",
|
||||
"Rută /reports/maturity-analysis → MaturityAnalysisView funcțională",
|
||||
"Rutele existente păstrate: /reports/trial-balance, /reports/bank-cash, /reports/detailed-invoices",
|
||||
"Cleanup rute nefolosite dacă există",
|
||||
"Toate rutele lazy loaded",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 10"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
},
|
||||
{
|
||||
"id": "US-210",
|
||||
"title": "Creare MobileActionBar Component",
|
||||
"description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil",
|
||||
"id": "US-311",
|
||||
"title": "Actualizare Documentație MOBILE_PATTERNS.md",
|
||||
"description": "Ca developer viitor vreau documentația actualizată cu modificările din Phase 3",
|
||||
"priority": 11,
|
||||
"acceptanceCriteria": [
|
||||
"Componentă src/shared/components/mobile/MobileActionBar.vue creată",
|
||||
"Props: actions (array of {label, icon, severity, handler, disabled})",
|
||||
"Layout: butoane full-width sau side-by-side (2 butoane)",
|
||||
"Position: fixed bottom, above MobileBottomNav",
|
||||
"Animație: slide-up la mount",
|
||||
"Secțiune actualizată: Footer Navigation (Dashboard, Bonuri, Facturi, Setări)",
|
||||
"Secțiune nouă: FAB Pattern pentru acțiuni contextuale",
|
||||
"Secțiune nouă: Tab Pattern pentru switch Clienți/Furnizori",
|
||||
"Secțiune actualizată: Hamburger Menu grupat pe categorii",
|
||||
"Diagrame ASCII actualizate cu noua structură navigare",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 11"
|
||||
},
|
||||
{
|
||||
"id": "US-209",
|
||||
"title": "Butoane Context-Aware în Editare Bon",
|
||||
"description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului",
|
||||
"priority": 12,
|
||||
"acceptanceCriteria": [
|
||||
"ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)",
|
||||
"Draft: Salvează | Submit pentru Aprobare | Șterge",
|
||||
"Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)",
|
||||
"Approved: doar vizualizare (butoane disabled sau ascunse)",
|
||||
"Rejected: Salvează (re-edit) | Re-submit",
|
||||
"Butoane în MobileActionBar fix jos pe mobil",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 12"
|
||||
},
|
||||
{
|
||||
"id": "US-211",
|
||||
"title": "Integrare MobileActionBar în ReceiptCreateUnifiedView",
|
||||
"description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil",
|
||||
"priority": 13,
|
||||
"acceptanceCriteria": [
|
||||
"ReceiptCreateUnifiedView folosește MobileActionBar pe mobil",
|
||||
"Desktop păstrează butoanele în form",
|
||||
"Buton Înapoi în MobileTopBar (deja există din US-105)",
|
||||
"Action bar dispare când se deschide BottomSheet sau alte overlay-uri",
|
||||
"npm run build passes"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 13"
|
||||
},
|
||||
{
|
||||
"id": "US-214",
|
||||
"title": "Actualizare Documentație MOBILE_PATTERNS.md",
|
||||
"description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri",
|
||||
"priority": 14,
|
||||
"acceptanceCriteria": [
|
||||
"Secțiune nouă: MobileDrawerMenu (usage, props)",
|
||||
"Secțiune nouă: MobileActionBar (usage, props)",
|
||||
"Secțiune actualizată: Navigation patterns (footer → settings hub)",
|
||||
"Diagrame ASCII actualizate cu noile rute",
|
||||
"npm run build passes (doar pentru validare că nu s-a stricat nimic)"
|
||||
],
|
||||
"passes": true,
|
||||
"notes": "Completed in iteration 14"
|
||||
"passes": false,
|
||||
"notes": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,90 +1,17 @@
|
||||
# Ralph Progress Log - Phase 2
|
||||
Started: Mon Jan 12 12:03:01 PM UTC 2026
|
||||
Project: mobile-navigation-improvements
|
||||
# Ralph Progress Log - Phase 3
|
||||
Started: Mon Jan 12 01:35:36 PM UTC 2026
|
||||
Project: mobile-fixes-phase3
|
||||
Branch: ralph/unified-mobile-md (continuing)
|
||||
User Stories: 14 (US-201 to US-214)
|
||||
User Stories: 11 (US-301 to US-311)
|
||||
---
|
||||
[2026-01-12 12:03:07] Starting Ralph for project: mobile-navigation-improvements
|
||||
[2026-01-12 12:03:07] Max iterations: 100
|
||||
[2026-01-12 12:03:07] === Iteration 1/100 ===
|
||||
[2026-01-12 12:03:07] Working on story: US-201
|
||||
[2026-01-12 12:03:07] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-201.log)
|
||||
[2026-01-12 12:05:02] SUCCESS: Story US-201 passed!
|
||||
[2026-01-12 12:05:02] Changes committed
|
||||
[2026-01-12 12:05:02] Progress: 1/14 stories completed
|
||||
[2026-01-12 12:05:04] === Iteration 2/100 ===
|
||||
[2026-01-12 12:05:04] Working on story: US-202
|
||||
[2026-01-12 12:05:04] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_2_US-202.log)
|
||||
[2026-01-12 12:07:29] SUCCESS: Story US-202 passed!
|
||||
[2026-01-12 12:07:29] Changes committed
|
||||
[2026-01-12 12:07:29] Progress: 2/14 stories completed
|
||||
[2026-01-12 12:07:31] === Iteration 3/100 ===
|
||||
[2026-01-12 12:07:31] Working on story: US-208
|
||||
[2026-01-12 12:07:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_3_US-208.log)
|
||||
[2026-01-12 12:09:57] SUCCESS: Story US-208 passed!
|
||||
[2026-01-12 12:09:57] Changes committed
|
||||
[2026-01-12 12:09:57] Progress: 3/14 stories completed
|
||||
[2026-01-12 12:09:59] === Iteration 4/100 ===
|
||||
[2026-01-12 12:09:59] Working on story: US-206
|
||||
[2026-01-12 12:09:59] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_4_US-206.log)
|
||||
[2026-01-12 12:12:24] SUCCESS: Story US-206 passed!
|
||||
[2026-01-12 12:12:24] Changes committed
|
||||
[2026-01-12 12:12:24] Progress: 4/14 stories completed
|
||||
[2026-01-12 12:12:26] === Iteration 5/100 ===
|
||||
[2026-01-12 12:12:26] Working on story: US-204
|
||||
[2026-01-12 12:12:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_5_US-204.log)
|
||||
[2026-01-12 12:14:24] SUCCESS: Story US-204 passed!
|
||||
[2026-01-12 12:14:24] Changes committed
|
||||
[2026-01-12 12:14:24] Progress: 5/14 stories completed
|
||||
[2026-01-12 12:14:26] === Iteration 6/100 ===
|
||||
[2026-01-12 12:14:26] Working on story: US-205
|
||||
[2026-01-12 12:14:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_6_US-205.log)
|
||||
[2026-01-12 12:21:23] SUCCESS: Story US-205 passed!
|
||||
[2026-01-12 12:21:24] Changes committed
|
||||
[2026-01-12 12:21:24] Progress: 6/14 stories completed
|
||||
[2026-01-12 12:21:26] === Iteration 7/100 ===
|
||||
[2026-01-12 12:21:26] Working on story: US-203
|
||||
[2026-01-12 12:21:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_7_US-203.log)
|
||||
[2026-01-12 12:23:00] SUCCESS: Story US-203 passed!
|
||||
[2026-01-12 12:23:00] Changes committed
|
||||
[2026-01-12 12:23:00] Progress: 7/14 stories completed
|
||||
[2026-01-12 12:23:02] === Iteration 8/100 ===
|
||||
[2026-01-12 12:23:02] Working on story: US-212
|
||||
[2026-01-12 12:23:02] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_8_US-212.log)
|
||||
[2026-01-12 12:23:50] SUCCESS: Story US-212 passed!
|
||||
[2026-01-12 12:23:50] Changes committed
|
||||
[2026-01-12 12:23:50] Progress: 8/14 stories completed
|
||||
[2026-01-12 12:23:52] === Iteration 9/100 ===
|
||||
[2026-01-12 12:23:52] Working on story: US-207
|
||||
[2026-01-12 12:23:52] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_9_US-207.log)
|
||||
[2026-01-12 12:28:03] SUCCESS: Story US-207 passed!
|
||||
[2026-01-12 12:28:03] Changes committed
|
||||
[2026-01-12 12:28:03] Progress: 9/14 stories completed
|
||||
[2026-01-12 12:28:05] === Iteration 10/100 ===
|
||||
[2026-01-12 12:28:05] Working on story: US-213
|
||||
[2026-01-12 12:28:05] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_10_US-213.log)
|
||||
[2026-01-12 12:36:45] SUCCESS: Story US-213 passed!
|
||||
[2026-01-12 12:36:45] Changes committed
|
||||
[2026-01-12 12:36:45] Progress: 10/14 stories completed
|
||||
[2026-01-12 12:36:47] === Iteration 11/100 ===
|
||||
[2026-01-12 12:36:47] Working on story: US-210
|
||||
[2026-01-12 12:36:47] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_11_US-210.log)
|
||||
[2026-01-12 12:38:10] SUCCESS: Story US-210 passed!
|
||||
[2026-01-12 12:38:10] Changes committed
|
||||
[2026-01-12 12:38:10] Progress: 11/14 stories completed
|
||||
[2026-01-12 12:38:12] === Iteration 12/100 ===
|
||||
[2026-01-12 12:38:12] Working on story: US-209
|
||||
[2026-01-12 12:38:12] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_12_US-209.log)
|
||||
[2026-01-12 12:40:29] SUCCESS: Story US-209 passed!
|
||||
[2026-01-12 12:40:29] Changes committed
|
||||
[2026-01-12 12:40:29] Progress: 12/14 stories completed
|
||||
[2026-01-12 12:40:31] === Iteration 13/100 ===
|
||||
[2026-01-12 12:40:31] Working on story: US-211
|
||||
[2026-01-12 12:40:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_13_US-211.log)
|
||||
[2026-01-12 12:42:01] SUCCESS: Story US-211 passed!
|
||||
[2026-01-12 12:42:01] Changes committed
|
||||
[2026-01-12 12:42:01] Progress: 13/14 stories completed
|
||||
[2026-01-12 12:42:03] === Iteration 14/100 ===
|
||||
[2026-01-12 12:42:03] Working on story: US-214
|
||||
[2026-01-12 12:42:03] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_14_US-214.log)
|
||||
[2026-01-12 12:45:42] SUCCESS: Story US-214 passed!
|
||||
[2026-01-12 13:35:41] Starting Ralph for project: mobile-fixes-phase3
|
||||
[2026-01-12 13:35:41] Max iterations: 100
|
||||
[2026-01-12 13:35:41] === Iteration 1/100 ===
|
||||
[2026-01-12 13:35:41] Working on story: US-307
|
||||
[2026-01-12 13:35:41] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log)
|
||||
[2026-01-12 13:35:46] Starting Ralph for project: mobile-fixes-phase3
|
||||
[2026-01-12 13:35:46] Max iterations: 100
|
||||
[2026-01-12 13:35:46] === Iteration 1/100 ===
|
||||
[2026-01-12 13:35:46] Working on story: US-307
|
||||
[2026-01-12 13:35:46] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log)
|
||||
[2026-01-12 13:38:58] SUCCESS: Story US-307 passed!
|
||||
|
||||
@@ -558,11 +558,8 @@
|
||||
</Transition>
|
||||
|
||||
<!-- US-103: Mobile Bottom Navigation (using shared component) -->
|
||||
<MobileBottomNav
|
||||
v-if="isMobile && !mobileSelectionMode"
|
||||
:items="mobileBottomNavItems"
|
||||
@item-click="handleBottomNavClick"
|
||||
/>
|
||||
<!-- US-307: Using default nav items (Dashboard, Bonuri, Facturi, Setări) -->
|
||||
<MobileBottomNav v-if="isMobile && !mobileSelectionMode" />
|
||||
|
||||
<!-- Desktop: Compact Data Table with Batch Grouping (US-002) -->
|
||||
<!-- US-104: Explicit !isMobile check (not v-else) to ensure bulk-actions-bar only shows on desktop -->
|
||||
@@ -1119,20 +1116,8 @@ const handleTopBarAction = (action) => {
|
||||
}
|
||||
}
|
||||
|
||||
// US-103: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri', active: true },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' }, // No 'to' - handled via item-click
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
])
|
||||
|
||||
// US-103: Handle bottom nav clicks for items without routes
|
||||
const handleBottomNavClick = (item) => {
|
||||
if (item.label === 'Upload') {
|
||||
openBulkFileInput()
|
||||
}
|
||||
}
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
// Upload functionality moved to FAB (US-303)
|
||||
|
||||
// US-103/US-113: Selection footer actions for MobileSelectionFooter component
|
||||
// Bonuri batch actions: Delete + Export
|
||||
|
||||
@@ -381,11 +381,8 @@
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<!-- US-109: Mobile Bottom Navigation -->
|
||||
<MobileBottomNav
|
||||
v-if="isMobile"
|
||||
:items="mobileBottomNavItems"
|
||||
/>
|
||||
<!-- US-109/US-307: Mobile Bottom Navigation (using default nav items) -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -459,12 +456,7 @@ const handleTopBarAction = (action) => {
|
||||
};
|
||||
|
||||
// US-109: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
|
||||
{ to: "/reports/bank-cash-register", icon: "pi pi-wallet", label: "Trezorerie", active: true },
|
||||
{ to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
|
||||
{ to: "/settings", icon: "pi pi-cog", label: "Setări" }
|
||||
]);
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Handle window resize
|
||||
const handleResize = () => {
|
||||
|
||||
@@ -197,8 +197,8 @@
|
||||
</template>
|
||||
</Dialog>
|
||||
|
||||
<!-- US-111: Mobile Bottom Navigation -->
|
||||
<MobileBottomNav v-if="isMobile" :items="mobileBottomNavItems" />
|
||||
<!-- US-111/US-307: Mobile Bottom Navigation (using default nav items) -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -263,18 +263,7 @@ const handleTopBarAction = (action) => {
|
||||
}
|
||||
};
|
||||
|
||||
// US-111: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
|
||||
{
|
||||
to: "/reports/cache-stats",
|
||||
icon: "pi pi-database",
|
||||
label: "Cache",
|
||||
active: true,
|
||||
},
|
||||
{ to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
|
||||
{ to: "/settings", icon: "pi pi-cog", label: "Setări" },
|
||||
]);
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
|
||||
// US-111: Handle window resize
|
||||
const handleResize = () => {
|
||||
|
||||
@@ -179,8 +179,8 @@
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Mobile Bottom Nav -->
|
||||
<MobileBottomNav v-if="isMobile" :items="mobileNavItems" />
|
||||
<!-- Mobile Bottom Nav - US-307: Using default nav items -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@@ -539,13 +539,8 @@ const handleResize = () => {
|
||||
windowWidth.value = window.innerWidth;
|
||||
};
|
||||
|
||||
// Mobile navigation items with 'Rapoarte' active (since Dashboard is /reports/dashboard)
|
||||
const mobileNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte', active: true },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
]);
|
||||
// US-307: Removed custom mobileNavItems - using MobileBottomNav defaults
|
||||
// Dashboard is now at /dashboard with its own nav item
|
||||
|
||||
// Handle logout from drawer menu
|
||||
const handleLogout = async () => {
|
||||
|
||||
@@ -350,8 +350,8 @@
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Mobile Bottom Nav -->
|
||||
<MobileBottomNav v-if="isMobile" :items="mobileNavItems" />
|
||||
<!-- Mobile Bottom Nav - US-307: Using default nav items -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
|
||||
<!-- Mobile Filters BottomSheet -->
|
||||
<BottomSheet v-model="isFilterSheetOpen">
|
||||
@@ -483,12 +483,7 @@ const topBarActions = computed(() => [
|
||||
])
|
||||
|
||||
// Mobile navigation items
|
||||
const mobileNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte', active: true },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
])
|
||||
// US-307: Removed custom mobileNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Currency formatter
|
||||
const formatCurrency = (value) => {
|
||||
|
||||
@@ -364,11 +364,8 @@
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<!-- US-107: Mobile Bottom Navigation -->
|
||||
<MobileBottomNav
|
||||
v-if="isMobile"
|
||||
:items="mobileBottomNavItems"
|
||||
/>
|
||||
<!-- US-107/US-307: Mobile Bottom Navigation (using default nav items) -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -442,13 +439,7 @@ const handleTopBarAction = (action) => {
|
||||
}
|
||||
};
|
||||
|
||||
// US-107: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
|
||||
{ to: "/reports/invoices", icon: "pi pi-file-text", label: "Facturi", active: true },
|
||||
{ to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
|
||||
{ to: "/settings", icon: "pi pi-cog", label: "Setări" }
|
||||
]);
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Handle window resize
|
||||
const handleResize = () => {
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Mobile Bottom Nav -->
|
||||
<MobileBottomNav v-if="isMobile" :items="mobileNavItems" />
|
||||
<!-- Mobile Bottom Nav - US-307: Using default nav items -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@@ -76,12 +76,7 @@ const handlePeriodChange = (period) => {
|
||||
}
|
||||
|
||||
// Mobile navigation items
|
||||
const mobileNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte', active: true },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
])
|
||||
// US-307: Removed custom mobileNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Lifecycle
|
||||
onMounted(() => {
|
||||
|
||||
@@ -123,11 +123,8 @@
|
||||
</template>
|
||||
</Card>
|
||||
|
||||
<!-- US-110: Mobile Bottom Navigation -->
|
||||
<MobileBottomNav
|
||||
v-if="isMobile"
|
||||
:items="mobileBottomNavItems"
|
||||
/>
|
||||
<!-- US-110/US-307: Mobile Bottom Navigation (using default nav items) -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -218,13 +215,7 @@ const handleTopBarAction = (action) => {
|
||||
}
|
||||
}
|
||||
|
||||
// US-110: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ to: '/reports/server-logs', icon: 'pi pi-file-edit', label: 'Loguri', active: true },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
])
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
|
||||
// US-110: Handle window resize
|
||||
const handleResize = () => {
|
||||
|
||||
@@ -78,8 +78,8 @@
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Mobile Bottom Nav -->
|
||||
<MobileBottomNav v-if="isMobile" :items="mobileNavItems" />
|
||||
<!-- Mobile Bottom Nav - US-307: Using default nav items -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@@ -111,13 +111,7 @@ const handleLogout = async () => {
|
||||
router.push('/login')
|
||||
}
|
||||
|
||||
// Mobile navigation items - Settings is active on this page
|
||||
const mobileNavItems = computed(() => [
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări', active: true }
|
||||
])
|
||||
// US-307: Removed custom mobileNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Lifecycle
|
||||
onMounted(() => {
|
||||
|
||||
@@ -360,11 +360,8 @@
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<!-- US-108: Mobile Bottom Navigation -->
|
||||
<MobileBottomNav
|
||||
v-if="isMobile"
|
||||
:items="mobileBottomNavItems"
|
||||
/>
|
||||
<!-- US-108/US-307: Mobile Bottom Navigation (using default nav items) -->
|
||||
<MobileBottomNav v-if="isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -429,13 +426,7 @@ const handleTopBarAction = (action) => {
|
||||
}
|
||||
};
|
||||
|
||||
// US-108: Bottom nav items for MobileBottomNav component
|
||||
const mobileBottomNavItems = computed(() => [
|
||||
{ to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
|
||||
{ to: "/reports/trial-balance", icon: "pi pi-calculator", label: "Balanță", active: true },
|
||||
{ to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
|
||||
{ to: "/settings", icon: "pi pi-cog", label: "Setări" }
|
||||
]);
|
||||
// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
|
||||
|
||||
// Handle window resize
|
||||
const handleResize = () => {
|
||||
|
||||
@@ -130,13 +130,19 @@ const routes = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/dashboard',
|
||||
name: 'MainDashboard',
|
||||
component: () => import('@reports/views/DashboardView.vue'),
|
||||
meta: { requiresAuth: true, title: 'Dashboard - ROA2WEB' }
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
redirect: '/reports/dashboard'
|
||||
redirect: '/dashboard'
|
||||
},
|
||||
{
|
||||
path: '/:pathMatch(.*)*',
|
||||
redirect: '/reports/dashboard'
|
||||
redirect: '/dashboard'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
* - item-click: Emitted when a button item (without `to`) is clicked
|
||||
*
|
||||
* Default items (4 links):
|
||||
* - Dashboard (/dashboard)
|
||||
* - Bonuri (/data-entry)
|
||||
* - Upload (action button)
|
||||
* - Rapoarte (/reports/dashboard)
|
||||
* - Facturi (/reports/invoices)
|
||||
* - Setări (/settings)
|
||||
*/
|
||||
|
||||
@@ -56,9 +56,9 @@ defineProps({
|
||||
items: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
{ to: '/dashboard', icon: 'pi pi-home', label: 'Dashboard' },
|
||||
{ to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri' },
|
||||
{ icon: 'pi pi-cloud-upload', label: 'Upload' },
|
||||
{ to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' },
|
||||
{ to: '/reports/invoices', icon: 'pi pi-file-edit', label: 'Facturi' },
|
||||
{ to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
|
||||
],
|
||||
validator: (items) => {
|
||||
|
||||
400
tasks/prd-mobile-fixes-phase3.md
Normal file
400
tasks/prd-mobile-fixes-phase3.md
Normal file
@@ -0,0 +1,400 @@
|
||||
# PRD: Mobile Navigation Fixes - Phase 3
|
||||
|
||||
## 1. Introducere
|
||||
|
||||
Acest PRD continuă îmbunătățirile mobile din fazele anterioare, adresând bugfix-uri și ajustări identificate în testare. Scopul este corectarea navigării, restaurarea funcționalităților lipsă și restructurarea meniului footer pentru o experiență consistentă.
|
||||
|
||||
**Branch de lucru:** `ralph/unified-mobile-md` (continuare)
|
||||
|
||||
## 2. Obiective
|
||||
|
||||
### Obiectiv Principal
|
||||
- **Corectare navigare**: Buton Înapoi funcțional, footer nav consistent pe toate paginile
|
||||
|
||||
### Obiective Secundare
|
||||
- Restaurare butoane export/filtrare pe paginile de rapoarte
|
||||
- Restructurare footer: Dashboard, Bonuri, Facturi, Setări
|
||||
- Tab-uri Clienți/Furnizori în Facturi și Scadențe
|
||||
- Upload doar în butonul + pe pagina Bonuri
|
||||
|
||||
### Metrici de Succes
|
||||
- 100% pagini mobile au footer nav funcțional
|
||||
- Buton Înapoi pe toate paginile de editare/vizualizare
|
||||
- Export/Filtrare disponibile pe toate rapoartele
|
||||
|
||||
## 3. User Stories
|
||||
|
||||
---
|
||||
|
||||
### US-301: Buton Înapoi în Creare/Editare/Vizualizare Bon
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** buton ← Înapoi în MobileTopBar pe pagina de bon
|
||||
**Pentru că** acum nu pot reveni la lista de bonuri fără hamburger menu
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] ReceiptCreateUnifiedView.vue are MobileTopBar cu showBack=true
|
||||
- [ ] Click pe ← navighează la /data-entry (lista bonuri)
|
||||
- [ ] Funcționează în toate modurile: create, edit, view
|
||||
- [ ] Verify in browser: butonul apare și funcționează
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-302: Footer Nav pe toate Paginile de Setări
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** MobileBottomNav pe toate paginile din secțiunea Setări
|
||||
**Pentru că** unele pagini (OCR Metrics, Cache Stats, Loguri) nu au footer
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] OCRMetricsView.vue include MobileBottomNav
|
||||
- [ ] CacheStatsView.vue include MobileBottomNav
|
||||
- [ ] ServerLogsView.vue include MobileBottomNav
|
||||
- [ ] TelegramAdminView.vue include MobileBottomNav (dacă există)
|
||||
- [ ] SettingsHubView.vue include MobileBottomNav (verificare)
|
||||
- [ ] Setări activ/highlighted în footer pe aceste pagini
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-303: Mutare Upload din Footer în Butonul + pe Bonuri
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** funcția Upload să fie în butonul FAB (+) pe pagina Bonuri
|
||||
**Pentru că** Upload nu are sens în footer pe alte pagini
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] MobileBottomNav NU mai are link/buton Upload
|
||||
- [ ] ReceiptsListView.vue are buton FAB (+) în colțul dreapta-jos
|
||||
- [ ] Click pe FAB deschide meniu: "Bon Nou" | "Upload Bulk"
|
||||
- [ ] FAB poziționat deasupra MobileBottomNav (bottom: 72px)
|
||||
- [ ] Verify in browser: FAB apare doar pe pagina Bonuri
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-304: Tab-uri Clienți/Furnizori în Facturi
|
||||
**Ca** utilizator
|
||||
**Vreau** pagina Facturi să aibă tab-uri pentru Clienți și Furnizori
|
||||
**Pentru că** vreau să comut rapid între cele două perspective
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] InvoicesView.vue modificat cu tab-uri: "Clienți" | "Furnizori"
|
||||
- [ ] Tab-uri în MobileTopBar sau sub el (design Material)
|
||||
- [ ] Switch între tab-uri păstrează filtrele active
|
||||
- [ ] Default: primul tab activ (Clienți)
|
||||
- [ ] URL query param pentru tab activ (?tab=suppliers)
|
||||
- [ ] MobileTopBar cu title "Facturi"
|
||||
- [ ] MobileBottomNav activ (Facturi highlighted)
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-305: Tab-uri Clienți/Furnizori în Scadențe
|
||||
**Ca** utilizator
|
||||
**Vreau** pagina Scadențe să aibă tab-uri pentru Clienți și Furnizori
|
||||
**Pentru că** vreau să comut rapid între cele două perspective
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] MaturityAnalysisView.vue modificat cu tab-uri: "Clienți" | "Furnizori"
|
||||
- [ ] Tab-uri în MobileTopBar sau sub el (design Material)
|
||||
- [ ] Switch între tab-uri păstrează filtrele active
|
||||
- [ ] Default: primul tab activ (Clienți)
|
||||
- [ ] URL query param pentru tab activ (?tab=suppliers)
|
||||
- [ ] MobileTopBar cu title "Scadențe"
|
||||
- [ ] MobileBottomNav activ (Rapoarte în hamburger menu)
|
||||
- [ ] Buton ← Înapoi în MobileTopBar
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-306: Restaurare Butoane Export și Filtrare pe Rapoarte (Mobil)
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** butoane de export și filtrare pe Facturi, Balanță, Casa/Banca, Lista Bonuri
|
||||
**Pentru că** aceste funcționalități au dispărut în implementarea anterioară
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] InvoicesView.vue: buton Export în MobileTopBar actions
|
||||
- [ ] InvoicesView.vue: buton Filtrare care deschide BottomSheet
|
||||
- [ ] TrialBalanceView.vue: buton Export în MobileTopBar actions
|
||||
- [ ] TrialBalanceView.vue: buton Filtrare care deschide BottomSheet
|
||||
- [ ] BankCashRegisterView.vue: buton Export în MobileTopBar actions
|
||||
- [ ] BankCashRegisterView.vue: buton Filtrare care deschide BottomSheet
|
||||
- [ ] ReceiptsListView.vue: buton Export în MobileTopBar actions
|
||||
- [ ] ReceiptsListView.vue: buton Filtrare care deschide BottomSheet
|
||||
- [ ] MaturityAnalysisView.vue: buton Export în MobileTopBar actions
|
||||
- [ ] MaturityAnalysisView.vue: buton Filtrare care deschide BottomSheet
|
||||
- [ ] Icons: pi-download (export), pi-filter (filtre)
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-307: Restructurare Footer Nav (4 butoane noi)
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** footer navigation cu: Dashboard | Bonuri | Facturi | Setări
|
||||
**Pentru că** vreau acces rapid la cele mai folosite secțiuni
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] MobileBottomNav cu 4 butoane: Dashboard, Bonuri, Facturi, Setări
|
||||
- [ ] Dashboard: icon pi-home sau pi-chart-bar, route /dashboard
|
||||
- [ ] Bonuri: icon pi-receipt, route /data-entry
|
||||
- [ ] Facturi: icon pi-file-edit, route /reports/invoices
|
||||
- [ ] Setări: icon pi-cog, route /settings
|
||||
- [ ] Active state corect pe fiecare pagină
|
||||
- [ ] Ștergere link Upload din footer (mutat în FAB)
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-308: Actualizare Hamburger Menu - Grupat pe Categorii
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** meniul hamburger organizat pe categorii clare
|
||||
**Pentru că** vreau să găsesc rapid paginile de care am nevoie
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] MobileDrawerMenu.vue restructurat cu secțiuni:
|
||||
- [ ] Secțiune "PRINCIPALE":
|
||||
- [ ] Dashboard → /dashboard
|
||||
- [ ] Bonuri → /data-entry
|
||||
- [ ] Secțiune "RAPOARTE":
|
||||
- [ ] Facturi → /reports/invoices
|
||||
- [ ] Balanță → /reports/trial-balance
|
||||
- [ ] Casa și Banca → /reports/bank-cash
|
||||
- [ ] Secțiune "ANALIZE":
|
||||
- [ ] Scadențe → /reports/maturity-analysis
|
||||
- [ ] Facturi Detaliate → /reports/detailed-invoices
|
||||
- [ ] Secțiune "SETĂRI":
|
||||
- [ ] Setări → /settings (hub)
|
||||
- [ ] Separatori vizuali între secțiuni
|
||||
- [ ] Header cu logo
|
||||
- [ ] Footer cu profil utilizator și logout
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-309: Cleanup Dashboard Mobile
|
||||
**Ca** utilizator mobil
|
||||
**Vreau** Dashboard-ul să afișeze doar KPIs fără quick-links
|
||||
**Pentru că** navigarea se face din footer și hamburger menu
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] DashboardView.vue pe mobil: ștergere quick-link cards (dacă există)
|
||||
- [ ] Doar SwipeableCards cu KPIs pe mobil
|
||||
- [ ] Desktop rămâne neschimbat
|
||||
- [ ] MobileTopBar cu title "Dashboard"
|
||||
- [ ] MobileBottomNav cu Dashboard activ
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-310: Actualizare Router cu Modificările
|
||||
**Ca** developer
|
||||
**Vreau** router-ul actualizat pentru noile pagini și modificări
|
||||
**Pentru că** navigarea trebuie să funcționeze corect
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] Rută /reports/invoices → InvoicesView (cu tab-uri)
|
||||
- [ ] Rută /reports/maturity-analysis → MaturityAnalysisView (cu tab-uri)
|
||||
- [ ] Rutele existente păstrate: /reports/trial-balance, /reports/bank-cash
|
||||
- [ ] Rutele /reports/detailed-invoices funcționale
|
||||
- [ ] Cleanup rute nefolosite (dacă există)
|
||||
- [ ] Toate rutele lazy loaded
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
### US-311: Actualizare Documentație MOBILE_PATTERNS.md
|
||||
**Ca** developer viitor
|
||||
**Vreau** documentația actualizată cu modificările din Phase 3
|
||||
**Pentru că** pattern-urile s-au schimbat
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] Secțiune actualizată: Footer Navigation (Dashboard, Bonuri, Facturi, Setări)
|
||||
- [ ] Secțiune nouă: FAB Pattern pentru acțiuni contextuale
|
||||
- [ ] Secțiune nouă: Tab Pattern pentru switch Clienți/Furnizori
|
||||
- [ ] Secțiune actualizată: Hamburger Menu grupat pe categorii
|
||||
- [ ] Diagrame ASCII actualizate cu noua structură navigare
|
||||
- [ ] npm run build passes
|
||||
|
||||
---
|
||||
|
||||
## 4. Cerințe Funcționale
|
||||
|
||||
1. [REQ-001] Toate paginile de editare/vizualizare au buton Înapoi în MobileTopBar
|
||||
2. [REQ-002] Footer nav are exact 4 butoane: Dashboard, Bonuri, Facturi, Setări
|
||||
3. [REQ-003] Upload accesibil DOAR din FAB pe pagina Bonuri
|
||||
4. [REQ-004] Facturi cu tab-uri Clienți/Furnizori
|
||||
5. [REQ-005] Scadențe cu tab-uri Clienți/Furnizori
|
||||
6. [REQ-006] Toate rapoartele au butoane Export și Filtrare pe mobil
|
||||
7. [REQ-007] Hamburger menu organizat pe categorii: Principale, Rapoarte, Analize, Setări
|
||||
8. [REQ-008] Dashboard afișează doar KPIs pe mobil
|
||||
|
||||
## 5. Non-Goals (Ce NU facem)
|
||||
|
||||
- ❌ Nu modificăm layout-ul desktop
|
||||
- ❌ Nu adăugăm funcționalități noi în backend
|
||||
- ❌ Nu schimbăm logica de business
|
||||
- ❌ Nu modificăm stilurile cardurilor existente
|
||||
- ❌ Nu implementăm notificări sau animații complexe
|
||||
- ❌ Nu creăm pagini separate pentru Clienți/Furnizori (folosim tab-uri)
|
||||
|
||||
## 6. Considerații Tehnice
|
||||
|
||||
### Stack/Tehnologii
|
||||
- Vue 3 Composition API
|
||||
- Vue Router pentru navigare
|
||||
- Componente existente: MobileTopBar, MobileBottomNav, BottomSheet, MobileDrawerMenu
|
||||
- PrimeVue TabView sau custom tabs pentru Clienți/Furnizori
|
||||
|
||||
### Patterns de Urmat
|
||||
- Tab Pattern pentru switch între perspective
|
||||
- FAB Pattern pentru acțiuni contextuale
|
||||
- BottomSheet pentru filtre pe mobil
|
||||
|
||||
### Dependențe
|
||||
- US-307 trebuie făcut primul (footer restructurare)
|
||||
- US-304 și US-305 pot fi făcute în paralel (tab-uri)
|
||||
- US-308 poate fi făcut independent (hamburger menu)
|
||||
|
||||
### Riscuri Tehnice
|
||||
- **Risc scăzut**: Tab-uri în pagini existente pot necesita refactoring
|
||||
- Mitigare: Folosire PrimeVue TabView sau custom component simplu
|
||||
|
||||
## 7. Considerații UI/UX
|
||||
|
||||
### Structură Footer Navigation Nouă
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ MOBILE BOTTOM NAV (4 butoane) │
|
||||
├───────────┬───────────┬───────────┬─────────┤
|
||||
│ Dashboard │ Bonuri │ Facturi │ Setări │
|
||||
│ 🏠 │ 🧾 │ 📄 │ ⚙️ │
|
||||
│/dashboard │/data-entry│ /reports/ │/settings│
|
||||
│ │ │ invoices │ │
|
||||
└───────────┴───────────┴───────────┴─────────┘
|
||||
```
|
||||
|
||||
### FAB pe Pagina Bonuri
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Lista Bonuri 🔍 📥 ☰ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ [Bon 1] │
|
||||
│ [Bon 2] │
|
||||
│ [Bon 3] │
|
||||
│ ┌───┐ │
|
||||
│ │ + │ │ ← FAB
|
||||
│ └───┘ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ Dashboard │ Bonuri │ Facturi │ Setări │
|
||||
└─────────────────────────────────────────────┘
|
||||
|
||||
Click pe FAB →
|
||||
┌─────────────────┐
|
||||
│ 📝 Bon Nou │
|
||||
│ 📤 Upload Bulk │
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
### Pagina Facturi cu Tab-uri
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Facturi 🔍 📥 ☰ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ ┌─────────────┬─────────────┐ │
|
||||
│ │ Clienți │ Furnizori │ ← Tab-uri │
|
||||
│ └─────────────┴─────────────┘ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ [Factură 1] │
|
||||
│ [Factură 2] │
|
||||
│ [Factură 3] │
|
||||
│ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ Dashboard │ Bonuri │ Facturi │ Setări │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Pagina Scadențe cu Tab-uri
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ ← Scadențe 🔍 📥 ☰ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ ┌─────────────┬─────────────┐ │
|
||||
│ │ Clienți │ Furnizori │ ← Tab-uri │
|
||||
│ └─────────────┴─────────────┘ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ [Scadență 1] │
|
||||
│ [Scadență 2] │
|
||||
│ [Scadență 3] │
|
||||
│ │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ Dashboard │ Bonuri │ Facturi │ Setări │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Hamburger Menu Actualizat (Grupat pe Categorii)
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ [Logo ROA2WEB] │
|
||||
│─────────────────────────────────────────────│
|
||||
│ PRINCIPALE │
|
||||
│ 🏠 Dashboard │
|
||||
│ 🧾 Bonuri │
|
||||
│─────────────────────────────────────────────│
|
||||
│ RAPOARTE │
|
||||
│ 📄 Facturi │
|
||||
│ 📊 Balanță │
|
||||
│ 💰 Casa și Banca │
|
||||
│─────────────────────────────────────────────│
|
||||
│ ANALIZE │
|
||||
│ ⏰ Scadențe │
|
||||
│ 📋 Facturi Detaliate │
|
||||
│─────────────────────────────────────────────│
|
||||
│ ADMINISTRARE │
|
||||
│ ⚙️ Setări │
|
||||
│─────────────────────────────────────────────│
|
||||
│ 👤 [Username] │
|
||||
│ [Logout] │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 8. Success Metrics
|
||||
|
||||
- **Navigare**: 100% pagini cu footer nav funcțional
|
||||
- **Consistență**: Tab-uri identice în Facturi și Scadențe
|
||||
- **UX**: Max 2 tap-uri pentru orice destinație
|
||||
- **Funcționalitate**: Export/Filtre disponibile pe toate rapoartele
|
||||
|
||||
## 9. Open Questions
|
||||
|
||||
- [x] Footer: Dashboard, Bonuri, Facturi, Setări - DA
|
||||
- [x] Hamburger: Grupat pe categorii - DA
|
||||
- [x] Facturi/Scadențe: Tab-uri Clienți/Furnizori - DA
|
||||
|
||||
---
|
||||
|
||||
## Implementare Sugerată (Ordinea User Stories)
|
||||
|
||||
### Faza 1: Infrastructură Navigare
|
||||
1. US-307: Restructurare Footer Nav (4 butoane noi)
|
||||
2. US-308: Actualizare Hamburger Menu - Grupat pe Categorii
|
||||
|
||||
### Faza 2: Tab-uri Clienți/Furnizori
|
||||
3. US-304: Tab-uri în Facturi
|
||||
4. US-305: Tab-uri în Scadențe
|
||||
|
||||
### Faza 3: Corectări Navigare
|
||||
5. US-301: Buton Înapoi în editare bon
|
||||
6. US-302: Footer Nav pe paginile de setări
|
||||
7. US-303: FAB pe pagina Bonuri (mutare Upload)
|
||||
|
||||
### Faza 4: Restaurare Funcționalități
|
||||
8. US-306: Restaurare Export și Filtrare pe rapoarte
|
||||
|
||||
### Faza 5: Cleanup
|
||||
9. US-309: Cleanup Dashboard Mobile
|
||||
10. US-310: Actualizare Router
|
||||
|
||||
### Faza 6: Documentație
|
||||
11. US-311: Update MOBILE_PATTERNS.md
|
||||
Reference in New Issue
Block a user