Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

hfy 4 ay önce
ebeveyn
işleme
a80b7acb40

+ 9 - 0
src/main/java/com/jeesite/modules/mes/dao/MesEmployeeDao.java

@@ -0,0 +1,9 @@
+package com.jeesite.modules.mes.dao;
+
+import com.jeesite.common.dao.CrudDao;
+import com.jeesite.common.mybatis.annotation.MyBatisDao;
+import com.jeesite.modules.mes.entity.MesEmployee;
+
+@MyBatisDao
+public interface MesEmployeeDao extends CrudDao<MesEmployee> {
+}

+ 186 - 0
src/main/java/com/jeesite/modules/mes/entity/MesEmployee.java

@@ -0,0 +1,186 @@
+package com.jeesite.modules.mes.entity;
+
+import com.jeesite.common.entity.DataEntity;
+import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.Table;
+import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.modules.sys.entity.User;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+@Table(name="js_sys_employee", alias="a", label="员工信息", columns={
+		@Column(name="emp_code", attrName="empCode", label="员工编码", isPK=true),
+		@Column(name="emp_name", attrName="empName", label="员工姓名", queryType=QueryType.LIKE),
+		@Column(name="emp_name_en", attrName="empNameEn", label="员工英文名"),
+		@Column(name="emp_no", attrName="empNo", label="员工工号", queryType=QueryType.LIKE),
+		@Column(name="office_code", attrName="officeCode", label="机构编码"),
+		@Column(name="office_name", attrName="officeName", label="机构名称", queryType=QueryType.LIKE),
+		@Column(name="company_code", attrName="companyCode", label="公司编码"),
+		@Column(name="company_name", attrName="companyName", label="公司名称"),
+		@Column(name="post_code", attrName="postCode", label="岗位编码"),
+		@Column(name="post_name", attrName="postName", label="岗位名称", queryType=QueryType.LIKE),
+		@Column(name="status", attrName="status", label="状态", isUpdate=false),
+		@Column(name="create_by", attrName="createBy", label="创建者", isUpdate=false, isQuery=false),
+		@Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false, isUpdateForce=true),
+		@Column(name="update_by", attrName="updateBy", label="更新者", isQuery=false),
+		@Column(name="update_date", attrName="updateDate", label="更新时间", isQuery=false, isUpdateForce=true),
+		@Column(name="remarks", attrName="remarks", label="备注信息", queryType=QueryType.LIKE),
+		@Column(name="corp_code", attrName="corpCode", label="租户代码", isQuery=false),
+		@Column(name="corp_name", attrName="corpName", label="租户名称", isQuery=false),
+	}, joinTable={
+		@JoinTable(type=JoinTable.Type.LEFT_JOIN, entity= User.class, attrName="this", alias="u",
+				on="u.ref_code = a.emp_code AND u.user_type = 'employee' AND u.status <> '1'",
+				columns={
+						@Column(name="user_code", attrName="userCode", label="用户编码"),
+						@Column(name="login_code", attrName="loginCode", label="登录账号"),
+						@Column(name="status", attrName="userStatus", label="账号状态"),
+				}),
+	}, orderBy="a.update_date DESC"
+)
+public class MesEmployee extends DataEntity<MesEmployee> {
+
+	private static final long serialVersionUID = 1L;
+
+	private String empCode;
+	private String empName;
+	private String empNameEn;
+	private String empNo;
+	private String officeCode;
+	private String officeName;
+	private String companyCode;
+	private String companyName;
+	private String postCode;
+	private String postName;
+	private String userCode;
+	private String loginCode;
+	private String userStatus;
+
+	public MesEmployee() {
+		this(null);
+	}
+
+	public MesEmployee(String empCode) {
+		super(empCode);
+		this.empCode = empCode;
+	}
+
+	@NotBlank(message="员工姓名不能为空")
+	@Size(min=0, max=100, message="员工姓名长度不能超过 100 个字符")
+	public String getEmpName() {
+		return empName;
+	}
+
+	public void setEmpName(String empName) {
+		this.empName = empName;
+	}
+
+	@Size(min=0, max=64, message="员工编码长度不能超过 64 个字符")
+	public String getEmpCode() {
+		return empCode;
+	}
+
+	public void setEmpCode(String empCode) {
+		this.empCode = empCode;
+		this.id = empCode;
+	}
+
+	@Size(min=0, max=100, message="员工英文名长度不能超过 100 个字符")
+	public String getEmpNameEn() {
+		return empNameEn;
+	}
+
+	public void setEmpNameEn(String empNameEn) {
+		this.empNameEn = empNameEn;
+	}
+
+	@Size(min=0, max=100, message="员工工号长度不能超过 100 个字符")
+	public String getEmpNo() {
+		return empNo;
+	}
+
+	public void setEmpNo(String empNo) {
+		this.empNo = empNo;
+	}
+
+	@NotBlank(message="归属机构不能为空")
+	@Size(min=0, max=64, message="机构编码长度不能超过 64 个字符")
+	public String getOfficeCode() {
+		return officeCode;
+	}
+
+	public void setOfficeCode(String officeCode) {
+		this.officeCode = officeCode;
+	}
+
+	@NotBlank(message="归属机构名称不能为空")
+	@Size(min=0, max=100, message="机构名称长度不能超过 100 个字符")
+	public String getOfficeName() {
+		return officeName;
+	}
+
+	public void setOfficeName(String officeName) {
+		this.officeName = officeName;
+	}
+
+	@Size(min=0, max=64, message="公司编码长度不能超过 64 个字符")
+	public String getCompanyCode() {
+		return companyCode;
+	}
+
+	public void setCompanyCode(String companyCode) {
+		this.companyCode = companyCode;
+	}
+
+	@Size(min=0, max=200, message="公司名称长度不能超过 200 个字符")
+	public String getCompanyName() {
+		return companyName;
+	}
+
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+
+	@Size(min=0, max=64, message="岗位编码长度不能超过 64 个字符")
+	public String getPostCode() {
+		return postCode;
+	}
+
+	public void setPostCode(String postCode) {
+		this.postCode = postCode;
+	}
+
+	@Size(min=0, max=100, message="岗位名称长度不能超过 100 个字符")
+	public String getPostName() {
+		return postName;
+	}
+
+	public void setPostName(String postName) {
+		this.postName = postName;
+	}
+
+	public String getUserCode() {
+		return userCode;
+	}
+
+	public void setUserCode(String userCode) {
+		this.userCode = userCode;
+	}
+
+	public String getLoginCode() {
+		return loginCode;
+	}
+
+	public void setLoginCode(String loginCode) {
+		this.loginCode = loginCode;
+	}
+
+	public String getUserStatus() {
+		return userStatus;
+	}
+
+	public void setUserStatus(String userStatus) {
+		this.userStatus = userStatus;
+	}
+}

+ 80 - 0
src/main/java/com/jeesite/modules/mes/service/MesEmployeeService.java

@@ -0,0 +1,80 @@
+package com.jeesite.modules.mes.service;
+
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.service.CrudService;
+import com.jeesite.modules.mes.dao.MesEmployeeDao;
+import com.jeesite.modules.mes.entity.MesEmployee;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class MesEmployeeService extends CrudService<MesEmployeeDao, MesEmployee> {
+
+	private static final String DEFAULT_OFFICE_CODE = "SD";
+	private static final String DEFAULT_OFFICE_NAME = "安徽裕洋新能源科技有限公司";
+	private static final String DEFAULT_COMPANY_CODE = "SD";
+	private static final String DEFAULT_COMPANY_NAME = "安徽裕洋新能源科技有限公司";
+
+	@Override
+	public MesEmployee get(MesEmployee mesEmployee) {
+		return super.get(mesEmployee);
+	}
+
+	@Override
+	public Page<MesEmployee> findPage(MesEmployee mesEmployee) {
+		return super.findPage(mesEmployee);
+	}
+
+	@Override
+	public List<MesEmployee> findList(MesEmployee mesEmployee) {
+		return super.findList(mesEmployee);
+	}
+
+	@Override
+	@Transactional
+	public void save(MesEmployee mesEmployee) {
+		if (StringUtils.isBlank(mesEmployee.getEmpCode())) {
+			mesEmployee.setEmpCode(buildEmpCode(mesEmployee));
+			mesEmployee.setIsNewRecord(true);
+		}
+		if (StringUtils.isBlank(mesEmployee.getEmpNameEn())) {
+			mesEmployee.setEmpNameEn("");
+		}
+		if (StringUtils.isBlank(mesEmployee.getOfficeCode())) {
+			mesEmployee.setOfficeCode(DEFAULT_OFFICE_CODE);
+		}
+		if (StringUtils.isBlank(mesEmployee.getOfficeName())) {
+			mesEmployee.setOfficeName(DEFAULT_OFFICE_NAME);
+		}
+		if (StringUtils.isBlank(mesEmployee.getCompanyCode())) {
+			mesEmployee.setCompanyCode(DEFAULT_COMPANY_CODE);
+		}
+		if (StringUtils.isBlank(mesEmployee.getCompanyName())) {
+			mesEmployee.setCompanyName(DEFAULT_COMPANY_NAME);
+		}
+		if (StringUtils.isBlank(mesEmployee.getCorpCode())) {
+			mesEmployee.setCorpCode("0");
+		}
+		if (StringUtils.isBlank(mesEmployee.getCorpName())) {
+			mesEmployee.setCorpName("JeeSite");
+		}
+		super.save(mesEmployee);
+	}
+
+	private String buildEmpCode(MesEmployee employee) {
+		if (StringUtils.isNotBlank(employee.getEmpNo())) {
+			return employee.getEmpNo().trim();
+		}
+		return "emp_" + UUID.randomUUID().toString().replace("-", "").substring(0, 12);
+	}
+
+	@Override
+	@Transactional
+	public void updateStatus(MesEmployee mesEmployee) {
+		super.updateStatus(mesEmployee);
+	}
+}

+ 108 - 6
src/main/java/com/jeesite/modules/mes/web/EmpUserCustomController.java

@@ -3,15 +3,18 @@ package com.jeesite.modules.mes.web;
 import com.jeesite.common.config.Global;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesEmployee;
+import com.jeesite.modules.mes.service.MesEmployeeService;
 import com.jeesite.modules.sys.entity.EmpUser;
 import com.jeesite.modules.sys.entity.EmployeeOffice;
 import com.jeesite.modules.sys.entity.Role;
+import com.jeesite.modules.sys.entity.User;
 import com.jeesite.modules.sys.service.EmpUserService;
+import com.jeesite.modules.sys.service.UserService;
 import com.jeesite.modules.sys.web.user.EmpUserController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -30,6 +33,12 @@ public class EmpUserCustomController extends BaseController {
     @Autowired
     private EmpUserService empUserService;
 
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private MesEmployeeService mesEmployeeService;
+
     @ModelAttribute
     public EmpUser get(String userCode, boolean isNewRecord) {
         return empUserService.get(userCode, isNewRecord);
@@ -103,11 +112,25 @@ public class EmpUserCustomController extends BaseController {
 
     @RequestMapping(value = "save")
     @ResponseBody
-    public String save(@Validated EmpUser empUser, String oldLoginCode, HttpServletRequest request) {
+    public String save(EmpUser empUser, String oldLoginCode, HttpServletRequest request) {
+        String loginCode = StringUtils.trim(empUser.getLoginCode());
+        empUser.setLoginCode(loginCode);
+        if (StringUtils.isBlank(loginCode)) {
+            return renderResult(Global.FALSE, "保存用户失败,登录账号不能为空。");
+        }
+        if (loginCode.length() < 2) {
+            return renderResult(Global.FALSE, "保存用户失败,登录账号至少输入 2 个字符。");
+        }
+        if (empUser.getEmployee() == null || StringUtils.isBlank(empUser.getEmployee().getEmpNo())) {
+            return renderResult(Global.FALSE, "保存用户失败,员工工号不能为空。");
+        }
+        if (empUser.getEmployee() == null || StringUtils.isBlank(empUser.getEmployee().getEmpName())) {
+            return renderResult(Global.FALSE, "保存用户失败,员工姓名不能为空。");
+        }
         EmpUser existUser = new EmpUser();
-        existUser.setLoginCode(empUser.getLoginCode());
+        existUser.setLoginCode(loginCode);
         List<EmpUser> uList = empUserService.findList(existUser);
-        if (uList != null && !uList.isEmpty()) {
+        if (hasOtherUser(uList, empUser.getUserCode())) {
             return renderResult(Global.FALSE, "保存用户失败,登录账号已存在(不能与原账号相同),请修改登录账号!");
         }
 
@@ -115,11 +138,90 @@ public class EmpUserCustomController extends BaseController {
             EmpUser where = new EmpUser();
             where.setUserName(empUser.getUserName());
             List<EmpUser> list = empUserService.findList(where);
-            if (list != null && !list.isEmpty()) {
+            if (hasOtherUser(list, empUser.getUserCode())) {
                 return renderResult(Global.FALSE, "保存用户失败,用户昵称已存在(不能与原昵称相同),请修改用户昵称!");
             }
         }
 
+        if (StringUtils.isBlank(empUser.getUserType())) {
+            empUser.setUserType("employee");
+        }
+        MesEmployee selectedEmployee = findSelectedEmployee(empUser);
+        String selectedEmployeeError = checkSelectedEmployee(empUser, selectedEmployee);
+        if (StringUtils.isNotBlank(selectedEmployeeError)) {
+            return renderResult(Global.FALSE, selectedEmployeeError);
+        }
+        if (selectedEmployee != null) {
+            User boundUser = findBoundUser(selectedEmployee);
+            if (boundUser != null && (StringUtils.isBlank(empUser.getUserCode())
+                    || !StringUtils.equals(boundUser.getUserCode(), empUser.getUserCode()))) {
+                return renderResult(Global.FALSE, "保存用户失败,该员工已创建账号:" + boundUser.getLoginCode());
+            }
+            bindSelectedEmployeeUser(empUser, selectedEmployee);
+            userService.save(empUser);
+            return renderResult(Global.TRUE, "保存用户 '" + empUser.getLoginCode() + "' 成功");
+        }
         return empUserController.save(empUser, oldLoginCode, request);
     }
-}
+
+    private MesEmployee findSelectedEmployee(EmpUser empUser) {
+        if (empUser.getEmployee() == null) {
+            return null;
+        }
+        if (StringUtils.isNotBlank(empUser.getEmployee().getEmpCode())) {
+            MesEmployee employee = mesEmployeeService.get(new MesEmployee(empUser.getEmployee().getEmpCode()));
+            if (employee != null) {
+                return employee;
+            }
+        }
+        if (StringUtils.isNotBlank(empUser.getEmployee().getEmpNo())) {
+            MesEmployee where = new MesEmployee();
+            where.setEmpNo(StringUtils.trim(empUser.getEmployee().getEmpNo()));
+            List<MesEmployee> employees = mesEmployeeService.findList(where);
+            if (employees != null && !employees.isEmpty()) {
+                return employees.get(0);
+            }
+        }
+        return null;
+    }
+
+    private String checkSelectedEmployee(EmpUser empUser, MesEmployee employee) {
+        if (employee != null && StringUtils.isNotBlank(employee.getUserCode())
+                && (StringUtils.isBlank(empUser.getUserCode()) || !StringUtils.equals(employee.getUserCode(), empUser.getUserCode()))) {
+            return "保存用户失败,该员工已创建账号:" + employee.getLoginCode();
+        }
+        return null;
+    }
+
+    private User findBoundUser(MesEmployee employee) {
+        if (employee == null || StringUtils.isBlank(employee.getEmpCode())) {
+            return null;
+        }
+        User query = new User();
+        query.setUserType("employee");
+        query.setRefCode(employee.getEmpCode());
+        return userService.getByUserTypeAndRefCode(query);
+    }
+
+    private void bindSelectedEmployeeUser(EmpUser empUser, MesEmployee employee) {
+        empUser.setUserType("employee");
+        if (StringUtils.isBlank(empUser.getMgrType())) {
+            empUser.setMgrType("0");
+        }
+        empUser.setRefCode(employee.getEmpCode());
+        empUser.setRefName(employee.getEmpName());
+        empUser.setEmployee(null);
+    }
+
+    private boolean hasOtherUser(List<EmpUser> userList, String userCode) {
+        if (userList == null || userList.isEmpty()) {
+            return false;
+        }
+        for (EmpUser user : userList) {
+            if (StringUtils.isBlank(userCode) || !StringUtils.equals(userCode, user.getUserCode())) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

+ 1 - 1
src/main/java/com/jeesite/modules/mes/web/MesDevicePreventTaskController.java

@@ -154,7 +154,7 @@ public class MesDevicePreventTaskController extends BaseController {
 
 		List<String> mlps = new ArrayList<>();
 		for(MesLineProcessUser mesLineProcessUser1:list){
-			mlps.add(mesLineProcessUser1.getId());
+			mlps.add(mesLineProcessUser1.getLineProcessId());
 		}
 
 		MesLineProcess mesLineProcess = new MesLineProcess();

+ 120 - 0
src/main/java/com/jeesite/modules/mes/web/MesEmployeeController.java

@@ -0,0 +1,120 @@
+package com.jeesite.modules.mes.web;
+
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesEmployee;
+import com.jeesite.modules.mes.service.MesEmployeeService;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@Controller
+@RequestMapping(value = "${adminPath}/mes/mesEmployee")
+public class MesEmployeeController extends BaseController {
+
+	@Autowired
+	private MesEmployeeService mesEmployeeService;
+
+	@ModelAttribute
+	public MesEmployee get(String empCode, boolean isNewRecord) {
+		if (StringUtils.isNotBlank(empCode)) {
+			MesEmployee employee = mesEmployeeService.get(new MesEmployee(empCode));
+			if (employee != null) {
+				return employee;
+			}
+		}
+		MesEmployee employee = new MesEmployee();
+		employee.setIsNewRecord(isNewRecord);
+		return employee;
+	}
+
+	@RequiresPermissions("mes:mesEmployee:view")
+	@RequestMapping(value = {"list", ""})
+	public String list(MesEmployee mesEmployee, Model model) {
+		model.addAttribute("mesEmployee", mesEmployee);
+		return "modules/mes/mesEmployeeList";
+	}
+
+	@RequiresPermissions(value={"mes:mesEmployee:view", "sys:empUser:edit"}, logical= Logical.OR)
+	@RequestMapping(value = "listData")
+	@ResponseBody
+	public Page<MesEmployee> listData(MesEmployee mesEmployee, HttpServletRequest request, HttpServletResponse response) {
+		mesEmployee.setPage(new Page<>(request, response));
+		return mesEmployeeService.findPage(mesEmployee);
+	}
+
+	@RequiresPermissions("mes:mesEmployee:view")
+	@RequestMapping(value = "form")
+	public String form(MesEmployee mesEmployee, Model model) {
+		model.addAttribute("mesEmployee", mesEmployee);
+		model.addAttribute("ctrlPermi", Global.getConfig("user.adminCtrlPermi", "2"));
+		return "modules/mes/mesEmployeeForm";
+	}
+
+	@RequiresPermissions("mes:mesEmployee:edit")
+	@PostMapping(value = "save")
+	@ResponseBody
+	public String save(@Validated MesEmployee mesEmployee) {
+		mesEmployeeService.save(mesEmployee);
+		return renderResult(Global.TRUE, text("保存员工信息成功!"));
+	}
+
+	@RequiresPermissions("mes:mesEmployee:edit")
+	@RequestMapping(value = "disable")
+	@ResponseBody
+	public String disable(MesEmployee mesEmployee) {
+		mesEmployee.setStatus(MesEmployee.STATUS_DISABLE);
+		mesEmployeeService.updateStatus(mesEmployee);
+		return renderResult(Global.TRUE, text("停用员工信息成功"));
+	}
+
+	@RequiresPermissions("mes:mesEmployee:edit")
+	@RequestMapping(value = "enable")
+	@ResponseBody
+	public String enable(MesEmployee mesEmployee) {
+		mesEmployee.setStatus(MesEmployee.STATUS_NORMAL);
+		mesEmployeeService.updateStatus(mesEmployee);
+		return renderResult(Global.TRUE, text("启用员工信息成功"));
+	}
+
+	@RequiresPermissions("mes:mesEmployee:edit")
+	@RequestMapping(value = "delete")
+	@ResponseBody
+	public String delete(MesEmployee mesEmployee) {
+		mesEmployeeService.delete(mesEmployee);
+		return renderResult(Global.TRUE, text("删除员工信息成功!"));
+	}
+
+	@RequestMapping(value = "search")
+	@ResponseBody
+	public List<MesEmployee> search(String keyword) {
+		MesEmployee employee = new MesEmployee();
+		if (StringUtils.isNotBlank(keyword)) {
+			employee.setEmpName(keyword);
+		}
+		employee.setStatus(MesEmployee.STATUS_NORMAL);
+		return mesEmployeeService.findList(employee);
+	}
+
+	@RequestMapping(value = "searchPage")
+	public String searchPage(String keyword, Model model) {
+		MesEmployee mesEmployee = new MesEmployee();
+		mesEmployee.setEmpName(keyword);
+		model.addAttribute("mesEmployee", mesEmployee);
+		model.addAttribute("keyword", keyword);
+		return "modules/mes/mesEmployeeSelect";
+	}
+}

+ 100 - 0
src/main/resources/views/modules/mes/mesEmployeeForm.html

@@ -0,0 +1,100 @@
+<% layout('/layouts/default.html', {title: '员工信息管理', libs: ['validate']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header with-border">
+			<div class="box-title">
+				<i class="fa icon-user"></i> ${text(mesEmployee.isNewRecord ? '新增员工' : '编辑员工')}
+			</div>
+			<div class="box-tools pull-right">
+				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+			</div>
+		</div>
+		<#form:form id="inputForm" model="${mesEmployee}" action="${ctx}/mes/mesEmployee/save" method="post" class="form-horizontal">
+			<div class="box-body">
+				<div class="form-unit">${text('基本信息')}</div>
+				<#form:hidden path="empCode"/>
+				<div class="row">
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4"><span class="required">*</span> ${text('员工姓名')}:</label>
+							<div class="col-sm-8">
+								<#form:input path="empName" maxlength="100" class="form-control required"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4">${text('员工工号')}:</label>
+							<div class="col-sm-8">
+								<#form:input path="empNo" maxlength="100" class="form-control"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4"><span class="required">*</span> ${text('归属机构')}:</label>
+							<div class="col-sm-8">
+								<#form:treeselect id="office" title="${text('机构选择')}"
+									path="officeCode" labelPath="officeName"
+									url="${ctx}/sys/office/treeData?ctrlPermi=${ctrlPermi}"
+									class="required" allowClear="false" canSelectRoot="true" canSelectParent="true"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4">${text('岗位')}:</label>
+							<div class="col-sm-8">
+								<#form:treeselect id="post" title="${text('岗位选择')}"
+									path="postCode" labelPath="postName"
+									url="${ctx}/sys/post/treeData"
+									allowClear="true" canSelectParent="true"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4">${text('状态')}:</label>
+							<div class="col-sm-8">
+								<#form:radiobuttons path="status" dictType="sys_search_status" class="required"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-12">
+						<div class="form-group">
+							<label class="control-label col-sm-2">${text('备注信息')}:</label>
+							<div class="col-sm-10">
+								<#form:textarea path="remarks" rows="4" maxlength="500" class="form-control"/>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="box-footer">
+				<div class="row">
+					<div class="col-sm-offset-2 col-sm-10">
+						<% if (hasPermi('mes:mesEmployee:edit')){ %>
+							<button type="submit" class="btn btn-primary" id="btnSubmit"><i class="fa fa-check"></i> ${text('保存')}</button>&nbsp;
+						<% } %>
+						<button type="button" class="btn btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关闭')}</button>
+					</div>
+				</div>
+			</div>
+		</#form:form>
+	</div>
+</div>
+<% } %>
+<script>
+$("#inputForm").validate({
+	submitHandler: function(form){
+		js.ajaxSubmitForm($(form), function(data){
+			js.showMessage(data.message);
+			if(data.result == Global.TRUE){
+				js.closeCurrentTabPage(function(contentWindow){
+					contentWindow.page();
+				});
+			}
+		}, "json");
+    }
+});
+</script>

+ 93 - 0
src/main/resources/views/modules/mes/mesEmployeeList.html

@@ -0,0 +1,93 @@
+<% layout('/layouts/default.html', {title: '员工信息管理', libs: ['dataGrid']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header">
+			<div class="box-title">
+				<i class="fa icon-people"></i> ${text('员工信息管理')}
+			</div>
+			<div class="box-tools pull-right">
+				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<% if(hasPermi('mes:mesEmployee:edit')){ %>
+					<a href="${ctx}/mes/mesEmployee/form" class="btn btn-default btnTool" title="${text('新增员工')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
+				<% } %>
+				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
+			</div>
+		</div>
+		<div class="box-body">
+			<#form:form id="searchForm" model="${mesEmployee}" action="${ctx}/mes/mesEmployee/listData" method="post" class="form-inline hide"
+					data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
+				<div class="form-group">
+					<label class="control-label">${text('员工姓名')}:</label>
+					<div class="control-inline">
+						<#form:input path="empName" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('员工工号')}:</label>
+					<div class="control-inline">
+						<#form:input path="empNo" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('所属机构')}:</label>
+					<div class="control-inline">
+						<#form:input path="officeName" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('岗位')}:</label>
+					<div class="control-inline">
+						<#form:input path="postName" maxlength="100" class="form-control width-120"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<label class="control-label">${text('状态')}:</label>
+					<div class="control-inline width-120">
+						<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control isQuick"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
+					<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
+				</div>
+			</#form:form>
+			<table id="dataGrid"></table>
+			<div id="dataGridPage"></div>
+		</div>
+	</div>
+</div>
+<% } %>
+<script>
+$('#dataGrid').dataGrid({
+	searchForm: $("#searchForm"),
+	columnModel: [
+		{header:'${text("员工姓名")}', name:'empName', index:'a.emp_name', width:120, align:"center", frozen:true, formatter: function(val, obj, row){
+			return '<a href="${ctx}/mes/mesEmployee/form?empCode='+row.empCode+'" class="btnList" data-title="${text("编辑员工")}">'+(val||row.empCode)+'</a>';
+		}},
+		{header:'${text("员工工号")}', name:'empNo', index:'a.emp_no', width:120, align:"center"},
+		{header:'${text("所属机构")}', name:'officeName', index:'a.office_name', width:160, align:"center"},
+		{header:'${text("岗位")}', name:'postName', index:'a.post_name', width:120, align:"center"},
+		{header:'${text("登录账号")}', name:'loginCode', index:'u.login_code', width:120, align:"center", formatter: function(val){
+			return val || '<span class="text-muted">未开通</span>';
+		}},
+		{header:'${text("员工状态")}', name:'status', index:'a.status', width:90, align:"center", formatter: function(val){
+			return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
+		}},
+		{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:140, align:"center"},
+		{header:'${text("操作")}', name:'actions', width:140, formatter: function(val, obj, row){
+			var actions = [];
+			<% if(hasPermi('mes:mesEmployee:edit')){ %>
+				actions.push('<a href="${ctx}/mes/mesEmployee/form?empCode='+row.empCode+'" class="btnList" title="${text("编辑")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				if (row.status == Global.STATUS_NORMAL){
+					actions.push('<a href="${ctx}/mes/mesEmployee/disable?empCode='+row.empCode+'" class="btnList" title="${text("停用")}" data-confirm="${text("确认要停用该员工吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
+				} else if (row.status == Global.STATUS_DISABLE){
+					actions.push('<a href="${ctx}/mes/mesEmployee/enable?empCode='+row.empCode+'" class="btnList" title="${text("启用")}" data-confirm="${text("确认要启用该员工吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
+				}
+				actions.push('<a href="${ctx}/mes/mesEmployee/delete?empCode='+row.empCode+'" class="btnList" title="${text("删除")}" data-confirm="${text("确认要删除该员工吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
+			<% } %>
+			return actions.join('');
+		}}
+	],
+	ajaxSuccess: function(){}
+});
+</script>

+ 78 - 0
src/main/resources/views/modules/mes/mesEmployeeSelect.html

@@ -0,0 +1,78 @@
+<% layout('/layouts/default.html', {title: '选择员工', libs: ['dataGrid']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-body">
+			<#form:form id="searchForm" model="${mesEmployee!}" action="${ctx}/mes/mesEmployee/listData" method="post" class="form-inline"
+					data-page-no="${parameter.pageNo}" data-page-size="10">
+				<div class="form-group">
+					<label class="control-label">${text('员工姓名')}:</label>
+					<div class="control-inline">
+						<input type="text" id="empName" name="empName" value="${keyword!}" maxlength="100" class="form-control width-160"/>
+					</div>
+				</div>
+				<div class="form-group">
+					<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
+				</div>
+			</#form:form>
+			<table id="employeeSelectGrid"></table>
+			<div id="employeeSelectGridPage"></div>
+		</div>
+	</div>
+</div>
+<% } %>
+<script>
+var employeeSelectRows = {};
+$('#employeeSelectGrid').dataGrid({
+	searchForm: $("#searchForm"),
+	columnModel: [
+		{header:'empCode', name:'empCode', index:'a.emp_code', hidden:true},
+		{header:'officeCode', name:'officeCode', index:'a.office_code', hidden:true},
+		{header:'postCode', name:'postCode', index:'a.post_code', hidden:true},
+		{header:'${text("员工姓名")}', name:'empName', index:'a.emp_name', width:120, align:"center"},
+		{header:'${text("员工工号")}', name:'empNo', index:'a.emp_no', width:120, align:"center"},
+		{header:'${text("所属机构")}', name:'officeName', index:'a.office_name', width:150, align:"center"},
+		{header:'${text("岗位")}', name:'postName', index:'a.post_name', width:120, align:"center"},
+		{header:'${text("登录账号")}', name:'loginCode', index:'u.login_code', width:120, align:"center"},
+		{header:'操作', name:'actions', width:80, formatter: function(val, obj, row){
+			employeeSelectRows[obj.rowId] = row;
+			return '<a href="javascript:" onclick="selectEmployeeById(\''+obj.rowId+'\')" class="btn btn-primary btn-xs">选择</a>';
+		}}
+	],
+	ajaxSuccess: function(){
+		var ids = $('#employeeSelectGrid').dataGrid('getDataIDs') || [];
+		for (var i = 0; i < ids.length; i++) {
+			employeeSelectRows[ids[i]] = $('#employeeSelectGrid').dataGrid('getRowData', ids[i]);
+		}
+	}
+});
+
+function selectEmployeeById(rowId){
+	var row = employeeSelectRows[rowId] || $('#employeeSelectGrid').dataGrid('getRowData', rowId);
+	var opener = getApplySelectedEmployeeWindow(parent);
+	if (opener && opener.applySelectedEmployee) {
+		opener.applySelectedEmployee(row);
+	}
+	var layerApi = (parent && parent.layer) || (top && top.layer) || (js && js.layer);
+	if (layerApi) {
+		layerApi.close(layerApi.getFrameIndex(window.name));
+	}
+}
+
+function getApplySelectedEmployeeWindow(win){
+	if (!win) {
+		return null;
+	}
+	try {
+		if (win.applySelectedEmployee) {
+			return win;
+		}
+		for (var i = 0; i < win.frames.length; i++) {
+			var found = getApplySelectedEmployeeWindow(win.frames[i]);
+			if (found) {
+				return found;
+			}
+		}
+	} catch (e) {}
+	return null;
+}
+</script>

+ 1 - 1
src/main/resources/views/modules/mes/mesScreenConfigList.html

@@ -67,7 +67,7 @@ $('#dataGrid').dataGrid({
 			actions.push('<a href="javascript:" class="screen-preview" data-url="' + encodeURIComponent(row.screenUrl || '') + '" data-title="' + encodeURIComponent(row.screenName || '') + '" title="打开大屏"><i class="fa fa-desktop"></i></a>&nbsp;');
 			<% if(hasPermi('mes:mesScreenConfig:edit')){ %>
 				actions.push('<a href="${ctx}/mes/mesScreenConfig/form?id='+row.id+'" class="btnList" title="${text("编辑大屏配置")}"><i class="fa fa-pencil"></i></a>&nbsp;');
-				actions.push('<a href="${ctx}/mes/mesScreenConfig/delete?id='+row.id+'" class="btnList" title="${text("删除大屏配置")}" data-confirm="${text("确认要删除该大屏配置吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
+				// actions.push('<a href="${ctx}/mes/mesScreenConfig/delete?id='+row.id+'" class="btnList" title="${text("删除大屏配置")}" data-confirm="${text("确认要删除该大屏配置吗?")}"><i class="fa fa-trash-o"></i></a>&nbsp;');
 			<% } %>
 			return actions.join('');
 		}}

+ 2 - 18
src/main/resources/views/modules/mes/skillUserSelect.html

@@ -8,7 +8,6 @@
                 </div>
                 <ul class="dropdown-menu">
                     <li><a href="javascript:" onclick="loadTree('office');"> <i class="fa fa-angle-right"></i> ${text('按组织查询')}</a></li>
-                    <li><a href="javascript:" onclick="loadTree('post');"> <i class="fa fa-angle-right"></i> ${text('按岗位查询')}</a></li>
                     <li><a href="javascript:" onclick="loadTree('role');"> <i class="fa fa-angle-right"></i> ${text('按角色查询')}</a></li>
                     <li><a href="javascript:" onclick="loadTree('userType');"> <i class="fa fa-angle-right"></i> ${text('按用户类型')}</a></li>
                 </ul>
@@ -32,7 +31,6 @@
                 data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
                 <#form:hidden name="status" value="${isNotBlank(empUser.status) ? empUser.status : '0'}" class="isReset"/>
                 <#form:hidden name="isAll" value="${parameter.isAll}" class=""/>
-                <#form:hidden id="postCode" name="employee.postCode" class="isReset"/>
                 <#form:hidden id="roleCode" name="roleCode" class="isReset"/>
                 <#form:hidden id="userType" name="userType" class="isReset"/>
                 <div class="form-group">
@@ -61,16 +59,8 @@
                         url="${ctx}/sys/office/treeData?isAll=${parameter.isAll}" btnClass="btn-sm" allowClear="true" canSelectParent="true"/>
                     </div>
                 </div>
-                <div class="form-group">
-                    <label class="control-label">${text('公司')}:</label>
-                    <div class="control-inline width-90">
-                        <#form:treeselect id="company" title="${text('公司选择')}"
-                        path="employee.company.companyCode" labelPath="employee.company.companyName"
-                        url="${ctx}/sys/company/treeData" btnClass="btn-sm" allowClear="true" canSelectParent="true"/>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label class="control-label">${text('手机')}:</label>
+				<div class="form-group">
+					<label class="control-label">${text('手机')}:</label>
                     <div class="control-inline">
                         <#form:input path="mobile" maxlength="100" class="form-control width-90"/>
                     </div>
@@ -117,8 +107,6 @@
                     if (!queryType || queryType == 'office'){
                         $('#officeCode').val(treeNode.id);
                         $('#officeName').val(treeNode.name);
-                    } else if (queryType == 'post'){
-                        $('#postCode').val(treeNode.id);
                     } else if (queryType == 'role'){
                         $('#roleCode').val(treeNode.id);
                     }
@@ -140,9 +128,6 @@
             if (!queryType || queryType == 'office'){
                 $('#queryTypeName').text('${text("按组织查询")}');
                 url = "${ctx}/sys/office/treeData?isAll=${parameter.isAll}&___t=" + new Date().getTime();
-            } else if (queryType == 'post'){
-                $('#queryTypeName').text('${text("按岗位查询")}');
-                url = "${ctx}/sys/post/treeData?___t=" + new Date().getTime();
             } else if (queryType == 'role'){
                 $('#queryTypeName').text('${text("按角色查询")}');
                 url = "${ctx}/sys/role/treeData?isAll=${parameter.isAll}&userType=__all&___t=" + new Date().getTime();
@@ -183,7 +168,6 @@
             {header:'${text("用户昵称")}', name:'userName', index:'a.user_name', width:200, align:"center"},
             {header:'${text("员工姓名")}', name:'refName', index:'a.ref_name', width:200, align:"center"},
             {header:'${text("归属机构")}', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
-            {header:'${text("归属公司")}', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
             {header:'${text("手机号码")}', name:'mobile', index:'a.mobile', width:200, align:"center"},
             {header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
             {header:'${text("状态")}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){

+ 133 - 37
src/main/resources/views/modules/sys/user/empUserForm.html

@@ -9,10 +9,11 @@
 				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
 			</div>
 		</div>
-		<#form:form id="inputForm" model="${empUser}" action="${ctx}/sys/empUser/save" method="post" class="form-horizontal">
+		<#form:form id="inputForm" model="${empUser}" action="${ctx}/mes/empUserCustom/save" method="post" class="form-horizontal">
 		<#form:hidden name="op" value="${op}"/>
 		<#form:hidden name="userType" value="employee"/>
 		<#form:hidden path="userCode"/>
+		<#form:hidden path="employee.empCode"/>
 		<div class="box-body">
 			<% if(op=='auth'){ %><br/><% } %>
 			<% if(op == 'add' || op == 'edit') { %>
@@ -30,18 +31,6 @@
 						</div>
 					</div>
 				</div>
-				<div class="col-xs-6">
-					<div class="form-group">
-						<label class="control-label col-sm-4" title="">
-							<span class="required hide">*</span> ${text('归属公司')}:<i class="fa icon-question hide"></i></label>
-						<div class="col-sm-8">
-							<#form:treeselect id="company" title="${text('公司选择')}"
-							path="employee.company.companyCode" labelPath="employee.company.companyName"
-							url="${ctx}/sys/company/treeData?ctrlPermi=${ctrlPermi}"
-							btnClass="" allowClear="true" canSelectRoot="true" canSelectParent="true"/>
-						</div>
-					</div>
-				</div>
 			</div>
 			<% } %>
 			<div class="row">
@@ -51,8 +40,8 @@
 							<span class="required ">*</span> ${text('登录账号')}:<i class="fa icon-question hide"></i></label>
 						<div class="col-sm-8">
 							<#form:hidden name="oldLoginCode" value="${empUser.loginCode}"/>
-							<#form:input path="loginCode" minlength="4" maxlength="20" readonly="${op=='auth'}"
-							class="form-control required userName"
+							<#form:input path="loginCode" minlength="2" maxlength="20" readonly="${op=='auth'}"
+							class="form-control required"
 							remote="${ctx}/sys/user/checkLoginCode?oldLoginCode=${empUser.loginCode}"
 							data-msg-remote="${text('登录账号已存在')}"/>
 						</div>
@@ -123,41 +112,43 @@
 				<div class="col-xs-6">
 					<div class="form-group">
 						<label class="control-label col-sm-4" title="">
-							<span class="required hide">*</span> ${text('员工工号')}:<i class="fa icon-question hide"></i></label>
+							<span class="required ">*</span> ${text('员工工号')}:<i class="fa icon-question hide"></i></label>
 						<div class="col-sm-8">
-							<#form:input path="employee.empNo" maxlength="32" class="form-control userName"
-							remote="${ctx}/sys/empUser/checkEmpNo?oldEmpNo=${empUser.employee.empNo}"
-							data-msg-remote="${text('员工工号已存在')}"/>
+							<#form:input path="employee.empNo" maxlength="32" class="form-control required"/>
 						</div>
 					</div>
 				</div>
 				<div class="col-xs-6">
 					<div class="form-group">
 						<label class="control-label col-sm-4" title="">
-							<span class="required hide">*</span> ${text('员工姓名')}:<i class="fa icon-question hide"></i></label>
+							<span class="required ">*</span> ${text('员工姓名')}:<i class="fa icon-question hide"></i></label>
 						<div class="col-sm-8">
-							<#form:input path="employee.empName" maxlength="32" class="form-control "/>
+							<#form:input path="employee.empName" maxlength="32" class="form-control required"/>
+							<span class="help-block selected-employee-tip hide"></span>
 						</div>
 					</div>
 				</div>
 			</div>
 			<div class="row">
-				<div class="col-xs-6">
+				<div class="col-xs-6 hide">
 					<div class="form-group">
 						<label class="control-label col-sm-4" title="">
-							<span class="required hide">*</span> ${text('所在岗位')}:<i class="fa icon-question hide"></i></label>
+							<span class="required hide">*</span> ${text('英文名')}:<i class="fa icon-question hide"></i></label>
 						<div class="col-sm-8">
-							<#form:select multiple="true" path="employee.employeePosts" items="${postList}"
-							itemLabel="postName" itemValue="postCode" class="form-control"/>
+							<#form:input path="employee.empNameEn" value="moren" maxlength="32" class="form-control "/>
 						</div>
 					</div>
 				</div>
-				<div class="col-xs-6 hide">
+				<div class="col-xs-6">
 					<div class="form-group">
 						<label class="control-label col-sm-4" title="">
-							<span class="required hide">*</span> ${text('英文名')}:<i class="fa icon-question hide"></i></label>
+							<span class="required hide">*</span> ${text('岗位')}:<i class="fa icon-question hide"></i></label>
 						<div class="col-sm-8">
-							<#form:input path="employee.empNameEn" value="moren" maxlength="32" class="form-control "/>
+							<#form:treeselect id="post" title="${text('岗位选择')}"
+							name="employee.postCode" value="${empUser.employee.postCode!}"
+							labelName="employeePostName" labelValue=""
+							url="${ctx}/sys/post/treeData"
+							allowClear="true" canSelectParent="true"/>
 						</div>
 					</div>
 				</div>
@@ -237,14 +228,6 @@
 					}
 				}
 			},
-			{header:'${text("附属岗位")}', name:'postCode', sortable:false, width:100,
-				editable:true, edittype:'select', editoptions:{'class':'form-control',
-					items: $.merge([{postName:'&nbsp;',postCode:''}], ${toJson(postList)}),
-					itemLabel: 'postName', itemValue: 'postCode', dataInit: function(element){
-						js.select2(element).on("change",function(){$(this).resetValid()});
-					}
-				}
-			},
 			{header:'${text("操作")}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
 					var actions = [];
 					actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#empOfficeGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a>&nbsp;');
@@ -261,7 +244,7 @@
 
 		// 编辑表格的提交数据参数
 		editGridInputFormListName: 'employee.employeeOfficeList', // 提交的数据列表名
-		editGridInputFormListAttrs: 'officeCode,officeName,postCode,postName,', // 提交数据列表的属性字段
+		editGridInputFormListAttrs: 'officeCode,officeName,', // 提交数据列表的属性字段
 
 		ajaxSuccess: function(){
 
@@ -293,8 +276,19 @@
 		}
 	});
 	//<% } %>
+	var empUserSubmitting = false;
+	var employeeSearchOpening = false;
 	$("#inputForm").validate({
 		submitHandler: function(form){
+			if (empUserSubmitting) {
+				return false;
+			}
+			if ('${op}' == 'add' && $.trim($('[name="employee.empName"]').val()) != '' && $('[name="employee.empCode"]').val() == '') {
+				js.showMessage('请先按员工姓名查询并选择员工。', null, 'warning');
+				openEmployeeSearchByKeyword($('[name="employee.empName"]').val(), true);
+				return false;
+			}
+			empUserSubmitting = true;
 			//<% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { %>
 			$("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(','));
 			//<% } %>
@@ -303,6 +297,7 @@
 				$('#employee_empNo').val($('#loginCode').val());
 			}
 			js.ajaxSubmitForm($(form), function(data){
+				empUserSubmitting = false;
 				js.showMessage(data.message);
 				if(data.result == Global.TRUE){
 					js.closeCurrentTabPage(function(contentWindow){
@@ -310,6 +305,107 @@
 					});
 				}
 			}, "json");
+			return false;
+		}
+	});
+	$('#inputForm').on('submit.empUserAjax', function(e){
+		e.preventDefault();
+		if (empUserSubmitting) {
+			return false;
+		}
+		if ($(this).valid()) {
+			$(this).validate().settings.submitHandler(this);
+		}
+		return false;
+	});
+
+	// 新建账号时按员工姓名匹配已有员工,选中后绑定账号到该员工。
+	(function(){
+		var lastKeyword = '';
+		$('[name="employee.empName"]').on('input', function(){
+			$('[name="employee.empCode"]').val('');
+			$('[name="employee.postCode"]').val('');
+			$('[name="employeePostName"]').val('');
+			$('.selected-employee-tip').addClass('hide').text('');
+			lastKeyword = '';
+		});
+		$('[name="employee.empName"]').on('blur', function(){
+			var keyword = $.trim($(this).val());
+			if ('${op}' != 'add' || keyword.length < 1 || keyword == lastKeyword || $('[name="employee.empCode"]').val()) {
+				return;
+			}
+			lastKeyword = keyword;
+			openEmployeeSearchByKeyword(keyword, false);
+		});
+	})();
+
+	window.applySelectedEmployee = function(row){
+		$('[name="employee.empCode"]').val(row.empCode || '');
+		$('[name="employee.empName"]').val(row.empName || '');
+		$('[name="employee.empNo"]').val(row.empNo || '');
+		$('[name="userName"]').val(row.empName || '');
+		$('[name="employee.office.officeCode"]').val(row.officeCode || '');
+		$('[name="employee.office.officeName"]').val(row.officeName || '');
+		$('[name="employee.postCode"]').val(row.postCode || '');
+		$('[name="employeePostName"]').val(row.postName || '');
+		$('.selected-employee-tip').removeClass('hide').text('已选择员工:' + (row.empName || '') + (row.empNo ? '(' + row.empNo + ')' : ''));
+	};
+
+	function openEmployeeSearchByKeyword(keyword, showEmptyMessage){
+		keyword = $.trim(keyword || '');
+		if ('${op}' != 'add' || keyword.length < 1 || $('[name="employee.empCode"]').val()) {
+			return;
+		}
+		if (employeeSearchOpening) {
+			return;
+		}
+		employeeSearchOpening = true;
+		$('[name="employee.empName"]').val(keyword);
+		$.get('${ctx}/mes/mesEmployee/search', {keyword: keyword}, function(list){
+			if (!list || list.length == 0) {
+				employeeSearchOpening = false;
+				if (showEmptyMessage) {
+					js.showMessage('未查询到匹配的员工,请检查员工姓名。', null, 'warning');
+				}
+				return;
+			}
+			if (list.length == 1 && list[0].empName == keyword) {
+				applySelectedEmployee(list[0]);
+				employeeSearchOpening = false;
+				return;
+			}
+			js.layer.open({
+				type: 2,
+				title: '${text("选择员工")}',
+				area: ['820px', '520px'],
+				content: '${ctx}/mes/mesEmployee/searchPage?keyword=' + encodeURIComponent(keyword),
+				end: function(){
+					employeeSearchOpening = false;
+				}
+			});
+		}).fail(function(){
+			employeeSearchOpening = false;
+			if (showEmptyMessage) {
+				js.showMessage('查询员工失败,请稍后重试。', null, 'error');
+			}
+		});
+	}
+
+	$('[name="employee.empName"]').on('keydown', function(e){
+		if (e.keyCode == 13) {
+			e.preventDefault();
+			e.stopImmediatePropagation();
+			openEmployeeSearchByKeyword($(this).val(), true);
+			return false;
+		}
+	});
+
+	$('#inputForm').on('submit', function(e){
+		var activeName = document.activeElement ? document.activeElement.name : '';
+		if (activeName == 'employee.empName') {
+			e.preventDefault();
+			openEmployeeSearchByKeyword($('[name="employee.empName"]').val(), true);
+			return false;
 		}
 	});
 </script>

+ 2 - 19
src/main/resources/views/modules/sys/user/empUserList.html

@@ -76,15 +76,6 @@
 					</div>
 				</div>
 				<div class="form-group">
-					<label class="control-label">${text('公司')}:</label>
-					<div class="control-inline width-90">
-						<#form:treeselect id="company" title="${text('公司选择')}"
-						path="employee.company.companyCode" labelPath="employee.company.companyName"
-						url="${ctx}/sys/company/treeData?ctrlPermi=${@Global.getConfig('user.adminCtrlPermi', '2')}"
-						btnClass="btn-sm" allowClear="true" canSelectRoot="true" canSelectParent="true"/>
-					</div>
-				</div>
-				<div class="form-group">
 					<label class="control-label">${text('邮箱')}:</label>
 					<div class="control-inline">
 						<#form:input path="email" maxlength="300" class="form-control width-90"/>
@@ -97,13 +88,6 @@
 					</div>
 				</div>
 				<div class="form-group">
-					<label class="control-label">${text('岗位')}:</label>
-					<div class="control-inline width-90">
-						<#form:select name="employee.postCode" items="${postList}"
-						itemLabel="postName" itemValue="postCode" blankOption="true" class="form-control isQuick"/>
-					</div>
-				</div>
-				<div class="form-group">
 					<label class="control-label">${text('角色')}:</label>
 					<div class="control-inline width-120">
 						<#form:select name="roleCode" items="${roleList}"
@@ -129,7 +113,6 @@
 			{header:'${text("用户昵称")}', name:'userName', index:'a.user_name', width:125, align:"center"},
 			{header:'${text("员工姓名")}', name:'refName', index:'a.ref_name', width:125, align:"center"},
 			{header:'${text("归属机构")}', name:'employee.office.officeName', index:'o.office_name', width:135, align:"center"},
-			{header:'${text("归属公司")}', name:'employee.company.companyName', index:'c.company_name', width:135, align:"center"},
 			{header:'${text("电子邮箱")}', name:'email', index:'a.email', width:120, align:"center"},
 			{header:'${text("手机号码")}', name:'mobile', index:'a.mobile', width:120, align:"center"},
 			{header:'${text("办公电话")}', name:'phone', index:'a.phone', width:120, align:"center"},
@@ -167,7 +150,7 @@
 
 					actions.push('<a href="${ctx}/mes/mesLineProcess/formAuth?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户工位授权")}"><i class="fa fa-check-circle-o"></i> ${text("工位授权")}</a>&nbsp;');
 
-					actions.push('<a href="${ctx}/sys/empUser/formAuthDataScope?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户分配数据权限")}"><i class="fa fa-check-circle-o"></i> ${text("数据权限")}</a>&nbsp;');
+					// actions.push('<a href="${ctx}/sys/empUser/formAuthDataScope?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户分配数据权限")}"><i class="fa fa-check-circle-o"></i> ${text("数据权限")}</a>&nbsp;');
 					//<% } %>
 					//<% if(hasPermi('sys:empUser:resetpwd')){ %>
 					actions.push('<a href="${ctx}/sys/empUser/resetpwd?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户密码重置")}" data-confirm="${text("确认要将该用户密码重置到初始状态吗?")}"><i class="fa fa-reply-all"></i> ${text("重置密码")}</a>&nbsp;');
@@ -242,4 +225,4 @@
 		</div>
 	</div>
 </form>
-//--></script>
+//--></script>