瀏覽代碼

增加评卷分组选择

ting.yin 4 年之前
父節點
當前提交
c33cb4e6f7

+ 2 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.biz.exam.dao;
 
 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;
@@ -52,10 +53,6 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query("update Marker m set m.markSetting=?2 where m.id=?1")
     public void updateMarkSettingById(Integer id, String setting);
 
-    // @Modifying
-    // @Query("update Marker m set m.openAccountId=?2 where m.id=?1")
-    // public void updateOpenAccountById(Integer id, Integer accountId);
-
     @Modifying
     @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "
             + "where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
@@ -77,16 +74,6 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query("select count(m) from Marker m where m.userId=?1")
     public long countByUserId(Integer userId);
 
-    // @Query(value =
-    // "select m from Marker m, MarkGroup g where m.openAccountId=?1 and m.enable=?2 "
-    // +
-    // "and m.examId=g.pk.examId and m.subjectCode=g.pk.subjectCode and m.groupNumber=g.pk.number and g.status in (?3)")
-    // List<Marker> findByOpenAccountIdAndEnableAndMarkStatus(Integer accountId,
-    // boolean enable, MarkStatus... status);
-
-    // @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3 and m.openAccountId=?4")
-    // long countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(Integer
-    // examId, String subjectCode, Integer number,
-    // Integer openAccountId);
+    public List<Marker> findByExamIdAndSubjectCodeAndUserId(Integer examId, String subjectCode, Integer userId);
 
 }

+ 1 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -13,15 +13,10 @@ public interface MarkerService {
 
     Marker findById(Integer id);
 
-    // Marker findByLoginName(String loginName);
-    //
     List<Marker> findByExamAndSubjectAndGroup(int examId, String subjectCode, int groupNumber);
 
     long countByExam(int examId);
 
-    // int batchCreate(ExamSubject subject, int groupNumber, int count, String
-    // password);
-
     MarkerSearchQuery findByQuery(MarkerSearchQuery query);
 
     List<Marker> getMarkCount(int examId);
@@ -32,8 +27,6 @@ public interface MarkerService {
 
     List<Marker> findMode(String commo);
 
-    // public List<Marker> findByStudentId(int studentId);
-
     public int batchSave(List<Marker> list);
 
     void updateMarkSetting(Integer id, String setting);
@@ -48,12 +41,5 @@ public interface MarkerService {
 
     void save(MarkGroup group, Integer[] userIds);
 
-    // void updateOpenAccountById(Integer id, Integer openAccountId);
-
-    // List<Marker> findByOpenAccountAndMarkStatus(Integer openAccountId,
-    // MarkStatus... status);
-
-    // long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId, String
-    // subjectCode, Integer groupNumber,
-    // Integer openAccountId);
+    List<Marker> findByExamAndSubjectAndUserId(Integer examId, String subjectCode, Integer userId);
 }

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

@@ -10,6 +10,7 @@ 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;
@@ -21,6 +22,7 @@ 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;
@@ -41,13 +43,7 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Transactional
     @Override
     public Marker save(Marker marker) {
-        // Marker previous = findByLoginName(marker.getLoginName());
-        // if (previous == null || (marker.getId() != null &&
-        // previous.getId().equals(marker.getId()))) {
         return markerDao.save(marker);
-        // } else {
-        // return null;
-        // }
     }
 
     @Transactional
@@ -56,23 +52,11 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         markerDao.updateMarkSettingById(id, setting);
     }
 
-    // @Transactional
-    // @Override
-    // public void updateOpenAccountById(Integer id, Integer accountId) {
-    // markerDao.updateOpenAccountById(id, accountId);
-    // }
-
     @Override
     public Marker findById(Integer id) {
         return markerDao.findOne(id);
     }
 
-    // @Override
-    // public Marker findByLoginName(String loginName) {
-    // List<Marker> list = markerDao.findByLoginName(loginName);
-    // return list != null && list.size() > 0 ? list.get(0) : null;
-    // }
-
     @Override
     public List<Marker> findByExamAndSubjectAndGroup(int examId, String subjectCode, int number) {
         return markerDao.findByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, number, null);
@@ -88,78 +72,6 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         return markerDao.countByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, number);
     }
 
-    // @Transactional
-    // @Override
-    // public int batchCreate(ExamSubject subject, int groupNumber, int count,
-    // String password) {
-    // int result = 0;
-    // if (subject != null && count > 0) {
-    // if (groupNumber > 0) {
-    // result = saveMarker(subject, groupNumber, count, password);
-    // } else {
-    // List<MarkGroup> groups =
-    // groupService.findByExamAndSubject(subject.getExamId(),
-    // subject.getCode());
-    // for (MarkGroup markGroup : groups) {
-    // result = result + saveMarker(subject, markGroup.getNumber(), count,
-    // password);
-    // }
-    // }
-    // }
-    // return result;
-    // }
-
-    // private int saveMarker(ExamSubject subject, int groupNumber, int count,
-    // String password) {
-    // int result = 0;
-    // int start = 1;
-    // Marker previous = findLastMarker(subject.getExamId(), subject.getCode());
-    // if (previous != null) {
-    // start = previous.getNumber() + 1;
-    // }
-    // int end = start + count - 1;
-    // for (; start <= end; start++) {
-    // Marker marker = new Marker();
-    // marker.setExamId(subject.getExamId());
-    // marker.setSubjectCode(subject.getCode());
-    // if (StringUtils.isEmpty(password)) {
-    // Random random = new Random();
-    // for (int i = 0; i < 6; i++) {
-    // password += random.nextInt(10);
-    // }
-    // marker.setPassword(password);
-    // password = "";// 随机码生产后将密码置空
-    // } else {
-    // marker.setPassword(password);
-    // }
-    // marker.setEnable(true);
-    // marker.buildLoginName(start);
-    // marker.setLoginName(marker.getLoginName());
-    // marker.setName(marker.getLoginName());
-    // marker.setGroupNumber(groupNumber);
-    // marker.setClassCount(0);
-    // if (save(marker) != null) {
-    // result++;
-    // }
-    // }
-    // return result;
-    // }
-
-    // private Marker findLastMarker(int examId, String subjectCode) {
-    // Marker marker = null;
-    // List<Marker> list = markerDao.findByExamIdAndSubjectCode(examId,
-    // subjectCode, new BaseQuery<Marker>(1, 1,
-    // new Sort(Direction.DESC, "id")));
-    // if (list != null && !list.isEmpty()) {
-    // marker = list.get(0);
-    // }
-    // if (marker != null) {
-    // return Marker.parseLoginName(marker.getLoginName());
-    // } else {
-    // return null;
-    // }
-    // }
-
     @Override
     public List<Marker> getMarkCount(int examId) {
         List<Marker> list = new LinkedList<Marker>();
@@ -180,8 +92,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 {
@@ -224,9 +136,8 @@ 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,8 +154,7 @@ 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);
     }
 
@@ -285,20 +195,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         this.batchSave(list);
     }
 
-    // @Override
-    // public List<Marker> findByOpenAccountAndMarkStatus(Integer accountId,
-    // MarkStatus... status) {
-    // return markerDao.findByOpenAccountIdAndEnableAndMarkStatus(accountId,
-    // true, status);
-    // }
-
-    // @Override
-    // public long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId,
-    // String subjectCode, Integer groupNumber,
-    // Integer openAccountId) {
-    // return
-    // markerDao.countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(examId,
-    // subjectCode, groupNumber,
-    // openAccountId);
-    // }
+    @Override
+    public List<Marker> findByExamAndSubjectAndUserId(Integer examId, String subjectCode, Integer userId) {
+        return markerDao.findByExamIdAndSubjectCodeAndUserId(examId, subjectCode, userId);
+    }
 }

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

@@ -154,8 +154,7 @@ public class MarkController extends BaseController {
     }
 
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
-    public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
-            @RequestParam Integer markerId) {
+    public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
         WebUser user = RequestUtils.getWebUser(request);
         ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
         Calendar rightNow = Calendar.getInstance();
@@ -228,8 +227,7 @@ public class MarkController extends BaseController {
                 markerService.save(marker);
             }
         }
-        ModelAndView view = new ModelAndView(
-                mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
+        ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
         view.addObject("forceMode", forceMode);
         view.addObject("sheetView", group.isSheetView());
         view.addObject("enableAllZero", group.isEnableAllZero());
@@ -273,9 +271,16 @@ public class MarkController extends BaseController {
         releaseMarker(marker);
 
         List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
+        List<Marker> markers = markerService.findByExamAndSubjectAndUserId(marker.getExamId(), marker.getSubjectCode(),
+                marker.getUserId());
+        markers.remove(marker);
+        for (Marker m : markers) {
+            m.setMarkSetting(null);
+        }
         ObjectMapper mapper = new ObjectMapper();
         try {
             modelAndView.addObject("problemTypes", mapper.writeValueAsString(problemTypes));
+            modelAndView.addObject("groups", mapper.writeValueAsString(markers));
         } catch (JsonProcessingException e) {
             log.error("MarkController-问题类型获取出错", e);
         }
@@ -383,9 +388,8 @@ public class MarkController extends BaseController {
             List<MarkLibrary> list = new ArrayList<MarkLibrary>();
             // 需要判断评卷员是否绑定了班级
             long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
-            list = libraryService
-                    .findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(),
-                            marker.getUserId(), classCount > 0, retry, 20);
+            list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                    marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
             if (list.isEmpty()) {
                 break;
             }
@@ -406,9 +410,8 @@ public class MarkController extends BaseController {
         int retry = 1;
         Task task = null;
         while (task == null) {
-            List<TrialLibrary> list = trialService
-                    .findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                            marker.getId(), retry, 10);
+            List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
+                    marker.getGroupNumber(), marker.getId(), retry, 10);
             if (list.isEmpty()) {
                 break;
             }
@@ -503,13 +506,11 @@ public class MarkController extends BaseController {
             // 试评查找给分历史记录
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
             if (secretNumber != null) {
-                historyList = trialService
-                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                                marker.getId(), secretNumber, pageNumber, pageSize, querySort);
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
             } else {
-                historyList = trialService
-                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                                marker.getId(), pageNumber, pageSize, querySort, null);
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());

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

@@ -40,7 +40,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/change-name.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/problem-process.js"></script>
-
+    <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/switch-group.js"></script>
 </head>
 <body>
 <div class="container-fluid" id="container"></div>
@@ -69,7 +69,7 @@
                 'json-view': {},
                 'mark-status': {
                     simple: false,
-                    subjectName: '${subject.displayName}'
+                    subjectName: '${subject.displayName}_${marker.groupNumber}'
                 },
                 'mark-history': {
                     pageSize: 10
@@ -87,6 +87,10 @@
                 </c:if>
                 'change-name': {
                     url: '${ctx}/mark/change-name'
+                },
+                'switch-group': {
+                    url: '${ctx}/mark/subject-select',
+                    groups:'${groups}'
                 }
             }
         });

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

@@ -39,7 +39,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/specialTag.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/problem-process.js"></script>
-
+	<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/switch-group.js"></script>
 </head>
 <body>
 <div class="container-fluid" id="container"></div>
@@ -73,6 +73,7 @@
                 'image-builder': {},
                 'mark-status': {
                     simple: false,
+                    subjectSelectUrl: '${ctx}/mark/subject-select',
                     subjectName: '${subject.displayName}_${marker.groupNumber}'
                 },
                 'mark-history': {
@@ -106,6 +107,10 @@
                 'change-name': {
                     url: '${ctx}/mark/change-name'
                 },
+                'switch-group': {
+                    url: '${ctx}/mark/subject-select',
+                    groups:'${groups}'
+                },
                 'view-sidebar': {
                     list: [
                         {

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

@@ -32,6 +32,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/specialTag.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/problem-process.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/switch-group.js"></script>
 </head>
 <body>
 <div class="container-fluid" id="container"></div>
@@ -65,7 +66,8 @@
                 'image-builder': {},
                 'mark-status': {
                     simple: false,
-                    subjectName: '${subject.displayName}'
+                    subjectSelectUrl: '${ctx}/mark/subject-select',
+                    subjectName: '${subject.displayName}_${marker.groupNumber}'
                 },
                 'mark-history': {
                     pageSize: 10
@@ -88,6 +90,10 @@
                 'change-name': {
                     url: '${ctx}/mark/change-name'
                 },
+                'switch-group': {
+                    url: '${ctx}/mark/subject-select',
+                    groups:'${groups}'
+                },
                 'specialTag': {},
                 'slice-view': {
                     server: '${fileServer}'

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

@@ -659,6 +659,7 @@ MarkControl.prototype.center_dom = '<div class="center-content span12"></div>';
 MarkControl.prototype.center_header_dom = '<div class="row-fluid"><div class="header"><p class="tips">\
 <em>\
 <a href="javascript:void(0)" id="assistant-button" class="btn"><i class="icon-wrench"></i><span data-i18n-text="mark.control.assistant">小助手</span></a></em>\
+<a href="##" class="btn" id="switch-group-button">切换分组</a>\
 <a class="useinfo" href="#"><i class="icon-user icon-white"></i><i id="mark-user-name"></i></a>\
 <a class="logout" id="logout-link" href="{logoutUrl}"><i class="icon-off icon-white"></i> <i id="logout-title" data-i18n-text="mark.control.logout">退出</i></a>\
 </p></div></div>';

+ 1 - 0
stmms-web/src/main/webapp/static/mark-new/js/mark-control.js

@@ -662,6 +662,7 @@ MarkControl.prototype.center_dom = '<div class="center-content span12"></div>';
 MarkControl.prototype.center_header_dom = '<div class="row-fluid"><div class="header"><p class="tips">\
 <em><a href="##" class="btn" id="switch-track-button" style="display:none" data-i18n-text="mark.control.mode.track">切换到轨迹模式</a>\
 <a href="javascript:void(0)" id="assistant-button" class="btn"><i class="icon-wrench"></i><span data-i18n-text="mark.control.assistant"> 小助手</span></a></em>\
+<a href="##" class="btn" id="switch-group-button">切换分组</a>\
 <a class="useinfo" href="#"><i class="icon-user icon-white"></i><i id="mark-user-name"></i></a>\
 <a class="logout" id="logout-link" href="{logoutUrl}"><i class="icon-off icon-white"></i> <i id="logout-title" data-i18n-text="mark.control.logout">退出</i></a>\
 </p></div></div>';

+ 1 - 1
stmms-web/src/main/webapp/static/mark-new/js/modules/change-name.js

@@ -1,4 +1,4 @@
-//评卷状态模块
+//修改用户名模块
 var change_name = function(option, success) {
     var object = new ChangeName(option);
     success();

+ 55 - 0
stmms-web/src/main/webapp/static/mark-new/js/modules/switch-group.js

@@ -0,0 +1,55 @@
+//切换分组模块
+var switch_group = function(option, success) {
+    var object = new SwitchGroup(option);
+    success();
+    return object;
+}
+
+function SwitchGroup(option) {
+    this.markControl = option.markControl;
+    this.url = option.url;
+    this.groups =JSON.parse(option.groups);
+    this.popover = getDom(this.popover_dom, this.markControl);
+    this.popover.cancelButton = this.popover.find('p.image-close');
+    this.popover.submitButton = this.popover.find('a.btn');
+    this.popover.appendTo(this.markControl.container);
+    $("#groupForm").attr("action", this.url);
+
+    var self = this;
+    if(this.groups.length > 0){
+    	for (var i = 0; i < this.groups.length; i++) {
+    		var name = getDom("<option value="+this.groups[i].id+">分组序号:"+this.groups[i].groupNumber+"</option>").appendTo(self.popover.find('#groupSelect'));
+    	}
+    }
+    
+    
+    this.markControl.container.header.find('#switch-group-button').click(function() {
+        self.toggle(true);
+    });
+    this.popover.cancelButton.click(function() {
+        self.toggle(false);
+    });
+    this.popover.submitButton.click(function() {
+    	var markerId= self.popover.find('#groupSelect').val();
+    	if(markerId==0){
+    		return;
+    	}
+    	$("#groupForm").submit();
+    });
+}
+
+SwitchGroup.prototype.toggle = function(enable) {
+    if (enable == true) {
+        this.enable = true;
+        this.popover.show();
+    } else {
+        this.enable = false;
+        this.popover.hide();
+    }
+}
+
+SwitchGroup.prototype.popover_dom = '<div class="message-popover" style="display:none"><div class="popover-header">\
+<p class="title" >切换分组</p><p class="image-close"><img src="{staticServer}/mark-new/images/images-close.png" /></p></div>\
+<div class="popover-cont"><form id="groupForm" method="post"><select name="markerId" id="groupSelect"><option value="0">请选择</option></select></form></div>\
+<a href="#" class="btn btn-small btn-info " id="groupFormSubmit" data-i18n-text="mark.change.confirm">确定</a>\
+</div>';

+ 1 - 0
stmms-web/src/main/webapp/static/mark-track/js/mark-control.js

@@ -658,6 +658,7 @@ MarkControl.prototype.center_dom = '<div class="center-content span12"></div>';
 MarkControl.prototype.center_header_dom = '<div class="row-fluid"><div class="header"><p class="tips">\
 <em><a href="##" class="btn" id="switch-common-button" style="display:none" data-i18n-text="mark.control.mode.common">切换到普通模式</a>\
 <a href="javascript:void(0)" id="assistant-button" class="btn"><i class="icon-wrench"></i><span data-i18n-text="mark.control.assistant"> 小助手</span></a></em>\
+<a href="##" class="btn" id="switch-group-button">切换分组</a>\
 <a class="useinfo" href="#"><i class="icon-user icon-white"></i><i id="mark-user-name"></i></a>\
 <a class="logout" id="logout-link" href="{logoutUrl}"><i class="icon-off icon-white"></i> <i id="logout-title" data-i18n-text="mark.control.logout">退出</i></a>\
 </p></div></div>';