From 064effe3bfc5b480e65a3b801c3e6d3eedbd68db Mon Sep 17 00:00:00 2001 From: esp Date: Tue, 25 Aug 2015 14:19:44 +0800 Subject: [PATCH 01/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=E5=8E=BB=E6=8E=89joi?= =?UTF-8?q?nGroupRequest.js=E9=87=8C=E9=94=99=E8=AF=AF=E7=9A=84=E4=BE=9D?= =?UTF-8?q?=E8=B5=96,=E6=97=A7=E7=9A=84formvalidator=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E8=A2=AB=E5=88=A0=E6=8E=89=E4=BA=86~[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/group/joinGroupRequestList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/src/js/app/admin/group/joinGroupRequestList.js b/static/src/js/app/admin/group/joinGroupRequestList.js index e565aad7..8b9859ad 100644 --- a/static/src/js/app/admin/group/joinGroupRequestList.js +++ b/static/src/js/app/admin/group/joinGroupRequestList.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:定义模式 group_list avalon.ready(function () { From a2c90093a10f816689aeb5344131565a075779b3 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 11:28:26 +0800 Subject: [PATCH 02/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=AF=94=E8=B5=9B=E7=AE=A1=E7=90=86=E4=B8=AD=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=9A=84=E9=A1=B5=E9=9D=A2,=E6=9C=AA?= =?UTF-8?q?=E4=B8=8E=E5=90=8E=E7=AB=AF=E5=AF=B9=E6=8E=A5[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/admin.js | 10 ++- .../src/js/app/admin/contest/contestList.js | 5 +- .../js/app/admin/contest/submissionList.js | 84 +++++++++++++++++++ template/src/admin/contest/contest_list.html | 5 +- .../src/admin/contest/submission_list.html | 34 ++++++++ 5 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 static/src/js/app/admin/contest/submissionList.js create mode 100644 template/src/admin/contest/submission_list.html diff --git a/static/src/js/app/admin/admin.js b/static/src/js/app/admin/admin.js index bd0d51e2..9246f7f3 100644 --- a/static/src/js/app/admin/admin.js +++ b/static/src/js/app/admin/admin.js @@ -133,11 +133,17 @@ define("admin", ["jquery", "avalon"], function ($, avalon) { vm.template_url = "template/contest/edit_problem.html"; }); - vm.$watch("showContestListPage", function (problemId) { - vm.problemId = problemId; + vm.$watch("showContestListPage", function () { vm.template_url = "template/contest/contest_list.html"; }); + vm.$watch("showContestSubmissionPage", function (problemId, contestId, contestMode) { + vm.$problemId = problemId; + vm.$contestId = contestId; + vm.$contestMode = contestMode + vm.template_url = "template/contest/submission_list.html"; + }); + avalon.scan(); window.onhashchange = function () { diff --git a/static/src/js/app/admin/contest/contestList.js b/static/src/js/app/admin/contest/contestList.js index 9c1ba71b..ae3606c6 100644 --- a/static/src/js/app/admin/contest/contestList.js +++ b/static/src/js/app/admin/contest/contestList.js @@ -234,12 +234,15 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", vm.groupList[vm.choseGroupList[groupIndex].index].chose = false; vm.choseGroupList.remove(vm.choseGroupList[groupIndex]); }, - add_problem: function () { + addProblem: function () { vm.$fire("up!showContestProblemPage", 0, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, showProblemEditor: function(el) { vm.$fire("up!showContestProblemPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, + showSubmissionPage: function() { + vm.$fire("up!showContestSubmissionPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); + } getYesOrNo: function(yORn) { if (yORn) return "是"; return "否"; diff --git a/static/src/js/app/admin/contest/submissionList.js b/static/src/js/app/admin/contest/submissionList.js new file mode 100644 index 00000000..ff375b21 --- /dev/null +++ b/static/src/js/app/admin/contest/submissionList.js @@ -0,0 +1,84 @@ +require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) { + + avalon.ready(function () { + + if (avalon.vmodels.contestSubmissionList){ + var vm = avalon.vmodels.contestSubmissionList; + } + else { + + var vm = avalon.define({ + $id: "contestSubmissionList", + submissionList: [], + previousPage: 0, + nextPage: 0, + page: 1, + totalPage: 1, + results : { + 0: "Accepted", + 1: "Runtime Error", + 2: "Time Limit Exceeded", + 3: "Memory Limit Exceeded", + 4: "Compile Error", + 5: "Format Error", + 6: "Wrong Answer", + 7: "System Error", + 8: "Waiting" + }, + 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"; + } + }, + getPage: function (page_index) { + getPageData(page_index); + }, + showSubmissionDetailPage: function (submissionId) { + + }, + showProblemListPage: function(){ + vm.$fire("up!showProblemListPage"); + } + }); + } + + getPageData(1); + + function getPageData(page) { + var url = "/api/admin/submission/?paging=true&page=" + page + "&page_size=10&problem_id=" + avalon.vmodels.admin.problemId; + $.ajax({ + url: url, + dataType: "json", + method: "get", + success: function (data) { + if (!data.code) { + vm.submissionList = data.data.results; + vm.totalPage = data.data.total_page; + vm.previousPage = data.data.previous_page; + vm.nextPage = data.data.next_page; + vm.page = page; + } + else { + bsAlert(data.data); + } + } + }); + } + + + }); + avalon.scan(); +}); \ No newline at end of file diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index 5c156299..b5e4d6ab 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -30,7 +30,7 @@ {{ el.created_by.username }} 编辑 - 编辑问题 + 题目 @@ -158,7 +158,8 @@
- 添加 + 添加 + 查看提交 diff --git a/template/src/admin/contest/submission_list.html b/template/src/admin/contest/submission_list.html new file mode 100644 index 00000000..fc8ee7df --- /dev/null +++ b/template/src/admin/contest/submission_list.html @@ -0,0 +1,34 @@ +
+ +

提交列表

+ +
编号
+ + + + + + + + + + + + + + +
ID创建时间作者结果
{{ el.id }}{{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}}{{ el.user }}{{ results[el.result] }} + 详情 +
+
+ 页数:{{ page }}/{{ totalPage }}   + + +
+
+ \ No newline at end of file From d2515bf886dbf83d8eac25d74881c833aaaf1b32 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 11:35:21 +0800 Subject: [PATCH 03/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E7=BB=8F=E8=BF=87=E6=B5=8B=E8=AF=95=E8=BF=98=E6=98=AF=E6=9C=89?= =?UTF-8?q?=E4=BA=9B=E9=97=AE=E9=A2=98(=E6=AF=94=E5=A6=82=E5=85=AC?= =?UTF-8?q?=E5=91=8A=E9=A1=B5=E9=9D=A2=E5=9C=A8=E9=87=8D=E5=A4=8D=E8=BD=BD?= =?UTF-8?q?=E5=85=A5=E5=90=8E=E4=BB=85=E6=98=BE=E7=A4=BA=E5=8F=AF=E8=A7=81?= =?UTF-8?q?=E7=9A=84ms-duplex-checked=E5=B0=B1=E5=A4=B1=E6=95=88=E4=BA=86,?= =?UTF-8?q?=E4=BD=86=E6=98=AF=E4=BB=85=E6=98=AF=E5=9C=A8=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=B6=E5=A4=B1=E6=95=88,=E4=BD=A0?= =?UTF-8?q?=E7=82=B9=E4=BB=96=E5=88=B0=E4=B9=9F=E8=BF=98=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?...)=E6=89=80=E4=BB=A5=E5=B9=B2=E8=84=86=E6=8A=8A=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E8=BF=99=E4=BA=9Bavalon=E9=83=BD=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=88=90=E4=B8=80=E6=A0=B7=E7=9A=84=E5=A4=84=E7=90=86=E4=BA=86?= =?UTF-8?q?[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/app/admin/announcement/announcement.js | 221 +++++++++--------- static/src/js/app/admin/group/group.js | 84 +++---- static/src/js/app/admin/group/groupDetail.js | 97 ++++---- .../app/admin/group/joinGroupRequestList.js | 162 ++++--------- static/src/js/app/admin/problem/problem.js | 1 + .../js/app/admin/problem/submissionList.js | 98 ++++---- static/src/js/app/admin/user/userList.js | 6 +- 7 files changed, 313 insertions(+), 356 deletions(-) diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js index 7dd2051b..e5585858 100644 --- a/static/src/js/app/admin/announcement/announcement.js +++ b/static/src/js/app/admin/announcement/announcement.js @@ -1,127 +1,132 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator"], function ($, avalon, csrfTokenHeader, bsAlert, editor) { avalon.ready(function () { - avalon.vmodels.announcement = null; var createAnnouncementEditor = editor("#create-announcement-editor"); var editAnnouncementEditor = editor("#edit-announcement-editor"); + if (avalon.vmodels.announcement){ + var vm = avalon.vmodels.announcement; + announcementList = []; + } + else { - var vm = avalon.define({ - $id: "announcement", - //通用变量 - announcementList: [], // 公告列表数据项 - previousPage: 0, // 之前的页数 - nextPage: 0, // 之后的页数 - page: 1, // 当前页数 - editingAnnouncementId: 0, // 正在编辑的公告的ID, 为零说明未在编辑 - totalPage: 1, // 总页数 - showVisibleOnly: false, //仅显示可见公告 - // 编辑 - newTitle: "", - announcementVisible: 0, - showGlobalViewRadio: true, - isGlobal: true, - allGroups: [], - getState: function (el) { //获取公告当前状态,显示 - if (el.visible) - return "可见"; - else - return "隐藏"; - }, - getNext: function () { - if (!vm.nextPage) - return; - getPageData(vm.page + 1); - }, - getPrevious: function () { - if (!vm.previousPage) - return; - getPageData(vm.page - 1); - }, - getBtnClass: function (btnType) { - if (btnType == "next") { - return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled"; - } - else { - return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; - } + var vm = avalon.define({ + $id: "announcement", + //通用变量 + announcementList: [], // 公告列表数据项 + previousPage: 0, // 之前的页数 + nextPage: 0, // 之后的页数 + page: 1, // 当前页数 + editingAnnouncementId: 0, // 正在编辑的公告的ID, 为零说明未在编辑 + totalPage: 1, // 总页数 + showVisibleOnly: false, //仅显示可见公告 + // 编辑 + newTitle: "", + announcementVisible: 0, + showGlobalViewRadio: true, + isGlobal: true, + allGroups: [], + getState: function (el) { //获取公告当前状态,显示 + if (el.visible) + return "可见"; + else + return "隐藏"; + }, + getNext: function () { + if (!vm.nextPage) + return; + getPageData(vm.page + 1); + }, + getPrevious: function () { + if (!vm.previousPage) + return; + getPageData(vm.page - 1); + }, + getBtnClass: function (btnType) { + if (btnType == "next") { + return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled"; + } + else { + return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; + } - }, - editAnnouncement: function (announcement) { - vm.newTitle = announcement.title; - editAnnouncementEditor.setValue(announcement.content); - vm.announcementVisible = announcement.visible; - if (vm.editingAnnouncementId == announcement.id) + }, + editAnnouncement: function (announcement) { + vm.newTitle = announcement.title; + editAnnouncementEditor.setValue(announcement.content); + vm.announcementVisible = announcement.visible; + if (vm.editingAnnouncementId == announcement.id) + vm.editingAnnouncementId = 0; + else + vm.editingAnnouncementId = announcement.id; + vm.isGlobal = announcement.is_global; + for (var i = 0; i < announcement.groups.length; i++) { + for (var j = 0; j < vm.allGroups.length; j++) { + if (announcement.groups[i] == vm.allGroups[j].id) { + vm.allGroups[j].isSelected = true; + } + } + } + editAnnouncementEditor.focus(); + }, + cancelEdit: function () { vm.editingAnnouncementId = 0; - else - vm.editingAnnouncementId = announcement.id; - vm.isGlobal = announcement.is_global; - for (var i = 0; i < announcement.groups.length; i++) { - for (var j = 0; j < vm.allGroups.length; j++) { - if (announcement.groups[i] == vm.allGroups[j].id) { - vm.allGroups[j].isSelected = true; + }, + submitChange: function () { + var title = vm.newTitle; + var content = editAnnouncementEditor.getValue(); + + if (content == "" || title == "") { + bsAlert("标题和内容都不能为空"); + return false; + } + + var selectedGroups = []; + if (!vm.isGlobal) { + for (var i = 0; i < vm.allGroups.length; i++) { + if (vm.allGroups[i].isSelected) { + selectedGroups.push(vm.allGroups[i].id); + } } } - } - editAnnouncementEditor.focus(); - }, - cancelEdit: function () { - vm.editingAnnouncementId = 0; - }, - submitChange: function () { - var title = vm.newTitle; - var content = editAnnouncementEditor.getValue(); - if (content == "" || title == "") { - bsAlert("标题和内容都不能为空"); - return false; - } - - var selectedGroups = []; - if (!vm.isGlobal) { - for (var i = 0; i < vm.allGroups.length; i++) { - if (vm.allGroups[i].isSelected) { - selectedGroups.push(vm.allGroups[i].id); - } + if (!vm.isGlobal && !selectedGroups.length) { + bsAlert("请至少选择一个小组"); + return false; } - } - if (!vm.isGlobal && !selectedGroups.length) { - bsAlert("请至少选择一个小组"); - return false; - } - - $.ajax({ - beforeSend: csrfTokenHeader, - url: "/api/admin/announcement/", - contentType: "application/json", - dataType: "json", - method: "put", - data: JSON.stringify({ - id: vm.editingAnnouncementId, - title: title, - content: content, - visible: vm.announcementVisible, - is_global: vm.isGlobal, - groups: selectedGroups - }), - success: function (data) { - if (!data.code) { - bsAlert("修改成功"); - vm.editingAnnouncementId = 0; - getPageData(1); + $.ajax({ + beforeSend: csrfTokenHeader, + url: "/api/admin/announcement/", + contentType: "application/json", + dataType: "json", + method: "put", + data: JSON.stringify({ + id: vm.editingAnnouncementId, + title: title, + content: content, + visible: vm.announcementVisible, + is_global: vm.isGlobal, + groups: selectedGroups + }), + success: function (data) { + if (!data.code) { + bsAlert("修改成功"); + vm.editingAnnouncementId = 0; + getPageData(1); + } + else { + bsAlert(data.data); + } } - else { - bsAlert(data.data); - } - } - }); + }); - } - }); - vm.$watch("showVisibleOnly", function () { - getPageData(1); - }); + } + }); + vm.$watch("showVisibleOnly", function () { + getPageData(1); + }); + } getPageData(1); diff --git a/static/src/js/app/admin/group/group.js b/static/src/js/app/admin/group/group.js index 470f9caf..7327dbaf 100644 --- a/static/src/js/app/admin/group/group.js +++ b/static/src/js/app/admin/group/group.js @@ -1,47 +1,53 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) { - avalon.ready(function () { - avalon.vmodels.group = null; - var vm = avalon.define({ - $id: "group", - //通用变量 - groupList: [], // 用户列表数据项 - previousPage: 0, // 之前的页数 - nextPage: 0, // 之后的页数 - page: 1, // 当前页数 - totalPage: 1, // 总页数 - keyword: "", + //avalon.vmodels.group = null; + if (avalon.vmodels.group) { + var vm = avalon.vmodels.group; + } + else { - getNext: function () { - if (!vm.nextPage) - return; - getPageData(vm.page + 1); - }, - getPrevious: function () { - if (!vm.previousPage) - return; - getPageData(vm.page - 1); - }, - getBtnClass: function (btnType) { - if (btnType == "next") { - return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled"; - } - else { - return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; - } + var vm = avalon.define({ + $id: "group", + //通用变量 + groupList: [], // 用户列表数据项 + previousPage: 0, // 之前的页数 + nextPage: 0, // 之后的页数 + page: 1, // 当前页数 + totalPage: 1, // 总页数 + keyword: "", + + getNext: function () { + if (!vm.nextPage) + return; + getPageData(vm.page + 1); + }, + getPrevious: function () { + if (!vm.previousPage) + return; + getPageData(vm.page - 1); + }, + getBtnClass: function (btnType) { + if (btnType == "next") { + return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled"; + } + else { + return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; + } + + }, + search: function(){ + getPageData(1); + }, + getGroupSettingString: function (setting) { + return {0: "允许任何人加入", 1: "提交请求后管理员审核", 2: "不允许任何人加入"}[setting] + }, + showGroupDetailPage: function (groupId) { + vm.$fire("up!showGroupDetailPage", groupId); + } + }); + } - }, - search: function(){ - getPageData(1); - }, - getGroupSettingString: function (setting) { - return {0: "允许任何人加入", 1: "提交请求后管理员审核", 2: "不允许任何人加入"}[setting] - }, - showGroupDetailPage: function (groupId) { - vm.$fire("up!showGroupDetailPage", groupId); - } - }); getPageData(1); function getPageData(page) { diff --git a/static/src/js/app/admin/group/groupDetail.js b/static/src/js/app/admin/group/groupDetail.js index cddc755d..c06f9ce0 100644 --- a/static/src/js/app/admin/group/groupDetail.js +++ b/static/src/js/app/admin/group/groupDetail.js @@ -3,55 +3,60 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "validator"], function ($, // avalon:定义模式 group_list avalon.ready(function () { - avalon.vmodels.groupDetail = null; - var vm = avalon.define({ - $id: "groupDetail", - //通用变量 - memberList: [], - previousPage: 0, - nextPage: 0, - page: 1, - totalPage: 1, - name: "", - description: "", - checkedSetting: "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"; - } - }, + if (avalon.vmodels.groupDetail) { + var vm = avalon.vmodels.groupDetail; + } + else { + var vm = avalon.define({ + $id: "groupDetail", + //通用变量 + memberList: [], + previousPage: 0, + nextPage: 0, + page: 1, + totalPage: 1, + name: "", + description: "", + checkedSetting: "0", - removeMember: function (relation) { - $.ajax({ - beforeSend: csrfTokenHeader, - url: "/api/admin/group_member/", - method: "put", - data: JSON.stringify({group_id: relation.group, members: [relation.user.id]}), - contentType: "application/json", - success: function (data) { - vm.memberList.remove(relation); - bsAlert(data.data); + 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"; } - }) - }, - showGroupListPage: function () { - vm.$fire("up!showGroupListPage"); - } - }); + else { + return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; + } + }, + + removeMember: function (relation) { + $.ajax({ + beforeSend: csrfTokenHeader, + url: "/api/admin/group_member/", + method: "put", + data: JSON.stringify({group_id: relation.group, members: [relation.user.id]}), + contentType: "application/json", + success: function (data) { + vm.memberList.remove(relation); + bsAlert(data.data); + } + }) + }, + showGroupListPage: function () { + vm.$fire("up!showGroupListPage"); + } + }); + } avalon.scan(); getPageData(1); diff --git a/static/src/js/app/admin/group/joinGroupRequestList.js b/static/src/js/app/admin/group/joinGroupRequestList.js index 8b9859ad..b178a801 100644 --- a/static/src/js/app/admin/group/joinGroupRequestList.js +++ b/static/src/js/app/admin/group/joinGroupRequestList.js @@ -2,50 +2,56 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT // avalon:定义模式 group_list avalon.ready(function () { - avalon.vmodels.requestList = null; - var vm = avalon.define({ - $id: "requestList", - //通用变量 - requestList: [], // 列表数据项 - previousPage: 0, // 之前的页数 - nextPage: 0, // 之后的页数 - page: 1, // 当前页数 - totalPage: 1, // 总页数 - 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"; - } - }, - getPage: function (page_index) { - getPageData(page_index); - }, - processRequest: function(request, status){ - $.ajax({ - beforeSend: csrfTokenHeader, - url: "/api/admin/join_group_request/", - method: "put", - data: {request_id: request.id, status: status}, - success: function(data){ - vm.requestList.remove(request); - bsAlert(data.data); + if (avalon.vmodels.requestList) { + var vm = avalon.vmodels.requestList; + } + else { + + var vm = avalon.define({ + $id: "requestList", + //通用变量 + requestList: [], // 列表数据项 + previousPage: 0, // 之前的页数 + nextPage: 0, // 之后的页数 + page: 1, // 当前页数 + totalPage: 1, // 总页数 + + 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"; + } + }, + getPage: function (page_index) { + getPageData(page_index); + }, + processRequest: function(request, status){ + $.ajax({ + beforeSend: csrfTokenHeader, + url: "/api/admin/join_group_request/", + method: "put", + data: {request_id: request.id, status: status}, + success: function(data){ + vm.requestList.remove(request); + bsAlert(data.data); + } + }) + } + }); + } avalon.scan(); getPageData(1); @@ -72,78 +78,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT }); } - /*$("#edit_user-form") - .formValidation({ - framework: "bootstrap", - fields: { - username: { - validators: { - notEmpty: { - message: "请填写用户名" - }, - stringLength: { - min: 3, - max: 30, - message: '用户名长度必须在3到30位之间' - } - } - }, - real_name: { - validators: { - notEmpty: { - message: "请填写真实姓名" - } - } - }, - email: { - validators: { - notEmpty: { - message: "请填写电子邮箱邮箱地址" - }, - emailAddress: { - message: "请填写有效的邮箱地址" - } - } - }, - password: { - validators: { - stringLength: { - min: 6, - max: 30, - message: '密码长度必须在6到30位之间' - } - } - } - } - } - ).on('success.form.fv', function (e) { - e.preventDefault(); - var data = { - username: vm.username, - real_name: vm.real_name, - email: vm.email, - id: vm.id, - admin_type: vm.admin_type - }; - if ($("#password").val() !== "") - data.password = $("#password").val(); - $.ajax({ - beforeSend: csrfHeader, - url: "/api/admin/user/", - data: data, - dataType: "json", - method: "put", - success: function (data) { - if (!data.code) { - bsAlert("提交成功!"); - getPageData(1); - $("#password").val(""); - } else { - bsAlert(data.data); - } - } - }) - });*/ }); }); \ No newline at end of file diff --git a/static/src/js/app/admin/problem/problem.js b/static/src/js/app/admin/problem/problem.js index 2632ebf5..c11d7c70 100644 --- a/static/src/js/app/admin/problem/problem.js +++ b/static/src/js/app/admin/problem/problem.js @@ -3,6 +3,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT avalon.ready(function () { if(avalon.vmodels.problemList){ vm = avalon.vmodels.problemList; + problemList = []; } else { var vm = avalon.define({ diff --git a/static/src/js/app/admin/problem/submissionList.js b/static/src/js/app/admin/problem/submissionList.js index 405cffa7..1af2e6ce 100644 --- a/static/src/js/app/admin/problem/submissionList.js +++ b/static/src/js/app/admin/problem/submissionList.js @@ -1,53 +1,59 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) { avalon.ready(function () { - avalon.vmodels.submissionList = null; - var vm = avalon.define({ - $id: "submissionList", - submissionList: [], - previousPage: 0, - nextPage: 0, - page: 1, - totalPage: 1, - results : { - 0: "Accepted", - 1: "Runtime Error", - 2: "Time Limit Exceeded", - 3: "Memory Limit Exceeded", - 4: "Compile Error", - 5: "Format Error", - 6: "Wrong Answer", - 7: "System Error", - 8: "Waiting" - }, - 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"; - } - }, - getPage: function (page_index) { - getPageData(page_index); - }, - showSubmissionDetailPage: function (submissionId) { - }, - showProblemListPage: function(){ - vm.$fire("up!showProblemListPage"); - } - }); + if (avalon.vmodels.submissionList){ + var vm = avalon.vmodels.submissionList; + } + else { + + var vm = avalon.define({ + $id: "submissionList", + submissionList: [], + previousPage: 0, + nextPage: 0, + page: 1, + totalPage: 1, + results : { + 0: "Accepted", + 1: "Runtime Error", + 2: "Time Limit Exceeded", + 3: "Memory Limit Exceeded", + 4: "Compile Error", + 5: "Format Error", + 6: "Wrong Answer", + 7: "System Error", + 8: "Waiting" + }, + 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"; + } + }, + getPage: function (page_index) { + getPageData(page_index); + }, + showSubmissionDetailPage: function (submissionId) { + + }, + showProblemListPage: function(){ + vm.$fire("up!showProblemListPage"); + } + }); + } getPageData(1); diff --git a/static/src/js/app/admin/user/userList.js b/static/src/js/app/admin/user/userList.js index 3f80c89d..d2949f05 100644 --- a/static/src/js/app/admin/user/userList.js +++ b/static/src/js/app/admin/user/userList.js @@ -3,12 +3,12 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "validator"], function ($, // avalon:定义模式 userList avalon.ready(function () { - //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; + userList = []; //previousPage= 0; nextPage= 0; page = 1; + //editingUserId= 0; totalPage = 1; keyword= ""; showAdminOnly= false; //user editor fields username= ""; realName= ""; email= ""; adminType= 0; id= 0; } From 1c835cfa2e42a411e47b03c1d74a44b621d8cbc5 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 12:59:14 +0800 Subject: [PATCH 04/16] =?UTF-8?q?[API]=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=AF=94=E8=B5=9B=E6=8F=90=E4=BA=A4adminAPI^C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest_submission/views.py | 38 +++++++++++++++++++++++++++++++++++-- oj/urls.py | 4 ++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/contest_submission/views.py b/contest_submission/views.py index 0dba7cb4..652047ee 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -21,6 +21,7 @@ from utils.shortcuts import serializer_invalid_response, error_response, success from submission.models import Submission from .serializers import CreateContestSubmissionSerializer +from submission.serializers import SubmissionSerializer class ContestSubmissionAPIView(APIView): @@ -76,7 +77,8 @@ def contest_problem_my_submissions_list_page(request, contest_id, contest_proble contest_problem = ContestProblem.objects.get(id=contest_problem_id, visible=True) except Problem.DoesNotExist: return error_page(request, u"比赛问题不存在") - submissions = Submission.objects.filter(user_id=request.user.id, problem_id=contest_problem.id).order_by("-create_time"). \ + submissions = Submission.objects.filter(user_id=request.user.id, problem_id=contest_problem.id).order_by( + "-create_time"). \ values("id", "result", "create_time", "accepted_answer_time", "language") return render(request, "oj/contest/my_submissions_list.html", {"submissions": submissions, "problem": contest_problem}) @@ -112,4 +114,36 @@ def contest_problem_submissions_list_page(request, contest_id, page=1): return render(request, "oj/contest/submissions_list.html", {"submissions": current_page, "page": int(page), "previous_page": previous_page, "next_page": next_page, "start_id": int(page) * 20 - 20, - "contest": contest}) \ No newline at end of file + "contest": contest}) + + +class ContestSubmissionAdminAPIView(APIView): + def get(self, request): + """ + 查询比赛提交,单个比赛题目提交的adminAPI + --- + response_serializer: SubmissionSerializer + """ + problem_id = request.GET.get("problem_id", None) + contest_id = request.GET.get("contest_id", None) + if contest_id: + try: + contest = Contest.objects.get(pk=contest_id) + except Contest.DoesNotExist: + return error_response(u"比赛不存在!") + if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user: + return error_response(u"您无权查看该信息!") + submissions = Submission.objects.filter(contest_id=contest_id).order_by("-create_time") + else: + if problem_id: + try: + contest_problem = ContestProblem.objects.get(pk=problem_id) + except ContestProblem.DoesNotExist: + return error_response(u"问题不存在!") + submissions = Submission.objects.filter(contest_id=contest_problem.contest_id).order_by("-create_time") + else: + return error_response(u"参数错误!") + if problem_id: + submissions = submissions.filter(problem_id=problem_id) + + return paginate(request, submissions, SubmissionSerializer) diff --git a/oj/urls.py b/oj/urls.py index adb7ef00..74a44c2f 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -17,7 +17,7 @@ from admin.views import AdminTemplateView from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from submission.views import SubmissionAPIView, SubmissionAdminAPIView -from contest_submission.views import ContestSubmissionAPIView +from contest_submission.views import ContestSubmissionAPIView, ContestSubmissionAdminAPIView from monitor.views import QueueLengthMonitorAPIView from contest_submission.views import contest_problem_my_submissions_list_page @@ -65,7 +65,7 @@ urlpatterns = [ name="join_group_request_admin_api"), url(r'^api/admin/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"), url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"), - + url(r'^api/admin/contest_submission/$', ContestSubmissionAdminAPIView.as_view(), name="contest_submission_admin_api_view"), url(r'^contest/(?P\d+)/problem/(?P\d+)/$', "contest.views.contest_problem_page", From 3e9a212732c01160d815e2f0e0128a045ff7fbd7 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 13:10:45 +0800 Subject: [PATCH 05/16] =?UTF-8?q?[BUG]=E5=B0=91=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E9=80=97=E5=8F=B7....[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/contest/contestList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/src/js/app/admin/contest/contestList.js b/static/src/js/app/admin/contest/contestList.js index ae3606c6..5dc9bbba 100644 --- a/static/src/js/app/admin/contest/contestList.js +++ b/static/src/js/app/admin/contest/contestList.js @@ -242,7 +242,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", }, showSubmissionPage: function() { vm.$fire("up!showContestSubmissionPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); - } + }, getYesOrNo: function(yORn) { if (yORn) return "是"; return "否"; From 48c237872c6c545958ba0a16e6f1eacb66f4a32a Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 13:27:51 +0800 Subject: [PATCH 06/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4=E5=88=97=E8=A1=A8=E9=87=8C?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E7=9A=84url(=E5=BA=94?= =?UTF-8?q?=E5=AF=B9urls.py=E7=9A=84=E6=94=B9=E5=8A=A8)[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/src/admin/contest/submission_list.html | 4 ++-- template/src/admin/problem/submission_list.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/template/src/admin/contest/submission_list.html b/template/src/admin/contest/submission_list.html index fc8ee7df..008f4eb8 100644 --- a/template/src/admin/contest/submission_list.html +++ b/template/src/admin/contest/submission_list.html @@ -21,7 +21,7 @@ {{ el.user }} {{ results[el.result] }} - 详情 + 详情 @@ -31,4 +31,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/template/src/admin/problem/submission_list.html b/template/src/admin/problem/submission_list.html index 70aacb82..28eaebd4 100644 --- a/template/src/admin/problem/submission_list.html +++ b/template/src/admin/problem/submission_list.html @@ -21,7 +21,7 @@ {{ el.user }} {{ results[el.result] }} - 详情 + 详情 From 22f344e6158f1dd519167f89e52b75189a0992b8 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 13:52:12 +0800 Subject: [PATCH 07/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=AF=94=E8=B5=9B=E5=88=97=E8=A1=A8=E4=B8=AD,=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E6=AF=94=E8=B5=9B=E6=8F=90=E4=BA=A4=E7=9A=84=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E9=A1=B5=E9=9D=A2=E4=B8=8Eapi=E7=9A=84=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/contest/contestList.js | 9 ++++++--- static/src/js/app/admin/contest/submissionList.js | 10 +++++++--- template/src/admin/contest/contest_list.html | 8 +++++--- template/src/admin/contest/submission_list.html | 5 ++++- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/static/src/js/app/admin/contest/contestList.js b/static/src/js/app/admin/contest/contestList.js index 5dc9bbba..036b344b 100644 --- a/static/src/js/app/admin/contest/contestList.js +++ b/static/src/js/app/admin/contest/contestList.js @@ -237,11 +237,14 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", addProblem: function () { vm.$fire("up!showContestProblemPage", 0, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, - showProblemEditor: function(el) { + showProblemEditPage: function(el) { vm.$fire("up!showContestProblemPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, - showSubmissionPage: function() { - vm.$fire("up!showContestSubmissionPage", el.id, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); + showSubmissionPage: function(el) { + var problemId = 0 + if (el) + problemId = el.id; + vm.$fire("up!showContestSubmissionPage", problemId, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); }, getYesOrNo: function(yORn) { if (yORn) return "是"; diff --git a/static/src/js/app/admin/contest/submissionList.js b/static/src/js/app/admin/contest/submissionList.js index ff375b21..34fd5914 100644 --- a/static/src/js/app/admin/contest/submissionList.js +++ b/static/src/js/app/admin/contest/submissionList.js @@ -44,13 +44,15 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT } }, getPage: function (page_index) { + if (!page_index) + var page_index = vm.page; getPageData(page_index); }, showSubmissionDetailPage: function (submissionId) { }, - showProblemListPage: function(){ - vm.$fire("up!showProblemListPage"); + goBack: function(check){ + vm.$fire("up!showContestListPage"); } }); } @@ -58,7 +60,9 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT getPageData(1); function getPageData(page) { - var url = "/api/admin/submission/?paging=true&page=" + page + "&page_size=10&problem_id=" + avalon.vmodels.admin.problemId; + var url = "/api/admin/contest_submission/?paging=true&page=" + page + "&page_size=10&contest_id=" + avalon.vmodels.admin.$contestId; + if (avalon.vmodels.admin.$problemId) + url += "&problem_id=" + avalon.vmodels.admin.$problemId $.ajax({ url: url, dataType: "json", diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index b5e4d6ab..1b095340 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -158,8 +158,8 @@
- 添加 - 查看提交 + 添加题目 + 查看提交 @@ -177,7 +177,9 @@
编号{{ el.create_time|date("yyyy-MM-dd HH:mm:ss") }} 编辑 + ms-click="showProblemEditPage(el)">编辑 + 提交
diff --git a/template/src/admin/contest/submission_list.html b/template/src/admin/contest/submission_list.html index 008f4eb8..18474085 100644 --- a/template/src/admin/contest/submission_list.html +++ b/template/src/admin/contest/submission_list.html @@ -1,11 +1,14 @@

提交列表

+ + 刷新 + From 42873d3d84d52291ed11e73a7368c5ffff15552b Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 14:01:09 +0800 Subject: [PATCH 08/16] =?UTF-8?q?[=E5=90=8E=E7=AB=AF]=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86contest=5Fsubmission=20Admin=20API=E7=9A=84bug,?= =?UTF-8?q?=E5=B9=B6=E5=86=99=E4=BA=86=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest_submission/tests.py | 83 ++++++++++++++++++++++++++++++++++++- contest_submission/views.py | 2 + 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/contest_submission/tests.py b/contest_submission/tests.py index 7ce503c2..b1eace12 100644 --- a/contest_submission/tests.py +++ b/contest_submission/tests.py @@ -1,3 +1,84 @@ -from django.test import TestCase +import json + +from django.core.urlresolvers import reverse +from account.models import User, ADMIN, SUPER_ADMIN + +from contest.models import Contest, ContestProblem +from submission.models import Submission +from rest_framework.test import APITestCase, APIClient + # Create your tests here. + +class SubmissionAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse('contest_submission_admin_api_view') + self.userA = User.objects.create(username="test1", admin_type=ADMIN) + self.userA.set_password("testaa") + self.userA.save() + self.userS = User.objects.create(username="test2", admin_type=SUPER_ADMIN) + self.userS.set_password("testbb") + self.userS.save() + self.global_contest = Contest.objects.create(title="titlex", description="descriptionx", mode=1, + contest_type=2, show_rank=True, show_user_submission=True, + start_time="2015-08-15T10:00:00.000Z", + end_time="2015-08-15T12:00:00.000Z", + password="aacc", created_by=self.userS + ) + self.problem = ContestProblem.objects.create(title="title1", + description="description1", + input_description="input1_description", + output_description="output1_description", + test_case_id="1", + sort_index="1", + samples=json.dumps([{"input": "1 1", "output": "2"}]), + time_limit=100, + memory_limit=1000, + hint="hint1", + contest=self.global_contest, + created_by=self.userS) + self.submission = Submission.objects.create(user_id=self.userA.id, + language=1, + code='#include "stdio.h"\nint main(){\n\treturn 0;\n}', + problem_id=self.problem.id) + self.submissionS = Submission.objects.create(user_id=self.userS.id, + language=2, + code='#include "stdio.h"\nint main(){\n\treturn 0;\n}', + problem_id=self.problem.id) + + def test_submission_contest_does_not_exist(self): + self.client.login(username="test2", password="testbb") + response = self.client.get(self.url + "?contest_id=99") + self.assertEqual(response.data["code"], 1) + + def test_submission_contest_parameter_error(self): + self.client.login(username="test2", password="testbb") + response = self.client.get(self.url) + self.assertEqual(response.data["code"], 1) + + def test_submission_access_denied(self): + self.client.login(username="test1", password="testaa") + response = self.client.get(self.url + "?problem_id=" + str(self.problem.id)) + self.assertEqual(response.data["code"], 1) + + def test_submission_access_denied_with_contest_id(self): + self.client.login(username="test1", password="testaa") + response = self.client.get(self.url + "?contest_id=" + str(self.global_contest.id)) + self.assertEqual(response.data["code"], 1) + + def test_get_submission_successfully(self): + self.client.login(username="test2", password="testbb") + response = self.client.get( + self.url + "?contest_id=" + str(self.global_contest.id) + "&problem_id=" + str(self.problem.id)) + self.assertEqual(response.data["code"], 0) + + def test_get_submission_successfully_problem(self): + self.client.login(username="test2", password="testbb") + response = self.client.get(self.url + "?problem_id=" + str(self.problem.id)) + self.assertEqual(response.data["code"], 0) + + def test_get_submission_problem_do_not_exist(self): + self.client.login(username="test2", password="testbb") + response = self.client.get(self.url + "?problem_id=9999") + self.assertEqual(response.data["code"], 1) diff --git a/contest_submission/views.py b/contest_submission/views.py index 652047ee..003ad8a6 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -140,6 +140,8 @@ class ContestSubmissionAdminAPIView(APIView): contest_problem = ContestProblem.objects.get(pk=problem_id) except ContestProblem.DoesNotExist: return error_response(u"问题不存在!") + if request.user.admin_type != SUPER_ADMIN and contest_problem.contest.created_by != request.user: + return error_response(u"您无权查看该信息!") submissions = Submission.objects.filter(contest_id=contest_problem.contest_id).order_by("-create_time") else: return error_response(u"参数错误!") From 235e042b5eaeb06f9b4ba130bd311fea157dcdb5 Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 14:02:10 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E6=88=91?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E4=BA=A4=E9=A1=B5=E9=9D=A2=E4=B8=8D=E6=81=B0?= =?UTF-8?q?=E5=BD=93=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- submission/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submission/tests.py b/submission/tests.py index e745bdea..04f0a86d 100644 --- a/submission/tests.py +++ b/submission/tests.py @@ -41,7 +41,7 @@ class SubmissionsListPageTest(TestCase): def test_submissionsListPage_page_not_exist(self): self.client.login(username="gogoing", password="666666") - response = self.client.get('/submissions/5/') + response = self.client.get('/submissions/999/') self.assertTemplateUsed(response, "utils/error.html") def test_submissionsListPage_have_no_submission(self): From e7aac0a6e03295d1ffa039b556ebaa460555fdfc Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 14:03:48 +0800 Subject: [PATCH 10/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=E6=B7=BB=E5=8A=A0=E6=AF=94=E8=B5=9B,=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=85=AC=E5=91=8A=E7=9A=84=E5=90=8E=E5=8F=B0=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=AF=B9=E8=B6=85=E7=BA=A7=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E4=B9=9F=E6=8F=90=E7=A4=BA=E6=9D=83=E9=99=90=E4=B8=8D=E8=B6=B3?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/app/admin/announcement/announcement.js | 46 ++++++++++--------- static/src/js/app/admin/contest/addContest.js | 1 - 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js index e5585858..9b6f2d28 100644 --- a/static/src/js/app/admin/announcement/announcement.js +++ b/static/src/js/app/admin/announcement/announcement.js @@ -130,39 +130,41 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator"], getPageData(1); - $.ajax({ - url: "/api/admin/group/", - method: "get", - dataType: "json", - success: function (data) { - if (!data.code) { - if (!data.data.length) { - bsAlert("您的用户权限只能创建组内公告,但是您还没有创建过小组"); - return; - } - for (var i = 0; i < data.data.length; i++) { - var item = data.data[i]; - item["isSelected"] = false; - vm.allGroups.push(item); - } - } - else { - bsAlert(data.data); - } - } - }); - $.ajax({ url: "/api/user/", method: "get", dataType: "json", success: function (data) { if (!data.code) { + var admin_type = data.data.admin_type; if (data.data.admin_type == 1) { vm.isGlobal = false; vm.showGlobalViewRadio = false; + } } + $.ajax({ + url: "/api/admin/group/", + method: "get", + dataType: "json", + success: function (data) { + if (!data.code) { + if (!data.data.length) { + if (admin_type != 2) + bsAlert("您的用户权限只能创建组内公告,但是您还没有创建过小组"); + return; + } + for (var i = 0; i < data.data.length; i++) { + var item = data.data[i]; + item["isSelected"] = false; + vm.allGroups.push(item); + } + } + else { + bsAlert(data.data); + } + } + }); } }); diff --git a/static/src/js/app/admin/contest/addContest.js b/static/src/js/app/admin/contest/addContest.js index 437fbdf3..d4beadb3 100644 --- a/static/src/js/app/admin/contest/addContest.js +++ b/static/src/js/app/admin/contest/addContest.js @@ -131,7 +131,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date success: function (data) { if (!data.code) { if (!data.data.length) { - bsAlert("您的用户权限只能创建组内比赛,但是您还没有创建过小组"); return; } for (var i = 0; i < data.data.length; i++) { From 9b23a45926c7fd1433ef7f573c62ed5bccd3908c Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 14:40:33 +0800 Subject: [PATCH 11/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BA=86=E5=AF=B9=E4=BA=8E=E5=AF=8C=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E7=BC=96=E8=BE=91=E5=99=A8=E7=9A=84=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=9A=84=E6=8F=90=E7=A4=BA=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=92=8C=E9=A2=9C=E8=89=B2,=E5=B9=B6?= =?UTF-8?q?=E5=86=99=E5=85=A5css,=E4=BD=86=E6=98=AF=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=85=AC=E5=91=8A=E7=AE=A1=E7=90=86=E9=A1=B5=E4=BB=8D=E7=84=B6?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=E7=AE=80=E5=8D=95=E7=9A=84=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC(bsAlert)[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/css/admin.css | 9 +++++++++ template/src/admin/contest/add_contest.html | 4 +--- template/src/admin/contest/contest_list.html | 2 +- template/src/admin/contest/edit_problem.html | 2 +- template/src/admin/problem/add_problem.html | 2 +- template/src/admin/problem/edit_problem.html | 2 +- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/static/src/css/admin.css b/static/src/css/admin.css index f7e75810..cb0fb309 100644 --- a/static/src/css/admin.css +++ b/static/src/css/admin.css @@ -55,3 +55,12 @@ list-style-type: none; margin: 5px; } + +.error-info { + color: #dd4b39; + font-family: + Arial,Helvetica,sans-serif; + font-size: 13px; + line-height: 1.4; + font-weight: 800; +} diff --git a/template/src/admin/contest/add_contest.html b/template/src/admin/contest/add_contest.html index 6f237c55..b374ec82 100644 --- a/template/src/admin/contest/add_contest.html +++ b/template/src/admin/contest/add_contest.html @@ -18,9 +18,7 @@
- -
- 请填写比赛描述 +

请填写比赛描述

diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index 1b095340..3df9f495 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -63,7 +63,7 @@
- 请填写比赛描述 +

请填写比赛描述

diff --git a/template/src/admin/contest/edit_problem.html b/template/src/admin/contest/edit_problem.html index 331917ce..f7746704 100644 --- a/template/src/admin/contest/edit_problem.html +++ b/template/src/admin/contest/edit_problem.html @@ -23,7 +23,7 @@
- 请填写题目描述 +

请填写题目描述

diff --git a/template/src/admin/problem/add_problem.html b/template/src/admin/problem/add_problem.html index 38c22c62..70bd5249 100644 --- a/template/src/admin/problem/add_problem.html +++ b/template/src/admin/problem/add_problem.html @@ -11,7 +11,7 @@
- 请填写题目描述 +

请填写题目描述

diff --git a/template/src/admin/problem/edit_problem.html b/template/src/admin/problem/edit_problem.html index 0a2b7b57..d2587b3e 100644 --- a/template/src/admin/problem/edit_problem.html +++ b/template/src/admin/problem/edit_problem.html @@ -17,7 +17,7 @@
- 请填写题目描述 +

请填写题目描述

From eda4d3cb7b6d7588d79d3a4286177f996b1efd63 Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 14:56:48 +0800 Subject: [PATCH 12/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=88=86=E9=A1=B5=E5=8F=82=E6=95=B0,?= =?UTF-8?q?=E6=AF=8F=E9=A1=B510=E6=9D=A1=E8=AE=B0=E5=BD=95[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/group/group.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/src/js/app/admin/group/group.js b/static/src/js/app/admin/group/group.js index 7327dbaf..425e4bbf 100644 --- a/static/src/js/app/admin/group/group.js +++ b/static/src/js/app/admin/group/group.js @@ -51,7 +51,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT getPageData(1); function getPageData(page) { - var url = "/api/admin/group/?paging=true&page=" + page + "&page_size=2"; + var url = "/api/admin/group/?paging=true&page=" + page + "&page_size=10"; if (vm.keyword) url += "&keyword=" + vm.keyword; $.ajax({ From 09e30832f93dae64cdd973d714434b18845434a4 Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 15:04:19 +0800 Subject: [PATCH 13/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E5=BD=A2=E5=BC=8F,=E6=8F=8F=E8=BF=B0.=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=9B=B8=E5=85=B3-->=E7=BA=A2=E8=89=B2;=E6=96=B0?= =?UTF-8?q?=E5=BB=BA->=E7=BB=BF=E8=89=B2/=E5=8F=91=E5=B8=83**;=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=80=A7=E7=9A=84->=E8=93=9D=E8=89=B2;=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E5=86=85=E9=83=A8=E6=8C=89=E9=92=AE=E5=9D=87=E4=B8=BA?= =?UTF-8?q?sm,info[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/src/admin/announcement/announcement.html | 4 ++-- template/src/admin/contest/contest_list.html | 8 ++++---- template/src/admin/contest/edit_problem.html | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/template/src/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html index 3bfd605d..b909823c 100644 --- a/template/src/admin/announcement/announcement.html +++ b/template/src/admin/announcement/announcement.html @@ -66,7 +66,7 @@
- +   
@@ -106,7 +106,7 @@
- +
diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index 3df9f495..1788ec45 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -29,8 +29,8 @@
{{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }} - 编辑 - 题目 + 编辑 + 题目
@@ -152,13 +152,13 @@
- +
- 添加题目 + 添加题目 查看提交 diff --git a/template/src/admin/contest/edit_problem.html b/template/src/admin/contest/edit_problem.html index f7746704..87a7976f 100644 --- a/template/src/admin/contest/edit_problem.html +++ b/template/src/admin/contest/edit_problem.html @@ -130,7 +130,7 @@
- +
From f3b88e85fc153771d9e711437d9c2d05beb4f83a Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 15:18:31 +0800 Subject: [PATCH 14/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=90=84=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9A=84=E5=A4=A7=E8=87=B4=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?,=E4=B8=BA=E9=A2=98=E7=9B=AE=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E6=B7=BB=E5=8F=AF=E8=A7=81=E7=AD=9B=E9=80=89,=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=AF=B9=E5=88=97=E8=A1=A8=E4=B8=ADboolen=E5=80=BC?= =?UTF-8?q?=E7=9A=84=E6=98=BE=E7=A4=BA,=E6=98=AF/=E5=90=A6[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/announcement/announcement.js | 8 +++----- static/src/js/app/admin/problem/problem.js | 10 ++++++++++ template/src/admin/announcement/announcement.html | 6 +++--- template/src/admin/contest/contest_list.html | 4 ++-- template/src/admin/problem/problem_list.html | 5 +++++ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js index 9b6f2d28..fbb9779b 100644 --- a/static/src/js/app/admin/announcement/announcement.js +++ b/static/src/js/app/admin/announcement/announcement.js @@ -26,11 +26,9 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator"], showGlobalViewRadio: true, isGlobal: true, allGroups: [], - getState: function (el) { //获取公告当前状态,显示 - if (el.visible) - return "可见"; - else - return "隐藏"; + getYesOrNo: function(yORn) { + if (yORn) return "是"; + return "否"; }, getNext: function () { if (!vm.nextPage) diff --git a/static/src/js/app/admin/problem/problem.js b/static/src/js/app/admin/problem/problem.js index c11d7c70..ced0d919 100644 --- a/static/src/js/app/admin/problem/problem.js +++ b/static/src/js/app/admin/problem/problem.js @@ -14,6 +14,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT page: 1, totalPage: 1, keyword: "", + showVisibleOnly: false, getNext: function () { if (!vm.nextPage) return; @@ -40,14 +41,23 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT }, showProblemSubmissionPage: function(problemId){ vm.$fire("up!showProblemSubmissionPage", problemId); + }, + getYesOrNo: function(yORn) { + if (yORn) return "是"; + return "否"; } }); + vm.$watch("showVisibleOnly", function () { + getPageData(1); + }); } getPageData(1); function getPageData(page) { var url = "/api/admin/problem/?paging=true&page=" + page + "&page_size=10"; if (vm.keyword != "") url += "&keyword=" + vm.keyword; + if (vm.showVisibleOnly) + url += "&visible=true"; $.ajax({ url: url, dataType: "json", diff --git a/template/src/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html index b909823c..fbf612d3 100644 --- a/template/src/admin/announcement/announcement.html +++ b/template/src/admin/announcement/announcement.html @@ -7,8 +7,8 @@ - - + + @@ -18,7 +18,7 @@ - + diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index 1788ec45..d1c8d0a6 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -16,18 +16,18 @@ - + - + + @@ -25,6 +26,7 @@ +
创建时间 更新时间 创建者可见范围状态可见范围可见
{{ el.last_update_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }} {{ getState(el)}}{{ getYesOrNo(el.visible)}} ID 比赛 公开排名可见 创建时间 创建者可见
{{ el.id }} {{ el.title }} {{ getYesOrNo(el.show_rank) }}{{ getYesOrNo(el.visible) }} {{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }}{{ getYesOrNo(el.visible) }} 编辑 题目 diff --git a/template/src/admin/problem/problem_list.html b/template/src/admin/problem/problem_list.html index 01f86712..75574537 100644 --- a/template/src/admin/problem/problem_list.html +++ b/template/src/admin/problem/problem_list.html @@ -17,6 +17,7 @@ 题目 创建时间 作者可见 通过次数/提交总数
{{ el.title }} {{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }}{{ getYesOrNo(el.visible) }} {{ el.total_accepted_number }}/{{ el.total_submit_number }} @@ -32,6 +34,9 @@
+
+ +
页数:{{ page }}/{{ totalPage }}   From 979a2070cdf360cdb7764d56c67519ef95140789 Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 15:30:11 +0800 Subject: [PATCH 15/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E5=86=8D=E6=AC=A1=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E6=8E=AA?= =?UTF-8?q?=E8=BE=9E,=E4=BF=AE=E6=94=B9boolen=E5=80=BC=E7=9A=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=96=B9=E6=B3=95(=E5=86=8D=E6=AC=A1=E6=94=B9?= =?UTF-8?q?=E8=BF=9B)[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/css/admin.css | 2 +- static/src/js/app/admin/announcement/announcement.js | 5 ----- static/src/js/app/admin/contest/contestList.js | 4 ---- static/src/js/app/admin/problem/problem.js | 4 ---- template/src/admin/announcement/announcement.html | 4 ++-- template/src/admin/contest/contest_list.html | 6 +++--- template/src/admin/problem/problem_list.html | 6 +++--- 7 files changed, 9 insertions(+), 22 deletions(-) diff --git a/static/src/css/admin.css b/static/src/css/admin.css index cb0fb309..fb9c9f25 100644 --- a/static/src/css/admin.css +++ b/static/src/css/admin.css @@ -62,5 +62,5 @@ Arial,Helvetica,sans-serif; font-size: 13px; line-height: 1.4; - font-weight: 800; + font-weight: 600; } diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js index fbb9779b..4c67ef2e 100644 --- a/static/src/js/app/admin/announcement/announcement.js +++ b/static/src/js/app/admin/announcement/announcement.js @@ -26,10 +26,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator"], showGlobalViewRadio: true, isGlobal: true, allGroups: [], - getYesOrNo: function(yORn) { - if (yORn) return "是"; - return "否"; - }, getNext: function () { if (!vm.nextPage) return; @@ -47,7 +43,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator"], else { return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled"; } - }, editAnnouncement: function (announcement) { vm.newTitle = announcement.title; diff --git a/static/src/js/app/admin/contest/contestList.js b/static/src/js/app/admin/contest/contestList.js index 036b344b..f63cdccd 100644 --- a/static/src/js/app/admin/contest/contestList.js +++ b/static/src/js/app/admin/contest/contestList.js @@ -245,10 +245,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "datetimePicker", if (el) problemId = el.id; vm.$fire("up!showContestSubmissionPage", problemId, vm.contestList[vm.editingProblemContestIndex-1].id, vm.editMode); - }, - getYesOrNo: function(yORn) { - if (yORn) return "是"; - return "否"; } }); vm.$watch("showVisibleOnly", function() { diff --git a/static/src/js/app/admin/problem/problem.js b/static/src/js/app/admin/problem/problem.js index ced0d919..9fe56df5 100644 --- a/static/src/js/app/admin/problem/problem.js +++ b/static/src/js/app/admin/problem/problem.js @@ -41,10 +41,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT }, showProblemSubmissionPage: function(problemId){ vm.$fire("up!showProblemSubmissionPage", problemId); - }, - getYesOrNo: function(yORn) { - if (yORn) return "是"; - return "否"; } }); vm.$watch("showVisibleOnly", function () { diff --git a/template/src/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html index fbf612d3..baa085f2 100644 --- a/template/src/admin/announcement/announcement.html +++ b/template/src/admin/announcement/announcement.html @@ -7,7 +7,7 @@ 创建时间 更新时间 创建者 - 可见范围 + 类型 可见 @@ -18,7 +18,7 @@ {{ el.last_update_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }} - {{ getYesOrNo(el.visible)}} + diff --git a/template/src/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html index d1c8d0a6..7418a569 100644 --- a/template/src/admin/contest/contest_list.html +++ b/template/src/admin/contest/contest_list.html @@ -15,7 +15,7 @@ ID 比赛 - 公开排名 + 排名 创建时间 创建者 可见 @@ -24,10 +24,10 @@ {{ el.id }} {{ el.title }} - {{ getYesOrNo(el.show_rank) }} + {{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }} - {{ getYesOrNo(el.visible) }} + 编辑 题目 diff --git a/template/src/admin/problem/problem_list.html b/template/src/admin/problem/problem_list.html index 75574537..a571cfe8 100644 --- a/template/src/admin/problem/problem_list.html +++ b/template/src/admin/problem/problem_list.html @@ -17,8 +17,8 @@ 题目 创建时间 作者 - 可见 - 通过次数/提交总数 + 可见 + 通过次数/提交总数 @@ -26,7 +26,7 @@ {{ el.title }} {{ el.create_time|date("yyyy-MM-dd HH:mm:ss")}} {{ el.created_by.username }} - {{ getYesOrNo(el.visible) }} + {{ getYesOrNo(el.visible) }} {{ el.total_accepted_number }}/{{ el.total_submit_number }} From c64bd9d165c9242cdca89130b0cc2ee5ae533e21 Mon Sep 17 00:00:00 2001 From: esp Date: Thu, 27 Aug 2015 15:36:32 +0800 Subject: [PATCH 16/16] =?UTF-8?q?[=E5=89=8D=E7=AB=AF-=E5=90=8E=E5=8F=B0]?= =?UTF-8?q?=E5=A2=9E=E5=BC=BAradio=E7=9A=84=E6=98=93=E7=94=A8=E6=80=A7,?= =?UTF-8?q?=E4=BD=BF=E7=94=A8label=E5=8C=85=E8=A3=B9,=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=82=B9=E5=88=B0[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/src/admin/announcement/announcement.html | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/template/src/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html index baa085f2..f08ccb04 100644 --- a/template/src/admin/announcement/announcement.html +++ b/template/src/admin/announcement/announcement.html @@ -38,7 +38,8 @@
-
+
@@ -78,12 +79,14 @@ +
+
@@ -91,10 +94,16 @@
- 全局可见 + - 小组内可见 +