From fb0334e2702c14593886c76cd9c19dfbe5fd7c93 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Mon, 12 Jan 2026 10:11:07 +0000 Subject: [PATCH] feat(unified-mobile-material-design): Complete US-107 - InvoicesView Mobile Material Design Implemented by Ralph autonomous loop. Iteration: 11 Co-Authored-By: Claude --- scripts/ralph/prd.json | 4 +- scripts/ralph/progress.txt | 6 + src/modules/reports/views/InvoicesView.vue | 523 ++++++++++++++++++--- 3 files changed, 460 insertions(+), 73 deletions(-) diff --git a/scripts/ralph/prd.json b/scripts/ralph/prd.json index 5e9ce9f..903f1e6 100644 --- a/scripts/ralph/prd.json +++ b/scripts/ralph/prd.json @@ -185,8 +185,8 @@ "Verify in browser că arată consistent cu bonuri", "npm run build passes" ], - "passes": false, - "notes": "" + "passes": true, + "notes": "Completed in iteration 11" }, { "id": "US-108", diff --git a/scripts/ralph/progress.txt b/scripts/ralph/progress.txt index ba8978c..4ac7af5 100644 --- a/scripts/ralph/progress.txt +++ b/scripts/ralph/progress.txt @@ -66,3 +66,9 @@ Mon Jan 12 09:44:54 AM UTC 2026 [2026-01-12 10:04:33] Working on story: US-106 [2026-01-12 10:04:33] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_10_US-106.log) [2026-01-12 10:07:38] SUCCESS: Story US-106 passed! +[2026-01-12 10:07:38] Changes committed +[2026-01-12 10:07:38] Progress: 9/20 stories completed +[2026-01-12 10:07:40] === Iteration 11/100 === +[2026-01-12 10:07:40] Working on story: US-107 +[2026-01-12 10:07:40] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_11_US-107.log) +[2026-01-12 10:11:07] SUCCESS: Story US-107 passed! diff --git a/src/modules/reports/views/InvoicesView.vue b/src/modules/reports/views/InvoicesView.vue index dbd5bdd..48cdd72 100644 --- a/src/modules/reports/views/InvoicesView.vue +++ b/src/modules/reports/views/InvoicesView.vue @@ -1,8 +1,116 @@ - -
- -
-
- - -
-
-
- Sold Total: - - {{ formatCompact(invoicesStore.totalSoldAll) }} - -
-
+ +
+
+ Sold Total: + + {{ formatCompact(invoicesStore.totalSoldAll) }} +
- - + +
+ + +
@@ -331,6 +402,12 @@ import { format } from "date-fns"; import { ro } from "date-fns/locale"; import { exportToExcel, exportToPDF } from "@reports/utils/exportUtils"; +// US-107: Mobile Material Design components +import MobileTopBar from "@shared/components/mobile/MobileTopBar.vue"; +import MobileBottomNav from "@shared/components/mobile/MobileBottomNav.vue"; +import BottomSheet from "@shared/components/mobile/BottomSheet.vue"; +import Sidebar from "primevue/sidebar"; + const toast = useToast(); const companyStore = useCompanyStore(); const invoicesStore = useInvoicesStore(); @@ -342,8 +419,53 @@ const selectedCompanyId = ref(companyStore.selectedCompany?.id_firma || null); // Mobile state const isMobile = ref(window.innerWidth < 768); const showFilters = ref(false); +const mobileMenuVisible = ref(false); const actionsMenu = ref(null); +// US-107: Toggle mobile hamburger menu +const toggleMobileMenu = () => { + mobileMenuVisible.value = !mobileMenuVisible.value; +}; + +// US-107: Mobile TopBar actions (refresh + export) +const mobileTopBarActions = computed(() => [ + { + icon: "pi pi-filter", + label: "Filtre", + tooltip: "Filtre", + active: hasActiveFilters.value + }, + { + icon: "pi pi-refresh", + label: "Actualizează", + tooltip: "Actualizează" + }, + { + icon: "pi pi-download", + label: "Export", + tooltip: "Export Excel" + } +]); + +// US-107: Handle top bar action clicks +const handleTopBarAction = (action) => { + if (action.icon === "pi pi-filter") { + showFilters.value = !showFilters.value; + } else if (action.icon === "pi pi-refresh") { + refreshData(); + } else if (action.icon === "pi pi-download") { + exportExcel(); + } +}; + +// 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: "/data-entry/ocr-metrics", icon: "pi pi-cog", label: "Setări" } +]); + // Handle window resize const handleResize = () => { isMobile.value = window.innerWidth < 768; @@ -809,29 +931,41 @@ watch(