diff --git a/problem/serizalizers.py b/problem/serizalizers.py index 090e4c9..b6b9faf 100644 --- a/problem/serizalizers.py +++ b/problem/serizalizers.py @@ -67,4 +67,4 @@ class ProblemTagSerializer(serializers.ModelSerializer): class CreateProblemTagSerializer(serializers.Serializer): - name = serializers.CharField(max_length=10) \ No newline at end of file + name = serializers.CharField(max_length=10) diff --git a/static/src/js/app/admin/contest/contest.js b/static/src/js/app/admin/contest/contest.js index 3edfb6d..736ce58 100644 --- a/static/src/js/app/admin/contest/contest.js +++ b/static/src/js/app/admin/contest/contest.js @@ -1,6 +1,6 @@ -require(["jquery", "avalon", "editor", "uploader", "datetimepicker", - "validation","tagEditor"], - function ($, avalon, editor, uploader) { +require(["jquery", "avalon", "editor", "uploader", "bs_alert", "datetimepicker", + "validation",], + function ($, avalon, editor, uploader, bs_alert) { avalon.vmodels.add_contest = null; $("#add-contest-form") .formValidation({ @@ -72,10 +72,10 @@ require(["jquery", "avalon", "editor", "uploader", "datetimepicker", "cpu[]": { validators: { notEmpty: { - message: "请输入cpu时间" + message: "请输入时间限制" }, integer: { - message: "请输入一个合法的数字" + message: "时间限制用整数表示" }, between: { inclusive: true, @@ -125,13 +125,13 @@ require(["jquery", "avalon", "editor", "uploader", "datetimepicker", text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } - - - var editor1 = editor("#editor"); - + var upLoaderInited = false; + editor("#editor"); + var vm = avalon.define({ $id: "add_contest", title: "", + problemCount: 0, description: "", startTime: "", endTime: "", @@ -139,45 +139,27 @@ require(["jquery", "avalon", "editor", "uploader", "datetimepicker", model: "", openRank: false, problems: [], + problemNo: "-1", add_problem: function () { var problem_id = make_id(); var problem = { id: problem_id, title: "", - cpu: "", - memory: "", + cpu: 1000, + memory: 256, description: "", samples: [], visible: true, test_case_id: "", testCaseList: [], hint: "", - isVisible: false, difficulty: 0, - tags: [], - tag: "" + uploadSuccess: false }; vm.problems.push(problem); var id = vm.problems.length - 1; editor("#problem-" + problem_id + "-description"); var hinteditor = editor("#problem-" + problem_id +"-hint"); - $("#problem-" + problem_id +"-tags").tagEditor(); - uploader("#problem-" + problem_id + "-uploader", "/api/admin/test_case_upload/", function (file, respond) { - console.log(respond); - if (respond.code) - bs_alert(respond.data); - else { - vm.problems[id].test_case_id = respond.data.test_case_id; - vm.problems[id].uploadSuccess = true; - vm.problems[id].testCaseList = []; - for (var i = 0; i < respond.data.file_list.input.length; i++) { - vm.problems[id].push({ - input: respond.data.file_list.input[i], - output: respond.data.file_list.output[i] - }); - } - } - }); $("#add-contest-form").formValidation('addField', $('[name="problem_name[]"]')); $("#add-contest-form").formValidation('addField', $('[name="cpu[]"]')); $("#add-contest-form").formValidation('addField', $('[name="memory[]"]')); @@ -204,6 +186,35 @@ require(["jquery", "avalon", "editor", "uploader", "datetimepicker", return "展开"; } }); + + uploader("#uploader", "/api/admin/test_case_upload/", function (file, respond) { + if (respond.code) + bs_alert(respond.data); + else { + var index = parseInt(vm.problemNo)-1; + vm.problems[index].test_case_id = respond.data.test_case_id; + vm.problems[index].uploadSuccess = true; + vm.problems[index].testCaseList = []; + for (var i = 0; i < respond.data.file_list.input.length; i++) { + vm.problems[index].testCaseList.push({ + input: respond.data.file_list.input[i], + output: respond.data.file_list.output[i] + }); + } + bs_alert("测试数据添加成功!共添加"+vm.problems[index].testCaseList.length +"组测试数据"); + } + }, + function(){ + console.log(vm.problemNo); + if (vm.problemNo == "-1") + { + bs_alert("你还未指定一道题目!"); + return false; + } + } + ); + isUploaderInited = true; + avalon.scan(); $("#contest_start_time").datetimepicker({ diff --git a/static/src/js/app/admin/problem/add_problem.js b/static/src/js/app/admin/problem/add_problem.js index 8de48cd..d2eda56 100644 --- a/static/src/js/app/admin/problem/add_problem.js +++ b/static/src/js/app/admin/problem/add_problem.js @@ -134,7 +134,9 @@ require(["jquery", "avalon", "editor", "uploader", "bs_alert", "csrf", "tagEdito input: respond.data.file_list.input[i], output: respond.data.file_list.output[i] }); + } + bs_alert("测试数据添加成功!共添加"+vm.testCaseList.length +"组测试数据"); } }); var hinteditor = editor("#hint"); @@ -147,7 +149,7 @@ require(["jquery", "avalon", "editor", "uploader", "bs_alert", "csrf", "tagEdito memory: 256, samples: [], hint: "", - visible: false, + visible: true, difficulty: 0, tags: [], tag: "", diff --git a/static/src/js/utils/uploader.js b/static/src/js/utils/uploader.js index 83c2b1f..ddf073f 100644 --- a/static/src/js/utils/uploader.js +++ b/static/src/js/utils/uploader.js @@ -1,5 +1,5 @@ define("uploader", ["webuploader", "csrf"], function(webuploader,csrf){ - function uploader(selector, server, onSuccess) { + function uploader(selector, server, onSuccess, beforeUpload) { var Webuploader= webuploader.create({ auto: true, // swf文件路径 @@ -15,7 +15,7 @@ define("uploader", ["webuploader", "csrf"], function(webuploader,csrf){ }); Webuploader.on("uploadBeforeSend",csrf); Webuploader.on("uploadSuccess", onSuccess); - + Webuploader.on("beforeFileQueued", beforeUpload); return Webuploader; } diff --git a/template/admin/contest/add_contest.html b/template/admin/contest/add_contest.html index 4a2e37e..cd9936c 100644 --- a/template/admin/contest/add_contest.html +++ b/template/admin/contest/add_contest.html @@ -37,9 +37,7 @@
- +