fix: einheitliches Input-Styling (CSS) + Neuen-Benutzer-Formular als aufklappbarer '+'-Button

This commit is contained in:
mscadm 2026-07-13 15:52:18 +00:00
parent 8227eb5110
commit fc08649626
1 changed files with 14 additions and 8 deletions

22
app.py
View File

@ -163,10 +163,12 @@ table.tickets tr.row:hover{background:var(--panel2)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px} .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.svc-card{display:flex;justify-content:space-between;align-items:flex-start} .svc-card{display:flex;justify-content:space-between;align-items:flex-start}
.svc-card .badge{padding:2px 9px;border-radius:99px;font-size:11px;background:#1a4a35;color:var(--ok)} .svc-card .badge{padding:2px 9px;border-radius:99px;font-size:11px;background:#1a4a35;color:var(--ok)}
input[type=text],input[type=email],input[type=password],input[type=number],textarea,select{ input,textarea,select{
background:var(--bg);border:1px solid var(--border);border-radius:6px; background:var(--bg);border:1px solid var(--border);border-radius:6px;
color:var(--text);padding:8px 10px;font-size:13px;width:100%} color:var(--text);padding:8px 10px;font-size:13px;width:100%}
textarea{min-height:70px;font-family:inherit} textarea{min-height:70px;font-family:inherit}
details > summary{list-style:none;cursor:pointer}
details > summary::-webkit-details-marker{display:none}
.formrow{margin-bottom:10px} .formrow{margin-bottom:10px}
.formrow label{display:block;font-size:12px;color:var(--sub);margin-bottom:4px} .formrow label{display:block;font-size:12px;color:var(--sub);margin-bottom:4px}
#detail-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;z-index:40} #detail-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;z-index:40}
@ -834,7 +836,10 @@ def _users_body(tenant_id, notice="", form_vals=None):
<th>E-Mail</th><th>Name</th><th>Rolle</th><th>Status</th><th>Telefon</th><th>Quelle</th><th>Letzte Anmeldung</th><th>Aktionen</th> <th>E-Mail</th><th>Name</th><th>Rolle</th><th>Status</th><th>Telefon</th><th>Quelle</th><th>Letzte Anmeldung</th><th>Aktionen</th>
</tr></thead><tbody>%s</tbody></table>""" % ("".join(rows) or "<tr><td colspan='8' class='sz'>Keine Benutzer.</td></tr>") </tr></thead><tbody>%s</tbody></table>""" % ("".join(rows) or "<tr><td colspan='8' class='sz'>Keine Benutzer.</td></tr>")
add_form = """<div class="panel"><h3 style="margin-top:0">Neuen Benutzer anlegen</h3> open_attr = " open" if (notice or fv) else ""
add_form = """<details%s style="margin-top:16px">
<summary class="btn" style="width:auto;display:inline-block">+ Neuen Benutzer</summary>
<div class="panel" style="margin-top:10px"><h3 style="margin-top:0">Neuen Benutzer anlegen</h3>
<div class="sz" style="margin-bottom:10px">Manuelle Verwaltung. Eine AD/LDAP-Anbindung ist als naechste Ausbaustufe vorgesehen (Spalte "Quelle" zeigt dann "ldap" statt "local").</div> <div class="sz" style="margin-bottom:10px">Manuelle Verwaltung. Eine AD/LDAP-Anbindung ist als naechste Ausbaustufe vorgesehen (Spalte "Quelle" zeigt dann "ldap" statt "local").</div>
<form method="post" action="/admin/users"> <form method="post" action="/admin/users">
<div class="grid-2"> <div class="grid-2">
@ -848,16 +853,17 @@ def _users_body(tenant_id, notice="", form_vals=None):
<div class="hint">Mindestens 10 Zeichen. Der Benutzer sollte das Passwort nach der ersten Anmeldung selbst aendern.</div> <div class="hint">Mindestens 10 Zeichen. Der Benutzer sollte das Passwort nach der ersten Anmeldung selbst aendern.</div>
<h2 class="section-title">Details (optional)</h2> <h2 class="section-title">Details (optional)</h2>
<div class="grid-2"> <div class="grid-2">
<div class="formrow"><label>Vorname</label><input name="vorname" value="%s"></div> <div class="formrow"><label>Vorname</label><input type="text" name="vorname" value="%s"></div>
<div class="formrow"><label>Nachname</label><input name="nachname" value="%s"></div> <div class="formrow"><label>Nachname</label><input type="text" name="nachname" value="%s"></div>
</div> </div>
<div class="grid-2"> <div class="grid-2">
<div class="formrow"><label>Telefon</label><input name="telefon" value="%s"></div> <div class="formrow"><label>Telefon</label><input type="text" name="telefon" value="%s"></div>
<div class="formrow"><label>Abteilung</label><input name="abteilung" value="%s"></div> <div class="formrow"><label>Abteilung</label><input type="text" name="abteilung" value="%s"></div>
</div> </div>
<div class="formrow"><label>Adresse</label><input name="adresse" value="%s"></div> <div class="formrow"><label>Adresse</label><input type="text" name="adresse" value="%s"></div>
<button class="btn" type="submit">Anlegen</button> <button class="btn" type="submit">Anlegen</button>
</form></div>""" % ( </form></div></details>""" % (
open_attr,
html.escape(fv.get("email", "")), html.escape(fv.get("email", "")),
"selected" if fv.get("role") == "agent" or not fv.get("role") else "", "selected" if fv.get("role") == "agent" or not fv.get("role") else "",
"selected" if fv.get("role") == "admin" else "", "selected" if fv.get("role") == "admin" else "",