Modify the order of the sidebar, remove tabs from users

This commit is contained in:
hansi
2025-12-16 22:09:55 +01:00
parent 0143d9579b
commit 9435399096
6 changed files with 81 additions and 72 deletions

View File

@@ -1,3 +1,10 @@
[client] [client]
showSidebarNavigation = false showSidebarNavigation = false
toolbarMode = "minimal" toolbarMode = "minimal"
# toolbarMode = "auto"
[theme]
# primaryColor = "blue"
# backgroundColor = "black"
# secondaryBackgroundColor = "blue"
# borderColor = "blue"

Binary file not shown.

View File

@@ -97,7 +97,9 @@ def get_sidebar(role_text: str, username: str):
d.dash_id, d.dash_id,
d.dash_text, d.dash_text,
d.page_file, d.page_file,
d.dash_type d.dash_type,
d.order_no as dash_order,
g.order_no as group_order
from from
groups g groups g
left join dashboards d left join dashboards d
@@ -105,6 +107,7 @@ def get_sidebar(role_text: str, username: str):
where where
g.active = 1 g.active = 1
and d.active = 1 and d.active = 1
order by g.order_no, d.order_no
""" """
else: else:
sql = """ sql = """
@@ -114,7 +117,9 @@ def get_sidebar(role_text: str, username: str):
p.dash_id, p.dash_id,
d.dash_text, d.dash_text,
d.page_file, d.page_file,
d.dash_type d.dash_type,
d.order_no as dash_order,
g.order_no as group_order
FROM FROM
users u users u
left join permissions p left join permissions p
@@ -129,13 +134,10 @@ def get_sidebar(role_text: str, username: str):
and d.active = 1 and d.active = 1
and p.active = 1 and p.active = 1
and u.username = ? and u.username = ?
order by order by g.order_no, d.order_no
g.order_no,
d.order_no
""" """
params = (username,) if "?" in sql else None params = (username,) if "?" in sql else None
df = get_list(sql, params) df = get_list(sql, params)
return df return df
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------

0
app/pages/roles.py Normal file
View File

View File

@@ -350,86 +350,86 @@ def user():
if "selected_user_id" not in st.session_state: if "selected_user_id" not in st.session_state:
st.session_state.selected_user_id = None st.session_state.selected_user_id = None
tab_user, tab_role, tab_permission = st.tabs(["Benutzer", "Rollen", "Berechtigungen"]) # tab_user, tab_role, tab_permission = st.tabs(["Benutzer", "Rollen", "Berechtigungen"])
#-------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------
# Benutzerverwaltung # Benutzerverwaltung
#-------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------
with tab_user: # with tab_user:
df = get_list(""" df = get_list("""
select select
u.id, u.id,
u.username, u.username,
u.firstname, u.firstname,
u.lastname, u.lastname,
u.role_id || ' | ' || r.role_text as role, u.role_id || ' | ' || r.role_text as role,
u.new_pwd, u.new_pwd,
u.active u.active
from from
users u users u
left join roles r left join roles r
on u.role_id = r.role_id on u.role_id = r.role_id
""") """)
col_find_user, col_create_user, col_modify_user, col_delete_user = st.columns([3,2,2,2], vertical_alignment="bottom") col_find_user, col_create_user, col_modify_user, col_delete_user = st.columns([3,2,2,2], vertical_alignment="bottom")
with col_find_user: with col_find_user:
txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:")
with col_create_user: with col_create_user:
if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"): if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"):
dialog_create_user() dialog_create_user()
if "save_msg" in st.session_state: if "save_msg" in st.session_state:
st.toast(st.session_state.save_msg) st.toast(st.session_state.save_msg)
del st.session_state.save_msg del st.session_state.save_msg
with col_modify_user: with col_modify_user:
if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"):
if not st.session_state.selected_user_id is None: if not st.session_state.selected_user_id is None:
dialog_modify_user(st.session_state.selected_user_id) dialog_modify_user(st.session_state.selected_user_id)
else: else:
st.toast("❌ Bitte erst eine Zeile auswählen") st.toast("❌ Bitte erst eine Zeile auswählen")
if "save_msg" in st.session_state: if "save_msg" in st.session_state:
st.toast(st.session_state.save_msg) st.toast(st.session_state.save_msg)
del st.session_state.save_msg del st.session_state.save_msg
with col_delete_user: with col_delete_user:
if st.button(label="Benutzer löschen", use_container_width=True, icon=":material/person_remove:"): if st.button(label="Benutzer löschen", use_container_width=True, icon=":material/person_remove:"):
if not st.session_state.selected_user_id is None: if not st.session_state.selected_user_id is None:
dialog_delete_user(st.session_state.selected_user_id) dialog_delete_user(st.session_state.selected_user_id)
else: else:
st.toast("❌ Bitte erst eine Zeile auswählen") st.toast("❌ Bitte erst eine Zeile auswählen")
if "delete_msg" in st.session_state: if "delete_msg" in st.session_state:
st.toast(st.session_state.delete_msg) st.toast(st.session_state.delete_msg)
del st.session_state.delete_msg del st.session_state.delete_msg
if txt_search.strip(): if txt_search.strip():
txt_search_norm = txt_search.strip().lower() txt_search_norm = txt_search.strip().lower()
mask = ( mask = (
df["username"].fillna("").str.lower().str.contains(txt_search_norm) df["username"].fillna("").str.lower().str.contains(txt_search_norm)
| df["firstname"].fillna("").str.lower().str.contains(txt_search_norm) | df["firstname"].fillna("").str.lower().str.contains(txt_search_norm)
| df["lastname"].fillna("").str.lower().str.contains(txt_search_norm) | df["lastname"].fillna("").str.lower().str.contains(txt_search_norm)
) )
df_view = df.loc[mask].copy() df_view = df.loc[mask].copy()
else: else:
df_view = df.copy() df_view = df.copy()
event = st.dataframe(df_view,key="data", on_select="rerun", selection_mode="single-row") event = st.dataframe(df_view,key="data", on_select="rerun", selection_mode="single-row")
rows = event.selection.rows rows = event.selection.rows
if rows: if rows:
row_idx = rows[0] row_idx = rows[0]
st.session_state.selected_user_id = int(df_view.iloc[row_idx]["id"]) st.session_state.selected_user_id = int(df_view.iloc[row_idx]["id"])
else: else:
st.session_state.selected_user_id = None st.session_state.selected_user_id = None

View File

@@ -52,9 +52,9 @@ def build_sidebar():
st.info("Keine Einträge zum Suchbegriff gefunden.") st.info("Keine Einträge zum Suchbegriff gefunden.")
return return
# --- Gruppiert durchlaufen --- # --- Gruppiert durchlaufen ---
for group_text, df_group in df_view.groupby("group_text"): # df_view = df_view.sort_values(["group_order", "dash_order"]) # vorher noch sortieren
for group_text, df_group in df_view.groupby("group_text", sort=False): # und beim gruppieren nicht nach der Gruppe sortieren!
# Expander offen, wenn: # Expander offen, wenn:
# - aktuelle Seite in dieser Gruppe liegt # - aktuelle Seite in dieser Gruppe liegt
group_open = any( group_open = any(