feat: use full-width row buttons for history list to avoid radio button selection

This commit is contained in:
unknown
2026-06-24 15:05:53 +09:00
parent 555391fd61
commit 866b432a29
+16 -16
View File
@@ -782,43 +782,43 @@ def page_history():
if st.session_state["selected_analysis_id"] not in valid_ids and records: if st.session_state["selected_analysis_id"] not in valid_ids and records:
st.session_state["selected_analysis_id"] = records[0]["id"] st.session_state["selected_analysis_id"] = records[0]["id"]
# 2컬럼 대시보드 레이아웃 구성 st.write("### 📋 분석 이력 목록")
col_list, col_detail = st.columns([1, 2.5]) st.caption("💡 아래 목록에서 **원하는 행(보고서 카드)**을 누르시면 하단의 상세 분석 내역이 즉시 갱신됩니다.")
# 1. 왼쪽 컬럼: 분석 이력 카드 버튼 목록 (마우스로 편하게 누르는 영역)
with col_list:
st.write("### 📋 보고서 목록")
st.caption("아래 목록을 클릭하시면 상세 내역이 오른쪽에 즉시 표시됩니다.")
status_emoji = {"critical": "🔴", "warning": "🟡", "healthy": "🟢"} status_emoji = {"critical": "🔴", "warning": "🟡", "healthy": "🟢"}
with st.container(height=650): # 스크롤 가능한 컨테이너 내부에 라디오 버튼이 없는 가로형 통짜 클릭 행 렌더링
with st.container(height=380):
for r in records: for r in records:
emoji = status_emoji.get(r['overall_status'], '🟢') emoji = status_emoji.get(r['overall_status'], '🟢')
is_selected = (r["id"] == st.session_state["selected_analysis_id"]) is_selected = (r["id"] == st.session_state["selected_analysis_id"])
# 선택된 보고서는 강조 표시 # 행 전체를 하나의 널찍한 버튼으로 구성 (마우스 클릭 영역 극대화)
prefix = "▶️ " if is_selected else "" # 라벨 포맷: 상태이모지 | 파일명 | 분석일시 | 요약통계
btn_label = f"{prefix}{emoji} [ID: {r['id']}] {r['filename'][:23]}\n({r['created_at'].split()[0]})" btn_label = (
f"{emoji} [ID: {r['id']}] {r['filename'][:30]} | "
f"🕒 {r['created_at']} | "
f"🎮 GPU {r['gpu_count']}개 / ⚠️ XID {r['xid_count']}건 / 🔧 RMA {r['rma_count']}"
)
# 버튼으로 구현하여 일반 마우스 클릭이 100% 동작하도록 처리 # 버튼 클릭 시 해당 보고서 ID로 세션 상태를 저장하고 화면 갱신
if st.button( if st.button(
btn_label, btn_label,
key=f"btn_hist_{r['id']}", key=f"btn_row_{r['id']}",
use_container_width=True, use_container_width=True,
type="primary" if is_selected else "secondary" type="primary" if is_selected else "secondary"
): ):
st.session_state["selected_analysis_id"] = r["id"] st.session_state["selected_analysis_id"] = r["id"]
st.rerun() st.rerun()
# 2. 오른쪽 컬럼: 선택된 보고서의 상세 분석 내용 렌더링 # 상세 조회
with col_detail: st.markdown("---")
selected_id = st.session_state["selected_analysis_id"] selected_id = st.session_state["selected_analysis_id"]
detail = get_analysis_detail(selected_id) detail = get_analysis_detail(selected_id)
if not detail: if not detail:
st.warning(f"ID {selected_id}에 해당하는 분석 결과가 없습니다.") st.warning(f"ID {selected_id}에 해당하는 분석 결과가 없습니다.")
else: return
st.write(f"### 🔎 상세 분석 결과 (보고서 ID: {selected_id})")
# 메모 편집 (editor/admin만) # 메모 편집 (editor/admin만)
perms = get_perms() perms = get_perms()