Konto: "Meine Bestellungen"-Tab zeigt jetzt nur angekommene Bestellungen

Bisher zeigte der Bestellungen-Tab ALLE Bestellungen (Überschneidung mit
"Offene Sendungen"). Jetzt ist es eine echte Trennung: "Bestellungen"
zeigt nur bereits angekommene/abgeschlossene, "Offene Sendungen" nur die
noch nicht angekommenen. Eigene Leermeldung, falls noch keine Bestellung
angekommen ist.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
qcigano
2026-08-03 13:59:03 +02:00
co-authored by Claude Sonnet 5
parent 5434801dda
commit 57183825a0
5 changed files with 60 additions and 24 deletions
+4
View File
@@ -226,6 +226,7 @@ export const ui = {
navLabel: "Kontobereich-Navigation", navLabel: "Kontobereich-Navigation",
statOrders: "Bestellungen", statWishlist: "Wunschliste", statOpen: "Offene Sendungen", statData: "Meine Daten", statOrders: "Bestellungen", statWishlist: "Wunschliste", statOpen: "Offene Sendungen", statData: "Meine Daten",
noOpenOrders: "Aktuell keine offenen Sendungen — alle Bestellungen sind schon angekommen. 🎉", noOpenOrders: "Aktuell keine offenen Sendungen — alle Bestellungen sind schon angekommen. 🎉",
noArrivedOrders: "Noch keine angekommenen Bestellungen — hier erscheinen deine Bestellungen, sobald sie geliefert wurden.",
ordersTitle: "📦 Meine Bestellungen", ordersTitle: "📦 Meine Bestellungen",
orderNo: "Bestellung", orderDate: "Bestellt am", orderTotal: "Gesamt", orderItems: "Artikel", orderNo: "Bestellung", orderDate: "Bestellt am", orderTotal: "Gesamt", orderItems: "Artikel",
trackingLabel: "Sendungsverfolgung", trackingBtn: "Sendung verfolgen →", invoiceBtn: "Rechnung (PDF)", reorderBtn: "Nochmal bestellen", trackingLabel: "Sendungsverfolgung", trackingBtn: "Sendung verfolgen →", invoiceBtn: "Rechnung (PDF)", reorderBtn: "Nochmal bestellen",
@@ -459,6 +460,7 @@ export const ui = {
navLabel: "Account section navigation", navLabel: "Account section navigation",
statOrders: "Orders", statWishlist: "Wishlist", statOpen: "Open shipments", statData: "My details", statOrders: "Orders", statWishlist: "Wishlist", statOpen: "Open shipments", statData: "My details",
noOpenOrders: "No open shipments right now — every order has already arrived. 🎉", noOpenOrders: "No open shipments right now — every order has already arrived. 🎉",
noArrivedOrders: "No delivered orders yet — your orders will appear here once they've arrived.",
ordersTitle: "📦 My orders", ordersTitle: "📦 My orders",
orderNo: "Order", orderDate: "Ordered on", orderTotal: "Total", orderItems: "Items", orderNo: "Order", orderDate: "Ordered on", orderTotal: "Total", orderItems: "Items",
trackingLabel: "Tracking", trackingBtn: "Track shipment →", invoiceBtn: "Invoice (PDF)", reorderBtn: "Order again", trackingLabel: "Tracking", trackingBtn: "Track shipment →", invoiceBtn: "Invoice (PDF)", reorderBtn: "Order again",
@@ -692,6 +694,7 @@ export const ui = {
navLabel: "Kontobereich-Navigation", navLabel: "Kontobereich-Navigation",
statOrders: "Bstellige", statWishlist: "Wunschlischte", statOpen: "Offni Sändige", statData: "Mini Date", statOrders: "Bstellige", statWishlist: "Wunschlischte", statOpen: "Offni Sändige", statData: "Mini Date",
noOpenOrders: "Momentan kei offni Sändige — alli Bstellige sind scho aacho. 🎉", noOpenOrders: "Momentan kei offni Sändige — alli Bstellige sind scho aacho. 🎉",
noArrivedOrders: "No kei aacho Bstellige — da erschine dini Bstellige, sobald sie glifert worde sind.",
ordersTitle: "📦 Mini Bstellige", ordersTitle: "📦 Mini Bstellige",
orderNo: "Bstellig", orderDate: "Bstellt am", orderTotal: "Total", orderItems: "Artikel", orderNo: "Bstellig", orderDate: "Bstellt am", orderTotal: "Total", orderItems: "Artikel",
trackingLabel: "Sändigsverfolgig", trackingBtn: "Sändig verfolge →", invoiceBtn: "Rächnig (PDF)", reorderBtn: "Nomal bstelle", trackingLabel: "Sändigsverfolgig", trackingBtn: "Sändig verfolge →", invoiceBtn: "Rächnig (PDF)", reorderBtn: "Nomal bstelle",
@@ -925,6 +928,7 @@ export const ui = {
navLabel: "Navigation de l'espace client", navLabel: "Navigation de l'espace client",
statOrders: "Commandes", statWishlist: "Liste de souhaits", statOpen: "Envois en cours", statData: "Mes données", statOrders: "Commandes", statWishlist: "Liste de souhaits", statOpen: "Envois en cours", statData: "Mes données",
noOpenOrders: "Aucun envoi en cours pour le moment — toutes les commandes sont déjà arrivées. 🎉", noOpenOrders: "Aucun envoi en cours pour le moment — toutes les commandes sont déjà arrivées. 🎉",
noArrivedOrders: "Aucune commande livrée pour le moment — vos commandes apparaîtront ici dès qu'elles seront arrivées.",
ordersTitle: "📦 Mes commandes", ordersTitle: "📦 Mes commandes",
orderNo: "Commande", orderDate: "Commandé le", orderTotal: "Total", orderItems: "Articles", orderNo: "Commande", orderDate: "Commandé le", orderTotal: "Total", orderItems: "Articles",
trackingLabel: "Suivi", trackingBtn: "Suivre l'envoi →", invoiceBtn: "Facture (PDF)", reorderBtn: "Commander à nouveau", trackingLabel: "Suivi", trackingBtn: "Suivre l'envoi →", invoiceBtn: "Facture (PDF)", reorderBtn: "Commander à nouveau",
+14 -6
View File
@@ -107,7 +107,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<section class="section-tight" id="bestellungen"> <section class="section-tight" id="bestellungen">
<div class="container"> <div class="container">
<h2>{t.accountDash.ordersTitle}</h2> <h2>{t.accountDash.ordersTitle}</h2>
<p class="small" id="orders-empty-note" style="display:none;">{t.accountDash.noOpenOrders}</p> <p class="small" id="orders-empty-note" style="display:none;" data-empty-open={t.accountDash.noOpenOrders} data-empty-arrived={t.accountDash.noArrivedOrders}></p>
<div class="order-list" id="order-list"> <div class="order-list" id="order-list">
{beispielBestellungen.map((b) => ( {beispielBestellungen.map((b) => (
<div class={`card order-card order-card-${b.status}`}> <div class={`card order-card order-card-${b.status}`}>
@@ -217,8 +217,9 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
</script> </script>
<script> <script>
// Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den // Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den
// Rest aus (statt nur hinzuspringen). "Offene Sendungen" filtert zusätzlich innerhalb von // Rest aus (statt nur hinzuspringen). "Bestellungen" zeigt nur schon ANGEKOMMENE (abgeschlossene)
// "Meine Bestellungen" auf noch nicht abgeschlossene Bestellungen. // Bestellungen, "Offene Sendungen" nur die noch nicht angekommenen — echte Trennung statt
// Überschneidung.
const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"]; const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"];
const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[]; const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[];
const bestellungenSection = document.getElementById("bestellungen"); const bestellungenSection = document.getElementById("bestellungen");
@@ -226,7 +227,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
const recentSection = document.getElementById("zuletzt-angesehen"); const recentSection = document.getElementById("zuletzt-angesehen");
const datenSection = document.getElementById("meine-daten"); const datenSection = document.getElementById("meine-daten");
const orderCards = Array.from(document.querySelectorAll(".order-card")); const orderCards = Array.from(document.querySelectorAll(".order-card"));
const emptyNote = document.getElementById("orders-empty-note"); const emptyNote = document.getElementById("orders-empty-note") as HTMLElement | null;
// Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt // Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt
// "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt. // "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt.
@@ -257,11 +258,18 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
let visibleCount = 0; let visibleCount = 0;
orderCards.forEach((card) => { orderCards.forEach((card) => {
const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s)); const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s));
const show = tab === "bestellungen" || (tab === "offene" && !!status); const show = tab === "offene" ? !!status : card.classList.contains("order-card-abgeschlossen");
(card as HTMLElement).style.display = show ? "" : "none"; (card as HTMLElement).style.display = show ? "" : "none";
if (show) visibleCount++; if (show) visibleCount++;
}); });
if (emptyNote) emptyNote.style.display = tab === "offene" && visibleCount === 0 ? "block" : "none"; if (emptyNote) {
if (visibleCount === 0 && (tab === "offene" || tab === "bestellungen")) {
emptyNote.textContent = tab === "offene" ? emptyNote.dataset.emptyOpen ?? "" : emptyNote.dataset.emptyArrived ?? "";
emptyNote.style.display = "block";
} else {
emptyNote.style.display = "none";
}
}
} }
navItems.forEach((item) => { navItems.forEach((item) => {
+14 -6
View File
@@ -107,7 +107,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<section class="section-tight" id="bestellungen"> <section class="section-tight" id="bestellungen">
<div class="container"> <div class="container">
<h2>{t.accountDash.ordersTitle}</h2> <h2>{t.accountDash.ordersTitle}</h2>
<p class="small" id="orders-empty-note" style="display:none;">{t.accountDash.noOpenOrders}</p> <p class="small" id="orders-empty-note" style="display:none;" data-empty-open={t.accountDash.noOpenOrders} data-empty-arrived={t.accountDash.noArrivedOrders}></p>
<div class="order-list" id="order-list"> <div class="order-list" id="order-list">
{beispielBestellungen.map((b) => ( {beispielBestellungen.map((b) => (
<div class={`card order-card order-card-${b.status}`}> <div class={`card order-card order-card-${b.status}`}>
@@ -217,8 +217,9 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
</script> </script>
<script> <script>
// Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den // Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den
// Rest aus (statt nur hinzuspringen). "Offene Sendungen" filtert zusätzlich innerhalb von // Rest aus (statt nur hinzuspringen). "Bestellungen" zeigt nur schon ANGEKOMMENE (abgeschlossene)
// "Meine Bestellungen" auf noch nicht abgeschlossene Bestellungen. // Bestellungen, "Offene Sendungen" nur die noch nicht angekommenen — echte Trennung statt
// Überschneidung.
const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"]; const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"];
const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[]; const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[];
const bestellungenSection = document.getElementById("bestellungen"); const bestellungenSection = document.getElementById("bestellungen");
@@ -226,7 +227,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
const recentSection = document.getElementById("zuletzt-angesehen"); const recentSection = document.getElementById("zuletzt-angesehen");
const datenSection = document.getElementById("meine-daten"); const datenSection = document.getElementById("meine-daten");
const orderCards = Array.from(document.querySelectorAll(".order-card")); const orderCards = Array.from(document.querySelectorAll(".order-card"));
const emptyNote = document.getElementById("orders-empty-note"); const emptyNote = document.getElementById("orders-empty-note") as HTMLElement | null;
// Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt // Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt
// "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt. // "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt.
@@ -257,11 +258,18 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
let visibleCount = 0; let visibleCount = 0;
orderCards.forEach((card) => { orderCards.forEach((card) => {
const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s)); const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s));
const show = tab === "bestellungen" || (tab === "offene" && !!status); const show = tab === "offene" ? !!status : card.classList.contains("order-card-abgeschlossen");
(card as HTMLElement).style.display = show ? "" : "none"; (card as HTMLElement).style.display = show ? "" : "none";
if (show) visibleCount++; if (show) visibleCount++;
}); });
if (emptyNote) emptyNote.style.display = tab === "offene" && visibleCount === 0 ? "block" : "none"; if (emptyNote) {
if (visibleCount === 0 && (tab === "offene" || tab === "bestellungen")) {
emptyNote.textContent = tab === "offene" ? emptyNote.dataset.emptyOpen ?? "" : emptyNote.dataset.emptyArrived ?? "";
emptyNote.style.display = "block";
} else {
emptyNote.style.display = "none";
}
}
} }
navItems.forEach((item) => { navItems.forEach((item) => {
+14 -6
View File
@@ -107,7 +107,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<section class="section-tight" id="bestellungen"> <section class="section-tight" id="bestellungen">
<div class="container"> <div class="container">
<h2>{t.accountDash.ordersTitle}</h2> <h2>{t.accountDash.ordersTitle}</h2>
<p class="small" id="orders-empty-note" style="display:none;">{t.accountDash.noOpenOrders}</p> <p class="small" id="orders-empty-note" style="display:none;" data-empty-open={t.accountDash.noOpenOrders} data-empty-arrived={t.accountDash.noArrivedOrders}></p>
<div class="order-list" id="order-list"> <div class="order-list" id="order-list">
{beispielBestellungen.map((b) => ( {beispielBestellungen.map((b) => (
<div class={`card order-card order-card-${b.status}`}> <div class={`card order-card order-card-${b.status}`}>
@@ -217,8 +217,9 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
</script> </script>
<script> <script>
// Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den // Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den
// Rest aus (statt nur hinzuspringen). "Offene Sendungen" filtert zusätzlich innerhalb von // Rest aus (statt nur hinzuspringen). "Bestellungen" zeigt nur schon ANGEKOMMENE (abgeschlossene)
// "Meine Bestellungen" auf noch nicht abgeschlossene Bestellungen. // Bestellungen, "Offene Sendungen" nur die noch nicht angekommenen — echte Trennung statt
// Überschneidung.
const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"]; const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"];
const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[]; const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[];
const bestellungenSection = document.getElementById("bestellungen"); const bestellungenSection = document.getElementById("bestellungen");
@@ -226,7 +227,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
const recentSection = document.getElementById("zuletzt-angesehen"); const recentSection = document.getElementById("zuletzt-angesehen");
const datenSection = document.getElementById("meine-daten"); const datenSection = document.getElementById("meine-daten");
const orderCards = Array.from(document.querySelectorAll(".order-card")); const orderCards = Array.from(document.querySelectorAll(".order-card"));
const emptyNote = document.getElementById("orders-empty-note"); const emptyNote = document.getElementById("orders-empty-note") as HTMLElement | null;
// Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt // Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt
// "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt. // "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt.
@@ -257,11 +258,18 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
let visibleCount = 0; let visibleCount = 0;
orderCards.forEach((card) => { orderCards.forEach((card) => {
const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s)); const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s));
const show = tab === "bestellungen" || (tab === "offene" && !!status); const show = tab === "offene" ? !!status : card.classList.contains("order-card-abgeschlossen");
(card as HTMLElement).style.display = show ? "" : "none"; (card as HTMLElement).style.display = show ? "" : "none";
if (show) visibleCount++; if (show) visibleCount++;
}); });
if (emptyNote) emptyNote.style.display = tab === "offene" && visibleCount === 0 ? "block" : "none"; if (emptyNote) {
if (visibleCount === 0 && (tab === "offene" || tab === "bestellungen")) {
emptyNote.textContent = tab === "offene" ? emptyNote.dataset.emptyOpen ?? "" : emptyNote.dataset.emptyArrived ?? "";
emptyNote.style.display = "block";
} else {
emptyNote.style.display = "none";
}
}
} }
navItems.forEach((item) => { navItems.forEach((item) => {
+14 -6
View File
@@ -107,7 +107,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<section class="section-tight" id="bestellungen"> <section class="section-tight" id="bestellungen">
<div class="container"> <div class="container">
<h2>{t.accountDash.ordersTitle}</h2> <h2>{t.accountDash.ordersTitle}</h2>
<p class="small" id="orders-empty-note" style="display:none;">{t.accountDash.noOpenOrders}</p> <p class="small" id="orders-empty-note" style="display:none;" data-empty-open={t.accountDash.noOpenOrders} data-empty-arrived={t.accountDash.noArrivedOrders}></p>
<div class="order-list" id="order-list"> <div class="order-list" id="order-list">
{beispielBestellungen.map((b) => ( {beispielBestellungen.map((b) => (
<div class={`card order-card order-card-${b.status}`}> <div class={`card order-card order-card-${b.status}`}>
@@ -217,8 +217,9 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
</script> </script>
<script> <script>
// Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den // Schnellnavigation als echte Filter-Tabs: Klick zeigt NUR den passenden Bereich, blendet den
// Rest aus (statt nur hinzuspringen). "Offene Sendungen" filtert zusätzlich innerhalb von // Rest aus (statt nur hinzuspringen). "Bestellungen" zeigt nur schon ANGEKOMMENE (abgeschlossene)
// "Meine Bestellungen" auf noch nicht abgeschlossene Bestellungen. // Bestellungen, "Offene Sendungen" nur die noch nicht angekommenen — echte Trennung statt
// Überschneidung.
const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"]; const OFFENE_STATUS = ["bezahlt", "bearbeitung", "versandVorbereitet", "versendet"];
const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[]; const navItems = Array.from(document.querySelectorAll(".account-nav-item")) as HTMLButtonElement[];
const bestellungenSection = document.getElementById("bestellungen"); const bestellungenSection = document.getElementById("bestellungen");
@@ -226,7 +227,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
const recentSection = document.getElementById("zuletzt-angesehen"); const recentSection = document.getElementById("zuletzt-angesehen");
const datenSection = document.getElementById("meine-daten"); const datenSection = document.getElementById("meine-daten");
const orderCards = Array.from(document.querySelectorAll(".order-card")); const orderCards = Array.from(document.querySelectorAll(".order-card"));
const emptyNote = document.getElementById("orders-empty-note"); const emptyNote = document.getElementById("orders-empty-note") as HTMLElement | null;
// Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt // Beim Laden ist noch KEIN Knopf gedrückt — solange nichts angeklickt wurde, steht direkt
// "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt. // "Zuletzt angesehen" da, alle anderen (per Tab umschaltbaren) Bereiche bleiben versteckt.
@@ -257,11 +258,18 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
let visibleCount = 0; let visibleCount = 0;
orderCards.forEach((card) => { orderCards.forEach((card) => {
const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s)); const status = OFFENE_STATUS.find((s) => card.classList.contains("order-card-" + s));
const show = tab === "bestellungen" || (tab === "offene" && !!status); const show = tab === "offene" ? !!status : card.classList.contains("order-card-abgeschlossen");
(card as HTMLElement).style.display = show ? "" : "none"; (card as HTMLElement).style.display = show ? "" : "none";
if (show) visibleCount++; if (show) visibleCount++;
}); });
if (emptyNote) emptyNote.style.display = tab === "offene" && visibleCount === 0 ? "block" : "none"; if (emptyNote) {
if (visibleCount === 0 && (tab === "offene" || tab === "bestellungen")) {
emptyNote.textContent = tab === "offene" ? emptyNote.dataset.emptyOpen ?? "" : emptyNote.dataset.emptyArrived ?? "";
emptyNote.style.display = "block";
} else {
emptyNote.style.display = "none";
}
}
} }
navItems.forEach((item) => { navItems.forEach((item) => {