luoshi преди 4 години
родител
ревизия
292fac0711
променени са 29 файла, в които са добавени 1111 реда и са изтрити 1073 реда
  1. 8 3
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java
  2. 5 3
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamService.java
  3. 5 3
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java
  4. 7 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java
  5. 28 22
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java
  6. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/MarkLibraryDao.java
  7. 6 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/PictureConfigTransform.java
  8. 42 34
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java
  9. 12 24
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java
  10. 9 11
      stmms-web/src/main/java/cn/com/qmth/stmms/api/utils/AESUtil.java
  11. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/LoginController.java
  12. 32 7
      stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/WebUser.java
  13. 11 35
      stmms-web/src/main/java/cn/com/qmth/stmms/common/interceptor/LogInterceptor.java
  14. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/common/session/model/StmmsSession.java
  15. 28 6
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java
  16. 17 30
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/interceptor/MarkInterceptor.java
  17. 3 1
      stmms-web/src/main/java/cn/com/qmth/stmms/open/controller/OpenUserController.java
  18. 2 2
      stmms-web/src/main/webapp/WEB-INF/application.properties
  19. 7 6
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupEditSimple.jsp
  20. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markTrack.jsp
  21. 106 106
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/subjectSelect.jsp
  22. 246 241
      stmms-web/src/main/webapp/static/i18n/messages.properties
  23. 6 1
      stmms-web/src/main/webapp/static/i18n/messages_en.properties
  24. 245 240
      stmms-web/src/main/webapp/static/i18n/messages_ja.properties
  25. 246 241
      stmms-web/src/main/webapp/static/i18n/messages_zh.properties
  26. 4 9
      stmms-web/src/main/webapp/static/mark-new/js/modules/single-image-view.js
  27. 23 25
      stmms-web/src/main/webapp/static/mark-new/js/modules/thumbnail.js
  28. 4 9
      stmms-web/src/main/webapp/static/mark-track/js/modules/single-image-view.js
  29. 2 2
      stmms-web/src/main/webapp/static/utils/image-utils.js

+ 8 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -1,14 +1,14 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
-import java.util.List;
-
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
-import cn.com.qmth.stmms.biz.exam.model.Marker;
+import java.util.List;
 
 public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>, JpaSpecificationExecutor<Marker> {
 
@@ -69,6 +69,11 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     public Marker findByExamIdAndSubjectCodeAndGroupNumberAndUserId(int examId, String subjectCode, Integer number,
             Integer userId);
 
+    @Query("select m from Marker m where m.examId=?1 and m.userId=?2 and exists "
+            + "(select g.pk.number from MarkGroup g where g.pk.examId=?1 and g.pk.subjectCode=m.subjectCode and g.status in (?3)) "
+            + "order by m.subjectCode, m.groupNumber")
+    public List<Marker> findByExamIdAndUserIdAndGroupStatus(Integer examId, Integer userId, MarkStatus... groupStatus);
+
     @Query("select count(m) from Marker m where m.userId=?1")
     public long countByUserId(Integer userId);
 

+ 5 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamService.java

@@ -1,14 +1,15 @@
 package cn.com.qmth.stmms.biz.exam.service;
 
-import java.util.Date;
-import java.util.List;
-
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.query.ExamSearchQuery;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
 
+import java.util.Date;
+import java.util.List;
+
 public interface ExamService {
 
     Exam save(Exam exam);
@@ -31,4 +32,5 @@ public interface ExamService {
 
     int updateObjectiveStatus(int examId, ObjectiveStatus calculate);
 
+    void updateStatus(Integer id, ExamStatus status);
 }

+ 5 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -1,12 +1,12 @@
 package cn.com.qmth.stmms.biz.exam.service;
 
-import java.util.List;
-import java.util.Set;
-
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 
+import java.util.List;
+import java.util.Set;
+
 public interface MarkerService {
 
     Marker save(Marker marker);
@@ -38,6 +38,8 @@ public interface MarkerService {
 
     void updateMarkSetting(Integer id, String setting);
 
+    List<Marker> findByExamAndUserId(Integer examId, Integer userId);
+
     Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number, Integer userId);
 
     long countByUserId(Integer userId);

+ 7 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java

@@ -11,7 +11,6 @@ import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
-
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -23,7 +22,6 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
@@ -37,6 +35,7 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
     @Autowired
     private ProblemTypeService problemService;
 
+    @Override
     @Transactional
     // @CachePut(value = "exam_cache", key = "#exam.id", condition =
     // "#exam!=null && #exam.id!=null")
@@ -61,6 +60,7 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
         return examDao.findOne(id);
     }
 
+    @Override
     @Transactional
     // @CacheEvict(value = "exam_cache", beforeInvocation = true, allEntries =
     // true)
@@ -68,6 +68,7 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
         examDao.updateStatus(id, status);
     }
 
+    @Override
     @Transactional
     // @CacheEvict(value = "exam_cache", beforeInvocation = true, allEntries =
     // true)
@@ -101,8 +102,9 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
                     predicates.add(cb.equal(root.get("code"), query.getCode()));
                 }
 
-                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()]));
             }
         }, query);
         fillResult(result, query);
@@ -135,6 +137,7 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
     }
 
     @Override
+    @Transactional
     public int updateObjectiveStatus(int examId, ObjectiveStatus status) {
         return examDao.updateObjectiveStatus(examId, status);
     }

+ 28 - 22
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -1,22 +1,5 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
-import java.util.ArrayList;
-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.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-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.MarkerDao;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
@@ -26,6 +9,22 @@ import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.mark.dao.MarkLibraryDao;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+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.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
 @Service("markerService")
 public class MarkerServiceImpl extends BaseQueryService<Marker> implements MarkerService {
@@ -181,8 +180,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Override
     public List<Marker> getMarkCount(int examId, Set<String> subjectCodes) {
         List<Marker> list = new LinkedList<Marker>();
-        List<Object[]> result = libraryDao.countMarkerAndStatusAndSubjectCodeIn(examId, subjectCodes,
-                LibraryStatus.MARKED);
+        List<Object[]> result = libraryDao
+                .countMarkerAndStatusAndSubjectCodeIn(examId, subjectCodes, LibraryStatus.MARKED);
         if (result != null) {
             for (Object[] array : result) {
                 try {
@@ -225,8 +224,9 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                 if (query.getUserId() != null) {
                     predicates.add(cb.equal(root.get("userId"), query.getUserId()));
                 }
-                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()]));
             }
         };
     }
@@ -243,10 +243,16 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     }
 
     @Override
-    public Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number, Integer userId) {
+    public Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number,
+            Integer userId) {
         return markerDao.findByExamIdAndSubjectCodeAndGroupNumberAndUserId(examId, subjectCode, number, userId);
     }
 
+    @Override
+    public List<Marker> findByExamAndUserId(Integer examId, Integer userId) {
+        return markerDao.findByExamIdAndUserIdAndGroupStatus(examId, userId, MarkStatus.TRIAL, MarkStatus.FORMAL);
+    }
+
     @Override
     public long countByUserId(Integer userId) {
         return markerDao.countByUserId(userId);

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/MarkLibraryDao.java

@@ -74,7 +74,7 @@ public interface MarkLibraryDao extends JpaRepository<MarkLibrary, Integer>, Jpa
 
     @Modifying(clearAutomatically = true)
     @Query("update MarkLibrary m set m.status=?2, m.markerId=null, m.markerTime=null, m.markerScore=null, m.markerScoreList=null, m.markerSpent=null, "
-            + "m.headerId=null , m.headerTime=null , m.headerScore=null , m.headerScoreList=null where m.markerId=?1 and m.status not in (?4) ")
+            + "m.headerId=null , m.headerTime=null , m.headerScore=null , m.headerScoreList=null where m.markerId=?1 and m.status not in (?3) ")
     void resetByMarkerId(Integer markerId, LibraryStatus status, LibraryStatus... notInStatus);
 
     @Modifying(clearAutomatically = true)

+ 6 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/PictureConfigTransform.java

@@ -59,7 +59,12 @@ public class PictureConfigTransform {
         tag.setContent(content);
         tag.setLeft(left);
         tag.setTop(top);
-        tags.computeIfAbsent(index, k -> new LinkedList<>()).add(tag);
+        List<PictureTag> list = tags.get(index);
+        if (list == null) {
+            list = new LinkedList<>();
+            tags.put(index, list);
+        }
+        list.add(tag);
     }
 
 }

+ 42 - 34
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -82,12 +82,14 @@ public class MarkGroupController extends BaseExamController {
         }
         List<MarkGroup> list = groupService.findByExamAndSubject(examId, subject.getCode());
         for (MarkGroup group : list) {
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subject.getCode(),
-                    false, group.getNumber()));
-            group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subject.getCode(), group.getNumber()));
+            group.setQuestionList(questionService
+                    .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subject.getCode(), false,
+                            group.getNumber()));
+            group.setMarkerCount(
+                    markerService.countByExamAndSubjectAndGroup(examId, subject.getCode(), group.getNumber()));
             group.setCurrentCount(markService.applyCount(group));
-            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
-                    .getLibraryCount()) : 0;
+            int percent =
+                    group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount()) : 0;
             group.setPercent(percent);
         }
         model.addAttribute("resultList", list);
@@ -104,13 +106,14 @@ public class MarkGroupController extends BaseExamController {
             @RequestParam(required = false) Boolean withDouble, @RequestParam(required = false) MarkStatus status) {
         int examId = getSessionExamId(request);
         JSONArray array = new JSONArray();
-        List<MarkGroup> list = withDouble != null && withDouble ? groupService.findByExamAndSubjectWithDouble(examId,
-                subjectCode) : (status != null ? groupService
-                .findByExamAndSubjectAndStatus(examId, subjectCode, status) : groupService.findByExamAndSubject(examId,
-                subjectCode));
+        List<MarkGroup> list = withDouble != null && withDouble ?
+                groupService.findByExamAndSubjectWithDouble(examId, subjectCode) :
+                (status != null ?
+                        groupService.findByExamAndSubjectAndStatus(examId, subjectCode, status) :
+                        groupService.findByExamAndSubject(examId, subjectCode));
         for (MarkGroup group : list) {
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
-                    false, group.getNumber()));
+            group.setQuestionList(questionService
+                    .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
             JSONObject obj = new JSONObject();
             obj.accumulate("number", group.getNumber());
             obj.accumulate("title", group.getTitle());
@@ -249,13 +252,12 @@ public class MarkGroupController extends BaseExamController {
         if (group != null) {
             String pictureConfig = buildPictureConfig(group);
             group.setPicList(pictureConfig);
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
-                    false, group.getNumber()));
+            group.setQuestionList(questionService
+                    .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
             model.addAttribute("group", group);
-            model.addAttribute(
-                    "questions",
-                    questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
-                            group.getSubjectCode(), false, group.getNumber()));
+            model.addAttribute("questions", questionService
+                    .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
+                            group.getNumber()));
             model.addAttribute("pictureConfig", pictureConfig);
             model.addAttribute("markModeList", MarkMode.values());
             model.addAttribute("scorePolicyList", ScorePolicy.values());
@@ -278,13 +280,14 @@ public class MarkGroupController extends BaseExamController {
         if (group != null) {
             String pictureConfig = buildPictureConfig(group);
             group.setPicList(pictureConfig);
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
-                    false, number));
+            group.setQuestionList(
+                    questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number));
             List<MarkGroup> questionList = new ArrayList<MarkGroup>();
             String[] mainNumbers = group.getMainNumber().split(",");
             for (String mainNumber : mainNumbers) {
-                List<ExamQuestion> list = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
-                        subjectCode, false, Integer.parseInt(mainNumber));
+                List<ExamQuestion> list = questionService
+                        .findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
+                                Integer.parseInt(mainNumber));
                 StringBuilder score = new StringBuilder();
                 DecimalFormat format = new DecimalFormat("####.###");
                 String title = "";
@@ -356,7 +359,8 @@ public class MarkGroupController extends BaseExamController {
             @RequestParam(required = false) Double arbitrateThreshold,
             @RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
             @RequestParam(required = false) MarkMode markMode, @RequestParam(required = false) Integer trialCount,
-            @RequestParam boolean sheetView, @RequestParam boolean enableAllZero,
+            @RequestParam(defaultValue = "false") Boolean sheetView,
+            @RequestParam(defaultValue = "false") Boolean enableAllZero,
             @RequestParam(required = false) String questionDetail,
             @RequestParam(required = false) String intervalScoreList) {
         int examId = getSessionExamId(request);
@@ -368,10 +372,10 @@ public class MarkGroupController extends BaseExamController {
                     questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
                     JSONArray array = JSONArray.fromObject(questionDetail);
                     List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
-                    List<ExamQuestion> all = questionService.findByExamAndSubjectAndObjective(examId, subjectCode,
-                            false);
-                    List<ExamQuestion> old = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
-                            subjectCode, false, number);
+                    List<ExamQuestion> all = questionService
+                            .findByExamAndSubjectAndObjective(examId, subjectCode, false);
+                    List<ExamQuestion> old = questionService
+                            .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
                     Set<Integer> mainNumbers = new HashSet<Integer>();
                     for (ExamQuestion examQuestion : all) {
                         mainNumbers.add(examQuestion.getMainNumber());
@@ -396,8 +400,8 @@ public class MarkGroupController extends BaseExamController {
                     }
                     if (detailList != null && detailList.size() > 0) {
                         ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
-                        ThirdPolicy third = thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy)
-                                : ThirdPolicy.DISABLE;
+                        ThirdPolicy third =
+                                thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy) : ThirdPolicy.DISABLE;
                         try {
                             lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
                                     group.getNumber());
@@ -413,8 +417,8 @@ public class MarkGroupController extends BaseExamController {
                 } else {
                     // simple update
                     List<Double> intervalScores = buildDoubleList(intervalScoreList);
-                    List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
-                            examId, subjectCode, false, number);
+                    List<ExamQuestion> questionList = questionService
+                            .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
                     if (intervalScores.size() == questionList.size()) {
                         for (int i = 0; i < questionList.size(); i++) {
                             ExamQuestion q = questionList.get(i);
@@ -440,8 +444,12 @@ public class MarkGroupController extends BaseExamController {
                 if (trialCount != null && trialCount > 0 && group.getStatus() == MarkStatus.TRIAL) {
                     groupService.updateTrialCount(examId, subjectCode, number, trialCount);
                 }
-                groupService.updateSheetView(examId, subjectCode, number, sheetView);
-                groupService.updateEnableAllZero(examId, subjectCode, number, enableAllZero);
+                if (sheetView != null) {
+                    groupService.updateSheetView(examId, subjectCode, number, sheetView);
+                }
+                if (enableAllZero != null) {
+                    groupService.updateEnableAllZero(examId, subjectCode, number, enableAllZero);
+                }
                 redirectAttributes.addAttribute("subjectCode", subjectCode);
                 redirectAttributes.addAttribute("number", number);
                 return "redirect:/admin/exam/group";
@@ -529,8 +537,8 @@ public class MarkGroupController extends BaseExamController {
                     List<ExamQuestion> list = buildQuestionList(group, detailList);
                     questionService.save(list);
                     groupService.save(group);
-                    subjectService.updateScore(examId, subjectCode, false,
-                            groupService.sumTotalScore(examId, subjectCode));
+                    subjectService
+                            .updateScore(examId, subjectCode, false, groupService.sumTotalScore(examId, subjectCode));
                     redirectAttributes.addAttribute("subjectCode", subjectCode);
                     return "redirect:/admin/exam/group";
                 } else {

+ 12 - 24
stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java

@@ -2,16 +2,11 @@ package cn.com.qmth.stmms.admin.interceptor;
 
 import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
 import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
-import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
-import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.http.HttpServletRequest;
@@ -31,7 +26,8 @@ public class AdminInterceptor extends SessionInterceptor {
     private SubjectUserService subjectUserService;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
         return validateAdminUser(buildWebUser(request), request, response);
     }
 
@@ -40,12 +36,12 @@ public class AdminInterceptor extends SessionInterceptor {
         if (wu != null && (wu.getRole() == Role.SYS_ADMIN)) {
             return true;
         }
-        if (wu != null
-                && (wu.getRole() == Role.SCHOOL_ADMIN || wu.getRole() == Role.SUBJECT_HEADER || wu.getRole() == Role.SCHOOL_VIEWER)) {
+        if (wu != null && (wu.getRole() == Role.SCHOOL_ADMIN || wu.getRole() == Role.SUBJECT_HEADER
+                || wu.getRole() == Role.SCHOOL_VIEWER)) {
             Integer examId = SessionExamUtils.getExamId(request);
             String uri = request.getRequestURI();
-            if (examId > 0 || uri.startsWith("/admin/exam/select") || uri.startsWith("/admin/home")
-                    || uri.startsWith("/admin/exam/create") || uri.startsWith("/admin/exam/save")) {
+            if (examId > 0 || uri.startsWith("/admin/exam/select") || uri.startsWith("/admin/home") || uri
+                    .startsWith("/admin/exam/create") || uri.startsWith("/admin/exam/save")) {
                 return true;
             }
             return redirect(request, response, "/admin/exam/select");
@@ -54,21 +50,13 @@ public class AdminInterceptor extends SessionInterceptor {
     }
 
     private WebUser buildWebUser(HttpServletRequest request) {
-        StmmsSession session = RequestUtils.getSession(request);
-        Integer userId = session.getWebUserId();
-        Role role = session.getWebUserRole();
-        if (userId != null && role != null) {
-            User user = userService.findById(userId);
-            if (user != null && user.getRole() == role && user.getAccessTokenRefreshTime() != null
-                    && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
-                    && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
-                WebUser wu = new WebUser(user, null, null);
-                if (user.getRole() == Role.SUBJECT_HEADER) {
-                    wu.setSubjectCodeSet(subjectUserService.findSubjectCode(user.getId()));
-                }
-                RequestUtils.setWebUser(request, wu);
-                return wu;
+        WebUser wu = WebUser.buildFromSession(RequestUtils.getSession(request), userService);
+        if (wu != null) {
+            if (wu.getRole() == Role.SUBJECT_HEADER) {
+                wu.setSubjectCodeSet(subjectUserService.findSubjectCode(wu.getId()));
             }
+            RequestUtils.setWebUser(request, wu);
+            return wu;
         }
         return null;
     }

+ 9 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/api/utils/AESUtil.java

@@ -1,9 +1,9 @@
 package cn.com.qmth.stmms.api.utils;
 
-import java.io.IOException;
-
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.util.Base64;
 
 public class AESUtil {
 
@@ -13,8 +13,7 @@ public class AESUtil {
 
     /**
      * 加密
-     * 
-     * @param encryptStr
+     *
      * @return
      */
     public static byte[] encrypt(byte[] src, String key) throws Exception {
@@ -26,8 +25,7 @@ public class AESUtil {
 
     /**
      * 解密
-     * 
-     * @param decryptStr
+     *
      * @return
      * @throws Exception
      */
@@ -40,17 +38,17 @@ public class AESUtil {
 
     @SuppressWarnings("restriction")
     public static String byte2base64(byte[] b) {
-        return new sun.misc.BASE64Encoder().encode(b);
+        return Base64.getEncoder().encodeToString(b);
     }
 
     @SuppressWarnings("restriction")
     public static byte[] base64ToByte(String text) throws IOException {
-        return new sun.misc.BASE64Decoder().decodeBuffer(text);
+        return Base64.getDecoder().decode(text);
     }
 
     /**
      * 二行制转十六进制字符串
-     * 
+     *
      * @param b
      * @return
      */
@@ -80,7 +78,7 @@ public class AESUtil {
 
     /**
      * 解密
-     * 
+     *
      * @param data
      * @return
      * @throws Exception
@@ -97,7 +95,7 @@ public class AESUtil {
 
     /**
      * 加密
-     * 
+     *
      * @param data
      * @return
      * @throws Exception

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/LoginController.java

@@ -81,7 +81,7 @@ public class LoginController {
                 u.refreshAccessToken();
                 u = userService.save(u);
 
-                session.saveWebUser(new WebUser(u, null, ""));
+                session.saveWebUser(new WebUser(u));
                 sessionService.put(request, response, session);
 
                 modelAndView = new ModelAndView("redirect:admin/home");
@@ -101,7 +101,7 @@ public class LoginController {
             u.refreshAccessToken();
             u = userService.save(u);
 
-            session.saveWebUser(new WebUser(u, null, ""));
+            session.saveWebUser(new WebUser(u));
             sessionService.put(request, response, session);
             return new ModelAndView("redirect:/mark/subject-select");
         }

+ 32 - 7
stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/WebUser.java

@@ -2,8 +2,11 @@ package cn.com.qmth.stmms.common.domain;
 
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.enums.Role;
-import org.apache.commons.lang.StringUtils;
+import cn.com.qmth.stmms.common.session.model.StmmsSession;
+import cn.com.qmth.stmms.common.utils.AccessControlUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -33,21 +36,35 @@ public class WebUser {
 
     private Set<String> subjectCodeSet;
 
-    private WebUser(Integer id, String name, Role role, String token, Object userData, String logoutUrl, String markerId) {
+    private WebUser(Integer id, String name, Role role, String token, Object userData, String logoutUrl,
+            Integer markerId) {
         this.id = id;
         this.name = name;
         this.role = role;
         this.token = token;
         this.userData = userData;
         this.logoutUrl = logoutUrl;
-        if (role.equals(Role.MARKER) && StringUtils.trimToNull(markerId) != null) {
-            this.markerId = Integer.valueOf(markerId);
-        }
+        this.markerId = markerId;
         this.subjectCodeSet = new HashSet<>();
     }
 
-    public WebUser(User user, String logoutUrl, String markerId) {
-        this(user.getId(), user.getName(), user.getRole(), user.getAccessToken(), user, logoutUrl, markerId);
+    public WebUser(User user) {
+        this(user.getId(), user.getName(), user.getRole(), user.getAccessToken(), user, null, null);
+    }
+
+    public static WebUser buildFromSession(StmmsSession session, UserService userService) {
+        Integer userId = session.getWebUserId();
+        Role role = session.getWebUserRole();
+        if (userId != null && role != null) {
+            User user = userService.findById(userId);
+            if (user != null && user.getRole().equals(role) && user.getAccessTokenRefreshTime() != null && StringUtils
+                    .equals(session.getWebUserToken(), user.getAccessToken()) && !AccessControlUtils
+                    .expired(user.getAccessTokenRefreshTime())) {
+                return new WebUser(user.getId(), user.getName(), user.getRole(), user.getAccessToken(), user,
+                        session.getWebUserLogoutUrl(), session.getWebMarkerId());
+            }
+        }
+        return null;
     }
 
     public User getUser() {
@@ -70,6 +87,10 @@ public class WebUser {
         return token;
     }
 
+    public void setLogoutUrl(String logoutUrl) {
+        this.logoutUrl = logoutUrl;
+    }
+
     public String getLogoutUrl() {
         return logoutUrl;
     }
@@ -90,6 +111,10 @@ public class WebUser {
         return role == Role.MARKER;
     }
 
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
     public Integer getMarkerId() {
         return markerId;
     }

+ 11 - 35
stmms-web/src/main/java/cn/com/qmth/stmms/common/interceptor/LogInterceptor.java

@@ -1,30 +1,22 @@
 package cn.com.qmth.stmms.common.interceptor;
 
-import java.util.Date;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
 import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
 import cn.com.qmth.stmms.biz.exam.model.OperationLog;
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.OperationLogService;
-import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 
 /**
  * @author ting.yin
@@ -37,15 +29,12 @@ public class LogInterceptor extends HandlerInterceptorAdapter {
     @Autowired
     private OperationLogService logService;
 
-    @Autowired
-    private MarkerService markerService;
-
     @Autowired
     private UserService userService;
 
     @Override
     public void postHandle(HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler,
-            ModelAndView modelAndView) throws java.lang.Exception {
+            ModelAndView modelAndView) {
         WebUser webUser = RequestUtils.getWebUser(request);
         ApiUser apiUser = RequestUtils.getApiUser(request);
         HandlerMethod method = (HandlerMethod) handler;
@@ -100,19 +89,6 @@ public class LogInterceptor extends HandlerInterceptorAdapter {
      * @param request
      */
     private WebUser buildWebUser(HttpServletRequest request) {
-        StmmsSession session = RequestUtils.getSession(request);
-        Integer userId = session.getWebUserId();
-        Role role = session.getWebUserRole();
-        if (userId != null && role != null) {
-            User user = userService.findById(userId);
-            if (user != null && user.getAccessTokenRefreshTime() != null
-                    && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
-                    && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
-                WebUser wu = new WebUser(user, session.getWebUserLogoutUrl(), null);
-                RequestUtils.setWebUser(request, wu);
-                return wu;
-            }
-        }
-        return null;
+        return WebUser.buildFromSession(RequestUtils.getSession(request), userService);
     }
 }

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/common/session/model/StmmsSession.java

@@ -93,7 +93,7 @@ public class StmmsSession implements Serializable {
     public Role getWebUserRole() {
         String value = getParameter(WEB_USER_ROLE_KEY);
         try {
-            return Role.valueOf(value);
+            return Role.findByValue(Integer.parseInt(value));
         } catch (Exception e) {
             return null;
         }
@@ -110,7 +110,7 @@ public class StmmsSession implements Serializable {
     public void saveWebUser(WebUser webUser) {
         setParameter(WEB_USER_ID_KEY, String.valueOf(webUser.getId()));
         setParameter(WEB_MARKER_ID_KEY, webUser.getMarkerId() != null ? String.valueOf(webUser.getMarkerId()) : null);
-        setParameter(WEB_USER_ROLE_KEY, String.valueOf(webUser.getRole()));
+        setParameter(WEB_USER_ROLE_KEY, String.valueOf(webUser.getRole().getValue()));
         setParameter(WEB_USER_TOKEN_KEY, StringUtils.trimToEmpty(webUser.getToken()));
         setParameter(WEB_USER_LOGOUT_URL, StringUtils.trimToEmpty(webUser.getLogoutUrl()));
     }

+ 28 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -23,6 +23,7 @@ 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;
@@ -38,10 +39,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 @Controller
 @RequestMapping("/mark")
@@ -126,10 +124,33 @@ public class MarkController extends BaseController {
         return modelAndView;
     }
 
+    @RequestMapping(value = "/subject/query")
+    @ResponseBody
+    public JSONArray subjectQuery(HttpServletRequest request, @RequestParam Integer examId) {
+        User user = RequestUtils.getWebUser(request).getUser();
+        List<Marker> list = markerService.findByExamAndUserId(examId, user.getId());
+        Set<String> subjectSet = new HashSet<>();
+        JSONArray array = new JSONArray();
+        for (Marker marker : list) {
+            if (!subjectSet.contains(marker.getSubjectCode())) {
+                ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
+                if (subject != null) {
+                    JSONObject item = new JSONObject();
+                    item.accumulate("id", marker.getId());
+                    item.accumulate("subjectCode", subject.getCode());
+                    item.accumulate("subjectName", subject.getName());
+                    array.add(item);
+                }
+                subjectSet.add(marker.getSubjectCode());
+            }
+        }
+        return array;
+    }
+
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
     public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
             @RequestParam Integer markerId) {
-        User user = RequestUtils.getWebUser(request).getUser();
+        WebUser user = RequestUtils.getWebUser(request);
         ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelectAp");
         Calendar rightNow = Calendar.getInstance();
         rightNow.setTime(new Date());
@@ -150,8 +171,9 @@ public class MarkController extends BaseController {
             return modelAndView;
         }
 
+        user.setMarkerId(marker.getId());
         StmmsSession session = RequestUtils.getSession(request);
-        session.saveWebUser(new WebUser(user, null, markerId.toString()));
+        session.saveWebUser(user);
         sessionService.put(request, response, session);
         SessionExamUtils.setExamId(request, exam.getId(), exam.getName(), exam.isForbiddenInfo());
         return new ModelAndView("redirect:/mark/index");

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

@@ -1,20 +1,15 @@
 package cn.com.qmth.stmms.mark.interceptor;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
-import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
-import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * Mark模块操作拦截器
@@ -30,14 +25,14 @@ public class MarkInterceptor extends SessionInterceptor {
     private MarkerService markerService;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        WebUser wu = RequestUtils.getWebUser(request);
-        User user = buildUser(request);
-        if (user != null) {
-            if (user.getLastLoginTime() == null) {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
+        WebUser wu = buildUser(request);
+        if (wu != null) {
+            if (wu.getUser().getLastLoginTime() == null) {
                 // 首次登录,强制重置密码及姓名
                 return redirect(request, response, "/mark/reset");
-            } else if (wu.getMarkerId() == null) {
+            } else if (wu.getMarkerId() == null && !request.getServletPath().startsWith("/mark/subject")) {
                 // 通用帐号未选择科目,首先选择强制选择评卷科目
                 return redirect(request, response, "/mark/subject-select");
             }
@@ -46,22 +41,14 @@ public class MarkInterceptor extends SessionInterceptor {
         return sessionExpire(request, response, "/login");
     }
 
-    private User buildUser(HttpServletRequest request) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        StmmsSession session = RequestUtils.getSession(request);
-        Integer userId = session.getWebUserId();
-        Role role = session.getWebUserRole();
-        if (userId != null && Role.MARKER == role) {
-            User user = userService.findById(userId);
-            if (user != null && user.getAccessTokenRefreshTime() != null
-                    && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
-                    && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
-                if (wu.getMarkerId() != null && wu.getMarker() == null) {
-                    wu.setMarker(markerService.findById(wu.getMarkerId()));
-                }
-                RequestUtils.setWebUser(request, wu);
-                return user;
+    private WebUser buildUser(HttpServletRequest request) {
+        WebUser wu = WebUser.buildFromSession(RequestUtils.getSession(request), userService);
+        if (wu != null && wu.getRole().equals(Role.MARKER)) {
+            if (wu.getMarkerId() != null) {
+                wu.setMarker(markerService.findById(wu.getMarkerId()));
             }
+            RequestUtils.setWebUser(request, wu);
+            return wu;
         }
         return null;
     }

+ 3 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/open/controller/OpenUserController.java

@@ -84,7 +84,9 @@ public class OpenUserController {
         }
         // 保存第三方账号到session
         StmmsSession session = RequestUtils.getSession(request);
-        session.saveWebUser(new WebUser(user, returnUrl, null));
+        WebUser wu = new WebUser(user);
+        wu.setLogoutUrl(returnUrl);
+        session.saveWebUser(wu);
         sessionService.put(request, response, session);
         return "redirect:/mark/subject-select";
     }

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -7,8 +7,8 @@ jdbc.maxActive=50
 jdbc.initSize=5
 
 ##file config
-file.server=http://192.168.10.30:9000/
-file.store=/Users/luoshi/data
+file.server=http://localhost:9000/stmms-ft/
+file.store=/Users/luoshi/develop/data/stmms-ft
 
 mark.cleanTimeoutMinute=20
 mark.activeExpireMinute=30

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

@@ -133,16 +133,17 @@
     <!-- </div> -->
     <!-- </div> -->
     <c:if test="${examType!='MULTI_MEDIA'}">
-        <div class="control-group">
-            <label class="control-label">原卷显示</label>
-            <div class="controls">
-                <input name="sheetView" type="checkbox" <c:if test="${group.sheetView}">checked</c:if>/>
-            </div>
+        <!--<div class="control-group">
+        <label class="control-label">原卷显示</label>
+        <div class="controls">
+        <input name="sheetView" type="checkbox" value="1" <c:if test="${group.sheetView}">checked</c:if>/>
+        </div>
         </div>
+        -->
         <div class="control-group">
             <label class="control-label">启用全零分</label>
             <div class="controls">
-                <input name="enableAllZero" type="checkbox" <c:if test="${group.enableAllZero}">checked</c:if>/>
+                <input name="enableAllZero" type="checkbox" value="1" <c:if test="${group.enableAllZero}">checked</c:if>/>
             </div>
         </div>
     </c:if>

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markTrack.jsp

@@ -6,7 +6,7 @@
     <title>云阅卷高校版</title>
     <link href="${ctxStatic}/mark-track/css/bootstrap.css" rel="stylesheet" type="text/css"/>
     <link href="${ctxStatic}/mark-track/css/style.css" rel="stylesheet" type="text/css"/>
-    
+    <script type="text/javascript" src="${ctxStatic}/utils/image-utils.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-track/js/json2.js"></script>
     
     <script type="text/javascript" src="${ctxStatic}/mark-track/js/jquery.min.js"></script>
@@ -20,7 +20,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/task-control.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-track/js/modules/object-view.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-track/js/modules/sheet-view.js"></script>
-    <script type="text/javascript" src="${ctxStatic}/mark-track/js/modules/slice-view.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/slice-view.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-track/js/modules/mark-board.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-history.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-status.js"></script>

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

@@ -1,119 +1,119 @@
 <%@ 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>
+    <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 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 markerId = $('#marker-select').val();
-				return markerId!=undefined && markerId!='' && markerId!=null;
-			});
+            $('#submit-button').click(function () {
+                var markerId = $('#marker-select').val();
+                return markerId != undefined && markerId != '' && markerId != null;
+            });
 
-			$('.point').hide();
-			var message="${message}";
-			if(message!=null && message!="" ){
-				showError(message);
-			}
+            $('.point').hide();
+            var message = "${message}";
+            if (message != null && message != "") {
+                showError(message);
+            }
 
-			$('#exam-select').change(function(){
-							var examId = $(this).val();
-						    $('#marker-select').empty();
-						    if(examId==''){
-						        $('#marker-select').val('').trigger('change');
-						        return;
-						    }
-						    $.post('${ctx}/mark/subject/query', {examId: examId}, function(result){
-						        var parent = $('#marker-select');
-						        var first = '';
-						        for(var i=0;i<result.length;i++){
-						            var marker = result[i];
-						            $('<option value="'+marker.id+'">'+marker.subjectCode+'-'+marker.subjectName+'</option>').appendTo(parent);
-						            if(i==0){
-						                first = marker.id;
-						            }
-						        }
-						        parent.val(first).trigger('change');
-						    });
-						    $('.point').hide();
-			});
+            $('#exam-select').change(function () {
+                var examId = $(this).val();
+                $('#marker-select').empty();
+                if (examId == '') {
+                    $('#marker-select').val('').trigger('change');
+                    return;
+                }
+                $.post('${ctx}/mark/subject/query', {examId: examId}, function (result) {
+                    var parent = $('#marker-select');
+                    var first = '';
+                    for (var i = 0; i < result.length; i++) {
+                        var marker = result[i];
+                        $('<option value="' + marker.id + '">' + marker.subjectCode + '-' + marker.subjectName + '</option>').appendTo(parent);
+                        if (i == 0) {
+                            first = marker.id;
+                        }
+                    }
+                    parent.val(first).trigger('change');
+                });
+                $('.point').hide();
+            });
 
-			$(document).ajaxError(function(evt, req, settings){
-				if(req.status==401) {
-					alert("权限失效,请重新登录!");
-					 window.location.href = "/mark-login";
-		       	}
-			});
-			
-		});
+            $(document).ajaxError(function (evt, req, settings) {
+                if (req.status == 401) {
+                    alert("权限失效,请重新登录!");
+                    window.location.href = "/mark-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}/mark/subject-select" method="post">
-	      	<div class="option">
-		        <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.name}</option>
-					</c:forEach>
-				</select>
-        	</div>
-        	<div class="option">
-		        <select name="markerId" id="marker-select">
-		        	<c:if test="${subject!=null}">
-		        	<option value="" >${subject.name}</option>
-		        	</c:if>
-				</select>
-        	</div>
-	        <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}/mark-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>
+            <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}/mark/subject-select" method="post">
+                    <div class="option">
+                        <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.name}</option>
+                            </c:forEach>
+                        </select>
+                    </div>
+                    <div class="option">
+                        <select name="markerId" id="marker-select">
+                            <c:if test="${subject!=null}">
+                                <option value="">${subject.name}</option>
+                            </c:if>
+                        </select>
+                    </div>
+                    <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>

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

@@ -1,272 +1,277 @@
 #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\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\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.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.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.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.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.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
 #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
 #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

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

@@ -96,7 +96,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
@@ -120,6 +120,11 @@ mark.sheet=sheet
 mark.sheet.check=check sheet
 mark.sheet.open=open
 mark.sheet.close=close
+#slice-view
+mark.slice=slice
+mark.slice.check=switch
+mark.slice.open=open
+mark.slice.close=close
 #answer-view
 mark.answer=answer
 #warning-info

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

@@ -1,272 +1,277 @@
 #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.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.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.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.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.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
 #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
 #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=\u30af\u30a8\u30ea\u30fc
-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=\u30AF\u30A8\u30EA\u30FC
+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=\u30af\u30a8\u30ea\u30fc
-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=\u30AF\u30A8\u30EA\u30FC
+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=\u30af\u30a8\u30ea\u30fc
-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=\u9ad8\u5f97\u70b9\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=\u30AF\u30A8\u30EA\u30FC
+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=\u9AD8\u5F97\u70B9\u7387
 #report.teacher
-report.teacher=\u62c5\u4efb\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=\u30af\u30a8\u30ea\u30fc
-report.teacher.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.teacher.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.teacher.name=\u62c5\u4efb
-report.teacher.realityCount=\u6709\u52b9\u8005\u6570
-report.teacher.passCount=\u5408\u683c\u8005\u6570
-report.teacher.excellentCount=\u9ad8\u5f97\u70b9\u8005\u6570
-report.teacher.maxScore=\u6700\u9ad8\u70b9
-report.teacher.minScore=\u6700\u4f4e\u70b9
-report.teacher.passRate=\u5408\u683c\u7387
-report.teacher.excellentRate=\u9ad8\u5f97\u70b9\u7387
-report.teacher.avgScore=\u5e73\u5747\u70b9
-report.teacher.relativeAvgScore=\u5e73\u5747\u70b9\u5dee\u5206
-report.teacher.return=\u623b\u308b
+report.teacher=\u62C5\u4EFB\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=\u30AF\u30A8\u30EA\u30FC
+report.teacher.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.teacher.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.teacher.name=\u62C5\u4EFB
+report.teacher.realityCount=\u6709\u52B9\u8005\u6570
+report.teacher.passCount=\u5408\u683C\u8005\u6570
+report.teacher.excellentCount=\u9AD8\u5F97\u70B9\u8005\u6570
+report.teacher.maxScore=\u6700\u9AD8\u70B9
+report.teacher.minScore=\u6700\u4F4E\u70B9
+report.teacher.passRate=\u5408\u683C\u7387
+report.teacher.excellentRate=\u9AD8\u5F97\u70B9\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\u3054\u3068\u5206\u6790
-report.class.subject=\u79d1\u76ee
-report.class.select=\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-report.class.search=\u30af\u30a8\u30ea\u30fc
-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\u8005\u6570
-report.class.passRate=\u5408\u683c\u7387
-report.class.excellentCount=\u9ad8\u5f97\u70b9\u8005\u6570
-report.class.excellentRate=\u9ad8\u5f97\u70b9\u7387
+report.class=\u30AF\u30E9\u30B9\u3054\u3068\u5206\u6790
+report.class.subject=\u79D1\u76EE
+report.class.select=\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
+report.class.search=\u30AF\u30A8\u30EA\u30FC
+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\u8005\u6570
+report.class.passRate=\u5408\u683C\u7387
+report.class.excellentCount=\u9AD8\u5F97\u70B9\u8005\u6570
+report.class.excellentRate=\u9AD8\u5F97\u70B9\u7387
 #report.question
-report.question.objective=\u30de\u30fc\u30af\u30b7\u30fc\u30c8\u65b9\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=\u30af\u30a8\u30ea\u30fc
-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\u79f0
-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=\u5f97\u70b9\u7387
-report.question.fullScoreRate=\u6e80\u70b9\u7387
+report.question.objective=\u30DE\u30FC\u30AF\u30B7\u30FC\u30C8\u65B9\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=\u30AF\u30A8\u30EA\u30FC
+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\u79F0
+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=\u5F97\u70B9\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=\u30af\u30a8\u30ea\u30fc
-report.group.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
-report.group.chart=\u7d71\u8a08\u56f3\u3092\u898b\u308b
-report.group.name=\u8a2d\u554f\u540d\u79f0
-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=\u5f97\u70b9\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=\u30AF\u30A8\u30EA\u30FC
+report.group.export=\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
+report.group.chart=\u7D71\u8A08\u56F3\u3092\u898B\u308B
+report.group.name=\u8A2D\u554F\u540D\u79F0
+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=\u5F97\u70B9\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

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

@@ -1,272 +1,277 @@
 #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\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\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.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.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.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.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.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
 #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
 #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

+ 4 - 9
stmms-web/src/main/webapp/static/mark-new/js/modules/single-image-view.js

@@ -114,18 +114,13 @@ SingleImageView.prototype.init = function () {
 }
 
 SingleImageView.prototype.render = function () {
-    var self = this;
     $(this.canvas).hide();
     if (this.task != undefined && this.task.imageData != undefined) {
         //设置画布大小及背景颜色
-        this.image = new Image();
-        this.image.src = this.task.imageData;
-        this.image.onload = function () {
-            self.reloadImage();
-            $(self.canvas).show();
-
-            self.markControl.trigger('task.load.finish');
-        }
+        this.image = this.task.imageData;
+        this.reloadImage();
+        $(this.canvas).show();
+        this.markControl.trigger('task.load.finish');
     }
 }
 

+ 23 - 25
stmms-web/src/main/webapp/static/mark-new/js/modules/thumbnail.js

@@ -1,5 +1,5 @@
 //给分板模块
-var thumbnail = function(option, success) {
+var thumbnail = function (option, success) {
     var object = new Thumbnail(option);
     success();
     return object;
@@ -16,16 +16,16 @@ function Thumbnail(option) {
     this.mousePosition = undefined;
 
     this.init();
-    
-    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+
+    this.markControl.on('task.get.before', this, function (event, context, eventObject) {
         this.task = undefined;
         this.render();
     });
-    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+    this.markControl.on('task.get.success', this, function (event, context, eventObject) {
         this.task = context.task;
         this.render();
     });
-    this.markControl.on('mark.setting.init', this, function(event, context, setting) {
+    this.markControl.on('mark.setting.init', this, function (event, context, setting) {
         var show = setting['thumbnail.show'];
         if (show != undefined && show == true) {
             self.toggle(true);
@@ -33,7 +33,7 @@ function Thumbnail(option) {
     });
 }
 
-Thumbnail.prototype.init = function() {
+Thumbnail.prototype.init = function () {
     var self = this;
     this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container);
     this.container.width(this.maxWidth);
@@ -49,13 +49,13 @@ Thumbnail.prototype.init = function() {
     this.container.content.width('100%');
     this.imageObject = this.container.content.find('img');
     this.imageObject.width('100%');
-    this.imageObject.bind('mouseover', function(e) {
+    this.imageObject.bind('mouseover', function (e) {
         self.updatePosition(e);
-    }).bind('mousemove', function(e) {
+    }).bind('mousemove', function (e) {
         self.updatePosition(e);
-    }).bind('mouseout', function(e) {
+    }).bind('mouseout', function (e) {
         self.updatePosition();
-    }).bind('click', function() {
+    }).bind('click', function () {
         if (self.show == true && self.task != undefined && self.mousePosition != undefined) {
             self.markControl.trigger('image.position.change', self.mousePosition.y / self.imageObject.height())
         }
@@ -64,7 +64,7 @@ Thumbnail.prototype.init = function() {
     this.container.draggable({
         containment: "window"
     });
-    this.container.header.find('#close-button').click(function() {
+    this.container.header.find('#close-button').click(function () {
         self.toggle(false);
         self.markControl.trigger('mark.setting.change', {
             'thumbnail.show': false
@@ -72,14 +72,14 @@ Thumbnail.prototype.init = function() {
     });
 
     this.control = getDom(this.control_dom, this.markControl).appendTo(this.markControl.container.assistant);
-    this.control.find('#show-thumbnail-button').click(function() {
+    this.control.find('#show-thumbnail-button').click(function () {
         self.markControl.container.assistant.hide();
         self.toggle(true);
         self.markControl.trigger('mark.setting.change', {
             'thumbnail.show': true
         });
     });
-    this.control.find('#hide-thumbnail-button').click(function() {
+    this.control.find('#hide-thumbnail-button').click(function () {
         self.markControl.container.assistant.hide();
         self.toggle(false);
         self.markControl.trigger('mark.setting.change', {
@@ -88,26 +88,24 @@ Thumbnail.prototype.init = function() {
     });
 }
 
-Thumbnail.prototype.render = function() {
+Thumbnail.prototype.render = function () {
     var self = this;
     var imageObject = this.imageObject;
-    if (this.task != undefined) {
-        imageObject[0].src = this.task.imageData;
-        imageObject[0].onload = function() {
-            if (imageObject[0].height > (self.markControl.container.height() * 0.8)) {
-                self.container.content.height(self.markControl.container.height() * 0.8);
-            } else {
-                self.container.content.height(imageObject[0].height);
-            }
-            imageObject.show();
+    if (this.task != undefined && this.task.imageData != undefined) {
+        imageObject[0].src = this.task.imageData.src;
+        if (imageObject[0].height > (self.markControl.container.height() * 0.8)) {
+            self.container.content.height(self.markControl.container.height() * 0.8);
+        } else {
+            self.container.content.height(imageObject[0].height);
         }
+        imageObject.show();
     } else {
         imageObject[0].src = '';
         imageObject.hide();
     }
 }
 
-Thumbnail.prototype.toggle = function(show) {
+Thumbnail.prototype.toggle = function (show) {
     if (show == true) {
         this.show = true;
         this.container.show();
@@ -117,7 +115,7 @@ Thumbnail.prototype.toggle = function(show) {
     }
 }
 
-Thumbnail.prototype.updatePosition = function(e) {
+Thumbnail.prototype.updatePosition = function (e) {
     var position = this.imageObject.offset();
     this.mousePosition = e != undefined ? {
         x: e.pageX - position.left,

+ 4 - 9
stmms-web/src/main/webapp/static/mark-track/js/modules/single-image-view.js

@@ -99,18 +99,13 @@ SingleImageView.prototype.init = function () {
 }
 
 SingleImageView.prototype.render = function () {
-    var self = this;
     $(this.canvas).hide();
     if (this.task != undefined && this.task.imageData != undefined) {
         //设置画布大小及背景颜色
-        this.image = new Image();
-        this.image.src = this.task.imageData;
-        this.image.onload = function () {
-            self.reloadImage();
-            $(self.canvas).show();
-
-            self.markControl.trigger('task.load.finish');
-        }
+        this.image = this.task.imageData;
+        this.reloadImage();
+        $(this.canvas).show();
+        this.markControl.trigger('task.load.finish');
     }
 }
 

+ 2 - 2
stmms-web/src/main/webapp/static/utils/image-utils.js

@@ -178,7 +178,7 @@ ImageLoader.prototype.combine = function (urls, canvas, config, onSuccess, onErr
         let maxWidth = 0
         let totalHeight = 0
         for (let i = 0; i < config.length; i++) {
-            let image = images[config[i] - 1]
+            let image = images[config[i].i - 1]
             //必须图片存在且正常加载配置才生效
             if (image.loaded === true) {
                 //计算最大宽度与合计高度
@@ -208,7 +208,7 @@ ImageLoader.prototype.combine = function (urls, canvas, config, onSuccess, onErr
         let layout = []
         let height = 0
         for (let i = 0; i < config.length; i++) {
-            let image = images[config[i] - 1]
+            let image = images[config[i].i - 1]
             if (image.loaded === true) {
                 context.drawImage(image, config[i].x, config[i].y, config[i].w, config[i].h, 0, height, config[i].w * ratio, config[i].h * ratio)
                 layout.push({