feat: 4-tier role concept, personal balance & cash register system, left off-canvas drawer navigation

This commit is contained in:
2026-09-22 09:05:14 +02:00
parent 0bdcbe7976
commit 896f1d7d08
8 changed files with 1350 additions and 257 deletions
+23 -3
View File
@@ -701,6 +701,7 @@
<tr>
<th>Name & E-Mail</th>
<th>Rolle</th>
<th style="text-align: right;">Guthaben</th>
<th>Aktionen</th>
</tr>
</thead>
@@ -712,20 +713,39 @@
<small class="text-muted">{{ member.email }}</small>
</td>
<td>
{% if member.role == 'admin' %}
<span class="badge-role admin">Admin</span>
{% if current_user.role == 'admin' and member.id != current_user.id %}
<form action="/admin/users/{{ member.id }}/role" method="POST" style="margin: 0;">
<select name="role" onchange="this.form.submit()" style="padding: 4px 8px; font-size: 0.8rem; border-radius: 6px; background: var(--bg-input); color: var(--text-main); border: 1px solid var(--border-color);">
<option value="user" {% if member.role == 'user' %}selected{% endif %}>👤 Mitarbeiter</option>
<option value="organizer" {% if member.role == 'organizer' %}selected{% endif %}>📋 Organisator</option>
<option value="admin" {% if member.role == 'admin' %}selected{% endif %}>👑 Admin</option>
</select>
</form>
{% else %}
<span class="badge-role">Mitarbeiter</span>
{% if member.role == 'admin' %}
<span class="badge-role admin">👑 Admin</span>
{% elif member.role == 'organizer' %}
<span class="badge-role organizer">📋 Organisator</span>
{% else %}
<span class="badge-role">👤 Mitarbeiter</span>
{% endif %}
{% endif %}
</td>
<td style="text-align: right; font-weight: 700;">
<a href="/kasse" style="text-decoration: none; color: {% if member.balance > 0 %}var(--success){% elif member.balance < 0 %}var(--danger){% else %}var(--text-muted){% endif %};">
{{ "%.2f"|format(member.balance) }} €
</a>
</td>
<td>
<div style="display: flex; gap: 6px;">
{% if current_user.role == 'admin' %}
<button type="button" class="btn-copy-small" onclick="openResetPassword('{{ member.id }}', '{{ member.first_name|escape }} {{ member.last_name|escape }}')">🔑 Passwort</button>
{% if member.id != current_user.id %}
<form action="/admin/users/{{ member.id }}/delete" method="POST" style="margin: 0;" onsubmit="return confirm('Möchtest du {{ member.first_name }} {{ member.last_name }} wirklich unwiderruflich löschen?');">
<button type="submit" class="btn-revoke-small" title="Benutzer löschen">🗑️</button>
</form>
{% endif %}
{% endif %}
</div>
</td>
</tr>