A6 quer: rollenschonender Druck (spaltenweise Zeichenreihenfolge)
Checkbox „Rollenschonend drucken" im Druck-Popup (nur bei A6). Setzt am Job das Feld spaltenweise. Der Agent lädt das Schriftstück-SVG dann über den Download-Endpunkt mit ?reorder=column: die Glyph-<path>-Elemente werden nach x (Spalte) und y (oben→unten) permutiert – Signatur-<g>, Hintergrund und Trennstrich bleiben unangetastet. Sichtbares Ergebnis identisch, aber der rollengeführte Plotter fährt monoton in Vorschub- richtung statt je Zeile die Rolle zurückzuspulen. Nur Schriftstücke, nicht Kuverts. Neues Job-Feld jobs.spaltenweise (Bootstrap). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -459,6 +459,7 @@ const collections = [
|
|||||||
f('params', 'json', { interface: 'input-code', note: 'Maß-Übersteuerung {width,height,xpos,ypos,scale,rotation} (leer = Template).' }),
|
f('params', 'json', { interface: 'input-code', note: 'Maß-Übersteuerung {width,height,xpos,ypos,scale,rotation} (leer = Template).' }),
|
||||||
// Welche Dokumentnummern gedruckt werden (1-basiert, z. B. „1-20" oder „1,3,5-7"). Leer = alle.
|
// Welche Dokumentnummern gedruckt werden (1-basiert, z. B. „1-20" oder „1,3,5-7"). Leer = alle.
|
||||||
f('numbers', 'string', { interface: 'input', note: 'Zu druckende Briefnummern (1-basiert). Leer = alle.' }),
|
f('numbers', 'string', { interface: 'input', note: 'Zu druckende Briefnummern (1-basiert). Leer = alle.' }),
|
||||||
|
f('spaltenweise', 'boolean', { interface: 'boolean', default: false, note: 'Rollenschonende Zeichenreihenfolge (spaltenweise, für A6 quer). Der Agent lädt das SVG dann umsortiert.' }),
|
||||||
f('error', 'text', { interface: 'input-multiline', note: 'Fehlermeldung vom Agent (falls fehlgeschlagen).' }),
|
f('error', 'text', { interface: 'input-multiline', note: 'Fehlermeldung vom Agent (falls fehlgeschlagen).' }),
|
||||||
{ field: 'date_created', type: 'timestamp', meta: { interface: 'datetime', readonly: true, special: ['date-created'] }, schema: {} },
|
{ field: 'date_created', type: 'timestamp', meta: { interface: 'datetime', readonly: true, special: ['date-created'] }, schema: {} },
|
||||||
{ field: 'date_updated', type: 'timestamp', meta: { interface: 'datetime', readonly: true, special: ['date-updated'] }, schema: {} },
|
{ field: 'date_updated', type: 'timestamp', meta: { interface: 'datetime', readonly: true, special: ['date-updated'] }, schema: {} },
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -194,7 +194,7 @@ const Board = defineComponent({
|
|||||||
const musterListe = ref([]);
|
const musterListe = ref([]);
|
||||||
|
|
||||||
// ── Modale ──
|
// ── Modale ──
|
||||||
const druck = reactive({ open: false, order: null, machine: null, mode: 'queue', busy: false, brief: null, umschlag: null, msg: '', err: '', deNums: '', intNums: '', deN: 0, intN: 0 });
|
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: '',
|
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.
|
// Adresse automatisch aufs Kuvert (Standard an) + eigenes Kuvert-Template/-Format.
|
||||||
kuvert: true, envFormat: 'dinlang', envTemplate: null, msg: '', err: '' });
|
kuvert: true, envFormat: 'dinlang', envTemplate: null, msg: '', err: '' });
|
||||||
@@ -756,6 +756,8 @@ const Board = defineComponent({
|
|||||||
druck.order = order;
|
druck.order = order;
|
||||||
druck.machine = aktiveMaschinen.value[0]?.id ?? null;
|
druck.machine = aktiveMaschinen.value[0]?.id ?? null;
|
||||||
druck.mode = 'queue'; druck.msg = ''; druck.err = '';
|
druck.mode = 'queue'; druck.msg = ''; druck.err = '';
|
||||||
|
// Rollenschonende Zeichenreihenfolge nur bei A6 anbieten (Default aus).
|
||||||
|
druck.spaltenweise = false;
|
||||||
druck.brief = { enabled: true, numbers: `1-${n}`, done: !!order.brief_gedruckt, ...tplToFelder(bt) };
|
druck.brief = { enabled: true, numbers: `1-${n}`, done: !!order.brief_gedruckt, ...tplToFelder(bt) };
|
||||||
druck.umschlag = wantsEnv ? { enabled: true, numbers: `1-${n}`, done: !!order.kuvert_gedruckt, ...tplToFelder(et) } : null;
|
druck.umschlag = wantsEnv ? { enabled: true, numbers: `1-${n}`, done: !!order.kuvert_gedruckt, ...tplToFelder(et) } : null;
|
||||||
druck.deNums = ''; druck.intNums = ''; druck.deN = 0; druck.intN = 0;
|
druck.deNums = ''; druck.intNums = ''; druck.deN = 0; druck.intN = 0;
|
||||||
@@ -789,7 +791,7 @@ const Board = defineComponent({
|
|||||||
const sections = {};
|
const sections = {};
|
||||||
const bau = (sec) => ({ enabled: true, template: sec.tplId, numbers: sec.numbers || '',
|
const bau = (sec) => ({ enabled: true, template: sec.tplId, numbers: sec.numbers || '',
|
||||||
params: { width: sec.width, height: sec.height, xpos: sec.xpos, ypos: sec.ypos, scale: sec.scale, rotation: sec.rotation } });
|
params: { width: sec.width, height: sec.height, xpos: sec.xpos, ypos: sec.ypos, scale: sec.scale, rotation: sec.rotation } });
|
||||||
if (druck.brief?.enabled) sections.brief = bau(druck.brief);
|
if (druck.brief?.enabled) sections.brief = { ...bau(druck.brief), spaltenweise: !!druck.spaltenweise };
|
||||||
if (druck.umschlag?.enabled) sections.umschlag = bau(druck.umschlag);
|
if (druck.umschlag?.enabled) sections.umschlag = bau(druck.umschlag);
|
||||||
if (!Object.keys(sections).length) { druck.err = 'Kein Abschnitt gewählt.'; return; }
|
if (!Object.keys(sections).length) { druck.err = 'Kein Abschnitt gewählt.'; return; }
|
||||||
druck.err = ''; druck.msg = 'Wird eingereiht …';
|
druck.err = ''; druck.msg = 'Wird eingereiht …';
|
||||||
@@ -1478,6 +1480,14 @@ const Board = defineComponent({
|
|||||||
]),
|
]),
|
||||||
druckSektion('brief', 'Briefe', '📄', 'brief'),
|
druckSektion('brief', 'Briefe', '📄', 'brief'),
|
||||||
druckSektion('umschlag', 'Kuverts', '✉', 'umschlag'),
|
druckSektion('umschlag', 'Kuverts', '✉', 'umschlag'),
|
||||||
|
// Rollenschonende Zeichenreihenfolge – nur bei A6 sinnvoll (Karte quer).
|
||||||
|
String(druck.order.format?.key || '').startsWith('a6') ? h('div', { style: SECTION + 'margin-bottom:12px;' }, [
|
||||||
|
h('label', { style: 'display:flex;align-items:center;gap:10px;font-size:14px;cursor:pointer;' }, [
|
||||||
|
h('input', { type: 'checkbox', checked: druck.spaltenweise, onChange: (e) => { druck.spaltenweise = e.target.checked; }, style: 'width:18px;height:18px;' }),
|
||||||
|
h('span', { style: 'font-weight:600;' }, 'Rollenschonend drucken (spaltenweise)'),
|
||||||
|
]),
|
||||||
|
subdued('Für A6 quer: Zeichen werden spaltenweise (kurze Seite, oben→unten) gedruckt, damit die Rolle nicht je Zeile zurückfährt. Das sichtbare Ergebnis auf der Karte bleibt gleich – nur die Schriftstücke (nicht die Kuverts).', 'margin-top:6px;'),
|
||||||
|
]) : null,
|
||||||
h('div', { style: 'margin:12px 0 4px;' }, [
|
h('div', { style: 'margin:12px 0 4px;' }, [
|
||||||
segToggle(busy ? 'queue' : druck.mode, [
|
segToggle(busy ? 'queue' : druck.mode, [
|
||||||
{ key: 'direct', label: '⚡ Direktdruck', disabled: busy },
|
{ key: 'direct', label: '⚡ Direktdruck', disabled: busy },
|
||||||
|
|||||||
Reference in New Issue
Block a user