Produktion: Batch-Gruppierung in allen Status-Reitern; bei aktiver Suche Einzelauftraege statt Batch

This commit is contained in:
Lucas Orth
2026-08-27 08:53:27 +02:00
parent 939f7f13c6
commit e39f904690

View File

@@ -774,7 +774,7 @@ const Board = defineComponent({
}
// Charge-Karte: fasst API-Aufträge (Kunde+Typ+Versandtag+Eingangstag) zusammen.
function chargeCard(c) {
function chargeCard(c, opts) {
const auf = expandedCharges.value.has(c.key);
let faelligFarbe = 'var(--background-subdued)';
if (c.faellig) {
@@ -792,18 +792,27 @@ const Board = defineComponent({
c.versandtag ? chip('📅 ' + c.versandtag.charAt(0).toUpperCase() + c.versandtag.slice(1)) : null,
c.faellig ? chip('⏰ fällig bis ' + dmY(c.faellig), faelligFarbe) : null,
]);
const body = auf ? h('div', { style: 'margin-top:12px;display:flex;flex-direction:column;gap:2px;' }, c.orders.map((o) => orderCard(o))) : null;
const body = auf ? h('div', { style: 'margin-top:12px;display:flex;flex-direction:column;gap:2px;' }, c.orders.map((o) => orderCard(o, opts))) : null;
return h('div', { key: 'c' + c.key, style: CARD + `margin-bottom:14px;border-left:4px solid ${ACCENT};` }, [kopf, body]);
}
// Aufträge einer Ansicht rendern: bei aktiver Suche als EINZELaufträge (damit
// man den konkreten Brief/Auftrag findet), sonst API-Aufträge zu Chargen
// gebündelt – in allen Status-Reitern gleich.
function renderGruppiert(list, opts) {
if (suche.value.trim()) return list.map((o) => orderCard(o, opts));
const apiO = list.filter((o) => o.source === 'api');
const restO = list.filter((o) => o.source !== 'api');
return [
...bildeChargen(apiO).map((c) => chargeCard(c, opts)),
...restO.map((o) => orderCard(o, opts)),
];
}
function tabInhalt() {
if (tab.value === 'neu') {
// API-Aufträge zu Chargen bündeln; alles andere als Einzelkarten.
const apiOrders = neueOrders.value.filter((o) => o.source === 'api');
const restOrders = neueOrders.value.filter((o) => o.source !== 'api');
const items = [
...bildeChargen(apiOrders).map(chargeCard),
...restOrders.map((o) => orderCard(o)),
...renderGruppiert(neueOrders.value),
...neueRequests.value.map(requestCard),
];
return items.length ? items : subdued('Nichts Neues.');
@@ -853,20 +862,20 @@ const Board = defineComponent({
}
if (tab.value === 'druck') {
const list = ordersByStatus('im_druck');
return list.length ? list.map((o) => orderCard(o, { badges: true })) : subdued('Nichts im Druck.');
return list.length ? renderGruppiert(list, { badges: true }) : subdued('Nichts im Druck.');
}
if (tab.value === 'versendet') {
const list = versendetAktiv();
return list.length ? list.map((o) => orderCard(o)) : subdued('Nichts (kürzlich) versendet.');
return list.length ? renderGruppiert(list) : subdued('Nichts (kürzlich) versendet.');
}
if (tab.value === 'archiv') {
const list = archivListe();
return list.length ? list.map((o) => orderCard(o)) : subdued('Archiv leer.');
return list.length ? renderGruppiert(list) : subdued('Archiv leer.');
}
const map = { kuvertierung: 'kuvertieren', versandfertig: 'versandfertig' };
const st = map[tab.value];
const list = ordersByStatus(st);
return list.length ? list.map((o) => orderCard(o, { badges: st === 'kuvertieren' })) : subdued('Leer.');
return list.length ? renderGruppiert(list, { badges: st === 'kuvertieren' }) : subdued('Leer.');
}
// ── Modale rendern ──────────────────────────────────────────────────────