diff --git a/static/src/js/app/admin/contest/add_contest.js b/static/src/js/app/admin/contest/addContest.js similarity index 97% rename from static/src/js/app/admin/contest/add_contest.js rename to static/src/js/app/admin/contest/addContest.js index 3b0073b..437fbdf 100644 --- a/static/src/js/app/admin/contest/add_contest.js +++ b/static/src/js/app/admin/contest/addContest.js @@ -36,7 +36,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date ajaxData.groups.push(parseInt(vm.choseGroupList[i].id)) } - console.log(ajaxData); $.ajax({ // Add contest beforeSend: csrfTokenHeader, url: "/api/admin/contest/", @@ -64,11 +63,9 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date } else { bsAlert(data.data); - console.log(data); } } }); - console.log(JSON.stringify(ajaxData)); } return false; }); diff --git a/static/src/js/app/admin/contest/contest_list.js b/static/src/js/app/admin/contest/contestList.js similarity index 86% rename from static/src/js/app/admin/contest/contest_list.js rename to static/src/js/app/admin/contest/contestList.js index 30f8678..9c1ba71 100644 --- a/static/src/js/app/admin/contest/contest_list.js +++ b/static/src/js/app/admin/contest/contestList.js @@ -21,6 +21,10 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", bsAlert("你没有选择参赛用户!"); return false; } + if (vm.editDescription == "") { + bsAlert("比赛描述不能为空!"); + return false; + } if (vm.choseGroupList[0].id == 0) { //everyone | public contest if (vm.editPassword) { ajaxData.password = vm.editPassword; @@ -36,29 +40,26 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", ajaxData.groups.push(parseInt(vm.choseGroupList[i].id)) } - console.log(ajaxData); - $.ajax({ // Add contest - beforeSend: csrfTokenHeader, - url: "/api/admin/contest/", - dataType: "json", - contentType: "application/json", - data: JSON.stringify(ajaxData), - method: "put", - contentType: "application/json", - success: function (data) { - if (!data.code) { - bsAlert("修改成功!"); - console.log(data); - vm.getPage(1); - } - else { - bsAlert(data.data); - console.log(data); - } - } - }); - console.log(JSON.stringify(ajaxData)); - } + $.ajax({ // Add contest + beforeSend: csrfTokenHeader, + url: "/api/admin/contest/", + dataType: "json", + contentType: "application/json", + data: JSON.stringify(ajaxData), + method: "put", + contentType: "application/json", + success: function (data) { + if (!data.code) { + bsAlert("修改成功!"); + vm.editingContestId = 0; // Hide the editor + vm.getPage(1); // Refresh the contest list + } + else { + bsAlert(data.data); + } + } + }); + } return false; }); @@ -90,7 +91,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", vm.editChoseGroupList= []; vm.editingProblemContestIndex= 0; } - else + else { var vm = avalon.define({ $id: "contestList", contestList: [], @@ -98,6 +99,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", nextPage: 0, page: 1, totalPage: 1, + showVisibleOnly: false, group: "-1", groupList: [], choseGroupList: [], @@ -139,6 +141,8 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", getPageData(page_index); }, showEditContestArea: function (contestId) { + if (vm.editingContestId && !confirm("如果继续将丢失未保存的信息,是否继续?")) + return; if (contestId == vm.editingContestId) vm.editingContestId = 0; else { @@ -148,15 +152,11 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", vm.editStartTime = vm.contestList[contestId-1].start_time.substring(0,16).replace("T"," "); vm.editEndTime = vm.contestList[contestId-1].end_time.substring(0,16).replace("T"," "); vm.editMode = vm.contestList[contestId-1].mode; - editVisible = vm.contestList[contestId-1].visible; + vm.editVisible = vm.contestList[contestId-1].visible; if (vm.contestList[contestId-1].contest_type == 0) { //contest type == 0, contest in group //Clear the choseGroupList - var stack = [], sp; - for (sp = 0; sp < vm.choseGroupList.length; sp++){ - stack. push(vm.choseGroupList[sp].index); - } - while (sp--){ - vm.removeGroup(stack[sp]); + while (vm.choseGroupList.length) { + vm.removeGroup(0); } for (var i = 0; i < vm.contestList[contestId-1].groups.length; i++){ @@ -215,8 +215,8 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", if (vm.groupList[vm.group].id == 0){ vm.passwordUsable = true; vm.choseGroupList = []; - for (var key in vm.groupList){ - vm.groupList[key].chose = true; + for (var i = 0; i < vm.groupList.length; i++) { + vm.groupList[i].chose = true; } } vm.groupList[vm.group]. chose = true; @@ -227,8 +227,8 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", removeGroup: function(groupIndex){ if (vm.groupList[vm.choseGroupList[groupIndex].index].id == 0){ vm.passwordUsable = false; - for (key in vm.groupList){ - vm.groupList[key].chose = false; + for (var i = 0; i < vm.groupList.length; i++) { + vm.groupList[i].chose = false; } } vm.groupList[vm.choseGroupList[groupIndex].index].chose = false; @@ -238,7 +238,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", vm.$fire("up!showContestProblemPage", 0, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, showProblemEditor: function(el) { - console.log(el); vm.$fire("up!showContestProblemPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, getYesOrNo: function(yORn) { @@ -246,6 +245,10 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", return "否"; } }); + vm.$watch("showVisibleOnly", function() { + getPageData(1); + }) + } getPageData(1); //init time picker @@ -264,6 +267,8 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", function getPageData(page) { var url = "/api/admin/contest/?paging=true&page=" + page + "&page_size=10"; + if (vm.showVisibleOnly) + url += "&visible=true" if (vm.keyword != "") url += "&keyword=" + vm.keyword; $.ajax({ diff --git a/static/src/js/app/admin/contest/edit_problem.js b/static/src/js/app/admin/contest/editProblem.js similarity index 100% rename from static/src/js/app/admin/contest/edit_problem.js rename to static/src/js/app/admin/contest/editProblem.js diff --git a/static/src/js/app/admin/problem/add_problem.js b/static/src/js/app/admin/problem/addProblem.js similarity index 100% rename from static/src/js/app/admin/problem/add_problem.js rename to static/src/js/app/admin/problem/addProblem.js diff --git a/static/src/js/app/admin/problem/edit_problem.js b/static/src/js/app/admin/problem/editProblem.js similarity index 99% rename from static/src/js/app/admin/problem/edit_problem.js rename to static/src/js/app/admin/problem/editProblem.js index 8805519..8e1ce6d 100644 --- a/static/src/js/app/admin/problem/edit_problem.js +++ b/static/src/js/app/admin/problem/editProblem.js @@ -158,7 +158,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE } else { var problem = data.data; - console.log(problem); vm.title = problem.title; vm.description = problem.description; vm.timeLimit = problem.time_limit; diff --git a/static/src/js/app/admin/problem/submission_list.js b/static/src/js/app/admin/problem/submissionList.js similarity index 91% rename from static/src/js/app/admin/problem/submission_list.js rename to static/src/js/app/admin/problem/submissionList.js index 21c451b..405cffa 100644 --- a/static/src/js/app/admin/problem/submission_list.js +++ b/static/src/js/app/admin/problem/submissionList.js @@ -1,4 +1,4 @@ -require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) { +require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) { avalon.ready(function () { avalon.vmodels.submissionList = null; @@ -41,9 +41,11 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function getPage: function (page_index) { getPageData(page_index); }, - showSubmissionDetailPage: function (submissionId) { + }, + showProblemListPage: function(){ + vm.$fire("up!showProblemListPage"); } }); diff --git a/static/src/js/app/admin/user/userList.js b/static/src/js/app/admin/user/userList.js index 0842dc5..3f80c89 100644 --- a/static/src/js/app/admin/user/userList.js +++ b/static/src/js/app/admin/user/userList.js @@ -3,58 +3,68 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "validator"], function ($, // avalon:定义模式 userList avalon.ready(function () { - avalon.vmodels.userList = null; - var vm = avalon.define({ - $id: "userList", - //通用变量 - userList: [], - previousPage: 0, - nextPage: 0, - page: 1, - editingUserId: 0, - totalPage: 1, - userType: ["一般用户", "管理员", "超级管理员"], - keyword: "", - showAdminOnly: false, - //编辑区域同步变量 - username: "", - realName: "", - email: "", - adminType: 0, - id: 0, - getNext: function () { - if (!vm.nextPage) - return; - getPageData(vm.page + 1); - }, - getPrevious: function () { - if (!vm.previousPage) - return; - getPageData(vm.page - 1); - }, - getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑 - if (btn) { - return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled"; + //avalon.vmodels.userList = null; + if (avalon.vmodels.userList) { + var vm = avalon.vmodels.userList; + // initialize avalon object + userList = []; previousPage= 0; nextPage= 0; page = 1; + editingUserId= 0; totalPage = 1; keyword= ""; showAdminOnly= false; + //user editor fields + username= ""; realName= ""; email= ""; adminType= 0; id= 0; + } + else { + var vm = avalon.define({ + $id: "userList", + //通用变量 + userList: [], + previousPage: 0, + nextPage: 0, + page: 1, + editingUserId: 0, + totalPage: 1, + userType: ["一般用户", "管理员", "超级管理员"], + keyword: "", + showAdminOnly: false, + //编辑区域同步变量 + username: "", + realName: "", + email: "", + adminType: 0, + id: 0, + getNext: function () { + if (!vm.nextPage) + return; + getPageData(vm.page + 1); + }, + 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"; + } + }, + editUser: function (user) { //点击编辑按钮的事件,显示/隐藏编辑区 + vm.username = user.username; + vm.realName = user.real_name; + vm.adminType = user.admin_type; + vm.email = user.email; + vm.id = user.id; + if (vm.editingUserId == user.id) + vm.editingUserId = 0; + else + vm.editingUserId = user.id; + }, + search: function () { + getPageData(1); } - else { - return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; - } - }, - editUser: function (user) { //点击编辑按钮的事件,显示/隐藏编辑区 - vm.username = user.username; - vm.realName = user.real_name; - vm.adminType = user.admin_type; - vm.email = user.email; - vm.id = user.id; - if (vm.editingUserId == user.id) - vm.editingUserId = 0; - else - vm.editingUserId = user.id; - }, - search: function () { - getPageData(1); - } - }); + }); + } vm.$watch("showAdminOnly", function () { getPageData(1); }); diff --git a/submission/views.py b/submission/views.py index 6399e22..d9a6377 100644 --- a/submission/views.py +++ b/submission/views.py @@ -164,7 +164,7 @@ class ContestSubmissionAPIView(APIView): """ 创建比赛的提交 --- - request_serializer: ConestSubmissionSerializer + request_serializer: CreateContestSubmissionSerializer """ serializer = CreateContestSubmissionSerializer(data=request.data) if serializer.is_valid(): diff --git a/template/admin/contest/add_contest.html b/template/admin/contest/add_contest.html index a1042e8..6f237c5 100644 --- a/template/admin/contest/add_contest.html +++ b/template/admin/contest/add_contest.html @@ -103,4 +103,4 @@ - + diff --git a/template/admin/contest/contest_list.html b/template/admin/contest/contest_list.html index 09f9ffc..5c15629 100644 --- a/template/admin/contest/contest_list.html +++ b/template/admin/contest/contest_list.html @@ -34,6 +34,9 @@ +