Parcourir la source

修改新增用户表单

dkk il y a 5 mois
Parent
commit
715d11f9a2

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

@@ -38,16 +38,13 @@ public class EmpUserCustomController extends BaseController {
     @RequestMapping(value = "form")
     public String form(EmpUser empUser, String op, Model model) {
         if ("copy".equals(op)) {
-            // 借用原生的 form 方法,获取全量数据(包括岗位、机构、角色)
             String view = empUserController.form(empUser, "edit", model);
             
             EmpUser fullUser = (EmpUser) model.asMap().get("empUser");
             if (fullUser != null) {
-                // 将原记录转化为新记录
                 fullUser.setIsNewRecord(true);
                 fullUser.setUserCode(null);
                 
-                // 转换员工及附属机构的主键
                 if (fullUser.getEmployee() != null) {
                     fullUser.getEmployee().setIsNewRecord(true);
                     fullUser.getEmployee().setEmpCode(null);
@@ -61,7 +58,6 @@ public class EmpUserCustomController extends BaseController {
                     }
                 }
                 
-                // 处理角色回显
                 List<Role> roleList = fullUser.getRoleList();
                 if (roleList != null && !roleList.isEmpty()) {
                     List<String> roleCodes = new ArrayList<>();
@@ -71,31 +67,17 @@ public class EmpUserCustomController extends BaseController {
                     fullUser.setUserRoleString(StringUtils.join(roleCodes, ","));
                 }
                 
-                // 覆盖 Model 中的对象并注入角色列表和操作标识
                 model.addAttribute("empUser", fullUser);
                 model.addAttribute("roleList", roleList);
                 model.addAttribute("op", "add");
             }
             
-            // 注入自定义保存脚本,修改表单 action 为我们自己的 save
-            String customSaveScript = "<script>" +
-                    "$(function(){" +
-                    "  var overrideAction = function() {" +
-                    "      var form = $('#inputForm');" +
-                    "      if(form.length > 0 && form.attr('action').indexOf('/mes/empUserCustom/save') === -1) {" +
-                    "          form.attr('action', '" + Global.getAdminPath() + "/mes/empUserCustom/save');" +
-                    "      }" +
-                    "  };" +
-                    "  overrideAction();" +
-                    "  setInterval(overrideAction, 500);" +
-                    "});" +
-                    "</script>";
-            model.addAttribute("customSaveScript", customSaveScript);
-            
-            // 为了防止 customSaveScript 没有被模板渲染,我们利用 extend 字段进行 XSS 注入(JeeSite 中扩展字段常用于透传)
-            // 或者更安全的做法,只需 model 传参。这里保留之前的做法。
-            
-            return view;
+            return "modules/sys/user/empUserForm";
+        }
+        
+        if ("add".equals(op) || "edit".equals(op)) {
+            empUserController.form(empUser, op, model);
+            return "modules/sys/user/empUserForm";
         }
         
         return empUserController.form(empUser, op, model);

+ 294 - 0
src/main/resources/views/modules/sys/user/empUserForm.html

@@ -0,0 +1,294 @@
+<% layout('/layouts/default.html', {title: '用户管理', libs: ['validate','dataGrid']}){ %>
+<div class="main-content">
+	<div class="box box-main">
+		<div class="box-header with-border">
+			<div class="box-title">
+				<i class="fa icon-people"></i> ${text(empUser.isNewRecord ? '新增用户' : op == 'auth' ? '用户分配角色' : '编辑用户')}
+			</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="${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"/>
+			<div class="box-body">
+				<% if(op=='auth'){ %><br/><% } %>
+				<% if(op == 'add' || op == 'edit') { %>
+				<div class="form-unit">${text('基本信息')}</div>
+				<div class="row">
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required ">*</span> ${text('归属机构')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:treeselect id="office" title="${text('机构选择')}"
+									path="employee.office.officeCode" labelPath="employee.office.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" 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">
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<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"
+									remote="${ctx}/sys/user/checkLoginCode?oldLoginCode=${empUser.loginCode}"
+									data-msg-remote="${text('登录账号已存在')}"/>
+							</div>
+						</div>
+					</div>
+					<div class="col-xs-6">
+						<div class="form-group">
+							<label class="control-label col-sm-4" title="">
+								<span class="required ">*</span> ${text('用户昵称')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-8">
+								<#form:input path="userName" maxlength="32" readonly="${op=='auth'}" class="form-control required "/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<% if(op == 'add' || op == 'edit') { %>
+				<div class="row">
+					<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">
+								<div class="input-group">
+									<#form:input path="email" maxlength="300" class="form-control email"/>
+									<span class="input-group-addon"><i class="fa fa-fw fa-envelope"></i></span>
+								</div>
+							</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">
+								<div class="input-group">
+									<#form:input path="mobile" maxlength="100" class="form-control mobile"/>
+									<span class="input-group-addon"><i class="fa fa-fw fa-mobile"></i></span>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<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">
+								<div class="input-group">
+									<#form:input path="phone" maxlength="100" class="form-control phone"/>
+									<span class="input-group-addon"><i class="fa fa-fw fa-phone"></i></span>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="form-unit">${text('详细信息')}</div>
+				<div class="row">
+					<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:input path="employee.empNo" maxlength="32" class="form-control userName"
+									remote="${ctx}/sys/empUser/checkEmpNo?oldEmpNo=${empUser.employee.empNo}"
+									data-msg-remote="${text('员工工号已存在')}"/>
+							</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:input path="employee.empName" maxlength="32" class="form-control "/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<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:select multiple="true" path="employee.employeePosts" items="${postList}"
+									itemLabel="postName" itemValue="postCode" class="form-control"/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-xs-12">
+						<div class="form-group">
+							<label class="control-label col-sm-2" title="">
+								<span class="required hide">*</span> ${text('附属机构')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-10 table-form">
+								<table id="empOfficeGrid"></table>
+								<% if (hasPermi('sys:empUser:edit')){ %>
+									<a href="#" id="empOfficeGridAddRowBtn" class="btn btn-primary btn-sm mt10 mb10"><i class="fa fa-plus"></i> ${text('增行')}</a>
+								<% } %>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="col-xs-12">
+						<div class="form-group">
+							<label class="control-label col-sm-2" title="">
+								<span class="required hide">*</span> ${text('备注信息')}:<i class="fa icon-question hide"></i></label>
+							<div class="col-sm-10">
+								<#form:textarea path="remarks" rows="4" maxlength="500" class="form-control "/>
+							</div>
+						</div>
+					</div>
+				</div>
+				<% } %>
+				<% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { %>
+				<div class="form-unit">${text('分配角色')}</div>
+				<div class="pl10 pb20">
+					<table id="roleGrid"></table>
+					<#form:hidden name="userRoleString"/>
+				</div>
+				<% } %>
+				<% if(op == 'add' || op == 'edit') { %>
+				<#form:extend collapsed="true" />
+				<% } %>
+			</div>
+			<div class="box-footer">
+				<div class="row">
+					<div class="col-sm-offset-2 col-sm-10">
+						<% if (hasPermi('sys:empUser:edit,sys:empUser:authRole', 'or')){ %>
+							<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> ${text('保 存')}</button>&nbsp;
+						<% } %>
+						<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button>
+					</div>
+				</div>
+			</div>
+		</#form:form>
+	</div>
+</div>
+<% } %>
+<script id="treeselectTpl" type="text/template">//<!--<div>
+<#form:treeselect id="{{d.id}}" title="{{d.title}}" name="{{d.name}}" value="{{d.value}}"
+	labelName="{{d.labelName}}" labelValue="{{d.labelValue}}" url="{{d.url}}"
+	class="{{d.cssClass}}" btnClass="btn-sm" allowClear="true"/>
+</div>//--></script>
+<script>
+$("#empOfficeGrid").dataGrid({
+	data: ${toJson(empUser.employee.employeeOfficeList)},
+	datatype: "local",
+	columnModel: [
+		{header:'${text("附属机构")}', name:'officeName', sortable:false, width:100,
+			formatter: function(val, obj, row, act){
+				return js.val(row, 'officeCode')+'|'+js.val(row, 'officeName');
+			}, editable: true, edittype: "custom", editoptions: {
+				custom_element: function(val, editOptions) {
+					return js.template('treeselectTpl', {
+						id: 'office_'+editOptions.id, title: '机构选择',
+						name: 'officeCode', value: val.split('|')[0],
+						labelName: 'officeName', labelValue: val.split('|')[1],
+						url: '${ctx}/sys/office/treeData', cssClass: 'required'
+					});
+				}
+			}
+		},
+		{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;');
+			return actions.join('');
+		}, editoptions: {defaultValue: 'new'}}
+	],
+	autoGridHeight: function(){return 'auto'},
+
+	editGrid: true,
+	editGridInitRowNum: 0,
+	editGridAddRowBtn: $('#empOfficeGridAddRowBtn'),
+	editGridAddRowInitData: {id: '', status: Global.STATUS_NORMAL},
+
+	editGridInputFormListName: 'employee.employeeOfficeList',
+	editGridInputFormListAttrs: 'officeCode,officeName,postCode,postName,',
+
+	ajaxSuccess: function(){
+
+	}
+});
+//<% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { %>
+var roleGrid = $("#roleGrid").dataGrid({
+	url: '${ctx}/sys/role/treeData',
+	postData: [
+		{name:'userType',value:'employee'},
+		{name:'ctrlPermi',value:'${ctrlPermi}'}
+	],
+	columnModel: [
+		{header:'${text("角色名称")}', name:'name', sortable:false, width:100, align:"center"},
+		{header:'${text("角色编码")}', name:'id', sortable:false, width:100, align:"center"}
+	],
+	showCheckbox: true,
+	autoGridHeight: function(){
+		return 'auto';
+	},
+	autoGridWidth: function(){
+		return $('#inputForm .box-body').width()-20;
+	},
+	ajaxSuccess: function(){
+		//<% for (role in roleList!){ %>
+		roleGrid.dataGrid('setSelectRow', '${role.roleCode}');
+		//<% } %>
+	}
+});
+//<% } %>
+$("#inputForm").validate({
+	submitHandler: function(form){
+		//<% if(hasPermi('sys:empUser:authRole') && (op == 'add' || op == 'auth')) { %>
+		$("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(','));
+		//<% } %>
+		var empNo = $('#employee_empNo').val();
+		if (empNo == ''){
+			$('#employee_empNo').val($('#loginCode').val());
+		}
+		js.ajaxSubmitForm($(form), function(data){
+			js.showMessage(data.message);
+			if(data.result == Global.TRUE){
+				js.closeCurrentTabPage(function(contentWindow){
+					contentWindow.page();
+				});
+			}
+		}, "json");
+    }
+});
+</script>

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

@@ -10,7 +10,7 @@
 				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> ${text('导出')}</a>
 				<% if(hasPermi('sys:empUser:edit')){ %>
 					<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> ${text('导入')}</a>
-					<a href="${ctx}/sys/empUser/form?op=add" class="btn btn-default btnTool" title="${text('新增用户')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
+					<a href="${ctx}/mes/empUserCustom/form?op=add" 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 class="btn-group">
@@ -124,7 +124,7 @@ $('#dataGrid').dataGrid({
 	searchForm: $("#searchForm"),
 	columnModel: [
 		{header:'${text("登录账号")}', name:'loginCode', index:'a.login_code', width:125, align:"center", frozen:true, formatter: function(val, obj, row, act){
-			return '<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" data-title="${text("编辑用户")}">'+(val||row.id)+'</a>';
+			return '<a href="${ctx}/mes/empUserCustom/form?userCode='+row.userCode+'&op=edit" class="btnList" data-title="${text("编辑用户")}">'+(val||row.id)+'</a>';
 		}},
 		{header:'${text("用户昵称")}', name:'userName', index:'a.user_name', width:125, align:"center"},
 		{header:'${text("员工姓名")}', name:'refName', index:'a.ref_name', width:125, align:"center"},
@@ -140,7 +140,7 @@ $('#dataGrid').dataGrid({
 		{header:'${text("操作")}', name:'actions', width:120, formatter: function(val, obj, row, act){
 			var actions = [];
 			//<% if(hasPermi('sys:empUser:edit')){ %>
-				actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" title="${text("编辑用户")}"><i class="fa fa-pencil"></i></a>&nbsp;');
+				actions.push('<a href="${ctx}/mes/empUserCustom/form?userCode='+row.userCode+'&op=edit" class="btnList" title="${text("编辑用户")}"><i class="fa fa-pencil"></i></a>&nbsp;');
 			//<% } %>
 			//<% if(hasPermi('sys:empUser:updateStatus')){ %>
 				if (row.status == Global.STATUS_NORMAL){