功能:新增出席率統計,含每日人數分析分頁與名字別名合併

根本原因:
歷史戰績只有逐場比賽紀錄,看不出每個人長期的出席狀況,也不知道每天平均來幾個人;且名單上同一人有多種寫法(大小寫、錯字),直接統計會被拆成多個人而失真。

影響:
歷史戰績頁新增「出席率統計」按鈕,彈窗含兩個分頁——「出席排行」顯示每人出席場次、全期/加入後出席率長條與最近 12 場到場數;「每日人數」顯示全期與最近平均、單場最多最少、年度平均人數、人數分佈與最近 12 場逐日人數。名字自動正規化:英文大小寫視為同一人,中文錯字用別名表合併(景函、卡森→景涵,振華→振驊,阿翔→昱翔),佔位字(輪空、那個、隨機)不列入統計,平均每場人數也一併排除佔位字。

修法:
後端新增 GET /api/attendance,從 badminton 表的每日分組名單統計(history 表只有記分場次會漏算出席),buildAttendanceStats 輸出球員列表、dailyCounts 與含年度平均的 yearTotals;前端 HistoryPage 新增 AttendanceModal 與分頁切換,App.css 補上排行長條與每日分析的樣式。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-10 15:21:37 +08:00
co-authored by Claude Opus 4.8
parent 68618a8e04
commit 710d04bffe
6 changed files with 813 additions and 3 deletions
+9
View File
@@ -34,6 +34,15 @@
- 可從資料庫讀取歷史列表。
- 點開單筆可查看得分過程。
- 每筆資料可刪除,刪除前會顯示確認提示。
- 出席率統計
- 歷史戰績頁的 `出席率統計` 按鈕會彈窗顯示每個人的出席狀況。
- 資料取自 `badminton` 表的每日分組名單,不是 `history` 表,所以有到場但沒被記分的場次也算出席。
- 同時顯示兩種出席率:
- `全期`:以資料庫全部場次為分母。
- `加入後`:從各自第一次出席那天算起,新加入的人不會被稀釋。
- 另外顯示最近 `12` 場的到場次數,可看出誰還在打球。
- 英文名大小寫不同(`RURU` / `RuRu` / `Ruru`)自動視為同一人;中文錯字用 `server/server.mjs``ATTENDANCE_ALIASES` 別名表對照,合併過的寫法會顯示在該列。
- `ATTENDANCE_IGNORED_NAMES` 列的佔位字(如 `輪空`)不列入統計。
- 房間觀戰
- 記分板帶入隊伍後會自動建立房間。
- 房間列表可查看目前直播中的比賽。