feat(ui-fixes-phase6): Complete US-703 - Navigare Hamburger pe Paginile Analize

Implemented by Ralph autonomous loop.
Iteration: 3

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-01-13 22:34:32 +00:00
parent 7d5e8f32ed
commit 6fd5ffdf94
4 changed files with 82 additions and 11 deletions

View File

@@ -190,8 +190,8 @@
"Pattern identic cu InvoicesView.vue (liniile 4-11, 33-42)", "Pattern identic cu InvoicesView.vue (liniile 4-11, 33-42)",
"npm run build passes" "npm run build passes"
], ],
"passes": false, "passes": true,
"notes": "REVERT NECESAR: S-a schimbat greșit de la show-menu la show-back. Revino la pattern InvoicesView." "notes": "Completed in iteration 3"
}, },
{ {
"id": "US-704", "id": "US-704",

View File

@@ -387,3 +387,9 @@ PRD: tasks/prd-mobile-ui-fixes-phase5.md
[2026-01-13 22:29:59] Working on story: US-702 [2026-01-13 22:29:59] Working on story: US-702
[2026-01-13 22:29:59] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_2_US-702.log) [2026-01-13 22:29:59] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_2_US-702.log)
[2026-01-13 22:31:33] SUCCESS: Story US-702 passed! [2026-01-13 22:31:33] SUCCESS: Story US-702 passed!
[2026-01-13 22:31:33] Changes committed
[2026-01-13 22:31:33] Progress: 12/15 stories completed
[2026-01-13 22:31:35] === Iteration 3/15 ===
[2026-01-13 22:31:35] Working on story: US-703
[2026-01-13 22:31:35] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_3_US-703.log)
[2026-01-13 22:34:32] SUCCESS: Story US-703 passed!

View File

@@ -1,15 +1,25 @@
<template> <template>
<!-- US-501: Mobile Top Bar --> <!-- US-703: Mobile Top Bar with Hamburger Menu (not back button) -->
<!-- US-603: Title is now "Facturi Detaliate" with tabs below -->
<MobileTopBar <MobileTopBar
v-if="isMobile" v-if="isMobile"
title="Facturi Detaliate" title="Facturi Detaliate"
:show-back="true" :show-menu="true"
:actions="topBarActions" :actions="topBarActions"
@back-click="goBack" @menu-click="showDrawer = true"
@action-click="handleTopBarAction" @action-click="handleTopBarAction"
/> />
<!-- US-703: Mobile Drawer Menu (replaces navigation via back button) -->
<MobileDrawerMenu
v-model="showDrawer"
:user="authStore.user"
:companies-store="companyStore"
:period-store="periodStore"
@logout="handleLogout"
@company-changed="handleCompanyChanged"
@period-changed="handlePeriodChanged"
/>
<!-- US-603: Mobile Tabs for Clienți/Furnizori --> <!-- US-603: Mobile Tabs for Clienți/Furnizori -->
<div v-if="isMobile" class="mobile-tabs-container"> <div v-if="isMobile" class="mobile-tabs-container">
<div class="mobile-tabs"> <div class="mobile-tabs">
@@ -498,11 +508,12 @@ import Paginator from 'primevue/paginator'
import { useToast } from 'primevue/usetoast' import { useToast } from 'primevue/usetoast'
import MobileTopBar from '@shared/components/mobile/MobileTopBar.vue' import MobileTopBar from '@shared/components/mobile/MobileTopBar.vue'
import MobileBottomNav from '@shared/components/mobile/MobileBottomNav.vue' import MobileBottomNav from '@shared/components/mobile/MobileBottomNav.vue'
import MobileDrawerMenu from '@shared/components/mobile/MobileDrawerMenu.vue'
import BottomSheet from '@shared/components/mobile/BottomSheet.vue' import BottomSheet from '@shared/components/mobile/BottomSheet.vue'
import Menu from 'primevue/menu' import Menu from 'primevue/menu'
import SplitButton from 'primevue/splitbutton' import SplitButton from 'primevue/splitbutton'
import { useDashboardStore } from '@reports/stores/dashboard' import { useDashboardStore } from '@reports/stores/dashboard'
import { useCompanyStore, useAccountingPeriodStore } from '@reports/stores/sharedStores' import { useCompanyStore, useAccountingPeriodStore, useAuthStore } from '@reports/stores/sharedStores'
import * as XLSX from 'xlsx' import * as XLSX from 'xlsx'
import jsPDF from 'jspdf' import jsPDF from 'jspdf'
import 'jspdf-autotable' import 'jspdf-autotable'
@@ -513,6 +524,10 @@ const toast = useToast()
const dashboardStore = useDashboardStore() const dashboardStore = useDashboardStore()
const companyStore = useCompanyStore() const companyStore = useCompanyStore()
const periodStore = useAccountingPeriodStore() const periodStore = useAccountingPeriodStore()
const authStore = useAuthStore()
// US-703: Drawer state for hamburger menu
const showDrawer = ref(false)
// US-603: Tab state - initialized from route meta or query param // US-603: Tab state - initialized from route meta or query param
const activeTab = ref(route.query.tab === 'suppliers' ? 'suppliers' : (route.meta.invoiceType || 'clients')) const activeTab = ref(route.query.tab === 'suppliers' ? 'suppliers' : (route.meta.invoiceType || 'clients'))
@@ -741,6 +756,23 @@ const goBack = () => {
router.push('/reports/dashboard') router.push('/reports/dashboard')
} }
// US-703: Handlers for MobileDrawerMenu
const handleLogout = async () => {
await authStore.logout()
router.push('/login')
}
const handleCompanyChanged = (company) => {
// Company store watcher handles the refresh
if (company) {
loadDetailedData()
}
}
const handlePeriodChanged = () => {
// Period store watcher handles the refresh
}
// US-501: Top bar action handler // US-501: Top bar action handler
const handleTopBarAction = (action, event) => { const handleTopBarAction = (action, event) => {
if (action.icon === 'pi pi-filter') { if (action.icon === 'pi pi-filter') {

View File

@@ -1,10 +1,21 @@
<template> <template>
<!-- US-608: Mobile Top Bar with Back Button --> <!-- US-703: Mobile Top Bar with Hamburger Menu (not back button) -->
<MobileTopBar <MobileTopBar
v-if="isMobile" v-if="isMobile"
title="Scadențe" title="Scadențe"
:show-back="true" :show-menu="true"
@back-click="goBack" @menu-click="showDrawer = true"
/>
<!-- US-703: Mobile Drawer Menu (replaces navigation via back button) -->
<MobileDrawerMenu
v-model="showDrawer"
:user="authStore.user"
:companies-store="companyStore"
:period-store="periodStore"
@logout="handleLogout"
@company-changed="handleCompanyChanged"
@period-changed="handlePeriodChanged"
/> />
<!-- US-608: Mobile Tabs (sticky below MobileTopBar) - like DetailedInvoicesView --> <!-- US-608: Mobile Tabs (sticky below MobileTopBar) - like DetailedInvoicesView -->
@@ -95,12 +106,18 @@ import { useRouter, useRoute } from 'vue-router'
import Button from 'primevue/button' import Button from 'primevue/button'
import MobileTopBar from '@shared/components/mobile/MobileTopBar.vue' import MobileTopBar from '@shared/components/mobile/MobileTopBar.vue'
import MobileBottomNav from '@shared/components/mobile/MobileBottomNav.vue' import MobileBottomNav from '@shared/components/mobile/MobileBottomNav.vue'
import MobileDrawerMenu from '@shared/components/mobile/MobileDrawerMenu.vue'
import MaturityAnalysisCard from '@reports/components/dashboard/cards/MaturityAnalysisCard.vue' import MaturityAnalysisCard from '@reports/components/dashboard/cards/MaturityAnalysisCard.vue'
import { useCompanyStore } from '@reports/stores/sharedStores' import { useCompanyStore, useAuthStore, useAccountingPeriodStore } from '@reports/stores/sharedStores'
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const companyStore = useCompanyStore() const companyStore = useCompanyStore()
const authStore = useAuthStore()
const periodStore = useAccountingPeriodStore()
// US-703: Drawer state for hamburger menu
const showDrawer = ref(false)
// Detectare mobile - reactive with resize listener // Detectare mobile - reactive with resize listener
const windowWidth = ref(window.innerWidth) const windowWidth = ref(window.innerWidth)
@@ -143,6 +160,22 @@ const goBack = () => {
router.push('/reports/dashboard') router.push('/reports/dashboard')
} }
// US-703: Handlers for MobileDrawerMenu
const handleLogout = async () => {
await authStore.logout()
router.push('/login')
}
const handleCompanyChanged = (company) => {
// Company store watcher handles the refresh
console.log('Company changed:', company?.id_firma)
}
const handlePeriodChanged = () => {
// Period store watcher handles the refresh
console.log('Period changed')
}
// Handle period change from MaturityAnalysisCard // Handle period change from MaturityAnalysisCard
const handlePeriodChange = (period) => { const handlePeriodChange = (period) => {
console.log('Maturity period changed:', period) console.log('Maturity period changed:', period)