Spaces:
Paused
Paused
Update web/pages/home.py
Browse files- web/pages/home.py +70 -58
web/pages/home.py
CHANGED
@@ -1,81 +1,93 @@
|
|
1 |
import streamlit as st
|
2 |
import pandas as pd
|
|
|
3 |
import plotly.express as px
|
|
|
|
|
4 |
|
5 |
def show_home_page():
|
6 |
"""
|
7 |
-
عرض الصفحة الرئيسية
|
8 |
"""
|
9 |
-
#
|
10 |
-
|
11 |
-
page_title="نظام تحليل المناقصات",
|
12 |
-
page_icon="📊",
|
13 |
-
layout="wide",
|
14 |
-
initial_sidebar_state="expanded"
|
15 |
-
)
|
16 |
-
|
17 |
-
# العنوان الرئيسي
|
18 |
-
st.title("نظام تحليل المناقصات مع سلاسل الإمداد والمحتوى المحلي")
|
19 |
-
st.markdown("---")
|
20 |
|
21 |
-
# عرض
|
22 |
-
|
|
|
23 |
|
24 |
with col1:
|
25 |
-
st.metric(
|
|
|
|
|
|
|
|
|
26 |
|
27 |
with col2:
|
28 |
-
st.metric(
|
|
|
|
|
|
|
|
|
29 |
|
30 |
with col3:
|
31 |
-
st.metric(
|
|
|
|
|
|
|
|
|
32 |
|
33 |
-
|
34 |
-
|
|
|
|
|
|
|
|
|
35 |
|
36 |
-
#
|
37 |
-
|
38 |
-
|
39 |
-
'
|
40 |
-
|
41 |
-
|
42 |
|
43 |
-
|
|
|
|
|
44 |
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
color_continuous_scale='Viridis',
|
52 |
-
title='توزيع المناقصات حسب القطاع والمحتوى المحلي'
|
53 |
)
|
54 |
-
|
55 |
st.plotly_chart(fig, use_container_width=True)
|
56 |
|
57 |
-
#
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
analysis_type = st.selectbox(
|
65 |
-
"نوع التحليل",
|
66 |
-
["تحليل المناقصات", "تحليل المحتوى المحلي", "تحليل سلاسل الإمداد"]
|
67 |
-
)
|
68 |
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
|
76 |
-
#
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
show_home_page()
|
|
|
1 |
import streamlit as st
|
2 |
import pandas as pd
|
3 |
+
import numpy as np
|
4 |
import plotly.express as px
|
5 |
+
import plotly.graph_objects as go
|
6 |
+
from datetime import datetime, timedelta
|
7 |
|
8 |
def show_home_page():
|
9 |
"""
|
10 |
+
عرض الصفحة الرئيسية مع لوحة المعلومات
|
11 |
"""
|
12 |
+
# بيانات توضيحية للمناقصات النشطة
|
13 |
+
active_tenders = create_sample_tenders_data()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
+
# عرض المؤشرات الرئيسية
|
16 |
+
st.subheader("المؤشرات الرئيسية")
|
17 |
+
col1, col2, col3, col4 = st.columns(4)
|
18 |
|
19 |
with col1:
|
20 |
+
st.metric(
|
21 |
+
label="المناقصات النشطة",
|
22 |
+
value=f"{len(active_tenders)}",
|
23 |
+
delta="3 ↑"
|
24 |
+
)
|
25 |
|
26 |
with col2:
|
27 |
+
st.metric(
|
28 |
+
label="متوسط المحتوى المحلي",
|
29 |
+
value="67.8%",
|
30 |
+
delta="2.5% ↑"
|
31 |
+
)
|
32 |
|
33 |
with col3:
|
34 |
+
st.metric(
|
35 |
+
label="العطاءات الفائزة",
|
36 |
+
value="12",
|
37 |
+
delta="2 ↑"
|
38 |
+
)
|
39 |
|
40 |
+
with col4:
|
41 |
+
st.metric(
|
42 |
+
label="قيمة المشاريع (مليون ريال)",
|
43 |
+
value="463.5",
|
44 |
+
delta="85.2 ↑"
|
45 |
+
)
|
46 |
|
47 |
+
# عرض المناقصات النشطة
|
48 |
+
st.subheader("المناقصات النشطة")
|
49 |
+
st.dataframe(
|
50 |
+
active_tenders[['رقم المناقصة', 'الجهة', 'اسم المشروع', 'القيمة التقديرية (مليون)', 'الموعد النهائي', 'حالة المناقصة']],
|
51 |
+
use_container_width=True
|
52 |
+
)
|
53 |
|
54 |
+
# توزيع المناقصات حسب القطاع
|
55 |
+
st.subheader("توزيع المناقصات حسب القطاع")
|
56 |
+
sectors_df = active_tenders.groupby('القطاع').size().reset_index(name='عدد المناقصات')
|
57 |
|
58 |
+
fig = px.pie(
|
59 |
+
sectors_df,
|
60 |
+
values='عدد المناقصات',
|
61 |
+
names='القطاع',
|
62 |
+
color_discrete_sequence=px.colors.qualitative.Bold,
|
63 |
+
title="توزيع المناقصات حسب القطاع"
|
|
|
|
|
64 |
)
|
65 |
+
fig.update_traces(textposition='inside', textinfo='percent+label')
|
66 |
st.plotly_chart(fig, use_container_width=True)
|
67 |
|
68 |
+
# المناقصات المقبلة
|
69 |
+
col1, col2 = st.columns(2)
|
70 |
+
|
71 |
+
with col1:
|
72 |
+
st.subheader("المناقصات المقبلة")
|
73 |
+
upcoming_df = active_tenders[active_tenders['الموعد النهائي'] > datetime.now().date()]
|
74 |
+
upcoming_df = upcoming_df.sort_values('الموعد النهائي')
|
|
|
|
|
|
|
|
|
75 |
|
76 |
+
for _, row in upcoming_df.head(5).iterrows():
|
77 |
+
with st.container():
|
78 |
+
st.markdown(f"""
|
79 |
+
**{row['اسم المشروع']}**
|
80 |
+
**الجهة:** {row['الجهة']}
|
81 |
+
**القيمة التقديرية:** {row['القيمة التقديرية (مليون)']} مليون ريال
|
82 |
+
**الموعد النهائي:** {row['الموعد النهائي'].strftime('%Y/%m/%d')}
|
83 |
+
""")
|
84 |
+
st.markdown("---")
|
85 |
+
|
86 |
+
with col2:
|
87 |
+
st.subheader("توقعات النجاح")
|
88 |
|
89 |
+
# بيانات توضيحية لتوقعات النجاح
|
90 |
+
prediction_data = {
|
91 |
+
'المشروع': [
|
92 |
+
'تطوير البنية التحتية في المنطقة الشرقية',
|
93 |
+
'إنشاء مبا
|
|