Browse Source

Squashed commit of the following:

commit 08cbffbdabb1a01c13f6817602a1e37315aa2381
Author: luoshi <luoshi@qmth.com.cn>
Date:   Wed Jan 13 17:19:04 2021 +0800

    评卷任务复核功能里,补充漏掉的切割规则,自动从配置文件读取

commit 18bc983d930ade5cae26caf87a40db3d43f6ef2d
Author: luoshi <luoshi@qmth.com.cn>
Date:   Wed Jan 13 11:24:34 2021 +0800

    修改评卷错误信息key为mark.control.task.error

commit 52769a509cf42fda428d0df6fd711050becfa900
Author: luoshi <luoshi@qmth.com.cn>
Date:   Wed Jan 13 11:21:45 2021 +0800

    增加登录页面公司官网链接

commit 9169834f6075c619a7d1a6f0605b75942ccbdb2e
Author: luoshi <luoshi@qmth.com.cn>
Date:   Mon Jan 11 10:25:14 2021 +0800

    修改评卷员拦截器中/mark/reset路径配置错误

commit 96710f974e75a5b288d696356b8d70834561a02c
Author: luoshi <luoshi@qmth.com.cn>
Date:   Mon Jan 11 09:48:43 2021 +0800

    修改ExamQuestionDao的查询语句错误

commit 7e761b22005f7be1dd8f7075071dec8a2a474a52
Author: luoshi <luoshi@qmth.com.cn>
Date:   Sun Jan 10 17:07:40 2021 +0800

    修复按科目导出成绩明细时,若首个考生未上传且科目启用了AB卷,构造excel标题时客观题按paperType=#条件读取为空的bug

commit fe7656646946b12ae79c5dd2d5bdf7a30f77dd68
Author: luoshi <luoshi@qmth.com.cn>
Date:   Sun Jan 10 17:05:52 2021 +0800

    修复按科目导出成绩明细时,若首个考生未上传且科目启用了AB卷,构造excel标题时客观题按paperType=#条件读取为空的bug

commit 96af3d53590756bdf401eed1376cc4b7ca6501de
Author: luoshi <luoshi@qmth.com.cn>
Date:   Sun Jan 10 17:04:22 2021 +0800

    修复按科目导出成绩明细时,若首个考生未上传且科目启用了AB卷,构造excel标题时客观题按paperType=#条件读取为空的bug
    修改ExamQuestion按examId和subjectCode查询时的默认排序规则,groupNumber字段不参与排序,使得评卷分组排序与mainNumber排序不一致时,不会出现小题得分顺序匹配错误

commit 3343805723a2d99486c149c2aaa85d7ada9bae2c
Author: luoshi <luoshi@qmth.com.cn>
Date:   Sun Jan 10 16:49:17 2021 +0800

    修复按科目导出成绩明细时,若首个考生未上传且科目启用了AB卷,构造excel标题时客观题按paperType=#条件读取为空的bug
luoshi 4 years ago
parent
commit
2ce8dfdebb
21 changed files with 1366 additions and 1339 deletions
  1. 6 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java
  2. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java
  3. 43 38
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java
  4. 19 20
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java
  5. 20 17
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java
  6. 5 5
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/interceptor/MarkInterceptor.java
  7. 90 90
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examSelect.jsp
  8. 6 3
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedLibrary.jsp
  9. 93 92
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/reset.jsp
  10. 6 6
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/subjectSelect.jsp
  11. 14 14
      stmms-web/src/main/webapp/WEB-INF/views/modules/open/error.jsp
  12. 22 22
      stmms-web/src/main/webapp/WEB-INF/views/modules/open/marker-list.jsp
  13. 4 4
      stmms-web/src/main/webapp/WEB-INF/views/modules/student/login.jsp
  14. 21 16
      stmms-web/src/main/webapp/WEB-INF/views/modules/sys/login.jsp
  15. 257 257
      stmms-web/src/main/webapp/static/i18n/messages.properties
  16. 4 4
      stmms-web/src/main/webapp/static/i18n/messages_en.properties
  17. 258 258
      stmms-web/src/main/webapp/static/i18n/messages_ja.properties
  18. 257 257
      stmms-web/src/main/webapp/static/i18n/messages_zh.properties
  19. 27 27
      stmms-web/src/main/webapp/static/mark-json/js/mark-control.js
  20. 107 105
      stmms-web/src/main/webapp/static/mark-new/js/mark-control.js
  21. 104 102
      stmms-web/src/main/webapp/static/mark-track/js/mark-control.js

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -1,7 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -13,10 +12,15 @@ import java.util.List;
 public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 
     @Query("select q from ExamQuestion q where q.examId=?1 and  q.subjectCode=?2 and q.objective=?3 "
-            + "order by q.paperType, q.groupNumber, q.mainNumber, q.subNumber")
+            + "order by q.paperType, q.mainNumber, q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode,
             boolean objective);
 
+    @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
+            + " group by q.mainNumber, q.subNumber order by q.mainNumber, q.subNumber")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective);
+
     @Query("select count(q) from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.mainNumber=?4")
     public long countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber);

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java

@@ -25,6 +25,9 @@ public interface ExamQuestionService {
 
     List<ExamQuestion> findByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective);
 
+    List<ExamQuestion> findByExamAndSubjectAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective);
+
     List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
             boolean objective, String paperType);
 

+ 43 - 38
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java

@@ -1,24 +1,5 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
@@ -27,6 +8,19 @@ import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamQuestionSearchQuery;
 import cn.com.qmth.stmms.common.enums.ObjectivePolicy;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
 
 @Service
 public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> implements ExamQuestionService {
@@ -74,23 +68,29 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
         return questionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);
     }
 
+    @Override
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective) {
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveGroupByNumber(examId, subjectCode, objective);
+    }
+
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
             boolean objective, String paperType) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective,
-                paperType, new Sort(Direction.ASC, "mainNumber", "subNumber"));
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective, paperType,
+                new Sort(Direction.ASC, "mainNumber", "subNumber"));
     }
 
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumber(Integer examId, String subjectCode,
             boolean objective, Integer groupNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(examId, subjectCode, objective,
-                groupNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(examId, subjectCode, objective, groupNumber);
     }
 
     @Override
-    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumberNotEqual(Integer examId,
-            String subjectCode, boolean objective, Integer groupNumber) {
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumberNotEqual(Integer examId, String subjectCode,
+            boolean objective, Integer groupNumber) {
         return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndGroupNumberNotEqual(examId, subjectCode, objective,
                 groupNumber);
     }
@@ -98,8 +98,8 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber);
     }
 
     @Override
@@ -118,8 +118,8 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode, boolean objective,
             Integer mainNumber) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber);
     }
 
     private Specification<ExamQuestion> buildSpecification(final ExamQuestionSearchQuery query) {
@@ -154,8 +154,9 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
                 if (query.getMainNumber() != null) {
                     predicates.add(cb.equal(root.get("mainNumber"), query.getMainNumber()));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -174,15 +175,17 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumberAndPaperType(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, String paperType) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber, paperType);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber,
+                        paperType);
     }
 
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, Integer subNumber) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode,
-                objective, mainNumber, subNumber);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode, objective,
+                        mainNumber, subNumber);
     }
 
     @Transactional
@@ -203,12 +206,14 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public ExamQuestion findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, Integer subNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode,
-                objective, mainNumber, subNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode, objective,
+                        mainNumber, subNumber);
     }
 
     @Override
-    public List<ExamQuestion> findMainByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective) {
+    public List<ExamQuestion> findMainByExamAndSubjectAndObjective(Integer examId, String subjectCode,
+            boolean objective) {
         List<ExamQuestion> list = new ArrayList<ExamQuestion>();
         Set<Integer> mainNumbers = new LinkedHashSet<>();
         List<ExamQuestion> all = questionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);

+ 19 - 20
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -84,8 +84,9 @@ public class ScoreController extends BaseExamController {
             buildPackageUrl(student);
             buildAnswerUrl(student);
         }
-        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ? enableExport(examId,
-                query.getSubjectCode()) : null;
+        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ?
+                enableExport(examId, query.getSubjectCode()) :
+                null;
         if (exportMessage != null) {
             view.addObject("exportMessage", exportMessage);
             view.addObject("enableExport", false);
@@ -192,7 +193,6 @@ public class ScoreController extends BaseExamController {
             }
         }
         String fileName = "成绩单.xlsx";
-        String paperType = null;
         try {
             List<ExamStudentDTO> list = new LinkedList<>();
             // 可导出科目不为空时,才能执行查询操作
@@ -203,17 +203,15 @@ public class ScoreController extends BaseExamController {
                 query.setPageSize(Integer.MAX_VALUE);
                 query = studentService.findByQuery(query);
                 for (ExamStudent student : query.getResult()) {
-                    if (student.isBreach() || student.isAbsent()) {
+                    if (!student.isUpload() || student.isBreach() || student.isAbsent()) {
                         student.setObjectiveScore(0d);
                         student.setSubjectiveScore(0d);
-                    } else if (paperType == null) {
-                        paperType = student.getPaperType();
                     }
                     list.add(new ExamStudentDTO(student));
                 }
             }
             if (StringUtils.isNotBlank(query.getSubjectCode())) {
-                List<String> headerList = getOptionHeader(exam.getId(), query.getSubjectCode(), paperType);
+                List<String> headerList = getOptionHeader(exam.getId(), query.getSubjectCode());
                 ExportStudentExcel excel = new ExportStudentExcel("成绩单", headerList, ExamStudentDTO.class);
                 excel.setDataList(list, true);
                 excel.write(response, fileName).dispose();
@@ -228,10 +226,10 @@ public class ScoreController extends BaseExamController {
         }
     }
 
-    private List<String> getOptionHeader(int examId, String subjectCode, String paperType) {
+    private List<String> getOptionHeader(int examId, String subjectCode) {
         List<String> headerList = new ArrayList<String>();
-        List<ExamQuestion> oQuestions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId,
-                subjectCode, true, paperType);
+        List<ExamQuestion> oQuestions = questionService
+                .findByExamAndSubjectAndObjectiveGroupByNumber(examId, subjectCode, true);
         List<ExamQuestion> sQestions = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
         for (ExamQuestion examQuestion : oQuestions) {
             headerList.add(getTitle(examQuestion) + "选项");
@@ -265,8 +263,9 @@ public class ScoreController extends BaseExamController {
     private List<ScoreItem> buildScoreList(ExamStudent student) {
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
 
-        List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
-                student.getSubjectCode(), true, student.getPaperType());
+        List<ExamQuestion> oList = questionService
+                .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
+                        student.getPaperType());
         List<ScoreItem> list1 = student.getScoreList(true);
         int index = 0;
         for (ExamQuestion question : oList) {
@@ -281,8 +280,8 @@ public class ScoreController extends BaseExamController {
         }
         scoreList.addAll(list1);
 
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), false);
+        List<ExamQuestion> sList = questionService
+                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
         List<ScoreItem> list2 = student.getScoreList(false);
         index = 0;
         for (ExamQuestion question : sList) {
@@ -305,8 +304,8 @@ public class ScoreController extends BaseExamController {
         // student.setSheetUrls(PictureUrlBuilder
         // .getInnerSheetUrls(student.getExamId(), student.getExamNumber(),
         // student.getSheetCount()));
-        student.setSheetUrls(fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1,
-                student.getSheetCount()));
+        student.setSheetUrls(
+                fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
     }
 
     private void buildPackageUrl(ExamStudent student) {
@@ -321,8 +320,8 @@ public class ScoreController extends BaseExamController {
     private void buildAnswerUrl(ExamStudent student) {
         ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
         if (subject != null && subject.getAnswerFileType() != null) {
-            student.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
-                    subject.getAnswerFileType()));
+            student.setAnswerUrl(
+                    fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
         }
         if (subject != null) {
             student.setSubjectRemark(StringUtils.trimToEmpty(subject.getRemark()));
@@ -335,8 +334,8 @@ public class ScoreController extends BaseExamController {
             return "该科目不存在";
         }
 
-        List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL,
-                MarkStatus.TRIAL);
+        List<MarkGroup> groups = groupService
+                .findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL, MarkStatus.TRIAL);
         if (groups != null && !groups.isEmpty()) {
             return subjectCode + "评卷未完成";
         }

+ 20 - 17
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -21,13 +21,10 @@ import cn.com.qmth.stmms.common.session.model.StmmsSession;
 import cn.com.qmth.stmms.common.session.service.SessionService;
 import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -42,7 +39,6 @@ import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import java.util.*;
 
 @Controller
@@ -164,7 +160,8 @@ public class MarkController extends BaseController {
     }
 
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
-    public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
+    public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
+            @RequestParam Integer markerId) {
         WebUser user = RequestUtils.getWebUser(request);
         ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
         Calendar rightNow = Calendar.getInstance();
@@ -240,7 +237,8 @@ public class MarkController extends BaseController {
                 markerService.save(marker);
             }
         }
-        ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
+        ModelAndView view = new ModelAndView(
+                mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
         view.addObject("forceMode", forceMode);
         view.addObject("sheetView", group.isSheetView());
         view.addObject("enableAllZero", group.isEnableAllZero());
@@ -280,8 +278,9 @@ public class MarkController extends BaseController {
         releaseMarker(marker);
 
         List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
-        List<Marker> markers = markerService.findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(),
-                marker.getSubjectCode(), marker.getUserId(), true);
+        List<Marker> markers = markerService
+                .findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(), marker.getSubjectCode(), marker.getUserId(),
+                        true);
         markers.remove(marker);
         for (Marker m : markers) {
             m.setMarkSetting(null);
@@ -398,8 +397,9 @@ public class MarkController extends BaseController {
             List<MarkLibrary> list = new ArrayList<MarkLibrary>();
             // 需要判断评卷员是否绑定了班级
             long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
-            list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                    marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
+            list = libraryService
+                    .findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(),
+                            marker.getUserId(), classCount > 0, retry, 20);
             if (list.isEmpty()) {
                 break;
             }
@@ -420,8 +420,9 @@ public class MarkController extends BaseController {
         int retry = 1;
         Task task = null;
         while (task == null) {
-            List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
-                    marker.getGroupNumber(), marker.getId(), retry, 10);
+            List<TrialLibrary> list = trialService
+                    .findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                            marker.getId(), retry, 10);
             if (list.isEmpty()) {
                 break;
             }
@@ -465,7 +466,7 @@ public class MarkController extends BaseController {
         result.accumulate("success", success);
         result.accumulate("status", status(request));
         if (!success) {
-            result.accumulate("message", "mark.control.tsak.error");
+            result.accumulate("message", "mark.control.task.error");
         }
         return result;
     }
@@ -517,11 +518,13 @@ public class MarkController extends BaseController {
             // 试评查找给分历史记录
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
             if (StringUtils.isNotBlank(secretNumber)) {
-                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
+                historyList = trialService
+                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                                marker.getId(), secretNumber, pageNumber, pageSize, querySort);
             } else {
-                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
+                historyList = trialService
+                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                                marker.getId(), pageNumber, pageSize, querySort, null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());

+ 5 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/mark/interceptor/MarkInterceptor.java

@@ -25,7 +25,8 @@ public class MarkInterceptor extends SessionInterceptor {
     private MarkerService markerService;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
         WebUser wu = buildUser(request);
         if (wu != null) {
             if (wu.getUser().getLastLoginTime() == null && request.getServletPath().startsWith("/mark/reset")) {
@@ -37,10 +38,9 @@ public class MarkInterceptor extends SessionInterceptor {
             }
             return true;
         }
-        if (request.getServletPath().startsWith("/mark/subject-select")
-                || request.getServletPath().startsWith("/mark/index")
-                || request.getServletPath().startsWith("/mark/rest")
-                || request.getServletPath().startsWith("/mark/logout")) {
+        if (request.getServletPath().startsWith("/mark/subject-select") || request.getServletPath()
+                .startsWith("/mark/index") || request.getServletPath().startsWith("/mark/reset") || request
+                .getServletPath().startsWith("/mark/logout")) {
             return sessionExpire(request, response, "/mark-login");
         }
         return sessionExpireAjax(request, response, "/mark-login");

+ 90 - 90
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examSelect.jsp

@@ -1,102 +1,102 @@
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <head>
-	<title>考试选择</title>
-	<meta name="decorator" content="default"/>
-	<%-- <%@include file="/WEB-INF/views/include/head.jsp" %> --%>
-<script src="${ctxStatic}/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>
-<script src="${ctxStatic}/jquery/jquery-migrate-1.1.1.min.js" type="text/javascript"></script>
-<link href="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.min.css" type="text/css" rel="stylesheet" />
-<script src="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.min.js" type="text/javascript"></script>
-<script src="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.method.min.js" type="text/javascript"></script>
-<link href="${ctxStatic}/fancyBox/source/jquery.fancybox.css" type="text/css" rel="stylesheet" />
-<script src="${ctxStatic}/fancyBox/source/jquery.fancybox.js" type="text/javascript"></script>
-<script src="${ctxStatic}/common/jeesite.min.js" type="text/javascript"></script>
-<link href="${ctxStatic}/common/jeesite.min.css" type="text/css" rel="stylesheet" />
-<script src="${ctxStatic}/select2/select2.js" type="text/javascript"></script>
-<script src="${ctxStatic}/select2/select2_locale_zh-CN.js" type="text/javascript"></script>
-<link href="${ctxStatic}/select2/select2.css" type="text/css" rel="stylesheet" />
+    <title>考试选择</title>
+    <meta name="decorator" content="default"/>
+    <%-- <%@include file="/WEB-INF/views/include/head.jsp" %> --%>
+    <script src="${ctxStatic}/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>
+    <script src="${ctxStatic}/jquery/jquery-migrate-1.1.1.min.js" type="text/javascript"></script>
+    <link href="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.min.css" type="text/css" rel="stylesheet"/>
+    <script src="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.min.js" type="text/javascript"></script>
+    <script src="${ctxStatic}/jquery-validation/1.11.1/jquery.validate.method.min.js" type="text/javascript"></script>
+    <link href="${ctxStatic}/fancyBox/source/jquery.fancybox.css" type="text/css" rel="stylesheet"/>
+    <script src="${ctxStatic}/fancyBox/source/jquery.fancybox.js" type="text/javascript"></script>
+    <script src="${ctxStatic}/common/jeesite.min.js" type="text/javascript"></script>
+    <link href="${ctxStatic}/common/jeesite.min.css" type="text/css" rel="stylesheet"/>
+    <script src="${ctxStatic}/select2/select2.js" type="text/javascript"></script>
+    <script src="${ctxStatic}/select2/select2_locale_zh-CN.js" type="text/javascript"></script>
+    <link href="${ctxStatic}/select2/select2.css" type="text/css" rel="stylesheet"/>
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
-	<script type="text/javascript">
-		$(document).ready(function() {
-			<!--针对nw.js评卷客户端,自动窗口最大化-->
-			try{
-				require('nw.gui').Window.get().maximize();
-			}catch(e){
-			}
+    <script type="text/javascript">
+        $(document).ready(function () {
+            <!--针对nw.js评卷客户端,自动窗口最大化-->
+            try {
+                require('nw.gui').Window.get().maximize();
+            } catch (e) {
+            }
 
-			$('#submit-button').click(function(){
-				var examId = $('#exam-select').val();
-				return examId!=undefined && examId!='' && examId!=null;
-			});
+            $('#submit-button').click(function () {
+                var examId = $('#exam-select').val();
+                return examId != undefined && examId != '' && examId != null;
+            });
 
-			$('.point').hide();
-			var message="${message}";
-			if(message!=null && message!="" ){
-				showError(message);
-			}
+            $('.point').hide();
+            var message = "${message}";
+            if (message != null && message != "") {
+                showError(message);
+            }
 
-			$(document).ajaxError(function(evt, req, settings){
-				if(req.status==401) {
-					alert("权限失效,请重新登录!");
-					 window.location.href = "/login";
-		       	}
-			});
-			
-		});
+            $(document).ajaxError(function (evt, req, settings) {
+                if (req.status == 401) {
+                    alert("权限失效,请重新登录!");
+                    window.location.href = "/login";
+                }
+            });
 
-		function showError(message){
-			$('.point').show();
-			$('.error').html(message);
-		}
+        });
 
-		// 如果在框架中,则跳转刷新上级页面
-		if(self.frameElement && self.frameElement.tagName=="IFRAME"){
-			parent.location.reload();
-		}
-		
-		
-	</script>
+        function showError(message) {
+            $('.point').show();
+            $('.error').html(message);
+        }
+
+        // 如果在框架中,则跳转刷新上级页面
+        if (self.frameElement && self.frameElement.tagName == "IFRAME") {
+            parent.location.reload();
+        }
+    
+    
+    </script>
 </head>
 <body>
-	<div class="container">
-	  <div class="middle cl">
-	   <div class="left">
-	    <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
-	    <p>Copyright &#169武汉启明软件 2012-2014</p>
-	   </div>
-	   <div class="right">
-	     <div class="title">
-	       <h1>请选择考试批次</h1>
-	       <br/>
-	     </div>
-	     <div class="loginbox">
-	      <form class="form login-form" action="${ctx}/admin/exam/select" method="post">
-	      <div class="exam-select">
-		        <select name="examId" id="exam-select">
-		        	<option value="">请选择考试</option>
-					<c:forEach items="${examList}" var="item">
-						<option value="${item.id}" <c:if test="${item.id==exam.id}">selected</c:if>>${item.id}-${item.name}</option>
-					</c:forEach>
-				</select>
-	      </div>
-	      <c:if test="${web_user.schoolAdmin==true && examList.size()==0}">
-	      	<div class="login-btn">
-	      	<a href="${ctx}/admin/exam/create">新建考试</a>
-	      	</div>
-	      </c:if>
-	        <div class="point hide" >
-	        	<em class="error"></em>
-	        </div>
-	        <div class="login-btn">
-	        	<input class="opacity" type="submit" id="submit-button" value="确 定"/>
-	        	<a href="${ctx}/logout" class="opacity">退 出</a>
-	        </div>
-	      </form>
-	     </div>
-	   </div>
-	  </div>
-	</div>
-  </body>
+<div class="container">
+    <div class="middle cl">
+        <div class="left">
+            <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
+        </div>
+        <div class="right">
+            <div class="title">
+                <h1>请选择考试批次</h1>
+                <br/>
+            </div>
+            <div class="loginbox">
+                <form class="form login-form" action="${ctx}/admin/exam/select" method="post">
+                    <div class="exam-select">
+                        <select name="examId" id="exam-select">
+                            <option value="">请选择考试</option>
+                            <c:forEach items="${examList}" var="item">
+                                <option value="${item.id}" <c:if test="${item.id==exam.id}">selected</c:if>>${item.id}-${item.name}</option>
+                            </c:forEach>
+                        </select>
+                    </div>
+                    <c:if test="${web_user.schoolAdmin==true && examList.size()==0}">
+                        <div class="login-btn">
+                            <a href="${ctx}/admin/exam/create">新建考试</a>
+                        </div>
+                    </c:if>
+                    <div class="point hide">
+                        <em class="error"></em>
+                    </div>
+                    <div class="login-btn">
+                        <input class="opacity" type="submit" id="submit-button" value="确 定"/>
+                        <a href="${ctx}/logout" class="opacity">退 出</a>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
 </html>

+ 6 - 3
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedLibrary.jsp

@@ -19,7 +19,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery-ui.min.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.mousewheel.min.js"></script>
     
-        <script type="text/javascript" src="${ctxStatic}/utils/image-utils.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/utils/image-utils.js"></script>
 
 </head>
 <body id="index">
@@ -35,7 +35,7 @@
         </div>
         <div class="y">
             <div><span class="user">${web_user.name}</span>
-            <span><a class="close" href="javascript:window.close()">关闭</a></span>
+                <span><a class="close" href="javascript:window.close()">关闭</a></span>
             </div>
         </div>
     </div>
@@ -202,6 +202,7 @@
         
         
         
+        
         ${fileServer}' + student.sheetUrls[0],
               zoom_delta: 1.2,
               zoom: 'fit',
@@ -231,6 +232,7 @@
         
         
         
+        
         ${fileServer}' + student.sheetUrls[0]);
     } */
         var pane = $('<canvas id="track-builder-canvas"></canvas>').appendTo($('#image-holder-track'));
@@ -282,7 +284,8 @@
         new ImageLoader({
             server: imageServer,
             flush: true,
-            strict: false
+            strict: false,
+            split: [${properties['slice.split.config']}]
         }).combine(picUrls, canvas, config, function () {
             //阅卷轨迹
             if (markTracks != undefined && markTracks.length > 0) {

+ 93 - 92
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/reset.jsp

@@ -1,102 +1,103 @@
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <head>
-	<title><spring:message code="user.reset.title"/></title>
-	<meta name="decorator" content="default"/>
-	<%@include file="/WEB-INF/views/include/head.jsp" %>
+    <title><spring:message code="user.reset.title"/></title>
+    <meta name="decorator" content="default"/>
+    <%@include file="/WEB-INF/views/include/head.jsp" %>
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
-	<script type="text/javascript">
-		$(document).ready(function() {
-			<!--针对nw.js评卷客户端,自动窗口最大化-->
-			try{
-				require('nw.gui').Window.get().maximize();
-			}catch(e){
-			}
-			var nameVerify =${nameVerify};
-			$('#submit-button').click(function(){
-				var name = $('#loginName').val();
-				if(name==''){
-					showError($.i18n.prop("user.reset.name"));
-					return false;
-				}
-				if(name.length>10){
-					showError($.i18n.prop("user.reset.name.length"));
-					return false;
-				}
-				if(nameVerify==true ){
-					//var reg = new RegExp("[\\u4E00-\\u9FFF]+");
-				    var pattern = /^[\u4E00-\u9FFF]{1,10}$/;
-						if(!pattern.test(name)){    
-						showError($.i18n.prop("user.reset.name.chinese"));
-						return false;
-					}
-				}
+    <script type="text/javascript">
+        $(document).ready(function () {
+            <!--针对nw.js评卷客户端,自动窗口最大化-->
+            try {
+                require('nw.gui').Window.get().maximize();
+            } catch (e) {
+            }
+            var nameVerify =${nameVerify};
+            $('#submit-button').click(function () {
+                var name = $('#loginName').val();
+                if (name == '') {
+                    showError($.i18n.prop("user.reset.name"));
+                    return false;
+                }
+                if (name.length > 10) {
+                    showError($.i18n.prop("user.reset.name.length"));
+                    return false;
+                }
+                if (nameVerify == true) {
+                    //var reg = new RegExp("[\\u4E00-\\u9FFF]+");
+                    var pattern = /^[\u4E00-\u9FFF]{1,10}$/;
+                    if (!pattern.test(name)) {
+                        showError($.i18n.prop("user.reset.name.chinese"));
+                        return false;
+                    }
+                }
 
-				var password = $('#password').val();
-				var password2 = $('#password2').val();
-				if(password==''){
-					showError($.i18n.prop("user.reset.password"));
-					return false;
-				}
-				if(password.length>8 || password.length<4){
-					showError($.i18n.prop("user.reset.password.length"));
-					return false;
-				}
-				if(password!=password2){
-					showError($.i18n.prop("user.reset.password.same"));
-					return false;
-				}
-				return true;
-			});
-		});
+                var password = $('#password').val();
+                var password2 = $('#password2').val();
+                if (password == '') {
+                    showError($.i18n.prop("user.reset.password"));
+                    return false;
+                }
+                if (password.length > 8 || password.length < 4) {
+                    showError($.i18n.prop("user.reset.password.length"));
+                    return false;
+                }
+                if (password != password2) {
+                    showError($.i18n.prop("user.reset.password.same"));
+                    return false;
+                }
+                return true;
+            });
+        });
 
-		function showError(message){
-			$('.point').show();
-			$('.error').html(message);
-		}
+        function showError(message) {
+            $('.point').show();
+            $('.error').html(message);
+        }
 
-		// 如果在框架中,则跳转刷新上级页面
-		if(self.frameElement && self.frameElement.tagName=="IFRAME"){
-			parent.location.reload();
-		}
-		load();
-	</script>
+        // 如果在框架中,则跳转刷新上级页面
+        if (self.frameElement && self.frameElement.tagName == "IFRAME") {
+            parent.location.reload();
+        }
+        load();
+    </script>
 </head>
 <body>
-	<div class="container">
-	  <div class="middle cl">
-	   <div class="left">
-	    <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
-	    <p>Copyright &#169武汉启明软件 2012-2014</p>
-	   </div>
-	   <div class="right">
-	     <div class="title">
-	       <h1 data-i18n-text="user.reset.title">首次登录,请完善资料</h1>
-	       <br/>
-	     </div>
-	     <div class="loginbox">
-	      <form action="${ctx}/mark/reset" method="post" role="form" id="loginForm">
-	        <div class="input-group">
-	        	<input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }" data-i18n-placeholder="user.reset.name"/>
-	        </div>
-	        <div class="input-group">
-	        	<input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
-	        </div>
-	        <div class="input-group">
-	        	<input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
-	        </div>
-	        <div class="point hide">
-	        <em class="error"></em>
-	        </div>
-	        <div class="login-btn">
-	        	<input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>
-	        	<a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
-	        </div>
-	      </form>
-	     </div>
-	   </div>
-	  </div>
-	</div>
-  </body>
+<div class="container">
+    <div class="middle cl">
+        <div class="left">
+            <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
+        </div>
+        <div class="right">
+            <div class="title">
+                <h1 data-i18n-text="user.reset.title">首次登录,请完善资料</h1>
+                <br/>
+            </div>
+            <div class="loginbox">
+                <form action="${ctx}/mark/reset" method="post" role="form" id="loginForm">
+                    <div class="input-group">
+                        <input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }"
+                               data-i18n-placeholder="user.reset.name"/>
+                    </div>
+                    <div class="input-group">
+                        <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
+                    </div>
+                    <div class="input-group">
+                        <input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
+                    </div>
+                    <div class="point hide">
+                        <em class="error"></em>
+                    </div>
+                    <div class="login-btn">
+                        <input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>
+                        <a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
 </html>

+ 6 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/subjectSelect.jsp

@@ -50,7 +50,7 @@
 
             $(document).ajaxError(function (evt, req, settings) {
                 if (req.status == 401) {
-                	alert("账号已在其他地方登录!");
+                    alert("账号已在其他地方登录!");
                     window.location.href = "/mark-login";
                 }
             });
@@ -59,7 +59,7 @@
 
             var message = "${message}";
             if (message != null && message != "") {
-            	$('.point').show();
+                $('.point').show();
             }
         });
 
@@ -76,7 +76,7 @@
     <div class="middle cl">
         <div class="left">
             <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
-            <p>Copyright &#169武汉启明软件 2012-2014</p>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
         </div>
         <div class="right">
             <div class="title">
@@ -101,9 +101,9 @@
                         </select>
                     </div>
                     <c:if test="${message != null }">
-                    <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
-                        <em class="error"><spring:message code="${message }"/></em>
-                    </div>
+                        <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
+                            <em class="error"><spring:message code="${message }"/></em>
+                        </div>
                     </c:if>
                     <div class="login-btn">
                         <input class="opacity" type="submit" id="submit-button" value="确 定"/>

+ 14 - 14
stmms-web/src/main/webapp/WEB-INF/views/modules/open/error.jsp

@@ -17,20 +17,20 @@
 </head>
 <body>
 <div class="flexbox">
-  <div class="cont cl">
-   <div class="sd">
-    <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
-       <p>Copyright &#169武汉启明软件 2012-2014</p>
-   </div>
-   <div class="mn">
-     <div class="info">
-     	<div class="icon"><img src="${ctxStatic}/images/error-large.png"/></div>
-        <h2>登录错误信息</h2>
-        <p>信息错误,请返回重新填写</p>
-        <div class="open-btn"><a class="grey" href="${ctx}/open/marker/list">返回</a></div>
-     </div>
-   </div>
-  </div>
+    <div class="cont cl">
+        <div class="sd">
+            <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
+        </div>
+        <div class="mn">
+            <div class="info">
+                <div class="icon"><img src="${ctxStatic}/images/error-large.png"/></div>
+                <h2>登录错误信息</h2>
+                <p>信息错误,请返回重新填写</p>
+                <div class="open-btn"><a class="grey" href="${ctx}/open/marker/list">返回</a></div>
+            </div>
+        </div>
+    </div>
 </div>
 </body>
 </html>

+ 22 - 22
stmms-web/src/main/webapp/WEB-INF/views/modules/open/marker-list.jsp

@@ -17,30 +17,30 @@
 </head>
 <body>
 <div class="flexbox">
-  <div class="cont cl">
-   <div class="sd">
-    <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
-       <p>Copyright &#169武汉启明软件 2012-2014</p>
-   </div>
-   <div class="mn">
-     <div class="optionbox">
-      <h1>第三方登录</h1>
-      <form action="${ctx}/open/marker/select" method="post" role="form">
-        <div class="option">
-        <select name="markerId" id="markerId">
-        <c:forEach items="${markerList}" var="marker">
-          <option value="${marker.id}">${marker.loginName }</option>
-        </c:forEach>
-        </select>
+    <div class="cont cl">
+        <div class="sd">
+            <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
         </div>
-        <div>
-        	<div class="tips"  style="display:none;"><em class="error">错误提示</em></div>
-        	<div class="open-btn"><a class="opacity" href="">确认</a><a class="grey" href="${ctx}/open/marker/list">返回</a></div>
+        <div class="mn">
+            <div class="optionbox">
+                <h1>第三方登录</h1>
+                <form action="${ctx}/open/marker/select" method="post" role="form">
+                    <div class="option">
+                        <select name="markerId" id="markerId">
+                            <c:forEach items="${markerList}" var="marker">
+                                <option value="${marker.id}">${marker.loginName }</option>
+                            </c:forEach>
+                        </select>
+                    </div>
+                    <div>
+                        <div class="tips" style="display:none;"><em class="error">错误提示</em></div>
+                        <div class="open-btn"><a class="opacity" href="">确认</a><a class="grey" href="${ctx}/open/marker/list">返回</a></div>
+                    </div>
+                </form>
+            </div>
         </div>
-      </form>
-     </div>
-   </div>
-  </div>
+    </div>
 </div>
 </body>
 </html>

+ 4 - 4
stmms-web/src/main/webapp/WEB-INF/views/modules/student/login.jsp

@@ -22,7 +22,7 @@
             <div class="logo"><img
                     src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/>
             </div>
-            <p>Copyright &#169武汉启明软件 2012-2014</p>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
         </div>
         <div class="right">
             <div class="title">
@@ -40,9 +40,9 @@
                                autocomplete="off" value="${name }" data-i18n-placeholder="student.search.name"/>
                     </div>
                     <c:if test="${message != null }">
-                    <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
-                        <em class="error"><spring:message code="${message }"/></em>
-                    </div>
+                        <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
+                            <em class="error"><spring:message code="${message }"/></em>
+                        </div>
                     </c:if>
                     <div class="login-btn"><input class="opacity" type="submit" value="查 询" data-i18n-value="student.search.submit"/></div>
                 </form>

+ 21 - 16
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/login.jsp

@@ -33,7 +33,7 @@
             <div class="logo"><img
                     src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/>
             </div>
-            <p>Copyright &#169武汉启明软件 2012-2014</p>
+            <a href="http://www.qmth.com.cn" target="_blank"><p>Copyright &#169武汉启明软件 2012-2020</p></a>
         </div>
         <div class="right">
             <div class="title">
@@ -41,27 +41,32 @@
                 <%-- <c:if test="${loginType == 'admin-login' }"><p data-i18n-text="user.login.admin">管理员登录</p></c:if> --%>
                 <c:if test="${loginType == 'mark-login-only' }"><p data-i18n-text="user.login.marker">评卷员登录</p></c:if>
                 <c:if test="${loginType != 'mark-login-only' }">
-                    <p><span><a href="#" <c:if test="${loginType == 'admin-login'||loginType == null }">class="on"</c:if> id="adminLogin" data-i18n-text="user.login.admin">管理员登录</a></span>
-                       <span><a href="#" <c:if test="${loginType == 'mark-login' }">class="on"</c:if> id="markLogin" data-i18n-text="user.login.marker">评卷员登录</a></span></p>
+                    <p><span><a href="#"
+                                <c:if test="${loginType == 'admin-login'||loginType == null }">class="on"</c:if> id="adminLogin" data-i18n-text="user.login.admin">管理员登录</a></span>
+                        <span><a href="#"
+                                 <c:if test="${loginType == 'mark-login' }">class="on"</c:if> id="markLogin" data-i18n-text="user.login.marker">评卷员登录</a></span></p>
                 </c:if>
             </div>
             <div class="loginbox">
-                <form action=<c:if test="${loginType != 'mark-login-only' }">"${ctx}/login"</c:if><c:if test="${loginType == 'mark-login-only' }">"${ctx}/mark-login"</c:if> method="post" role="form" id="loginForm">
-                    <input id="loginType" name="loginType" value=<c:if test="${loginType == null}">'admin-login'</c:if><c:if test="${loginType != null}">"${loginType}"</c:if>/>
-                    <div class="input-group">
-                        <input type="text" class="form-control required" id="loginName" name="loginName" placeholder="请输入用户名"
-                               autocomplete="off" value="${loginName }" data-i18n-placeholder="user.login.name"/>
-                    </div>
-                    <div class="input-group">
-                        <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码"
-                               autocomplete="off" data-i18n-placeholder="user.login.password"/>
-                    </div>
-                    <c:if test="${message != null }">
+                <form action=<c:if test="${loginType != 'mark-login-only' }">"${ctx}/login"
+                </c:if>
+                <c:if test="${loginType == 'mark-login-only' }">"${ctx}/mark-login"</c:if> method="post" role="form" id="loginForm">
+                <input id="loginType" name="loginType" value=<c:if test="${loginType == null}">'admin-login'</c:if>
+                <c:if test="${loginType != null}">"${loginType}"</c:if>/>
+                <div class="input-group">
+                    <input type="text" class="form-control required" id="loginName" name="loginName" placeholder="请输入用户名"
+                           autocomplete="off" value="${loginName }" data-i18n-placeholder="user.login.name"/>
+                </div>
+                <div class="input-group">
+                    <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码"
+                           autocomplete="off" data-i18n-placeholder="user.login.password"/>
+                </div>
+                <c:if test="${message != null }">
                     <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
                         <em class="error"><spring:message code="${message }"/></em>
                     </div>
-                    </c:if>
-                    <div class="login-btn"><input class="opacity" type="submit" value="登 录" data-i18n-value="user.login.submit"/></div>
+                </c:if>
+                <div class="login-btn"><input class="opacity" type="submit" value="登 录" data-i18n-value="user.login.submit"/></div>
                 </form>
             </div>
         </div>

+ 257 - 257
stmms-web/src/main/webapp/static/i18n/messages.properties

@@ -1,294 +1,294 @@
 #login
-user.login.title=\u9ad8\u6821\u8003\u8bd5\u7ba1\u7406\u5e73\u53f0
-user.login.admin=\u7ba1\u7406\u5458\u767b\u5f55
-user.login.marker=\u8bc4\u5377\u5458\u767b\u5f55
-user.login.name=\u7528\u6237\u540d
-user.login.password=\u5bc6\u7801
-user.login.submit=\u767b\u5f55
-user.login.error.account=\u5e10\u53f7\u4e0d\u5b58\u5728
-user.login.error.finish=\u8bc4\u5377\u5206\u7ec4\u5df2\u7ed3\u675f
-user.login.error.group=\u5927\u9898\u4e0d\u5b58\u5728
-user.login.error.disabled=\u5e10\u53f7\u5df2\u7981\u7528
-user.login.error.password=\u5bc6\u7801\u9519\u8bef
-user.login.error.access=\u7528\u6237\u6ca1\u6709\u8bbf\u95ee\u6743\u9650
+user.login.title=\u9AD8\u6821\u8003\u8BD5\u7BA1\u7406\u5E73\u53F0
+user.login.admin=\u7BA1\u7406\u5458\u767B\u5F55
+user.login.marker=\u8BC4\u5377\u5458\u767B\u5F55
+user.login.name=\u7528\u6237\u540D
+user.login.password=\u5BC6\u7801
+user.login.submit=\u767B\u5F55
+user.login.error.account=\u5E10\u53F7\u4E0D\u5B58\u5728
+user.login.error.finish=\u8BC4\u5377\u5206\u7EC4\u5DF2\u7ED3\u675F
+user.login.error.group=\u5927\u9898\u4E0D\u5B58\u5728
+user.login.error.disabled=\u5E10\u53F7\u5DF2\u7981\u7528
+user.login.error.password=\u5BC6\u7801\u9519\u8BEF
+user.login.error.access=\u7528\u6237\u6CA1\u6709\u8BBF\u95EE\u6743\u9650
 #reset
-user.reset.submit=\u786e\u5b9a
-user.reset.logout=\u9000\u51fa
-user.reset.title=\u9996\u6b21\u767b\u5f55\uff0c\u8bf7\u5b8c\u5584\u8d44\u6599
-user.reset.name=\u8f93\u5165\u7528\u6237\u540d
-user.reset.password=\u8f93\u5165\u65b0\u5bc6\u7801
-user.reset.password.again=\u518d\u6b21\u8f93\u5165\u65b0\u5bc6\u7801
-user.reset.name.length=\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc710\u4e2a\u5b57
-user.reset.name.chinese=\u8bf7\u8f93\u5165\u4e2d\u6587
-user.reset.password.same=\u4e24\u6b21\u5bc6\u7801\u8bf7\u4fdd\u6301\u4e00\u81f4
-user.reset.password.length=\u5bc6\u7801\u7684\u957f\u5ea6\u81f3\u5c114\u4f4d\uff0c\u4e0d\u80fd\u8d85\u8fc78\u4f4d
+user.reset.submit=\u786E\u5B9A
+user.reset.logout=\u9000\u51FA
+user.reset.title=\u9996\u6B21\u767B\u5F55\uFF0C\u8BF7\u5B8C\u5584\u8D44\u6599
+user.reset.name=\u8F93\u5165\u7528\u6237\u540D
+user.reset.password=\u8F93\u5165\u65B0\u5BC6\u7801
+user.reset.password.again=\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801
+user.reset.name.length=\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC710\u4E2A\u5B57
+user.reset.name.chinese=\u8BF7\u8F93\u5165\u4E2D\u6587
+user.reset.password.same=\u4E24\u6B21\u5BC6\u7801\u8BF7\u4FDD\u6301\u4E00\u81F4
+user.reset.password.length=\u5BC6\u7801\u7684\u957F\u5EA6\u81F3\u5C114\u4F4D\uFF0C\u4E0D\u80FD\u8D85\u8FC78\u4F4D
 #mark-control
-mark.control.assistant=\u5c0f\u52a9\u624b
-mark.control.mode.track=\u5207\u6362\u5230\u8f68\u8ff9\u6a21\u5f0f
-mark.control.mode.common=\u5207\u6362\u5230\u666e\u901a\u6a21\u5f0f
-mark.control.board=\u7ed9\u5206\u677f
-mark.control.function=\u8bc4\u5377\u529f\u80fd
-mark.control.logout=\u9000\u51fa
-mark.control.init.error=\u521d\u59cb\u5316\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762\u91cd\u65b0\u52a0\u8f7d
-mark.control.task.not.exist=\u8bc4\u5377\u5927\u9898\u4e0d\u5b58\u5728
-mark.control.task.finish=\u8bc4\u5377\u5df2\u7ed3\u675f
-mark.control.task.null=\u5f53\u524d\u65e0\u8bc4\u5377\u4efb\u52a1
-mark.control.tsak.error=\u8bc4\u5377\u4efb\u52a1\u63d0\u4ea4\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762
-mark.control.group=\u5207\u6362\u5206\u7ec4
+mark.control.assistant=\u5C0F\u52A9\u624B
+mark.control.mode.track=\u5207\u6362\u5230\u8F68\u8FF9\u6A21\u5F0F
+mark.control.mode.common=\u5207\u6362\u5230\u666E\u901A\u6A21\u5F0F
+mark.control.board=\u7ED9\u5206\u677F
+mark.control.function=\u8BC4\u5377\u529F\u80FD
+mark.control.logout=\u9000\u51FA
+mark.control.init.error=\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u91CD\u65B0\u52A0\u8F7D
+mark.control.task.not.exist=\u8BC4\u5377\u5927\u9898\u4E0D\u5B58\u5728
+mark.control.task.finish=\u8BC4\u5377\u5DF2\u7ED3\u675F
+mark.control.task.null=\u5F53\u524D\u65E0\u8BC4\u5377\u4EFB\u52A1
+mark.control.task.error=\u8BC4\u5377\u4EFB\u52A1\u63D0\u4EA4\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u9875\u9762
+mark.control.group=\u5207\u6362\u5206\u7EC4
 #status
-mark.status.student.number=\u8003\u751f\u7f16\u53f7
-mark.status.library.number=\u4efb\u52a1\u7f16\u53f7
-mark.status.objective.score=\u5ba2\u89c2\u5f97\u5206
-mark.status.marked.count=\u5df2\u8bc4
-mark.status.unmark.count=\u672a\u8bc4
-mark.status.top.count=\u5206\u914d
-mark.status.progress=\u8fdb\u5ea6
-mark.status.continue=\u7ee7\u7eed
-mark.status.top.count.finish=\u5206\u914d\u4efb\u52a1\u5df2\u8bc4\u5b8c\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-mark.status.loading=\u6b63\u5728\u52a0\u8f7d...
-mark.status.logout=\u9000\u51fa
+mark.status.student.number=\u8003\u751F\u7F16\u53F7
+mark.status.library.number=\u4EFB\u52A1\u7F16\u53F7
+mark.status.objective.score=\u5BA2\u89C2\u5F97\u5206
+mark.status.marked.count=\u5DF2\u8BC4
+mark.status.unmark.count=\u672A\u8BC4
+mark.status.top.count=\u5206\u914D
+mark.status.progress=\u8FDB\u5EA6
+mark.status.continue=\u7EE7\u7EED
+mark.status.top.count.finish=\u5206\u914D\u4EFB\u52A1\u5DF2\u8BC4\u5B8C\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F
+mark.status.loading=\u6B63\u5728\u52A0\u8F7D...
+mark.status.logout=\u9000\u51FA
 #single-image-view
-mark.single.zoom.in=\u653e\u5927
-mark.single.zoom.out=\u7f29\u5c0f
-mark.single.zoom.fit=\u9002\u5e94
-mark.single.student.answer=\u7b54\u5377
+mark.single.zoom.in=\u653E\u5927
+mark.single.zoom.out=\u7F29\u5C0F
+mark.single.zoom.fit=\u9002\u5E94
+mark.single.student.answer=\u7B54\u5377
 #chang name
-mark.change.name=\u4fee\u6539\u4e2a\u4eba\u4fe1\u606f
-mark.change.press.name=\u8f93\u5165\u7528\u6237\u540d
-mark.change.press.password=\u8f93\u5165\u65b0\u5bc6\u7801
-mark.change.press.password.again=\u518d\u6b21\u8f93\u5165\u65b0\u5bc6\u7801
-mark.change.confirm=\u786e\u5b9a
-mark.change.name.null=\u540d\u5b57\u4e0d\u80fd\u4e3a\u7a7a
-mark.change.name.length=\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc78\u4e2a\u5b57
-mark.change.password.same=\u4e24\u6b21\u5bc6\u7801\u8bf7\u4fdd\u6301\u4e00\u81f4
-mark.change.password.length=\u5bc6\u7801\u7684\u957f\u5ea6\u81f3\u5c114\u4f4d
-mark.change.network.error=\u7f51\u7edc\u901a\u4fe1\u9519\u8bef\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
-mark.change.error=\u4fee\u6539\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
+mark.change.name=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F
+mark.change.press.name=\u8F93\u5165\u7528\u6237\u540D
+mark.change.press.password=\u8F93\u5165\u65B0\u5BC6\u7801
+mark.change.press.password.again=\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801
+mark.change.confirm=\u786E\u5B9A
+mark.change.name.null=\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A
+mark.change.name.length=\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC78\u4E2A\u5B57
+mark.change.password.same=\u4E24\u6B21\u5BC6\u7801\u8BF7\u4FDD\u6301\u4E00\u81F4
+mark.change.password.length=\u5BC6\u7801\u7684\u957F\u5EA6\u81F3\u5C114\u4F4D
+mark.change.network.error=\u7F51\u7EDC\u901A\u4FE1\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
+mark.change.error=\u4FEE\u6539\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
 #specialTag
-mark.special.tag=\u7279\u6b8a\u6807\u8bb0
-mark.special.back=\u56de\u9000
-mark.special.clear=\u5168\u90e8\u6e05\u9664
-mark.special.underline=\u4e0b\u5212\u7ebf
-mark.special.open=\u6253\u5f00
-mark.special.close=\u5173\u95ed
+mark.special.tag=\u7279\u6B8A\u6807\u8BB0
+mark.special.back=\u56DE\u9000
+mark.special.clear=\u5168\u90E8\u6E05\u9664
+mark.special.underline=\u4E0B\u5212\u7EBF
+mark.special.open=\u6253\u5F00
+mark.special.close=\u5173\u95ED
 #problem-process
-mark.problem=\u95ee\u9898\u5377
-mark.problem.type=\u9009\u62e9\u95ee\u9898\u7c7b\u578b
-mark.problem.confirm=\u786e\u5b9a
-mark.problem.cancel=\u53d6\u6d88
-mark.problem.check=\u8bf7\u9009\u62e9\u95ee\u9898\u5206\u7c7b
+mark.problem=\u95EE\u9898\u5377
+mark.problem.type=\u9009\u62E9\u95EE\u9898\u7C7B\u578B
+mark.problem.confirm=\u786E\u5B9A
+mark.problem.cancel=\u53D6\u6D88
+mark.problem.check=\u8BF7\u9009\u62E9\u95EE\u9898\u5206\u7C7B
 #thumbnail
-mark.thumbnail=\u7f29\u7565\u56fe
-mark.thumbnail.open=\u6253\u5f00
-mark.thumbnail.close=\u5173\u95ed
+mark.thumbnail=\u7F29\u7565\u56FE
+mark.thumbnail.open=\u6253\u5F00
+mark.thumbnail.close=\u5173\u95ED
 #view-sidebar
-mark.sidebar=\u4fa7\u8fb9\u680f
-mark.sidebar.paper=\u8bd5\u5377
-mark.sidebar.answer=\u7b54\u6848
+mark.sidebar=\u4FA7\u8FB9\u680F
+mark.sidebar.paper=\u8BD5\u5377
+mark.sidebar.answer=\u7B54\u6848
 #mark-history
-mark.history.title=\u56de\u8bc4
-mark.history.time=\u65f6\u95f4
-mark.history.number=\u7f16\u53f7
-mark.history.score=\u603b\u5206
-mark.history.search=\u67e5\u627e\u8bd5\u5377
-mark.history.pre=\u524d
-mark.history.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
-mark.history.problem=\u56de\u8bc4\u6210\u529f\uff0c\u5df2\u63d0\u4ea4\u95ee\u9898\u5377
-mark.history.loading=\u6b63\u5728\u52a0\u8f7d\u8bf7\u7a0d\u5019
-mark.history.error=\u6682\u65f6\u65e0\u6cd5\u8bfb\u53d6\u8bc4\u5377\u5386\u53f2\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
-mark.history.number.error=\u8bf7\u8f93\u5165\u6570\u5b57
+mark.history.title=\u56DE\u8BC4
+mark.history.time=\u65F6\u95F4
+mark.history.number=\u7F16\u53F7
+mark.history.score=\u603B\u5206
+mark.history.search=\u67E5\u627E\u8BD5\u5377
+mark.history.pre=\u524D
+mark.history.success=\u56DE\u8BC4\u6210\u529F\uFF0C\u603B\u5206\uFF1A
+mark.history.problem=\u56DE\u8BC4\u6210\u529F\uFF0C\u5DF2\u63D0\u4EA4\u95EE\u9898\u5377
+mark.history.loading=\u6B63\u5728\u52A0\u8F7D\u8BF7\u7A0D\u5019
+mark.history.error=\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6\u8BC4\u5377\u5386\u53F2\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
+mark.history.number.error=\u8BF7\u8F93\u5165\u6570\u5B57
 #mark-board
-mark.board.submit=\u63d0\u4ea4
-mark.board.total.score=\u603b\u5206
-mark.board.score.zero=\u5168\u96f6\u5206
-mark.board.pass=\u8df3 \u8fc7
-mark.board.choose.result=\u9009\u505a\u7ed3\u679c
-mark.board.keyboard=\u952e\u76d8\u7ed9\u5206 >>
-mark.board.mouse=<< \u9f20\u6807\u7ed9\u5206
-mark.board.interval=\u95f4\u9694
+mark.board.submit=\u63D0\u4EA4
+mark.board.total.score=\u603B\u5206
+mark.board.score.zero=\u5168\u96F6\u5206
+mark.board.pass=\u8DF3 \u8FC7
+mark.board.choose.result=\u9009\u505A\u7ED3\u679C
+mark.board.keyboard=\u952E\u76D8\u7ED9\u5206 >>
+mark.board.mouse=<< \u9F20\u6807\u7ED9\u5206
+mark.board.interval=\u95F4\u9694
 mark.board.score=\u5206
-mark.board.back=\u56de\u9000
-mark.board.clear.question=\u6e05\u9664\u672c\u9898
-mark.board.clear=\u6e05\u9664\u5168\u5377
-mark.board.question.not.mark=\u5f53\u524d\u4efb\u52a1\u8fd8\u6709\u672a\u7ed9\u5206\u7684\u9898\uff0c\u8bf7\u7ee7\u7eed\u7ed9\u5206
-mark.board.confirm=,\u786e\u8ba4\u63d0\u4ea4\u5417\uff1f
-mark.board.zero.confirm=\u786e\u8ba4\u8981\u63d0\u4ea4\u5168\u96f6\u5206\u5417\uff1f
-mark.board.null=\u65e0
-mark.board.interval.error=\u4e0d\u7b26\u5408\u5206\u503c\u95f4\u9694\u8981\u6c42
-mark.board.gt=\u4e0d\u80fd\u5927\u4e8e
-mark.board.lt=\u4e0d\u80fd\u5c0f\u4e8e
-mark.board.number.error=\u4e0d\u662f\u5408\u6cd5\u6570\u5b57
+mark.board.back=\u56DE\u9000
+mark.board.clear.question=\u6E05\u9664\u672C\u9898
+mark.board.clear=\u6E05\u9664\u5168\u5377
+mark.board.question.not.mark=\u5F53\u524D\u4EFB\u52A1\u8FD8\u6709\u672A\u7ED9\u5206\u7684\u9898\uFF0C\u8BF7\u7EE7\u7EED\u7ED9\u5206
+mark.board.confirm=,\u786E\u8BA4\u63D0\u4EA4\u5417\uFF1F
+mark.board.zero.confirm=\u786E\u8BA4\u8981\u63D0\u4EA4\u5168\u96F6\u5206\u5417\uFF1F
+mark.board.null=\u65E0
+mark.board.interval.error=\u4E0D\u7B26\u5408\u5206\u503C\u95F4\u9694\u8981\u6C42
+mark.board.gt=\u4E0D\u80FD\u5927\u4E8E
+mark.board.lt=\u4E0D\u80FD\u5C0F\u4E8E
+mark.board.number.error=\u4E0D\u662F\u5408\u6CD5\u6570\u5B57
 #sheet-view
-mark.sheet=\u539f\u56fe
-mark.sheet.check=\u539f\u56fe\u5207\u6362
-mark.sheet.open=\u6253\u5f00
-mark.sheet.close=\u5173\u95ed
+mark.sheet=\u539F\u56FE
+mark.sheet.check=\u539F\u56FE\u5207\u6362
+mark.sheet.open=\u6253\u5F00
+mark.sheet.close=\u5173\u95ED
 #slice-view
 mark.slice=\u5168\u5377
 mark.slice.check=\u5168\u5377\u5207\u6362
-mark.slice.open=\u6253\u5f00
-mark.slice.close=\u5173\u95ed
+mark.slice.open=\u6253\u5F00
+mark.slice.close=\u5173\u95ED
 #answer-view
-mark.answer=\u6807\u7b54
+mark.answer=\u6807\u7B54
 #warning-info
-mark.warning.try.again=\u8bf7\u70b9\u51fb\u91cd\u8bd5
-mark.warning.force.special.tag=\u5f3a\u5236\u7279\u6b8a\u6807\u8bb0\u5df2\u5f00\u542f\uff0c\u81f3\u5c11\u4f7f\u7528\u4e00\u4e2a\u7279\u6b8a\u6807\u8bb0
-mark.warning.network.error=\u7f51\u7edc\u5f02\u5e38\uff0c\u4efb\u52a1\u63d0\u4ea4\u5931\u8d25
-mark.warning.task.error=\u9886\u53d6\u8bc4\u5377\u4efb\u52a1\u51fa\u9519
-mark.warning.task.finish=\u8bc4\u5377\u4efb\u52a1\u5df2\u5b8c\u6210
-mark.warning.task.loading=\u8bc4\u5377\u4efb\u52a1\u6b63\u5728\u52a0\u8f7d\u4e2d
-mark.warning.close=\u5173\u95ed
-mark.warning.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
-mark.warning.problem=\u56de\u8bc4\u95ee\u9898\u5377\u6210\u529f
+mark.warning.try.again=\u8BF7\u70B9\u51FB\u91CD\u8BD5
+mark.warning.force.special.tag=\u5F3A\u5236\u7279\u6B8A\u6807\u8BB0\u5DF2\u5F00\u542F\uFF0C\u81F3\u5C11\u4F7F\u7528\u4E00\u4E2A\u7279\u6B8A\u6807\u8BB0
+mark.warning.network.error=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u4EFB\u52A1\u63D0\u4EA4\u5931\u8D25
+mark.warning.task.error=\u9886\u53D6\u8BC4\u5377\u4EFB\u52A1\u51FA\u9519
+mark.warning.task.finish=\u8BC4\u5377\u4EFB\u52A1\u5DF2\u5B8C\u6210
+mark.warning.task.loading=\u8BC4\u5377\u4EFB\u52A1\u6B63\u5728\u52A0\u8F7D\u4E2D
+mark.warning.close=\u5173\u95ED
+mark.warning.success=\u56DE\u8BC4\u6210\u529F\uFF0C\u603B\u5206\uFF1A
+mark.warning.problem=\u56DE\u8BC4\u95EE\u9898\u5377\u6210\u529F
 #json-view
-mark.json.loading=\u6b63\u5728\u52a0\u8f7d\u4e2d
-mark.json.student.answer=\u8003\u751f\u7b54\u6848\uff1a
-mark.json.answer=\u6807\u7b54\uff1a
-mark.json.body=\u9898\u5e72\uff1a
-mark.json.question.number=\u9898\u53f7\uff1a
+mark.json.loading=\u6B63\u5728\u52A0\u8F7D\u4E2D
+mark.json.student.answer=\u8003\u751F\u7B54\u6848\uFF1A
+mark.json.answer=\u6807\u7B54\uFF1A
+mark.json.body=\u9898\u5E72\uFF1A
+mark.json.question.number=\u9898\u53F7\uFF1A
 
 #index
-index.user=\u7528\u6237\u7ba1\u7406
-index.exam=\u8003\u8bd5\u7ba1\u7406
-index.student=\u8003\u751f\u7ba1\u7406
-index.paper=\u79d1\u76ee\u7ba1\u7406
-index.scan=\u626b\u63cf\u8fdb\u5ea6
-index.mark=\u8bc4\u5377\u7ba1\u7406
-index.score=\u6210\u7ee9\u67e5\u8be2
-index.problem=\u95ee\u9898\u8bd5\u5377
-index.inspected=\u6210\u7ee9\u590d\u6838
-index.report.total=\u603b\u91cf\u5206\u6790
-index.report.subject=\u79d1\u76ee\u5206\u6790
-index.check=\u6570\u636e\u68c0\u67e5
-index.log=\u64cd\u4f5c\u65e5\u5fd7
+index.user=\u7528\u6237\u7BA1\u7406
+index.exam=\u8003\u8BD5\u7BA1\u7406
+index.student=\u8003\u751F\u7BA1\u7406
+index.paper=\u79D1\u76EE\u7BA1\u7406
+index.scan=\u626B\u63CF\u8FDB\u5EA6
+index.mark=\u8BC4\u5377\u7BA1\u7406
+index.score=\u6210\u7EE9\u67E5\u8BE2
+index.problem=\u95EE\u9898\u8BD5\u5377
+index.inspected=\u6210\u7EE9\u590D\u6838
+index.report.total=\u603B\u91CF\u5206\u6790
+index.report.subject=\u79D1\u76EE\u5206\u6790
+index.check=\u6570\u636E\u68C0\u67E5
+index.log=\u64CD\u4F5C\u65E5\u5FD7
 
 #report.subject
-report.subject=\u603b\u91cf\u5206\u6790
-report.subject.name=\u79d1\u76ee
-report.subject.select=\u8bf7\u9009\u62e9
-report.subject.search=\u67e5\u8be2
-report.subject.export=\u5bfc\u51fa
-report.subject.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.subject.name=\u79d1\u76ee
-report.subject.totalCount=\u62a5\u8003\u4eba\u6570
-report.subject.absentCount=\u7f3a\u8003
-report.subject.breachCount=\u8fdd\u7eaa
-report.subject.realityCount=\u6709\u6548\u4eba\u6570
-report.subject.avgScore=\u5e73\u5747\u5206
-report.subject.maxScore=\u6700\u9ad8\u5206
-report.subject.minScore=\u6700\u4f4e\u5206
-report.subject.passCount=\u53ca\u683c\u4eba\u6570
-report.subject.passRate=\u53ca\u683c\u7387
+report.subject=\u603B\u91CF\u5206\u6790
+report.subject.name=\u79D1\u76EE
+report.subject.select=\u8BF7\u9009\u62E9
+report.subject.search=\u67E5\u8BE2
+report.subject.export=\u5BFC\u51FA
+report.subject.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.subject.name=\u79D1\u76EE
+report.subject.totalCount=\u62A5\u8003\u4EBA\u6570
+report.subject.absentCount=\u7F3A\u8003
+report.subject.breachCount=\u8FDD\u7EAA
+report.subject.realityCount=\u6709\u6548\u4EBA\u6570
+report.subject.avgScore=\u5E73\u5747\u5206
+report.subject.maxScore=\u6700\u9AD8\u5206
+report.subject.minScore=\u6700\u4F4E\u5206
+report.subject.passCount=\u53CA\u683C\u4EBA\u6570
+report.subject.passRate=\u53CA\u683C\u7387
 #report.range
-report.range=\u5206\u6bb5\u7edf\u8ba1
-report.range.subject=\u79d1\u76ee
-report.range.select=\u8bf7\u9009\u62e9
-report.range.search=\u67e5\u8be2
-report.range.export=\u5bfc\u51fa
-report.range.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.range.level=\u5c42\u6b21
-report.range.proportion=\u5360\u6bd4
-report.range.total=\u603b\u6570
-report.range.operation=\u64cd\u4f5c
-report.range.chart=\u5206\u6bb5\u56fe
+report.range=\u5206\u6BB5\u7EDF\u8BA1
+report.range.subject=\u79D1\u76EE
+report.range.select=\u8BF7\u9009\u62E9
+report.range.search=\u67E5\u8BE2
+report.range.export=\u5BFC\u51FA
+report.range.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.range.level=\u5C42\u6B21
+report.range.proportion=\u5360\u6BD4
+report.range.total=\u603B\u6570
+report.range.operation=\u64CD\u4F5C
+report.range.chart=\u5206\u6BB5\u56FE
 #report.college
-report.college=\u5b66\u9662\u5206\u6790
-report.college.subject=\u79d1\u76ee
-report.college.select=\u8bf7\u9009\u62e9
-report.college.search=\u67e5\u8be2
-report.college.export=\u5bfc\u51fa
-report.college.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.college.name=\u5b66\u751f\u9662\u7cfb
-report.college.avgScore=\u5e73\u5747\u5206
-report.college.maxScore=\u6700\u9ad8\u5206
-report.college.minScore=\u6700\u4f4e\u5206
-report.college.passCount=\u53ca\u683c\u4eba\u6570
-report.college.passRate=\u53ca\u683c\u7387
-report.college.excellentRate=\u4f18\u79c0\u7387
+report.college=\u5B66\u9662\u5206\u6790
+report.college.subject=\u79D1\u76EE
+report.college.select=\u8BF7\u9009\u62E9
+report.college.search=\u67E5\u8BE2
+report.college.export=\u5BFC\u51FA
+report.college.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.college.name=\u5B66\u751F\u9662\u7CFB
+report.college.avgScore=\u5E73\u5747\u5206
+report.college.maxScore=\u6700\u9AD8\u5206
+report.college.minScore=\u6700\u4F4E\u5206
+report.college.passCount=\u53CA\u683C\u4EBA\u6570
+report.college.passRate=\u53CA\u683C\u7387
+report.college.excellentRate=\u4F18\u79C0\u7387
 #report.teacher
-report.teacher=\u4efb\u8bfe\u8001\u5e08\u5206\u6790
-report.teacher.subject=\u79d1\u76ee
-report.teacher.select=\u8bf7\u9009\u62e9
-report.teacher.search=\u67e5\u8be2
-report.teacher.export=\u5bfc\u51fa
-report.teacher.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.teacher.name=\u4efb\u8bfe\u8001\u5e08
-report.teacher.realityCount=\u6709\u6548\u4eba\u6570
-report.teacher.passCount=\u53ca\u683c
-report.teacher.excellentCount=\u4f18\u79c0
-report.teacher.maxScore=\u6700\u9ad8\u5206
-report.teacher.minScore=\u6700\u4f4e\u5206
-report.teacher.passRate=\u53ca\u683c\u7387
-report.teacher.excellentRate=\u4f18\u79c0\u7387
-report.teacher.avgScore=\u5e73\u5747\u5206
-report.teacher.relativeAvgScore=\u5e73\u5747\u76f8\u5bf9\u5206
-report.teacher.return=\u8fd4\u56de
+report.teacher=\u4EFB\u8BFE\u8001\u5E08\u5206\u6790
+report.teacher.subject=\u79D1\u76EE
+report.teacher.select=\u8BF7\u9009\u62E9
+report.teacher.search=\u67E5\u8BE2
+report.teacher.export=\u5BFC\u51FA
+report.teacher.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.teacher.name=\u4EFB\u8BFE\u8001\u5E08
+report.teacher.realityCount=\u6709\u6548\u4EBA\u6570
+report.teacher.passCount=\u53CA\u683C
+report.teacher.excellentCount=\u4F18\u79C0
+report.teacher.maxScore=\u6700\u9AD8\u5206
+report.teacher.minScore=\u6700\u4F4E\u5206
+report.teacher.passRate=\u53CA\u683C\u7387
+report.teacher.excellentRate=\u4F18\u79C0\u7387
+report.teacher.avgScore=\u5E73\u5747\u5206
+report.teacher.relativeAvgScore=\u5E73\u5747\u76F8\u5BF9\u5206
+report.teacher.return=\u8FD4\u56DE
 #report.class
-report.class=\u73ed\u7ea7\u5206\u6790
-report.class.subject=\u79d1\u76ee
-report.class.select=\u8bf7\u9009\u62e9
-report.class.search=\u67e5\u8be2
-report.class.export=\u5bfc\u51fa
-report.class.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.class.name=\u73ed\u7ea7
-report.class.avgScore=\u5e73\u5747\u5206
-report.class.maxScore=\u6700\u9ad8\u5206
-report.class.minScore=\u6700\u4f4e\u5206
-report.class.passCount=\u53ca\u683c\u6570
-report.class.passRate=\u53ca\u683c\u7387
-report.class.excellentCount=\u4f18\u79c0\u6570
-report.class.excellentRate=\u4f18\u79c0\u7387
+report.class=\u73ED\u7EA7\u5206\u6790
+report.class.subject=\u79D1\u76EE
+report.class.select=\u8BF7\u9009\u62E9
+report.class.search=\u67E5\u8BE2
+report.class.export=\u5BFC\u51FA
+report.class.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.class.name=\u73ED\u7EA7
+report.class.avgScore=\u5E73\u5747\u5206
+report.class.maxScore=\u6700\u9AD8\u5206
+report.class.minScore=\u6700\u4F4E\u5206
+report.class.passCount=\u53CA\u683C\u6570
+report.class.passRate=\u53CA\u683C\u7387
+report.class.excellentCount=\u4F18\u79C0\u6570
+report.class.excellentRate=\u4F18\u79C0\u7387
 #report.question
-report.question.objective=\u5ba2\u89c2\u9898\u5206\u6790
-report.question.subjective=\u4e3b\u89c2\u9898\u5206\u6790
-report.question.subject=\u79d1\u76ee
-report.question.select=\u8bf7\u9009\u62e9
-report.question.search=\u67e5\u8be2
-report.question.export=\u5bfc\u51fa
-report.question.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.question.paperType=\u8bd5\u5377\u7c7b\u578b
-report.question.name=\u9898\u76ee\u540d\u79f0
-report.question.mainNumber=\u5927\u9898\u53f7
-report.question.subNumber=\u5c0f\u9898\u53f7
+report.question.objective=\u5BA2\u89C2\u9898\u5206\u6790
+report.question.subjective=\u4E3B\u89C2\u9898\u5206\u6790
+report.question.subject=\u79D1\u76EE
+report.question.select=\u8BF7\u9009\u62E9
+report.question.search=\u67E5\u8BE2
+report.question.export=\u5BFC\u51FA
+report.question.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.question.paperType=\u8BD5\u5377\u7C7B\u578B
+report.question.name=\u9898\u76EE\u540D\u79F0
+report.question.mainNumber=\u5927\u9898\u53F7
+report.question.subNumber=\u5C0F\u9898\u53F7
 report.question.score=\u5355\u9898\u5206\u6570
-report.question.avgScore=\u5355\u9898\u5e73\u5747\u5206
-report.question.stdev=\u5355\u9898\u6807\u51c6\u5dee
-report.question.scoreRate=\u5f97\u5206\u7387
-report.question.fullScoreRate=\u6ee1\u5206\u7387
+report.question.avgScore=\u5355\u9898\u5E73\u5747\u5206
+report.question.stdev=\u5355\u9898\u6807\u51C6\u5DEE
+report.question.scoreRate=\u5F97\u5206\u7387
+report.question.fullScoreRate=\u6EE1\u5206\u7387
 #report.group
 report.group=\u5927\u9898\u5206\u6790
-report.group.subject=\u79d1\u76ee
-report.group.select=\u8bf7\u9009\u62e9
-report.group.search=\u67e5\u8be2
-report.group.export=\u5bfc\u51fa
-report.group.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.group.name=\u9898\u76ee\u540d\u79f0
-report.group.number=\u9898\u53f7
-report.group.totalScore=\u6ee1\u5206
-report.group.maxScore=\u6700\u9ad8\u5206
-report.group.minScore=\u6700\u4f4e\u5206
-report.group.avgScore=\u5e73\u5747\u5206
-report.group.stdev=\u6807\u51c6\u5dee
-report.group.coefficient=\u5dee\u5f02\u7cfb\u6570
-report.group.scoreRate=\u5f97\u5206\u7387
-report.group.zeroCount=\u96f6\u5206\u4eba\u6570
-report.group.fullCount=\u6ee1\u5206\u4eba\u6570
+report.group.subject=\u79D1\u76EE
+report.group.select=\u8BF7\u9009\u62E9
+report.group.search=\u67E5\u8BE2
+report.group.export=\u5BFC\u51FA
+report.group.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.group.name=\u9898\u76EE\u540D\u79F0
+report.group.number=\u9898\u53F7
+report.group.totalScore=\u6EE1\u5206
+report.group.maxScore=\u6700\u9AD8\u5206
+report.group.minScore=\u6700\u4F4E\u5206
+report.group.avgScore=\u5E73\u5747\u5206
+report.group.stdev=\u6807\u51C6\u5DEE
+report.group.coefficient=\u5DEE\u5F02\u7CFB\u6570
+report.group.scoreRate=\u5F97\u5206\u7387
+report.group.zeroCount=\u96F6\u5206\u4EBA\u6570
+report.group.fullCount=\u6EE1\u5206\u4EBA\u6570
 #report.massage
-report.massage.school.null=\u627e\u4e0d\u5230\u5b66\u6821
+report.massage.school.null=\u627E\u4E0D\u5230\u5B66\u6821
 #head
-head.title=\u4e91\u9605\u5377
-head.logout=\u9000\u51fa
+head.title=\u4E91\u9605\u5377
+head.logout=\u9000\u51FA
 
 #student search
-student.search.title=\u5b66\u751f\u67e5\u8be2\u6210\u7ee9
-student.search.code=\u8bf7\u8f93\u5165\u5b66\u53f7
-student.search.name=\u8bf7\u8f93\u5165\u59d3\u540d
-student.search.submit=\u67e5\u8be2
-student.search.error=\u5b66\u6821\u4e0d\u5b58\u5728
+student.search.title=\u5B66\u751F\u67E5\u8BE2\u6210\u7EE9
+student.search.code=\u8BF7\u8F93\u5165\u5B66\u53F7
+student.search.name=\u8BF7\u8F93\u5165\u59D3\u540D
+student.search.submit=\u67E5\u8BE2
+student.search.error=\u5B66\u6821\u4E0D\u5B58\u5728
 #student search list
-student.search.list.examName=\u8003\u8bd5\u540d\u79f0
-student.search.list.subjectName=\u8bfe\u7a0b\u540d\u79f0
-student.search.list.objectiveScore=\u5ba2\u89c2\u5206
-student.search.list.subjectiveScore=\u4e3b\u89c2\u5206
-student.search.list.totalScore=\u603b\u5206
-student.search.list.remark=\u5907\u6ce8
+student.search.list.examName=\u8003\u8BD5\u540D\u79F0
+student.search.list.subjectName=\u8BFE\u7A0B\u540D\u79F0
+student.search.list.objectiveScore=\u5BA2\u89C2\u5206
+student.search.list.subjectiveScore=\u4E3B\u89C2\u5206
+student.search.list.totalScore=\u603B\u5206
+student.search.list.remark=\u5907\u6CE8

+ 4 - 4
stmms-web/src/main/webapp/static/i18n/messages_en.properties

@@ -19,7 +19,7 @@ user.reset.name=press your name
 user.reset.password=press new password
 user.reset.password.again=press new password again
 user.reset.name.length=length cannot exceed 10 words
-user.reset.name.chinese=\u8bf7\u8f93\u5165\u4e2d\u6587
+user.reset.name.chinese=\u8BF7\u8F93\u5165\u4E2D\u6587
 user.reset.password.same=please keep the same password twice
 user.reset.password.length=password must be at least 4 word,cannot exceed 8 words
 #mark-control
@@ -33,7 +33,7 @@ mark.control.init.error=Initialization failed, please refresh the page!
 mark.control.task.not.exist=the task question is not exist
 mark.control.task.finish=the marking is finished
 mark.control.task.null=There is no task now
-mark.control.tsak.error=task submit failed, please refresh the page!
+mark.control.task.error=task submit failed, please refresh the page!
 mark.control.group=switch group
 #status
 mark.status.student.number=student number
@@ -99,7 +99,7 @@ mark.history.error=Unable to read the history at this time. Please try again lat
 mark.history.number.error=please press number
 #mark-board
 mark.board.submit=submit
-mark.board.total.score=Score\uff1a
+mark.board.total.score=Score\uFF1A
 mark.board.score.zero=all zero
 mark.board.pass=pass
 mark.board.choose.result=choose result
@@ -291,4 +291,4 @@ student.search.list.subjectName=subject name
 student.search.list.objectiveScore=objective score
 student.search.list.subjectiveScore=subjective score
 student.search.list.totalScore=total score
-student.search.list.remark=\u5907\u6ce8
+student.search.list.remark=\u5907\u6CE8

+ 258 - 258
stmms-web/src/main/webapp/static/i18n/messages_ja.properties

@@ -1,294 +1,294 @@
 #login
-user.login.title=\u30c7\u30b8\u30bf\u30eb\u63a1\u70b9\u30b7\u30b9\u30c6\u30e0\u3078\u30ed\u30b0\u30a4\u30f3
-user.login.admin=\u7ba1\u7406\u8005\u767b\u9332
-user.login.marker=\u63a1\u70b9\u8005\u767b\u9332
-user.login.name=\u30e6\u30fc\u30b6\u30fc\u540d
-user.login.password=\u30d1\u30b9\u30ef\u30fc\u30c9
-user.login.submit=\u30ed\u30b0\u30a4\u30f3
-user.login.error.account=\u8a72\u5f53\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u5b58\u5728\u3057\u307e\u305b\u3093
-user.login.error.finish=\u63a1\u70b9\u4f5c\u696d\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
-user.login.error.group=\u8a72\u5f53\u3059\u308b\u5927\u554f\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-user.login.error.disabled=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u73fe\u5728\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
-user.login.error.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059
-user.login.error.access=\u30a2\u30af\u30bb\u30b9\u3059\u308b\u6a29\u5229\u304c\u3042\u308a\u307e\u305b\u3093
+user.login.title=\u30C7\u30B8\u30BF\u30EB\u63A1\u70B9\u30B7\u30B9\u30C6\u30E0\u3078\u30ED\u30B0\u30A4\u30F3
+user.login.admin=\u7BA1\u7406\u8005\u767B\u9332
+user.login.marker=\u63A1\u70B9\u8005\u767B\u9332
+user.login.name=\u30E6\u30FC\u30B6\u30FC\u540D
+user.login.password=\u30D1\u30B9\u30EF\u30FC\u30C9
+user.login.submit=\u30ED\u30B0\u30A4\u30F3
+user.login.error.account=\u8A72\u5F53\u3059\u308B\u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093
+user.login.error.finish=\u63A1\u70B9\u4F5C\u696D\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F
+user.login.error.group=\u8A72\u5F53\u3059\u308B\u5927\u554F\u304C\u5B58\u5728\u3057\u307E\u305B\u3093
+user.login.error.disabled=\u3053\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u73FE\u5728\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
+user.login.error.password=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059
+user.login.error.access=\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u6A29\u5229\u304C\u3042\u308A\u307E\u305B\u3093
 #reset
-user.reset.submit=\u78ba\u5b9a
-user.reset.logout=\u30ed\u30b0\u30a2\u30a6\u30c8
-user.reset.title=\u65b0\u898f\u767b\u9332
-user.reset.name=\u30e6\u30fc\u30b6\u30fc\u540d
-user.reset.password=\u30d1\u30b9\u30ef\u30fc\u30c9
-user.reset.password.again=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b
-user.reset.name.length=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f10\u6587\u5b57\u4ee5\u5185\u306b\u3057\u3066\u304f\u3060\u3055\u3044
-user.reset.name.chinese=\u8bf7\u8f93\u5165\u4e2d\u6587
-user.reset.password.same=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093
-user.reset.password.length=4\u6587\u5b57\u4ee5\u4e0a\u30018\u6587\u5b57\u4ee5\u5185\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044
+user.reset.submit=\u78BA\u5B9A
+user.reset.logout=\u30ED\u30B0\u30A2\u30A6\u30C8
+user.reset.title=\u65B0\u898F\u767B\u9332
+user.reset.name=\u30E6\u30FC\u30B6\u30FC\u540D
+user.reset.password=\u30D1\u30B9\u30EF\u30FC\u30C9
+user.reset.password.again=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u518D\u5165\u529B
+user.reset.name.length=\u30D1\u30B9\u30EF\u30FC\u30C9\u306F10\u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044
+user.reset.name.chinese=\u8BF7\u8F93\u5165\u4E2D\u6587
+user.reset.password.same=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093
+user.reset.password.length=4\u6587\u5B57\u4EE5\u4E0A\u30018\u6587\u5B57\u4EE5\u5185\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044
 #mark-control
-mark.control.assistant=\u305d\u306e\u4ed6\u306e\u6a5f\u80fd
-mark.control.mode.track=\u90e8\u5206\u63a1\u70b9\u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u308b
-mark.control.mode.common=\u901a\u5e38\u63a1\u70b9\u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u308b
-mark.control.board=\u63a1\u70b9\u677f
-mark.control.function=\u63a1\u70b9\u6a5f\u80fd
+mark.control.assistant=\u305D\u306E\u4ED6\u306E\u6A5F\u80FD
+mark.control.mode.track=\u90E8\u5206\u63A1\u70B9\u30E2\u30FC\u30C9\u306B\u5207\u308A\u66FF\u3048\u308B
+mark.control.mode.common=\u901A\u5E38\u63A1\u70B9\u30E2\u30FC\u30C9\u306B\u5207\u308A\u66FF\u3048\u308B
+mark.control.board=\u63A1\u70B9\u677F
+mark.control.function=\u63A1\u70B9\u6A5F\u80FD
 mark.control.logout=EXIT
-mark.control.init.error=\u30c7\u30fc\u30bf\u30fc\u66f4\u65b0\u304c\u5931\u6557\u3057\u305f\u306e\u3067\u3001\u518d\u5ea6\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044
-mark.control.task.not.exist=\u8a72\u5f53\u3059\u308b\u5927\u554f\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-mark.control.task.finish=\u63a1\u70b9\u4f5c\u696d\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
-mark.control.task.null=\u63a1\u70b9\u5bfe\u8c61\u304c\u3042\u308a\u307e\u305b\u3093
-mark.control.tsak.error=\u63d0\u51fa\u306b\u5931\u6557\u3057\u305f\u306e\u3067\u3001\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044
-mark.control.group=\u5927\u554f
+mark.control.init.error=\u30C7\u30FC\u30BF\u30FC\u66F4\u65B0\u304C\u5931\u6557\u3057\u305F\u306E\u3067\u3001\u518D\u5EA6\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044
+mark.control.task.not.exist=\u8A72\u5F53\u3059\u308B\u5927\u554F\u304C\u5B58\u5728\u3057\u307E\u305B\u3093
+mark.control.task.finish=\u63A1\u70B9\u4F5C\u696D\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F
+mark.control.task.null=\u63A1\u70B9\u5BFE\u8C61\u304C\u3042\u308A\u307E\u305B\u3093
+mark.control.task.error=\u63D0\u51FA\u306B\u5931\u6557\u3057\u305F\u306E\u3067\u3001\u518D\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044
+mark.control.group=\u5927\u554F
 #status
-mark.status.student.number=\u53d7\u9a13\u8005\u7ba1\u7406\u756a\u53f7
-mark.status.library.number=\u63a1\u70b9\u30bf\u30b9\u30af\u7ba1\u7406\u756a\u53f7
-mark.status.objective.score=\u30de\u30fc\u30af\u63a1\u70b9\u306e\u70b9\u6570
-mark.status.marked.count=\u63a1\u70b9\u30bf\u30b9\u30af\u7d42\u4e86
-mark.status.unmark.count=\u63a1\u70b9\u30bf\u30b9\u30af\u672a\u7d42\u4e86
-mark.status.top.count=\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u7b54\u6848\u7528\u7d19\u6570
-mark.status.progress=\u9032\u6357\u72b6\u6cc1
-mark.status.continue=\u5f15\u304d\u7d9a\u304d\u63a1\u70b9\u3057\u307e\u3059\u304b
-mark.status.top.count.finish=\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30bf\u30b9\u30af\u304c\u5b8c\u6210\u3057\u307e\u3057\u305f\u3002\u5f15\u304d\u7d9a\u304d\u63a1\u70b9\u3057\u307e\u3059\u304b\uff1f
-mark.status.loading=\u30ed\u30fc\u30c9\u4e2d\u2026
-mark.status.logout=\u30ed\u30b0\u30a2\u30a6\u30c8
+mark.status.student.number=\u53D7\u9A13\u8005\u7BA1\u7406\u756A\u53F7
+mark.status.library.number=\u63A1\u70B9\u30BF\u30B9\u30AF\u7BA1\u7406\u756A\u53F7
+mark.status.objective.score=\u30DE\u30FC\u30AF\u63A1\u70B9\u306E\u70B9\u6570
+mark.status.marked.count=\u63A1\u70B9\u30BF\u30B9\u30AF\u7D42\u4E86
+mark.status.unmark.count=\u63A1\u70B9\u30BF\u30B9\u30AF\u672A\u7D42\u4E86
+mark.status.top.count=\u5272\u308A\u5F53\u3066\u3089\u308C\u305F\u7B54\u6848\u7528\u7D19\u6570
+mark.status.progress=\u9032\u6357\u72B6\u6CC1
+mark.status.continue=\u5F15\u304D\u7D9A\u304D\u63A1\u70B9\u3057\u307E\u3059\u304B
+mark.status.top.count.finish=\u5272\u308A\u5F53\u3066\u3089\u308C\u305F\u30BF\u30B9\u30AF\u304C\u5B8C\u6210\u3057\u307E\u3057\u305F\u3002\u5F15\u304D\u7D9A\u304D\u63A1\u70B9\u3057\u307E\u3059\u304B\uFF1F
+mark.status.loading=\u30ED\u30FC\u30C9\u4E2D\u2026
+mark.status.logout=\u30ED\u30B0\u30A2\u30A6\u30C8
 #single-image-view
-mark.single.zoom.in=\u62e1\u5927
-mark.single.zoom.out=\u7e2e\u5c0f
-mark.single.zoom.fit=\u753b\u9762\u30b5\u30a4\u30ba\u306b\u5408\u308f\u305b\u3066\u8868\u793a
-mark.single.student.answer=\u7b54\u6848\u7528\u7d19
+mark.single.zoom.in=\u62E1\u5927
+mark.single.zoom.out=\u7E2E\u5C0F
+mark.single.zoom.fit=\u753B\u9762\u30B5\u30A4\u30BA\u306B\u5408\u308F\u305B\u3066\u8868\u793A
+mark.single.student.answer=\u7B54\u6848\u7528\u7D19
 #chang name
-mark.change.name=\u30e6\u30fc\u30b6\u30fc\u30cb\u30c3\u30af\u30cd\u30fc\u30e0\u5165\u529b
-mark.change.press.name=\u30e6\u30fc\u30b6\u30fc\u540d\u5165\u529b
-mark.change.press.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b
-mark.change.press.password.again=\u30d1\u30b9\u30ef\u30fc\u30c9\u518d\u5165\u529b
-mark.change.confirm=\u78ba\u5b9a
-mark.change.name.null=\u30e6\u30fc\u30b6\u30fc\u540d\u5165\u529b
-mark.change.name.length=8\u6587\u5b57\u4ee5\u5185\u306b\u3057\u3066\u304f\u3060\u3055\u3044
-mark.change.password.same=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093
-mark.change.password.length=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6587\u5b57\u6570\u306f\uff14\u6587\u5b57\u4ee5\u4e0a\u304c\u5fc5\u8981\u3067\u3059
-mark.change.network.error=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u4e0d\u5177\u5408\u304c\u751f\u3058\u305f\u305f\u3081\u3001\u3084\u308a\u76f4\u3057\u3066\u4e0b\u3055\u3044
-mark.change.error=\u64cd\u4f5c\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044
+mark.change.name=\u30E6\u30FC\u30B6\u30FC\u30CB\u30C3\u30AF\u30CD\u30FC\u30E0\u5165\u529B
+mark.change.press.name=\u30E6\u30FC\u30B6\u30FC\u540D\u5165\u529B
+mark.change.press.password=\u30D1\u30B9\u30EF\u30FC\u30C9\u5165\u529B
+mark.change.press.password.again=\u30D1\u30B9\u30EF\u30FC\u30C9\u518D\u5165\u529B
+mark.change.confirm=\u78BA\u5B9A
+mark.change.name.null=\u30E6\u30FC\u30B6\u30FC\u540D\u5165\u529B
+mark.change.name.length=8\u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044
+mark.change.password.same=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093
+mark.change.password.length=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6587\u5B57\u6570\u306F\uFF14\u6587\u5B57\u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059
+mark.change.network.error=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u306E\u4E0D\u5177\u5408\u304C\u751F\u3058\u305F\u305F\u3081\u3001\u3084\u308A\u76F4\u3057\u3066\u4E0B\u3055\u3044
+mark.change.error=\u64CD\u4F5C\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044
 #specialTag
-mark.special.tag=\u7279\u6b8a\u8a18\u53f7
-mark.special.back=\u623b\u308b
-mark.special.clear=\u3059\u3079\u3066\u306e\u63a1\u70b9\u3092\u524a\u9664
-mark.special.underline=\u30a2\u30f3\u30c0\u30fc\u30e9\u30a4\u30f3
-mark.special.open=\u958b\u304f
-mark.special.close=\u9589\u3058\u308b
+mark.special.tag=\u7279\u6B8A\u8A18\u53F7
+mark.special.back=\u623B\u308B
+mark.special.clear=\u3059\u3079\u3066\u306E\u63A1\u70B9\u3092\u524A\u9664
+mark.special.underline=\u30A2\u30F3\u30C0\u30FC\u30E9\u30A4\u30F3
+mark.special.open=\u958B\u304F
+mark.special.close=\u9589\u3058\u308B
 #problem-process
-mark.problem=\u7b54\u6848\u7528\u7d19\u554f\u984c\u3042\u308a
-mark.problem.type=\u554f\u984c\u30bf\u30a4\u30d7\u3092\u9078\u629e
-mark.problem.confirm=\u78ba\u5b9a
-mark.problem.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
-mark.problem.check=\u554f\u984c\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044
+mark.problem=\u7B54\u6848\u7528\u7D19\u554F\u984C\u3042\u308A
+mark.problem.type=\u554F\u984C\u30BF\u30A4\u30D7\u3092\u9078\u629E
+mark.problem.confirm=\u78BA\u5B9A
+mark.problem.cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
+mark.problem.check=\u554F\u984C\u30BF\u30A4\u30D7\u3092\u9078\u629E\u3057\u3066\u4E0B\u3055\u3044
 #thumbnail
-mark.thumbnail=\u30b5\u30e0\u30cd\u30a4\u30eb\u8868\u793a
-mark.thumbnail.open=\u958b\u304f
-mark.thumbnail.close=\u9589\u3058\u308b
+mark.thumbnail=\u30B5\u30E0\u30CD\u30A4\u30EB\u8868\u793A
+mark.thumbnail.open=\u958B\u304F
+mark.thumbnail.close=\u9589\u3058\u308B
 #view-sidebar
-mark.sidebar=\u30b5\u30a4\u30c9\u30d0\u30fc
-mark.sidebar.paper=\u554f\u984c\u7528\u7d19
-mark.sidebar.answer=\u6a19\u6e96\u89e3\u7b54
+mark.sidebar=\u30B5\u30A4\u30C9\u30D0\u30FC
+mark.sidebar.paper=\u554F\u984C\u7528\u7D19
+mark.sidebar.answer=\u6A19\u6E96\u89E3\u7B54
 #mark-history
-mark.history.title=\u518d\u63a1\u70b9
+mark.history.title=\u518D\u63A1\u70B9
 mark.history.time=\u6642\u9593
-mark.history.number=\u756a\u53f7
-mark.history.score=\u5408\u8a08\u70b9
-mark.history.search=\u7b54\u6848\u7528\u7d19\u306e\u691c\u7d22
-mark.history.pre=\u623b\u308b
-mark.history.success=\u518d\u63a1\u70b9\u7d42\u4e86\u3000\u5408\u8a08\u70b9\uff1a
-mark.history.problem=\u518d\u63a1\u70b9\u7d42\u4e86\u3000\u63d0\u51fa\u6e08\u307f\u3000
-mark.history.loading=\u30ed\u30fc\u30c9\u4e2d\u2026
-mark.history.error=\u63a1\u70b9\u8a18\u9332\u306e\u8aad\u8fbc\u307f\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044
-mark.history.number.error=\u8a8d\u8b58\u3067\u304d\u306a\u3044\u6587\u5b57
+mark.history.number=\u756A\u53F7
+mark.history.score=\u5408\u8A08\u70B9
+mark.history.search=\u7B54\u6848\u7528\u7D19\u306E\u691C\u7D22
+mark.history.pre=\u623B\u308B
+mark.history.success=\u518D\u63A1\u70B9\u7D42\u4E86\u3000\u5408\u8A08\u70B9\uFF1A
+mark.history.problem=\u518D\u63A1\u70B9\u7D42\u4E86\u3000\u63D0\u51FA\u6E08\u307F\u3000
+mark.history.loading=\u30ED\u30FC\u30C9\u4E2D\u2026
+mark.history.error=\u63A1\u70B9\u8A18\u9332\u306E\u8AAD\u8FBC\u307F\u304C\u3067\u304D\u307E\u305B\u3093\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044
+mark.history.number.error=\u8A8D\u8B58\u3067\u304D\u306A\u3044\u6587\u5B57
 #mark-board
-mark.board.submit=\u63d0\u51fa
-mark.board.total.score=\u5408\u8a08\u70b9
-mark.board.score.zero=\u5408\u8a08\u70b9\uff1a0
-mark.board.pass=\u30b9\u30ad\u30c3\u30d7 
-mark.board.choose.result=\u63a1\u70b9
-mark.board.keyboard=\u30ad\u30fc\u30dc\u30fc\u30c9\u63a1\u70b9 >>
-mark.board.mouse=<< \u30de\u30a6\u30b9\u63a1\u70b9
-mark.board.interval=\u9593\u9694\u8a2d\u5b9a
-mark.board.score=\u70b9\u6570
-mark.board.back=\u623b\u308b
-mark.board.clear.question=\u90e8\u5206\u63a1\u70b9\u524a\u9664
-mark.board.clear=\u5168\u63a1\u70b9\u306e\u524a\u9664
-mark.board.question.not.mark=\u672a\u63a1\u70b9\u306e\u554f\u984c\u304c\u3042\u308a\u307e\u3059
-mark.board.confirm=,\u63d0\u51fa\u3057\u307e\u3059\u304b\uff1f
-mark.board.zero.confirm=\u5408\u8a08\u70b9\u306f0\u3067\u3059\u3002\u63d0\u51fa\u3057\u307e\u3059\u304b\uff1f
+mark.board.submit=\u63D0\u51FA
+mark.board.total.score=\u5408\u8A08\u70B9
+mark.board.score.zero=\u5408\u8A08\u70B9\uFF1A0
+mark.board.pass=\u30B9\u30AD\u30C3\u30D7 
+mark.board.choose.result=\u63A1\u70B9
+mark.board.keyboard=\u30AD\u30FC\u30DC\u30FC\u30C9\u63A1\u70B9 >>
+mark.board.mouse=<< \u30DE\u30A6\u30B9\u63A1\u70B9
+mark.board.interval=\u9593\u9694\u8A2D\u5B9A
+mark.board.score=\u70B9\u6570
+mark.board.back=\u623B\u308B
+mark.board.clear.question=\u90E8\u5206\u63A1\u70B9\u524A\u9664
+mark.board.clear=\u5168\u63A1\u70B9\u306E\u524A\u9664
+mark.board.question.not.mark=\u672A\u63A1\u70B9\u306E\u554F\u984C\u304C\u3042\u308A\u307E\u3059
+mark.board.confirm=,\u63D0\u51FA\u3057\u307E\u3059\u304B\uFF1F
+mark.board.zero.confirm=\u5408\u8A08\u70B9\u306F0\u3067\u3059\u3002\u63D0\u51FA\u3057\u307E\u3059\u304B\uFF1F
 mark.board.null=
-mark.board.interval.error=\u70b9\u6570\u306e\u6700\u5c0f\u9593\u9694\u3068\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093
-mark.board.gt=\u4ee5\u4e0b
-mark.board.lt=\u4ee5\u4e0a
-mark.board.number.error=\u8a8d\u8b58\u3067\u304d\u306a\u3044\u6587\u5b57
+mark.board.interval.error=\u70B9\u6570\u306E\u6700\u5C0F\u9593\u9694\u3068\u4E00\u81F4\u3057\u3066\u3044\u307E\u305B\u3093
+mark.board.gt=\u4EE5\u4E0B
+mark.board.lt=\u4EE5\u4E0A
+mark.board.number.error=\u8A8D\u8B58\u3067\u304D\u306A\u3044\u6587\u5B57
 #sheet-view
-mark.sheet=\u7b54\u6848\u7528\u7d19
-mark.sheet.check=\u7b54\u6848\u7528\u7d19\u306e\u5207\u66ff
-mark.sheet.open=\u958b\u304f
-mark.sheet.close=\u9589\u3058\u308b
+mark.sheet=\u7B54\u6848\u7528\u7D19
+mark.sheet.check=\u7B54\u6848\u7528\u7D19\u306E\u5207\u66FF
+mark.sheet.open=\u958B\u304F
+mark.sheet.close=\u9589\u3058\u308B
 #slice-view
-mark.slice=\u7b54\u6848\u7528\u7d19
-mark.slice.check=\u7b54\u6848\u7528\u7d19\u306e\u5207\u66ff
-mark.slice.open=\u958b\u304f
-mark.slice.close=\u9589\u3058\u308b
+mark.slice=\u7B54\u6848\u7528\u7D19
+mark.slice.check=\u7B54\u6848\u7528\u7D19\u306E\u5207\u66FF
+mark.slice.open=\u958B\u304F
+mark.slice.close=\u9589\u3058\u308B
 #answer-view
-mark.answer=\u6a21\u7bc4\u89e3\u7b54
+mark.answer=\u6A21\u7BC4\u89E3\u7B54
 #warning-info
-mark.warning.try.again=\u3084\u308a\u76f4\u3057\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u4e0b\u3055\u3044
-mark.warning.force.special.tag=\u7279\u6b8a\u8a18\u53f7\u6a5f\u80fd\u304c\u30aa\u30f3\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u7279\u6b8a\u8a18\u53f7\u3092\u6700\u4f4e\u4e00\u3064\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044
-mark.warning.network.error=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u4e0d\u5177\u5408\u304c\u751f\u3058\u305f\u305f\u3081\u3001\u63d0\u51fa\u304c\u5931\u6557\u3057\u307e\u3057\u305f
-mark.warning.task.error=\u30c7\u30fc\u30bf\u30fc\u306e\u8aad\u8fbc\u307f\u304c\u5931\u6557\u3057\u307e\u3057\u305f
-mark.warning.task.finish=\u63a1\u70b9\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f
-mark.warning.task.loading=\u7b54\u6848\u7528\u7d19\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u4e2d\u2026
-mark.warning.close=\u9589\u3058\u308b
-mark.warning.success=\u518d\u63a1\u70b9\u7d42\u4e86\u3001\u5408\u8a08\u70b9\uff1a
-mark.warning.problem=\u554f\u984c\u3042\u308a\u306e\u7b54\u6848\u7528\u7d19\u306e\u518d\u63a1\u70b9\u7d42\u4e86
+mark.warning.try.again=\u3084\u308A\u76F4\u3057\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u4E0B\u3055\u3044
+mark.warning.force.special.tag=\u7279\u6B8A\u8A18\u53F7\u6A5F\u80FD\u304C\u30AA\u30F3\u306B\u306A\u3063\u3066\u3044\u308B\u306E\u3067\u3001\u7279\u6B8A\u8A18\u53F7\u3092\u6700\u4F4E\u4E00\u3064\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
+mark.warning.network.error=\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u306E\u4E0D\u5177\u5408\u304C\u751F\u3058\u305F\u305F\u3081\u3001\u63D0\u51FA\u304C\u5931\u6557\u3057\u307E\u3057\u305F
+mark.warning.task.error=\u30C7\u30FC\u30BF\u30FC\u306E\u8AAD\u8FBC\u307F\u304C\u5931\u6557\u3057\u307E\u3057\u305F
+mark.warning.task.finish=\u63A1\u70B9\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F
+mark.warning.task.loading=\u7B54\u6848\u7528\u7D19\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u2026
+mark.warning.close=\u9589\u3058\u308B
+mark.warning.success=\u518D\u63A1\u70B9\u7D42\u4E86\u3001\u5408\u8A08\u70B9\uFF1A
+mark.warning.problem=\u554F\u984C\u3042\u308A\u306E\u7B54\u6848\u7528\u7D19\u306E\u518D\u63A1\u70B9\u7D42\u4E86
 #json-view
-mark.json.loading=\u30ed\u30fc\u30c9\u4e2d\u2026
-mark.json.student.answer=\u53d7\u9a13\u8005\u306e\u56de\u7b54\uff1a
-mark.json.answer=\u6a21\u7bc4\u89e3\u7b54\uff1a
-mark.json.body=\u8a66\u9a13\u554f\u984c\uff1a
-mark.json.question.number=\u8a66\u9a13\u554f\u984c\u756a\u53f7\uff1a
+mark.json.loading=\u30ED\u30FC\u30C9\u4E2D\u2026
+mark.json.student.answer=\u53D7\u9A13\u8005\u306E\u56DE\u7B54\uFF1A
+mark.json.answer=\u6A21\u7BC4\u89E3\u7B54\uFF1A
+mark.json.body=\u8A66\u9A13\u554F\u984C\uFF1A
+mark.json.question.number=\u8A66\u9A13\u554F\u984C\u756A\u53F7\uFF1A
 
 #index
-index.user=\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406
-index.exam=\u8a66\u9a13\u7ba1\u7406
-index.student=\u53d7\u9a13\u751f\u7ba1\u7406
-index.paper=\u79d1\u76ee\u7ba1\u7406
-index.scan=\u30b9\u30ad\u30e3\u30f3\u9032\u5ea6
-index.mark=\u30de\u30fc\u30ad\u30f3\u30b0\u7ba1\u7406
-index.score=\u6210\u7e3e\u30af\u30a8\u30ea\u30fc
-index.inspected=\u6210\u7e3e\u590d\u6838
-index.problem=\u554f\u984c\u3042\u308b\u8a66\u9a13\u7528\u7d19
-index.report.total=\u96c6\u8a08\u5206\u6790
-index.report.subject=\u79d1\u76ee\u5225\u5206\u6790
-index.check=\u30c7\u30fc\u30bf\u691c\u67fb
-index.log=\u64cd\u4f5c\u8a18\u9332
+index.user=\u30E6\u30FC\u30B6\u30FC\u7BA1\u7406
+index.exam=\u8A66\u9A13\u7BA1\u7406
+index.student=\u53D7\u9A13\u751F\u7BA1\u7406
+index.paper=\u79D1\u76EE\u7BA1\u7406
+index.scan=\u30B9\u30AD\u30E3\u30F3\u9032\u5EA6
+index.mark=\u30DE\u30FC\u30AD\u30F3\u30B0\u7BA1\u7406
+index.score=\u6210\u7E3E\u30AF\u30A8\u30EA\u30FC
+index.inspected=\u6210\u7E3E\u590D\u6838
+index.problem=\u554F\u984C\u3042\u308B\u8A66\u9A13\u7528\u7D19
+index.report.total=\u96C6\u8A08\u5206\u6790
+index.report.subject=\u79D1\u76EE\u5225\u5206\u6790
+index.check=\u30C7\u30FC\u30BF\u691C\u67FB
+index.log=\u64CD\u4F5C\u8A18\u9332
 
 #report.subject
-report.subject=\u96c6\u8a08\u5206\u6790
-report.subject.name=\u79d1\u76ee
-report.subject.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.subject.search=\u691c\u7d22
-report.subject.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.subject.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.subject.name=\u79d1\u76ee
-report.subject.totalCount=\u5fdc\u52df\u8005\u6570
-report.subject.absentCount=\u6b20\u5e2d
-report.subject.breachCount=\u4e0d\u6b63\u884c\u70ba
-report.subject.realityCount=\u6709\u52b9\u8005\u6570
-report.subject.avgScore=\u5e73\u5747\u70b9
-report.subject.maxScore=\u6700\u9ad8\u70b9
-report.subject.minScore=\u6700\u4f4e\u70b9
-report.subject.passCount=\u5408\u683c\u8005\u6570
-report.subject.passRate=\u5408\u683c\u7387
+report.subject=\u96C6\u8A08\u5206\u6790
+report.subject.name=\u79D1\u76EE
+report.subject.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.subject.search=\u691C\u7D22
+report.subject.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.subject.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.subject.name=\u79D1\u76EE
+report.subject.totalCount=\u5FDC\u52DF\u8005\u6570
+report.subject.absentCount=\u6B20\u5E2D
+report.subject.breachCount=\u4E0D\u6B63\u884C\u70BA
+report.subject.realityCount=\u6709\u52B9\u8005\u6570
+report.subject.avgScore=\u5E73\u5747\u70B9
+report.subject.maxScore=\u6700\u9AD8\u70B9
+report.subject.minScore=\u6700\u4F4E\u70B9
+report.subject.passCount=\u5408\u683C\u8005\u6570
+report.subject.passRate=\u5408\u683C\u7387
 #report.range
-report.range=\u70b9\u6570\u533a\u5206\u7d71\u8a08
-report.range.subject=\u79d1\u76ee
-report.range.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.range.search=\u691c\u7d22
-report.range.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.range.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.range.level=\u5b66\u6b74
+report.range=\u70B9\u6570\u533A\u5206\u7D71\u8A08
+report.range.subject=\u79D1\u76EE
+report.range.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.range.search=\u691C\u7D22
+report.range.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.range.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.range.level=\u5B66\u6B74
 report.range.proportion=\u5272\u5408
-report.range.total=\u7dcf\u4eba\u6570
-report.range.operation=\u64cd\u4f5c\u6a5f\u80fd
-report.range.chart=\u7d71\u8a08\u56f3\u8868
+report.range.total=\u7DCF\u4EBA\u6570
+report.range.operation=\u64CD\u4F5C\u6A5F\u80FD
+report.range.chart=\u7D71\u8A08\u56F3\u8868
 #report.college
-report.college=\u5b66\u90e8\u5225\u5206\u6790
-report.college.subject=\u79d1\u76ee
-report.college.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.college.search=\u691c\u7d22
-report.college.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.college.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.college.name=\u6240\u5c5e\u5b66\u90e8
-report.college.avgScore=\u5e73\u5747\u70b9
-report.college.maxScore=\u6700\u9ad8\u70b9
-report.college.minScore=\u6700\u4f4e\u70b9
-report.college.passCount=\u5408\u683c\u8005\u6570
-report.college.passRate=\u5408\u683c\u7387
-report.college.excellentRate=\u512a\u79c0\u5224\u5b9a\u7387
+report.college=\u5B66\u90E8\u5225\u5206\u6790
+report.college.subject=\u79D1\u76EE
+report.college.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.college.search=\u691C\u7D22
+report.college.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.college.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.college.name=\u6240\u5C5E\u5B66\u90E8
+report.college.avgScore=\u5E73\u5747\u70B9
+report.college.maxScore=\u6700\u9AD8\u70B9
+report.college.minScore=\u6700\u4F4E\u70B9
+report.college.passCount=\u5408\u683C\u8005\u6570
+report.college.passRate=\u5408\u683C\u7387
+report.college.excellentRate=\u512A\u79C0\u5224\u5B9A\u7387
 #report.teacher
-report.teacher=\u6559\u54e1\u306b\u3064\u3044\u3066\u306e\u8a55\u4fa1
-report.teacher.subject=\u79d1\u76ee
-report.teacher.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.teacher.search=\u691c\u7d22
-report.teacher.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.teacher.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.teacher.name=\u6559\u54e1\u540d
-report.teacher.realityCount=\u6709\u52b9\u8005\u6570
-report.teacher.passCount=\u5408\u683c
-report.teacher.excellentCount=\u512a\u79c0
-report.teacher.maxScore=\u6700\u9ad8\u70b9
-report.teacher.minScore=\u6700\u4f4e\u70b9
-report.teacher.passRate=\u5408\u683c\u7387
-report.teacher.excellentRate=\u512a\u79c0\u5224\u5b9a\u7387
-report.teacher.avgScore=\u5e73\u5747\u70b9
-report.teacher.relativeAvgScore=\u5e73\u5747\u70b9\u5dee\u5206
-report.teacher.return=\u623b\u308b
+report.teacher=\u6559\u54E1\u306B\u3064\u3044\u3066\u306E\u8A55\u4FA1
+report.teacher.subject=\u79D1\u76EE
+report.teacher.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.teacher.search=\u691C\u7D22
+report.teacher.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.teacher.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.teacher.name=\u6559\u54E1\u540D
+report.teacher.realityCount=\u6709\u52B9\u8005\u6570
+report.teacher.passCount=\u5408\u683C
+report.teacher.excellentCount=\u512A\u79C0
+report.teacher.maxScore=\u6700\u9AD8\u70B9
+report.teacher.minScore=\u6700\u4F4E\u70B9
+report.teacher.passRate=\u5408\u683C\u7387
+report.teacher.excellentRate=\u512A\u79C0\u5224\u5B9A\u7387
+report.teacher.avgScore=\u5E73\u5747\u70B9
+report.teacher.relativeAvgScore=\u5E73\u5747\u70B9\u5DEE\u5206
+report.teacher.return=\u623B\u308B
 #report.class
-report.class=\u30af\u30e9\u30b9\u5225\u5206\u6790
-report.class.subject=\u79d1\u76ee
-report.class.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.class.search=\u691c\u7d22
-report.class.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.class.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.class.name=\u30af\u30e9\u30b9
-report.class.avgScore=\u5e73\u5747\u70b9
-report.class.maxScore=\u6700\u9ad8\u70b9
-report.class.minScore=\u6700\u4f4e\u70b9
-report.class.passCount=\u5408\u683c\u30af\u30e9\u30b9\u6570
-report.class.passRate=\u5408\u683c\u7387
-report.class.excellentCount=\u512a\u79c0
-report.class.excellentRate=\u512a\u79c0\u5224\u5b9a\u7387
+report.class=\u30AF\u30E9\u30B9\u5225\u5206\u6790
+report.class.subject=\u79D1\u76EE
+report.class.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.class.search=\u691C\u7D22
+report.class.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.class.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.class.name=\u30AF\u30E9\u30B9
+report.class.avgScore=\u5E73\u5747\u70B9
+report.class.maxScore=\u6700\u9AD8\u70B9
+report.class.minScore=\u6700\u4F4E\u70B9
+report.class.passCount=\u5408\u683C\u30AF\u30E9\u30B9\u6570
+report.class.passRate=\u5408\u683C\u7387
+report.class.excellentCount=\u512A\u79C0
+report.class.excellentRate=\u512A\u79C0\u5224\u5B9A\u7387
 #report.question
-report.question.objective=\u30de\u30fc\u30af\u30b7\u30fc\u30c8\u5f0f\u554f\u984c\u306b\u3064\u3044\u3066\u306e\u5206\u6790
-report.question.subjective=\u8a18\u8ff0\u554f\u984c\u306b\u3064\u3044\u3066\u306e\u5206\u6790
-report.question.subject=\u79d1\u76ee
-report.question.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.question.search=\u691c\u7d22
-report.question.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.question.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.question.paperType=\u7b54\u6848\u7528\u7d19\u306e\u5206\u985e
-report.question.name=\u8a2d\u554f\u540d
-report.question.mainNumber=\u5927\u554f\u756a\u53f7
-report.question.subNumber=\u5c0f\u554f\u756a\u53f7
-report.question.score=\u914d\u70b9
-report.question.avgScore=\u5e73\u5747\u70b9
-report.question.stdev=\u6a19\u6e96\u504f\u5dee
-report.question.scoreRate=\u6b63\u7b54\u7387
-report.question.fullScoreRate=\u6e80\u70b9\u7387
+report.question.objective=\u30DE\u30FC\u30AF\u30B7\u30FC\u30C8\u5F0F\u554F\u984C\u306B\u3064\u3044\u3066\u306E\u5206\u6790
+report.question.subjective=\u8A18\u8FF0\u554F\u984C\u306B\u3064\u3044\u3066\u306E\u5206\u6790
+report.question.subject=\u79D1\u76EE
+report.question.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.question.search=\u691C\u7D22
+report.question.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.question.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.question.paperType=\u7B54\u6848\u7528\u7D19\u306E\u5206\u985E
+report.question.name=\u8A2D\u554F\u540D
+report.question.mainNumber=\u5927\u554F\u756A\u53F7
+report.question.subNumber=\u5C0F\u554F\u756A\u53F7
+report.question.score=\u914D\u70B9
+report.question.avgScore=\u5E73\u5747\u70B9
+report.question.stdev=\u6A19\u6E96\u504F\u5DEE
+report.question.scoreRate=\u6B63\u7B54\u7387
+report.question.fullScoreRate=\u6E80\u70B9\u7387
 #report.group
-report.group=\u5927\u554f\u306b\u3064\u3044\u3066\u306e\u5206\u6790
-report.group.subject=\u79d1\u76ee
-report.group.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.group.search=\u691c\u7d22
-report.group.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.group.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.group.name=\u8a2d\u554f\u540d
-report.group.number=\u554f\u984c\u756a\u53f7
-report.group.totalScore=\u6e80\u70b9
-report.group.maxScore=\u6700\u9ad8\u70b9
-report.group.minScore=\u6700\u4f4e\u70b9
-report.group.avgScore=\u5e73\u5747\u70b9
-report.group.stdev=\u6a19\u6e96\u504f\u5dee
-report.group.coefficient=\u4e0d\u7b49\u7387
-report.group.scoreRate=\u6b63\u7b54\u7387
-report.group.zeroCount=0\u70b9\u8005\u6570
-report.group.fullCount=\u6e80\u70b9\u8005\u6570
+report.group=\u5927\u554F\u306B\u3064\u3044\u3066\u306E\u5206\u6790
+report.group.subject=\u79D1\u76EE
+report.group.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.group.search=\u691C\u7D22
+report.group.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.group.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.group.name=\u8A2D\u554F\u540D
+report.group.number=\u554F\u984C\u756A\u53F7
+report.group.totalScore=\u6E80\u70B9
+report.group.maxScore=\u6700\u9AD8\u70B9
+report.group.minScore=\u6700\u4F4E\u70B9
+report.group.avgScore=\u5E73\u5747\u70B9
+report.group.stdev=\u6A19\u6E96\u504F\u5DEE
+report.group.coefficient=\u4E0D\u7B49\u7387
+report.group.scoreRate=\u6B63\u7B54\u7387
+report.group.zeroCount=0\u70B9\u8005\u6570
+report.group.fullCount=\u6E80\u70B9\u8005\u6570
 #report.massage
-report.massage.school.null=\u8a72\u5f53\u5b66\u6821\u898b\u3064\u304b\u3089\u306a\u3044
+report.massage.school.null=\u8A72\u5F53\u5B66\u6821\u898B\u3064\u304B\u3089\u306A\u3044
 #head
-head.title=\u30c7\u30b8\u30bf\u30eb\u63a1\u70b9\u30b7\u30b9\u30c6\u30e0
-head.logout=\u30ed\u30b0\u30a2\u30a6\u30c8
+head.title=\u30C7\u30B8\u30BF\u30EB\u63A1\u70B9\u30B7\u30B9\u30C6\u30E0
+head.logout=\u30ED\u30B0\u30A2\u30A6\u30C8
 
 #student search
-student.search.title=\u5b66\u751f\u67e5\u8be2\u6210\u7ee9
-student.search.code=\u756a\u53f7
-student.search.name=\u30e6\u30fc\u30b6\u30fc\u540d
-student.search.submit=\u691c\u7d22
-student.search.error=\u5b66\u6821\u4e0d\u5b58\u5728
+student.search.title=\u5B66\u751F\u67E5\u8BE2\u6210\u7EE9
+student.search.code=\u756A\u53F7
+student.search.name=\u30E6\u30FC\u30B6\u30FC\u540D
+student.search.submit=\u691C\u7D22
+student.search.error=\u5B66\u6821\u4E0D\u5B58\u5728
 #student search list
-student.search.list.examName=\u8003\u8bd5\u540d\u79f0
-student.search.list.subjectName=\u8bfe\u7a0b\u540d\u79f0
-student.search.list.objectiveScore=\u5ba2\u89c2\u5206
-student.search.list.subjectiveScore=\u4e3b\u89c2\u5206
-student.search.list.totalScore=\u603b\u5206
-student.search.list.remark=\u5907\u6ce8
+student.search.list.examName=\u8003\u8BD5\u540D\u79F0
+student.search.list.subjectName=\u8BFE\u7A0B\u540D\u79F0
+student.search.list.objectiveScore=\u5BA2\u89C2\u5206
+student.search.list.subjectiveScore=\u4E3B\u89C2\u5206
+student.search.list.totalScore=\u603B\u5206
+student.search.list.remark=\u5907\u6CE8

+ 257 - 257
stmms-web/src/main/webapp/static/i18n/messages_zh.properties

@@ -1,294 +1,294 @@
 #login
-user.login.title=\u9ad8\u6821\u8003\u8bd5\u7ba1\u7406\u5e73\u53f0
-user.login.admin=\u7ba1\u7406\u5458\u767b\u5f55
-user.login.marker=\u8bc4\u5377\u5458\u767b\u5f55
-user.login.name=\u7528\u6237\u540d
-user.login.password=\u5bc6\u7801
-user.login.submit=\u767b\u5f55
-user.login.error.account=\u5e10\u53f7\u4e0d\u5b58\u5728
-user.login.error.finish=\u8bc4\u5377\u5206\u7ec4\u5df2\u7ed3\u675f
-user.login.error.group=\u5927\u9898\u4e0d\u5b58\u5728
-user.login.error.disabled=\u5e10\u53f7\u5df2\u7981\u7528
-user.login.error.password=\u5bc6\u7801\u9519\u8bef
-user.login.error.access=\u7528\u6237\u6ca1\u6709\u8bbf\u95ee\u6743\u9650
+user.login.title=\u9AD8\u6821\u8003\u8BD5\u7BA1\u7406\u5E73\u53F0
+user.login.admin=\u7BA1\u7406\u5458\u767B\u5F55
+user.login.marker=\u8BC4\u5377\u5458\u767B\u5F55
+user.login.name=\u7528\u6237\u540D
+user.login.password=\u5BC6\u7801
+user.login.submit=\u767B\u5F55
+user.login.error.account=\u5E10\u53F7\u4E0D\u5B58\u5728
+user.login.error.finish=\u8BC4\u5377\u5206\u7EC4\u5DF2\u7ED3\u675F
+user.login.error.group=\u5927\u9898\u4E0D\u5B58\u5728
+user.login.error.disabled=\u5E10\u53F7\u5DF2\u7981\u7528
+user.login.error.password=\u5BC6\u7801\u9519\u8BEF
+user.login.error.access=\u7528\u6237\u6CA1\u6709\u8BBF\u95EE\u6743\u9650
 #reset
-user.reset.submit=\u786e\u5b9a
-user.reset.logout=\u9000\u51fa
-user.reset.title=\u9996\u6b21\u767b\u5f55\uff0c\u8bf7\u5b8c\u5584\u8d44\u6599
-user.reset.name=\u8f93\u5165\u7528\u6237\u540d
-user.reset.password=\u8f93\u5165\u65b0\u5bc6\u7801
-user.reset.password.again=\u518d\u6b21\u8f93\u5165\u65b0\u5bc6\u7801
-user.reset.name.length=\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc710\u4e2a\u5b57
-user.reset.name.chinese=\u8bf7\u8f93\u5165\u4e2d\u6587
-user.reset.password.same=\u4e24\u6b21\u5bc6\u7801\u8bf7\u4fdd\u6301\u4e00\u81f4
-user.reset.password.length=\u5bc6\u7801\u7684\u957f\u5ea6\u81f3\u5c114\u4f4d\uff0c\u4e0d\u80fd\u8d85\u8fc78\u4f4d
+user.reset.submit=\u786E\u5B9A
+user.reset.logout=\u9000\u51FA
+user.reset.title=\u9996\u6B21\u767B\u5F55\uFF0C\u8BF7\u5B8C\u5584\u8D44\u6599
+user.reset.name=\u8F93\u5165\u7528\u6237\u540D
+user.reset.password=\u8F93\u5165\u65B0\u5BC6\u7801
+user.reset.password.again=\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801
+user.reset.name.length=\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC710\u4E2A\u5B57
+user.reset.name.chinese=\u8BF7\u8F93\u5165\u4E2D\u6587
+user.reset.password.same=\u4E24\u6B21\u5BC6\u7801\u8BF7\u4FDD\u6301\u4E00\u81F4
+user.reset.password.length=\u5BC6\u7801\u7684\u957F\u5EA6\u81F3\u5C114\u4F4D\uFF0C\u4E0D\u80FD\u8D85\u8FC78\u4F4D
 #mark-control
-mark.control.assistant=\u5c0f\u52a9\u624b
-mark.control.mode.track=\u5207\u6362\u5230\u8f68\u8ff9\u6a21\u5f0f
-mark.control.mode.common=\u5207\u6362\u5230\u666e\u901a\u6a21\u5f0f
-mark.control.board=\u7ed9\u5206\u677f
-mark.control.function=\u8bc4\u5377\u529f\u80fd
-mark.control.logout=\u9000\u51fa
-mark.control.init.error=\u521d\u59cb\u5316\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762\u91cd\u65b0\u52a0\u8f7d
-mark.control.task.not.exist=\u8bc4\u5377\u5927\u9898\u4e0d\u5b58\u5728
-mark.control.task.finish=\u8bc4\u5377\u5df2\u7ed3\u675f
-mark.control.task.null=\u5f53\u524d\u65e0\u8bc4\u5377\u4efb\u52a1
-mark.control.tsak.error=\u8bc4\u5377\u4efb\u52a1\u63d0\u4ea4\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762
-mark.control.group=\u5207\u6362\u5206\u7ec4
+mark.control.assistant=\u5C0F\u52A9\u624B
+mark.control.mode.track=\u5207\u6362\u5230\u8F68\u8FF9\u6A21\u5F0F
+mark.control.mode.common=\u5207\u6362\u5230\u666E\u901A\u6A21\u5F0F
+mark.control.board=\u7ED9\u5206\u677F
+mark.control.function=\u8BC4\u5377\u529F\u80FD
+mark.control.logout=\u9000\u51FA
+mark.control.init.error=\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u91CD\u65B0\u52A0\u8F7D
+mark.control.task.not.exist=\u8BC4\u5377\u5927\u9898\u4E0D\u5B58\u5728
+mark.control.task.finish=\u8BC4\u5377\u5DF2\u7ED3\u675F
+mark.control.task.null=\u5F53\u524D\u65E0\u8BC4\u5377\u4EFB\u52A1
+mark.control.task.error=\u8BC4\u5377\u4EFB\u52A1\u63D0\u4EA4\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u9875\u9762
+mark.control.group=\u5207\u6362\u5206\u7EC4
 #status
-mark.status.student.number=\u8003\u751f\u7f16\u53f7
-mark.status.library.number=\u4efb\u52a1\u7f16\u53f7
-mark.status.objective.score=\u5ba2\u89c2\u5f97\u5206
-mark.status.marked.count=\u5df2\u8bc4
-mark.status.unmark.count=\u672a\u8bc4
-mark.status.top.count=\u5206\u914d
-mark.status.progress=\u8fdb\u5ea6
-mark.status.continue=\u7ee7\u7eed
-mark.status.top.count.finish=\u5206\u914d\u4efb\u52a1\u5df2\u8bc4\u5b8c\uff0c\u662f\u5426\u7ee7\u7eed\uff1f
-mark.status.loading=\u6b63\u5728\u52a0\u8f7d...
-mark.status.logout=\u9000\u51fa
+mark.status.student.number=\u8003\u751F\u7F16\u53F7
+mark.status.library.number=\u4EFB\u52A1\u7F16\u53F7
+mark.status.objective.score=\u5BA2\u89C2\u5F97\u5206
+mark.status.marked.count=\u5DF2\u8BC4
+mark.status.unmark.count=\u672A\u8BC4
+mark.status.top.count=\u5206\u914D
+mark.status.progress=\u8FDB\u5EA6
+mark.status.continue=\u7EE7\u7EED
+mark.status.top.count.finish=\u5206\u914D\u4EFB\u52A1\u5DF2\u8BC4\u5B8C\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F
+mark.status.loading=\u6B63\u5728\u52A0\u8F7D...
+mark.status.logout=\u9000\u51FA
 #single-image-view
-mark.single.zoom.in=\u653e\u5927
-mark.single.zoom.out=\u7f29\u5c0f
-mark.single.zoom.fit=\u9002\u5e94
-mark.single.student.answer=\u7b54\u5377
+mark.single.zoom.in=\u653E\u5927
+mark.single.zoom.out=\u7F29\u5C0F
+mark.single.zoom.fit=\u9002\u5E94
+mark.single.student.answer=\u7B54\u5377
 #chang name
-mark.change.name=\u4fee\u6539\u4e2a\u4eba\u4fe1\u606f
-mark.change.press.name=\u8f93\u5165\u7528\u6237\u540d
-mark.change.press.password=\u8f93\u5165\u65b0\u5bc6\u7801
-mark.change.press.password.again=\u518d\u6b21\u8f93\u5165\u65b0\u5bc6\u7801
-mark.change.confirm=\u786e\u5b9a
-mark.change.name.null=\u540d\u5b57\u4e0d\u80fd\u4e3a\u7a7a
-mark.change.name.length=\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc78\u4e2a\u5b57
-mark.change.password.same=\u4e24\u6b21\u5bc6\u7801\u8bf7\u4fdd\u6301\u4e00\u81f4
-mark.change.password.length=\u5bc6\u7801\u7684\u957f\u5ea6\u81f3\u5c114\u4f4d
-mark.change.network.error=\u7f51\u7edc\u901a\u4fe1\u9519\u8bef\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
-mark.change.error=\u4fee\u6539\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
+mark.change.name=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F
+mark.change.press.name=\u8F93\u5165\u7528\u6237\u540D
+mark.change.press.password=\u8F93\u5165\u65B0\u5BC6\u7801
+mark.change.press.password.again=\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801
+mark.change.confirm=\u786E\u5B9A
+mark.change.name.null=\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A
+mark.change.name.length=\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC78\u4E2A\u5B57
+mark.change.password.same=\u4E24\u6B21\u5BC6\u7801\u8BF7\u4FDD\u6301\u4E00\u81F4
+mark.change.password.length=\u5BC6\u7801\u7684\u957F\u5EA6\u81F3\u5C114\u4F4D
+mark.change.network.error=\u7F51\u7EDC\u901A\u4FE1\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
+mark.change.error=\u4FEE\u6539\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
 #specialTag
-mark.special.tag=\u7279\u6b8a\u6807\u8bb0
-mark.special.back=\u56de\u9000
-mark.special.clear=\u5168\u90e8\u6e05\u9664
-mark.special.underline=\u4e0b\u5212\u7ebf
-mark.special.open=\u6253\u5f00
-mark.special.close=\u5173\u95ed
+mark.special.tag=\u7279\u6B8A\u6807\u8BB0
+mark.special.back=\u56DE\u9000
+mark.special.clear=\u5168\u90E8\u6E05\u9664
+mark.special.underline=\u4E0B\u5212\u7EBF
+mark.special.open=\u6253\u5F00
+mark.special.close=\u5173\u95ED
 #problem-process
-mark.problem=\u95ee\u9898\u5377
-mark.problem.type=\u9009\u62e9\u95ee\u9898\u7c7b\u578b
-mark.problem.confirm=\u786e\u5b9a
-mark.problem.cancel=\u53d6\u6d88
-mark.problem.check=\u8bf7\u9009\u62e9\u95ee\u9898\u5206\u7c7b
+mark.problem=\u95EE\u9898\u5377
+mark.problem.type=\u9009\u62E9\u95EE\u9898\u7C7B\u578B
+mark.problem.confirm=\u786E\u5B9A
+mark.problem.cancel=\u53D6\u6D88
+mark.problem.check=\u8BF7\u9009\u62E9\u95EE\u9898\u5206\u7C7B
 #thumbnail
-mark.thumbnail=\u7f29\u7565\u56fe
-mark.thumbnail.open=\u6253\u5f00
-mark.thumbnail.close=\u5173\u95ed
+mark.thumbnail=\u7F29\u7565\u56FE
+mark.thumbnail.open=\u6253\u5F00
+mark.thumbnail.close=\u5173\u95ED
 #view-sidebar
-mark.sidebar=\u4fa7\u8fb9\u680f
-mark.sidebar.paper=\u8bd5\u5377
-mark.sidebar.answer=\u7b54\u6848
+mark.sidebar=\u4FA7\u8FB9\u680F
+mark.sidebar.paper=\u8BD5\u5377
+mark.sidebar.answer=\u7B54\u6848
 #mark-history
-mark.history.title=\u56de\u8bc4
-mark.history.time=\u65f6\u95f4
-mark.history.number=\u7f16\u53f7
-mark.history.score=\u603b\u5206
-mark.history.search=\u67e5\u627e\u8bd5\u5377
-mark.history.pre=\u524d
-mark.history.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
-mark.history.problem=\u56de\u8bc4\u6210\u529f\uff0c\u5df2\u63d0\u4ea4\u95ee\u9898\u5377
-mark.history.loading=\u6b63\u5728\u52a0\u8f7d\u8bf7\u7a0d\u5019
-mark.history.error=\u6682\u65f6\u65e0\u6cd5\u8bfb\u53d6\u8bc4\u5377\u5386\u53f2\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5
-mark.history.number.error=\u8bf7\u8f93\u5165\u6570\u5b57
+mark.history.title=\u56DE\u8BC4
+mark.history.time=\u65F6\u95F4
+mark.history.number=\u7F16\u53F7
+mark.history.score=\u603B\u5206
+mark.history.search=\u67E5\u627E\u8BD5\u5377
+mark.history.pre=\u524D
+mark.history.success=\u56DE\u8BC4\u6210\u529F\uFF0C\u603B\u5206\uFF1A
+mark.history.problem=\u56DE\u8BC4\u6210\u529F\uFF0C\u5DF2\u63D0\u4EA4\u95EE\u9898\u5377
+mark.history.loading=\u6B63\u5728\u52A0\u8F7D\u8BF7\u7A0D\u5019
+mark.history.error=\u6682\u65F6\u65E0\u6CD5\u8BFB\u53D6\u8BC4\u5377\u5386\u53F2\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
+mark.history.number.error=\u8BF7\u8F93\u5165\u6570\u5B57
 #mark-board
-mark.board.submit=\u63d0\u4ea4
-mark.board.total.score=\u603b\u5206
-mark.board.score.zero=\u5168\u96f6\u5206
-mark.board.pass=\u8df3 \u8fc7
-mark.board.choose.result=\u9009\u505a\u7ed3\u679c
-mark.board.keyboard=\u952e\u76d8\u7ed9\u5206 >>
-mark.board.mouse=<< \u9f20\u6807\u7ed9\u5206
-mark.board.interval=\u95f4\u9694
+mark.board.submit=\u63D0\u4EA4
+mark.board.total.score=\u603B\u5206
+mark.board.score.zero=\u5168\u96F6\u5206
+mark.board.pass=\u8DF3 \u8FC7
+mark.board.choose.result=\u9009\u505A\u7ED3\u679C
+mark.board.keyboard=\u952E\u76D8\u7ED9\u5206 >>
+mark.board.mouse=<< \u9F20\u6807\u7ED9\u5206
+mark.board.interval=\u95F4\u9694
 mark.board.score=\u5206
-mark.board.back=\u56de\u9000
-mark.board.clear.question=\u6e05\u9664\u672c\u9898
-mark.board.clear=\u6e05\u9664\u5168\u5377
-mark.board.question.not.mark=\u5f53\u524d\u4efb\u52a1\u8fd8\u6709\u672a\u7ed9\u5206\u7684\u9898\uff0c\u8bf7\u7ee7\u7eed\u7ed9\u5206
-mark.board.confirm=,\u786e\u8ba4\u63d0\u4ea4\u5417\uff1f
-mark.board.zero.confirm=\u786e\u8ba4\u8981\u63d0\u4ea4\u5168\u96f6\u5206\u5417\uff1f
-mark.board.null=\u65e0
-mark.board.interval.error=\u4e0d\u7b26\u5408\u5206\u503c\u95f4\u9694\u8981\u6c42
-mark.board.gt=\u4e0d\u80fd\u5927\u4e8e
-mark.board.lt=\u4e0d\u80fd\u5c0f\u4e8e
-mark.board.number.error=\u4e0d\u662f\u5408\u6cd5\u6570\u5b57
+mark.board.back=\u56DE\u9000
+mark.board.clear.question=\u6E05\u9664\u672C\u9898
+mark.board.clear=\u6E05\u9664\u5168\u5377
+mark.board.question.not.mark=\u5F53\u524D\u4EFB\u52A1\u8FD8\u6709\u672A\u7ED9\u5206\u7684\u9898\uFF0C\u8BF7\u7EE7\u7EED\u7ED9\u5206
+mark.board.confirm=,\u786E\u8BA4\u63D0\u4EA4\u5417\uFF1F
+mark.board.zero.confirm=\u786E\u8BA4\u8981\u63D0\u4EA4\u5168\u96F6\u5206\u5417\uFF1F
+mark.board.null=\u65E0
+mark.board.interval.error=\u4E0D\u7B26\u5408\u5206\u503C\u95F4\u9694\u8981\u6C42
+mark.board.gt=\u4E0D\u80FD\u5927\u4E8E
+mark.board.lt=\u4E0D\u80FD\u5C0F\u4E8E
+mark.board.number.error=\u4E0D\u662F\u5408\u6CD5\u6570\u5B57
 #sheet-view
-mark.sheet=\u539f\u56fe
-mark.sheet.check=\u539f\u56fe\u5207\u6362
-mark.sheet.open=\u6253\u5f00
-mark.sheet.close=\u5173\u95ed
+mark.sheet=\u539F\u56FE
+mark.sheet.check=\u539F\u56FE\u5207\u6362
+mark.sheet.open=\u6253\u5F00
+mark.sheet.close=\u5173\u95ED
 #slice-view
 mark.slice=\u5168\u5377
 mark.slice.check=\u5168\u5377\u5207\u6362
-mark.slice.open=\u6253\u5f00
-mark.slice.close=\u5173\u95ed
+mark.slice.open=\u6253\u5F00
+mark.slice.close=\u5173\u95ED
 #answer-view
-mark.answer=\u6807\u7b54
+mark.answer=\u6807\u7B54
 #warning-info
-mark.warning.try.again=\u8bf7\u70b9\u51fb\u91cd\u8bd5
-mark.warning.force.special.tag=\u5f3a\u5236\u7279\u6b8a\u6807\u8bb0\u5df2\u5f00\u542f\uff0c\u81f3\u5c11\u4f7f\u7528\u4e00\u4e2a\u7279\u6b8a\u6807\u8bb0
-mark.warning.network.error=\u7f51\u7edc\u5f02\u5e38\uff0c\u4efb\u52a1\u63d0\u4ea4\u5931\u8d25
-mark.warning.task.error=\u9886\u53d6\u8bc4\u5377\u4efb\u52a1\u51fa\u9519
-mark.warning.task.finish=\u8bc4\u5377\u4efb\u52a1\u5df2\u5b8c\u6210
-mark.warning.task.loading=\u8bc4\u5377\u4efb\u52a1\u6b63\u5728\u52a0\u8f7d\u4e2d
-mark.warning.close=\u5173\u95ed
-mark.warning.success=\u56de\u8bc4\u6210\u529f\uff0c\u603b\u5206\uff1a
-mark.warning.problem=\u56de\u8bc4\u95ee\u9898\u5377\u6210\u529f
+mark.warning.try.again=\u8BF7\u70B9\u51FB\u91CD\u8BD5
+mark.warning.force.special.tag=\u5F3A\u5236\u7279\u6B8A\u6807\u8BB0\u5DF2\u5F00\u542F\uFF0C\u81F3\u5C11\u4F7F\u7528\u4E00\u4E2A\u7279\u6B8A\u6807\u8BB0
+mark.warning.network.error=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u4EFB\u52A1\u63D0\u4EA4\u5931\u8D25
+mark.warning.task.error=\u9886\u53D6\u8BC4\u5377\u4EFB\u52A1\u51FA\u9519
+mark.warning.task.finish=\u8BC4\u5377\u4EFB\u52A1\u5DF2\u5B8C\u6210
+mark.warning.task.loading=\u8BC4\u5377\u4EFB\u52A1\u6B63\u5728\u52A0\u8F7D\u4E2D
+mark.warning.close=\u5173\u95ED
+mark.warning.success=\u56DE\u8BC4\u6210\u529F\uFF0C\u603B\u5206\uFF1A
+mark.warning.problem=\u56DE\u8BC4\u95EE\u9898\u5377\u6210\u529F
 #json-view
-mark.json.loading=\u6b63\u5728\u52a0\u8f7d\u4e2d
-mark.json.student.answer=\u8003\u751f\u7b54\u6848\uff1a
-mark.json.answer=\u6807\u7b54\uff1a
-mark.json.body=\u9898\u5e72\uff1a
-mark.json.question.number=\u9898\u53f7\uff1a
+mark.json.loading=\u6B63\u5728\u52A0\u8F7D\u4E2D
+mark.json.student.answer=\u8003\u751F\u7B54\u6848\uFF1A
+mark.json.answer=\u6807\u7B54\uFF1A
+mark.json.body=\u9898\u5E72\uFF1A
+mark.json.question.number=\u9898\u53F7\uFF1A
 
 #index
-index.user=\u7528\u6237\u7ba1\u7406
-index.exam=\u8003\u8bd5\u7ba1\u7406
-index.student=\u8003\u751f\u7ba1\u7406
-index.paper=\u79d1\u76ee\u7ba1\u7406
-index.scan=\u626b\u63cf\u8fdb\u5ea6
-index.mark=\u8bc4\u5377\u7ba1\u7406
-index.score=\u6210\u7ee9\u67e5\u8be2
-index.inspected=\u6210\u7ee9\u590d\u6838
-index.problem=\u95ee\u9898\u8bd5\u5377
-index.report.total=\u603b\u91cf\u5206\u6790
-index.report.subject=\u79d1\u76ee\u5206\u6790
-index.check=\u6570\u636e\u68c0\u67e5
-index.log=\u64cd\u4f5c\u65e5\u5fd7
+index.user=\u7528\u6237\u7BA1\u7406
+index.exam=\u8003\u8BD5\u7BA1\u7406
+index.student=\u8003\u751F\u7BA1\u7406
+index.paper=\u79D1\u76EE\u7BA1\u7406
+index.scan=\u626B\u63CF\u8FDB\u5EA6
+index.mark=\u8BC4\u5377\u7BA1\u7406
+index.score=\u6210\u7EE9\u67E5\u8BE2
+index.inspected=\u6210\u7EE9\u590D\u6838
+index.problem=\u95EE\u9898\u8BD5\u5377
+index.report.total=\u603B\u91CF\u5206\u6790
+index.report.subject=\u79D1\u76EE\u5206\u6790
+index.check=\u6570\u636E\u68C0\u67E5
+index.log=\u64CD\u4F5C\u65E5\u5FD7
 
 #report.subject
-report.subject=\u603b\u91cf\u5206\u6790
-report.subject.name=\u79d1\u76ee
-report.subject.select=\u8bf7\u9009\u62e9
-report.subject.search=\u67e5\u8be2
-report.subject.export=\u5bfc\u51fa
-report.subject.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.subject.name=\u79d1\u76ee
-report.subject.totalCount=\u62a5\u8003\u4eba\u6570
-report.subject.absentCount=\u7f3a\u8003
-report.subject.breachCount=\u8fdd\u7eaa
-report.subject.realityCount=\u6709\u6548\u4eba\u6570
-report.subject.avgScore=\u5e73\u5747\u5206
-report.subject.maxScore=\u6700\u9ad8\u5206
-report.subject.minScore=\u6700\u4f4e\u5206
-report.subject.passCount=\u53ca\u683c\u4eba\u6570
-report.subject.passRate=\u53ca\u683c\u7387
+report.subject=\u603B\u91CF\u5206\u6790
+report.subject.name=\u79D1\u76EE
+report.subject.select=\u8BF7\u9009\u62E9
+report.subject.search=\u67E5\u8BE2
+report.subject.export=\u5BFC\u51FA
+report.subject.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.subject.name=\u79D1\u76EE
+report.subject.totalCount=\u62A5\u8003\u4EBA\u6570
+report.subject.absentCount=\u7F3A\u8003
+report.subject.breachCount=\u8FDD\u7EAA
+report.subject.realityCount=\u6709\u6548\u4EBA\u6570
+report.subject.avgScore=\u5E73\u5747\u5206
+report.subject.maxScore=\u6700\u9AD8\u5206
+report.subject.minScore=\u6700\u4F4E\u5206
+report.subject.passCount=\u53CA\u683C\u4EBA\u6570
+report.subject.passRate=\u53CA\u683C\u7387
 #report.range
-report.range=\u5206\u6bb5\u7edf\u8ba1
-report.range.subject=\u79d1\u76ee
-report.range.select=\u8bf7\u9009\u62e9
-report.range.search=\u67e5\u8be2
-report.range.export=\u5bfc\u51fa
-report.range.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.range.level=\u5c42\u6b21
-report.range.proportion=\u5360\u6bd4
-report.range.total=\u603b\u6570
-report.range.operation=\u64cd\u4f5c
-report.range.chart=\u5206\u6bb5\u56fe
+report.range=\u5206\u6BB5\u7EDF\u8BA1
+report.range.subject=\u79D1\u76EE
+report.range.select=\u8BF7\u9009\u62E9
+report.range.search=\u67E5\u8BE2
+report.range.export=\u5BFC\u51FA
+report.range.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.range.level=\u5C42\u6B21
+report.range.proportion=\u5360\u6BD4
+report.range.total=\u603B\u6570
+report.range.operation=\u64CD\u4F5C
+report.range.chart=\u5206\u6BB5\u56FE
 #report.college
-report.college=\u5b66\u9662\u5206\u6790
-report.college.subject=\u79d1\u76ee
-report.college.select=\u8bf7\u9009\u62e9
-report.college.search=\u67e5\u8be2
-report.college.export=\u5bfc\u51fa
-report.college.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.college.name=\u5b66\u751f\u9662\u7cfb
-report.college.avgScore=\u5e73\u5747\u5206
-report.college.maxScore=\u6700\u9ad8\u5206
-report.college.minScore=\u6700\u4f4e\u5206
-report.college.passCount=\u53ca\u683c\u4eba\u6570
-report.college.passRate=\u53ca\u683c\u7387
-report.college.excellentRate=\u4f18\u79c0\u7387
+report.college=\u5B66\u9662\u5206\u6790
+report.college.subject=\u79D1\u76EE
+report.college.select=\u8BF7\u9009\u62E9
+report.college.search=\u67E5\u8BE2
+report.college.export=\u5BFC\u51FA
+report.college.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.college.name=\u5B66\u751F\u9662\u7CFB
+report.college.avgScore=\u5E73\u5747\u5206
+report.college.maxScore=\u6700\u9AD8\u5206
+report.college.minScore=\u6700\u4F4E\u5206
+report.college.passCount=\u53CA\u683C\u4EBA\u6570
+report.college.passRate=\u53CA\u683C\u7387
+report.college.excellentRate=\u4F18\u79C0\u7387
 #report.teacher
-report.teacher=\u4efb\u8bfe\u8001\u5e08\u5206\u6790
-report.teacher.subject=\u79d1\u76ee
-report.teacher.select=\u8bf7\u9009\u62e9
-report.teacher.search=\u67e5\u8be2
-report.teacher.export=\u5bfc\u51fa
-report.teacher.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.teacher.name=\u4efb\u8bfe\u8001\u5e08
-report.teacher.realityCount=\u6709\u6548\u4eba\u6570
-report.teacher.passCount=\u53ca\u683c
-report.teacher.excellentCount=\u4f18\u79c0
-report.teacher.maxScore=\u6700\u9ad8\u5206
-report.teacher.minScore=\u6700\u4f4e\u5206
-report.teacher.passRate=\u53ca\u683c\u7387
-report.teacher.excellentRate=\u4f18\u79c0\u7387
-report.teacher.avgScore=\u5e73\u5747\u5206
-report.teacher.relativeAvgScore=\u5e73\u5747\u76f8\u5bf9\u5206
-report.teacher.return=\u8fd4\u56de
+report.teacher=\u4EFB\u8BFE\u8001\u5E08\u5206\u6790
+report.teacher.subject=\u79D1\u76EE
+report.teacher.select=\u8BF7\u9009\u62E9
+report.teacher.search=\u67E5\u8BE2
+report.teacher.export=\u5BFC\u51FA
+report.teacher.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.teacher.name=\u4EFB\u8BFE\u8001\u5E08
+report.teacher.realityCount=\u6709\u6548\u4EBA\u6570
+report.teacher.passCount=\u53CA\u683C
+report.teacher.excellentCount=\u4F18\u79C0
+report.teacher.maxScore=\u6700\u9AD8\u5206
+report.teacher.minScore=\u6700\u4F4E\u5206
+report.teacher.passRate=\u53CA\u683C\u7387
+report.teacher.excellentRate=\u4F18\u79C0\u7387
+report.teacher.avgScore=\u5E73\u5747\u5206
+report.teacher.relativeAvgScore=\u5E73\u5747\u76F8\u5BF9\u5206
+report.teacher.return=\u8FD4\u56DE
 #report.class
-report.class=\u73ed\u7ea7\u5206\u6790
-report.class.subject=\u79d1\u76ee
-report.class.select=\u8bf7\u9009\u62e9
-report.class.search=\u67e5\u8be2
-report.class.export=\u5bfc\u51fa
-report.class.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.class.name=\u73ed\u7ea7
-report.class.avgScore=\u5e73\u5747\u5206
-report.class.maxScore=\u6700\u9ad8\u5206
-report.class.minScore=\u6700\u4f4e\u5206
-report.class.passCount=\u53ca\u683c\u6570
-report.class.passRate=\u53ca\u683c\u7387
-report.class.excellentCount=\u4f18\u79c0\u6570
-report.class.excellentRate=\u4f18\u79c0\u7387
+report.class=\u73ED\u7EA7\u5206\u6790
+report.class.subject=\u79D1\u76EE
+report.class.select=\u8BF7\u9009\u62E9
+report.class.search=\u67E5\u8BE2
+report.class.export=\u5BFC\u51FA
+report.class.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.class.name=\u73ED\u7EA7
+report.class.avgScore=\u5E73\u5747\u5206
+report.class.maxScore=\u6700\u9AD8\u5206
+report.class.minScore=\u6700\u4F4E\u5206
+report.class.passCount=\u53CA\u683C\u6570
+report.class.passRate=\u53CA\u683C\u7387
+report.class.excellentCount=\u4F18\u79C0\u6570
+report.class.excellentRate=\u4F18\u79C0\u7387
 #report.question
-report.question.objective=\u5ba2\u89c2\u9898\u5206\u6790
-report.question.subjective=\u4e3b\u89c2\u9898\u5206\u6790
-report.question.subject=\u79d1\u76ee
-report.question.select=\u8bf7\u9009\u62e9
-report.question.search=\u67e5\u8be2
-report.question.export=\u5bfc\u51fa
-report.question.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.question.paperType=\u8bd5\u5377\u7c7b\u578b
-report.question.name=\u9898\u76ee\u540d\u79f0
-report.question.mainNumber=\u5927\u9898\u53f7
-report.question.subNumber=\u5c0f\u9898\u53f7
+report.question.objective=\u5BA2\u89C2\u9898\u5206\u6790
+report.question.subjective=\u4E3B\u89C2\u9898\u5206\u6790
+report.question.subject=\u79D1\u76EE
+report.question.select=\u8BF7\u9009\u62E9
+report.question.search=\u67E5\u8BE2
+report.question.export=\u5BFC\u51FA
+report.question.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.question.paperType=\u8BD5\u5377\u7C7B\u578B
+report.question.name=\u9898\u76EE\u540D\u79F0
+report.question.mainNumber=\u5927\u9898\u53F7
+report.question.subNumber=\u5C0F\u9898\u53F7
 report.question.score=\u5355\u9898\u5206\u6570
-report.question.avgScore=\u5355\u9898\u5e73\u5747\u5206
-report.question.stdev=\u5355\u9898\u6807\u51c6\u5dee
-report.question.scoreRate=\u5f97\u5206\u7387
-report.question.fullScoreRate=\u6ee1\u5206\u7387
+report.question.avgScore=\u5355\u9898\u5E73\u5747\u5206
+report.question.stdev=\u5355\u9898\u6807\u51C6\u5DEE
+report.question.scoreRate=\u5F97\u5206\u7387
+report.question.fullScoreRate=\u6EE1\u5206\u7387
 #report.group
 report.group=\u5927\u9898\u5206\u6790
-report.group.subject=\u79d1\u76ee
-report.group.select=\u8bf7\u9009\u62e9
-report.group.search=\u67e5\u8be2
-report.group.export=\u5bfc\u51fa
-report.group.chart=\u67e5\u770b\u7edf\u8ba1\u56fe
-report.group.name=\u9898\u76ee\u540d\u79f0
-report.group.number=\u9898\u53f7
-report.group.totalScore=\u6ee1\u5206
-report.group.maxScore=\u6700\u9ad8\u5206
-report.group.minScore=\u6700\u4f4e\u5206
-report.group.avgScore=\u5e73\u5747\u5206
-report.group.stdev=\u6807\u51c6\u5dee
-report.group.coefficient=\u5dee\u5f02\u7cfb\u6570
-report.group.scoreRate=\u5f97\u5206\u7387
-report.group.zeroCount=\u96f6\u5206\u4eba\u6570
-report.group.fullCount=\u6ee1\u5206\u4eba\u6570
+report.group.subject=\u79D1\u76EE
+report.group.select=\u8BF7\u9009\u62E9
+report.group.search=\u67E5\u8BE2
+report.group.export=\u5BFC\u51FA
+report.group.chart=\u67E5\u770B\u7EDF\u8BA1\u56FE
+report.group.name=\u9898\u76EE\u540D\u79F0
+report.group.number=\u9898\u53F7
+report.group.totalScore=\u6EE1\u5206
+report.group.maxScore=\u6700\u9AD8\u5206
+report.group.minScore=\u6700\u4F4E\u5206
+report.group.avgScore=\u5E73\u5747\u5206
+report.group.stdev=\u6807\u51C6\u5DEE
+report.group.coefficient=\u5DEE\u5F02\u7CFB\u6570
+report.group.scoreRate=\u5F97\u5206\u7387
+report.group.zeroCount=\u96F6\u5206\u4EBA\u6570
+report.group.fullCount=\u6EE1\u5206\u4EBA\u6570
 #report.massage
-report.massage.school.null=\u627e\u4e0d\u5230\u5b66\u6821
+report.massage.school.null=\u627E\u4E0D\u5230\u5B66\u6821
 #head
-head.title=\u4e91\u9605\u5377
-head.logout=\u9000\u51fa
+head.title=\u4E91\u9605\u5377
+head.logout=\u9000\u51FA
 
 #student search
-student.search.title=\u5b66\u751f\u67e5\u8be2\u6210\u7ee9
-student.search.code=\u8bf7\u8f93\u5165\u5b66\u53f7
-student.search.name=\u8bf7\u8f93\u5165\u59d3\u540d
-student.search.submit=\u67e5\u8be2
-student.search.error=\u5b66\u6821\u4e0d\u5b58\u5728
+student.search.title=\u5B66\u751F\u67E5\u8BE2\u6210\u7EE9
+student.search.code=\u8BF7\u8F93\u5165\u5B66\u53F7
+student.search.name=\u8BF7\u8F93\u5165\u59D3\u540D
+student.search.submit=\u67E5\u8BE2
+student.search.error=\u5B66\u6821\u4E0D\u5B58\u5728
 #student search list
-student.search.list.examName=\u8003\u8bd5\u540d\u79f0
-student.search.list.subjectName=\u8bfe\u7a0b\u540d\u79f0
-student.search.list.objectiveScore=\u5ba2\u89c2\u5206
-student.search.list.subjectiveScore=\u4e3b\u89c2\u5206
-student.search.list.totalScore=\u603b\u5206
-student.search.list.remark=\u5907\u6ce8
+student.search.list.examName=\u8003\u8BD5\u540D\u79F0
+student.search.list.subjectName=\u8BFE\u7A0B\u540D\u79F0
+student.search.list.objectiveScore=\u5BA2\u89C2\u5206
+student.search.list.subjectiveScore=\u4E3B\u89C2\u5206
+student.search.list.totalScore=\u603B\u5206
+student.search.list.remark=\u5907\u6CE8

+ 27 - 27
stmms-web/src/main/webapp/static/mark-json/js/mark-control.js

@@ -582,8 +582,8 @@ MarkControl.prototype.submitTask = function (submitUrl) {
             trackList: [],
             tagList: task.tagList,
             spent: new Date().getTime() - task.spent,
-            problem : task.problem,
-            reason : task.reason
+            problem: task.problem,
+            reason: task.reason
         }
 
         this.trigger('task.submit.before');
@@ -601,7 +601,7 @@ MarkControl.prototype.submitTask = function (submitUrl) {
                     markControl.trigger('task.submit.success');
                 }
             }, function (message) {
-                markControl.trigger('task.submit.error', getMessage('mark.control.tsak.error'));
+                markControl.trigger('task.submit.error', getMessage('mark.control.task.error'));
             });
         } else if (submitUrl != undefined && submitUrl.length > 0) {
             //未定义任务引擎,依赖定义/传入的提交地址
@@ -619,7 +619,7 @@ MarkControl.prototype.submitTask = function (submitUrl) {
                     }
                 },
                 error: function (message) {
-                    markControl.trigger('task.submit.error', getMessage('mark.control.tsak.error'));
+                    markControl.trigger('task.submit.error', getMessage('mark.control.task.error'));
                 }
             });
         } else {
@@ -716,27 +716,27 @@ function getDom(content, markControl) {
         content = content.replace(/{logoutUrl}/g, markControl.option.logoutUrl);
     }
     var result = $(content);
-    result.each(function() {
-    	if($(this).data("i18n-value")!=undefined){
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	}
-		if($(this).data("i18n-text")!=undefined){
-			$(this).text($.i18n.prop($(this).data("i18n-text")));
-		    	}
-		if($(this).data("i18n-placeholder")!=undefined){
-			$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-		}
-    	
-    	$(this).find("[data-i18n-value]").each(function() {
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	});
-    	$(this).find("[data-i18n-text]").each(function() {
-    		$(this).text($.i18n.prop($(this).data("i18n-text")));
-    	});
-    	$(this).find("[data-i18n-placeholder]").each(function() {
-    		$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-    	});
-	});
+    result.each(function () {
+        if ($(this).data("i18n-value") != undefined) {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        }
+        if ($(this).data("i18n-text") != undefined) {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        }
+        if ($(this).data("i18n-placeholder") != undefined) {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        }
+
+        $(this).find("[data-i18n-value]").each(function () {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        });
+        $(this).find("[data-i18n-text]").each(function () {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        });
+        $(this).find("[data-i18n-placeholder]").each(function () {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        });
+    });
     return result;
 }
 
@@ -744,6 +744,6 @@ function isArray(obj) {
     return obj != undefined && Object.prototype.toString.call(obj) === '[object Array]';
 }
 
-function getMessage(message) { 
-	return $.i18n.prop(message);
+function getMessage(message) {
+    return $.i18n.prop(message);
 }

+ 107 - 105
stmms-web/src/main/webapp/static/mark-new/js/mark-control.js

@@ -27,7 +27,7 @@ function MarkControl(option) {
     //}
 }
 
-MarkControl.prototype.initContainer = function() {
+MarkControl.prototype.initContainer = function () {
 
     var height = this.option.height;
     if (height == undefined) {
@@ -58,13 +58,13 @@ MarkControl.prototype.initContainer = function() {
     this.navNumber = 0;
 }
 
-MarkControl.prototype.initHeaderAndAssistant = function() {
+MarkControl.prototype.initHeaderAndAssistant = function () {
     var self = this;
     this.container.header.find('#mark-user-name').html(this.option.userName);
     if (this.option.logoutTitle != undefined) {
         this.container.header.find('#logout-title').html(this.option.logoutTitle);
     }
-    this.container.header.find('#logout-link').click(function() {
+    this.container.header.find('#logout-link').click(function () {
         self.trigger('logout.link.click');
         return true;
     })
@@ -73,7 +73,7 @@ MarkControl.prototype.initHeaderAndAssistant = function() {
     this.container.assistant.positionSet = false;
     this.container.assistantButton = this.container.header.find('#assistant-button');
 
-    this.container.assistantButton.click(this, function(event) {
+    this.container.assistantButton.click(this, function (event) {
         if (self.container.assistant.positionSet == false) {
             self.container.assistant.offset({
                 top: self.container.assistantButton.position().top + self.container.assistantButton.height() + 5,
@@ -86,7 +86,7 @@ MarkControl.prototype.initHeaderAndAssistant = function() {
 
 }
 
-MarkControl.prototype.initMarkFunction = function() {
+MarkControl.prototype.initMarkFunction = function () {
     var functionList = this.container.assistant.functionList;
     if (functionList == undefined) {
         functionList = getDom(this.mark_function_dom, this).appendTo(this.container.assistant).find('#function-list');
@@ -94,7 +94,7 @@ MarkControl.prototype.initMarkFunction = function() {
     }
 }
 
-MarkControl.prototype.initSetting = function(option) {
+MarkControl.prototype.initSetting = function (option) {
     this.userId = option.userId;
     this.settingSyncUrl = option.settingSyncUrl;
     this.settingSyncing = false;
@@ -117,7 +117,7 @@ MarkControl.prototype.initSetting = function(option) {
     this.trigger('mark.setting.init', this.setting);
 }
 
-MarkControl.prototype.localSettingSave = function() {
+MarkControl.prototype.localSettingSave = function () {
     if (this.localStore != undefined) {
         this.localStore.setItem('mark.setting', JSON.stringify({
             userId: this.userId,
@@ -126,7 +126,7 @@ MarkControl.prototype.localSettingSave = function() {
     }
 }
 
-MarkControl.prototype.updateSetting = function(item) {
+MarkControl.prototype.updateSetting = function (item) {
     if (item == undefined) {
         return;
     }
@@ -137,7 +137,7 @@ MarkControl.prototype.updateSetting = function(item) {
     if (this.settingSyncUrl != undefined && this.settingSyncing == false) {
         this.settingSyncing = true;
         var self = this;
-        setTimeout(function() {
+        setTimeout(function () {
             //同步个性化设置
             $.post(self.settingSyncUrl, {
                 setting: JSON.stringify(self.setting)
@@ -148,8 +148,8 @@ MarkControl.prototype.updateSetting = function(item) {
 }
 
 //增加某个事件的监听方法
-MarkControl.prototype.on = function(eventName, caller, callback, async) {
-    if (eventName && callback && eventName.length > 0 && typeof(callback) == 'function') {
+MarkControl.prototype.on = function (eventName, caller, callback, async) {
+    if (eventName && callback && eventName.length > 0 && typeof (callback) == 'function') {
         if (async) {
             this.container.bind(eventName, callback);
         } else {
@@ -165,7 +165,7 @@ MarkControl.prototype.on = function(eventName, caller, callback, async) {
 }
 
 //触发某个事件,并传递事件相关内容
-MarkControl.prototype.trigger = function(eventName, eventObject) {
+MarkControl.prototype.trigger = function (eventName, eventObject) {
     var result = true;
     if (eventName && eventName.length > 0) {
         var array = this.triggers[eventName];
@@ -183,7 +183,7 @@ MarkControl.prototype.trigger = function(eventName, eventObject) {
 }
 
 //初始化事件监听
-MarkControl.prototype.initTriggers = function(option) {
+MarkControl.prototype.initTriggers = function (option) {
     if (this.triggers == undefined) {
         this.triggers = {};
     }
@@ -194,7 +194,7 @@ MarkControl.prototype.initTriggers = function(option) {
     }
 
     var self = this;
-    this.on('view.sidebar.open', this, function(event, context, eventObject) {
+    this.on('view.sidebar.open', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span12')) {
             this.container.center.removeClass('span12');
@@ -205,7 +205,7 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('view.sidebar.close', this, function(event, context, eventObject) {
+    this.on('view.sidebar.close', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span7')) {
             this.container.center.removeClass('span7');
@@ -216,7 +216,7 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('mark.sidebar.open', this, function(event, context, eventObject) {
+    this.on('mark.sidebar.open', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span12')) {
             this.container.center.removeClass('span12');
@@ -227,7 +227,7 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('mark.sidebar.close', this, function(event, context, eventObject) {
+    this.on('mark.sidebar.close', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span10')) {
             this.container.center.removeClass('span10');
@@ -238,68 +238,70 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('task.load.finish', this, function(event, context, eventObject) {
+    this.on('task.load.finish', this, function (event, context, eventObject) {
         if (context.task != undefined) {
             context.task.spent = new Date().getTime();
         }
     });
-    this.on('mark.focus.change', this, function(event, context, eventObject) {});
-    this.on('task.get.finish', this, function(event, context, eventObject) {
+    this.on('mark.focus.change', this, function (event, context, eventObject) {
+    });
+    this.on('task.get.finish', this, function (event, context, eventObject) {
         context.prefetchCallback = undefined;
     });
-    this.on('task.get.none', this, function(event, context, eventObject) {
+    this.on('task.get.none', this, function (event, context, eventObject) {
         self.getStatus();
         if (context.task == undefined && self.option.clearUrl != undefined) {
-            $.post(self.option.clearUrl, {}, function() {});
+            $.post(self.option.clearUrl, {}, function () {
+            });
         }
-        context.prefetchCallback = function() {
+        context.prefetchCallback = function () {
             context.prefetchCallback = undefined;
             if (self.context.task == undefined && self.context.prefetchTask.length > 0) {
                 self.getTask();
             }
         }
     });
-    this.on('task.prefetch.success', this, function(event, context, eventObject) {
+    this.on('task.prefetch.success', this, function (event, context, eventObject) {
         if (context.prefetchCallback != undefined) {
             context.prefetchCallback();
         }
-        setTimeout(function() {
+        setTimeout(function () {
             self.prefetch();
         }, 500);
     });
-    this.on('task.prefetch.error', this, function(event, context, eventObject) {
-        setTimeout(function() {
+    this.on('task.prefetch.error', this, function (event, context, eventObject) {
+        setTimeout(function () {
             self.prefetch();
         }, 500);
     });
-    this.on('task.prefetch.none', this, function(event, context, eventObject) {
+    this.on('task.prefetch.none', this, function (event, context, eventObject) {
         if (context.prefetchCallback != undefined) {
             context.prefetchCallback();
         }
         if (context.isFinish != true) {
-            setTimeout(function() {
+            setTimeout(function () {
                 self.prefetch();
             }, 1000);
         }
     });
-    this.on('task.prefetch.finish', this, function(event, context, eventObject) {
+    this.on('task.prefetch.finish', this, function (event, context, eventObject) {
         self.getTask();
     });
-    this.on('task.submit.before', this, function(event, context, eventObject) {
+    this.on('task.submit.before', this, function (event, context, eventObject) {
         context.submitting = true;
     });
-    this.on('history.submit.success', this, function(event, context, eventObject) {
+    this.on('history.submit.success', this, function (event, context, eventObject) {
         context.submitting = false;
     });
-    this.on('task.submit.success', this, function(event, context, eventObject) {
+    this.on('task.submit.success', this, function (event, context, eventObject) {
         context.submitting = false;
         context.task = undefined;
         self.getTask();
     });
-    this.on('task.submit.error', this, function(event, context, eventObject) {
+    this.on('task.submit.error', this, function (event, context, eventObject) {
         context.submitting = false;
     });
-    this.on('task.pass.success', this, function(event, context, eventObject) {
+    this.on('task.pass.success', this, function (event, context, eventObject) {
         if (context.task != undefined && self.option.clearUrl != undefined) {
             $.post(self.option.clearUrl, {
                 libraryId: context.task.libraryId
@@ -308,26 +310,26 @@ MarkControl.prototype.initTriggers = function(option) {
         context.task = undefined;
         self.getTask();
     });
-    this.on('mark.setting.change', this, function(event, context, eventObject) {
+    this.on('mark.setting.change', this, function (event, context, eventObject) {
         self.updateSetting(eventObject);
     });
-    $(document).keypress(this, function(event) {
+    $(document).keypress(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.press', event);
         }
     });
-    $(document).keydown(this, function(event) {
+    $(document).keydown(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.down', event);
         }
     });
-    $(document).keyup(this, function(event) {
+    $(document).keyup(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.up', event);
         }
     });
 
-    window.onbeforeunload = function(e) {
+    window.onbeforeunload = function (e) {
         if (self.option.clearUrl != undefined) {
             $.post(self.option.clearUrl);
         }
@@ -335,7 +337,7 @@ MarkControl.prototype.initTriggers = function(option) {
 }
 
 //初始化功能模块
-MarkControl.prototype.initModules = function(option) {
+MarkControl.prototype.initModules = function (option) {
     if (this.modules == undefined) {
         this.modules = {};
     }
@@ -361,18 +363,18 @@ MarkControl.prototype.initModules = function(option) {
 }
 
 //指定初始化某个名称的模块
-MarkControl.prototype.initModule = function(names, options, success) {
+MarkControl.prototype.initModule = function (names, options, success) {
     for (var i in names) {
         var name = names[i];
         var option = options[name];
         var moduleInit = name.replace(/-/g, '_');
-        if (option == undefined || typeof(option) != 'object') {
+        if (option == undefined || typeof (option) != 'object') {
             option = {};
         }
         option.markControl = this;
         eval('this.modules[name]=' + moduleInit + '(option, function(){})');
     }
-    if (success != undefined && typeof(success) == 'function') {
+    if (success != undefined && typeof (success) == 'function') {
         success();
     }
 }
@@ -385,12 +387,12 @@ function initModuleAsync(markControl, names, index, option) {
         var moduleInit = name.replace(/-/g, '_');
         var modules = markControl.modules;
         if (modules[name] == undefined) {
-            if (typeof(moduleOption) != 'object') {
+            if (typeof (moduleOption) != 'object') {
                 moduleOption = {};
             }
             moduleOption.markControl = markControl;
-            $.getScript(moduleUrl, function() {
-                var success = function() {
+            $.getScript(moduleUrl, function () {
+                var success = function () {
                     initModule(markControl, names, index + 1, option);
                 }
                 eval('modules[name]=' + moduleInit + '(moduleOption, success)');
@@ -399,27 +401,27 @@ function initModuleAsync(markControl, names, index, option) {
             initModule(markControl, names, index + 1, option);
         }
     } else {
-        if (markControl.option.success != undefined && typeof(markControl.option.success) == 'function') {
+        if (markControl.option.success != undefined && typeof (markControl.option.success) == 'function') {
             markControl.option.success();
         }
     }
 }
 
-MarkControl.prototype.start = function(taskOption) {
+MarkControl.prototype.start = function (taskOption) {
     taskOption.markControl = this;
     var markControl = this;
-    taskOption.success = function() {
-        markControl.context.prefetchCallback = function() {
+    taskOption.success = function () {
+        markControl.context.prefetchCallback = function () {
             markControl.context.prefetchCallback = undefined;
             markControl.getTask();
         }
-        markControl.context.statusCallback = function() {
+        markControl.context.statusCallback = function () {
             markControl.context.statusCallback = undefined;
             markControl.prefetch();
         }
         markControl.getStatus();
     };
-    taskOption.error = function(message) {
+    taskOption.error = function (message) {
         alert(getMessage(mark.control.init.error));
     };
     this.taskControl = new TaskControl(taskOption);
@@ -427,7 +429,7 @@ MarkControl.prototype.start = function(taskOption) {
 }
 
 //task预加载
-MarkControl.prototype.prefetch = function() {
+MarkControl.prototype.prefetch = function () {
     var taskControl = this.taskControl;
     var markControl = this;
     var context = this.context;
@@ -442,9 +444,9 @@ MarkControl.prototype.prefetch = function() {
             context.prefetching = true;
             markControl.trigger('task.prefetch.before');
 
-            taskControl.fetch(function(task) {
+            taskControl.fetch(function (task) {
                 if (imageBuilder != undefined) {
-                    imageBuilder.build(task, function(error) {
+                    imageBuilder.build(task, function (error) {
                         if (error) {
                             context.prefetching = false;
                             markControl.trigger('task.prefetch.error');
@@ -461,11 +463,11 @@ MarkControl.prototype.prefetch = function() {
                     context.prefetching = false;
                     markControl.trigger('task.prefetch.success');
                 }
-            }, function(task) {
-                context.prefetchStatus = task.message ==null ?null:getMessage(task.message);
+            }, function (task) {
+                context.prefetchStatus = task.message == null ? null : getMessage(task.message);
                 context.prefetching = false;
                 markControl.trigger('task.prefetch.none');
-            }, function() {
+            }, function () {
                 context.prefetching = false;
                 markControl.trigger('task.prefetch.none');
             });
@@ -475,12 +477,12 @@ MarkControl.prototype.prefetch = function() {
     }
 }
 
-MarkControl.prototype.getStatus = function() {
+MarkControl.prototype.getStatus = function () {
     if (this.taskControl == undefined) {
         return;
     }
     var self = this;
-    this.taskControl.status(function(status) {
+    this.taskControl.status(function (status) {
         self.context.status = status;
         if (status != undefined) {
             self.context.isFinish = status.blockTotalCount > 0 && status.blockTotalCount == (status.blockMarkedCount + status.blockExceptionCount);
@@ -492,7 +494,7 @@ MarkControl.prototype.getStatus = function() {
     })
 }
 
-MarkControl.prototype.getTask = function() {
+MarkControl.prototype.getTask = function () {
     if (this.taskControl == undefined) {
         return;
     }
@@ -523,20 +525,20 @@ MarkControl.prototype.getTask = function() {
     }
 }
 
-MarkControl.prototype.getHistory = function(data) {
+MarkControl.prototype.getHistory = function (data) {
     if (this.taskControl == undefined) {
         return;
     }
-    this.taskControl.history(data, function(result) {
+    this.taskControl.history(data, function (result) {
         data.result = result;
         this.option.markControl.trigger('history.get.success', data);
-    }, function(message) {
+    }, function (message) {
         data.message = message;
         this.option.markControl.trigger('history.get.error', data);
     });
 }
 
-MarkControl.prototype.setTask = function(task) {
+MarkControl.prototype.setTask = function (task) {
     var imageBuilder = this.modules['image-builder'];
     var self = this;
 
@@ -545,7 +547,7 @@ MarkControl.prototype.setTask = function(task) {
     }
     this.trigger('task.get.before');
     if (imageBuilder != undefined && task != undefined) {
-        imageBuilder.build(task, function(error) {
+        imageBuilder.build(task, function (error) {
             self.context.task = task;
             self.trigger('task.get.success');
         });
@@ -557,14 +559,14 @@ MarkControl.prototype.setTask = function(task) {
     }
 }
 
-MarkControl.prototype.submitTask = function(submitUrl) {
+MarkControl.prototype.submitTask = function (submitUrl) {
     var task = this.context.task;
     var markControl = this;
     var submitUrl = submitUrl != undefined && submitUrl.length > 0 ? submitUrl : this.option.submitUrl;
 
     if (task != undefined && this.context.submitting != true) {
         //开启强制标记
-        if (this.option.forceSpecialTag === true && task.problem!=true) {
+        if (this.option.forceSpecialTag === true && task.problem != true) {
             if (task.tagList == undefined || task.tagList == null || task.tagList.length <= 0) {
                 markControl.trigger('task.submit.forceSpecialTag');
                 return;
@@ -580,15 +582,15 @@ MarkControl.prototype.submitTask = function(submitUrl) {
             trackList: [],
             tagList: task.tagList,
             spent: new Date().getTime() - task.spent,
-            problem : task.problem,
-            reason : task.reason
+            problem: task.problem,
+            reason: task.reason
         }
 
         this.trigger('task.submit.before');
 
         if (this.taskControl != undefined) {
             //已定义任务引擎
-            this.taskControl.submit(submitObj, function(status) {
+            this.taskControl.submit(submitObj, function (status) {
                 if (status != undefined && status.valid == true) {
                     markControl.context.status = status;
                     markControl.trigger('mark.status.change', status);
@@ -598,8 +600,8 @@ MarkControl.prototype.submitTask = function(submitUrl) {
                 } else {
                     markControl.trigger('task.submit.success');
                 }
-            }, function(message) {
-                markControl.trigger('task.submit.error', getMessage('mark.control.tsak.error'));
+            }, function (message) {
+                markControl.trigger('task.submit.error', getMessage('mark.control.task.error'));
             });
         } else if (submitUrl != undefined && submitUrl.length > 0) {
             //未定义任务引擎,依赖定义/传入的提交地址
@@ -609,15 +611,15 @@ MarkControl.prototype.submitTask = function(submitUrl) {
                 data: JSON.stringify(submitObj),
                 dataType: "json",
                 contentType: 'application/json;charset=utf-8',
-                success: function(result) {
+                success: function (result) {
                     if (result.success == true) {
                         markControl.trigger('task.submit.success');
                     } else {
                         markControl.trigger('task.submit.error', getMessage(result.message));
                     }
                 },
-                error: function(message) {
-                    markControl.trigger('task.submit.error', getMessage('mark.control.tsak.error'));
+                error: function (message) {
+                    markControl.trigger('task.submit.error', getMessage('mark.control.task.error'));
                 }
             });
         } else {
@@ -625,13 +627,13 @@ MarkControl.prototype.submitTask = function(submitUrl) {
         }
     }
 }
-MarkControl.prototype.addNavGroup = function(title, content) {
+MarkControl.prototype.addNavGroup = function (title, content) {
     var self = this;
     self.navNumber++;
     var nav = $('<a href="#"><span>' + title + '</span></a>').appendTo(self.container.centerNavbar);
     nav.attr('data-number', self.navNumber);
     content.attr('data-number', self.navNumber);
-    nav.click(function() {
+    nav.click(function () {
         self.container.centerNavbar.find('a').removeClass('selected');
         $(this).addClass('selected');
 
@@ -679,15 +681,15 @@ MarkControl.prototype.mark_function_dom = '<h3 class="popover-title" data-i18n-t
 </p></div>';
 
 //其他通用方法
-String.prototype.startWith = function(prefix) {
+String.prototype.startWith = function (prefix) {
     return this.indexOf(prefix) === 0;
 }
-String.prototype.endWith = function(suffix) {
+String.prototype.endWith = function (suffix) {
     return this.match(suffix + "$") == suffix;
 };
 
 //日期格式化
-Date.prototype.format = function(fmt) { //author: meizz 
+Date.prototype.format = function (fmt) { //author: meizz
     var o = {
         "M+": this.getMonth() + 1, //月份 
         "d+": this.getDate(), //日 
@@ -720,27 +722,27 @@ function getDom(content, markControl) {
         content = content.replace(/{logoutUrl}/g, markControl.option.logoutUrl);
     }
     var result = $(content);
-    result.each(function() {
-    	if($(this).data("i18n-value")!=undefined){
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	}
-		if($(this).data("i18n-text")!=undefined){
-			$(this).text($.i18n.prop($(this).data("i18n-text")));
-		    	}
-		if($(this).data("i18n-placeholder")!=undefined){
-			$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-		}
-    	
-    	$(this).find("[data-i18n-value]").each(function() {
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	});
-    	$(this).find("[data-i18n-text]").each(function() {
-    		$(this).text($.i18n.prop($(this).data("i18n-text")));
-    	});
-    	$(this).find("[data-i18n-placeholder]").each(function() {
-    		$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-    	});
-	});
+    result.each(function () {
+        if ($(this).data("i18n-value") != undefined) {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        }
+        if ($(this).data("i18n-text") != undefined) {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        }
+        if ($(this).data("i18n-placeholder") != undefined) {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        }
+
+        $(this).find("[data-i18n-value]").each(function () {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        });
+        $(this).find("[data-i18n-text]").each(function () {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        });
+        $(this).find("[data-i18n-placeholder]").each(function () {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        });
+    });
     return result;
 }
 
@@ -748,6 +750,6 @@ function isArray(obj) {
     return obj != undefined && Object.prototype.toString.call(obj) === '[object Array]';
 }
 
-function getMessage(message) { 
-	return $.i18n.prop(message);
+function getMessage(message) {
+    return $.i18n.prop(message);
 }

+ 104 - 102
stmms-web/src/main/webapp/static/mark-track/js/mark-control.js

@@ -28,7 +28,7 @@ function MarkControl(option) {
     // }
 }
 
-MarkControl.prototype.initContainer = function() {
+MarkControl.prototype.initContainer = function () {
     var height = this.option.height;
     if (height == undefined) {
         height = $(window).height();
@@ -58,13 +58,13 @@ MarkControl.prototype.initContainer = function() {
     this.initHeaderAndAssistant();
 }
 
-MarkControl.prototype.initHeaderAndAssistant = function() {
+MarkControl.prototype.initHeaderAndAssistant = function () {
     var self = this;
     this.container.header.find('#mark-user-name').html(this.option.userName);
     if (this.option.logoutTitle != undefined) {
         this.container.header.find('#logout-title').html(this.option.logoutTitle);
     }
-    this.container.header.find('#logout-link').click(function() {
+    this.container.header.find('#logout-link').click(function () {
         self.trigger('logout.link.click');
         return true;
     })
@@ -73,7 +73,7 @@ MarkControl.prototype.initHeaderAndAssistant = function() {
     this.container.assistant.positionSet = false;
     this.container.assistantButton = this.container.header.find('#assistant-button');
 
-    this.container.assistantButton.click(this, function(event) {
+    this.container.assistantButton.click(this, function (event) {
         if (self.container.assistant.positionSet == false) {
             self.container.assistant.offset({
                 top: self.container.assistantButton.position().top + self.container.assistantButton.height() + 5,
@@ -86,7 +86,7 @@ MarkControl.prototype.initHeaderAndAssistant = function() {
 
 }
 
-MarkControl.prototype.initMarkFunction = function() {
+MarkControl.prototype.initMarkFunction = function () {
     var functionList = this.container.assistant.functionList;
     if (functionList == undefined) {
         functionList = getDom(this.mark_function_dom, this).appendTo(this.container.assistant).find('#function-list');
@@ -94,13 +94,13 @@ MarkControl.prototype.initMarkFunction = function() {
     }
 }
 
-MarkControl.prototype.addNavGroup = function(title, content) {
+MarkControl.prototype.addNavGroup = function (title, content) {
     var self = this;
     self.navNumber++;
     var nav = $('<a href="#"><span>' + title + '</span></a>').appendTo(self.container.centerNavbar);
     nav.attr('data-number', self.navNumber);
     content.attr('data-number', self.navNumber);
-    nav.click(function() {
+    nav.click(function () {
         self.container.centerNavbar.find('a').removeClass('selected');
         $(this).addClass('selected');
 
@@ -118,7 +118,7 @@ MarkControl.prototype.addNavGroup = function(title, content) {
 }
 
 
-MarkControl.prototype.initSetting = function(option) {
+MarkControl.prototype.initSetting = function (option) {
     this.userId = option.userId;
     this.settingSyncUrl = option.settingSyncUrl;
     this.settingSyncing = false;
@@ -141,7 +141,7 @@ MarkControl.prototype.initSetting = function(option) {
     this.trigger('mark.setting.init', this.setting);
 }
 
-MarkControl.prototype.localSettingSave = function() {
+MarkControl.prototype.localSettingSave = function () {
     if (this.localStore != undefined) {
         this.localStore.setItem('mark.setting', JSON.stringify({
             userId: this.userId,
@@ -150,7 +150,7 @@ MarkControl.prototype.localSettingSave = function() {
     }
 }
 
-MarkControl.prototype.updateSetting = function(item) {
+MarkControl.prototype.updateSetting = function (item) {
     if (item == undefined) {
         return;
     }
@@ -161,7 +161,7 @@ MarkControl.prototype.updateSetting = function(item) {
     if (this.settingSyncUrl != undefined && this.settingSyncing == false) {
         this.settingSyncing = true;
         var self = this;
-        setTimeout(function() {
+        setTimeout(function () {
             //同步个性化设置
             $.post(self.settingSyncUrl, {
                 setting: JSON.stringify(self.setting)
@@ -172,8 +172,8 @@ MarkControl.prototype.updateSetting = function(item) {
 }
 
 // 增加某个事件的监听方法
-MarkControl.prototype.on = function(eventName, caller, callback, async) {
-    if (eventName && callback && eventName.length > 0 && typeof(callback) == 'function') {
+MarkControl.prototype.on = function (eventName, caller, callback, async) {
+    if (eventName && callback && eventName.length > 0 && typeof (callback) == 'function') {
         if (async) {
             this.container.bind(eventName, callback);
         } else {
@@ -189,7 +189,7 @@ MarkControl.prototype.on = function(eventName, caller, callback, async) {
 }
 
 // 触发某个事件,并传递事件相关内容
-MarkControl.prototype.trigger = function(eventName, eventObject) {
+MarkControl.prototype.trigger = function (eventName, eventObject) {
     var result = true;
     if (eventName && eventName.length > 0) {
         var array = this.triggers[eventName];
@@ -207,7 +207,7 @@ MarkControl.prototype.trigger = function(eventName, eventObject) {
 }
 
 // 初始化事件监听
-MarkControl.prototype.initTriggers = function(option) {
+MarkControl.prototype.initTriggers = function (option) {
     if (this.triggers == undefined) {
         this.triggers = {};
     }
@@ -218,7 +218,7 @@ MarkControl.prototype.initTriggers = function(option) {
     }
 
     var self = this;
-    this.on('mark.sidebar.open', this, function(event, context, eventObject) {
+    this.on('mark.sidebar.open', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span12')) {
             this.container.center.removeClass('span12');
@@ -229,7 +229,7 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('mark.sidebar.close', this, function(event, context, eventObject) {
+    this.on('mark.sidebar.close', this, function (event, context, eventObject) {
         this.container.assistant.hide();
         if (this.container.center.hasClass('span10')) {
             this.container.center.removeClass('span10');
@@ -240,69 +240,71 @@ MarkControl.prototype.initTriggers = function(option) {
         }
         this.trigger('center.width.change');
     });
-    this.on('task.load.finish', this, function(event, context, eventObject) {
+    this.on('task.load.finish', this, function (event, context, eventObject) {
         self.container.centerNavbar.find('a:first').trigger('click');
         if (context.task != undefined) {
             context.task.spent = new Date().getTime();
         }
     });
-    this.on('mark.focus.change', this, function(event, context, eventObject) {});
-    this.on('task.get.finish', this, function(event, context, eventObject) {
+    this.on('mark.focus.change', this, function (event, context, eventObject) {
+    });
+    this.on('task.get.finish', this, function (event, context, eventObject) {
         context.prefetchCallback = undefined;
     });
-    this.on('task.get.none', this, function(event, context, eventObject) {
+    this.on('task.get.none', this, function (event, context, eventObject) {
         self.getStatus();
         if (context.task == undefined && self.option.clearUrl != undefined) {
-            $.post(self.option.clearUrl, {}, function() {});
+            $.post(self.option.clearUrl, {}, function () {
+            });
         }
-        context.prefetchCallback = function() {
+        context.prefetchCallback = function () {
             context.prefetchCallback = undefined;
             if (self.context.task == undefined && self.context.prefetchTask.length > 0) {
                 self.getTask();
             }
         }
     });
-    this.on('task.prefetch.success', this, function(event, context, eventObject) {
+    this.on('task.prefetch.success', this, function (event, context, eventObject) {
         if (context.prefetchCallback != undefined) {
             context.prefetchCallback();
         }
-        setTimeout(function() {
+        setTimeout(function () {
             self.prefetch();
         }, 500);
     });
-    this.on('task.prefetch.error', this, function(event, context, eventObject) {
-        setTimeout(function() {
+    this.on('task.prefetch.error', this, function (event, context, eventObject) {
+        setTimeout(function () {
             self.prefetch();
         }, 500);
     });
-    this.on('task.prefetch.none', this, function(event, context, eventObject) {
+    this.on('task.prefetch.none', this, function (event, context, eventObject) {
         if (context.prefetchCallback != undefined) {
             context.prefetchCallback();
         }
         if (context.isFinish != true) {
-            setTimeout(function() {
+            setTimeout(function () {
                 self.prefetch();
             }, 1000);
         }
     });
-    this.on('task.prefetch.finish', this, function(event, context, eventObject) {
+    this.on('task.prefetch.finish', this, function (event, context, eventObject) {
         self.getTask();
     });
-    this.on('task.submit.before', this, function(event, context, eventObject) {
+    this.on('task.submit.before', this, function (event, context, eventObject) {
         context.submitting = true;
     });
-    this.on('history.submit.success', this, function(event, context, eventObject) {
+    this.on('history.submit.success', this, function (event, context, eventObject) {
         context.submitting = false;
     });
-    this.on('task.submit.success', this, function(event, context, eventObject) {
+    this.on('task.submit.success', this, function (event, context, eventObject) {
         context.submitting = false;
         context.task = undefined;
         self.getTask();
     });
-    this.on('task.submit.error', this, function(event, context, eventObject) {
+    this.on('task.submit.error', this, function (event, context, eventObject) {
         context.submitting = false;
     });
-    this.on('task.pass.success', this, function(event, context, eventObject) {
+    this.on('task.pass.success', this, function (event, context, eventObject) {
         if (context.task != undefined && self.option.clearUrl != undefined) {
             $.post(self.option.clearUrl, {
                 libraryId: context.task.libraryId
@@ -311,27 +313,27 @@ MarkControl.prototype.initTriggers = function(option) {
         context.task = undefined;
         self.getTask();
     });
-    this.on('mark.setting.change', this, function(event, context, eventObject) {
+    this.on('mark.setting.change', this, function (event, context, eventObject) {
         self.updateSetting(eventObject);
     });
 
-    $(document).keypress(this, function(event) {
+    $(document).keypress(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.press', event);
         }
     });
-    $(document).keydown(this, function(event) {
+    $(document).keydown(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.down', event);
         }
     });
-    $(document).keyup(this, function(event) {
+    $(document).keyup(this, function (event) {
         if (self.context.listenKeyboard != false) {
             return self.trigger('key.up', event);
         }
     });
 
-    window.onbeforeunload = function(e) {
+    window.onbeforeunload = function (e) {
         if (self.option.clearUrl != undefined) {
             $.post(self.option.clearUrl);
         }
@@ -339,7 +341,7 @@ MarkControl.prototype.initTriggers = function(option) {
 }
 
 // 初始化功能模块
-MarkControl.prototype.initModules = function(option) {
+MarkControl.prototype.initModules = function (option) {
     if (this.modules == undefined) {
         this.modules = {};
     }
@@ -365,18 +367,18 @@ MarkControl.prototype.initModules = function(option) {
 }
 
 // 指定初始化某个名称的模块
-MarkControl.prototype.initModule = function(names, options, success) {
+MarkControl.prototype.initModule = function (names, options, success) {
     for (var i in names) {
         var name = names[i];
         var option = options[name];
         var moduleInit = name.replace(/-/g, '_');
-        if (option == undefined || typeof(option) != 'object') {
+        if (option == undefined || typeof (option) != 'object') {
             option = {};
         }
         option.markControl = this;
         eval('this.modules[name]=' + moduleInit + '(option, function(){})');
     }
-    if (success != undefined && typeof(success) == 'function') {
+    if (success != undefined && typeof (success) == 'function') {
         success();
     }
 }
@@ -389,12 +391,12 @@ function initModuleAsync(markControl, names, index, option) {
         var moduleInit = name.replace(/-/g, '_');
         var modules = markControl.modules;
         if (modules[name] == undefined) {
-            if (typeof(moduleOption) != 'object') {
+            if (typeof (moduleOption) != 'object') {
                 moduleOption = {};
             }
             moduleOption.markControl = markControl;
-            $.getScript(moduleUrl, function() {
-                var success = function() {
+            $.getScript(moduleUrl, function () {
+                var success = function () {
                     initModule(markControl, names, index + 1, option);
                 }
                 eval('modules[name]=' + moduleInit + '(moduleOption, success)');
@@ -403,27 +405,27 @@ function initModuleAsync(markControl, names, index, option) {
             initModule(markControl, names, index + 1, option);
         }
     } else {
-        if (markControl.option.success != undefined && typeof(markControl.option.success) == 'function') {
+        if (markControl.option.success != undefined && typeof (markControl.option.success) == 'function') {
             markControl.option.success();
         }
     }
 }
 
-MarkControl.prototype.start = function(taskOption) {
+MarkControl.prototype.start = function (taskOption) {
     taskOption.markControl = this;
     var markControl = this;
-    taskOption.success = function() {
-        markControl.context.prefetchCallback = function() {
+    taskOption.success = function () {
+        markControl.context.prefetchCallback = function () {
             markControl.context.prefetchCallback = undefined;
             markControl.getTask();
         }
-        markControl.context.statusCallback = function() {
+        markControl.context.statusCallback = function () {
             markControl.context.statusCallback = undefined;
             markControl.prefetch();
         }
         markControl.getStatus();
     };
-    taskOption.error = function(message) {
+    taskOption.error = function (message) {
         alert(getMessage(mark.control.init.error));
     };
     this.taskControl = new TaskControl(taskOption);
@@ -431,7 +433,7 @@ MarkControl.prototype.start = function(taskOption) {
 }
 
 // task预加载
-MarkControl.prototype.prefetch = function() {
+MarkControl.prototype.prefetch = function () {
     var taskControl = this.taskControl;
     var markControl = this;
     var context = this.context;
@@ -446,9 +448,9 @@ MarkControl.prototype.prefetch = function() {
             context.prefetching = true;
             markControl.trigger('task.prefetch.before');
 
-            taskControl.fetch(function(task) {
+            taskControl.fetch(function (task) {
                 if (imageBuilder != undefined) {
-                    imageBuilder.build(task, function(error) {
+                    imageBuilder.build(task, function (error) {
                         if (error) {
                             context.prefetching = false;
                             markControl.trigger('task.prefetch.error');
@@ -465,11 +467,11 @@ MarkControl.prototype.prefetch = function() {
                     context.prefetching = false;
                     markControl.trigger('task.prefetch.success');
                 }
-            }, function(task) {
+            }, function (task) {
                 context.prefetchStatus = getMessage(task.message);
                 context.prefetching = false;
                 markControl.trigger('task.prefetch.none');
-            }, function() {
+            }, function () {
                 context.prefetching = false;
                 markControl.trigger('task.prefetch.none');
             });
@@ -479,12 +481,12 @@ MarkControl.prototype.prefetch = function() {
     }
 }
 
-MarkControl.prototype.getStatus = function() {
+MarkControl.prototype.getStatus = function () {
     if (this.taskControl == undefined) {
         return;
     }
     var self = this;
-    this.taskControl.status(function(status) {
+    this.taskControl.status(function (status) {
         self.context.status = status;
         if (status != undefined) {
             self.context.isFinish = status.blockTotalCount > 0 && status.blockTotalCount == (status.blockMarkedCount + status.blockExceptionCount);
@@ -496,7 +498,7 @@ MarkControl.prototype.getStatus = function() {
     })
 }
 
-MarkControl.prototype.getTask = function() {
+MarkControl.prototype.getTask = function () {
     if (this.taskControl == undefined) {
         return;
     }
@@ -527,20 +529,20 @@ MarkControl.prototype.getTask = function() {
     }
 }
 
-MarkControl.prototype.getHistory = function(data) {
+MarkControl.prototype.getHistory = function (data) {
     if (this.taskControl == undefined) {
         return;
     }
-    this.taskControl.history(data, function(result) {
+    this.taskControl.history(data, function (result) {
         data.result = result;
         this.option.markControl.trigger('history.get.success', data);
-    }, function(message) {
+    }, function (message) {
         data.message = message;
         this.option.markControl.trigger('history.get.error', data);
     });
 }
 
-MarkControl.prototype.setTask = function(task) {
+MarkControl.prototype.setTask = function (task) {
     var imageBuilder = this.modules['image-builder'];
     var self = this;
 
@@ -549,7 +551,7 @@ MarkControl.prototype.setTask = function(task) {
     }
     this.trigger('task.get.before');
     if (imageBuilder != undefined && task != undefined) {
-        imageBuilder.build(task, function(error) {
+        imageBuilder.build(task, function (error) {
             self.context.task = task;
             self.trigger('task.get.success');
         });
@@ -561,14 +563,14 @@ MarkControl.prototype.setTask = function(task) {
     }
 }
 
-MarkControl.prototype.submitTask = function(submitUrl) {
+MarkControl.prototype.submitTask = function (submitUrl) {
     var task = this.context.task;
     var markControl = this;
     var submitUrl = submitUrl != undefined && submitUrl.length > 0 ? submitUrl : this.option.submitUrl;
 
     if (task != undefined && this.context.submitting != true) {
         //开启强制标记
-        if (this.option.forceSpecialTag === true && task.problem!=true) {
+        if (this.option.forceSpecialTag === true && task.problem != true) {
             var isTag = !(task.tagList == undefined || task.tagList == null || task.tagList.length <= 0);
             var isTrack = false;
             for (var i in task.trackList) {
@@ -592,15 +594,15 @@ MarkControl.prototype.submitTask = function(submitUrl) {
             trackList: task.trackList,
             tagList: task.tagList,
             spent: new Date().getTime() - task.spent,
-            problem : task.problem,
-            reason : task.reason
+            problem: task.problem,
+            reason: task.reason
         }
 
         this.trigger('task.submit.before');
         this.trigger('mark.specialTag.before');
         if (this.taskControl != undefined) {
             // 已定义任务引擎
-            this.taskControl.submit(submitObj, function(status) {
+            this.taskControl.submit(submitObj, function (status) {
                 if (status != undefined && status.valid == true) {
                     markControl.context.status = status;
                     markControl.trigger('mark.status.change', status);
@@ -613,8 +615,8 @@ MarkControl.prototype.submitTask = function(submitUrl) {
                 }
                 markControl.trigger('mark.specialTag.success');
                 // markControl.getTask();
-            }, function(message) {
-                markControl.trigger('task.submit.error',getMessage("mark.control.tsak.error"));
+            }, function (message) {
+                markControl.trigger('task.submit.error', getMessage("mark.control.task.error"));
             });
         } else if (submitUrl != undefined && submitUrl.length > 0) {
             // 未定义任务引擎,依赖定义/传入的提交地址
@@ -622,7 +624,7 @@ MarkControl.prototype.submitTask = function(submitUrl) {
                 url: submitUrl,
                 type: 'POST',
                 data: submitObj,
-                success: function(result) {
+                success: function (result) {
                     if (result.success == true) {
                         // markControl.context.task = undefined;
                         markControl.trigger('task.submit.success');
@@ -632,8 +634,8 @@ MarkControl.prototype.submitTask = function(submitUrl) {
                         markControl.trigger('task.submit.error', getMessage(result.message));
                     }
                 },
-                error: function(message) {
-                    markControl.trigger('task.submit.error', getMessage('mark.control.tsak.error'));
+                error: function (message) {
+                    markControl.trigger('task.submit.error', getMessage('mark.control.task.error'));
                 }
             });
         } else {
@@ -673,15 +675,15 @@ MarkControl.prototype.mark_function_dom = '<h3 class="popover-title" data-i18n-t
 </p></div>';
 
 // 其他通用方法
-String.prototype.startWith = function(prefix) {
+String.prototype.startWith = function (prefix) {
     return this.indexOf(prefix) === 0;
 }
-String.prototype.endWith = function(suffix) {
+String.prototype.endWith = function (suffix) {
     return this.match(suffix + "$") == suffix;
 };
 
 // 日期格式化
-Date.prototype.format = function(fmt) { // author: meizz
+Date.prototype.format = function (fmt) { // author: meizz
     var o = {
         "M+": this.getMonth() + 1, // 月份
         "d+": this.getDate(), // 日
@@ -714,27 +716,27 @@ function getDom(content, markControl) {
         content = content.replace(/{logoutUrl}/g, markControl.option.logoutUrl);
     }
     var result = $(content);
-    result.each(function() {
-    	if($(this).data("i18n-value")!=undefined){
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	}
-		if($(this).data("i18n-text")!=undefined){
-			$(this).text($.i18n.prop($(this).data("i18n-text")));
-		    	}
-		if($(this).data("i18n-placeholder")!=undefined){
-			$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-		}
-    	
-    	$(this).find("[data-i18n-value]").each(function() {
-    		$(this).val($.i18n.prop($(this).data("i18n-value")));
-    	});
-    	$(this).find("[data-i18n-text]").each(function() {
-    		$(this).text($.i18n.prop($(this).data("i18n-text")));
-    	});
-    	$(this).find("[data-i18n-placeholder]").each(function() {
-    		$(this).attr('placeholder',$.i18n.prop($(this).data("i18n-placeholder")));
-    	});
-	});
+    result.each(function () {
+        if ($(this).data("i18n-value") != undefined) {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        }
+        if ($(this).data("i18n-text") != undefined) {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        }
+        if ($(this).data("i18n-placeholder") != undefined) {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        }
+
+        $(this).find("[data-i18n-value]").each(function () {
+            $(this).val($.i18n.prop($(this).data("i18n-value")));
+        });
+        $(this).find("[data-i18n-text]").each(function () {
+            $(this).text($.i18n.prop($(this).data("i18n-text")));
+        });
+        $(this).find("[data-i18n-placeholder]").each(function () {
+            $(this).attr('placeholder', $.i18n.prop($(this).data("i18n-placeholder")));
+        });
+    });
     return result;
 }
 
@@ -742,6 +744,6 @@ function isArray(obj) {
     return obj != undefined && Object.prototype.toString.call(obj) === '[object Array]';
 }
 
-function getMessage(message) { 
-	return $.i18n.prop(message);
+function getMessage(message) {
+    return $.i18n.prop(message);
 }