From 943539909610979ff777ecf0d3c28e81ea560fdf Mon Sep 17 00:00:00 2001 From: hansi Date: Tue, 16 Dec 2025 22:09:55 +0100 Subject: [PATCH] Modify the order of the sidebar, remove tabs from users --- app/.streamlit/config.toml | 7 +++ app/app_db/app.db | Bin 69632 -> 69632 bytes app/auth.py | 16 ++--- app/pages/roles.py | 0 app/pages/user.py | 126 ++++++++++++++++++------------------- app/ui/sidebar.py | 4 +- 6 files changed, 81 insertions(+), 72 deletions(-) create mode 100644 app/pages/roles.py diff --git a/app/.streamlit/config.toml b/app/.streamlit/config.toml index 658c3f9..4e85340 100644 --- a/app/.streamlit/config.toml +++ b/app/.streamlit/config.toml @@ -1,3 +1,10 @@ [client] showSidebarNavigation = false toolbarMode = "minimal" +# toolbarMode = "auto" + +[theme] +# primaryColor = "blue" +# backgroundColor = "black" +# secondaryBackgroundColor = "blue" +# borderColor = "blue" diff --git a/app/app_db/app.db b/app/app_db/app.db index 6dec818bb610622bd8106abb86d0f08ba1e221fc..6d167867feaa5f97308f2eb189637b5db24e277b 100644 GIT binary patch delta 303 zcmZozz|ydQWr8&0go!fFtP>dYdVg+AnXAvuz`(%D+rh%m!C$kP$Do6kk#qA@+vkjv z8|)icfN~6*9QYj=V>b&li19NYVz8L3*>57C&&tOr$-u~I3{t=-&M-NqUxu|PKPR<# zb6rpstNGgat@*ZWR&*%f)6-$)5L9OX>SQuCaLvpsE=kSF zDa}hy%`-AEGSxLS)HOCxFto5TF|{%_Vtzh(%Q`J%{w@Yxh!#V_I)Iu$`UKa15akED zg8w8V|1bW}{BQW5@}K0t&VOOEV8TXzSq^44Wlc|AY zN^WLeW^qYTVo7HHo&N#@|1bW}{BQW5^55gX&VOOEV8Skb a5jJK)Msovp5M^e-2BJ(2Hb2=f6954ISw7SN diff --git a/app/auth.py b/app/auth.py index bb2ec7f..6b7d1c1 100644 --- a/app/auth.py +++ b/app/auth.py @@ -97,14 +97,17 @@ def get_sidebar(role_text: str, username: str): d.dash_id, d.dash_text, d.page_file, - d.dash_type + d.dash_type, + d.order_no as dash_order, + g.order_no as group_order from groups g left join dashboards d on g.group_id = d.group_id where g.active = 1 - and d.active = 1 + and d.active = 1 + order by g.order_no, d.order_no """ else: sql = """ @@ -114,7 +117,9 @@ def get_sidebar(role_text: str, username: str): p.dash_id, d.dash_text, d.page_file, - d.dash_type + d.dash_type, + d.order_no as dash_order, + g.order_no as group_order FROM users u left join permissions p @@ -129,13 +134,10 @@ def get_sidebar(role_text: str, username: str): and d.active = 1 and p.active = 1 and u.username = ? - order by - g.order_no, - d.order_no + order by g.order_no, d.order_no """ params = (username,) if "?" in sql else None df = get_list(sql, params) - return df # --------------------------------------------------------------------------- diff --git a/app/pages/roles.py b/app/pages/roles.py new file mode 100644 index 0000000..e69de29 diff --git a/app/pages/user.py b/app/pages/user.py index 675dc90..b7fd78a 100644 --- a/app/pages/user.py +++ b/app/pages/user.py @@ -350,86 +350,86 @@ def user(): if "selected_user_id" not in st.session_state: 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 #-------------------------------------------------------------------------------------------------- - with tab_user: + # with tab_user: - df = get_list(""" - select - u.id, - u.username, - u.firstname, - u.lastname, - u.role_id || ' | ' || r.role_text as role, - u.new_pwd, - u.active - from - users u - left join roles r - on u.role_id = r.role_id - """) + df = get_list(""" + select + u.id, + u.username, + u.firstname, + u.lastname, + u.role_id || ' | ' || r.role_text as role, + u.new_pwd, + u.active + from + users u + left join roles r + 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: - txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") - - with col_create_user: - if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"): - dialog_create_user() - if "save_msg" in st.session_state: - st.toast(st.session_state.save_msg) - del st.session_state.save_msg - - with col_modify_user: - if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): - if not st.session_state.selected_user_id is None: - dialog_modify_user(st.session_state.selected_user_id) - else: - st.toast("❌ Bitte erst eine Zeile auswählen") - if "save_msg" in st.session_state: - st.toast(st.session_state.save_msg) - del st.session_state.save_msg + with col_find_user: + txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") + + with col_create_user: + if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"): + dialog_create_user() + if "save_msg" in st.session_state: + st.toast(st.session_state.save_msg) + del st.session_state.save_msg + + with col_modify_user: + if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): + if not st.session_state.selected_user_id is None: + dialog_modify_user(st.session_state.selected_user_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") + if "save_msg" in st.session_state: + st.toast(st.session_state.save_msg) + del st.session_state.save_msg - with col_delete_user: - 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: - dialog_delete_user(st.session_state.selected_user_id) - else: - st.toast("❌ Bitte erst eine Zeile auswählen") - if "delete_msg" in st.session_state: - st.toast(st.session_state.delete_msg) - del st.session_state.delete_msg + with col_delete_user: + 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: + dialog_delete_user(st.session_state.selected_user_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") + if "delete_msg" in st.session_state: + st.toast(st.session_state.delete_msg) + del st.session_state.delete_msg - if txt_search.strip(): - txt_search_norm = txt_search.strip().lower() - mask = ( - df["username"].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_view = df.loc[mask].copy() - else: - df_view = df.copy() - - event = st.dataframe(df_view,key="data", on_select="rerun", selection_mode="single-row") - rows = event.selection.rows - if rows: - row_idx = rows[0] - st.session_state.selected_user_id = int(df_view.iloc[row_idx]["id"]) - else: - st.session_state.selected_user_id = None + if txt_search.strip(): + txt_search_norm = txt_search.strip().lower() + mask = ( + df["username"].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_view = df.loc[mask].copy() + else: + df_view = df.copy() + + event = st.dataframe(df_view,key="data", on_select="rerun", selection_mode="single-row") + rows = event.selection.rows + if rows: + row_idx = rows[0] + st.session_state.selected_user_id = int(df_view.iloc[row_idx]["id"]) + else: + st.session_state.selected_user_id = None diff --git a/app/ui/sidebar.py b/app/ui/sidebar.py index abee2cb..c841314 100644 --- a/app/ui/sidebar.py +++ b/app/ui/sidebar.py @@ -51,10 +51,10 @@ def build_sidebar(): if df_view.empty: st.info("Keine Einträge zum Suchbegriff gefunden.") return - # --- 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: # - aktuelle Seite in dieser Gruppe liegt group_open = any(