Format-Templates nicht mehr re-seeden, Signatur-Kuverts entfernt, Weiteres-Menü

- bootstrap: format_templates nur bei LEERER Collection anlegen (Betreiber
  pflegt sie selbst; kein Wieder-Anlegen bei jedem Bootstrap).
- Unterschriftenservice: Inline-Kuverts ("Kuverts mitdrucken") + Verknüpfen im
  Signatur-Tab wieder entfernt; signature-order auf Seiten-only zurückgesetzt.
- Produktion: Verknüpfen, In Kontakte speichern, Neu generieren und In manuellen
  Druck übernehmen hinter "Weiteres"-Button gebündelt; Notiz bleibt vorne.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorthandClaude Opus 4.8 committed 2026-09-07 08:44:21 +02:00
1 parent ae7ef2422e
commit 08fe21a158
4 files changed
+50 -121

No files matched your search

@@ -59,11 +59,6 @@ const NeuAuftrag = defineComponent({
modus: 'auftrag', // 'auftrag' (aus Auftrag laden) oder 'manuell' (direkt hochladen)
orderNr: '', order: null, docs: [], docId: null, docName: '', signaturen: [],
customerEmail: '', laden: false, pdf: '', msg: '', err: '',
// Kuverts zum Unterschriftenservice (wie manueller Druck): je Empfänger ein Umschlag.
kuverts: false, kuvertFormat: 'dinlang', empfBlocks: '',
absenderAuf: false, absender: '', absenderScale: 100,
// Verknüpfung mit vorhandenem Auftrag (dessen Kuverts genutzt werden).
linkNr: '',
});
// Datei nach Directus hochladen (liefert die Datei-ID).
async function sigUpload(file) {
@@ -768,20 +763,10 @@ const NeuAuftrag = defineComponent({
async function sigAuftrag() {
if (!sig.docId) { sig.err = 'Bitte ein Dokument wählen/hochladen.'; return; }
if (!sigAktive().length) { sig.err = 'Mindestens eine Unterschrift aktivieren.'; return; }
if (sig.kuverts && !sig.empfBlocks.trim()) { sig.err = 'Kuverts gewählt, aber keine Empfänger angegeben.'; return; }
sig.err = ''; sig.msg = 'Auftrag wird angelegt …';
try {
const res = await api.post('/skrift-orders/signature-order', {
...sigPayload(), customer_email: sig.customerEmail || undefined,
kuverts: sig.kuverts,
recipients_text: sig.kuverts ? sig.empfBlocks : undefined,
envelope_format: sig.kuverts ? sig.kuvertFormat : undefined,
envelope_sender: sig.kuverts && sig.absenderAuf ? sig.absender.trim() : undefined,
envelope_sender_scale: (Number(sig.absenderScale) || 100) / 100,
link_order_number: sig.linkNr.trim() || undefined,
});
const kt = res.data.kuverts ? `, ${res.data.kuverts} Kuvert/s` : '';
sig.msg = `✔ Auftrag ${res.data.order_number} angelegt (${res.data.pages} Seite/n${kt}). Im Produktions-Board unter „Neu" → Drucken.`;
const res = await api.post('/skrift-orders/signature-order', { ...sigPayload(), customer_email: sig.customerEmail || undefined });
sig.msg = `✔ Auftrag ${res.data.order_number} angelegt (${res.data.pages} Seite/n). Im Produktions-Board unter „Neu" → Drucken.`;
} catch (e) { sig.err = e?.response?.data?.detail || e?.response?.data?.error || e?.message || 'Auftrag konnte nicht angelegt werden.'; sig.msg = ''; }
}
@@ -856,44 +841,11 @@ const NeuAuftrag = defineComponent({
btn('⤓ A4-Signaturen (ZIP)', sigDownload),
]),
]);
// ── Kuverts & Verknüpfung ──────────────────────────────────────────────
const b3 = h('div', { style: BEREICH }, [
bereichKopf('✉ Kuverts & Verknüpfung'),
subdued('Optional: adressierte Kuverts zum Unterschriftenservice erzeugen (wie beim manuellen Druck) – oder den Auftrag mit einem vorhandenen Auftrag verknüpfen, dessen Kuverts genutzt werden.', 'margin-bottom:10px;'),
h('label', { style: 'display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer;margin-bottom:8px;' }, [
h('input', { type: 'checkbox', checked: sig.kuverts, onChange: (e) => { sig.kuverts = e.target.checked; }, style: 'width:16px;height:16px;' }),
'Kuverts mitdrucken (je Empfänger ein Umschlag)',
]),
sig.kuverts ? h('div', { style: 'padding-left:24px;display:flex;flex-direction:column;gap:12px;margin-bottom:12px;' }, [
h('div', { style: 'max-width:240px;' }, [label('Kuvertformat'), sel(sig.kuvertFormat, [{ v: 'dinlang', t: 'DIN Lang' }, { v: 'c6', t: 'C6' }], (e) => { sig.kuvertFormat = e.target.value; })]),
h('div', {}, [
label('Empfänger (ein Block je Empfänger, durch Leerzeile getrennt)'),
h('textarea', { value: sig.empfBlocks, rows: 6, placeholder: 'Max Mustermann\nMusterstr. 1\n12345 Musterstadt\n\nErika Beispiel\nBeispielweg 2\n54321 Beispielort',
style: WFELD + 'width:100%;font-family:var(--family-monospace,monospace);', onInput: (e) => { sig.empfBlocks = e.target.value; } }),
]),
h('label', { style: 'display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer;' }, [
h('input', { type: 'checkbox', checked: sig.absenderAuf, onChange: (e) => { sig.absenderAuf = e.target.checked; }, style: 'width:16px;height:16px;' }),
'Absender aufs Kuvert',
]),
sig.absenderAuf ? h('div', { style: 'display:flex;gap:12px;flex-wrap:wrap;' }, [
h('div', { style: 'flex:1;min-width:200px;' }, [label('Absender (max. 5 Zeilen)'),
h('textarea', { value: sig.absender, rows: 5, style: WFELD + 'width:100%;',
onInput: (e) => { sig.absender = e.target.value.split('\n').slice(0, 5).join('\n'); } })]),
h('div', { style: 'width:120px;' }, [label('Größe (%)'),
h('input', { type: 'number', step: 5, min: 50, max: 200, value: sig.absenderScale, style: WFELD + 'width:100%;', onInput: (e) => { sig.absenderScale = e.target.value; } })]),
]) : null,
]) : null,
h('div', { style: 'max-width:360px;' }, [
label('Mit vorhandenem Auftrag verknüpfen (Nr., optional)'),
h('input', { value: sig.linkNr, placeholder: 'z. B. 07-09-26-003', style: WFELD + 'width:100%;', onInput: (e) => { sig.linkNr = e.target.value; } }),
subdued('Dessen Kuverts werden für diesen Auftrag genutzt. Änderbar im Produktions-Board.', 'margin-top:4px;'),
]),
]);
const meldung = h('div', {}, [
sig.err ? h('div', { style: 'color:var(--danger,#c62828);font-size:13px;margin-top:8px;' }, sig.err) : null,
sig.msg ? subdued(sig.msg, 'margin-top:8px;') : null,
]);
const links = h('div', { style: 'flex:1;min-width:0;display:flex;flex-direction:column;gap:16px;' }, [b1, b2, b3, meldung]);
const links = h('div', { style: 'flex:1;min-width:0;display:flex;flex-direction:column;gap:16px;' }, [b1, b2, meldung]);
const rechts = h('div', { style: BEREICH + 'flex:0 0 420px;position:sticky;top:20px;align-self:flex-start;min-height:200px;' }, [
h('div', { style: 'display:flex;justify-content:space-between;align-items:center;gap:8px;' }, [
bereichKopf('👁 Vorschau'),