Manueller Druck: Textvorlage überschreibt Inhalt; Zeile1–5 als Platzhalter
- Mustertext-Auswahl ersetzt den bisherigen Brieftext (statt anzuhängen). - Vorschau: [[Zeile1]]..[[Zeile5]] aus den 5 Adresszeilen verfügbar; Tipp im UI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -420,7 +420,8 @@ const NeuAuftrag = defineComponent({
|
||||
if (wert === 'du' || wert === 'sie') t = wert === 'du' ? musterTexte.value.text_du : musterTexte.value.text_sie;
|
||||
else t = (musterListe.value.find((m) => String(m.id) === String(wert)) || {}).text || '';
|
||||
if (!t) return;
|
||||
neu.text = neu.text.trim() ? `${neu.text}\n\n${t}` : t;
|
||||
// Vorlage ersetzt den bisherigen Inhalt (nicht anhängen).
|
||||
neu.text = t;
|
||||
neu.previewSession = null;
|
||||
};
|
||||
|
||||
@@ -607,7 +608,8 @@ const NeuAuftrag = defineComponent({
|
||||
requestAnimationFrame(() => { try { ta.selectionStart = ta.selectionEnd = s + 1; } catch {} });
|
||||
} }),
|
||||
h('div', { style: 'font-size:11px;color:var(--foreground-subdued,#888);margin-top:4px;line-height:1.5;' },
|
||||
'Tipp: [[seitenumbruch]] erzwingt an dieser Stelle eine neue Seite (mehrseitiger Brief). [[signatur1]] setzt die Unterschrift.'),
|
||||
'Tipp: [[seitenumbruch]] erzwingt an dieser Stelle eine neue Seite (mehrseitiger Brief). [[signatur1]] setzt die Unterschrift. '
|
||||
+ 'Platzhalter: [[Vorname]], [[Nachname]], [[Anrede]], [[Strasse]], [[PLZ]], [[Ort]] – im 5-Zeilen-Modus außerdem [[Zeile1]]…[[Zeile5]].'),
|
||||
// ── Unterschrift auf den Brief ─────────────────────────────────────
|
||||
h('div', { style: 'margin-top:16px;border-top:1px solid rgba(30,80,165,.15);padding-top:14px;' }, [
|
||||
label('Unterschrift auf den Brief (optional) · Platzhalter [[signatur1]]'),
|
||||
|
||||
@@ -691,19 +691,25 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
filter: { key: { _eq: briefFormat } }, limit: 1, fields: ['kind'],
|
||||
}))?.[0]?.kind === 'postkarte';
|
||||
|
||||
const platzhalterVon = (e, i) => ({
|
||||
Anrede: clean(e.salutation || ''),
|
||||
Vorname: clean(e.first_name || ''),
|
||||
Nachname: clean(e.last_name || ''),
|
||||
Strasse: clean([e.street, e.house_no].filter(Boolean).join(' ')),
|
||||
PLZ: clean(e.zip || ''),
|
||||
Ort: clean(e.city || ''),
|
||||
Land: clean(e.country || ''),
|
||||
Briefnummer: String(i + 1),
|
||||
...(e.placeholders && typeof e.placeholders === 'object'
|
||||
? Object.fromEntries(Object.entries(e.placeholders).map(([k, v]) => [k, clean(String(v))]))
|
||||
: {}),
|
||||
});
|
||||
const platzhalterVon = (e, i) => {
|
||||
// 5 Adresszeilen (5-Zeilen-Modus) auch als [[Zeile1]]..[[Zeile5]].
|
||||
const zeilen = String(e.free_text || '').split('\n');
|
||||
return {
|
||||
Anrede: clean(e.salutation || ''),
|
||||
Vorname: clean(e.first_name || ''),
|
||||
Nachname: clean(e.last_name || ''),
|
||||
Strasse: clean([e.street, e.house_no].filter(Boolean).join(' ')),
|
||||
PLZ: clean(e.zip || ''),
|
||||
Ort: clean(e.city || ''),
|
||||
Land: clean(e.country || ''),
|
||||
Briefnummer: String(i + 1),
|
||||
Zeile1: clean(zeilen[0] || ''), Zeile2: clean(zeilen[1] || ''), Zeile3: clean(zeilen[2] || ''),
|
||||
Zeile4: clean(zeilen[3] || ''), Zeile5: clean(zeilen[4] || ''),
|
||||
...(e.placeholders && typeof e.placeholders === 'object'
|
||||
? Object.fromEntries(Object.entries(e.placeholders).map(([k, v]) => [k, clean(String(v))]))
|
||||
: {}),
|
||||
};
|
||||
};
|
||||
|
||||
const adressBlock = (e) => {
|
||||
if (e.free_text) return clean(String(e.free_text));
|
||||
|
||||
Reference in New Issue
Block a user