From ad73a36944ca6be5b1e7d002a78e541ca1fd9ffa Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 18 Oct 2015 11:13:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E4=BD=BF=E7=94=A8=E5=B0=81?= =?UTF-8?q?=E8=A3=85=E5=A5=BD=E7=9A=84=20web=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/app/admin/announcement/announcement.js | 27 +++++--- static/src/js/app/admin/problem/addProblem.js | 29 +++++--- .../src/js/app/admin/problem/editProblem.js | 34 ++++++---- .../js/app/admin/problem/submissionList.js | 68 +++++++------------ static/src/js/utils/editor.js | 2 +- .../src/admin/announcement/announcement.html | 6 +- template/src/admin/problem/add_problem.html | 5 +- template/src/admin/problem/edit_problem.html | 5 +- .../src/admin/problem/submission_list.html | 4 +- 9 files changed, 86 insertions(+), 94 deletions(-) diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js index debb594..c10741e 100644 --- a/static/src/js/app/admin/announcement/announcement.js +++ b/static/src/js/app/admin/announcement/announcement.js @@ -1,10 +1,7 @@ -require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator", "pager"], +require(["jquery", "avalon", "csrfToken", "bsAlert", "validator", "pager", "editorComponent"], function ($, avalon, csrfTokenHeader, bsAlert, editor) { avalon.ready(function () { - var createAnnouncementEditor = editor("#create-announcement-editor"); - var editAnnouncementEditor = editor("#edit-announcement-editor"); - if (avalon.vmodels.announcement){ var vm = avalon.vmodels.announcement; } @@ -25,20 +22,30 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator", "pag getPage(page); } }, + + createAnnouncementEditor: { + editorId: "create-announcement-editor", + placeholder: "公告内容" + }, + + editAnnouncementEditor: { + editorId: "edit-announcement-editor", + placeholder: "公告内容" + }, + editAnnouncement: function (announcement) { vm.newTitle = announcement.title; vm.announcementId = announcement.id; - editAnnouncementEditor.setValue(announcement.content); + avalon.vmodels.editAnnouncementEditor.content = announcement.content; vm.announcementVisible = announcement.visible; vm.isEditing = true; - editAnnouncementEditor.focus(); }, cancelEdit: function () { vm.isEditing = false; }, submitChange: function () { var title = vm.newTitle; - var content = editAnnouncementEditor.getValue(); + var content = avalon.vmodels.editAnnouncementEditor.content; if (content == "" || title == "") { bsAlert("标题和内容都不能为空"); @@ -60,7 +67,6 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator", "pag if (!data.code) { bsAlert("修改成功"); vm.isEditing = false; - localStorage.removeItem("/admin/autosave/edit-announcement-editor/"); getPage(1); } else { @@ -101,7 +107,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator", "pag $("#announcement-form").validator().on('submit', function (e) { if (!e.isDefaultPrevented()) { var title = $("#title").val(); - var content = createAnnouncementEditor.getValue(); + var content = avalon.vmodels.createAnnouncementEditor.content; if (content == "") { bsAlert("请填写公告内容"); return false; @@ -119,8 +125,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "validator", "pag if (!data.code) { bsAlert("提交成功!"); $("#title").val(""); - createAnnouncementEditor.setValue(""); - localStorage.removeItem("/admin/autosave/create-announcement-editor/"); + avalon.vmodels.createAnnouncementEditor.content = ""; getPage(1); } else { bsAlert(data.data); diff --git a/static/src/js/app/admin/problem/addProblem.js b/static/src/js/app/admin/problem/addProblem.js index 391f70f..61cb940 100644 --- a/static/src/js/app/admin/problem/addProblem.js +++ b/static/src/js/app/admin/problem/addProblem.js @@ -1,4 +1,4 @@ -require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "validator", "jqueryUI"], +require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "validator", "jqueryUI", "editorComponent"], function ($, avalon, editor, uploader, bsAlert, csrfTokenHeader) { avalon.ready(function () { @@ -9,7 +9,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE bsAlert("你还没有上传测试数据!"); return false; } - if (vm.description == "") { + if (avalon.vmodels.problemDescriptionEditor.content == "") { bsAlert("题目描述不能为空!"); return false; } @@ -35,12 +35,12 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE var ajaxData = { id: avalon.vmodels.admin.problemId, title: vm.title, - description: vm.description, + description: avalon.vmodels.problemDescriptionEditor.content, time_limit: vm.timeLimit, memory_limit: vm.memoryLimit, samples: [], test_case_id: vm.testCaseId, - hint: vm.hint, + hint: avalon.vmodels.problemHintEditor.content, source: vm.source, visible: vm.visible, tags: tags, @@ -77,9 +77,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE } }); - - var hintEditor = editor("#hint"); - var problemDescription = editor("#problemDescription"); if (avalon.vmodels.addProblem) { var vm = avalon.vmodels.addProblem; } @@ -87,13 +84,11 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE var vm = avalon.define({ $id: "addProblem", title: "", - description: "", timeLimit: 1000, memoryLimit: 128, samples: [{input: "", output: "", "visible": true}], - hint: "", visible: true, - difficulty: 0, + difficulty: "1", tags: [], inputDescription: "", outputDescription: "", @@ -102,6 +97,16 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE uploadSuccess: false, source: "", uploadProgress: 0, + + problemDescriptionEditor: { + editorId: "problem-description-editor", + placeholder: "题目描述" + }, + problemHintEditor: { + editorId: "problem-hint-editor", + placeholder: "提示" + }, + addSample: function () { vm.samples.push({input: "", output: "", "visible": true}); }, @@ -122,8 +127,10 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) { - if (response.code) + if (response.code) { + vm.uploadProgress = 0; bsAlert(response.data); + } else { vm.testCaseId = response.data.test_case_id; vm.uploadSuccess = true; diff --git a/static/src/js/app/admin/problem/editProblem.js b/static/src/js/app/admin/problem/editProblem.js index 8784f76..4b936e0 100644 --- a/static/src/js/app/admin/problem/editProblem.js +++ b/static/src/js/app/admin/problem/editProblem.js @@ -1,4 +1,4 @@ -require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "validator", "jqueryUI"], +require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "validator", "jqueryUI", "editorComponent"], function ($, avalon, editor, uploader, bsAlert, csrfTokenHeader) { avalon.ready(function () { @@ -10,7 +10,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE bsAlert("你还没有上传测试数据!"); return false; } - if (vm.description == "") { + if (avalon.vmodels.problemDescriptionEditor.content == "") { bsAlert("题目描述不能为空!"); return false; } @@ -36,12 +36,12 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE var ajaxData = { id: avalon.vmodels.admin.problemId, title: vm.title, - description: vm.description, + description: avalon.vmodels.problemDescriptionEditor.content, time_limit: vm.timeLimit, memory_limit: vm.memoryLimit, samples: [], test_case_id: vm.testCaseId, - hint: vm.hint, + hint: avalon.vmodels.problemHintEditor.content, source: vm.source, visible: vm.visible, tags: tags, @@ -85,13 +85,11 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE var vm = avalon.define({ $id: "editProblem", title: "", - description: "", timeLimit: -1, memoryLimit: -1, samples: [], - hint: "", visible: true, - difficulty: 0, + difficulty: "1", inputDescription: "", outputDescription: "", testCaseIdd: "", @@ -99,6 +97,16 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE source: "", testCaseList: [], uploadProgress: 0, + + problemDescriptionEditor: { + editorId: "problem-description-editor", + placeholder: "题目描述" + }, + problemHintEditor: { + editorId: "problem-hint-editor", + placeholder: "提示" + }, + addSample: function () { vm.samples.push({input: "", output: "", "visible": true}); }, @@ -119,12 +127,12 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE avalon.vmodels.admin.template_url = "template/problem/problem_list.html"; } }); - var hintEditor = editor("#hint"); - var descriptionEditor = editor("#problemDescription"); var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) { - if (response.code) + if (response.code) { + vm.uploadProgress = 0; bsAlert(response.data); + } else { vm.testCaseId = response.data.test_case_id; vm.uploadSuccess = true; @@ -154,7 +162,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE else { var problem = data.data; vm.title = problem.title; - vm.description = problem.description; + avalon.vmodels.problemDescriptionEditor.content = problem.description; vm.timeLimit = problem.time_limit; vm.memoryLimit = problem.memory_limit; for (var i = 0; i < problem.samples.length; i++) { @@ -164,7 +172,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE visible: false }) } - vm.hint = problem.hint; + avalon.vmodels.problemHintEditor.content = problem.hint; vm.visible = problem.visible; vm.difficulty = problem.difficulty; vm.inputDescription = problem.input_description; @@ -172,8 +180,6 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE vm.testCaseId = problem.test_case_id; vm.source = problem.source; var problemTags = problem.tags; - hintEditor.setValue(vm.hint); - descriptionEditor.setValue(vm.description); $.ajax({ url: "/api/admin/tag/", dataType: "json", diff --git a/static/src/js/app/admin/problem/submissionList.js b/static/src/js/app/admin/problem/submissionList.js index e8d00bb..98c228e 100644 --- a/static/src/js/app/admin/problem/submissionList.js +++ b/static/src/js/app/admin/problem/submissionList.js @@ -1,12 +1,11 @@ -require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfTokenHeader, bsAlert) { +require(["jquery", "avalon", "csrfToken", "bsAlert", "pager"], function ($, avalon, csrfTokenHeader, bsAlert) { avalon.ready(function () { - if (avalon.vmodels.submissionList){ + if (avalon.vmodels.submissionList) { var vm = avalon.vmodels.submissionList; } else { - var vm = avalon.define({ $id: "submissionList", submissionList: [], @@ -14,65 +13,43 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT 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); + 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" }, - 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"; + pager: { + getPage: function (page) { + getPage(page); } }, - getPage: function (page_index) { - getPageData(page_index); + showProblemListPage: function () { + avalon.vmodels.admin.template_url = "template/problem/problem_list.html"; }, - showSubmissionDetailPage: function (submissionId) { - }, - showProblemListPage: function(){ - vm.$fire("up!showProblemListPage"); - }, - rejudge: function(submission_id){ + rejudge: function (submission_id) { $.ajax({ - beforeSend: csrfTokenHeader, url: "/api/admin/rejudge/", method: "post", data: {"submission_id": submission_id}, - success: function(data){ - if(!data.code){ + success: function (data) { + if (!data.code) { bsAlert("重判任务提交成功"); } } - }) } }); } - getPageData(1); - - function getPageData(page) { - var url = "/api/admin/submission/?paging=true&page=" + page + "&page_size=10&problem_id=" + avalon.vmodels.admin.problemId; + function getPage(page) { + var url = "/api/admin/submission/?paging=true&page=" + page + "&page_size=20&problem_id=" + avalon.vmodels.admin.problemId; $.ajax({ url: url, dataType: "json", @@ -84,6 +61,7 @@ require(["jquery", "avalon", "csrfToken", "bsAlert"], function ($, avalon, csrfT vm.previousPage = data.data.previous_page; vm.nextPage = data.data.next_page; vm.page = page; + avalon.vmodels.submissionsListPager.totalPage = data.data.total_page; } else { bsAlert(data.data); diff --git a/static/src/js/utils/editor.js b/static/src/js/utils/editor.js index e332008..53a7d55 100644 --- a/static/src/js/utils/editor.js +++ b/static/src/js/utils/editor.js @@ -1,4 +1,4 @@ -define("editor", ["simditor", "simditor-autosave"], function(Simditor){ +define("editor", ["simditor"], function(Simditor){ function editor(selector){ return new Simditor({ textarea: $(selector), diff --git a/template/src/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html index 24990ce..ab19406 100644 --- a/template/src/admin/announcement/announcement.html +++ b/template/src/admin/announcement/announcement.html @@ -38,7 +38,7 @@ ms-duplex="newTitle">
请填写题目描述
+请填写题目描述
+