Bladeren bron

众审页面部分修改

insomniaLee 5 jaren geleden
bovenliggende
commit
7696238a6c

+ 69 - 0
src/main/java/com/mooctest/controller/JobController.java

@@ -0,0 +1,69 @@
+package com.mooctest.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.mooctest.service.JobService;
+import com.mooctest.service.PaperService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.ui.Model;
+
+import javax.jws.WebParam;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+@RequestMapping(value = "/review")
+public class JobController {
+
+    @Autowired
+    PaperService paperService;
+
+    @Autowired
+    JobService jobService;
+
+    @GetMapping(value = "job")
+    public String getJob ( Model model, @RequestParam("paperId") String paperId){
+        // paperId 是这次Job任务所采用的paper的id
+        JSONObject jsonObject = paperService.getSinglePaper(paperId);
+        model.addAttribute("paperId",paperId);
+        model.addAttribute("paperName",jsonObject.getString("name")); // name of paper, for show
+        return "addReviewJob";
+    }
+
+    @PutMapping(value = "job")
+    @ResponseBody
+    public JSONObject postJon ( @RequestParam("paperId")String paperId,@RequestParam("time")String time,
+                            @RequestParam("name") String name, @RequestParam("description") String descriptioin,
+                            @RequestParam("group")String group , @RequestParam("workNum") int workNum,
+                            @RequestParam("itemGroupList") String itemGroupList){
+        JSONObject data = jobService.addJob(name,descriptioin,time,paperId,getUserList(workNum),itemGroupList);
+        return data;
+    }
+
+    @GetMapping(value = "/jobs")
+    public String jobs (Model model){
+        JSONArray jsonArray = jobService.getJobs(); // 所有的数据
+        model.addAttribute("tasks",jsonArray);
+        return "jobList";
+    }
+
+    @GetMapping(value = "jobDetail")
+    public String detail ( Model model , @RequestParam("id") String id){
+        JSONObject res  = jobService.getSinglePaper(id); // 获取job的详细信息
+        model.addAttribute("data",res);
+        return "jobDetail";
+    }
+
+
+    private List<String> getUserList(int i ){
+        List<String > res = new ArrayList<>();
+        while(i-->0){
+            res.add(i+"");
+        }
+        return res;
+    }
+
+}

+ 18 - 2
src/main/java/com/mooctest/controller/PaperController.java

@@ -7,6 +7,7 @@ import com.mooctest.service.PaperService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -14,11 +15,11 @@ import org.springframework.web.bind.annotation.ResponseBody;
 @Controller
 public class PaperController {
 
-
-
     @Autowired
     PaperService paperService;
 
+    private String ITEM_GROUP_NAME = "item_group_list";
+
     @GetMapping("/addPaper")
     public String addPaper (Model model){
         return "add_paper";
@@ -29,6 +30,12 @@ public class PaperController {
 //        return "addTask";
 //    }
 
+    @DeleteMapping("/dpaper")
+    @ResponseBody
+    public JSONObject deletePaper (Model model ,  @RequestParam("id") String id ){
+        return paperService.deletePaper(id);
+    }
+
     @GetMapping("/papers")
     public String auditTask ( Model model){
         JSONArray jsonArray = paperService.getPaperData(); // 所有的数据。
@@ -47,10 +54,19 @@ public class PaperController {
     @GetMapping("/changePaper")
     public String changeTask ( Model model ,@RequestParam("id") String id ){
         JSONObject data = paperService.getSinglePaper(id);
+        JSONArray arrary = data.getJSONArray(ITEM_GROUP_NAME);
         model.addAttribute("data",data);
+        model.addAttribute("ruleLength",arrary.size());
         return "changePaper";
     }
 
+    @GetMapping("/paperDetail")
+    public String paperDetail ( Model model , @RequestParam("id") String id){
+        JSONObject data = paperService.getSinglePaper(id);
+        model.addAttribute("data",data);
+        return "paperDetail";
+    }
+
 
 //    @GetMapping("/reloadJob")
 //    @ResponseBody

+ 12 - 11
src/main/java/com/mooctest/controller/TaskController.java

@@ -2,6 +2,7 @@ package com.mooctest.controller;
 
 import com.mooctest.data.BugDTO;
 import com.mooctest.data.TaskDTO;
+import com.mooctest.model.BugData;
 import com.mooctest.model.MasterReport;
 import com.mooctest.service.*;
 import com.mooctest.util.ReportUtil;
@@ -35,6 +36,7 @@ public class TaskController {
 
     @Autowired
     BugDataService bugDataService;
+
     @GetMapping("/home")
     public String home(Model model) {
 
@@ -43,10 +45,6 @@ public class TaskController {
         return "task_list";
     }
 
-    @GetMapping("/addTask")
-    public String gettest (Model model){
-        return "addTask";
-    }
 
     @GetMapping("/")
     public String root(Model model) {
@@ -62,20 +60,23 @@ public class TaskController {
         // after import the bug data
         boolean aggregated = masterReportService.isAggregated(examId, caseId);
         List<BugDTO> allReports = bugReportService.getAllBugs(examId, caseId);
+        Map<String , BugData> bugIds2Data = bugDataService.bugId2BugData(examId, caseId);
         Map<String,String> single2rootMap = historyService.getSingle2Root(caseId, examId);
-        if (aggregated) {
+        if (aggregated) { // add the information that where present when reports have been aggregated
             List<String> bugIds = allReports.stream().map(BugDTO::getId).collect(Collectors.toList());
             List<MasterReport> mrs = masterReportService.getByBugIds(bugIds);
             Map<String, MasterReport> mrMap = mrs.stream().collect(toMap(MasterReport::getBugId, Function.identity()));
             allReports.forEach(bug -> {
-                MasterReport mr = mrMap.get(bug.getId());
-                bug.setStatus(mr.getStatus());
-                bug.setReviewerId(mr.getReviewerId());
-                bug.setMasterId(mr.getMasterId());
-                String te = single2rootMap.get(bug.getId());
-                bug.setTreeId(te==null?"null":te);
+                bug.setMasterId(mrMap.get(bug.getId()).getMasterId());
             });
         }
+        allReports.forEach(bug->{
+            String te = single2rootMap.get(bug.getId());
+            bug.setTreeId(te==null?"null":te);
+            bug.setStatus(bugIds2Data.get(bug.getId()).getStatus());
+            bug.setReviewerId(bugIds2Data.get(bug.getId()).getReviewerId());
+        });
+
         TaskDTO task = taskService.getByExamIdAndCaseId(examId, caseId);
         model.addAttribute("aggregated", aggregated);
         model.addAttribute("allReports", allReports);

+ 56 - 0
src/main/java/com/mooctest/service/AuditTaskService.java

@@ -0,0 +1,56 @@
+package com.mooctest.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.boot.jackson.JsonObjectDeserializer;
+import org.springframework.http.*;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class AuditTaskService {
+
+
+
+
+    public JSONArray getTaskData(){
+        RestTemplate rt = new RestTemplate();
+        StringHttpMessageConverter stringHttpMessageConverter=new StringHttpMessageConverter(Charset.forName("UTF-8"));
+        List<HttpMessageConverter<?>> list=new ArrayList<HttpMessageConverter<?>>();
+        list.add(stringHttpMessageConverter);
+        rt.setMessageConverters(list);
+        String str = "http://47.99.140.117:9090/Bug/api/review/getJobs";
+        JSONArray tasksJson = JSON.parseArray(rt.getForObject(str , String.class));
+        JSONObject rr = (JSONObject) tasksJson.get(0);
+        return tasksJson;
+    }
+
+    public JSONObject getSingleTask ( String jobId){
+        RestTemplate template = new RestTemplate();
+        String url = "http://47.99.140.117:9090/Bug/api/review/getJobJson";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("job_id", jobId);
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
+        JSONObject resJson = JSON.parseObject(tasksJson.getString("json"));
+        resJson.put("jobId", tasksJson.getString("job_id"));
+        return  resJson;
+    }
+
+
+
+}

+ 85 - 0
src/main/java/com/mooctest/service/JobService.java

@@ -0,0 +1,85 @@
+package com.mooctest.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class JobService {
+    //  转发 job的请求
+
+
+
+
+    public JSONArray generateItemGroupInfo ( int workerNum , int reportNum){
+        JSONArray res = new JSONArray();
+        return res;
+    }
+
+    public JSONObject addJob (String name, String desciption, String time, String paperId, List<String> userList, String workDistribution){
+        RestTemplate template = new RestTemplate();
+        if(!time.contains(" - ")){
+            return null;
+        }
+        String times []=time.split(" - ");
+        String url = "http://47.99.140.117:9090/Bug/api/job/uploadJob";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("name", name);
+        paramMap.add("description", desciption);
+        paramMap.add("paperId", paperId);
+        paramMap.add("startTime", times[0]);
+        paramMap.add("endTime", times[1]);
+        paramMap.add("workerList", userList);
+        paramMap.add("workerDistribution", workDistribution);
+
+//        System.out.println(paramMap.toString());
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
+//        System.out.prin;
+//        JSONObject resJson = JSON.parseObject(tasksJson.getString("json"));
+//        resJson.put("paperId", tasksJson.getString("paper_id"));
+        return  tasksJson;
+    }
+
+
+    public JSONArray getJobs(){
+        RestTemplate rt = new RestTemplate();
+        StringHttpMessageConverter stringHttpMessageConverter=new StringHttpMessageConverter(Charset.forName("UTF-8"));
+        List<HttpMessageConverter<?>> list=new ArrayList<HttpMessageConverter<?>>();
+        list.add(stringHttpMessageConverter);
+        rt.setMessageConverters(list);
+        String str = "http://47.99.140.117:9090/Bug/api/job/getJobs";
+        JSONArray tasksJson = JSON.parseArray(rt.getForObject(str , String.class));
+        return tasksJson;
+    }
+
+    public JSONObject getSinglePaper ( String jobId){
+        RestTemplate template = new RestTemplate();
+        String url = "http://47.99.140.117:9090/Bug/api/job/getJob";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("job_id", jobId);
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
+        return  tasksJson;
+    }
+}

+ 16 - 1
src/main/java/com/mooctest/service/PaperService.java

@@ -33,11 +33,26 @@ public class PaperService {
         return tasksJson;
     }
 
+    public JSONObject deletePaper (String paperId){
+        RestTemplate template = new RestTemplate();
+        String url = "http://47.99.140.117:9090/Bug/api/paper/delPaper";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("paperId", paperId);
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
+//        JSONObject resJson = JSON.parseObject(tasksJson.getString("json"));
+//        resJson.put("paperId", tasksJson.getString("paper_id"));
+        return  tasksJson;
+    }
+
     public JSONObject getSinglePaper ( String paperId){
         RestTemplate template = new RestTemplate();
         String url = "http://47.99.140.117:9090/Bug/api/paper/getPaperJson";
         MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
-        paramMap.add("paper_id", paperId);
+        paramMap.add("paperId", paperId);
         template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
         HttpHeaders headers = new HttpHeaders();
         HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);

+ 214 - 0
src/main/resources/static/js/addReviewJob.js

@@ -0,0 +1,214 @@
+test=function (element,id) {
+    var data = $(event.target).val();
+    $('#namelist'+id).html(getSpanHtml(getData(data)))
+    // console.log(getData(data))
+}
+/*<![CDATA[*/
+getData = function (str) {
+    var arr=str.split(";");
+    var res = new Array();
+    var tempArr;
+    var tempStart
+    var tempEnd
+    for(var i =0;i<arr.length;i++){
+        if(arr[i].indexOf("~")>=0){
+            tempArr = arr[i].split("~");
+            var tempStart = new Number(tempArr[0]);
+            var tempEnd   = new Number(tempArr[1]);
+            for ( var ii =tempStart;ii<tempEnd;ii++){
+                res.push(ii+"");
+            }
+            res.push(tempEnd+"");
+        }else{
+            res.push(arr[i]);
+        }
+    }
+    return res;
+}
+
+getSpanHtml = function(data){
+    var res = '';
+    for(var i =0;i<data.length;i++){
+        res+='<span class="badge bg-green">'+data[i]+'</span>'
+    }
+    return res;
+}
+
+getRealData = function(str){
+    var arr = str.split("~");
+    var start = new Number(arr[0]);
+    var end   = new Number(arr[1]);
+    var res = new Array();
+    for ( var i =start;i<end;i++){
+        res.push(i+"");
+    }
+    res.push(end+"");
+    return res;
+}
+
+
+
+deleteTr = function(element){
+    element.parentNode.parentNode.remove();
+}
+
+upTr = function(element){
+    var $tr = $(element).parents("tr");
+    if ($tr.index() != 1) {
+        $tr.prev().before($tr);
+    }
+}
+
+downTr  = function (element,id) {
+    var length = $('#table'+id +' tr').length;
+    var $tr = $(element).parents("tr");
+    if ($tr.index() != length - 1) {
+        $tr.next().after($tr);
+    }
+}
+
+deleteRule = function (id) {
+    $('#rule'+id).remove()
+}
+
+
+showModalAlert = function () {
+    var name = $('#name').val();
+}
+
+
+checkNum = function (event) {
+    var num = event.target.value;
+    console.log(num)
+    if(!isNaN(num)&&num.length!=0){
+        console.log(event.target.parentElement.parentElement)
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-success")
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+    }else{
+        var newNode = document.createElement("span");
+        newNode.setAttribute("class","help-block")
+        newNode.innerHTML =" 请输入数字 ";
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+        event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+
+        // if(event.target.nextSibling!=null){
+        // }else{
+        //     event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+        // }
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-error")
+    }
+}
+
+str2number = function(data){
+    //  refer : https://blog.csdn.net/u010865136/article/details/49336255
+    return parseInt(data)
+}
+
+checkNull = function (event) {
+    var num = event.target.value;
+    console.log(num)
+    if(num!=null&&num.length!=0){
+        console.log(event.target.parentElement.parentElement)
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-success")
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+    }else{
+        var newNode = document.createElement("span");
+        newNode.setAttribute("class","help-block")
+        newNode.innerHTML =" 请填写 ";
+        if(event.target.nextSibling==null){
+            event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+        }
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-error")
+    }
+}
+
+
+
+
+
+getDataSplit = function ( str ) {
+    var arr=str.split(";");
+    var res = new Array();
+    for(var i =0;i<arr.length;i++){
+        res.push(arr[i]);
+    }
+    return res;
+}
+//获取在本页面不会重复的ratio
+getNewRatioIndex = function () {
+    ratioIndex++;
+    return ratioIndex;
+}
+
+generateJson = function( type ){
+    // 遍历页面上的数据,生成json数据。
+    $.ajax({
+        url: '/review/job',
+        data:{
+            'name':$('#name').val(),
+            'description':$('#description').val(),
+            'paperId':id,
+            'time':$('#reservationtime').val(),
+            'group':$('#workerGroup').val(),
+            'workNum':$('#workNum').val(),
+            'itemGroupList':$('#deliverInfo').val()
+        },
+        type: 'PUT',
+        success: function (result) {
+            // alert(result);
+            // console.log(result);
+
+            if(result['status'] == 'fail'){
+                $.notify({
+                    // options
+                    message: result['message']
+                },{
+                    // settings
+                    delay: 100,
+                    timer: 1000,
+                    type: 'error'
+                });
+            }else{
+                // success
+                var jobId = result['jobId'];
+                console.log(jobId)
+                $.notify({
+                    // options
+                    message: '添加成功,jobid为'+jobId
+                },{
+                    // settings
+                    delay: 100,
+                    timer: 3000,
+                    type: 'success'
+                });
+            }
+        }
+    });
+}
+
+
+
+getReportInfo = function(){
+    var str = $('#reportInfo').val();
+    console.log(str)
+    var obj = eval('(' + str + ')');
+    // var tessst = new Object()
+    // tessst.reports = obj
+    console.log(JSON.stringify(obj))
+    return obj
+}
+
+getDeliverInfo = function () {
+    var str = $('#deliverInfo').val();
+    console.log(str)
+    var obj = eval('(' + str + ')');
+    console.log(JSON.stringify(obj))
+    return obj
+}
+/*]]>*/

+ 925 - 0
src/main/resources/static/js/changePaper.js

@@ -0,0 +1,925 @@
+test=function (element,id) {
+    var data = $(event.target).val();
+    $('#namelist'+id).html(getSpanHtml(getData(data)))
+    // console.log(getData(data))
+}
+/*<![CDATA[*/
+getData = function (str) {
+    var arr=str.split(";");
+    var res = new Array();
+    var tempArr;
+    var tempStart
+    var tempEnd
+    for(var i =0;i<arr.length;i++){
+        if(arr[i].indexOf("~")>=0){
+            tempArr = arr[i].split("~");
+            var tempStart = new Number(tempArr[0]);
+            var tempEnd   = new Number(tempArr[1]);
+            for ( var ii =tempStart;ii<tempEnd;ii++){
+                res.push(ii+"");
+            }
+            res.push(tempEnd+"");
+        }else{
+            res.push(arr[i]);
+        }
+    }
+    return res;
+}
+
+getSpanHtml = function(data){
+    var res = '';
+    for(var i =0;i<data.length;i++){
+        res+='<span class="badge bg-green">'+data[i]+'</span>'
+    }
+    return res;
+}
+
+getRealData = function(str){
+    var arr = str.split("~");
+    var start = new Number(arr[0]);
+    var end   = new Number(arr[1]);
+    var res = new Array();
+    for ( var i =start;i<end;i++){
+        res.push(i+"");
+    }
+    res.push(end+"");
+    return res;
+}
+
+addNewOption = function () {
+    $('#maincontent').append('\n' +
+        '            <div class="box box-info rule"  id="rule' +ruleId+
+        '">\n' +
+        '                <div class="box-header with-border">\n' +
+        '                    <h3 class="box-title">定制审查选项</h3>\n' +
+        '                    <button type="submit" onclick="addCheck(' +ruleId+
+        ')" class="btn btn-success pull-right">新建多选框</button>\n' +
+        '                    <button type="submit" onclick="addRatio(' +ruleId+
+        ')" class="btn btn-success pull-right">新建单选框</button>\n' +
+        '                    <button type="submit" onclick="addSingleCheck(' +ruleId+
+        ')" class="btn btn-success pull-right">新建单复选框</button>\n' +
+        '                    <button type="submit" onclick="addText(' +ruleId+
+        ')" class="btn btn-success pull-right">新建文本框</button>\n' +
+        '                    <button type="submit" onclick="addUpload(' +ruleId+
+        ')" class="btn btn-success pull-right">新建文件上传</button>\n' +
+        '                </div>\n' +
+        '                <!-- /.box-header -->\n' +
+        '                <!-- form start -->\n' +
+        '                <div class="form-horizontal">\n' +
+        '                    <div class="box-body">\n' +
+        '                        <div class="form-group">\n' +
+        '                            <label  class="col-sm-2 control-label">适用报告列表</label>\n' +
+        '                            <div class="col-sm-10">\n' +
+        '                                <input  onchange="test(this,' + ruleId +  ')" class="form-control" id="fitlist' + ruleId+
+        '" placeholder="请输入编号并用;分割,可用~输入连续的试题名称"/>\n' +
+        '                            </div>\n' +
+        '                            <label  class="col-sm-2 control-label">已选报告列表</label>\n' +
+        '                            <div class="col-sm-10" id="namelist' +ruleId+
+        '" >\n' +
+        '                            </div>\n' +
+        '                        </div>\n' +
+        '\n' +
+        '                        <div class="form-group">\n' +
+        '                            <label  class="col-sm-2 control-label">审查项</label>\n' +
+        '                            <div class="col-sm-10 ">\n' +
+        '                                <table class="table" id="table' + ruleId+
+        '">\n' +
+        '<tr>\n' +
+        '                    <td>\n' +
+        '                        示例\n' +
+        '                    </td>\n' +
+        '                    <td>\n' +
+        '                        标签\n' +
+        '                    </td>\n' +
+        '                    <td>\n' +
+        '                        数据说明\n' +
+        '                    </td>\n' +
+        '                    <td>\n' +
+        '                        操作\n' +
+        '                    </td>\n' +
+        '                </tr>'+
+        '\n' +
+        '                                </table>\n' +
+        '                            </div>\n' +
+        '                        </div>\n' +
+        '                    </div>\n' +
+        '                    <div class="box-footer">\n' +
+        '                        <button type="button" onclick="deleteRule(' +ruleId+
+        ')" class="btn btn-default">删除</button>\n' +
+        '                        <button type="button" class="btn btn-default" onclick="showModal(' +ruleId+
+        ')">\n' +
+        '                            本地预览\n' +
+        '                        </button>\n' +
+        '                        <button type="button" onclick="addNewOption()" class="btn btn-info pull-right">继续添加</button>\n' +
+        '                    </div>\n' +
+        '                </div>\n' +
+        '            </div>');
+    ruleId++;
+}
+
+addRatio = function (id) { // 添加单选框
+    var table = $('#table'+id);
+    var index = getNewRatioIndex();
+    table.append('<tr type="ratio">\n' +
+        '                                        <td>\n' +
+        '                                            <div class="form-group">\n' +
+        '                                                <div class="radio">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="radio" name="optionsRadios' + index+
+        '"  value="option1" checked="checked"/>\n' +
+        '                                                        Option one\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '                                                <div class="radio">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="radio" name="optionsRadios' +index+
+        '"  value="option2"/>\n' +
+        '                                                        Option two\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '                                                <div class="radio">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="radio" name="optionsRadios' +index+
+        '"  value="option3" />\n' +
+        '                                                        Option three\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '                                            </div>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleRatioByLabel(this)" type="text" class="form-control" placeholder="选项说明"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleRatio(this)" type="text" class="form-control" placeholder="选项数据 请用;将选项分隔"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <button onclick="upTr(this)" class="btn btn-default">上移</button>\n' +
+        '                                            <button onclick="downTr(this,' +id+
+        ')" class="btn btn-default">下移</button>\n' +
+        '                                            <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>\n' +
+        '                                        </td>\n' +
+        '                                    </tr>')
+
+}
+
+addText = function (id) { // 添加文字
+    var table = $('#table'+id);
+    table.append('<tr type="text">\n' +
+        '                                        <td>\n' +
+        '                                            <input type="text" class="form-control" placeholder="选项说明"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleText(this)" type="text" class="form-control" placeholder="选项数据"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <button onclick="upTr(this)" class="btn btn-default">上移</button>\n' +
+        '                                            <button onclick="downTr(this,' +id+
+        ')" class="btn btn-default">下移</button>\n' +
+        '                                            <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>\n' +
+        '                                        </td>\n' +
+        '                                    </tr>')
+}
+
+addUpload = function(id){// add upload input
+    var table = $('#table'+id); //
+
+    table.append('<tr type="file">\n' +
+        '                                        <td>\n' +
+        '<div class="form-group">\n' +
+        '                  <label for="exampleFile' +id+
+        '">File input</label>\n' +
+        '                  <input type="file" id="exampleFile' +id+
+        '">\n' +
+        '                </div>'+
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleFile(this)" type="text"  class="form-control" placeholder="请输入说明文字"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <button onclick="upTr(this)" class="btn btn-default">上移</button>\n' +
+        '                                            <button onclick="downTr(this,' +id+
+        ')" class="btn btn-default">下移</button>\n' +
+        '                                            <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>\n' +
+        '                                        </td>\n' +
+        '                                    </tr>')
+}
+
+addSingleCheck = function (id) { // 添加多选框
+    var table = $('#table'+id);
+    table.append('<tr type="singleCheck">\n' +
+        '                                        <td>\n' +
+        '                                            <div class="form-group">\n' +
+        '                                                <div class="checkbox">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="checkbox"/>\n' +
+        '                                                        Checkbox 1\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '                                            </div>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleSingleByLabel(this)" type="text" class="form-control" placeholder="选项说明"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleSingle(this)" type="text" class="form-control" placeholder="选项数据"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <button onclick="upTr(this)" class="btn btn-default">上移</button>\n' +
+        '                                            <button onclick="downTr(this,' +id+
+        ')" class="btn btn-default">下移</button>\n' +
+        '                                            <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>\n' +
+        '                                        </td>\n' +
+        '                                    </tr>')
+}
+
+addCheck = function (id) {
+    var table = $('#table'+id);
+    table.append('<tr type="check">\n' +
+        '                                        <td>\n' +
+        '                                            <div class="form-group">\n' +
+        '                                                <div class="checkbox">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="checkbox"/>\n' +
+        '                                                        Checkbox 1\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '\n' +
+        '                                                <div class="checkbox">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="checkbox"/>\n' +
+        '                                                        Checkbox 2\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '\n' +
+        '                                                <div class="checkbox">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="checkbox" />\n' +
+        '                                                        Checkbox disabled\n' +
+        '                                                    </label>\n' +
+        '                                                </div>\n' +
+        '                                            </div>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleCheckByLabel(this)" type="text" class="form-control" placeholder="选项说明"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <input onchange="showExampleCheck(this)" type="text" class="form-control" placeholder="选项数据 请用;将选项分隔"/>\n' +
+        '                                        </td>\n' +
+        '                                        <td>\n' +
+        '                                            <button onclick="upTr(this)" class="btn btn-default">上移</button>\n' +
+        '                                            <button onclick="downTr(this,' +id +
+        ')" class="btn btn-default">下移</button>\n' +
+        '                                            <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>\n' +
+        '                                        </td>\n' +
+        '                                    </tr>')
+
+};
+
+deleteTr = function(element){
+    element.parentNode.parentNode.remove();
+}
+
+upTr = function(element){
+    var $tr = $(element).parents("tr");
+    if ($tr.index() != 1) {
+        $tr.prev().before($tr);
+    }
+}
+
+downTr  = function (element,id) {
+    var length = $('#table'+id +' tr').length;
+    var $tr = $(element).parents("tr");
+    if ($tr.index() != length - 1) {
+        $tr.next().after($tr);
+    }
+}
+
+deleteRule = function (id) {
+    $('#rule'+id).remove()
+}
+
+showModal = function (id) {
+    var body = $('#formBody');
+    var myTable = document.getElementById("table"+id);
+    body.html("");
+    var da1 = $('#fitlist'+id).val();
+    var selectedData = '<div class="form-group">\n' +
+        '                            <label class="col-sm-2 control-label">适用试题</label>\n' +
+        '                            <div class="col-sm-10">\n' +
+        getSpanHtml(getData(da1))+
+        '                            </div>\n' +
+        '                        </div>';
+    body.append(selectedData);
+    var rowNum =  myTable.rows.length;
+    var tempdata  =  [];
+    var td0;
+    var tr;
+    var type;
+    for(var i = 0;i<rowNum;i++){
+        tr = myTable.rows[i];
+        type=tr.getAttribute("type");
+        if(type=="singleCheck"){
+            var singleCheckTip = myTable.rows[i].cells[1].children[0].value;
+            var singleCheckData = myTable.rows[i].cells[2].children[0].value;
+            console.log(singleCheckData,singleCheckTip)
+            var singleCheckTemp = '<div class="form-group">\n' +
+                '                            <label class="col-sm-2 control-label">' +singleCheckTip+
+                '</label>\n' +
+                '                            <div class="col-sm-10">\n' ;
+
+            singleCheckTemp+='<div class="checkbox">\n' +
+                '                                                    <label>\n' +
+                '                                                        <input type="checkbox"/>\n' +singleCheckData+
+                '                                                    </label>\n' +
+                '                                                </div>';
+
+            singleCheckTemp+=
+                '                                            </div>\n' +
+                '                                        </div>';
+            body.append(singleCheckTemp);
+        }else if(type=="check"){
+            var checkTip = myTable.rows[i].cells[1].children[0].value;
+            var checkData = myTable.rows[i].cells[2].children[0].value;
+            var checkArr = checkData.split(';');
+            var checkTemp = '<div class="form-group">\n' +
+                '                            <label class="col-sm-2 control-label">' +checkTip+
+                '</label>\n' +
+                '                            <div class="col-sm-10">\n' ;
+            for( var  checkJ = 0;checkJ<checkArr.length;checkJ++){
+                checkTemp+='<div class="checkbox">\n' +
+                    '                                                    <label>\n' +
+                    '                                                        <input type="checkbox"/>\n' +checkArr[checkJ]+
+                    '                                                    </label>\n' +
+                    '                                                </div>';
+            }
+            checkTemp+=
+                '                                            </div>\n' +
+                '                                        </div>';
+            body.append(checkTemp);
+        }else if(type=="ratio"){
+            var ratioTip = myTable.rows[i].cells[1].children[0].value;
+            var ratioData = myTable.rows[i].cells[2].children[0].value;
+            var ratioArr = ratioData.split(';');
+            var ratioTemp = '<div class="form-group">\n' +
+                '                            <label class="col-sm-2 control-label">' +ratioTip+
+                '</label>\n' +
+                '                            <div class="col-sm-10">\n' ;
+
+            for( var  ratioJ = 0;ratioJ<ratioArr.length;ratioJ++){
+                ratioTemp+='<div class="radio">\n' +
+                    '                                                    <label>\n' +
+                    '                                                        <input type="radio" name="optionsRadios' + i+
+                    '"  value="' +ratioArr[ratioJ]+
+                    '"/>\n' +ratioArr[ratioJ]+
+                    '                                                    </label>\n' +
+                    '                                                </div>';
+            }
+            ratioTemp+=
+                '                                            </div>\n' +
+                '                                        </div>';
+            body.append(ratioTemp);
+        }else if(type=="text"){
+            var textData = myTable.rows[i].cells[1].children[0].value;
+            body.append('<div class="form-group">\n' +
+                '                            <label class="col-sm-2 control-label">' +textData+
+                '</label>\n' +
+                '                            <div class="col-sm-10">\n' +
+                '<input class="form-control"  placeholder="请输入"/>'+
+                '                            </div>\n' +
+                '                        </div>')
+        }else if( type == "file"){
+            // when the check item is file upload input
+            var fileData = myTable.rows[i].cells[1].children[0].value;
+            body.append('<div class="form-group">\n' +
+                '                            <label for="testApplication"  class="col-sm-2 control-label">'+fileData+
+                '</label>\n' +
+                '                            <div class="col-sm-10">\n' +
+                '                                <input  type="file" />\n' +
+                '                                <!--                               <p class="help-block">Example block-level help text here.</p>-->\n' +
+                '                            </div>\n' +
+                '                        </div>');
+        }
+    }
+    $('#modal-default').modal('show');
+}
+
+showModalAlert = function () {
+    var name = $('#name').val();
+}
+
+
+checkNum = function (event) {
+    var num = event.target.value;
+    console.log(num)
+    if(!isNaN(num)&&num.length!=0){
+        console.log(event.target.parentElement.parentElement)
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-success")
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+    }else{
+        var newNode = document.createElement("span");
+        newNode.setAttribute("class","help-block")
+        newNode.innerHTML =" 请输入数字 ";
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+        event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+
+        // if(event.target.nextSibling!=null){
+        // }else{
+        //     event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+        // }
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-error")
+    }
+}
+
+str2number = function(data){
+    //  refer : https://blog.csdn.net/u010865136/article/details/49336255
+    return parseInt(data)
+}
+
+checkNull = function (event) {
+    var num = event.target.value;
+    console.log(num)
+    if(num!=null&&num.length!=0){
+        console.log(event.target.parentElement.parentElement)
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-success")
+        if(event.target.nextSibling!=null){
+            event.target.nextSibling.remove();
+        }
+    }else{
+        var newNode = document.createElement("span");
+        newNode.setAttribute("class","help-block")
+        newNode.innerHTML =" 请填写 ";
+        if(event.target.nextSibling==null){
+            event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
+        }
+        event.target.parentElement.parentElement.setAttribute("class","form-group has-error")
+    }
+}
+
+
+showExampleFile = function (element) {
+    var td = $(element).parents("td").prev("td"); // 获取示例
+    var data = $(element).val();
+    td.html('<div class="form-group">\n' +
+        '                            <label   class="col-sm-3 control-label">' + data +
+        '</label>\n' +
+        '                            <div class="col-sm-9">\n' +
+        '                                <input  type="file" />\n' +
+        '                            </div>\n' +
+        '                        </div>')
+}
+showExampleText = function (element) {
+    var $tr = $(element).parents("td").prev("td"); // 获取上一个元素
+    var data = $(element).val();
+    $tr.html('<div class="form-group">\n' +
+        '                  <label  class="col-sm-3 control-label">' +data+
+        '</label>\n' +
+        '\n' +
+        '                  <div class="col-sm-9">\n' +
+        '                    <input type="text" class="form-control"  placeholder="请输入">\n' +
+        '                  </div>\n' +
+        '                </div>')
+}
+showExampleRatio = function (element) { // xuanxiang  shuju
+    // 显示单选框
+    var dataRatio = $(element).parents("td").prev("td").prev("td"); // 获取展示的元素
+    var data  =  $(element).val();
+    var label = $(element).parents("td").prev("td").children("input").val();
+    dataRatio.html(getExampleRatioHtml(label,data));
+}
+//show example ratio by label ;
+showExampleRatioByLabel = function(element){
+    // 显示单选框
+    var dataRatio = $(element).parents("td").prev("td"); // 获取展示的元素
+    var label  =  $(element).val();
+    var data = $(element).parents("td").next("td").children("input").val();
+    dataRatio.html(getExampleRatioHtml(label,data));
+}
+getExampleRatioHtml = function(label,data){
+    var index = getNewRatioIndex();
+    var ratioArr = data.split(';');
+    var ratioTemp = '<div class="form-group">\n' +
+        '                            <label class="col-sm-3 control-label">' +label+
+        '</label>\n' +
+        '                            <div class="col-sm-9">\n' ;
+
+    for( var  ratioJ = 0;ratioJ<ratioArr.length;ratioJ++){
+        ratioTemp+='<div class="radio">\n' +
+            '                                                    <label>\n' +
+            '                                                        <input type="radio" name="optionsRadios' + index+
+            '"  value="' +ratioArr[ratioJ]+
+            '"/>\n' +ratioArr[ratioJ]+
+            '                                                    </label>\n' +
+            '                                                </div>';
+    }
+    ratioTemp+=
+        '                                            </div>\n' +
+        '                                        </div>';
+    return ratioTemp;
+}
+showExampleSingle = function(element){
+    //单复选框
+    var dataRatio = $(element).parents("td").prev("td").prev("td"); // 获取展示的元素
+    var data  =  $(element).val();
+    var label = $(element).parents("td").prev("td").children("input").val();
+    dataRatio.html(getExampleSingleHtml(label,data));
+}
+showExampleSingleByLabel = function(element){
+    //单复选框
+    var dataRatio = $(element).parents("td").prev("td"); // 获取展示的元素
+    var label  =  $(element).val();
+    var data = $(element).parents("td").next("td").children("input").val();
+    dataRatio.html(getExampleSingleHtml(label,data));
+}
+getExampleSingleHtml = function(label,data ){
+    var singleCheckTip = label;
+    var singleCheckData = data;
+    var singleCheckTemp = '<div class="form-group">\n' +
+        '                            <label class="col-sm-3 control-label">' +singleCheckTip+
+        '</label>\n' +
+        '                            <div class="col-sm-9">\n' ;
+
+    singleCheckTemp+='<div class="checkbox">\n' +
+        '                                                    <label>\n' +
+        '                                                        <input type="checkbox"/>\n' +singleCheckData+
+        '                                                    </label>\n' +
+        '                                                </div>';
+
+    singleCheckTemp+=
+        '                                            </div>\n' +
+        '                                        </div>';
+    return singleCheckTemp;
+}
+showExampleCheck = function(element){
+    //复选框
+    var dataRatio = $(element).parents("td").prev("td").prev("td"); // 获取展示的元素
+    var data  =  $(element).val();
+    var label = $(element).parents("td").prev("td").children("input").val();
+    dataRatio.html(getExampleCheckHtml(label,data));
+}
+showExampleCheckByLabel = function( element ){
+    //复选框
+    var dataRatio = $(element).parents("td").prev("td"); // 获取展示的元素
+    var label  =  $(element).val();
+    var data = $(element).parents("td").next("td").children("input").val();
+    dataRatio.html(getExampleCheckHtml(label,data));
+}
+getExampleCheckHtml = function(label,data){
+    // ---
+    var checkTip = label;
+    var checkData = data;
+    var checkArr = checkData.split(';');
+    var checkTemp = '<div class="form-group">\n' +
+        '                            <label class="col-sm-3 control-label">' +checkTip+
+        '</label>\n' +
+        '                            <div class="col-sm-9">\n' ;
+    for( var  checkJ = 0;checkJ<checkArr.length;checkJ++){
+        checkTemp+='<div class="checkbox">\n' +
+            '                                                    <label>\n' +
+            '                                                        <input type="checkbox"/>\n' +checkArr[checkJ]+
+            '                                                    </label>\n' +
+            '                                                </div>';
+    }
+    checkTemp+=
+        '                                            </div>\n' +
+        '                                        </div>';
+    return checkTemp;
+}
+
+getDataSplit = function ( str ) {
+    var arr=str.split(";");
+    var res = new Array();
+    for(var i =0;i<arr.length;i++){
+        res.push(arr[i]);
+    }
+    return res;
+}
+//获取在本页面不会重复的ratio
+getNewRatioIndex = function () {
+    ratioIndex++;
+    return ratioIndex;
+}
+
+generateJson = function( paperId, type ){
+    // 遍历页面上的数据,生成json数据。
+    var data = new Object();
+    data.description = $('#description').val();
+    data.name = $('#name').val();
+    // data.time = $('#reservationtime').val();
+    data.type = $('#testType').val();
+    data.application_url =  $('#testApplication').attr('value')==null?'':$('#testApplication').attr('value');
+    data.requirement_url = $('#testRequirement').attr('value')==null?'':$('#testRequirement').attr('value');
+    data.report_num = str2number( $('#reportNum').val() );
+    data.create_time = $('#createTime').val();
+    // data.worker_num = str2number( $('#auditNum').val() );
+    var item_group_list = new Array();
+    $('.rule').each(function () {
+        // every item information
+        var element = $(this);
+        var temp = new Object();
+        var reportTemp = new Object()
+        var ruleIndex = element.attr("id").charAt(4); // index is 4 (like)
+        // temp.index = ruleIndex;
+        var examples = $('#namelist'+ruleIndex).children();
+        var tempExample  ;
+        var report_list = new Array();
+        for ( var i =0;i<examples.length;i++){
+            tempExample = examples[i];
+            // reportTemp = new Object();
+            // reportTemp.report_index = tempExample.innerHTML;
+            report_list.push(str2number(tempExample.innerHTML));
+        }
+        temp.report_list = report_list
+        temp.origin_report_list = $('#fitlist'+ruleIndex).val();
+        // bianli biao
+        var myTable = document.getElementById("table"+ruleIndex) ; //
+        var rowNum =  myTable.rows.length;
+        var tr;
+        var type;
+        var item_list = new Array();
+        var itemTemp ;
+        for(var i = 1;i<rowNum;i++){
+            itemTemp = new Object()
+            tr = myTable.rows[i];
+            type=tr.getAttribute("type");
+            itemTemp.index = (i-1);
+            itemTemp.is_required = true;
+            var options = new Array()
+            if(type=="singleCheck"){
+                var singleCheckTip = myTable.rows[i].cells[1].children[0].value;
+                var singleCheckData = myTable.rows[i].cells[2].children[0].value;
+                itemTemp.description = singleCheckTip
+                // itemTemp.is_multiple ="0"
+                itemTemp.type="Multiple"
+                // var optionS = new Object();
+                // optionS.option = singleCheckData
+                itemTemp.originTip = singleCheckTip;
+                itemTemp.originData = singleCheckTip;
+                itemTemp.originType = "singleCheck"
+                options.push(singleCheckData)
+            }else if(type=="check"){
+                var checkTip = myTable.rows[i].cells[1].children[0].value;
+                var checkData = myTable.rows[i].cells[2].children[0].value;
+                itemTemp.description = checkTip;
+                // itemTemp.is_multiple = "1"
+                itemTemp.type="Multiple"
+                itemTemp.originType = "multiple"
+                itemTemp.originTip = checkTip;
+                itemTemp.originData = checkData;
+                var optionC ;
+                var checkArr = checkData.split(';');
+                for( var  checkJ = 0;checkJ<checkArr.length;checkJ++){
+                    // optionC = new Object();
+                    // optionC.option = checkArr[checkJ]
+                    options.push(checkArr[checkJ])
+                }
+            }else if(type=="ratio"){
+                var ratioTip = myTable.rows[i].cells[1].children[0].value;
+                var ratioData = myTable.rows[i].cells[2].children[0].value;
+                var ratioArr = ratioData.split(';');
+                itemTemp.description = ratioTip;
+                // itemTemp.is_multiple = "0"
+                itemTemp.type="Single"
+                itemTemp.originTip = ratioTip;
+                itemTemp.originData = ratioData;
+                var optionR ;
+                for( var  ratioJ = 0;ratioJ<ratioArr.length;ratioJ++){
+                    // optionR = new Object();
+                    // optionR.option = ratioArr[ratioJ]
+                    options.push(ratioArr[ratioJ])
+                }
+            }else if(type=="text"){
+                var textData = myTable.rows[i].cells[1].children[0].value;
+                itemTemp.description = textData;
+                // itemTemp.is_multiple = "0"
+                itemTemp.type="Description"
+                itemTemp.originData = textData;
+                // var optionT = new Object();
+                // optionT.option = ""
+                // options.push("")
+
+            }else if( type == "file"){
+                var fileData = myTable.rows[i].cells[1].children[0].value;
+                itemTemp.description = fileData;
+                // itemTemp.is_multiple = "0"
+                itemTemp.type="File"
+                itemTemp.originData=fileData;
+                // var optionF = new Object();
+                // optionF.option = ""
+                // options.push("")
+            }
+            itemTemp.options= options
+            item_list.push(itemTemp)
+        }
+        temp.item_list=item_list
+        item_group_list.push(temp)
+        // console.log(JSON.stringify(temp))
+    })
+    data.item_group_list = item_group_list
+    data.report_list = getReportInfo()
+    // data.group_list = getDeliverInfo()
+    console.log(JSON.stringify(data));
+    // 提交
+
+    //check
+    // $.ajax({
+    //     url: 'http://10.0.0.29:8090/Bug/api/extra/uploadJob',
+    //     data: {
+    //         'jobJson': JSON.stringify(data)
+    //     },
+    //     type: 'POST',
+    //     success: function (result) {
+    //         var obj = eval('(' + result + ')');
+    //         console.log(obj)
+    //     }
+    // })
+    // return ;
+    // 发送请求
+    $.ajax({
+        url: 'http://47.99.140.117:9090/Bug/api/paper/updatePaper',
+        data:{
+            'paperId':paperId,
+            'paperJson':JSON.stringify(data)
+        },
+        type: 'POST',
+        success: function (result) {
+            // alert(result);
+            console.log(result);
+            var obj = eval('(' + result + ')');
+            console.log(obj)
+            console.log(obj["id"])
+            console.log(obj['status']);
+            if(obj['status'] == 'fail'){
+                $.notify({
+                    // options
+                    message: obj['message']
+                },{
+                    // settings
+                    delay: 100,
+                    timer: 1000,
+                    type: 'error'
+                });
+            }else{
+                // success
+                var jobId = obj['paperId'];
+                if ( type == 1 ){
+                    // var workid = getOneWorker();
+                    // console.log("worke")
+                    // console.log(workid)
+                    window.open('http://47.99.140.117:9090/report/review/paper/'+paperId)
+                    // window.open('http://47.99.140.117:9090/report/job/'+jobId+'/'+workid+'/0/1');
+                }else{
+                    $.notify({
+                        // options
+                        message: '添加成功,paperid为'+jobId
+                    },{
+                        // settings
+                        delay: 100,
+                        timer: 3000,
+                        type: 'success'
+                    });
+                }
+            }
+        }
+    });
+}
+
+showyu = function (){
+
+    generateJson(paperId,1)
+}
+
+savePaper = function(){
+
+    generateJson(paperId,0)
+}
+
+getReportInfo = function(){
+    var str = $('#reportInfo').val();
+    console.log(str)
+    var obj = eval('(' + str + ')');
+    // var tessst = new Object()
+    // tessst.reports = obj
+    console.log(JSON.stringify(obj))
+    return obj
+}
+
+getDeliverInfo = function () {
+    var str = $('#deliverInfo').val();
+    console.log(str)
+    var obj = eval('(' + str + ')');
+    // var tessst = new Object()
+    // tessst.reports = obj
+    console.log(JSON.stringify(obj))
+    return obj
+}
+
+changeJob = function () {
+    $('#modal-reload').modal('show');
+}
+
+reloadJob = function () {
+    var jobId = $('#jobid').val();
+    location.href = '/addTask?jobid='+jobid
+}
+
+getOneWorker = function () {
+    // var str = $('#deliverInfo').val();
+    // // console.log(str)
+    // var obj = eval('(' + str + ')');
+    // console.log(obj[0].worker_list[0])
+    // return obj[0].worker_list[0];
+    return 1
+};
+
+
+
+getCleanStr = function (str) {
+    var obj = eval('(' + str + ')');
+    var formattedStr = JSON.stringify(obj, null, 2);
+    return formattedStr;
+};
+
+
+function uploadFile( elementId) {
+    var obj = $('#'+elementId).get(0)
+    var file = obj.files[0];//获取文件流
+    var val = obj.value;
+    var suffix = val.substr(val.indexOf("."));
+    var storeAs = "auditPaper/" + timestamp() +getShortId()+ suffix;
+    // console.log(file.name + ' => ' + storeAs);
+    client.multipartUpload(storeAs, file).then(function (result) {
+        console.log('http://mooctest-site.oss-cn-shanghai.aliyuncs.com/'+storeAs)
+        $('#'+elementId).attr('value','http://mooctest-site.oss-cn-shanghai.aliyuncs.com/'+storeAs)
+    }).catch(function (err) {
+        console.log(err);
+    });
+}
+
+/**
+ * 生成文件名
+ * @returns
+ */
+function timestamp(){
+    var time = new Date();
+    var y = time.getFullYear();
+    var m = time.getMonth()+1;
+    var d = time.getDate();
+    var h = time.getHours();
+    var mm = time.getMinutes();
+    var s = time.getSeconds();
+    console.log(y);
+    return ""+y+add0(m)+add0(d)+"/"+add0(h)+add0(mm)+add0(s);
+}
+function add0(m){
+    return m<10?'0'+m : m;
+}
+
+function getShortId () {
+    if (paperId==null){
+        return "0000"
+    }else if (paperId.length < 4 ){
+        return paperId
+    }else{
+        return  paperId.substring(paperId.length-4, paperId.length);
+    }
+}
+
+setShowRule = function (str) {
+    var obj = eval('(' + str + ')');
+    console.log(obj)
+    var body = $('#showReport');
+    var temp ;
+    for (var i = 0 ; i < obj.length; i++){
+        temp = obj[i]
+        body.append(showSingleRule(temp))
+    }
+}
+
+showSingleRule = function  ( obj ){
+    return '<div class="morris-hover morris-default-style col-lg-3 col-sm-6 col-md-4" >\n' +
+        '                                                <div class="callout callout-my">\n' +
+        '                                                    <p><span class="show-report-left">index:</span>'+getShortDes(obj['index'],20)+'</p>\n' +
+        '                                                    <p><span class="show-report-left">name:</span>'+getShortDes(obj['name'],20)+'</p>\n' +
+        '                                                    <p><span class="show-report-left">file_url:</span>'+getShortDes(obj['file_url'],20)+'</p>\n' +
+        '                                                    <p><span class="show-report-left">img_url:</span>'+getShortDes(obj['img_url'],20)+'</p>\n' +
+        '                                                    <p><span class="show-report-left">original_id:</span>'+getShortDes(obj['original_id'],20)+'</p>\n' +
+        '                                                    <p><span class="show-report-left">description:</span>'+getShortDes(obj['description'],60)+'</p>\n' +
+        '                                                </div>\n' +
+        '                                            </div>'
+}
+
+getShortDes = function (test, length ) {
+    if(test.length>length+1){
+        return test.substr(0,length)+'...';
+    }
+    return test;
+}
+/*]]>*/

+ 388 - 0
src/main/resources/templates/addReviewJob.html

@@ -0,0 +1,388 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="base">
+<head>
+    <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
+    <!-- dataTables -->
+    <link rel="stylesheet" type="text/css"
+          href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css"/>
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/Ionicons/css/ionicons.min.css"/>
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.css"/>
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"/>
+    <!-- iCheck for checkboxes and radio inputs -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/iCheck/all.css"/>
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.css"/>
+    <!-- Select2 -->
+    <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
+    <!-- Theme style -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/AdminLTE.min.css"/>
+    <!-- AdminLTE Skins. Choose a skin from the css/skins
+         folder instead of downloading all of them to reduce the load. -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/skins/_all-skins.min.css"/>
+    <style>
+        body {
+            padding-right: 0px !important;
+        }
+        *.modal-open {
+            overflow-y: scroll;
+            padding-right: 0 !important;
+        }
+        .content {
+            padding-left: 45px;
+            padding-right: 45px;
+        }
+        .box {
+            margin-bottom: 50px;
+        }
+        .box-header button{
+            margin-right: 5px;
+        }
+        .table tr td {
+            padding-right: 10px;
+            padding-left: 10px;
+            border-top: 1px solid #f4f4f4;
+            border-right: 1px solid #f4f4f4;
+        }
+
+        td .form-group {
+            margin-bottom: 0px;
+        }
+    </style>
+</head>
+<body>
+<div layout:fragment="mainbody">
+
+
+
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <div class="user-panel">
+                <div class="pull-left image">
+                    <img src="/static/images/avatar/avatar-admin.jpg" class="img-circle" alt="User Image" />
+                </div>
+                <div class="pull-left info">
+                    <p>Admin</p>
+                    <a href="#">
+                        <i class="fa fa-circle text-success"></i>
+                        Online
+                    </a>
+                </div>
+            </div>
+
+            <!-- Search form -->
+            <form action="#" method="get" class="sidebar-form">
+                <div class="input-group">
+                    <input type="text" name="q" class="form-control" placeholder="Search..." />
+                    <span class="input-group-btn">
+						<button type="submit" name="search" id="search-btn" class="btn btn-flat">
+							<i class="fa fa-search"></i>
+						</button>
+					</span>
+                </div>
+            </form>
+
+            <!-- Sidebar Menu -->
+            <ul class="sidebar-menu tree" data-widget="tree">
+                <li>
+                    <a href="/addTask">
+                        <i class="glyphicon glyphicon-pencil"></i>
+                        <span>
+                            新建任务
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/auditTasks">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            众审任务列表
+                        </span>
+                    </a>
+                </li>
+                <!--                {% for task in app_list %}-->
+                <!--                <li th:each="task:${tasks}" >-->
+
+                <!--                    <a th:href="'/task_detail?examId='+${task.examId}+'&amp;caseId='+${task.caseId}" th:text="${task.name}">-->
+                <!--                        <i class="fa fa-link"></i>-->
+                <!--                    </a>-->
+                <!--                </li>-->
+                <!--                {% endfor %}-->
+
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
+
+            </ul>
+
+
+        </section>
+    </aside>
+
+
+    <div class="content-wrapper">
+        <!-- Content Header (Page header) -->
+        <section class="content-header">
+            <h1>
+                创建众审任务
+                <small>众包审核</small>
+            </h1>
+            <ol class="breadcrumb">
+                <li><a href="/home"><i class="fa fa-dashboard"></i> 主页</a></li>
+                <li><a href="/addJob">创建众审任务</a></li>
+            </ol>
+        </section>
+
+        <!-- Main content -->
+        <section class="content" id="maincontent">
+
+            <div class="box box-primary" >
+                <div class="box-header with-border">
+                    <h3 class="box-title">基本信息</h3>
+
+                    <button class="btn btn-success pull-right" onclick="generateJson(0)">
+                        生成
+                    </button>
+                </div>
+                <!-- /.box-header -->
+                <div class="box-body">
+                    <form class="form-horizontal">
+                        <!-- text input -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">采用的Paper</label>
+                            <div class="col-sm-10">
+                                <a type="button"  th:onclick="'showPaperDetail('+${paperId}+')'"  id="paperId" th:text="${paperName}" ></a>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">名称</label>
+                            <div class="col-sm-10">
+                                <input  onchange="checkNull(event)" class="form-control" id="name" placeholder="请输入Job任务名称"/>
+                            </div>
+                        </div>
+                        <!-- textarea -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">描述</label>
+                            <div class="col-sm-10">
+                                <textarea onchange="checkNull(event)" id="description" class="form-control" rows="3" placeholder="请输入描述信息"></textarea>
+                            </div>
+                        </div>
+
+                        <!-- Date and time range -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label" >时间</label>
+                            <div class=" col-sm-10">
+                                <!--                                <div class="input-group-addon">-->
+                                <!--                                    <i class="fa fa-clock-o"></i>-->
+                                <!--                                </div>-->
+                                <input type="text" class="form-control pull-right" id="reservationtime"/>
+                            </div>
+                            <!-- /.input group -->
+                        </div>
+                        <!-- select -->
+
+
+                        <!-- text input -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">工人组</label>
+                            <div class="col-sm-10">
+                                <input id="workerGroup" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人组"/>
+                            </div>
+                        </div>
+                        <!-- text input -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">工人总数</label>
+                            <div class="col-sm-10">
+                                <input id="workNum" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人总数"/>
+                            </div>
+                        </div>
+                        <!-- textarea -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">报告分配信息</label>
+                            <div class="col-sm-10">
+                                <textarea class="form-control" id="deliverInfo" onchange="checkNull(event)" rows="8" placeholder="请输入json格式的报告分配信息"></textarea>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+
+
+        </section>
+
+    </div>
+
+
+    <div class="modal fade" id="modal-default">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalBody">
+                    <form class="form-horizontal" id="formBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+    <div class="modal fade" id="modal-alert">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalAlertBody">
+                    <form class="form-horizontal" id="formAlertBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+
+</div>
+
+
+</body>
+</html>
+<!-- jQuery 3 -->
+<!--<script src="/static/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>-->
+<!-- Bootstrap 3.3.7 -->
+<script src="/static/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+<!-- InputMask -->
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+<!-- date-range-picker -->
+<script src="/static/AdminLTE/bower_components/moment/min/moment.min.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll -->
+<script src="/static/AdminLTE/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="/static/AdminLTE/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="/static/AdminLTE/bower_components/fastclick/lib/fastclick.js"></script>
+<!-- AdminLTE App -->
+<!--<script src="/static/AdminLTE/dist/js/adminlte.min.js"></script>-->
+<!-- AdminLTE for demo purposes -->
+<script src="/static/AdminLTE/dist/js/demo.js"></script>
+<!-- add Task js for this file only -->
+<script src="/static/js/addReviewJob.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
+<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
+
+    var ruleId ;
+    var ratioIndex;
+
+    /*<![CDATA[*/
+    var id = [[${paperId}]];
+    /*]]>*/
+
+
+    $(document).ready(function(){
+        $('[data-toggle="tooltip"]').tooltip();
+
+        //Initialize Select2 Elements
+        $('.select2').select2()
+
+        ruleId = 0;
+        ratioIndex =0 ;
+
+
+        //Date range picker
+        $('#reservation').daterangepicker()
+        //Date range picker with time picker
+        // $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' })
+        $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, locale: { format: 'MM/DD/YYYY hh:mm A' }})
+        //Date range as a button
+        $('#daterange-btn').daterangepicker(
+            {
+                ranges   : {
+                    'Today'       : [moment(), moment()],
+                    'Yesterday'   : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+                    'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
+                    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
+                    'This Month'  : [moment().startOf('month'), moment().endOf('month')],
+                    'Last Month'  : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+                },
+                startDate: moment().subtract(29, 'days'),
+                endDate  : moment()
+            },
+            function (start, end) {
+                $('#daterange-btn span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'))
+            }
+        )
+
+        //Date picker
+        $('#datepicker').datepicker({
+            autoclose: true
+        })
+
+
+
+
+        //Timepicker
+        $('.timepicker').timepicker({
+            showInputs: false
+        })
+
+        var taskListTable = $('#task-list').DataTable({
+            searching: true,
+            pageLength: 25
+        });
+    });
+
+    showPaperDetail = function (paperId) {
+        window.open("/paperDetail?id="+paperId);
+    }
+
+
+
+
+
+
+
+</script>

+ 1 - 1
src/main/resources/templates/add_paper.html

@@ -217,7 +217,7 @@
                         <div class="form-group">
                             <label class="col-sm-2 control-label">报告信息</label>
                             <div class="col-sm-10">
-                                <textarea class="form-control" id="reportInfo" onchange="checkNull(event)" rows="3" placeholder="请输入json格式的报告信息"></textarea>
+                                <textarea class="form-control" id="reportInfo" onchange="checkNull(event)" rows="8" placeholder="请输入json格式的报告信息"></textarea>
                             </div>
                         </div>
 

+ 118 - 28
src/main/resources/templates/changePaper.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
       xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
-      layout:decorator="base">
+      layout:decorator="base" xmlns:overflow="http://www.w3.org/1999/xhtml">
 <head>
     <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
     <!-- dataTables -->
@@ -54,6 +54,18 @@
         td .form-group {
             margin-bottom: 0px;
         }
+
+        .callout-my {
+            background: #a7eeff9c;
+            border-left: 5px solid #0097bc;
+        }
+        .callout-my p{
+            word-break: break-all;
+        }
+
+        .show-report-left{
+            color: #2875b7;
+        }
     </style>
 </head>
 <body>
@@ -108,6 +120,14 @@
                     </a>
                 </li>
 
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
             </ul>
         </section>
     </aside>
@@ -132,11 +152,10 @@
             <div class="box box-primary" >
                 <div class="box-header with-border">
                     <h3 class="box-title">基本信息</h3>
-
-                    <button class="btn btn-success pull-right" onclick="generateJson(0)">
+                    <button onclick="savePaper()" class="btn btn-success pull-right" >
                         保存
                     </button>
-                    <button class="btn btn-default pull-right" onclick="showyu()">
+                    <button onclick="showyu()"   class="btn btn-default pull-right" >
                         预览
                     </button>
                     <button class="btn btn-default pull-right" onclick="addNewOption()">
@@ -163,12 +182,12 @@
 
                         <!-- Date and time range -->
                         <div class="form-group">
-                            <label class="col-sm-2 control-label" >时间</label>
+                            <label class="col-sm-2 control-label" >创建时间</label>
                             <div class=" col-sm-10">
                                 <!--                                <div class="input-group-addon">-->
                                 <!--                                    <i class="fa fa-clock-o"></i>-->
                                 <!--                                </div>-->
-                                <input disabled="disabled" type="text" th:value="${data.get('create_time')}" class="form-control pull-right" />
+                                <input disabled="disabled" id="createTime" type="text" th:value="${data.get('create_time')}" class="form-control pull-right" />
                             </div>
                             <!-- /.input group -->
                         </div>
@@ -189,7 +208,7 @@
                             <label for="testApplication"  class="col-sm-2 control-label">附件(可选)</label>
                             <div class="col-sm-10">
                                 <a  th:href="@{${data.get('application_url')}}" class="col-sm-2 " >原始附件</a>
-                                <input  type="file" id="testApplication"/>
+                                <input th:attr="value=${data.get('application_url')}" onchange="uploadFile('testApplication')" type="file" id="testApplication"/>
                                 <!--                               <p class="help-block">Example block-level help text here.</p>-->
                             </div>
                         </div>
@@ -197,7 +216,7 @@
                             <label for="testRequirement" class="col-sm-2 control-label">测试需求</label>
                             <div class="col-sm-10">
                                 <a th:href="@{${data.get('requirement_url')}}" class="col-sm-2 " >原始测试需求</a>
-                                <input  type="file" id="testRequirement"/>
+                                <input th:attr="value=${data.get('requirement_url')}" onchange="uploadFile('testRequirement')" type="file" id="testRequirement"/>
                                 <!--                               <p class="help-block">Example block-level help text here.</p>-->
                             </div>
                         </div>
@@ -214,7 +233,34 @@
                         <div class="form-group">
                             <label class="col-sm-2 control-label">报告信息</label>
                             <div class="col-sm-10">
-                                <textarea class="form-control" th:text="${data.get('report_list')}" id="reportInfo" onchange="checkNull(event)" rows="3" placeholder="请输入json格式的报告信息"></textarea>
+                                <div class="nav-tabs-custom" style="cursor: move;">
+                                    <!-- Tabs within a box -->
+                                    <ul class="nav nav-tabs pull-right ui-sortable-handle">
+                                        <li class="active">
+                                            <a href="#showReport" data-toggle="tab" aria-expanded="true">视图</a>
+                                        </li>
+                                        <li class="">
+                                            <a href="#editReport" data-toggle="tab" aria-expanded="false">编辑</a>
+                                        </li>
+                                        <li class="pull-left header">
+                                            <i class="fa fa-inbox">
+                                            </i> 报告信息
+                                        </li>
+                                    </ul>
+                                    <div class="tab-content no-padding">
+                                        <!-- Morris chart - Sales -->
+                                        <div class="chart tab-pane active" id="showReport" style="position: relative; height: 300px;
+                                         -webkit-tap-highlight-color: rgba(0, 0, 0, 0);  overflow:auto; " >
+
+
+                                        </div>
+                                        <div class="chart tab-pane" id="editReport" style="position: relative; height: 300px;">
+                                            <textarea class="form-control" th:text="${data.get('report_list')}" id="reportInfo" onchange="checkNull(event)" rows="14" placeholder="请输入json格式的报告信息">
+
+                                            </textarea>
+                                        </div>
+                                    </div>
+                                </div>
                             </div>
                         </div>
                         <!-- textarea -->
@@ -312,25 +358,26 @@
                                                 <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>
                                             </td>
                                         </tr>
-                                        <tr th:if="${item.get('type')=='Multiple'}" type="check">
+                                        <tr th:if="${item.get('type')=='Single'}" type="ratio">
                                             <td>
                                                 <div class="form-group">
-                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}">asd</label>
                                                     <div class="col-sm-9">
-                                                        <div class="checkbox"  th:each="da:${item.get('options')}">
+                                                        <div class="radio" th:each="da : ${item.get('options')}" >
                                                             <label >
-                                                                <input type="checkbox"/>
+                                                                <input type="radio" name="optionsRadios4" value="asd"/>
                                                                 <th:block th:text="${da}"> </th:block>
                                                             </label>
                                                         </div>
+
                                                     </div>
                                                 </div>
                                             </td>
                                             <td>
-                                                <input onchange="showExampleCheckByLabel(this)" th:value="${item.get('originTip')}" type="text" class="form-control" placeholder="选项说明"/>
+                                                <input onchange="showExampleRatioByLabel(this)" th:value="${item.get('originTip')}"  type="text" class="form-control" placeholder="选项说明"/>
                                             </td>
                                             <td>
-                                                <input onchange="showExampleCheck(this)" th:value="${item.get('originData')}" type="text" class="form-control" placeholder="选项数据 请用;将选项分隔"/>
+                                                <input onchange="showExampleRatio(this)" type="text" th:value="${item.get('originData')}"  class="form-control" placeholder="选项数据 请用;将选项分隔"/>
                                             </td>
                                             <td>
                                                 <button onclick="upTr(this)" class="btn btn-default">上移</button>
@@ -338,26 +385,25 @@
                                                 <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>
                                             </td>
                                         </tr>
-                                        <tr th:if="${item.get('type')=='Single'}" type="ratio">
+                                        <tr th:if="${item.get('originType')=='multiple'}" type="check">
                                             <td>
                                                 <div class="form-group">
-                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}">asd</label>
+                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
                                                     <div class="col-sm-9">
-                                                        <div class="radio" th:each="da : ${item.get('options')}" >
+                                                        <div class="checkbox"  th:each="da:${item.get('options')}">
                                                             <label >
-                                                                <input type="radio" name="optionsRadios4" value="asd"/>
+                                                                <input type="checkbox"/>
                                                                 <th:block th:text="${da}"> </th:block>
-                                                             </label>
+                                                            </label>
                                                         </div>
-
                                                     </div>
                                                 </div>
                                             </td>
                                             <td>
-                                                <input onchange="showExampleRatioByLabel(this)" th:value="${item.get('originTip')}"  type="text" class="form-control" placeholder="选项说明"/>
+                                                <input onchange="showExampleCheckByLabel(this)" th:value="${item.get('originTip')}" type="text" class="form-control" placeholder="选项说明"/>
                                             </td>
                                             <td>
-                                                <input onchange="showExampleRatio(this)" type="text" th:value="${item.get('originData')}"  class="form-control" placeholder="选项数据 请用;将选项分隔"/>
+                                                <input onchange="showExampleCheck(this)" th:value="${item.get('originData')}" type="text" class="form-control" placeholder="选项数据 请用;将选项分隔"/>
                                             </td>
                                             <td>
                                                 <button onclick="upTr(this)" class="btn btn-default">上移</button>
@@ -365,6 +411,30 @@
                                                 <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>
                                             </td>
                                         </tr>
+                                        <tr th:if="${item.get('originType')=='singleCheck'}"  type="singleCheck">
+                                            <td><div class="form-group">
+                                                <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+                                                <div class="col-sm-9">
+                                                    <div class="checkbox">
+                                                        <label>
+                                                            <input type="checkbox"/>
+                                                            <th:block th:text="${item.get('originData')}"></th:block>
+                                                        </label>
+                                                    </div>
+                                                </div>
+                                            </div></td>
+                                            <td>
+                                                <input onchange="showExampleSingleByLabel(this)" type="text" class="form-control" placeholder="选项说明"/>
+                                            </td>
+                                            <td>
+                                                <input onchange="showExampleSingle(this)" type="text" class="form-control" placeholder="选项数据"/>
+                                            </td>
+                                            <td>
+                                                <button onclick="upTr(this)" class="btn btn-default">上移</button>
+                                                <button onclick="downTr(this,0)" class="btn btn-default">下移</button>
+                                                <button onclick="deleteTr(this)" class="btn btn-warning">删除</button>
+                                            </td>
+                                        </tr>
                                     </th:block>
 
 
@@ -468,22 +538,43 @@
 <!--<script src="/static/AdminLTE/dist/js/adminlte.min.js"></script>-->
 <!-- AdminLTE for demo purposes -->
 <script src="/static/AdminLTE/dist/js/demo.js"></script>
-<!-- add Paper js -->
-<script src="/static/js/addPaper.js"></script>
+<!-- change Paper js -->
+<script src="/static/js/changePaper.js"></script>
 <script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
-<script type="text/javascript">
+<!--阿里 oss 上传-->
+<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>
+<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
     var ruleId ;
     var ratioIndex;
 
+    /*<![CDATA[*/
+    var urlParams = new URLSearchParams(window.location.search);
+    var paperId = urlParams.get('id');
+    var id = [[${data.get('paperId')}]];
+    ruleId = [[${ruleLength}]]
+
+
+    var client = new OSS.Wrapper({
+        region : 'oss-cn-shanghai',
+        accessKeyId : 'IvS323TIcWUT57MG',
+        accessKeySecret : 'dYml7rvT8stQkoSjMYlfRTxNj9dEsI',
+        bucket : 'mooctest-site'
+    });
+
+
+    /*]]>*/
+
 
 
     $(document).ready(function(){
         $('[data-toggle="tooltip"]').tooltip();
+        $('#reportInfo').val(getCleanStr($('#reportInfo').val()));
+
+        setShowRule($('#reportInfo').val());
 
         //Initialize Select2 Elements
         $('.select2').select2()
 
-        ruleId = 0;
         ratioIndex =0 ;
 
         // $('#testType').val(type)
@@ -495,7 +586,6 @@
 
 
 
-
         var taskListTable = $('#task-list').DataTable({
             searching: true,
             pageLength: 25

+ 0 - 0
src/main/resources/templates/changeReviewJob.html


+ 538 - 0
src/main/resources/templates/jobDetail.html

@@ -0,0 +1,538 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="base" xmlns:overflow="http://www.w3.org/1999/xhtml">
+<head>
+    <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
+    <!-- dataTables -->
+    <link rel="stylesheet" type="text/css"
+          href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css"/>
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/Ionicons/css/ionicons.min.css"/>
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.css"/>
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"/>
+    <!-- iCheck for checkboxes and radio inputs -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/iCheck/all.css"/>
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.css"/>
+    <!-- Select2 -->
+    <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
+    <!-- Theme style -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/AdminLTE.min.css"/>
+    <!-- AdminLTE Skins. Choose a skin from the css/skins
+         folder instead of downloading all of them to reduce the load. -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/skins/_all-skins.min.css"/>
+    <style>
+        body {
+            padding-right: 0px !important;
+        }
+        *.modal-open {
+            overflow-y: scroll;
+            padding-right: 0 !important;
+        }
+        .content {
+            padding-left: 45px;
+            padding-right: 45px;
+        }
+        .box {
+            margin-bottom: 50px;
+        }
+        .box-header button{
+            margin-right: 5px;
+        }
+        .table tr td {
+            padding-right: 10px;
+            padding-left: 10px;
+            border-top: 1px solid #f4f4f4;
+            border-right: 1px solid #f4f4f4;
+        }
+
+        td .form-group {
+            margin-bottom: 0px;
+        }
+
+        .callout-my {
+            background: #a7eeff9c;
+            border-left: 5px solid #0097bc;
+        }
+        .callout-my p{
+            word-break: break-all;
+        }
+
+        .show-report-left{
+            color: #2875b7;
+        }
+    </style>
+</head>
+<body>
+<div layout:fragment="mainbody">
+
+
+
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <div class="user-panel">
+                <div class="pull-left image">
+                    <img src="/static/images/avatar/avatar-admin.jpg" class="img-circle" alt="User Image" />
+                </div>
+                <div class="pull-left info">
+                    <p>Admin</p>
+                    <a href="#">
+                        <i class="fa fa-circle text-success"></i>
+                        Online
+                    </a>
+                </div>
+            </div>
+
+            <!-- Search form -->
+            <form action="#" method="get" class="sidebar-form">
+                <div class="input-group">
+                    <input type="text" name="q" class="form-control" placeholder="Search..." />
+                    <span class="input-group-btn">
+						<button type="submit" name="search" id="search-btn" class="btn btn-flat">
+							<i class="fa fa-search"></i>
+						</button>
+					</span>
+                </div>
+            </form>
+
+            <!-- Sidebar Menu -->
+            <ul class="sidebar-menu tree" data-widget="tree">
+                <li>
+                    <a href="/addPaper">
+                        <i class="glyphicon glyphicon-pencil"></i>
+                        <span>
+                            新建试卷
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/papers">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            试卷列表
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
+            </ul>
+        </section>
+    </aside>
+
+
+    <div class="content-wrapper">
+        <!-- Content Header (Page header) -->
+        <section class="content-header">
+            <h1>
+                查看众包审核任务
+                <small>众包审核</small>
+            </h1>
+            <ol class="breadcrumb">
+                <li><a href="/home"><i class="fa fa-dashboard"></i> 主页</a></li>
+                <li><a href="#">查看众包审核任务</a></li>
+            </ol>
+        </section>
+
+        <!-- Main content -->
+        <section class="content" id="maincontent">
+            <div id="leftPanel" >
+                <div class="box box-primary" >
+                    <div class="box-header with-border">
+                        <h3 class="box-title">基本信息</h3>
+                        <button onclick="deletePaper()" class="btn btn-danger pull-right" >
+                            删除
+                        </button>
+                        <button onclick="changePaper()" class="btn btn-success pull-right" >
+                            修改
+                        </button>
+<!--                        <button  onclick="addJobByThis()" class="btn btn-info pull-right">-->
+<!--                            使用该试卷出题-->
+<!--                        </button>-->
+<!--                        <button onclick="showyu()"   class="btn btn-default pull-right" >-->
+<!--                            预览-->
+<!--                        </button>-->
+                    </div>
+                    <!-- /.box-header -->
+                    <div class="box-body">
+                        <form class="form-horizontal">
+                            <!-- text input -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">名称</label>
+                                <div class="col-sm-10">
+                                    <div   th:text="${data.get('name')}" class="form-control"/>
+                                </div>
+                            </div>
+                            <!-- textarea -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">描述</label>
+                                <div class="col-sm-10">
+                                    <div  th:text="${data.get('description')}"   ></div>
+                                </div>
+                            </div>
+                            <!-- textarea -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">使用试卷</label>
+                                <div class="col-sm-10">
+                                    <div  th:text="${data.get('description')}"   ></div>
+                                </div>
+                            </div>
+
+                            <!-- Date and time range -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" >创建时间</label>
+                                <div class=" col-sm-10">
+                                    <!--                                <div class="input-group-addon">-->
+                                    <!--                                    <i class="fa fa-clock-o"></i>-->
+                                    <!--                                </div>-->
+                                    <div disabled="disabled" id="createTime" type="text" th:text="${data.get('create_time')}" class="form-control pull-right" />
+                                </div>
+                                <!-- /.input group -->
+                            </div>
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" >时间</label>
+                                <div class=" col-sm-10">
+                                    <!--                                <div class="input-group-addon">-->
+                                    <!--                                    <i class="fa fa-clock-o"></i>-->
+                                    <!--                                </div>-->
+                                    <div disabled="disabled" id="time" type="text" th:text="${data.get('start_time')+'-'+data.get('end_time')}" class="form-control pull-right" />
+                                </div>
+                                <!-- /.input group -->
+                            </div>
+                            <!-- select -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" >测试类型</label>
+                                <div class=" col-sm-10">
+                                    <span>企业版</span>
+                                </div>
+                            </div>
+
+
+                            <div id="resultStat" >
+                                <div class="col-md-6" id="statLeft">
+                                    <!-- BAR CHART -->
+                                    <div class="box box-success">
+                                        <div class="box-header with-border">
+                                            <h3 class="box-title">成绩分布</h3>
+
+                                            <div class="box-tools pull-right">
+                                                <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
+                                                </button>
+                                                <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
+                                            </div>
+                                        </div>
+                                        <div class="box-body">
+                                            <div class="chart">
+                                                <canvas id="barChart" style="height:230px"></canvas>
+                                            </div>
+                                        </div>
+                                        <!-- /.box-body -->
+                                    </div>
+                                </div>
+                                <div class="col-md-6" id="statRight">
+                                    <div class="box">
+                                        <div class="box-header">
+                                            <h3 class="box-title">具体成绩</h3>
+
+                                            <div class="box-tools">
+                                                <ul class="pagination pagination-sm no-margin pull-right">
+                                                    <li><a href="#">&laquo;</a></li>
+                                                    <li><a href="#">1</a></li>
+                                                    <li><a href="#">2</a></li>
+                                                    <li><a href="#">3</a></li>
+                                                    <li><a href="#">&raquo;</a></li>
+                                                </ul>
+                                            </div>
+                                        </div>
+                                        <!-- /.box-header -->
+                                        <div class="box-body no-padding">
+                                            <table class="table">
+                                                <tr>
+                                                    <th style="width: 10px">#</th>
+                                                    <th>姓名</th>
+                                                    <th >得分</th>
+                                                </tr>
+                                                <tr>
+                                                    <td>1.</td>
+                                                    <td>张三</td>
+                                                    <td><span>55</span></td>
+                                                </tr>
+                                                <tr>
+                                                    <td>2.</td>
+                                                    <td>王翦</td>
+                                                    <td><span>70</span></td>
+                                                </tr>
+                                                <tr>
+                                                    <td>3.</td>
+                                                    <td>乐毅</td>
+                                                    <td><span >30</span></td>
+                                                </tr>
+                                                <tr>
+                                                    <td>4.</td>
+                                                    <td>李牧</td>
+                                                    <td><span >90</span></td>
+                                                </tr>
+                                            </table>
+                                        </div>
+                                        <!-- /.box-body -->
+                                    </div>
+                                </div>
+                            </div>
+
+                            <!-- textarea -->
+<!--                            查看结果列表-->
+                            <!-- textarea -->
+
+                        </form>
+                    </div>
+                </div>
+
+
+            </div>
+
+
+            <div style="clear:both"></div>
+        </section>
+    </div>
+
+
+    <div class="modal fade" id="modal-default">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalBody">
+                    <form class="form-horizontal" id="formBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+    <div class="modal fade" id="modal-alert">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalAlertBody">
+                    <form class="form-horizontal" id="formAlertBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+</div>
+
+
+</body>
+</html>
+<!-- jQuery 3 -->
+<!--<script src="/static/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>-->
+<!-- Bootstrap 3.3.7 -->
+<script src="/static/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+<!-- InputMask -->
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+
+<!-- ChartJS -->
+<script src="/static/AdminLTE/bower_components/chart.js/Chart.js"></script>
+<!-- date-range-picker -->
+<script src="/static/AdminLTE/bower_components/moment/min/moment.min.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll -->
+<script src="/static/AdminLTE/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="/static/AdminLTE/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="/static/AdminLTE/bower_components/fastclick/lib/fastclick.js"></script>
+
+<!-- AdminLTE App -->
+<!--<script src="/static/AdminLTE/dist/js/adminlte.min.js"></script>-->
+<!-- AdminLTE for demo purposes -->
+<script src="/static/AdminLTE/dist/js/demo.js"></script>
+<!-- change Paper js -->
+<script src="/static/js/changePaper.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
+<!--阿里 oss 上传-->
+<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>
+<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
+    var ruleId ;
+    var ratioIndex;
+
+    /*<![CDATA[*/
+    var urlParams = new URLSearchParams(window.location.search);
+    var paperId = urlParams.get('id');
+    var id = [[${data.get('paperId')}]];
+    // ruleId = [[${ruleLength}]]
+
+
+    var client = new OSS.Wrapper({
+        region : 'oss-cn-shanghai',
+        accessKeyId : 'IvS323TIcWUT57MG',
+        accessKeySecret : 'dYml7rvT8stQkoSjMYlfRTxNj9dEsI',
+        bucket : 'mooctest-site'
+    });
+
+
+    $(document).ready(function(){
+        $('[data-toggle="tooltip"]').tooltip();
+
+
+        //Initialize Select2 Elements
+        $('.select2').select2()
+
+        ratioIndex =0 ;
+
+
+        //Date range picker with time picker
+        // $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' })
+        $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, locale: { format: 'MM/DD/YYYY hh:mm A' }})
+
+
+
+        var taskListTable = $('#task-list').DataTable({
+            searching: true,
+            pageLength: 25
+        });
+
+        var areaChartData = {
+            labels  : ['0-10', '20-10', '30-29', '23-23', '23-2', '34-53', '80-100'],
+            datasets: [
+                {
+                    label               : 'Digital Goods',
+                    fillColor           : 'rgba(60,141,188,0.9)',
+                    strokeColor         : 'rgba(60,141,188,0.8)',
+                    pointColor          : '#3b8bba',
+                    pointStrokeColor    : 'rgba(60,141,188,1)',
+                    pointHighlightFill  : '#fff',
+                    pointHighlightStroke: 'rgba(60,141,188,1)',
+                    data                : [28, 48, 40, 19, 86, 27, 90]
+                }
+            ]
+        }
+
+
+        //-------------
+        //- BAR CHART -
+        //-------------
+        var barChartCanvas                   = $('#barChart').get(0).getContext('2d')
+        var barChart                         = new Chart(barChartCanvas)
+        var barChartData                     = areaChartData
+        barChartData.datasets[0].fillColor   = '#00a65a'
+        barChartData.datasets[0].strokeColor = '#00a65a'
+        barChartData.datasets[0].pointColor  = '#00a65a'
+        var barChartOptions                  = {
+            //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
+            scaleBeginAtZero        : true,
+            //Boolean - Whether grid lines are shown across the chart
+            scaleShowGridLines      : true,
+            //String - Colour of the grid lines
+            scaleGridLineColor      : 'rgba(0,0,0,.05)',
+            //Number - Width of the grid lines
+            scaleGridLineWidth      : 1,
+            //Boolean - Whether to show horizontal lines (except X axis)
+            scaleShowHorizontalLines: true,
+            //Boolean - Whether to show vertical lines (except Y axis)
+            scaleShowVerticalLines  : true,
+            //Boolean - If there is a stroke on each bar
+            barShowStroke           : true,
+            //Number - Pixel width of the bar stroke
+            barStrokeWidth          : 2,
+            //Number - Spacing between each of the X value sets
+            barValueSpacing         : 5,
+            //Number - Spacing between data sets within X values
+            barDatasetSpacing       : 1,
+            //String - A legend template
+            legendTemplate          : '<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>',
+            //Boolean - whether to make the chart responsive
+            responsive              : true,
+            maintainAspectRatio     : true
+        }
+
+        barChartOptions.datasetFill = false
+        barChart.Bar(barChartData, barChartOptions)
+
+    });
+
+    showYulan = function (  ) {
+        window.open('http://47.99.140.117:9090/report/review/paper/'+ id);
+    }
+
+    changePaper = function ( ) {
+        window.location.href =  '/changePaper?id='+id;
+    }
+    delPaper = function (  ) {
+        $.ajax({
+            url: '/dpaper?id='+id,
+            // data:{
+            //     'id':id
+            // },
+            type: 'DELETE',
+            success: function (result) {
+                console.log(result);
+                // var obj = eval('(' + result + ')');
+                // element.parentNode.parentNode.remove();
+                // success
+                window.location.href = "/papers"
+            }
+        });
+    }
+
+    getCleanStr = function (str) {
+        var obj = eval('(' + str + ')');
+        var formattedStr = JSON.stringify(obj, null, 2);
+        return formattedStr;
+    };
+
+    addJobByThis = function ( ) {
+        window.location.href='/review/job?paperId='+id;
+    }
+
+    /*]]>*/
+
+
+</script>

+ 182 - 0
src/main/resources/templates/jobList.html

@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="base">
+<head>
+    <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
+    <!-- dataTables -->
+    <link rel="stylesheet" type="text/css"
+          href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
+    <!-- Select2 -->
+    <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
+</head>
+<body>
+<div layout:fragment="mainbody">
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <div class="user-panel">
+                <div class="pull-left image">
+                    <img src="/static/images/avatar/avatar-admin.jpg" class="img-circle" alt="User Image" />
+                </div>
+                <div class="pull-left info">
+                    <p>Admin</p>
+                    <a href="#">
+                        <i class="fa fa-circle text-success"></i>
+                        Online
+                    </a>
+                </div>
+            </div>
+
+            <!-- Search form -->
+            <form action="#" method="get" class="sidebar-form">
+                <div class="input-group">
+                    <input type="text" name="q" class="form-control" placeholder="Search..." />
+                    <span class="input-group-btn">
+						<button type="submit" name="search" id="search-btn" class="btn btn-flat">
+							<i class="fa fa-search"></i>
+						</button>
+					</span>
+                </div>
+            </form>
+
+            <!-- Sidebar Menu -->
+            <ul class="sidebar-menu tree" data-widget="tree">
+                <!--                {% for task in app_list %}-->
+                <!--                <li th:each="task:${tasks}" >-->
+
+                <!--                    <a th:href="'/task_detail?examId='+${task.examId}+'&amp;caseId='+${task.caseId}" th:text="${task.name}">-->
+                <!--                        <i class="fa fa-link"></i>-->
+                <!--                    </a>-->
+                <!--                </li>-->
+                <!--                {% endfor %}-->
+
+                <li>
+                    <a href="/addPaper">
+                        <i class="glyphicon glyphicon-pencil"></i>
+                        <span>
+                            新建试卷
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/papers">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            试卷列表
+                        </span>
+                    </a>
+                </li>
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
+            </ul>
+        </section>
+    </aside>
+
+    <!-- Main Content -->
+    <div class="content-wrapper" style="min-height: 691px;">
+        <section class="content-header">
+            <h1>全部应用</h1>
+
+            <ol class="breadcrumb">
+                <li class="active">
+                    <a href="/home">
+                        <i class="fa fa-dashboard"></i>
+                        全部应用
+                    </a>
+                </li>
+            </ol>
+        </section>
+
+        <!-- Main Content -->
+        <section class="content container-fluid">
+            <!-- 			<div id="task-list-search" class="input-group col-md-6">
+                            <input type="text" class="form-control" placeholder="Search for application">
+                            <span class="input-group-btn">
+                                <button class="btn btn-default" type="button" id="task-search-btn">Search</button>
+                            </span>
+                        </div> -->
+
+            <table id="task-list" class="table table-striped text-center" style="margin-top: 10px">
+                <thead>
+                <tr>
+                    <!--<th></th>-->
+                    <th>任务名称</th>
+                    <th>类型</th>
+                    <th>创建时间</th>
+                    <!--<th>版本</th>-->
+                    <th>操作</th>
+                </tr>
+                </thead>
+                <tbody>
+                <th:block th:each="task : ${tasks}">
+
+                    <tr>
+                        <td><b><a th:href="'/review/jobDetail?id='+${task.get('id')}"  th:text="${task.get('name')}"></a></b></td>
+                        <!--<td><img th:src="${task.icon}" style="width: 25px; height: 25px;" /></td>-->
+                        <td>
+                            <span th:if="${task.get('group').equals('') and task.get('exam_id').equals('')}" class="label label-warning"  >暂无</span>
+                            <span th:if="${task.get('group').equals('') and !task.get('exam_id').equals('')}" class="label label-info"  >企业版</span>
+                            <span th:if="${task.get('exam_id').equals('') and !task.get('group').equals('') }" class="label label-success"  >教育版</span>
+                        </td>
+                        <!--                        <td><span  class="label label-info" th:text="${task.caseId}">题号</span></td>-->
+
+                        <td><span  class=" " th:text="${task.get('create_time')}" ></span></td>
+                        <td>
+<!--                            <button th:onclick="'showYulan( \''+${task.get('id')}+'\' )'" class="btn btn-default">预览</button>-->
+                            <a type="button" class="btn btn-default" th:href="'/changeJob?id='+${task.get('id')}">修改</a>
+                            <button  th:onclick="'delJob( this, \''+${task.get('id')}+'\' )'"  class="btn btn-default">删除</button>
+                        </td>
+                        <!--<td th:text="${task.version}"></td>-->
+                        <!--                        <td th:if="${task.numOfUndeal > 0}"><span  class="label label-info">审核中</span></td>-->
+                        <!--                        <td th:if="${task.numOfUndeal == 0}"><span  class="label label-success">审核结束</span></td>-->
+                        <!--<td th:text="${task.startTime}">{{ task.print_start_time }}</td>-->
+                        <!--<td th:text="${task.endTime}">{{ task.print_end_time }}</td>-->
+
+                        <!--                        <td><span class="badge"><a th:href="'/task_detail?examId=' + ${task.examId} + '&amp;caseId=' + ${task.caseId}" style="color: #fff;" th:text="${task.numOfUndeal}"></a></span></td>-->
+                    </tr>
+                </th:block>
+                </tbody>
+            </table><!-- table -->
+        </section>
+    </div>
+</div>
+</body>
+</html>
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+
+<script type="text/javascript">
+    $(document).ready(function(){
+        $('[data-toggle="tooltip"]').tooltip();
+
+        var taskListTable = $('#task-list').DataTable({
+            searching: true,
+            pageLength: 25
+        });
+    });
+
+
+    delJob = function ( element , id ) {
+        $.ajax({
+            url: 'http://47.99.140.117:9090/Bug/api/job/delJob?jobId='+id,
+            // data:{
+            //     'id':id
+            // },
+            type: 'POST',
+            success: function (result) {
+                console.log(result);
+                console.log(result['status'])
+                element.parentNode.parentNode.remove();
+            }
+        });
+    }
+
+</script>

+ 631 - 0
src/main/resources/templates/paperDetail.html

@@ -0,0 +1,631 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="base" xmlns:overflow="http://www.w3.org/1999/xhtml">
+<head>
+    <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
+    <!-- dataTables -->
+    <link rel="stylesheet" type="text/css"
+          href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
+    <!-- Font Awesome -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css"/>
+    <!-- Ionicons -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/Ionicons/css/ionicons.min.css"/>
+    <!-- daterange picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.css"/>
+    <!-- bootstrap datepicker -->
+    <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"/>
+    <!-- iCheck for checkboxes and radio inputs -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/iCheck/all.css"/>
+    <!-- Bootstrap time Picker -->
+    <link rel="stylesheet" href="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.css"/>
+    <!-- Select2 -->
+    <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
+    <!-- Theme style -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/AdminLTE.min.css"/>
+    <!-- AdminLTE Skins. Choose a skin from the css/skins
+         folder instead of downloading all of them to reduce the load. -->
+    <link rel="stylesheet" href="/static/AdminLTE/dist/css/skins/_all-skins.min.css"/>
+    <style>
+        body {
+            padding-right: 0px !important;
+        }
+        *.modal-open {
+            overflow-y: scroll;
+            padding-right: 0 !important;
+        }
+        .content {
+            padding-left: 45px;
+            padding-right: 45px;
+        }
+        .box {
+            margin-bottom: 50px;
+        }
+        .box-header button{
+            margin-right: 5px;
+        }
+        .table tr td {
+            padding-right: 10px;
+            padding-left: 10px;
+            border-top: 1px solid #f4f4f4;
+            border-right: 1px solid #f4f4f4;
+        }
+
+        td .form-group {
+            margin-bottom: 0px;
+        }
+
+        .callout-my {
+            background: #a7eeff9c;
+            border-left: 5px solid #0097bc;
+        }
+        .callout-my p{
+            word-break: break-all;
+        }
+
+        .show-report-left{
+            color: #2875b7;
+        }
+    </style>
+</head>
+<body>
+<div layout:fragment="mainbody">
+
+
+
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <div class="user-panel">
+                <div class="pull-left image">
+                    <img src="/static/images/avatar/avatar-admin.jpg" class="img-circle" alt="User Image" />
+                </div>
+                <div class="pull-left info">
+                    <p>Admin</p>
+                    <a href="#">
+                        <i class="fa fa-circle text-success"></i>
+                        Online
+                    </a>
+                </div>
+            </div>
+
+            <!-- Search form -->
+            <form action="#" method="get" class="sidebar-form">
+                <div class="input-group">
+                    <input type="text" name="q" class="form-control" placeholder="Search..." />
+                    <span class="input-group-btn">
+						<button type="submit" name="search" id="search-btn" class="btn btn-flat">
+							<i class="fa fa-search"></i>
+						</button>
+					</span>
+                </div>
+            </form>
+
+            <!-- Sidebar Menu -->
+            <ul class="sidebar-menu tree" data-widget="tree">
+                <li>
+                    <a href="/addPaper">
+                        <i class="glyphicon glyphicon-pencil"></i>
+                        <span>
+                            新建试卷
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/papers">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            试卷列表
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
+            </ul>
+        </section>
+    </aside>
+
+
+    <div class="content-wrapper">
+        <!-- Content Header (Page header) -->
+        <section class="content-header">
+            <h1>
+                查看众包审核试卷
+                <small>众包审核</small>
+            </h1>
+            <ol class="breadcrumb">
+                <li><a href="/home"><i class="fa fa-dashboard"></i> 主页</a></li>
+                <li><a href="#">查看众包审核试卷</a></li>
+            </ol>
+        </section>
+
+        <!-- Main content -->
+        <section class="content" id="maincontent">
+            <div id="leftPanel" class="col-md-10">
+                <div class="box box-primary" >
+                    <div class="box-header with-border">
+                        <h3 class="box-title">基本信息</h3>
+                        <button onclick="deletePaper()" class="btn btn-danger pull-right" >
+                            删除
+                        </button>
+                        <button onclick="changePaper()" class="btn btn-success pull-right" >
+                            修改
+                        </button>
+                        <button  onclick="addJobByThis()" class="btn btn-info pull-right">
+                            使用该试卷出题
+                        </button>
+                        <button onclick="showyu()"   class="btn btn-default pull-right" >
+                            预览
+                        </button>
+
+                    </div>
+                    <!-- /.box-header -->
+                    <div class="box-body">
+                        <form class="form-horizontal">
+                            <!-- text input -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">名称</label>
+                                <div class="col-sm-10">
+                                    <div   th:text="${data.get('name')}" class="form-control"/>
+                                </div>
+                            </div>
+                            <!-- textarea -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">描述</label>
+                                <div class="col-sm-10">
+                                    <div  th:text="${data.get('description')}"   ></div>
+                                </div>
+                            </div>
+
+                            <!-- Date and time range -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" >创建时间</label>
+                                <div class=" col-sm-10">
+                                    <!--                                <div class="input-group-addon">-->
+                                    <!--                                    <i class="fa fa-clock-o"></i>-->
+                                    <!--                                </div>-->
+                                    <div disabled="disabled" id="createTime" type="text" th:text="${data.get('create_time')}" class="form-control pull-right" />
+                                </div>
+                                <!-- /.input group -->
+                            </div>
+                            <!-- select -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" >测试类型</label>
+                                <div class=" col-sm-10">
+                                    <div class="form-control" id="testType"  th:text="${data.get('type')}" >
+
+                                    </div>
+                                </div>
+                            </div>
+
+                            <div class="form-group">
+                                <label   class="col-sm-2 control-label">附件(可选)</label>
+                                <div class="col-sm-10">
+                                    <a  th:href="@{${data.get('application_url')}}" class="col-sm-2 " >下载附件</a>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label  class="col-sm-2 control-label">测试需求</label>
+                                <div class="col-sm-10">
+                                    <a th:href="@{${data.get('requirement_url')}}" class="col-sm-2 " >下载测试需求</a>
+                                </div>
+                            </div>
+
+                            <!-- text input -->
+                            <!--                        <div class="form-group">-->
+                            <!--                            <label class="col-sm-2 control-label">报告总数</label>-->
+                            <!--                            <div class="col-sm-10">-->
+                            <!--                                <input id="reportNum" th:value="${data.get('report_num')}" onchange="checkNum(event)" type="text" class="form-control" placeholder="请输入报告总数"/>-->
+                            <!--                            </div>-->
+                            <!--                        </div>-->
+
+                            <!-- textarea -->
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">报告信息</label>
+                                <div class="col-sm-10">
+                                    <div class="nav-tabs-custom" style="cursor: move;">
+                                        <!-- Tabs within a box -->
+                                        <ul class="nav nav-tabs pull-right ui-sortable-handle">
+                                            <li class="active">
+                                                <a href="#showReport" data-toggle="tab" aria-expanded="true">视图</a>
+                                            </li>
+                                            <li class="">
+                                                <a href="#editReport" data-toggle="tab" aria-expanded="false">查看</a>
+                                            </li>
+                                            <li class="pull-left header">
+                                                <i class="fa fa-inbox">
+                                                </i> 报告信息
+                                            </li>
+                                        </ul>
+                                        <div class="tab-content no-padding">
+                                            <!-- Morris chart - Sales -->
+                                            <div class="chart tab-pane active" id="showReport" style="position: relative; height: 300px;
+                                         -webkit-tap-highlight-color: rgba(0, 0, 0, 0);  overflow:auto; " >
+
+
+                                            </div>
+                                            <div class="chart tab-pane" id="editReport" style="position: relative; height: 300px;">
+                                            <textarea disabled="disabled" class="form-control" th:text="${data.get('report_list')}" id="reportInfo" onchange="checkNull(event)" rows="15" placeholder="请输入json格式的报告信息">
+
+                                            </textarea>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <!-- textarea -->
+
+                        </form>
+                    </div>
+                </div>
+
+
+                <!-- Horizontal Form -->
+
+                <!-- Horizontal Form -->
+
+
+                <div class="box box-info rule" th:id="'rule'+${ruleStat.index}" th:each="rule,ruleStat : ${data.get('item_group_list')}">
+                    <div class="box-header with-border">
+                        <h3 class="box-title" th:text="'定制审查选项'+${ruleStat.index+1}"></h3>
+                    </div>
+                    <!-- /.box-header -->
+                    <!-- form start -->
+                    <div class="form-horizontal" >
+                        <div class="box-body">
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">适用报告列表</label>
+                                <div class="col-sm-10">
+                                    <input th:onchange="'test(this,'+${ruleStat.index}+')'" th:value="${rule.get('origin_report_list')}" class="form-control" th:id="'fitlist'+${ruleStat.index}" placeholder="请输入编号并用;分割,可用~输入连续的试题名称" />
+                                </div>
+                                <label class="col-sm-2 control-label">已选报告列表</label>
+                                <div class="col-sm-10" th:id="'namelist'+${ruleStat.index}">
+                                    <span th:each="i : ${rule.get('report_list')}" class="badge bg-green" th:text="${i}"></span>
+                                </div>
+                            </div>
+
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label">审查项</label>
+                                <div class="col-sm-10 ">
+                                    <table class="table" th:id="'table'+${ruleStat.index}">
+                                        <tbody>
+<!--                                        <tr>-->
+<!--                                            <td>-->
+<!--                                                示例-->
+<!--                                            </td>-->
+
+<!--                                        </tr>-->
+
+                                        <th:block th:each="item : ${rule.get('item_list')}">
+                                            <tr th:if="${item.get('type')=='File'}" type="file">
+                                                <td>
+                                                    <div class="form-group">
+                                                        <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+                                                        <div class="col-sm-9">
+                                                            <input type="file"/>
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                            </tr>
+                                            <tr th:if="${item.get('type')=='Description'}" type="text">
+                                                <td><div class="form-group">
+                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+
+                                                    <div class="col-sm-9">
+                                                        <input type="text" class="form-control" placeholder="请输入"/>
+                                                    </div>
+                                                </div>
+                                                </td>
+                                            </tr>
+                                            <tr th:if="${item.get('type')=='Single'}" type="ratio">
+                                                <td>
+                                                    <div class="form-group">
+                                                        <label class="col-sm-3 control-label" th:text="${item.get('description')}">asd</label>
+                                                        <div class="col-sm-9">
+                                                            <div class="radio" th:each="da : ${item.get('options')}" >
+                                                                <label >
+                                                                    <input type="radio" name="optionsRadios4" value="asd"/>
+                                                                    <th:block th:text="${da}"> </th:block>
+                                                                </label>
+                                                            </div>
+
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                            </tr>
+                                            <tr th:if="${item.get('originType')=='multiple'}" type="check">
+                                                <td>
+                                                    <div class="form-group">
+                                                        <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+                                                        <div class="col-sm-9">
+                                                            <div class="checkbox"  th:each="da:${item.get('options')}">
+                                                                <label >
+                                                                    <input type="checkbox"/>
+                                                                    <th:block th:text="${da}"> </th:block>
+                                                                </label>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                            </tr>
+                                            <tr th:if="${item.get('originType')=='singleCheck'}"  type="singleCheck">
+                                                <td><div class="form-group">
+                                                    <label class="col-sm-3 control-label" th:text="${item.get('description')}"></label>
+                                                    <div class="col-sm-9">
+                                                        <div class="checkbox">
+                                                            <label>
+                                                                <input type="checkbox"/>
+                                                                <th:block th:text="${item.get('originData')}"></th:block>
+                                                            </label>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                </td>
+                                            </tr>
+                                        </th:block>
+                                        </tbody>
+                                    </table>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+
+
+            <div id="rightPanel" class="col-md-2">
+                <div class="box box-primary">
+                    <div class="box-header with-border">
+                        <h3 class="box-title">相关任务</h3>
+
+                        <div class="box-tools pull-right">
+                            <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
+                            </button>
+                            <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
+                        </div>
+                    </div>
+                    <!-- /.box-header -->
+                    <div class="box-body" style="">
+                        <ul class="products-list product-list-in-box">
+                            <li class="item">
+
+                                <div class=" ">
+                                    <a href="javascript:void(0)" class="product-title">Samsung TV
+                                        <span class="label label-warning pull-right">$1800</span></a>
+                                    <span class="product-description">
+                          Samsung 32" 1080p 60Hz LED Smart HDTV.
+                        </span>
+                                </div>
+                            </li>
+                            <!-- /.item -->
+                            <li class="item">
+
+                                <div class=" ">
+                                    <a href="javascript:void(0)" class="product-title">Bicycle
+                                        <span class="label label-info pull-right">$700</span></a>
+                                    <span class="product-description">
+                                      26" Mongoose Dolomite Men's 7-speed, Navy Blue.
+                                    </span>
+                                </div>
+                            </li>
+                            <!-- /.item -->
+                            <li class="item">
+
+                                <div class=" ">
+                                    <a href="javascript:void(0)" class="product-title">Xbox One <span class="label label-danger pull-right">$350</span></a>
+                                    <span class="product-description">
+                                      Xbox One Console Bundle with Halo Master Chief Collection.
+                                    </span>
+                                </div>
+                            </li>
+                            <!-- /.item -->
+                            <li class="item">
+
+                                <div class=" ">
+                                    <a href="javascript:void(0)" class="product-title">PlayStation 4
+                                        <span class="label label-success pull-right">$399
+                                        </span>
+                                    </a>
+                                    <span class="product-description">
+                                             PlayStation 4 500GB Console (PS4)
+                                    </span>
+                                </div>
+                            </li>
+                            <!-- /.item -->
+                        </ul>
+                    </div>
+                    <!-- /.box-body -->
+                    <div class="box-footer text-center" style="">
+                        <a href="javascript:void(0)" class="uppercase">View All Products</a>
+                    </div>
+                    <!-- /.box-footer -->
+                </div>
+            </div>
+
+            <div style="clear:both"></div>
+        </section>
+    </div>
+
+
+    <div class="modal fade" id="modal-default">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalBody">
+                    <form class="form-horizontal" id="formBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+    <div class="modal fade" id="modal-alert">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalAlertBody">
+                    <form class="form-horizontal" id="formAlertBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+</div>
+
+
+</body>
+</html>
+<!-- jQuery 3 -->
+<!--<script src="/static/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>-->
+<!-- Bootstrap 3.3.7 -->
+<script src="/static/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/AdminLTE/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/AdminLTE/bower_components/select2/dist/js/select2.min.js"></script>
+<!-- InputMask -->
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.extensions.js"></script>
+<!-- date-range-picker -->
+<script src="/static/AdminLTE/bower_components/moment/min/moment.min.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
+<!-- bootstrap datepicker -->
+<script src="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
+<!-- bootstrap time picker -->
+<script src="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.js"></script>
+<!-- SlimScroll -->
+<script src="/static/AdminLTE/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
+<!-- iCheck 1.0.1 -->
+<script src="/static/AdminLTE/plugins/iCheck/icheck.min.js"></script>
+<!-- FastClick -->
+<script src="/static/AdminLTE/bower_components/fastclick/lib/fastclick.js"></script>
+<!-- AdminLTE App -->
+<!--<script src="/static/AdminLTE/dist/js/adminlte.min.js"></script>-->
+<!-- AdminLTE for demo purposes -->
+<script src="/static/AdminLTE/dist/js/demo.js"></script>
+<!-- change Paper js -->
+<script src="/static/js/changePaper.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
+<!--阿里 oss 上传-->
+<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>
+<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
+    var ruleId ;
+    var ratioIndex;
+
+    /*<![CDATA[*/
+    var urlParams = new URLSearchParams(window.location.search);
+    var paperId = urlParams.get('id');
+    var id = [[${data.get('paperId')}]];
+    // ruleId = [[${ruleLength}]]
+
+
+    var client = new OSS.Wrapper({
+        region : 'oss-cn-shanghai',
+        accessKeyId : 'IvS323TIcWUT57MG',
+        accessKeySecret : 'dYml7rvT8stQkoSjMYlfRTxNj9dEsI',
+        bucket : 'mooctest-site'
+    });
+
+
+    /*]]>*/
+
+
+
+    $(document).ready(function(){
+        $('[data-toggle="tooltip"]').tooltip();
+        $('#reportInfo').val(getCleanStr($('#reportInfo').val()));
+
+        setShowRule($('#reportInfo').val());
+
+        //Initialize Select2 Elements
+        $('.select2').select2()
+
+        ratioIndex =0 ;
+
+        // $('#testType').val(type)
+        $('#testType').val($('#testType').attr('value'))
+
+        //Date range picker with time picker
+        // $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' })
+        $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, locale: { format: 'MM/DD/YYYY hh:mm A' }})
+
+
+
+        var taskListTable = $('#task-list').DataTable({
+            searching: true,
+            pageLength: 25
+        });
+    });
+
+    showYulan = function (  ) {
+        window.open('http://47.99.140.117:9090/report/review/paper/'+ id);
+    }
+
+    changePaper = function ( ) {
+        window.location.href =  '/changePaper?id='+id;
+    }
+    delPaper = function (  ) {
+        $.ajax({
+            url: '/dpaper?id='+id,
+            // data:{
+            //     'id':id
+            // },
+            type: 'DELETE',
+            success: function (result) {
+                console.log(result);
+                // var obj = eval('(' + result + ')');
+                // element.parentNode.parentNode.remove();
+                // success
+                window.location.href = "/papers"
+            }
+        });
+    }
+
+    getCleanStr = function (str) {
+        var obj = eval('(' + str + ')');
+        var formattedStr = JSON.stringify(obj, null, 2);
+        return formattedStr;
+    };
+
+    addJobByThis = function ( ) {
+        window.location.href='/review/job?paperId='+id;
+    }
+
+
+
+
+</script>

+ 46 - 4
src/main/resources/templates/paper_list.html

@@ -67,6 +67,14 @@
                         </span>
                     </a>
                 </li>
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
             </ul>
         </section>
     </aside>
@@ -108,7 +116,7 @@
                 <th:block th:each="task : ${tasks}">
 
                     <tr>
-                        <td><b><a href="#"  th:text="${task.get('name')}"></a></b></td>
+                        <td><b><a th:href="'/paperDetail?id='+${task.get('id')}"  th:text="${task.get('name')}"></a></b></td>
                         <!--<td><img th:src="${task.icon}" style="width: 25px; height: 25px;" /></td>-->
                         <td><span  class="label label-info" th:text="${task.get('type')}" ></span></td>
                         <!--                        <td><span  class="label label-info" th:text="${task.caseId}">题号</span></td>-->
@@ -116,9 +124,8 @@
                         <td><span  class=" " th:text="${task.get('create_time')}" ></span></td>
                         <td>
                             <button th:onclick="'showYulan( \''+${task.get('id')}+'\' )'" class="btn btn-default">预览</button>
-                            <!--                            <button  class="btn btn-default">修改</button>-->
                             <a type="button" class="btn btn-default" th:href="'/changePaper?id='+${task.get('id')}">修改</a>
-                            <button    class="btn btn-default">删除</button>
+                            <button  th:onclick="'delPaper( this, \''+${task.get('id')}+'\' )'"  class="btn btn-default">删除</button>
                         </td>
                         <!--<td th:text="${task.version}"></td>-->
                         <!--                        <td th:if="${task.numOfUndeal > 0}"><span  class="label label-info">审核中</span></td>-->
@@ -151,7 +158,42 @@
     });
 
     showYulan = function ( id ) {
-        window.open('http://47.99.140.117:9090/report/job/'+id+'/'+1+'/0/1');
+        // window.open('http://47.99.140.117:9090/report/job/'+id+'/'+1+'/0/1');
+        window.open('http://47.99.140.117:9090/report/review/paper/'+ id);
         // 默认使用0号worker做展示页面。
     }
+
+    delPaper = function ( element , id ) {
+        $.ajax({
+            url: '/dpaper?id='+id,
+            // data:{
+            //     'id':id
+            // },
+            type: 'DELETE',
+            success: function (result) {
+                console.log(result);
+                // var obj = eval('(' + result + ')');
+                element.parentNode.parentNode.remove();
+                // success
+                // var jobId = obj['paperId'];
+                // if ( type == 1 ){
+                //     var workid = getOneWorker();
+                //     console.log("worke")
+                //     console.log(workid)
+                //     window.open('http://47.99.140.117:9090/report/job/'+jobId+'/'+workid+'/0/1');
+                // }else{
+                //     $.notify({
+                //         // options
+                //         message: '添加成功,paperid为'+jobId
+                //     },{
+                //         // settings
+                //         delay: 100,
+                //         timer: 3000,
+                //         type: 'success'
+                //     });
+                // }
+            }
+        });
+    }
+
 </script>