Frontend: Code-Vorschlag beim Objekt-Anlegen/Duplizieren einbinden
CI / backend-tests (push) Successful in 1m0s
CI / frontend-build (push) Successful in 15s

Präfix-Feld + "Code vorschlagen"-Button ruft GET /objekte/naechster-code
und füllt das Code-Feld vor, bleibt überschreibbar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-04 17:37:15 +02:00
co-authored by Claude Sonnet 5
parent 69e7d0c8d0
commit f06d704168
3 changed files with 113 additions and 1 deletions
+57 -1
View File
@@ -14,6 +14,7 @@ interface Props {
}
export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGeaendert, onFehler }: Props) {
const [praefix, setPraefix] = useState("");
const [code, setCode] = useState("");
const [name, setName] = useState("");
const [vorlageId, setVorlageId] = useState<number | "">("");
@@ -21,10 +22,41 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
const [wirdAngelegt, setWirdAngelegt] = useState(false);
const [ausgeklapptId, setAusgeklapptId] = useState<number | null>(null);
const [duplizierId, setDuplizierId] = useState<number | null>(null);
const [neuerPraefix, setNeuerPraefix] = useState("");
const [neuerCode, setNeuerCode] = useState("");
const [neuerName, setNeuerName] = useState("");
const [neuerStandortId, setNeuerStandortId] = useState<number | "">("");
async function codeVorschlagen() {
if (!praefix) {
onFehler("Präfix eingeben (z. B. RK, FZ).");
return;
}
try {
const antwort = await apiRequest<{ code: string }>(
`/objekte/naechster-code?praefix=${encodeURIComponent(praefix.toUpperCase())}`
);
setCode(antwort.code);
} catch {
onFehler("Code-Vorschlag fehlgeschlagen.");
}
}
async function neuerCodeVorschlagen() {
if (!neuerPraefix) {
onFehler("Präfix eingeben (z. B. RK, FZ).");
return;
}
try {
const antwort = await apiRequest<{ code: string }>(
`/objekte/naechster-code?praefix=${encodeURIComponent(neuerPraefix.toUpperCase())}`
);
setNeuerCode(antwort.code);
} catch {
onFehler("Code-Vorschlag fehlgeschlagen.");
}
}
async function anlegen() {
if (vorlageId === "" || standortId === "") {
onFehler("Vorlage und Standort auswählen.");
@@ -43,6 +75,7 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
standort_id: standortId,
},
});
setPraefix("");
setCode("");
setName("");
await onGeaendert();
@@ -55,6 +88,7 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
function duplizierenStarten(o: Objekt) {
setDuplizierId(duplizierId === o.id ? null : o.id);
setNeuerPraefix("");
setNeuerCode("");
setNeuerName(`${o.name} (Kopie)`);
setNeuerStandortId(o.standort_id);
@@ -115,7 +149,19 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
</div>
<div className="field">
<label>Code (eindeutig)</label>
<input className="input" value={code} onChange={(e) => setCode(e.target.value)} />
<div className="row" style={{ flexWrap: "wrap" }}>
<input
className="input"
style={{ maxWidth: "6rem" }}
value={praefix}
onChange={(e) => setPraefix(e.target.value)}
placeholder="Präfix (RK, FZ…)"
/>
<button type="button" className="btn btn-secondary" onClick={codeVorschlagen}>
Code vorschlagen
</button>
<input className="input" value={code} onChange={(e) => setCode(e.target.value)} />
</div>
</div>
<div className="field">
<label>Name</label>
@@ -154,6 +200,16 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
)}
{duplizierId === o.id && (
<div className="row" style={{ marginTop: "0.5rem", flexWrap: "wrap" }}>
<input
className="input"
style={{ maxWidth: "6rem" }}
value={neuerPraefix}
onChange={(e) => setNeuerPraefix(e.target.value)}
placeholder="Präfix (RK, FZ…)"
/>
<button type="button" className="btn btn-secondary" onClick={neuerCodeVorschlagen}>
Code vorschlagen
</button>
<input
className="input"
value={neuerCode}