mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 16:33:22 +00:00
后台题目创建编辑 js 的 bug 修复;增加文件上传进度条
This commit is contained in:
parent
e46847880e
commit
bb5be25371
@ -109,24 +109,10 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "bootstrap"], function ($,
|
|||||||
vm.template_url = "template/group/group_detail.html";
|
vm.template_url = "template/group/group_detail.html";
|
||||||
});
|
});
|
||||||
|
|
||||||
vm.$watch("showEditProblemPage", function (problemId) {
|
|
||||||
vm.problemId = problemId;
|
|
||||||
vm.template_url = "template/problem/edit_problem.html";
|
|
||||||
});
|
|
||||||
|
|
||||||
vm.$watch("showProblemListPage", function () {
|
|
||||||
vm.template_url = "template/problem/problem_list.html";
|
|
||||||
});
|
|
||||||
|
|
||||||
vm.$watch("showGroupListPage", function () {
|
vm.$watch("showGroupListPage", function () {
|
||||||
vm.template_url = "template/group/group.html";
|
vm.template_url = "template/group/group.html";
|
||||||
});
|
});
|
||||||
|
|
||||||
vm.$watch("showProblemSubmissionPage", function (problemId) {
|
|
||||||
vm.problemId = problemId;
|
|
||||||
vm.template_url = "template/problem/submission_list.html";
|
|
||||||
});
|
|
||||||
|
|
||||||
vm.$watch("showContestProblemPage", function (problemId, contestId, contestMode) {
|
vm.$watch("showContestProblemPage", function (problemId, contestId, contestMode) {
|
||||||
vm.$problemId = problemId;
|
vm.$problemId = problemId;
|
||||||
vm.$contestId = contestId;
|
vm.$contestId = contestId;
|
||||||
|
@ -4,7 +4,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
|
|
||||||
$("#add-problem-form").validator()
|
$("#add-problem-form").validator()
|
||||||
.on('submit', function (e) {
|
.on('submit', function (e) {
|
||||||
if (!e.isDefaultPrevented()){
|
if (!e.isDefaultPrevented()) {
|
||||||
if (vm.testCaseId == "") {
|
if (vm.testCaseId == "") {
|
||||||
bsAlert("你还没有上传测试数据!");
|
bsAlert("你还没有上传测试数据!");
|
||||||
return false;
|
return false;
|
||||||
@ -13,8 +13,8 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
bsAlert("题目描述不能为空!");
|
bsAlert("题目描述不能为空!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (vm.timeLimit < 100 || vm.timeLimit > 5000) {
|
if (vm.timeLimit < 30 || vm.timeLimit > 5000) {
|
||||||
bsAlert("保证时间限制是一个100-5000的合法整数");
|
bsAlert("保证时间限制是一个30-5000的合法整数");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (vm.samples.length == 0) {
|
if (vm.samples.length == 0) {
|
||||||
@ -50,7 +50,10 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i < vm.samples.$model.length; i++) {
|
for (var i = 0; i < vm.samples.$model.length; i++) {
|
||||||
ajaxData.samples.push({input: vm.samples.$model[i].input, output: vm.samples.$model[i].output});
|
ajaxData.samples.push({
|
||||||
|
input: vm.samples.$model[i].input,
|
||||||
|
output: vm.samples.$model[i].output
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -74,44 +77,11 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
|
|
||||||
if (response.code)
|
|
||||||
bsAlert(response.data);
|
|
||||||
else {
|
|
||||||
vm.testCaseId = response.data.test_case_id;
|
|
||||||
vm.uploadSuccess = true;
|
|
||||||
vm.testCaseList = [];
|
|
||||||
for (var i = 0; i < response.data.file_list.input.length; i++) {
|
|
||||||
vm.testCaseList.push({
|
|
||||||
input: response.data.file_list.input[i],
|
|
||||||
output: response.data.file_list.output[i]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var hintEditor = editor("#hint");
|
var hintEditor = editor("#hint");
|
||||||
var problemDescription = editor("#problemDescription");
|
var problemDescription = editor("#problemDescription");
|
||||||
if (avalon.vmodels.addProblem) {
|
if (avalon.vmodels.addProblem) {
|
||||||
var vm = avalon.vmodels.addProblem;
|
var vm = avalon.vmodels.addProblem;
|
||||||
vm.title = "";
|
|
||||||
vm.description = "";
|
|
||||||
vm.timeLimit = 1000;
|
|
||||||
vm.memoryLimit = 256;
|
|
||||||
vm.samples = [{input: "", output: "", "visible": true}];
|
|
||||||
vm.hint = "";
|
|
||||||
vm.visible = true;
|
|
||||||
vm.difficulty = 0;
|
|
||||||
vm.tags = [];
|
|
||||||
vm.inputDescription = "";
|
|
||||||
vm.outputDescription = "";
|
|
||||||
vm.testCaseId = "";
|
|
||||||
vm.testCaseList = [];
|
|
||||||
vm.uploadSuccess = false;
|
|
||||||
vm.source = "";
|
|
||||||
hintEditor.setValue("");
|
|
||||||
problemDescription.setValue("");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
var vm = avalon.define({
|
var vm = avalon.define({
|
||||||
@ -119,7 +89,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
title: "",
|
title: "",
|
||||||
description: "",
|
description: "",
|
||||||
timeLimit: 1000,
|
timeLimit: 1000,
|
||||||
memoryLimit: 256,
|
memoryLimit: 128,
|
||||||
samples: [{input: "", output: "", "visible": true}],
|
samples: [{input: "", output: "", "visible": true}],
|
||||||
hint: "",
|
hint: "",
|
||||||
visible: true,
|
visible: true,
|
||||||
@ -131,6 +101,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
testCaseList: [],
|
testCaseList: [],
|
||||||
uploadSuccess: false,
|
uploadSuccess: false,
|
||||||
source: "",
|
source: "",
|
||||||
|
uploadProgress: 0,
|
||||||
addSample: function () {
|
addSample: function () {
|
||||||
vm.samples.push({input: "", output: "", "visible": true});
|
vm.samples.push({input: "", output: "", "visible": true});
|
||||||
},
|
},
|
||||||
@ -149,6 +120,27 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/",
|
||||||
|
function (file, response) {
|
||||||
|
if (response.code)
|
||||||
|
bsAlert(response.data);
|
||||||
|
else {
|
||||||
|
vm.testCaseId = response.data.test_case_id;
|
||||||
|
vm.uploadSuccess = true;
|
||||||
|
vm.testCaseList = [];
|
||||||
|
for (var i = 0; i < response.data.file_list.input.length; i++) {
|
||||||
|
vm.testCaseList.push({
|
||||||
|
input: response.data.file_list.input[i],
|
||||||
|
output: response.data.file_list.output[i]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function (file, percentage) {
|
||||||
|
vm.uploadProgress = percentage;
|
||||||
|
});
|
||||||
|
|
||||||
var tagAutoCompleteList = [];
|
var tagAutoCompleteList = [];
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -5,7 +5,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
|
|
||||||
$("#edit-problem-form").validator()
|
$("#edit-problem-form").validator()
|
||||||
.on('submit', function (e) {
|
.on('submit', function (e) {
|
||||||
if (!e.isDefaultPrevented()){
|
if (!e.isDefaultPrevented()) {
|
||||||
if (vm.testCaseId == "") {
|
if (vm.testCaseId == "") {
|
||||||
bsAlert("你还没有上传测试数据!");
|
bsAlert("你还没有上传测试数据!");
|
||||||
return false;
|
return false;
|
||||||
@ -51,7 +51,10 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i < vm.samples.$model.length; i++) {
|
for (var i = 0; i < vm.samples.$model.length; i++) {
|
||||||
ajaxData.samples.push({input: vm.samples.$model[i].input, output: vm.samples.$model[i].output});
|
ajaxData.samples.push({
|
||||||
|
input: vm.samples.$model[i].input,
|
||||||
|
output: vm.samples.$model[i].output
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -77,20 +80,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
});
|
});
|
||||||
if (avalon.vmodels.editProblem) {
|
if (avalon.vmodels.editProblem) {
|
||||||
var vm = avalon.vmodels.editProblem;
|
var vm = avalon.vmodels.editProblem;
|
||||||
vm.title= "",
|
|
||||||
vm.description= "";
|
|
||||||
vm.timeLimit= -1;
|
|
||||||
vm.memoryLimit= -1;
|
|
||||||
vm.samples= [];
|
|
||||||
vm.hint= "";
|
|
||||||
vm.visible= true;
|
|
||||||
vm.difficulty= 0;
|
|
||||||
vm.inputDescription= "";
|
|
||||||
vm.outputDescription= "";
|
|
||||||
vm.testCaseIdd= "";
|
|
||||||
vm.uploadSuccess= false;
|
|
||||||
vm.source= "";
|
|
||||||
vm.testCaseList= [];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
var vm = avalon.define({
|
var vm = avalon.define({
|
||||||
@ -109,6 +98,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
uploadSuccess: false,
|
uploadSuccess: false,
|
||||||
source: "",
|
source: "",
|
||||||
testCaseList: [],
|
testCaseList: [],
|
||||||
|
uploadProgress: 0,
|
||||||
addSample: function () {
|
addSample: function () {
|
||||||
vm.samples.push({input: "", output: "", "visible": true});
|
vm.samples.push({input: "", output: "", "visible": true});
|
||||||
},
|
},
|
||||||
@ -125,13 +115,14 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
return "折叠";
|
return "折叠";
|
||||||
return "展开";
|
return "展开";
|
||||||
},
|
},
|
||||||
showProblemListPage: function(){
|
showProblemListPage: function () {
|
||||||
vm.$fire("up!showProblemListPage");
|
avalon.vmodels.admin.template_url = "template/problem/problem_list.html";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var hintEditor = editor("#hint");
|
var hintEditor = editor("#hint");
|
||||||
var descriptionEditor = editor("#problemDescription");
|
var descriptionEditor = editor("#problemDescription");
|
||||||
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
|
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/",
|
||||||
|
function (file, response) {
|
||||||
if (response.code)
|
if (response.code)
|
||||||
bsAlert(response.data);
|
bsAlert(response.data);
|
||||||
else {
|
else {
|
||||||
@ -146,7 +137,11 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
}
|
}
|
||||||
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
|
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
function (file, percentage) {
|
||||||
|
vm.uploadProgress = percentage;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/api/admin/problem/?problem_id=" + avalon.vmodels.admin.problemId,
|
url: "/api/admin/problem/?problem_id=" + avalon.vmodels.admin.problemId,
|
||||||
|
@ -1,54 +1,44 @@
|
|||||||
require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) {
|
require(["jquery", "avalon", "csrfToken", "bsAlert", "pager"], function ($, avalon, csrfTokenHeader, bsAlert) {
|
||||||
|
|
||||||
avalon.ready(function () {
|
avalon.ready(function () {
|
||||||
if(avalon.vmodels.problemList){
|
if(avalon.vmodels.problemList){
|
||||||
vm = avalon.vmodels.problemList;
|
vm = avalon.vmodels.problemList;
|
||||||
problemList = [];
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var vm = avalon.define({
|
var vm = avalon.define({
|
||||||
$id: "problemList",
|
$id: "problemList",
|
||||||
problemList: [],
|
problemList: [],
|
||||||
previousPage: 0,
|
|
||||||
nextPage: 0,
|
|
||||||
page: 1,
|
|
||||||
totalPage: 1,
|
|
||||||
keyword: "",
|
keyword: "",
|
||||||
showVisibleOnly: false,
|
showVisibleOnly: false,
|
||||||
getNext: function () {
|
|
||||||
if (!vm.nextPage)
|
pager: {
|
||||||
return;
|
getPage: function (page) {
|
||||||
getPageData(vm.page + 1);
|
getPage(page);
|
||||||
},
|
|
||||||
getPrevious: function () {
|
|
||||||
if (!vm.previousPage)
|
|
||||||
return;
|
|
||||||
getPageData(vm.page - 1);
|
|
||||||
},
|
|
||||||
getBtnClass: function (btn) {
|
|
||||||
if (btn == "next") {
|
|
||||||
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getPage: function (page_index) {
|
|
||||||
getPageData(page_index);
|
|
||||||
},
|
|
||||||
showEditProblemPage: function (problemId) {
|
showEditProblemPage: function (problemId) {
|
||||||
vm.$fire("up!showEditProblemPage", problemId);
|
avalon.vmodels.admin.problemId = problemId;
|
||||||
|
avalon.vmodels.admin.template_url = "template/problem/edit_problem.html";
|
||||||
},
|
},
|
||||||
showProblemSubmissionPage: function(problemId){
|
showProblemSubmissionPage: function(problemId){
|
||||||
vm.$fire("up!showProblemSubmissionPage", problemId);
|
avalon.vmodels.admin.problemId = problemId;
|
||||||
|
avalon.vmodels.admin.template_url = "template/problem/submission_list.html";
|
||||||
|
},
|
||||||
|
|
||||||
|
search: function(){
|
||||||
|
getPage(1);
|
||||||
|
avalon.vmodels.problemPager.currentPage = 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
vm.$watch("showVisibleOnly", function () {
|
vm.$watch("showVisibleOnly", function () {
|
||||||
getPageData(1);
|
getPage(1);
|
||||||
|
avalon.vmodels.problemPager.currentPage = 1;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
getPageData(1);
|
|
||||||
function getPageData(page) {
|
function getPage(page) {
|
||||||
var url = "/api/admin/problem/?paging=true&page=" + page + "&page_size=10";
|
var url = "/api/admin/problem/?paging=true&page=" + page + "&page_size=10";
|
||||||
if (vm.keyword != "")
|
if (vm.keyword != "")
|
||||||
url += "&keyword=" + vm.keyword;
|
url += "&keyword=" + vm.keyword;
|
||||||
@ -61,10 +51,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT
|
|||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (!data.code) {
|
if (!data.code) {
|
||||||
vm.problemList = data.data.results;
|
vm.problemList = data.data.results;
|
||||||
vm.totalPage = data.data.total_page;
|
avalon.vmodels.problemPager.totalPage = data.data.total_page;
|
||||||
vm.previousPage = data.data.previous_page;
|
|
||||||
vm.nextPage = data.data.next_page;
|
|
||||||
vm.page = page;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bsAlert(data.data);
|
bsAlert(data.data);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
define("uploader", ["webUploader", "csrfToken"], function(webuploader,csrfTokenHeader){
|
define("uploader", ["webUploader", "csrfToken"], function (webuploader, csrfTokenHeader) {
|
||||||
function uploader(selector, server, onSuccess, beforeUpload) {
|
function uploader(selector, server, onSuccess, uploadProgress) {
|
||||||
var Webuploader= webuploader.create({
|
var Webuploader = webuploader.create({
|
||||||
auto: true,
|
auto: true,
|
||||||
// swf文件路径
|
// swf文件路径
|
||||||
swf: "/static/img/Uploader.swf",
|
swf: "/static/img/Uploader.swf",
|
||||||
@ -11,11 +11,16 @@ define("uploader", ["webUploader", "csrfToken"], function(webuploader,csrfTokenH
|
|||||||
pick: selector,
|
pick: selector,
|
||||||
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
|
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
|
||||||
resize: false,
|
resize: false,
|
||||||
uploadBeforeSend : csrfTokenHeader
|
uploadBeforeSend: csrfTokenHeader,
|
||||||
|
accept: {
|
||||||
|
title: 'testcase zip',
|
||||||
|
extensions: 'zip',
|
||||||
|
mimeTypes: 'application/zip'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
Webuploader.on("uploadBeforeSend",csrfTokenHeader);
|
Webuploader.on("uploadBeforeSend", csrfTokenHeader);
|
||||||
Webuploader.on("uploadSuccess", onSuccess);
|
Webuploader.on("uploadSuccess", onSuccess);
|
||||||
Webuploader.on("beforeFileQueued", beforeUpload);
|
Webuploader.on("uploadProgress", uploadProgress);
|
||||||
return Webuploader;
|
return Webuploader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,6 +105,7 @@
|
|||||||
<small class="text-info">请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:<br>
|
<small class="text-info">请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:<br>
|
||||||
1.in 1.out 2.in 2.out
|
1.in 1.out 2.in 2.out
|
||||||
</small>
|
</small>
|
||||||
|
<p>上传进度<span ms-text="uploadProgress * 100"></span>%</p>
|
||||||
<table class="table table-striped" ms-visible="uploadSuccess">
|
<table class="table table-striped" ms-visible="uploadSuccess">
|
||||||
<tr>
|
<tr>
|
||||||
<td>编号</td>
|
<td>编号</td>
|
||||||
|
@ -111,6 +111,7 @@
|
|||||||
<small class="text-info">请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:<br>
|
<small class="text-info">请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:<br>
|
||||||
1.in 1.out 2.in 2.out
|
1.in 1.out 2.in 2.out
|
||||||
</small>
|
</small>
|
||||||
|
<p>上传进度<span ms-text="uploadProgress * 100"></span>%</p>
|
||||||
<table class="table table-striped" ms-visible="uploadSuccess">
|
<table class="table table-striped" ms-visible="uploadSuccess">
|
||||||
<tr>
|
<tr>
|
||||||
<td>编号</td>
|
<td>编号</td>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<div class="form-group-sm">
|
<div class="form-group-sm">
|
||||||
<label>搜索</label>
|
<label>搜索</label>
|
||||||
<input name="keyWord" class="form-control" placeholder="请输入关键词" ms-duplex="keyword">
|
<input name="keyWord" class="form-control" placeholder="请输入关键词" ms-duplex="keyword">
|
||||||
<input type="submit" value="搜索" class="btn btn-primary" ms-click="getPage(1)">
|
<input type="submit" value="搜索" class="btn btn-primary" ms-click="search()">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<br>
|
<br>
|
||||||
@ -38,9 +38,7 @@
|
|||||||
<label>仅显示可见 <input ms-duplex-checked="showVisibleOnly" type="checkbox"/></label>
|
<label>仅显示可见 <input ms-duplex-checked="showVisibleOnly" type="checkbox"/></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
页数:{{ page }}/{{ totalPage }}
|
<ms:pager $id="problemPager" config="pager"></ms:pager>
|
||||||
<button ms-attr-class="getBtnClass('pre')" ms-click="getPrevious">上一页</button>
|
|
||||||
<button ms-attr-class="getBtnClass('next')" ms-click="getNext">下一页</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/static/js/app/admin/problem/problem.js"></script>
|
<script src="/static/js/app/admin/problem/problem.js"></script>
|
@ -36,7 +36,7 @@
|
|||||||
{% include "oj/problem/_problem_header.html" %}
|
{% include "oj/problem/_problem_header.html" %}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<h4>运行结果 : <span class="text-{{ submission.result|translate_result_class }}">
|
<h4>运行结果: <span class="text-{{ submission.result|translate_result_class }}">
|
||||||
{{ submission.result|translate_result }}
|
{{ submission.result|translate_result }}
|
||||||
</span>
|
</span>
|
||||||
</h4>
|
</h4>
|
||||||
|
Loading…
Reference in New Issue
Block a user