feat: admin public_base_url override (QR target)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
25
app.py
25
app.py
@@ -154,6 +154,16 @@ def set_voting_open(flag):
|
|||||||
update_data(_fn)
|
update_data(_fn)
|
||||||
|
|
||||||
|
|
||||||
|
def set_public_base_url(url):
|
||||||
|
def _fn(data):
|
||||||
|
data.setdefault("settings", {})
|
||||||
|
if url:
|
||||||
|
data["settings"]["public_base_url"] = url.strip()
|
||||||
|
else:
|
||||||
|
data["settings"].pop("public_base_url", None)
|
||||||
|
update_data(_fn)
|
||||||
|
|
||||||
|
|
||||||
VALID_STAGES = ("intro", "topics", "vote")
|
VALID_STAGES = ("intro", "topics", "vote")
|
||||||
|
|
||||||
|
|
||||||
@@ -646,6 +656,21 @@ def render_admin():
|
|||||||
if cur == "vote":
|
if cur == "vote":
|
||||||
st.caption("ℹ️ vote stage 진입 시 투표가 자동 open 됨. 마감은 아래 '투표 마감' 버튼으로.")
|
st.caption("ℹ️ vote stage 진입 시 투표가 자동 open 됨. 마감은 아래 '투표 마감' 버튼으로.")
|
||||||
|
|
||||||
|
st.markdown("**📱 모바일 QR target URL**")
|
||||||
|
cur_url = compute_vote_url()
|
||||||
|
st.caption(f"현재: `{cur_url}`")
|
||||||
|
cur_override = load_data().get("settings", {}).get("public_base_url", "")
|
||||||
|
new_override = st.text_input(
|
||||||
|
"Override (비워두면 자동 감지)",
|
||||||
|
value=cur_override,
|
||||||
|
placeholder="http://192.168.1.10:8501",
|
||||||
|
key="qr_override",
|
||||||
|
)
|
||||||
|
if st.button("Override 저장"):
|
||||||
|
set_public_base_url(new_override)
|
||||||
|
st.success("저장됨.")
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
voting_open = is_voting_open()
|
voting_open = is_voting_open()
|
||||||
cur_label = "🟢 투표 진행 중" if voting_open else "🔴 투표 마감됨"
|
cur_label = "🟢 투표 진행 중" if voting_open else "🔴 투표 마감됨"
|
||||||
st.markdown(f"### 투표 상태: {cur_label}")
|
st.markdown(f"### 투표 상태: {cur_label}")
|
||||||
|
|||||||
Reference in New Issue
Block a user