Procházet zdrojové kódy

新增用户工号、随机密码、评卷员及工作量导出等功能

ting.yin před 2 roky
rodič
revize
375f1c68af

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/UserExamDao.java

@@ -13,7 +13,7 @@ public interface UserExamDao extends PagingAndSortingRepository<UserExam, Intege
 
     List<UserExam> findByUserId(Integer userId);
 
-    UserExam findBySubjectCodeAndUserId(Integer examId, Integer userId);
+    UserExam findByExamIdAndUserId(Integer examId, Integer userId);
 
     @Modifying
     @Query("delete from UserExam su where su.userId=?1")

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java

@@ -20,6 +20,8 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
 
     private String name;
 
+    private String subjectCodeIn;
+
     public void orderById() {
         setSort(new Sort(Direction.ASC, "id"));
     }
@@ -72,4 +74,12 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
         this.name = name;
     }
 
+    public String getSubjectCodeIn() {
+        return subjectCodeIn;
+    }
+
+    public void setSubjectCodeIn(String subjectCodeIn) {
+        this.subjectCodeIn = subjectCodeIn;
+    }
+
 }

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

@@ -139,6 +139,16 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                 if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
+                if (StringUtils.isNotBlank(query.getSubjectCodeIn())) {
+                    String[] list = query.getSubjectCodeIn().split(",");
+                    if (list.length > 0) {
+                        Predicate[] sub = new Predicate[list.length];
+                        for (int i = 0; i < list.length; i++) {
+                            sub[i] = cb.equal(root.get("subjectCode"), list[i]);
+                        }
+                        predicates.add(cb.or(sub));
+                    }
+                }
                 if (query.getGroupNumber() != null) {
                     predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
                 }

+ 28 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/model/User.java

@@ -124,6 +124,18 @@ public class User implements Serializable {
     @Column(name = "description", length = 128, nullable = true)
     private String description;
 
+    /**
+     * 随机密码
+     */
+    @Column(name = "random_password", length = 64, nullable = true)
+    private String randomPassword;
+
+    /**
+     * 工号
+     */
+    @Column(name = "empno", length = 64, nullable = true)
+    private String empno;
+
     @ExcelField(title = "角色", align = 2, sort = 30)
     @Transient
     private String roleName;
@@ -281,4 +293,20 @@ public class User implements Serializable {
         this.description = description;
     }
 
+    public String getRandomPassword() {
+        return randomPassword;
+    }
+
+    public void setRandomPassword(String randomPassword) {
+        this.randomPassword = randomPassword;
+    }
+
+    public String getEmpno() {
+        return empno;
+    }
+
+    public void setEmpno(String empno) {
+        this.empno = empno;
+    }
+
 }

+ 3 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/UserService.java

@@ -30,9 +30,10 @@ public interface UserService {
 
     User findByAccount(Integer schoolId, String account);
 
-    void batchSaveMarker(int examId, Set<String> subjectCodes, Integer number, String password);
+    void batchSaveMarker(int examId, Set<String> subjectCodes, Integer number, String password, boolean random);
 
-    void batchSaveSubjectUser(int examId, Role role, Set<String> subjectCodes, Integer number, String password);
+    void batchSaveSubjectUser(int examId, Role role, Set<String> subjectCodes, Integer number, String password,
+            boolean random);
 
     public int findMaxNumberByLoginNameStart(String prefix);
 

+ 18 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/impl/UserServiceImpl.java

@@ -236,21 +236,21 @@ public class UserServiceImpl implements UserService {
 
     @Transactional
     @Override
-    public void batchSaveMarker(int examId, Set<String> subjectCodes, Integer number, String password) {
+    public void batchSaveMarker(int examId, Set<String> subjectCodes, Integer number, String password, boolean random) {
         if (subjectCodes.size() == 0) {
             List<ExamSubject> subjects = subjectService.list(examId);
             for (ExamSubject subject : subjects) {
-                saveMarkerBySubject(examId, number, password, subject.getCode());
+                saveMarkerBySubject(examId, number, password, subject.getCode(), random);
             }
         } else {
             for (String subjectCode : subjectCodes) {
-                saveMarkerBySubject(examId, number, password, subjectCode);
+                saveMarkerBySubject(examId, number, password, subjectCode, random);
             }
         }
 
     }
 
-    private void saveMarkerBySubject(int examId, Integer number, String password, String subjectCode) {
+    private void saveMarkerBySubject(int examId, Integer number, String password, String subjectCode, boolean random) {
         Exam exam = examService.findById(examId);
         List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subjectCode);
         for (MarkGroup group : groups) {
@@ -270,10 +270,16 @@ public class UserServiceImpl implements UserService {
                     user.setEnable(true);
                     user.setSchoolId(exam.getSchoolId());
                     user.setCreatedTime(new Date());
-                    if (StringUtils.isNotBlank(password)) {
+                    if (random) {
+                        password = String.valueOf(Math.random() * 9000 + 1000);
                         user.setPassword(EncryptUtils.md5(password));
+                        user.setRandomPassword(password);
                     } else {
-                        user.setPassword(EncryptUtils.md5(USER_PASSWORD));
+                        if (StringUtils.isNotBlank(password)) {
+                            user.setPassword(EncryptUtils.md5(password));
+                        } else {
+                            user.setPassword(EncryptUtils.md5(USER_PASSWORD));
+                        }
                     }
                     userDao.save(user);
                     Marker marker = new Marker();
@@ -292,20 +298,22 @@ public class UserServiceImpl implements UserService {
 
     @Transactional
     @Override
-    public void batchSaveSubjectUser(int examId, Role role, Set<String> subjectCodes, Integer number, String password) {
+    public void batchSaveSubjectUser(int examId, Role role, Set<String> subjectCodes, Integer number, String password,
+            boolean random) {
         if (subjectCodes.size() == 0) {
             List<ExamSubject> subjects = subjectService.list(examId);
             for (ExamSubject subject : subjects) {
-                saveSubjectUserBySubject(examId, number, role, subject.getCode(), password);
+                saveSubjectUserBySubject(examId, number, role, subject.getCode(), password, random);
             }
         } else {
             for (String subjectCode : subjectCodes) {
-                saveSubjectUserBySubject(examId, number, role, subjectCode, password);
+                saveSubjectUserBySubject(examId, number, role, subjectCode, password, random);
             }
         }
     }
 
-    private void saveSubjectUserBySubject(int examId, Integer number, Role role, String subjectCode, String password) {
+    private void saveSubjectUserBySubject(int examId, Integer number, Role role, String subjectCode, String password,
+            boolean random) {
         Exam exam = examService.findById(examId);
         List<SubjectUser> saveList = new ArrayList<SubjectUser>();
         int createNumber = 1;

+ 11 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/MarkerDTO.java

@@ -22,6 +22,9 @@ public class MarkerDTO {
     @ExcelField(title = "账号", align = 2, sort = 60)
     private String loginName;
 
+    @ExcelField(title = "密码", align = 2, sort = 70)
+    private String randomPassword;
+
     public MarkerDTO() {
     }
 
@@ -73,4 +76,12 @@ public class MarkerDTO {
         this.role = role;
     }
 
+    public String getRandomPassword() {
+        return randomPassword;
+    }
+
+    public void setRandomPassword(String randomPassword) {
+        this.randomPassword = randomPassword;
+    }
+
 }

+ 14 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/MarkerInfoDTO.java

@@ -25,10 +25,13 @@ public class MarkerInfoDTO {
     @ExcelField(title = "登录名", align = 2, sort = 60)
     private String loginName;
 
-    @ExcelField(title = "姓名", align = 2, sort = 70)
+    @ExcelField(title = "工号", align = 2, sort = 70)
+    private String empno;
+
+    @ExcelField(title = "姓名", align = 2, sort = 80)
     private String name;
 
-    @ExcelField(title = "评卷数量", align = 2, sort = 80)
+    @ExcelField(title = "评卷数量", align = 2, sort = 90)
     private long markedCount;
 
     public MarkerInfoDTO(Marker marker, ExamSubject subject, MarkGroup group) {
@@ -39,6 +42,7 @@ public class MarkerInfoDTO {
         setLoginName(marker.getUser().getLoginName());
         setName(marker.getUser().getName());
         setMarkedCount(marker.getMarkedCount());
+        setEmpno(marker.getUser().getEmpno());
     }
 
     public String getSubjectCode() {
@@ -105,4 +109,12 @@ public class MarkerInfoDTO {
         this.totalScore = totalScore;
     }
 
+    public String getEmpno() {
+        return empno;
+    }
+
+    public void setEmpno(String empno) {
+        this.empno = empno;
+    }
+
 }

+ 7 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -96,6 +96,12 @@ public class MarkerController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         query.setExamId(examId);
+        List<ExamSubject> subjectList = getExamSubject(examId, wu);
+        if (StringUtils.isBlank(query.getSubjectCode()) && wu.getRole() != Role.SCHOOL_ADMIN) {
+            List<String> subjectCodeIn = new ArrayList<String>();
+            subjectList.forEach(e -> subjectCodeIn.add(e.getCode()));
+            query.setSubjectCodeIn(StringUtils.join(subjectCodeIn, ","));
+        }
         query.orderById();
         query = markerService.findByQuery(query);
         for (Marker marker : query.getResult()) {
@@ -111,7 +117,7 @@ public class MarkerController extends BaseExamController {
             marker.setClassCount(classService.countByUserIdAndExamId(marker.getUserId(), examId));
         }
         model.addAttribute("query", query);
-        model.addAttribute("subjectList", getExamSubject(examId, wu));
+        model.addAttribute("subjectList", subjectList);
         return "modules/exam/markerList";
     }
 

+ 9 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserController.java

@@ -186,6 +186,7 @@ public class UserController extends BaseExamController {
                 String password = StringEscapeUtils.unescapeHtml(user.getPassword());
                 previous.setPassword(EncryptUtils.md5(password));
             }
+            previous.setEmpno(user.getEmpno());
             previous.setEnable(user.isEnable());
             previous.setDescription(user.getDescription());
             String message = validate(previous, subjectCodeString, examIdString);
@@ -362,7 +363,9 @@ public class UserController extends BaseExamController {
                     s.setGroupName(group.getQuestionTitle());
                     s.setGroupNumber(m.getGroupNumber());
                     s.setRole(Role.MARKER.getName());
-                    s.setLoginName(userService.findById(m.getUserId()).getLoginName());
+                    User u = userService.findById(m.getUserId());
+                    s.setLoginName(u.getLoginName());
+                    s.setRandomPassword(u.getRandomPassword());
                     list.add(s);
                 }
                 new ExportExcel("评卷员数据", MarkerDTO.class).setDataList(list).write(response, fileName).dispose();
@@ -452,13 +455,14 @@ public class UserController extends BaseExamController {
     @RequestMapping(value = "/batchSave", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
     public String batchSave(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam Role role, @RequestParam String password, @RequestParam Integer number,
-            @RequestParam String subjectCodeString) {
+            @RequestParam Role role, @RequestParam(required = false) String password, @RequestParam Integer number,
+            @RequestParam String subjectCodeString, @RequestParam boolean random) {
         int examId = getSessionExamId(request);
         if (Role.MARKER.equals(role)) {
-            userService.batchSaveMarker(examId, getSubjectCodeSet(subjectCodeString), number, password);
+            userService.batchSaveMarker(examId, getSubjectCodeSet(subjectCodeString), number, password, random);
         } else {
-            userService.batchSaveSubjectUser(examId, role, getSubjectCodeSet(subjectCodeString), number, password);
+            userService.batchSaveSubjectUser(examId, role, getSubjectCodeSet(subjectCodeString), number, password,
+                    random);
         }
         return "redirect:/admin/user/list";
     }

+ 8 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -158,8 +158,16 @@ public class MarkController extends BaseController {
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
     public ModelAndView reset(HttpServletRequest request, User user) {
         User current = RequestUtils.getWebUser(request).getUser();
+        if (current.getPassword().equalsIgnoreCase(EncryptUtils.md5(user.getPassword()))) {
+            ModelAndView modelAndView = new ModelAndView("modules/mark/reset");
+            modelAndView.addObject("message", "新密码不可与初始密码一致");
+            modelAndView.addObject("user", user);
+            modelAndView.addObject("nameVerify", nameVerify);
+            return modelAndView;
+        }
         current.setName(user.getName());
         current.setPassword(EncryptUtils.md5(user.getPassword()));
+        current.setRandomPassword(null);
         current.setLastLoginIp(RequestIPUtil.getIpAddress(request));
         current.setLastLoginTime(new Date());
         userService.save(current);

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

@@ -81,14 +81,17 @@
                         <input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }"
                                data-i18n-placeholder="user.reset.name"/>
                     </div>
+                    <div class="input-group">
+                        <input type="text" class="form-control required" id="empno" name="empno" placeholder="请输入工号" autocomplete="off"/>
+                    </div>
                     <div class="input-group">
                         <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
                     </div>
                     <div class="input-group">
                         <input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
                     </div>
-                    <div class="point hide">
-                        <em class="error"></em>
+                    <div class="point <c:if test="${message == null }">hide</c:if>">
+                        <em class="error">${message }</em>
                     </div>
                     <div class="login-btn">
                         <input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>

+ 5 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/reset.jsp

@@ -84,14 +84,17 @@
                         <input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }"
                                data-i18n-placeholder="user.reset.name"/>
                     </div>
+                    <div class="input-group">
+                        <input type="text" class="form-control required" id="empno" name="empno" placeholder="请输入工号" autocomplete="off"/>
+                    </div>
                     <div class="input-group">
                         <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
                     </div>
                     <div class="input-group">
                         <input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
                     </div>
-                    <div class="point hide">
-                        <em class="error"></em>
+                    <div class="point <c:if test="${message == null }">hide</c:if>">
+                        <em class="error">${message }</em>
                     </div>
                     <div class="login-btn">
                         <input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>

+ 15 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/user/userAdd.jsp

@@ -23,6 +23,14 @@
                     }
                 }
             });
+            $("#random-check").change(function () {
+                if ($("#random-check").is(':checked')) {
+                    $("#password").prop("disabled", "disabled");
+                } else {
+                	$("#random-check").prop("checked", false);
+                    $("#password").prop("disabled", "");
+                }
+            });
             $('#role-select').change(function () {
                 var role = $('#role-select').val();
                 if (role == '4') {
@@ -82,11 +90,17 @@
         <div class="controls">
             <input name="number" type="number" htmlEscape="false" max="100" min="1" class="required digits"/>
         </div>
+    </div>
+	<div class="control-group">
+        <label class="control-label">随机密码</label>
+        <div class="controls">
+            <input name="random" type="checkbox" id="random-check"/>
+        </div>
     </div>
     <div class="control-group">
         <label class="control-label">密码</label>
         <div class="controls">
-            <input name="password" type="text" class="required"/>
+            <input name="password" type="text" class="required" id="password"/>
         </div>
     </div>
 	<div class="control-group" id="subject-code-div">

+ 6 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/user/userEdit.jsp

@@ -70,6 +70,12 @@
         <div class="controls">
             <form:input path="name" htmlEscape="false" maxlength="32" class="required"/>
         </div>
+    </div>
+	<div class="control-group">
+        <label class="control-label">工号</label>
+        <div class="controls">
+            <form:input path="empno" htmlEscape="false" maxlength="32" class="required"/>
+        </div>
     </div>
     <div class="control-group">
         <label class="control-label">密码</label>

+ 30 - 0
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -98,6 +98,8 @@ CREATE TABLE `b_user`
     `scan_token`              	varchar(64) DEFAULT NULL COMMENT '扫描访问令牌',
     `scan_token_invalid_time` 	datetime    DEFAULT NULL COMMENT '扫描访问令牌刷新时间',
     `description` 				varchar(128) DEFAULT NULL COMMENT '描述',
+    `empno` 					varchar(128) DEFAULT NULL COMMENT '工号',
+    `random_password` 			varchar(64)  DEFAULT NULL COMMENT '随机密码',
     PRIMARY KEY (`id`),
     UNIQUE KEY `index1` (`login_name`),
     UNIQUE KEY `index2` (`school_id`, `related_account`),
@@ -488,6 +490,7 @@ CREATE TABLE `eb_subjective_score`
     `score`        double      NOT NULL COMMENT '小题得分',
     `unanswered_count`   	int(11)	NOT NULL COMMENT '未作答的步骤数量',
     `uncalculate`			tinyint (1) NOT NULL COMMENT '是否合分',
+    `rejected`				tinyint (1) NOT NULL COMMENT '是否被打回',
     PRIMARY KEY (`student_id`, `main_number`, `sub_number`),
     KEY `index1` (`exam_id`, `subject_code`, `main_number`, `main_score`)
 ) ENGINE = InnoDB
@@ -617,6 +620,33 @@ CREATE TABLE `m_library`
   DEFAULT CHARSET = utf8mb4 COMMENT ='评卷任务表';
 
 
+# Dump of table m_reject_history
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `m_reject_history`;
+CREATE TABLE `m_reject_history`
+(
+    `id`            int(11)     NOT NULL AUTO_INCREMENT COMMENT '自增主键',
+    `exam_id`       int(11)     NOT NULL COMMENT '考试ID',
+    `subject_code`  varchar(32) NOT NULL COMMENT '科目代码',
+    `group_number`  int(11)     NOT NULL COMMENT '大题号',
+    `exam_number`   varchar(64) NOT NULL COMMENT '准考证号',
+    `secret_number` varchar(64) NOT NULL COMMENT '考生密号',
+    `student_id`    int(11)     NOT NULL COMMENT '考生ID',
+    `library_id`    int(11)     NOT NULL COMMENT '评卷任务ID',
+    `marker_id`     int(11)     NOT NULL COMMENT '评卷员ID',
+    `user_id`       int(11)      DEFAULT NULL COMMENT '打回人ID',
+    `total_score`   double       DEFAULT NULL COMMENT '总分',
+    `score_list`    text		 DEFAULT NULL COMMENT '打回时给分明细',
+    `reject_score_list`    text		 DEFAULT NULL COMMENT '打回后给分明细',
+	`reason` 	varchar(128) DEFAULT NULL COMMENT '打回原因',
+    `create_time`   datetime    NOT NULL COMMENT '创建时间',
+    PRIMARY KEY (`id`),
+    KEY `index1` (`exam_id`, `subject_code`, `group_number`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='打回记录表';
+  
+  
 # Dump of table m_special_tag
 # ------------------------------------------------------------
 

+ 32 - 0
stmms-web/src/main/webapp/sql/upgrade/1.3.12.sql

@@ -2,8 +2,17 @@
 USE `stmms_ft`;
 -- 新增question字段
 ALTER TABLE eb_exam_question ADD COLUMN `name`	varchar(128) DEFAULT NULL COMMENT '名称';
+
 -- 新增eb_exam_subject字段
 ALTER TABLE eb_exam_subject ADD COLUMN `display_question_name`   tinyint(1)	NOT NULL COMMENT '显示题目昵称';
+
+-- 新增eb_subjective_score字段
+ALTER TABLE eb_subjective_score ADD COLUMN `rejected`	tinyint (1) NOT NULL COMMENT '是否被打回';
+
+-- 新增b_user字段
+ALTER TABLE b_user ADD COLUMN `empno` 			varchar(128) DEFAULT NULL COMMENT '工号';
+ALTER TABLE b_user ADD COLUMN `random_password` varchar(64)  DEFAULT NULL COMMENT '随机密码';
+
 -- 新增eb_user_exam用户考试关联表
 CREATE TABLE `eb_user_exam`
 (
@@ -14,3 +23,26 @@ CREATE TABLE `eb_user_exam`
     UNIQUE KEY `index1` (`user_id`, `exam_id`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='用户考试关联表';
+  
+-- 新增m_reject_history打回记录表
+CREATE TABLE `m_reject_history`
+(
+    `id`            int(11)     NOT NULL AUTO_INCREMENT COMMENT '自增主键',
+    `exam_id`       int(11)     NOT NULL COMMENT '考试ID',
+    `subject_code`  varchar(32) NOT NULL COMMENT '科目代码',
+    `group_number`  int(11)     NOT NULL COMMENT '大题号',
+    `exam_number`   varchar(64) NOT NULL COMMENT '准考证号',
+    `secret_number` varchar(64) NOT NULL COMMENT '考生密号',
+    `student_id`    int(11)     NOT NULL COMMENT '考生ID',
+    `library_id`    int(11)     NOT NULL COMMENT '评卷任务ID',
+    `marker_id`     int(11)     NOT NULL COMMENT '评卷员ID',
+    `user_id`       int(11)      DEFAULT NULL COMMENT '打回人ID',
+    `total_score`   double       DEFAULT NULL COMMENT '总分',
+    `score_list`    text		 DEFAULT NULL COMMENT '打回时给分明细',
+    `reject_score_list`    text		 DEFAULT NULL COMMENT '打回后给分明细',
+	`reason` 	varchar(128) DEFAULT NULL COMMENT '打回原因',
+    `create_time`   datetime    NOT NULL COMMENT '创建时间',
+    PRIMARY KEY (`id`),
+    KEY `index1` (`exam_id`, `subject_code`, `group_number`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='打回记录表';

+ 7 - 0
stmms-web/src/main/webapp/static/common/login.css

@@ -195,6 +195,13 @@ input#password2 {
 input#password2:focus {
 	background: url(../images/password-on.png) no-repeat 20px 50% #FFF;
 }
+input#empno {
+	background: url(../images/empno.png) no-repeat 20px 50%;
+	margin-top: 20px;
+}
+input#empno:focus {
+	background: url(../images/empno-on.png) no-repeat 20px 50% #FFF;
+}
 input:-internal-autofill-selected{
 	background: none!important;
 }