diff --git a/models/judge_state.js b/models/judge_state.js index 4618fc5..cf61c5f 100644 --- a/models/judge_state.js +++ b/models/judge_state.js @@ -111,7 +111,7 @@ class JudgeState extends Model { } else { return true; } - } else if (this.type === 2) return false; + } else if (this.type === 2) return true; } async isAllowedSeeCodeBy(user) { diff --git a/modules/contest.js b/modules/contest.js index 62a04db..fdd4078 100644 --- a/modules/contest.js +++ b/modules/contest.js @@ -209,6 +209,8 @@ app.get('/contest/:id/submissions', async (req, res) => { if (!contest) throw 'No such contest.'; + contest.ended = await contest.isEnded(); + let problems_id = await contest.getProblems(); let user = await User.fromName(req.query.submitter || ''); @@ -218,6 +220,23 @@ app.get('/contest/:id/submissions', async (req, res) => { where.type = 1; where.type_info = contest_id; + if (contest.ended || (res.locals.user && res.locals.user.is_admin)) { + let minScore = parseInt(req.query.min_score); + if (isNaN(minScore)) minScore = 0; + let maxScore = parseInt(req.query.max_score); + if (isNaN(maxScore)) maxScore = 0; + + where.score = { + $and: { + $gte: parseInt(minScore), + $lte: parseInt(maxScore) + } + }; + + if (req.query.language) where.language = req.query.language; + if (req.query.status) where.status = req.query.status; + } + let paginate = syzoj.utils.paginate(await JudgeState.count(where), req.query.page, syzoj.config.page.judge_state); let judge_state = await JudgeState.query(paginate, where, [['submit_time', 'desc']]); @@ -233,10 +252,7 @@ app.get('/contest/:id/submissions', async (req, res) => { contest: contest, judge_state: judge_state, paginate: paginate, - form: { - submitter: req.query.submitter || '', - problem_id: req.query.problem_id || '' - } + form: req.query }); } catch (e) { syzoj.log(e); diff --git a/views/contest_submissions.ejs b/views/contest_submissions.ejs index a8b1655..1046468 100644 --- a/views/contest_submissions.ejs +++ b/views/contest_submissions.ejs @@ -1,20 +1,66 @@ <% this.title = '提交记录 - ' + contest.title %> <% include header %>
-
-
-
-
- + +
+ +
+ +
+ <% if (contest.ended || (user && user.is_admin)) { %> + +
+ +
+ +
+
- -
- <% if (user) { %> -
- 我的提交 + +
+ +
+ <% } %> + + <% if (user) { %> + + + 我的提交 + + + <% } %>
- <% } %> -

+ diff --git a/views/submission_content.ejs b/views/submission_content.ejs index 2350959..d7bfdb4 100644 --- a/views/submission_content.ejs +++ b/views/submission_content.ejs @@ -55,7 +55,11 @@ else problemUrl = syzoj.utils.makeUrl(['problem', judge.problem_id]); - + <% if (judge.allowedSeeCode) { %> + + <% } else { %> + + <% } %> <% } else { %> diff --git a/views/submissions_item.ejs b/views/submissions_item.ejs index 4ce9eed..b2e12f8 100644 --- a/views/submissions_item.ejs +++ b/views/submissions_item.ejs @@ -16,7 +16,11 @@ else problemUrl = syzoj.utils.makeUrl(['problem', judge.problem_id]); - +<% if (judge.allowedSeeCode) { %> + +<% } else { %> + +<% } %> <% } else { %>
<%= judge.result.score %> <%= judge.result.total_time %> ms <%= parseInt(judge.result.max_memory) || 0 %> K<%= syzoj.config.languages[judge.language].show %> / <%= syzoj.utils.formatSize(judge.codeLength) %><%= syzoj.config.languages[judge.language].show %> / <%= syzoj.utils.formatSize(judge.codeLength) %><%= syzoj.config.languages[judge.language].show %> / 隐藏 %>隐藏 隐藏<%= judge.result.score %> <%= judge.result.total_time %> ms <%= parseInt(judge.result.max_memory) || 0 %> K<%= syzoj.config.languages[judge.language].show %> / <%= syzoj.utils.formatSize(judge.code.length) %><%= syzoj.config.languages[judge.language].show %> / <%= syzoj.utils.formatSize(judge.code.length) %><%= syzoj.config.languages[judge.language].show %> / 隐藏隐藏 隐藏