diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index d56f0329..6d633b95 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -282,12 +282,14 @@ export class ContestScoreboardHandler extends ContestDetailBaseHandler { config.lockAt = this.tdoc.lockAt; } const [, rows, udict, pdict] = await contest.getScoreboard.call(this, domainId, tid, config); + const groups = this.user.hasPerm(PERM.PERM_EDIT_DOMAIN) + ? await user.listGroup(domainId) : []; // eslint-disable-next-line @typescript-eslint/naming-convention const page_name = this.tdoc.rule === 'homework' ? 'homework_scoreboard' : 'contest_scoreboard'; this.response.body = { - tdoc: this.tdoc, rows, udict, pdict, page_name, + tdoc: this.tdoc, rows, udict, pdict, page_name, groups, }; this.response.pjax = 'partials/scoreboard.html'; this.response.template = 'contest_scoreboard.html'; diff --git a/packages/ui-default/pages/contest_scoreboard.page.ts b/packages/ui-default/pages/contest_scoreboard.page.ts index ebdc4a6e..161658fe 100644 --- a/packages/ui-default/pages/contest_scoreboard.page.ts +++ b/packages/ui-default/pages/contest_scoreboard.page.ts @@ -30,9 +30,14 @@ const page = new NamedPage('contest_scoreboard', () => { } else if (val === 'star') { $('.data-table tbody tr').hide(); read().forEach((uid) => $(`.star.user--${uid}`).closest('tr').show()); - } else { + } else if (val === 'rank') { $('.data-table tbody tr').show(); $('.rank--unrank').closest('tr').hide(); + } else { + $('.data-table tbody tr').hide(); + const uids = val.toString().split(',').map((i) => +i.trim()).filter((i) => i); + if (!uids?.length) return; + uids.forEach((uid) => $(`.user--${uid}`).closest('tr').show()); } }); @@ -40,7 +45,7 @@ const page = new NamedPage('contest_scoreboard', () => { const endAt = new Date(UiContext.tdoc.endAt).getTime(); function updateScoreboard() { const now = Date.now(); - if (beginAt <= now && now <= endAt) pjax.request(UiContext.scoreboardUrl || '', { push: false }); + if (beginAt <= now && now <= endAt) pjax.request({ url: UiContext.scoreboardUrl || '', push: false }); } setInterval(updateScoreboard, 180000); diff --git a/packages/ui-default/templates/contest_scoreboard.html b/packages/ui-default/templates/contest_scoreboard.html index 0cc04656..0c0a560e 100644 --- a/packages/ui-default/templates/contest_scoreboard.html +++ b/packages/ui-default/templates/contest_scoreboard.html @@ -25,6 +25,9 @@ + {% for group in groups %} + + {% endfor %}