feat(admin): Akte-Anzeige-Felder visuell gruppiert + Hinweistext
CI / backend-tests (push) Successful in 3m57s
CI / frontend-build (push) Successful in 22s

Objekttyp-Art/Zugfahrzeug/Ressourcenbuchung/Wartung/Zählerstand standen
bisher lose in derselben Reihe wie die Pflichtfelder (Bereich/Kategorie/
Name) - eigener umrandeter Block "Akte-Anzeige" mit Hinweis, dass die
Einstellung für alle Objekte dieses Typs gilt, nicht nur eins.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDMvneg6wKfXdXvTYNd3dN
This commit is contained in:
patrickandClaude Sonnet 5 committed 2026-09-14 22:59:46 +02:00
1 parent 20d4903d9c
commit 1fd5649282
2 files changed
+194 -73

No files matched your search

+104
View File
@@ -15851,3 +15851,107 @@ Keine Commits in dieser Session.
- frontend/src/pages/admin/ObjekttypSection.tsx | 19 ++++++++++++++++++
---
## 2026-09-14 11:54 – 11:56 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** frontend
### Commits
- 20d4903 feat(admin): Objekttyp-Presets beim Anlegen statt drei Einzel-Regler
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 11:56 – 11:57 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 11:58 – 11:58 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 11:59 – 11:59 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 12:03 – 12:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 12:24 – 12:24 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 13:08 – 13:08 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
## 2026-09-14 22:56 – 22:58 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
- frontend/DEVLOG.md | 42 +++++++++++++++++++++++++++++++++
- frontend/src/pages/admin/ObjekttypSection.tsx | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
---
+90 -73
View File
@@ -246,83 +246,100 @@ export function ObjekttypSection({
<input {...feldProps} className="input" value={name} onChange={(e) => setName(e.target.value)} />
)}
</FormField>
<FormField label="Objekttyp-Art">
{(feldProps) => (
<select
{...feldProps}
className="input"
value={preset}
onChange={(e) => presetAnwenden(e.target.value as ObjekttypPreset)}
>
{Object.entries(PRESET_LABEL).map(([wert, label]) => (
<option key={wert} value={wert}>
{label}
</option>
))}
</select>
)}
</FormField>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={istZugfahrzeug}
onChange={(e) => {
setIstZugfahrzeug(e.target.checked);
setPreset("benutzerdefiniert");
}}
/>
Zugfahrzeug (koppelbar)
</label>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={ressourcenbuchungAktiv}
onChange={(e) => {
setRessourcenbuchungAktiv(e.target.checked);
setPreset("benutzerdefiniert");
}}
/>
Ressourcenbuchung in der Akte anzeigen
</label>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={wartungAktiv}
onChange={(e) => {
setWartungAktiv(e.target.checked);
setPreset("benutzerdefiniert");
}}
/>
Wartung in der Akte anzeigen
</label>
<FormField label="Zählerstand in der Akte">
{(feldProps) => (
<select
{...feldProps}
className="input"
value={zaehlerTyp}
</div>
{/* Nutzer-Vorschlag 2026-09-14: eigener, visuell abgesetzter Block
statt lose in derselben Reihe wie die Pflichtfelder - macht
deutlicher, dass diese Einstellungen den ganzen Objekttyp
betreffen (nicht ein einzelnes Objekt). */}
<div
className="stack"
style={{ marginTop: "1rem", padding: "0.75rem", border: "1px solid var(--color-border)", borderRadius: "0.5rem" }}
>
<strong style={{ fontSize: "0.9rem" }}>Akte-Anzeige</strong>
<p className="text-muted" style={{ fontSize: "0.85rem", marginTop: 0, marginBottom: "0.5rem" }}>
Gilt für alle Objekte dieses Typs, nicht nur ein einzelnes Objekt.
</p>
<div className="row" style={{ flexWrap: "wrap", alignItems: "flex-start" }}>
<FormField label="Objekttyp-Art">
{(feldProps) => (
<select
{...feldProps}
className="input"
value={preset}
onChange={(e) => presetAnwenden(e.target.value as ObjekttypPreset)}
>
{Object.entries(PRESET_LABEL).map(([wert, label]) => (
<option key={wert} value={wert}>
{label}
</option>
))}
</select>
)}
</FormField>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={istZugfahrzeug}
onChange={(e) => {
setZaehlerTyp(e.target.value as ZaehlerTyp);
setIstZugfahrzeug(e.target.checked);
setPreset("benutzerdefiniert");
}}
>
{Object.entries(ZAEHLER_TYP_LABEL).map(([wert, label]) => (
<option key={wert} value={wert}>
{label}
</option>
))}
</select>
)}
</FormField>
<button
className="btn btn-primary"
style={{ marginTop: "1.5rem" }}
onClick={anlegen}
disabled={!name || wirdAngelegt}
>
Anlegen
</button>
/>
Zugfahrzeug (koppelbar)
</label>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={ressourcenbuchungAktiv}
onChange={(e) => {
setRessourcenbuchungAktiv(e.target.checked);
setPreset("benutzerdefiniert");
}}
/>
Ressourcenbuchung in der Akte anzeigen
</label>
<label className="row" style={{ alignItems: "center", gap: "0.4rem", marginTop: "1.5rem" }}>
<input
type="checkbox"
checked={wartungAktiv}
onChange={(e) => {
setWartungAktiv(e.target.checked);
setPreset("benutzerdefiniert");
}}
/>
Wartung in der Akte anzeigen
</label>
<FormField label="Zählerstand in der Akte">
{(feldProps) => (
<select
{...feldProps}
className="input"
value={zaehlerTyp}
onChange={(e) => {
setZaehlerTyp(e.target.value as ZaehlerTyp);
setPreset("benutzerdefiniert");
}}
>
{Object.entries(ZAEHLER_TYP_LABEL).map(([wert, label]) => (
<option key={wert} value={wert}>
{label}
</option>
))}
</select>
)}
</FormField>
</div>
</div>
<button
className="btn btn-primary"
style={{ marginTop: "1rem" }}
onClick={anlegen}
disabled={!name || wirdAngelegt}
>
Anlegen
</button>
</div>
)}
{objekttypen.length > 0 && (