ab74164608
Logout-Button rechts in der Tab-Zeile ergänzt. Die Bestätigungsmeldung nach dem Löschen eines Users blieb bisher beim erneuten Öffnen des User-Tabs stehen; sie wird jetzt beim (Wieder-)Betreten des Tabs zurückgesetzt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
118 lines
3.9 KiB
Plaintext
118 lines
3.9 KiB
Plaintext
doctype html
|
|
html(lang="de")
|
|
head
|
|
meta(charset="utf-8")
|
|
meta(name="viewport", content="width=device-width, initial-scale=1")
|
|
title ESP-ID zu Sensornummer
|
|
link(rel="stylesheet", href="/styles.css")
|
|
body
|
|
h1 ESP-ID → Sensornummer
|
|
// Tab Navigation
|
|
div.tabs
|
|
button.tab-btn#tabInput.active(type="button" onclick="showTab('input')") Eingabe
|
|
button.tab-btn#tabList(type="button" onclick="showTab('list')") Liste
|
|
button.tab-btn#tabProfile(type="button" onclick="showTab('profile')") Profil
|
|
if isAdmin
|
|
button.tab-btn#tabUser(type="button" onclick="showTab('user')") User
|
|
a#logoutBtn(href="/logout") Logout
|
|
|
|
// Eingabe-Tab
|
|
div#tabInputContent.tab-content
|
|
div.card
|
|
form#entryForm
|
|
label(for="sensorNumber") Sensornummer:
|
|
input#sensorNumber(type="text" placeholder="Nur Zahlen erlaubt")
|
|
|
|
label(for="espId") ESP-ID:
|
|
input#espId(type="text")
|
|
|
|
label(for="name") Bezeichnung:
|
|
input#name(type="text")
|
|
|
|
label(for="description") Beschreibung:
|
|
textarea#description
|
|
|
|
label(for="address") Anschrift:
|
|
input#address(type="text" placeholder="Wird automatisch ausgefüllt" readonly disabled)
|
|
|
|
.twobuttons
|
|
button#saveBtn(type="button") Speichern
|
|
button#cancelBtn(type="button") Abbrechen
|
|
div#result
|
|
#version Version: #{version} vom #{vdate}
|
|
|
|
// Listen-Tab
|
|
div#tabListContent.tab-content(style="display:none")
|
|
div.controls
|
|
button#refreshBtn Aktualisieren
|
|
| Seite:
|
|
input#page(value="1")
|
|
| Limit:
|
|
input#limit(value="50")
|
|
span#gzahl
|
|
|
|
table#entriesTable
|
|
colgroup
|
|
col.col-sensornumber
|
|
col.col-espid
|
|
col.col-bezeichnung
|
|
col.col-beschreibung
|
|
col.col-date
|
|
col.col-aktionen
|
|
thead
|
|
tr
|
|
th(id="thSensorNr" data-sort="sensorNr" style="cursor:pointer") SensorNr <span id="sortArrowSensorNr">↑</span>
|
|
th(id="thEspId" data-sort="espId" style="cursor:pointer") ESP-ID <span id="sortArrowEspId">↑</span>
|
|
th Bezeichnung
|
|
th Beschreibung
|
|
th(id="thDate" data-sort="date" style="cursor:pointer") Datum <span id="sortArrowDate">↑</span>
|
|
th Aktionen
|
|
tbody
|
|
|
|
// Profil-Tab (für alle eingeloggten User)
|
|
div#tabProfileContent.tab-content(style="display:none")
|
|
div.card
|
|
h2 Passwort ändern
|
|
form#profileForm
|
|
label(for="currentPassword") Aktuelles Passwort:
|
|
input#currentPassword(type="password" required)
|
|
label(for="newPassword") Neues Passwort:
|
|
input#newPassword(type="password" required)
|
|
label(for="newPasswordRepeat") Neues Passwort (Wiederholung):
|
|
input#newPasswordRepeat(type="password" required)
|
|
.twobuttons
|
|
button#profileSaveBtn(type="button") Ändern
|
|
div#profileResult
|
|
#version Version: #{version} vom #{vdate}
|
|
|
|
// User-Tab (nur für Admins)
|
|
if isAdmin
|
|
div#tabUserContent.tab-content(style="display:none")
|
|
div.card
|
|
h2 Neuen User anlegen
|
|
form#userForm
|
|
label(for="username") Benutzername:
|
|
input#username(type="text" required)
|
|
label(for="password") Passwort:
|
|
input#password(type="password" required)
|
|
label(for="role") Rolle:
|
|
select#role
|
|
option(value="user") User
|
|
option(value="admin") Admin
|
|
.twobuttons
|
|
button#userSaveBtn(type="button") Anlegen
|
|
button#userCancelBtn(type="button") Abbrechen
|
|
div#userResult
|
|
div.card
|
|
h2 Angemeldete User
|
|
table#usersTable
|
|
thead
|
|
tr
|
|
th Email
|
|
th Rolle
|
|
th Aktionen
|
|
tbody
|
|
div#usersResult
|
|
#version Version: #{version} vom #{vdate}
|
|
|
|
script(type="module" src="/global.js") |