WP-Feld-Mapping robuster + Logging; Muster ohne Direktdruck; Kontakte-Fixes
- skrift-orders: sample-/offer-request nehmen viele Feldnamen-Varianten an (feldWert-Helfer) und loggen eingehende + gefüllte Feldnamen zur Diagnose. - skrift-produktion: „Direkt drucken" bei Musteranfragen entfernt (nur noch „In manuellen Druck übernehmen"). - skrift-kontakte: Bulk-Status-Dropdown lesbar (weiße Schrift auf weiß behoben); Shift-Klick wählt den ganzen Bereich zwischen zwei Checkboxen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
4d811c1f0b
commit
ba9c073bb9
3 files changed
+52
-24
No files matched your search
+20
-3
@@ -214,8 +214,24 @@ const Board = defineComponent({
|
||||
|
||||
// ── Mehrfachauswahl (Bulk: Status ändern / löschen) ──
|
||||
const auswahl = ref(new Set());
|
||||
const lastIdx = ref(-1); // zuletzt geklickte Zeile (für Shift-Bereichsauswahl)
|
||||
const istGewaehlt = (id) => auswahl.value.has(id);
|
||||
const toggleSel = (id) => { const s = new Set(auswahl.value); s.has(id) ? s.delete(id) : s.add(id); auswahl.value = s; };
|
||||
// Klick auf eine Karten-Checkbox: mit Shift den ganzen Bereich seit dem letzten Klick.
|
||||
const klickSel = (id, ev) => {
|
||||
const list = gefiltert.value;
|
||||
const idx = list.findIndex((x) => x.id === id);
|
||||
if (ev && ev.shiftKey && lastIdx.value >= 0 && idx >= 0) {
|
||||
const a = Math.min(lastIdx.value, idx);
|
||||
const b = Math.max(lastIdx.value, idx);
|
||||
const s = new Set(auswahl.value);
|
||||
for (let i = a; i <= b; i += 1) s.add(list[i].id);
|
||||
auswahl.value = s;
|
||||
} else {
|
||||
toggleSel(id);
|
||||
}
|
||||
lastIdx.value = idx;
|
||||
};
|
||||
const selAlle = () => { auswahl.value = new Set(gefiltert.value.map((k) => k.id)); };
|
||||
const selKeine = () => { auswahl.value = new Set(); };
|
||||
async function bulkStatus(status) {
|
||||
@@ -248,7 +264,7 @@ const Board = defineComponent({
|
||||
}, [
|
||||
h('input', {
|
||||
type: 'checkbox', checked: istGewaehlt(k.id),
|
||||
onClick: (e) => { e.stopPropagation(); toggleSel(k.id); },
|
||||
onClick: (e) => { e.stopPropagation(); klickSel(k.id, e); },
|
||||
title: 'Auswählen', style: 'width:18px;height:18px;margin-top:3px;cursor:pointer;flex-shrink:0;',
|
||||
}),
|
||||
h('div', { style: 'min-width:0;flex:1;' }, [
|
||||
@@ -297,9 +313,10 @@ const Board = defineComponent({
|
||||
h('span', { style: 'font-weight:600;' }, `${auswahl.value.size} ausgewählt`),
|
||||
h('span', {}, 'Status:'),
|
||||
h('select', {
|
||||
style: 'border-radius:6px;padding:5px 8px;font:inherit;font-size:13px;border:none;cursor:pointer;', value: '',
|
||||
style: 'border-radius:6px;padding:5px 8px;font:inherit;font-size:13px;border:none;cursor:pointer;background:#fff;color:#1a1a1a;', value: '',
|
||||
onChange: (e) => { if (e.target.value) { bulkStatus(e.target.value); e.target.value = ''; } },
|
||||
}, [h('option', { value: '' }, 'ändern auf …'), ...LEAD.map((l) => h('option', { value: l.key }, l.label))]),
|
||||
}, [h('option', { value: '', style: 'color:#1a1a1a;' }, 'ändern auf …'),
|
||||
...LEAD.map((l) => h('option', { value: l.key, style: 'color:#1a1a1a;background:#fff;' }, l.label))]),
|
||||
h('button', { type: 'button', onClick: bulkLoeschen,
|
||||
style: 'margin-left:auto;cursor:pointer;border:1px solid #fff;background:transparent;color:#fff;border-radius:6px;padding:5px 12px;font:inherit;font-size:13px;font-weight:600;' }, '🗑 Löschen'),
|
||||
h('button', { type: 'button', onClick: selKeine,
|
||||
|
||||
Reference in new issue
Block a user