C4-Kuvert im manuellen Druck (Absender-Freitext, quer)
- render_formats c4 (324x229, umschlag) + format_template kuvert_c4_v1 (quer) + envelope_format-Dropdown um c4 erweitert. - produktion: Kuvert-Format-Dropdown im manuellen Druck um C4 (quer) + neues Absender-Freitextfeld (max. 5 Zeilen); Empfaenger weiter aus der Tabelle. ENVELOPE_TPL/ENV_LABEL um c4. - orders /manual-print: envelope_format c4 gemappt, envelope_sender an das Backend (metadata.envelopeSender) durchgereicht. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1533,15 +1533,16 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
const font = ['tilda', 'alva', 'ellie'].includes(body.font) ? body.font : 'tilda';
|
||||
const format = TEST_FORMAT[body.format] || 'a4';
|
||||
|
||||
// Kuvert (Adresse aus der Anfrage) optional mitdrucken.
|
||||
const ENV_FMT = { dinlang: 'din_lang', c6: 'c6' };
|
||||
// Kuvert (Empfänger aus der Anfrage, Absender optional als Freitext) mitdrucken.
|
||||
const ENV_FMT = { dinlang: 'din_lang', c6: 'c6', c4: 'c4' };
|
||||
const envAddr = clean(String(body.envelope || '')).trim();
|
||||
const wantsEnv = !!(envAddr && body.envelope_template);
|
||||
const envFormat = ENV_FMT[body.envelope_format] || 'din_lang';
|
||||
const envSender = clean(String(body.envelope_sender || '')).trim();
|
||||
|
||||
const letters = [{ index: 1, type: 'letter', text: clean(String(body.text)), format, font, realisticHandwriting: body.realistic !== false }];
|
||||
if (wantsEnv) {
|
||||
letters.push({ index: 1, type: 'envelope', envelopeType: 'recipient', text: envAddr, format: envFormat, font, realisticHandwriting: body.realistic !== false });
|
||||
letters.push({ index: 1, type: 'envelope', envelopeType: 'recipient', text: envAddr, format: envFormat, font, realisticHandwriting: body.realistic !== false, sender: envSender });
|
||||
}
|
||||
|
||||
const gen = await fetch(`${BACKEND_URL}/api/order/generate`, {
|
||||
@@ -1550,7 +1551,8 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
body: JSON.stringify({
|
||||
orderNumber: ref,
|
||||
letters,
|
||||
metadata: { rawText: String(body.text) },
|
||||
// envelopeSender: Backend rendert das Kuvert damit frisch (Absender oben links).
|
||||
metadata: { rawText: String(body.text), envelopeSender: envSender },
|
||||
}),
|
||||
});
|
||||
if (!gen.ok) {
|
||||
|
||||
@@ -26,9 +26,9 @@ import { useApi } from '@directus/extensions-sdk';
|
||||
const LETTER_TPL = { a4: 'a4_single', a5p: 'a5_v1', a5l: 'a5l_v1', dinlang_karte: 'dl_v1', a6_hoch: 'a6_v1', a6_quer: 'a6l_v1' };
|
||||
// v1 = Empfängeradresse (Standardvorschlag). Für individuelle Beschriftung
|
||||
// wählt der Operator im Popup die Variante 2 (kuvert_a_v2 / kuvert_b_v2).
|
||||
const ENVELOPE_TPL = { dinlang: 'kuvert_a_v1', c6: 'kuvert_b_v1' };
|
||||
const ENVELOPE_TPL = { dinlang: 'kuvert_a_v1', c6: 'kuvert_b_v1', c4: 'kuvert_c4_v1' };
|
||||
// Lesbare Kuvert-Formatlabels (für Sammel-Druck + Format-Warteschlange).
|
||||
const ENV_LABEL = { dinlang: 'DIN Lang', c6: 'C6' };
|
||||
const ENV_LABEL = { dinlang: 'DIN Lang', c6: 'C6', c4: 'C4' };
|
||||
const INLAND = /^(de|deutschland|germany)$/i;
|
||||
|
||||
// Versandtag → Wochentag (0=So…6=Sa). Für die Frist-Berechnung.
|
||||
@@ -204,7 +204,7 @@ const Board = defineComponent({
|
||||
const druck = reactive({ open: false, order: null, machine: null, mode: 'queue', busy: false, brief: null, umschlag: null, spaltenweise: false, msg: '', err: '', deNums: '', intNums: '', deN: 0, intN: 0 });
|
||||
const manuell = reactive({ open: false, req: null, form: 'sie', vorlageId: '', roh: '', font: 'tilda', format: 'a4', template: null, machine: null, mode: 'queue', text: '',
|
||||
// Adresse automatisch aufs Kuvert (Standard an) + eigenes Kuvert-Template/-Format.
|
||||
kuvert: true, envFormat: 'dinlang', envTemplate: null, msg: '', err: '' });
|
||||
kuvert: true, envFormat: 'dinlang', envTemplate: null, envSender: '', msg: '', err: '' });
|
||||
const empf = reactive({ open: false, mode: 'order', titel: '', order: null, suche: '', rows: [], files: [],
|
||||
info: '', laden: false, selected: null, pl: '', pe: '', pLoad: false, perr: '', lb: '', lbTitel: '' });
|
||||
// Massenauswahl (Auftrags-IDs) + Sammel-Druck-Popup (pro Format Template+Maschine).
|
||||
@@ -906,10 +906,11 @@ const Board = defineComponent({
|
||||
text: manuell.text, font: manuell.font, format: manuell.format,
|
||||
template: manuell.template, machine: manuell.machine, mode: manuell.mode,
|
||||
offer_request: manuell.req?.id || null,
|
||||
// Adresse automatisch aufs Kuvert.
|
||||
// Adresse automatisch aufs Kuvert (Empfänger aus Tabelle, Absender aus Freitext).
|
||||
envelope: manuell.kuvert ? musterAdresse() : '',
|
||||
envelope_format: manuell.kuvert ? manuell.envFormat : '',
|
||||
envelope_template: manuell.kuvert ? manuell.envTemplate : null,
|
||||
envelope_sender: manuell.kuvert ? String(manuell.envSender || '').trim() : '',
|
||||
});
|
||||
const modus = res.data?.mode === 'direct' ? 'Direktdruck' : 'Warteschlange';
|
||||
flash(`Muster erzeugt & eingereiht (${modus})${manuell.kuvert ? ' inkl. Kuvert' : ''}.`);
|
||||
@@ -1829,10 +1830,15 @@ const Board = defineComponent({
|
||||
'✉ Adresse aufs Kuvert',
|
||||
]),
|
||||
manuell.kuvert ? h('select', { style: S_SELECT + 'width:auto;', value: manuell.envFormat, onChange: (e) => { manuell.envFormat = e.target.value; manuell.envTemplate = tplForFormat(e.target.value, 'umschlag')?.id ?? manuell.envTemplate; } },
|
||||
[['dinlang', 'DIN Lang'], ['c6', 'C6']].map(([v, l]) => h('option', { value: v, selected: manuell.envFormat === v }, l))) : null,
|
||||
[['dinlang', 'DIN Lang'], ['c6', 'C6'], ['c4', 'C4 (quer)']].map(([v, l]) => h('option', { value: v, selected: manuell.envFormat === v }, l))) : null,
|
||||
manuell.kuvert ? h('select', { style: S_SELECT + 'flex:1;min-width:160px;', value: manuell.envTemplate, onChange: (e) => { manuell.envTemplate = e.target.value; } }, umschlagTpls.map((t) => h('option', { value: t.id, selected: String(manuell.envTemplate) === String(t.id) }, t.name))) : null,
|
||||
manuell.kuvert ? subdued('→ ' + (musterAdresse().replace(/\n/g, ', ') || 'keine Adresse')) : null,
|
||||
manuell.kuvert ? subdued('Empfänger → ' + (musterAdresse().replace(/\n/g, ', ') || 'keine Adresse')) : null,
|
||||
]),
|
||||
// Absender aufs Kuvert (oben links) – Freitext, 5 Zeilen. Empfänger kommt aus der Tabelle.
|
||||
manuell.kuvert ? h('div', { style: 'display:flex;flex-direction:column;gap:4px;background:var(--background-subdued,#f1f4f9);border-radius:8px;padding:10px 12px;' }, [
|
||||
h('label', { style: 'font-size:11px;color:var(--foreground-subdued);' }, '✉ Absender (oben links, optional, max. 5 Zeilen)'),
|
||||
h('textarea', { style: S_INPUT + 'width:100%;min-height:96px;font-family:var(--family-monospace,monospace);', placeholder: 'Absender Zeile 1\n…', value: manuell.envSender, onInput: (e) => { manuell.envSender = e.target.value.split('\n').slice(0, 5).join('\n'); } }),
|
||||
]) : null,
|
||||
h('div', { style: 'display:grid;grid-template-columns:repeat(4,1fr);gap:8px;' }, [
|
||||
h('div', {}, [h('label', { style: 'font-size:11px;color:var(--foreground-subdued);' }, 'Schrift'),
|
||||
h('select', { style: S_SELECT + 'width:100%;', value: manuell.font, onChange: (e) => { manuell.font = e.target.value; } }, ['tilda', 'alva', 'ellie'].map((f) => h('option', { value: f, selected: manuell.font === f }, f)))]),
|
||||
|
||||
Reference in New Issue
Block a user