# Invoice Form UX/UI Design Konzept **myCRM Billing Module - Invoice Management** **Erstellt:** 2025-12-12 **Projekt:** myCRM - Symfony 7.1 LTS + Vue.js 3 + PrimeVue **Fokus:** Rechnungsformular (InvoiceForm.vue) und zugehörige Komponenten --- ## Executive Summary Dieses Dokument analysiert das aktuelle Invoice-Formular und präsentiert ein umfassendes UX/UI-Design-Konzept für eine optimierte, professionelle Rechnungsverwaltung. Der Fokus liegt auf verbesserter visueller Hierarchie, optimierter Formularstruktur und konsistenter Nutzererfahrung. --- ## 1. Analyse des Ist-Zustands ### 1.1 Bestehende Komponenten **Hauptkomponenten:** - `InvoiceManagement.vue` - Rechnungsübersicht mit DataTable - `InvoiceForm.vue` - Rechnungserstellung/-bearbeitung (Hauptformular) - `PaymentForm.vue` - Zahlungserfassung - `PDFUploadForm.vue` - PDF-Upload (MVP-Platzhalter) ### 1.2 Identifizierte UX-Probleme #### Schwerwiegende Probleme (P0) 1. **Fehlende visuelle Hierarchie im Hauptformular** - Alle Felder auf gleicher Ebene ohne logische Gruppierung - Rechnungspositionen-Tabelle verliert sich im Formular - Keine klare Trennung zwischen Stammdaten und Positionen 2. **Unklare Validierungs-Feedback** - Validierung nur beim Submit sichtbar - Keine Echtzeit-Validierung während Eingabe - Fehler-Messages zu klein und leicht zu übersehen 3. **Schlechte Rechnungspositions-Verwaltung** - DataTable in Formular wirkt überladen - Inline-Editing schwer zu bedienen - Fehlende Summenberechnung in Echtzeit - Keine visuelle Bestätigung beim Hinzufügen/Entfernen 4. **Inkonsistente Spacing und Layouts** - Inkonsistente Abstände zwischen Formulargruppen - Dialog-Größe (70vw) nicht optimal für verschiedene Bildschirme - Fehlende responsive Breakpoints für Tablet-Ansicht #### Mittelschwere Probleme (P1) 5. **Fehlende Benutzerführung** - Keine Hilfe-Tooltips für komplexe Felder - Fehlende Feldkontexte (z.B. Steuerberechnung) - Keine Keyboard-Shortcuts 6. **Unvollständige Status-Kommunikation** - Loading-States nur beim Speichern - Keine Progress-Indication beim Laden von Kontakten - Fehlende Empty-States 7. **Schwache Datenvisualisierung** - Keine Gesamtsummen-Anzeige - Fehlende Berechnungsübersicht (Netto, Steuer, Brutto) - Kein Currency-Formatting in Tabelle #### Niedrige Priorität (P2) 8. **Fehlende Micro-Interactions** - Keine Animationen beim Hinzufügen/Entfernen von Positionen - Fehlende Hover-States auf interaktiven Elementen - Keine visuellen Bestätigungen 9. **Accessibility-Mängel** - Fehlende ARIA-Labels für Screen Reader - Keine Keyboard-Navigation in Positionen-Tabelle - Kontrast könnte besser sein --- ## 2. Design-Prinzipien ### 2.1 Core Principles 1. **Progressive Disclosure** - Zeige nur relevante Informationen zum richtigen Zeitpunkt 2. **Visual Hierarchy** - Klare Strukturierung durch Größe, Farbe, Spacing 3. **Immediate Feedback** - Sofortige Rückmeldung auf Benutzeraktionen 4. **Error Prevention** - Validierung bevor Fehler entstehen 5. **Consistency** - Einheitliche PrimeVue-Komponenten und Patterns ### 2.2 Design System Integration **Verwendung bestehender Assets:** - PrimeVue Aura Theme (Dark Mode Support) - Tailwind CSS v4 mit PrimeUI Plugin - Sakai Layout System - Bestehende Farbpalette und Spacing-System --- ## 3. Design-Konzept: Invoice Form ### 3.1 Layout-Struktur (Desktop) ``` ┌─────────────────────────────────────────────────────────────────┐ │ HEADER: Neue Rechnung / Rechnung bearbeiten [×] Schließen │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ [INFO-BANNER] Phase 1 MVP - wird erweitert (nur bei Neuerstellung) │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ SEKTION 1: STAMMDATEN │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ │ │ Rechnungsnr. * │ │ Status │ │ │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ Kunde (Dropdown mit Search) * │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ │ │ Rechnungsdatum * │ │ Fälligkeitsdatum*│ │ │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ SEKTION 2: RECHNUNGSPOSITIONEN [+ Position] │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ Position 1 [Löschen] │ │ │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ │ │ Beschreibung │ │ │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ │ │ [Menge: 1.00] [Einzelpreis: 0,00 €] [MwSt: 19%] │ │ │ │ │ │ → Zwischensumme: 0,00 € │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ [+ Position hinzufügen] │ │ │ │ │ │ │ │ ┌───────────────────────────────────────────────────┐ │ │ │ │ │ ZUSAMMENFASSUNG │ │ │ │ │ │ Nettobetrag: 1.000,00 € │ │ │ │ │ │ MwSt (19%): 190,00 € │ │ │ │ │ │ MwSt (7%): 14,00 € │ │ │ │ │ │ ───────────────────────────────────────────────── │ │ │ │ │ │ GESAMTBETRAG: 1.204,00 € │ │ │ │ │ └───────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ SEKTION 3: ZUSÄTZLICHE INFORMATIONEN (Optional) │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ Notizen (z.B. Zahlungsbedingungen) │ │ │ │ │ │ │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ ├─────────────────────────────────────────────────────────────────┤ │ FOOTER: [Abbrechen] [Entwurf speichern] [Speichern] │ └─────────────────────────────────────────────────────────────────┘ ``` ### 3.2 Visual Design Specifications #### Spacing System ```css /* Card/Section Spacing */ --section-gap: 2rem; /* 32px - Abstand zwischen Sektionen */ --section-padding: 1.5rem; /* 24px - Innen-Padding der Sektionen */ --field-gap: 1rem; /* 16px - Abstand zwischen Feldern */ --inline-field-gap: 0.75rem; /* 12px - Abstand zwischen Inline-Feldern */ /* Component Spacing */ --form-element-height: 2.75rem; /* 44px - Touch-friendly */ --label-margin: 0.5rem; /* 8px - Label zu Input */ ``` #### Typography Hierarchy ```css /* Heading Levels */ --h2-dialog-title: 1.5rem; /* 24px - Dialog Titel */ --h3-section-title: 1.25rem; /* 20px - Sektion Überschrift */ --h4-subsection: 1rem; /* 16px - Subsection */ /* Body Text */ --body-normal: 0.875rem; /* 14px - Standard Text */ --body-small: 0.75rem; /* 12px - Helper Text, Labels */ --body-large: 1rem; /* 16px - Wichtige Werte */ /* Font Weights */ --weight-normal: 400; --weight-medium: 500; --weight-semibold: 600; --weight-bold: 700; ``` #### Color Palette (Semantic Colors) ```css /* Status Colors (PrimeVue Aura Theme) */ --color-primary: #3B82F6; /* Blue - Primary Actions */ --color-success: #22C55E; /* Green - Success, Paid */ --color-warning: #F59E0B; /* Orange - Partial, Warning */ --color-danger: #EF4444; /* Red - Overdue, Delete */ --color-info: #06B6D4; /* Cyan - Info Messages */ --color-secondary: #6B7280; /* Gray - Secondary Actions */ /* Surface Colors */ --surface-0: #FFFFFF; /* Base Background */ --surface-50: #F9FAFB; /* Light Background */ --surface-100: #F3F4F6; /* Section Background */ --surface-200: #E5E7EB; /* Border Color */ /* Text Colors */ --text-primary: #111827; /* Primary Text */ --text-secondary: #6B7280; /* Secondary Text */ --text-muted: #9CA3AF; /* Muted Text */ ``` #### Component Styling **Card/Section Style:** ```css .form-section { background: var(--surface-0); border: 1px solid var(--surface-200); border-radius: 0.75rem; /* 12px */ padding: var(--section-padding); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .form-section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--surface-200); } .form-section-title { font-size: var(--h3-section-title); font-weight: var(--weight-semibold); color: var(--text-primary); } ``` **Invoice Item Card:** ```css .invoice-item-card { background: var(--surface-50); border: 1px solid var(--surface-200); border-radius: 0.5rem; /* 8px */ padding: 1rem; margin-bottom: 0.75rem; transition: all 0.2s ease; } .invoice-item-card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); border-color: var(--color-primary); } .invoice-item-card--new { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } ``` **Summary Box:** ```css .invoice-summary { background: var(--surface-100); border: 2px solid var(--color-primary); border-radius: 0.75rem; padding: 1.5rem; margin-top: 1.5rem; } .invoice-summary-row { display: flex; justify-content: space-between; padding: 0.5rem 0; font-size: 0.875rem; color: var(--text-secondary); } .invoice-summary-total { display: flex; justify-content: space-between; padding: 1rem 0 0; margin-top: 0.75rem; border-top: 2px solid var(--surface-200); font-size: 1.25rem; font-weight: var(--weight-bold); color: var(--text-primary); } ``` ### 3.3 Responsive Breakpoints ```css /* Desktop First Approach */ /* Large Desktop (1920px+) */ .invoice-dialog--large { width: 1200px; max-width: 90vw; } /* Desktop (1200px - 1920px) */ @media (max-width: 1920px) { .invoice-dialog { width: 1000px; } } /* Tablet Landscape (992px - 1200px) */ @media (max-width: 1200px) { .invoice-dialog { width: 90vw; } .form-grid { grid-template-columns: 1fr 1fr; /* 2 Spalten */ } } /* Tablet Portrait (768px - 992px) */ @media (max-width: 992px) { .invoice-dialog { width: 95vw; max-height: 90vh; } .form-grid { grid-template-columns: 1fr; /* 1 Spalte */ } .invoice-item-fields { flex-direction: column; } } /* Mobile (576px - 768px) */ @media (max-width: 768px) { .invoice-dialog { width: 100vw; height: 100vh; border-radius: 0; margin: 0; } .form-section { padding: 1rem; } .invoice-summary { position: sticky; bottom: 0; z-index: 100; } } /* Small Mobile (< 576px) */ @media (max-width: 576px) { .form-section-title { font-size: 1rem; } .invoice-item-card { padding: 0.75rem; } } ``` --- ## 4. Komponentenweise Design-Spezifikationen ### 4.1 InvoiceForm - Hauptformular #### Sektion 1: Stammdaten **Layout:** - 2-spaltig auf Desktop (Rechnungsnr + Status) - 1-spaltig auf Mobile - Kunde als volle Breite für bessere Lesbarkeit - Datum-Felder wieder 2-spaltig **Verbesserungen:** ```vue
Noch keine Positionen hinzugefügt
Datei hierher ziehen oder klicken zum Auswählen
Nur PDF-Dateien, max. 10 MB
{{ selectedFile.name }}
{{ formatFileSize(selectedFile.size) }}
Aktuelle PDF-Datei
{{ invoice.pdfPath }}