Aeltere Bestellungen (> 1 Monat) hinter Aufklapp-Knopf mit Suche

Im Kundenbereich stehen jetzt nur noch Bestellungen aus dem letzten Monat direkt in der Liste.
Aeltere werden gebuendelt hinter einem kleinen Knopf "Aeltere Bestellungen (N)" gezeigt und
lassen sich dort nach Bestellnummer, Artikel oder Datum durchsuchen. Alle 4 Sprachen.

Die Monatsgrenze wird bewusst ERST IM BROWSER berechnet (echte Kalendermonate, nicht "30 Tage"):
Die Seite ist statisch vorgebaut, eine schon beim Bauen gezogene Grenze waere ab dem naechsten
Tag falsch. Bestelldatum steht dafuer jetzt als ISO-Datum in den Daten, die Anzeige wird daraus
abgeleitet — nur noch eine Quelle fuers Datum.

Nebenbei gefunden und behoben: getAccount() hat gespeicherte Kontodaten reind flach mit den
Standardwerten zusammengefuehrt. Stand im Speicher ein kaputtes/fehlendes abo-Objekt (null),
hat das den Standardwert ueberschrieben und jeder Zugriff wie a.abo.bezahltBisDatum warf einen
Fehler, der das GESAMTE Konto-Dashboard lahmgelegt hat (keine Bestellungen, keine Tabs mehr).
Das verschachtelte abo-Objekt wird jetzt ausdruecklich mit Standardwerten aufgefuellt.

Getestet (Browser, alle Faelle): Aufteilung nach Datum, Auf-/Zuklappen, Suche nach Artikel und
nach Bestellnummer, Suche ohne Treffer, Zusammenspiel mit den Tabs "Offene Sendungen"/
"Bestellungen", sowie Markup und Uebersetzungen in allen 4 Sprachen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
qcigano
2026-08-04 10:12:56 +02:00
co-authored by Claude Opus 5
parent 7f3b77a036
commit be56c78c4f
7 changed files with 759 additions and 37 deletions
+48
View File
@@ -1683,6 +1683,54 @@ a:focus-visible, button:focus-visible {
}
.order-list { display: flex; flex-direction: column; gap: 1.1rem; }
/* Aufklappbereich für Bestellungen, die älter als ein Monat sind (siehe konto/angemeldet.astro).
Bewusst zurückhaltend gestaltet: Es ist ein Archiv-Zugang, kein Hauptinhalt — soll die
aktuellen Bestellungen darüber nicht optisch überstrahlen. */
.order-archive { margin-top: 1.2rem; display: flex; flex-direction: column; gap: 0.9rem; }
.order-archive[hidden] { display: none; }
.order-archive-toggle {
align-self: flex-start;
display: inline-flex;
align-items: center;
gap: 0.55em;
padding: 0.5em 1em;
border-radius: 999px;
border: 1px dashed rgba(244, 241, 247, 0.22);
background: transparent;
color: var(--c-text-muted);
font-family: inherit;
font-size: 0.88rem;
font-weight: 600;
cursor: pointer;
transition: border-color 0.2s var(--ease), color 0.2s var(--ease), background 0.2s var(--ease);
}
.order-archive-toggle:hover {
border-color: var(--c-accent);
border-style: solid;
color: var(--c-text);
background: color-mix(in srgb, var(--c-accent) 10%, transparent);
}
.order-archive-icon { font-size: 1em; }
.order-archive-chevron { font-size: 0.7em; transition: transform 0.2s var(--ease); }
.order-archive.is-open .order-archive-chevron { transform: rotate(180deg); }
.order-archive-panel { display: flex; flex-direction: column; gap: 1.1rem; }
.order-archive-panel[hidden] { display: none; }
.order-archive-search { position: relative; display: flex; align-items: center; }
.order-archive-search-icon { position: absolute; left: 0.85em; font-size: 0.9rem; opacity: 0.6; pointer-events: none; }
.order-archive-search input {
width: 100%;
padding: 0.6em 0.9em 0.6em 2.4em;
border-radius: var(--radius-m);
border: 1px solid rgba(244, 241, 247, 0.14);
background: var(--c-anthracite-light);
color: var(--c-text);
font-family: inherit;
font-size: 0.92rem;
}
.order-archive-search input:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.order-archive-nohits { color: var(--c-text-muted); margin: 0; }
.order-archive-nohits[hidden] { display: none; }
.order-card { display: flex; flex-direction: column; gap: 0.9rem; }
.order-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.order-no { display: block; font-weight: 700; font-size: 1.02rem; }