From 69a14fab510d49bde8746d8c429fa28d0769a7aa Mon Sep 17 00:00:00 2001 From: hyunho Date: Thu, 26 Mar 2026 11:32:33 +0900 Subject: [PATCH] feat: split seatmap admin and readonly flows --- backend/app/main.py | 174 +++++++++++- frontend/public/app.js | 500 ++++++++++++++++++++++++++------- frontend/public/index.html | 80 ++++-- frontend/public/styles.css | 155 +++++++++- legacy/static/common.css | 2 + legacy/static/organization.css | 28 ++ legacy/static/organization.js | 95 ++++--- 7 files changed, 852 insertions(+), 182 deletions(-) diff --git a/backend/app/main.py b/backend/app/main.py index 33b3ae0..9ebb03b 100755 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -986,7 +986,13 @@ def build_center_chair_viewer_html(layout: dict[str, object]) -> str: for slot in layout.get("slots", []) if slot.get("id") is not None and slot.get("slot_key") is not None } + members_by_id = { + int(member["id"]): member + for member in layout.get("members", []) + if member.get("id") is not None + } placed_keys: list[str] = [] + assignment_items: list[dict[str, object]] = [] for placement in layout.get("placements", []): slot_id = placement.get("seat_slot_id") if slot_id is None: @@ -994,9 +1000,20 @@ def build_center_chair_viewer_html(layout: dict[str, object]) -> str: slot_key = slot_key_by_id.get(int(slot_id)) if slot_key: placed_keys.append(slot_key) + member = members_by_id.get(int(placement.get("member_id") or 0)) + if member: + assignment_items.append( + { + "key": slot_key, + "member_id": int(member["id"]), + "name": str(member.get("name") or "-"), + "rank": str(member.get("rank") or "-"), + } + ) seat_map = layout.get("seat_map") or {} placed_literal = json.dumps(sorted(set(placed_keys)), ensure_ascii=False, separators=(",", ":")) + assignments_literal = json.dumps(assignment_items, ensure_ascii=False, separators=(",", ":")) if seat_map.get("source_type") == "fixed_html": html = parse_fixed_office_template()["html"] else: @@ -1080,6 +1097,7 @@ def build_center_chair_viewer_html(layout: dict[str, object]) -> str: ) bridge_script = """