From 78050548aa2217522b21f1145f531a2cd9093517 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 19 Aug 2015 10:50:09 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=E6=B7=BB=E5=8A=A0=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E9=A1=B5=E9=9D=A2=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=AE=8C?= =?UTF-8?q?=E5=96=84,=E6=B7=BB=E5=8A=A0=E5=AD=97=E6=AE=B5=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=E6=98=AF=E5=90=A6=E6=98=BE=E7=A4=BA=E6=8F=90=E4=BA=A4?= =?UTF-8?q?,=E6=AF=94=E8=B5=9B=E6=A8=A1=E5=BC=8F,=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=88=86=E5=80=BC,=E5=85=81=E8=AE=B8=E5=8F=82=E5=8A=A0?= =?UTF-8?q?=E6=AF=94=E8=B5=9B=E7=9A=84=E7=94=A8=E6=88=B7=E7=BB=84,?= =?UTF-8?q?=E5=B9=B6=E5=AE=8C=E5=96=84=E5=86=85=E9=83=A8=E9=80=BB=E8=BE=91?= =?UTF-8?q?,=E5=9F=BA=E6=9C=AC=E5=8F=AF=E7=94=A8=E4=BA=86,=E5=8F=AA?= =?UTF-8?q?=E6=98=AF=E6=B2=A1=E5=86=99ajax=E6=8F=90=E4=BA=A4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE,=E5=92=8C=E5=95=E6=8B=89=E5=E5=8F=96=E5=B0=8F?= =?UTF-8?q?=E7=BB=84=E4=BF=A1=E6=81=AF=E7=9A=84=E9=83=A8=E5=88=86[CI=20SKI?= =?UTF-8?q?P]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/css/add_contest.css | 5 + .../src/js/app/admin/contest/add_contest.js | 135 ++++++++++-------- template/admin/contest/add_contest.html | 111 ++++++++------ 3 files changed, 153 insertions(+), 98 deletions(-) create mode 100644 static/src/css/add_contest.css diff --git a/static/src/css/add_contest.css b/static/src/css/add_contest.css new file mode 100644 index 0000000..f9a00e6 --- /dev/null +++ b/static/src/css/add_contest.css @@ -0,0 +1,5 @@ +.group-tag { + padding-left: 5px; color: #46799b; background: #e0eaf1; white-space: nowrap; + overflow: hidden; cursor: pointer; border-radius: 2px 0 0 2px; + float: left; padding: 0 4px;box-sizing: border-box;list-style-type: none; margin: 5px; +} diff --git a/static/src/js/app/admin/contest/add_contest.js b/static/src/js/app/admin/contest/add_contest.js index e461bf7..8b89c79 100644 --- a/static/src/js/app/admin/contest/add_contest.js +++ b/static/src/js/app/admin/contest/add_contest.js @@ -3,44 +3,44 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date function ($, avalon, editor, uploader, bsAlert, csrfTokenHeader) { avalon.vmodels.add_contest = null; $("#add-contest-form").validator().on('submit', function (e) { - e.preventDefault(); - var data = { - title: vm.title, - description: vm.description, - start_time: vm.startTime, - end_time: vm.endTime, - password: vm.password, - mode: vm.model, - show_rank: vm.openRank - }; - $.ajax({ - beforeSend: csrfTokenHeader, - url: "/api/admin/contest/", - dataType: "json", - data: data, - method: "post", - contentType: "application/json", - success: function (data) { - if (!data.code) { - bsAlert("添加成功!"); - console.log(data); - } - else { - bsAlert(data.data); - console.log(data); - } - } - }); - console.log(data); + if (!e.isDefaultPrevented()){ + alert("smoething went wrong!"); + } + else{ + var data = { + title: vm.title, + description: vm.description, + start_time: vm.startTime, + end_time: vm.endTime, + password: vm.password, + mode: vm.model, + show_rank: vm.openRank + }; + $.ajax({ + beforeSend: csrfTokenHeader, + url: "/api/admin/contest/", + dataType: "json", + data: data, + method: "post", + contentType: "application/json", + success: function (data) { + if (!data.code) { + bsAlert("添加成功!"); + console.log(data); + } + else { + bsAlert(data.data); + console.log(data); + } + } + }); + console.log(data); + } + return false; }) - function make_id() { - var text = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for (var i = 0; i < 5; i++) - text += possible.charAt(Math.floor(Math.random() * possible.length)); - return text; - } editor("#editor"); + editor("#problemDescriptionEditor"); + editor("#problemHintEditor"); var vm = avalon.define({ $id: "add_contest", @@ -49,27 +49,36 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date startTime: "", endTime: "", password: "", - model: "", - openRank: false, + mode: "", + showRank: false, + showSubmission: false, problems: [], editingProblemId: 0, editSamples: [], editTestCaseList: [], + group: "-1", + groupList: [{name:"Every one", id:1, choosed: false},{name:"Group one", id :3, choosed: false},{name:"Group two", id:5, choosed: false}], + choosedGroupList: [], showProblemEditArea: function (problemIndex) { if (vm.editingProblemId == problemIndex){ vm.problems[vm.editingProblemId-1].samples = vm.editSamples; vm.editingProblemId = 0; } else { - vm.problems[problemIndex-1].samples = vm.editSamples; - vm.problems[problemIndex-1].testCaseList = vm.editTestCaseList; - vm.editingProblemId = problemIndex; - editSamples = vm.problems[vm.editingProblemId-1].samples; - editTestCaseList = vm.problems[vm.editingProblemId-1].testCaseList; + if (vm.editingProblemId) + { + vm.problems[vm.editingProblemId-1].samples = vm.editSamples; + vm.problems[vm.editingProblemId-1].testCaseList = vm.editTestCaseList; + } + vm.editingProblemId = problemIndex; + vm.editSamples = []; + vm.editSamples = vm.problems[vm.editingProblemId-1].samples; + vm.editTestCaseList = []; + vm.editTestCaseList = vm.problems[vm.editingProblemId-1].testCaseList; } }, + passwordUsable: false, add_problem: function () { - var problem_id = make_id(); var problem = { title: "", timeLimit: 1000, @@ -101,7 +110,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date item.visible = !item.visible; }, add_sample: function () { - //vm.problems[vm.editingProblemId-1].samples.push({visible: true, input: "", output: ""}); vm.editSamples.push({visible: true, input: "", output: ""}); }, del_sample: function (sample) { @@ -113,7 +121,29 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date if (item.visible) return "折叠"; return "展开"; - } + }, + addGroup: function() { + if (vm.group == -1) return; + if (vm.groupList[vm.group].id == 1){ + vm.passwordUsable = true; + vm.choosedGroupList = []; + for (var key in vm.groupList){ + vm.groupList[key].choosed = true; + } + } + vm.groupList[vm.group]. choosed = true; + vm.choosedGroupList .push({name:vm.groupList[vm.group].name, index:vm.group, id:vm.groupList[vm.group].id}); + }, + unchoosed: function(groupIndex){ + if (vm.groupList[vm.choosedGroupList[groupIndex].index].id == 1){ + vm.passwordUsable = false; + for (key in vm.groupList){ + vm.groupList[key].choosed = false; + } + } + vm.groupList[vm.choosedGroupList[groupIndex].index].choosed = false; + vm.choosedGroupList.remove(vm.choosedGroupList[groupIndex]); + } }); uploader("#uploader", "/api/admin/test_case_upload/", function (file, respond) { @@ -130,11 +160,10 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date }); } vm.problems[vm.editingProblemId-1].testCaseList = vm.editTestCaseList; - bsAlert("测试数据添加成功!共添加"+editTestCaseList.length +"组测试数据"); + bsAlert("测试数据添加成功!共添加"+vm.editTestCaseList.length +"组测试数据"); } }, function(){ - console.log(vm.problemNo); if (vm.editingProblemId == 0) { bsAlert("你还未指定一道题目!"); @@ -157,14 +186,4 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date weekStart: 1, language: "zh-CN" }); - $("#contest_start_time").datetimepicker() - .on("hide", function (ev) { - $("#add-contest-form") - .formValidation("revalidateField", "start_time"); - }); - $("#contest_end_time").datetimepicker() - .on("hide", function (ev) { - $("#add-contest-form") - .formValidation("revalidateField", "end_time"); - }); }); diff --git a/template/admin/contest/add_contest.html b/template/admin/contest/add_contest.html index 7db52c7..f4be26d 100644 --- a/template/admin/contest/add_contest.html +++ b/template/admin/contest/add_contest.html @@ -6,7 +6,9 @@
- + +
@@ -15,6 +17,7 @@
+
请填写比赛描述
@@ -27,51 +30,75 @@
+ ms-duplex="startTime" data-error="请填写比赛开始时间" required> +
- + +
- -
+
+ +
+
-
- -
-
- +
+
+ +
- +
+
+
{{el.name}}
+
+
+ +
+ +
+
+ +
+
- -
-
- +
+
+ +
+
添加 @@ -100,17 +127,14 @@
题目{{editingProblemId}} - - 隐藏 - - - 删除 - + 隐藏 + 删除
- + +
@@ -125,15 +149,18 @@
- + +
- + +
-
+
- + +
@@ -168,14 +195,9 @@
- -
-
选择文件
-
- 请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:
- 1.in 1.out 2.in 2.out -
- + + +
@@ -193,6 +215,14 @@
+ +
+
选择文件
+
+ 请将所有测试用例打包在一个文件中上传,所有文件要在压缩包的根目录,且输入输出文件名要以从1开始连续数字标识要对应例如:
+ 1.in 1.out 2.in 2.out +

+
@@ -201,3 +231,4 @@ +
编号 输入文件名