feat: use full-width row buttons for history list to avoid radio button selection
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user