""" مكون الشريط الجانبي لنظام واهبي لتحليل العقود والمناقصات Sidebar component for WAHBI Tender Analysis System """ import streamlit as st import os from pathlib import Path import streamlit_option_menu as option_menu import json def get_user_info(): """ استرجاع معلومات المستخدم الحالي (يُستخدم كمثال بسيط) """ # في بيئة الإنتاج، هذه المعلومات يجب أن تأتي من نظام المصادقة return { "name": "محمد أحمد", "role": "محلل عقود", "image": None } def render_sidebar(): """ عرض الشريط الجانبي الرئيسي للتطبيق """ with st.sidebar: # عرض معلومات المستخدم user = get_user_info() # مربع معلومات المستخدم st.markdown(f"""
{user["name"][0] if user["name"] else "م"}

{user["name"]}

{user["role"]}

""", unsafe_allow_html=True) # القائمة الرئيسية باستخدام كومبوننت الشريط الجانبي selected = option_menu.option_menu( menu_title="الوصول السريع", options=[ "الرئيسية", "تحليل العقود", "حاسبة التكاليف", "إدارة المشاريع", "الخريطة التفاعلية", "المساعد الذكي", "التقارير", "الإعدادات" ], icons=[ "house-fill", "file-earmark-text-fill", "calculator-fill", "clipboard2-data-fill", "geo-alt-fill", "robot", "bar-chart-fill", "gear-fill" ], menu_icon="list", default_index=0, styles={ "container": {"padding": "0!important", "background-color": "transparent", "direction": "rtl"}, "icon": {"color": "#1E88E5", "font-size": "1rem", "float": "right", "margin-left": "10px"}, "nav-link": { "font-size": "0.9rem", "text-align": "right", "direction": "rtl", "--hover-color": "#E3F2FD", "margin-bottom": "0.2rem", "padding-right": "15px", }, "nav-link-selected": {"background-color": "#1E88E5", "color": "white", "text-align": "right"}, } ) # تخزين القيمة المحددة في session_state st.session_state["sidebar_selected"] = selected # إظهار حالة الاتصال بقاعدة البيانات وحالة النظام st.markdown("""

حالة النظام

قاعدة البيانات متصلة
واجهة برمجة التطبيقات
الذكاء الاصطناعي
""", unsafe_allow_html=True) # معلومات النظام وعنوان المشروع with st.expander("حول النظام", expanded=False): st.markdown("""

نظام واهبي للذكاء الاصطناعي - إصدار 2.0

تحليل العقود والمناقصات

© 2025 جميع الحقوق محفوظة

""", unsafe_allow_html=True) def get_sidebar_selection(): """ الحصول على العنصر المحدد في القائمة الجانبية """ return st.session_state.get("sidebar_selected", "الرئيسية") def render_module_sidebar(module_name, options=[]): """ عرض شريط جانبي مخصص للوحدة المعلمات: module_name (str): اسم الوحدة options (list): قائمة بالخيارات المتاحة في الوحدة """ with st.sidebar: # عنوان الوحدة st.markdown(f"""

{module_name}

""", unsafe_allow_html=True) # إذا تم توفير خيارات للوحدة if options: selected = option_menu.option_menu( menu_title=None, options=options, menu_icon=None, default_index=0, styles={ "container": {"padding": "0!important", "background-color": "transparent", "direction": "rtl"}, "icon": {"color": "#1E88E5", "font-size": "1rem", "float": "right", "margin-left": "10px"}, "nav-link": { "font-size": "0.9rem", "text-align": "right", "direction": "rtl", "--hover-color": "#E3F2FD", "margin-bottom": "0.2rem", "padding-right": "15px", "padding": "0.5rem" }, "nav-link-selected": {"background-color": "#1E88E5", "color": "white", "text-align": "right"}, } ) # تخزين الخيار المحدد st.session_state[f"{module_name}_selected"] = selected return selected # زر للعودة إلى القائمة الرئيسية if st.button("العودة للقائمة الرئيسية", key=f"back_btn_{module_name}"): st.session_state["sidebar_selected"] = "الرئيسية" st.rerun() def get_module_selection(module_name): """ الحصول على العنصر المحدد في قائمة الوحدة المعلمات: module_name (str): اسم الوحدة """ return st.session_state.get(f"{module_name}_selected", None)