Merge branch 'qr_code' into web_ui

This commit is contained in:
Alexander Malzkuhn 2025-05-08 11:16:55 +02:00
commit 2dfef4da8c
4 changed files with 75 additions and 32 deletions

View File

@ -14,6 +14,7 @@ import os.path
import hashlib import hashlib
import calendar import calendar
import locale import locale
import segno
@ui.page('/admin') @ui.page('/admin')
def page_admin(): def page_admin():
@ -758,9 +759,15 @@ def page_admin():
api_link_column.clear() api_link_column.clear()
for i in app.urls: for i in app.urls:
link = ui.link(f'{i}/api/stamp/"API-Schlüssel"', f'{i}/api/stamp/{api_key_input.value}') with ui.row() as link_row:
link.tooltip("ACHTUNG: Klick auf den Link löst Stempelaktion aus!") link_string = f'{i}/api/stamp/{api_key_input.value}'
link.move(api_link_column) link = ui.link(f'{i}/api/stamp/"API-Schlüssel"', link_string).tooltip(("ACHTUNG: Klick auf den Link löst Stempelaktion aus!"))
qr = segno.make_qr(link_string).svg_data_uri()
with ui.image(qr).classes('w-1/3'):
with ui.tooltip().classes('bg-white border'):
ui.image(qr).classes('w-64')
link_row.move(api_link_column)
workhours_select.clear() workhours_select.clear()
workhour_list = list(current_user.workhours) workhour_list = list(current_user.workhours)
@ -808,6 +815,7 @@ def page_admin():
user_selection.clear() user_selection.clear()
user_selection.set_options(userlist) user_selection.set_options(userlist)
user_selection.value = current_user.username user_selection.value = current_user.username
user_selection_changed()
dialog.close() dialog.close()
ui.notify("Einstellungen gespeichert") ui.notify("Einstellungen gespeichert")
@ -927,32 +935,45 @@ def page_admin():
user_ui() user_ui()
with ui.column(): with ui.column():
with ui.card() as usersettingscard: @ui.refreshable
ui.markdown("**Benutzereinstellungen**") def usersettings_card():
with ui.grid(columns="auto 1fr") as usersettingsgrid: global usersettingscard
with ui.card() as usersettingscard:
ui.markdown("**Benutzereinstellungen**")
with ui.grid(columns="auto 1fr") as usersettingsgrid:
ui.markdown("Benutzername:") ui.markdown("Benutzername:")
username_input = ui.input() global username_input
ui.markdown("Voller Name:") username_input = ui.input()
fullname_input = ui.input() ui.markdown("Voller Name:")
ui.markdown("Passwort") global fullname_input
password_input = ui.input(password=True) fullname_input = ui.input()
password_input.value = "" ui.markdown("Passwort")
ui.markdown("API-Schlüssel:") global password_input
with ui.row(): password_input = ui.input(password=True)
api_key_input = ui.input().props('size=37') password_input.value = ""
def new_api_key(): ui.markdown("API-Schlüssel:")
api_key_input.value = hashlib.shake_256(bytes(f'{username_input.value}_{datetime.datetime.now().timestamp()}', 'utf-8')).hexdigest(20) with ui.row():
ui.button("Neu", on_click=new_api_key) global api_key_input
ui.markdown('Aufruf zum Stempeln:') api_key_input = ui.input().props('size=37')
with ui.column().classes('gap-0') as api_link_column: def new_api_key():
stamp_link = [ ] api_key_input.value = hashlib.shake_256(bytes(f'{username_input.value}_{datetime.datetime.now().timestamp()}', 'utf-8')).hexdigest(20)
for i in app.urls:
stamp_link.append(ui.link(f'{i}/api/stamp/"API-Schüssel"'))
with ui.grid(columns=2): ui.button("Neu", on_click=new_api_key).tooltip("Neuen API-Schlüssel erzeugen. Wird erst beim Klick auf Speichern übernommen und entsprechende Links und QR-Codes aktualisiert")
ui.button("Speichern", on_click=save_user_settings).tooltip("Klicken Sie hier um die Änderungen zu speichern.") ui.markdown('Aufruf zum Stempeln:')
ui.button("Löschen", on_click=del_user) global api_link_column
with ui.column().classes('gap-0') as api_link_column:
global stamp_link
stamp_link = [ ]
for i in app.urls:
stamp_link.append(ui.link(f'{i}/api/stamp/"API-Schüssel"'))
with ui.grid(columns=2):
ui.button("Speichern", on_click=save_user_settings).tooltip("Klicken Sie hier um die Änderungen zu speichern.")
ui.button("Löschen", on_click=del_user)
usersettings_card()
with ui.card() as photocard: with ui.card() as photocard:
ui.markdown('**Foto**') ui.markdown('**Foto**')

View File

@ -1,8 +1,12 @@
from nicegui import ui from nicegui import ui
import segno
test = ('Eintrag 1') string = ""
for i in range(1000):
string += str(i)
ui.markdown(test) qr_code = segno.make_qr(string).svg_data_uri()
ui.markdown('Nächstes Element') #qr_code.save("qr_code.png", scale=5, border=0)
ui.image(qr_code)
ui.run(language="de-DE", port=9000) ui.run(language="de-DE", port=9000)

View File

@ -1,7 +1,7 @@
{ {
"username": "testuser1", "username": "testuser1",
"fullname": "Pia Paulina", "fullname": "Pia Paulina",
"password": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "password": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"workhours": { "workhours": {
"2025-05-13": { "2025-05-13": {
"1": "4", "1": "4",
@ -34,5 +34,5 @@
"vacation": "30" "vacation": "30"
} }
}, },
"api_key": "de4403f629a30450b2df1aa619a1c06112035499" "api_key": "0d8b1baf9219fe568c0f0ea7c4244927e1c901da"
} }

View File

@ -0,0 +1,18 @@
{
"username": "testuser99",
"fullname": "testuser99",
"password": "37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f",
"api_key": "d0c28e4b8dff9685e774e6e2e6bcea6b746d34af",
"workhours": {
"2025-05-08": {
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"vacation": 0
}
}
}