Browse Source

feat:在比赛测评页面里增加返回比赛的入口同时修改路径。

feature/unlimited-reply
zjz1993 5 years ago
parent
commit
d6b5971d13
  1. 3
      modules/contest.js
  2. 2
      modules/problem.js
  3. 91
      views/submission_contest.ejs

3
modules/contest.js

@ -463,7 +463,8 @@ app.get('/contest/submission/:id', async (req, res) => {
judge.code = await syzoj.utils.highlight(judge.code, syzoj.languages[judge.language].highlight); judge.code = await syzoj.utils.highlight(judge.code, syzoj.languages[judge.language].highlight);
} }
res.render('submission', { res.render('submission_contest', {
contest_id: contest.id,
info: getSubmissionInfo(judge, displayConfig), info: getSubmissionInfo(judge, displayConfig),
roughResult: getRoughResult(judge, displayConfig), roughResult: getRoughResult(judge, displayConfig),
code: (displayConfig.showCode && judge.problem.type !== 'submit-answer') ? judge.code.toString("utf8") : '', code: (displayConfig.showCode && judge.problem.type !== 'submit-answer') ? judge.code.toString("utf8") : '',

2
modules/problem.js

@ -769,6 +769,8 @@ app.post('/problem/:id/submit', app.multer.fields([{ name: 'answer', maxCount: 1
if (contest && (!await contest.isSupervisior(curUser))) { if (contest && (!await contest.isSupervisior(curUser))) {
res.redirect(syzoj.utils.makeUrl(['contest', contest_id, 'submissions'])); res.redirect(syzoj.utils.makeUrl(['contest', contest_id, 'submissions']));
} else if(contest) {
res.redirect(syzoj.utils.makeUrl(['contest','submission', judge_state.id]));
} else { } else {
res.redirect(syzoj.utils.makeUrl(['submission', judge_state.id])); res.redirect(syzoj.utils.makeUrl(['submission', judge_state.id]));
} }

91
views/submission_contest.ejs

@ -3,40 +3,39 @@
<% include header %> <% include header %>
<script src="<%- lib('textfit/2.3.1/textFit.min.js') %>"></script> <script src="<%- lib('textfit/2.3.1/textFit.min.js') %>"></script>
<style> <style>
.single-subtask { .single-subtask {
box-shadow: none !important; box-shadow: none !important;
} }
.single-subtask > .title { .single-subtask > .title {
display: none; display: none;
} }
.single-subtask > .content { .single-subtask > .content {
padding: 0 !important; padding: 0 !important;
} }
.accordion > .content > .accordion { .accordion > .content > .accordion {
margin-top: 0; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
} }
.accordion > .content > .accordion > .content { .accordion > .content > .accordion > .content {
margin-top: 0; margin-top: 0;
margin-bottom: 14px; margin-bottom: 14px;
} }
.accordion > .content > .accordion > .content > :last-child { .accordion > .content > .accordion > .content > :last-child {
margin-bottom: -10px !important; margin-bottom: -10px !important;
} }
.disabled{
display: none;
}
</style> </style>
<span id="submission_content"> <span id="submission_content">
<div class="padding" id="vueAppFuckSafari"> <div class="padding" id="vueAppFuckSafari">
<a href="<%= syzoj.utils.makeUrl(['contest', contest_id]) %>">返回比赛</a>
<table class="ui very basic center aligned table" id="status_table"> <table class="ui very basic center aligned table" id="status_table">
<thead> <thead>
<tr> <tr>
<th>已分享</th>
<th>编号</th> <th>编号</th>
<th>题目</th> <th>题目</th>
<th>状态</th> <th>状态</th>
@ -55,9 +54,6 @@
<tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :show-share="showShare" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr> <tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :show-share="showShare" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr>
</tbody> </tbody>
</table> </table>
<div id="cid" class="disabled"><%= cid %></div>
<div id="pid" class="disabled"><%= pid %></div>
<div id="sid" class="disabled"><%= sid %></div>
<code-box no-escape v-bind:content="code"> <code-box no-escape v-bind:content="code">
<% if (formattedCode !== null) { %> <% if (formattedCode !== null) { %>
<a onclick="toggleFormattedCode()" class="ui button" style="position: absolute; top: 0px; right: -4px; border-top-left-radius: 0; border-bottom-right-radius: 0; "> <a onclick="toggleFormattedCode()" class="ui button" style="position: absolute; top: 0px; right: -4px; border-top-left-radius: 0; border-bottom-right-radius: 0; ">
@ -135,9 +131,9 @@
<script src="<%- lib('socket.io/2.2.0/socket.io.js') %>"></script> <script src="<%- lib('socket.io/2.2.0/socket.io.js') %>"></script>
<script src="<%- lib('jsondiffpatch/0.2.5/jsondiffpatch.min.js') %>"></script> <script src="<%- lib('jsondiffpatch/0.2.5/jsondiffpatch.min.js') %>"></script>
<% include submissions_item %> <% include submissions_item %>
<script type="text/x-template" id="codeBoxTemplate"> <script type="text/x-template" id="codeBoxTemplate">
<div style="margin-top: 0px; margin-bottom: 14px; " v-if="content != null && content !== ''"> <div style="margin-top: 0px; margin-bottom: 14px; " v-if="content != null && content !== ''">
<p v-if="title" class="transition visible"> <p v-if="title" class="transition visible">
<strong v-html="title"></strong> <strong v-html="title"></strong>
@ -318,10 +314,6 @@ const vueApp = new Vue({
}); });
if (token != null) { if (token != null) {
const loadSocketIO = function () { const loadSocketIO = function () {
const cid = parseInt(document.getElementById('cid').innerHTML);
const pid = parseInt(document.getElementById('pid').innerHTML);
const sid = parseInt(document.getElementById('sid').innerHTML);
console.log(sid);
let currentVersion = 0; let currentVersion = 0;
const socket = io(socketUrl); const socket = io(socketUrl);
socket.on('connect', function () { socket.on('connect', function () {
@ -346,68 +338,17 @@ if (token != null) {
console.log("Judge finished"); console.log("Judge finished");
vueApp.roughData.running = false; vueApp.roughData.running = false;
vueApp.roughData.result = p.roughResult; vueApp.roughData.result = p.roughResult;
if (p.roughResult.result === 'Accepted') {
$.ajax({
url: `/api/pass/${cid}/${pid}/${sid}`,
type: 'GET',
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('练习功能发生故障');
}
});
} else {
$.ajax({
url: `/api/nopass/${cid}/${pid}/${sid}`,
type: 'GET',
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('练习功能发生故障');
}
});
}
vueApp.detailResult = p.result; vueApp.detailResult = p.result;
socket.close(); socket.close();
}); });
socket.emit('join', token, function (data) { socket.emit('join', token, function (data) {
console.log("join! ", data); console.log("join! ", data);
// data.ok=true;
// data.finished=true;
// data.roughResult = {
// memory: 7128,
// result: "Accepted",
// score: 100,
// time: 272,
// }
// data.running=false;
if (data && data.ok) { if (data && data.ok) {
if (data.finished) { if (data.finished) {
vueApp.roughData.result = data.roughResult; vueApp.roughData.result = data.roughResult;
// if (!data.result) location.reload(true); // if (!data.result) location.reload(true);
vueApp.detailResult = data.result; vueApp.detailResult = data.result;
vueApp.roughData.running = false; vueApp.roughData.running = false;
// if (data.roughResult.result === 'Accepted') {
// $.ajax({
// url: `/api/pass/${cid}/${pid}/${sid}`,
// type: 'GET',
// success: function (data) {
// },
// error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert('练习功能发生故障');
// }
// });
// } else {
// $.ajax({
// url: `/api/nopass/${cid}/${pid}/${sid}`,
// type: 'GET',
// success: function (data) {
// },
// error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert('练习功能发生故障');
// }
// });
// }
socket.close(); socket.close();
} else { } else {
if (data.running) { if (data.running) {

Loading…
Cancel
Save