core&ui: contest_scoreboard: filter by group

pull/562/head
undefined 1 year ago
parent 95dbf1deb3
commit aa4099834c
No known key found for this signature in database

@ -282,12 +282,14 @@ export class ContestScoreboardHandler extends ContestDetailBaseHandler {
config.lockAt = this.tdoc.lockAt; config.lockAt = this.tdoc.lockAt;
} }
const [, rows, udict, pdict] = await contest.getScoreboard.call(this, domainId, tid, config); 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 // eslint-disable-next-line @typescript-eslint/naming-convention
const page_name = this.tdoc.rule === 'homework' const page_name = this.tdoc.rule === 'homework'
? 'homework_scoreboard' ? 'homework_scoreboard'
: 'contest_scoreboard'; : 'contest_scoreboard';
this.response.body = { 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.pjax = 'partials/scoreboard.html';
this.response.template = 'contest_scoreboard.html'; this.response.template = 'contest_scoreboard.html';

@ -30,9 +30,14 @@ const page = new NamedPage('contest_scoreboard', () => {
} else if (val === 'star') { } else if (val === 'star') {
$('.data-table tbody tr').hide(); $('.data-table tbody tr').hide();
read().forEach((uid) => $(`.star.user--${uid}`).closest('tr').show()); read().forEach((uid) => $(`.star.user--${uid}`).closest('tr').show());
} else { } else if (val === 'rank') {
$('.data-table tbody tr').show(); $('.data-table tbody tr').show();
$('.rank--unrank').closest('tr').hide(); $('.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(); const endAt = new Date(UiContext.tdoc.endAt).getTime();
function updateScoreboard() { function updateScoreboard() {
const now = Date.now(); 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); setInterval(updateScoreboard, 180000);

@ -25,6 +25,9 @@
<option value="all">{{ _('All Users') }}</option> <option value="all">{{ _('All Users') }}</option>
<option value="star">{{ _('Starred Users') }}</option> <option value="star">{{ _('Starred Users') }}</option>
<option value="rank">{{ _('Ranked Users') }}</option> <option value="rank">{{ _('Ranked Users') }}</option>
{% for group in groups %}
<option value="{{ group.uids.join(',') }}">{{ group.name }}</option>
{% endfor %}
</select> </select>
</div> </div>
</div> </div>

Loading…
Cancel
Save