FormingStar / pages /2_information.py
Antonio0616's picture
Update pages/2_information.py
6d79b8b verified
# -------------------------------
# ์šฉ์–ด ๋ฐ์ดํ„ฐ (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„, ํ•œ๊ธ€+์˜๋ฌธ ๋ณ‘๊ธฐ)
# -------------------------------
from dashboard_theme.theme import inject
inject("graphite_gold")
import streamlit as st
st.set_page_config(page_title="Information", layout="wide")
# ์ธ์ฆ ์ฒดํฌ
if "authenticated" not in st.session_state or not st.session_state["authenticated"]:
st.error("โ›” ์ ‘๊ทผ ๋ถˆ๊ฐ€: ๋จผ์ € ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.")
st.stop()
# -------------------------------
# ์šฉ์–ด ๋ฐ์ดํ„ฐ (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„, ํ•œ๊ธ€+์˜๋ฌธ ๋ณ‘๊ธฐ)
# -------------------------------
terms = {
"๊ธˆํ˜• ๋ถ€ํ’ˆ": {
"Die (๋‹ค์ด)": {
"description": "ํ”„๋ ˆ์Šค ๊ณต๊ตฌ์˜ ํ•˜๋ถ€์— ์œ„์น˜...",
"image": "assets/Drawing.png"
},
"Punch (ํŽ€์น˜)": {
"description": "์ƒ๋ถ€ ๊ธˆํ˜•์œผ๋กœ ...",
"image": "assets/Drawing.png"
},
"Pad (ํŒจ๋“œ)": {
"description": "์œ ์ง€ ์••๋ ฅ์„ ๋ฐ›๋Š” ๊ธˆํ˜• ๋ถ€ํ’ˆ ์ด์นญ",
"image": None
},
},
"์†Œ์žฌ": {
"Blank (๋ธ”๋žญํฌ)": {
"description": "Punch์™€ Die๊ฐ€ ์žฌ๋ฃŒํŒ์— ์ž‘์šฉํ•˜์—ฌ ๋ถ„๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฌผ",
"image": "assets/Drawing.png"
},
},
"๊ณต์ •": {
"Blank holder (๋ธ”๋žญํฌ ํ™€๋”)": {
"description": "๋“œ๋กœ์ž‰ ๊ธˆํ˜• ๋˜๋Š” ํฌ๋ฐ ๊ธˆํ˜•์˜ ๋ถ€ํ’ˆ...",
"image": "assets/Drawing.png"
},
}
}
# ์ „์ฒด ์šฉ์–ด flat dict
all_terms = {term: data for cat in terms.values() for term, data in cat.items()}
# -------------------------------
# (์ค‘์š”) ์„ค๋ช… ๋ฐ•์Šค ์ „์šฉ ์Šคํƒ€์ผ
# - ํ…Œ๋งˆ ํŒจ๋„์„ ์“ฐ๋˜, ๋‚ด๋ถ€ ๋ฌธ๋‹จ ์—ฌ๋ฐฑ๋งŒ ์•ฝ๊ฐ„ ํŠœ๋‹
# -------------------------------
st.markdown(
"""
<style>
.info-panel { margin: 0 0 16px 0; }
.info-panel p { margin: 0; line-height: 1.7; font-size: 16px; }
/* ๋งŒ์•ฝ ๋ฐ์€ ์นด๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์•„๋ž˜ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ (ํ˜„์žฌ๋Š” ๋ฏธ์‚ฌ์šฉ)
.light-card {
background:#f9f9f9 !important; color:#1f2937 !important;
border:1px solid rgba(0,0,0,.08) !important; border-radius:12px;
padding:20px;
}
.light-card * { color:#1f2937 !important; }
*/
</style>
""",
unsafe_allow_html=True
)
# -------------------------------
# ์„ธ์…˜ ์ดˆ๊ธฐํ™”
# -------------------------------
if "selected_term" not in st.session_state:
st.session_state["selected_term"] = None
# -------------------------------
# ํ—ค๋” (์ œ๋ชฉ + ๊ฒ€์ƒ‰)
# -------------------------------
col1, col2 = st.columns([3, 2])
with col1:
st.title("๐Ÿ“˜ ์„ฑํ˜• ๊ด€๋ จ ์šฉ์–ด ์‚ฌ์ „")
with col2:
search_query = st.selectbox(
" ", # ๋ผ๋ฒจ ์ˆจ๊น€
options=[""] + list(all_terms.keys()),
index=0,
placeholder="๊ฒ€์ƒ‰ (์˜ˆ: Die, ๋‹ค์ด, Punch, ๋ธ”๋žญํฌ ...)"
)
if search_query:
st.session_state["selected_term"] = search_query
# -------------------------------
# ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์šฉ์–ด (ํƒญ + ์นด๋“œ)
# -------------------------------
st.markdown("---")
st.subheader("๐Ÿ“‘ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์šฉ์–ด")
tabs = st.tabs(list(terms.keys()))
for tab, (category, items) in zip(tabs, terms.items()):
with tab:
cols = st.columns(3)
for i, (term, data) in enumerate(items.items()):
with cols[i % 3]:
st.markdown(f"#### {term}")
if st.button("์ž์„ธํžˆ ๋ณด๊ธฐ", key=f"btn_{term}"):
st.session_state["selected_term"] = term
# -------------------------------
# ๊ณต์šฉ ์ƒ์„ธ ํŒจ๋„ (๊ฒ€์ƒ‰/๋ฒ„ํŠผ ํ†ตํ•ฉ, ์ขŒ์šฐ ๋ ˆ์ด์•„์›ƒ)
# -------------------------------
if st.session_state["selected_term"]:
term = st.session_state["selected_term"]
data = all_terms[term]
st.markdown("---")
st.markdown(f"## ๐Ÿ“– {term}")
# ์ขŒ(์„ค๋ช…) : ์šฐ(์ด๋ฏธ์ง€)
col1, col2 = st.columns([2, 1])
with col1:
# โœ… ํ…Œ๋งˆ์˜ ํŒจ๋„(.panel)์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ โ†’ ๋‹คํฌ ๋ฐฐ๊ฒฝ + ๋ฐ์€ ๊ธ€์ž
st.markdown(
f"""
<div class="panel info-panel">
<p>{data["description"]}</p>
</div>
""",
unsafe_allow_html=True
)
with col2:
if data["image"]:
st.image(data["image"], use_container_width=True)