diff --git a/CHANGELOG.md b/CHANGELOG.md index 9091988..e6f3611 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ## [Unreleased] +## [0.5.85] - 2026-07-29 + +### Changed + +- 「比赛」场次摘要「共 N 场 · 第 X/Y 页」移到底部分页区,与页码同栏。 + ## [0.5.84] - 2026-07-29 ### Fixed diff --git a/web/export_relations_site.py b/web/export_relations_site.py index eb9d7f3..5c88785 100644 --- a/web/export_relations_site.py +++ b/web/export_relations_site.py @@ -51,7 +51,7 @@ from shared.paths import ( from serve_relations import WEB_DIR, build_payload -SITE_VERSION = "0.5.84" +SITE_VERSION = "0.5.85" DEFAULT_OSS_BASE = "https://climperor.oss-cn-shanghai.aliyuncs.com" diff --git a/web/frontend/app.js b/web/frontend/app.js index 3e2d0f7..691a416 100644 --- a/web/frontend/app.js +++ b/web/frontend/app.js @@ -3732,7 +3732,6 @@ function renderMatchesPage() { const body = $("#matches-body"); const originsEl = $("#matches-origins"); const playersEl = $("#matches-players"); - const sub = $("#matches-sub"); if (!body) return; const origin = MATCH_ORIGIN_FILTERS.some((o) => o.id === state.matchesOrigin) @@ -3813,7 +3812,6 @@ function renderMatchesPage() { if (!hasData) { body.innerHTML = '
暂无比赛数据(请运行 python web/fetch_pro_matches.py)
'; - if (sub) sub.textContent = ""; return; } @@ -3837,12 +3835,9 @@ function renderMatchesPage() { } const start = (page - 1) * pageSize; const rows = allRows.slice(start, start + pageSize); - - if (sub) { - sub.textContent = total - ? `共 ${total} 场 · 第 ${page}/${pageCount} 页` - : ""; - } + const summary = total + ? `共 ${total} 场 · 第 ${page}/${pageCount} 页` + : ""; if (!rows.length) { body.innerHTML = state.matchesPlayerId @@ -3854,20 +3849,33 @@ function renderMatchesPage() { const wrap = document.createElement("div"); wrap.className = "matches-page-wrap"; wrap.appendChild(buildMatchList(null, rows, { showHero: true })); - if (pageCount > 1) { - wrap.appendChild( - buildMatchesPager(page, pageCount, (next) => { - state.matchesPage = next; - syncStateToUrl(); - renderMatchesPage(); - const board = $("#matches-view"); - if (board) board.scrollTop = 0; - }) - ); - } + wrap.appendChild( + buildMatchesFoot(summary, page, pageCount, (next) => { + state.matchesPage = next; + syncStateToUrl(); + renderMatchesPage(); + const board = $("#matches-view"); + if (board) board.scrollTop = 0; + }) + ); body.replaceChildren(wrap); } +function buildMatchesFoot(summaryText, page, pageCount, onGo) { + const foot = document.createElement("div"); + foot.className = "matches-foot"; + if (summaryText) { + const summary = document.createElement("p"); + summary.className = "matches-foot-summary"; + summary.textContent = summaryText; + foot.appendChild(summary); + } + if (pageCount > 1) { + foot.appendChild(buildMatchesPager(page, pageCount, onGo)); + } + return foot; +} + function buildMatchesPager(page, pageCount, onGo) { const nav = document.createElement("nav"); nav.className = "matches-pager"; diff --git a/web/frontend/config.js b/web/frontend/config.js index 21105b8..0e72fa2 100644 --- a/web/frontend/config.js +++ b/web/frontend/config.js @@ -1,4 +1,4 @@ /* Local defaults; production export overwrites via export_relations_site.py. */ -var SITE_VERSION = "0.5.84"; +var SITE_VERSION = "0.5.85"; var ABILITY_VIDEO_BASE = ""; var STATIC_ASSET_BASE = ""; diff --git a/web/frontend/index.html b/web/frontend/index.html index e51f976..191c5c6 100644 --- a/web/frontend/index.html +++ b/web/frontend/index.html @@ -5,8 +5,8 @@ DOTA2 上分帝 - - + + @@ -166,8 +165,8 @@
- - - + + + diff --git a/web/frontend/style.css b/web/frontend/style.css index 1b4fa99..83c409f 100644 --- a/web/frontend/style.css +++ b/web/frontend/style.css @@ -2653,13 +2653,28 @@ body:has(#items-view:not(.hidden)) { gap: 16px; width: 100%; } +.matches-foot { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + padding: 4px 0 8px; +} +.matches-foot-summary { + margin: 0; + font-size: 13px; + font-weight: 500; + color: var(--muted); + line-height: 1.4; + text-align: center; +} .matches-pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; - padding: 4px 0 8px; + padding: 0; } .matches-pager-btn { min-width: 36px;