-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.py
More file actions
112 lines (89 loc) ยท 4.05 KB
/
app.py
File metadata and controls
112 lines (89 loc) ยท 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""
EconKit - ่ฎก้็ปๆตๅญฆๅจ็บฟๅๆๅทฅๅ
ท
Streamlit ไธปๅ
ฅๅฃ (v2.1 - 2026-03-25)
่ฟ่กๆนๅผ๏ผ
cd /Users/jacky/.openclaw/workspace/econkit
streamlit run app.py
"""
from __future__ import annotations
import sys
import os
# ๅฐ้กน็ฎๆ น็ฎๅฝๆทปๅ ๅฐ Python ่ทฏๅพ
sys.path.insert(0, os.path.dirname(__file__))
import streamlit as st
# ๅๅงๅๅญฆๆฏๅพ่กจไธป้ข๏ผๅฟ
้กปๅจ streamlit ็ปไปถไนๅ๏ผ
from assets.academic_theme import apply_academic_theme
apply_academic_theme()
from ui.components.stepper import render_stepper, render_back_button, STEP_TO_PAGE, PAGE_TO_STEP
from ui.pages.home import render_home
from ui.pages.smart_guide import render_smart_guide
from ui.pages.analysis import render_analysis
from ui.pages.report import render_report
from i18n import t
# โโ ้กต้ข้
็ฝฎ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
st.set_page_config(
page_title="EconKit - ่ฎก้็ปๆตๅญฆๅๆๅทฅๅ
ท",
page_icon="๐",
layout="wide",
initial_sidebar_state="collapsed",
)
# โโ ๅ ่ฝฝ่ชๅฎไน CSS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def _load_css() -> None:
css_path = os.path.join(os.path.dirname(__file__), "assets", "style.css")
if os.path.exists(css_path):
with open(css_path, encoding="utf-8") as f:
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
_load_css()
# โโ Session ็ถๆๅๅงๅ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def _init_session() -> None:
"""ๅๅงๅ session state ้ป่ฎคๅผ๏ผ็กฎไฟๆๆๅ
ณ้ฎๅญๆฎตๅญๅจ"""
defaults: dict = {
# ่ฏญ่จ่ฎพ็ฝฎ
"lang": "zh",
# ๆญฅ้ชค็ถๆ๏ผ้ฉฑๅจๅๅฏผๅผๅฏผ่ช๏ผ
"step": 1,
"page": "๐ ้ฆ้กต",
# ๆฐๆฎ็ถๆ
"df": None,
"filename": None,
"panel_info": {},
"validation": {},
# ๅๆ็ถๆ
"analysis_results": {},
"recommendations": [],
"recommended_methods": [],
# ๆฅๅ็ถๆ
"pdf_bytes": None,
}
for key, val in defaults.items():
if key not in st.session_state:
st.session_state[key] = val
_init_session()
# โโ ่ฏญ่จๅๆขๆ้ฎ๏ผ้กถ้จๅณไธ่ง๏ผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
_lc1, _lc2 = st.columns([20, 1])
with _lc2:
btn_label = "๐ EN" if st.session_state["lang"] == "zh" else "๐ ไธญๆ"
if st.button(btn_label, key="lang_toggle", help="Switch Language / ๅๆข่ฏญ่จ"):
st.session_state["lang"] = "en" if st.session_state["lang"] == "zh" else "zh"
st.rerun()
current_page = st.session_state["page"]
current_step = st.session_state["step"]
# โโ ้กถ้จๆญฅ้ชค่ฟๅบฆๆก๏ผๆๆ้กต้ขๅ
ๅฎนไนไธ๏ผ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
render_stepper(current_step)
render_back_button()
# โโ ้กต้ข่ทฏ็ฑ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
page_router = {
"๐ ้ฆ้กต": render_home,
"๐ Home": render_home,
"๐ค ๆบ่ฝๅผๅฏผ": render_smart_guide,
"๐ค Smart Guide": render_smart_guide,
"๐ ๅฎ่ฏๅๆ": render_analysis,
"๐ Analysis": render_analysis,
"๐ ไธ่ฝฝๆฅๅ": render_report,
"๐ Download Report": render_report,
}
handler = page_router.get(current_page)
if handler:
handler()
else:
render_home()