Neue Entität "Kontaktadresse" (Akquise-Ziel, FK projektId) analog zu Kontakten:
- Client/models/kontaktadresse.ts: Interface, In-Memory-Mock, CRUD- und REST-Stubs
- Client/Components/kontaktadresse.ts: Kontaktadressenliste (Treetable, projektgefiltert) und Stammblatt-Formular
- index.ts: Routen /kontaktadresseliste und /kontaktadresse (kein Hauptmenü-Eintrag)
- projekt.ts: Kontaktadressen-Button in Projektliste (kompakt in einer Zelle) und im Projekt-Formular (nur bei bestehendem Projekt)
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Die Treetable unterstützt nun ein optionales isSelected-Callback (iTreetable.isSelected),
mit dem die Hintergrund-Einfärbung der gesamten <tr>-Zeile gesteuert werden kann. Bisher
musste jede Zelle einzeln über den columnmapper gestylt werden. Die Markierung verwendet
die w3-theme-l4-Klasse statt einer festen Farbe.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Neue Entität "Kontakt" (Ansprechpartner, FK kundenId) analog zu Projekte:
- Client/models/kontakt.ts: Interface, In-Memory-Mock, CRUD- und REST-Stubs
- Client/Components/kontakt.ts: Kontaktliste (Treetable, kundengefiltert) und Stammblatt-Formular
- index.ts: Routen /kontaktliste und /kontakt (kein Hauptmenü-Eintrag)
- kunde.ts: Kontakte-Button in Kundenliste und im Kunden-Formular (nur bei bestehendem Kunden)
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Datum, Uhrzeit Beginn und Dauer nebeneinander in einem flex-Container;
Name Ansprechpartner und Telefon ebenfalls in einer Zeile. Macht das
Formular kompakter und übersichtlicher.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Form-Widget um stickyButtons-Attribut erweitert (default true): nur der
Formularinhalt scrollt, die Buttons bleiben fixiert am unteren Rand. Neue
CSS-Klasse .form-view-container (flex-Column, volle Höhe) für die
umschließenden View-Container. Form-Views (kunde, projekt, call_log, tags)
auf w3-auto.form-view-container umgestellt; Tag-Form von w3-twothird auf
w3-auto korrigiert.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Notiz-Feld auf Textarea-Widget umgestellt (mehrzeilige Eingabe). Dauer-Feld
bei Neuanlage mit Timer automatisch aktualisiert: verstrichene Sekunden als
mm:ss formatiert, direkt im DOM gesetzt (ohne redraw, damit andere Felder
nicht überschrieben werden). Timer in onremove gestoppt. Konstante
DAUER_UPDATE_INTERVALL steuert die Update-Frequenz (Sekunde/Minute).
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Datenmodell und In-Memory-Funktionen für Gesprächsnotizen in
Client/models/call_log.ts ausgelagert (inkl. REST-API-Gerüst). call_log.ts
nutzt das Modell; Container auf w3-container.w3-auto umgestellt.
Call_Log-Formular mit Select-Widgets für Kunde und Projekt (Projekt-Optionen
abhängig vom gewählten Kunden, Voreinstellung readonly bei projektfiltrierter
Liste). call_log_liste: TopbarButton zur Neuanlage, Vorbelegung bei
projektgefilterter Liste. projekt-Modell um Hilfsfunktion getProjektById ergänzt.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Select auf sauberes ClosureComponent-Muster umgestellt (Closure-Parameter
weggelassen, attrs nur über Hook-vnode gelesen). Auswahl per Maus über
mousedown umgestellt, damit das Dropdown zuverlässig geschlossen wird.
Zusätzlich Clear-Button (Material-Icon "clear") im Eingabefeld, absolut
positioniert und vertikal zentriert, leert das Suchfeld. readonly-Modus
unterstützt.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Kunden- und Projekt-Datenmodelle inkl. In-Memory-Funktionen und REST-API-Gerüst
in Client/models/{kunde,projekt}.ts ausgelagert. Views (kunde.ts, projekt.ts) nutzen
diese Modelle; Container auf w3-container.w3-auto (responsive) umgestellt.
Projektliste: TopbarButton zur Neuanlage; Projektformular mit Select-Widget zur
Kundenwahl (voreingestellt bei kundengefilterter Liste), submit/cancel aktiviert.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Erzeugt ein Combobox-Widget (widgets/select.ts) mit Suchfeld, gefilterter
Optionliste, Maus-Auswahl und Tastaturbedienung (Pfeil-auf/ab, Enter,
Escape). Verstecktes Feld für die FormData-Übergabe, readonly-Modus für
voreingestellte Werte.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- call_log.ts: Komponente zur Verwaltung von Gesprächsnotizen mit Liste und Einzelansicht
- tags.ts: Komponente zur hierarchischen Tag-Verwaltung mit Baumstruktur