Forráskód Böngészése

地区负责人调整

sangwenwei 11 hónapja
szülő
commit
7eee0516ec

+ 9 - 0
src/main/java/com/jeeplus/modules/areaStaff/dao/AreaStaffDao.java

@@ -82,6 +82,15 @@ public interface AreaStaffDao extends TreeDao<AreaStaffInfo> {
      */
     void insertAreaStaffUser(AreaStaffUserInfo areaStaffUserInfo);
 
+    /**
+     * 修改人员信息
+     * @param areaStaffUserInfo
+     * @return
+     */
+    void updateAreaStaffUser(AreaStaffUserInfo areaStaffUserInfo);
+
 
     List<AreaStaffInfo> getUserListByIdList(@Param("idList") List<String> idList);
+
+    AreaStaffUserInfo getIsTemplateByUserId(@Param("userId")String userId,@Param("areaId")String areaId);
 }

+ 8 - 0
src/main/java/com/jeeplus/modules/areaStaff/entity/AreaStaffInfo.java

@@ -36,7 +36,15 @@ public class AreaStaffInfo extends TreeEntity<AreaStaffInfo> {
     private String pid;       //父级id
     private Area area;       //地区
     private Office office;       //部门
+    private String isTemplate; //是否长期负责(0:临时 1:长期)
 
+    public String getIsTemplate() {
+        return isTemplate;
+    }
+
+    public void setIsTemplate(String isTemplate) {
+        this.isTemplate = isTemplate;
+    }
 
     public AreaStaffInfo() {
         super();

+ 9 - 0
src/main/java/com/jeeplus/modules/areaStaff/entity/AreaStaffUserInfo.java

@@ -10,6 +10,15 @@ public class AreaStaffUserInfo extends DataEntity<AreaStaffUserInfo> {
     private String areaStaffId;
     private String userId;
     private String userName;
+    private String isTemplate;
+
+    public String getIsTemplate() {
+        return isTemplate;
+    }
+
+    public void setIsTemplate(String isTemplate) {
+        this.isTemplate = isTemplate;
+    }
 
     public String getAreaStaffId() {
         return areaStaffId;

+ 21 - 3
src/main/java/com/jeeplus/modules/areaStaff/service/AreaStaffService.java

@@ -390,16 +390,30 @@ public class AreaStaffService  extends TreeService<AreaStaffDao, AreaStaffInfo>
      */
     @Transactional(readOnly = false)
     public User saveUser(AreaStaffInfo areaStaffInfo,User user){
-        areaStaffInfo = this.get(areaStaffInfo.getId());
+//        areaStaffInfo = this.get(areaStaffInfo.getId());
 
         AreaStaffUserInfo areaStaffUserInfo = new AreaStaffUserInfo();
         areaStaffUserInfo.setAreaStaffId(areaStaffInfo.getId());
         areaStaffUserInfo.setUserId(user.getId());
+        areaStaffUserInfo.setIsTemplate(areaStaffInfo.getIsTemplate());
         //判定该节点下是否存在该成员信息
         Integer existsUserCount = dao.getExistsUser(areaStaffUserInfo);
         if (existsUserCount>0){
-            //该节点下存在人员信息,无需进行添加
-
+            //该节点下存在人员信息,需要判断该成员 长期/临时 有没有发生改变
+            AreaStaffUserInfo isTemplateByUserId = dao.getIsTemplateByUserId(areaStaffUserInfo.getUserId(),areaStaffUserInfo.getAreaStaffId());
+            if (null != isTemplateByUserId){
+                if (StringUtils.isNotBlank(isTemplateByUserId.getIsTemplate())){
+                    if (!isTemplateByUserId.getIsTemplate().equals(areaStaffInfo.getIsTemplate())){
+                        areaStaffUserInfo.setId(isTemplateByUserId.getId());
+                        areaStaffUserInfo.preUpdate();
+                        dao.updateAreaStaffUser(areaStaffUserInfo);
+                    }
+                }else {
+                    areaStaffUserInfo.setId(isTemplateByUserId.getId());
+                    areaStaffUserInfo.preUpdate();
+                    dao.updateAreaStaffUser(areaStaffUserInfo);
+                }
+            }
         }else{
             areaStaffUserInfo.preInsert();
             dao.insertAreaStaffUser(areaStaffUserInfo);
@@ -541,4 +555,8 @@ public class AreaStaffService  extends TreeService<AreaStaffDao, AreaStaffInfo>
         return dao.getMasterStateByUserId(userId);
     }
 
+    //根据userId查询是否长期
+    public AreaStaffUserInfo getIsTemplateByUserId(String userId,String areaId) {
+        return dao.getIsTemplateByUserId(userId,areaId);
+    }
 }

+ 56 - 6
src/main/java/com/jeeplus/modules/areaStaff/web/AreaStaffController.java

@@ -8,10 +8,10 @@ import com.jeeplus.common.utils.MyBeanUtils;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.areaStaff.entity.AreaStaffInfo;
+import com.jeeplus.modules.areaStaff.entity.AreaStaffUserInfo;
 import com.jeeplus.modules.areaStaff.service.AreaStaffService;
 import com.jeeplus.modules.sys.entity.Area;
 import com.jeeplus.modules.sys.entity.Office;
-import com.jeeplus.modules.sys.entity.Role;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.AreaService;
 import com.jeeplus.modules.sys.service.OfficeService;
@@ -30,10 +30,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author: 徐滕
@@ -51,6 +48,9 @@ public class AreaStaffController extends BaseController {
     @Autowired
     private SystemService systemService;
 
+    @Autowired
+    private HttpServletRequest request;
+
     @ModelAttribute
     public AreaStaffInfo get(@RequestParam(required=false) String id) {
         AreaStaffInfo entity = null;
@@ -415,12 +415,30 @@ public class AreaStaffController extends BaseController {
      * @return
      */
     @RequestMapping(value = "assignUser")
-    public String assignUser(AreaStaffInfo areaStaffInfo, String[] idsArr, RedirectAttributes redirectAttributes) {
+    public String assignUser(AreaStaffInfo areaStaffInfo, String[] idsArr,String[] usersArr, RedirectAttributes redirectAttributes) {
+        //处理用户是否长期还是临时
+        ArrayList<String> infos = new ArrayList<>();
+        //便利usersArr usersArr的格式为["userId:isTemplate;userId:isTemplate"]
+        for (String info : usersArr) {
+            String[] split = info.split(";");
+            for (String s : split) {
+                infos.add(s);
+            }
+        }
+
         StringBuilder msg = new StringBuilder();
         int newNum = 0;
         for (int i = 0; i < idsArr.length; i++) {
             User user = systemService.getUser(idsArr[i]);
             //将人员信息进行添加到对应数据节点下(需先验证是否存在重复值)
+            for (String info : infos) {
+                String substring = info.substring(0, info.lastIndexOf(":"));
+                if (substring.equals(idsArr[i])){
+                    String template=info.substring(info.lastIndexOf(":")+1);
+                    areaStaffInfo.setIsTemplate(template);
+                }
+                continue;
+            }
             User saveUser = areaStaffService.saveUser(areaStaffInfo, user);
 
             if (null != saveUser && StringUtils.isNotBlank(saveUser.getId()) && !saveUser.getId().equals("1")) {
@@ -454,4 +472,36 @@ public class AreaStaffController extends BaseController {
         return "redirect:" + adminPath + "/areaStaff/areaStaff/userForm?parent.id=" + id;
     }
 
+    /**
+     * 获取人员信息
+     * @return
+     */
+    @RequestMapping(value = "getUser")
+    @ResponseBody
+    public List<User> getUser(){
+        String ids = request.getParameter("ids");
+        String areaId = request.getParameter("areaId");
+        ArrayList<User> users = new ArrayList<>();
+        if (ids.contains(",")){
+            String[] split = ids.split(",");
+            for (String s : split) {
+                User user = UserUtils.get(s);
+                AreaStaffUserInfo staffInfo=areaStaffService.getIsTemplateByUserId(s,areaId);
+                if (staffInfo != null && StringUtils.isNotBlank(staffInfo.getIsTemplate())){
+                    user.setIsTemplate(staffInfo.getIsTemplate());
+                }
+                users.add(user);
+            }
+        }else {
+            User user = UserUtils.get(ids);
+            AreaStaffUserInfo staffInfo=areaStaffService.getIsTemplateByUserId(ids,areaId);
+            if (staffInfo != null && StringUtils.isNotBlank(staffInfo.getIsTemplate())){
+                user.setIsTemplate(staffInfo.getIsTemplate());
+            }
+            users.add(user);
+        }
+
+        return users;
+    }
+
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/sys/entity/User.java

@@ -106,6 +106,15 @@ public class User extends DataEntity<User> {
 
     private String areaRemark;  //部门地区备注(永不标注部门中所在的城市,比如一部中有 苏州、安徽的等等)
 	private String areaPrincipal; //是否为地区负责人	1:是;0:不是
+	private String isTemplate; //长期/临时  0:临时 1:长期
+
+	public String getIsTemplate() {
+		return isTemplate;
+	}
+
+	public void setIsTemplate(String isTemplate) {
+		this.isTemplate = isTemplate;
+	}
 
 	public String getWeChatId() {
 		return weChatId;

+ 24 - 4
src/main/resources/mappings/modules/areaStaff/AreaStaffDao.xml

@@ -261,7 +261,8 @@
 		o.top_company AS "office.topCompany",
 		o.parent_id AS "office.parent.id",
 		o.parent_ids AS "office.parentIds",
-		sasui.id as "auditUserId"
+		sasui.id as "auditUserId",
+		sasui.is_template as "isTemplate"
 		from sys_user a
 		left join sys_office o on a.office_id = o.id
 		left join sys_office s on a.company_id = s.id
@@ -332,7 +333,7 @@
 		select count(1) from sys_area_staff_user_info
 		<where>
 			area_staff_id = #{areaStaffId}
-			and user_id = #{userId}
+			and user_id = #{userId} and del_flag = '0'
 		</where>
 	</select>
 
@@ -346,7 +347,8 @@
 			remarks,
 			del_flag,
 			area_staff_id,
-			user_id
+			user_id,
+			is_template
 		)
 		values
   		(
@@ -358,10 +360,19 @@
 			#{remarks},
 			#{delFlag},
 			#{areaStaffId},
-			#{userId}
+			#{userId},
+			#{isTemplate}
   		)
 	</insert>
 
+	<update id="updateAreaStaffUser">
+		UPDATE sys_area_staff_user_info SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			is_template = #{isTemplate}
+		WHERE id = #{id}
+	</update>
+
 	<select id="getUserListByIdList" resultType="com.jeeplus.modules.areaStaff.entity.AreaStaffInfo">
 		select
 		a.id AS "id",
@@ -373,6 +384,7 @@
 		a.del_flag AS "delFlag",
 		a.area_staff_id as "parent.id",
 		a.user_id as "standardDetail",
+		a.is_template as "isTemplate",
 		concat(sas.parent_ids,',',a.area_staff_id) as "parentIds",
 		su.name as "leaderName"
 		from sys_area_staff_user_info a
@@ -388,5 +400,13 @@
 			and a.del_flag = 0
 		</where>
 	</select>
+
+	<select id="getIsTemplateByUserId" resultType="com.jeeplus.modules.areaStaff.entity.AreaStaffUserInfo">
+		select
+			id,
+			is_template
+		from sys_area_staff_user_info
+		where del_flag = '0' and user_id = #{userId} and area_staff_id = #{areaId}
+	</select>
 	
 </mapper>

+ 10 - 0
src/main/webapp/webpage/modules/areaStaff/areaStaffList.jsp

@@ -70,6 +70,7 @@
 					<tr>
 						<th >部门/地区描述</th>
 						<th >人员信息</th>
+						<th >员工类型</th>
 						<th width="240px">操作</th>
 					</tr>
 					</thead>
@@ -102,6 +103,15 @@
 							<td style="text-align: center">
 									${areaStaffInfo.leaderName}
 							</td>
+							<td style="text-align: center">
+								<c:if test="${areaStaffInfo.hierarchy == 2}">
+									地区负责人
+								</c:if>
+								<c:if test="${areaStaffInfo.grade == 3}">
+									<c:if test="${areaStaffInfo.isTemplate=='0'}">临时</c:if>
+									<c:if test="${areaStaffInfo.isTemplate=='1'}">长期</c:if>
+								</c:if>
+							</td>
 							<td class="op-td text-center">
 								<div class="op-btn-box">
 									<div class="layui-btn-group">

+ 190 - 6
src/main/webapp/webpage/modules/areaStaff/areaStaffUserForm.jsp

@@ -18,8 +18,25 @@
 		var validateForm;
 		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
 		  if(validateForm.form()){
-			  $("#inputForm").submit();
-			  return true;
+			  let allSelected = true;
+			  //获取表格中的数据
+			  var tableRows = document.querySelectorAll('table.details tbody tr');
+			  tableRows.forEach(function(row) {
+				  var selectElement = row.querySelector('select[name="isTemplate"]'); // 下拉框的name属性是"isTemplate"
+				  var userNameElement = row.querySelector('td[data-id="userName"]');
+				  var userName = userNameElement ? userNameElement.innerText.trim() : null;
+
+				  if (!selectElement || !selectElement.value) {
+					  top.layer.alert(userName+':未选择长期还是临时', {icon: 0});
+					  allSelected = false;
+					  return;
+				  }
+			  })
+			  if(allSelected){
+				  $("#inputForm").submit();
+				  $('#assignRoleForm').submit();
+				  return true;
+			  }
 		  }
 	
 		  return false;
@@ -131,6 +148,7 @@
 				<input type="hidden" name="id" value="${areaStaffInfo.id}"/>
 				<input type="hidden" name="office.id" value="${areaStaffInfo.office.id}"/>
 				<input id="idsArr" type="hidden" name="idsArr" value=""/>
+				<input id="usersArr" type="hidden" name="usersArr" value=""/>
 			</form>
 			<div class="layui-item nav-btns">
 				<a href="javascript:void(0);" id="assignButton" class="nav-btn nav-btn-add" title="添加人员"><i class="fa fa-plus"></i>&nbsp;新增</a>
@@ -139,25 +157,34 @@
 				<table id="contentTable" class="table table-bordered table-condensed details">
 					<thead>
 					<tr>
+						<th style="display: none;">人员id</th>
 						<th>归属公司</th>
 						<th>归属部门</th>
 						<th>姓名</th>
 						<th>电话</th>
 						<th>手机</th>
+						<th><span class="require-item">*</span>长期/临时</th>
 						<shiro:hasPermission name="sys:user:edit"><th width="80">操作</th></shiro:hasPermission>
 					</tr>
 					</thead>
 					<tbody>
 					<c:forEach items="${userList}" var="user">
 						<tr>
+							<td style="display: none;" data-id="userId">${user.id}</td>
 							<td>${user.company.name}</td>
 							<td>${user.office.name}</td>
-							<td>${user.name}</td>
+							<td data-id="userName">${user.name}</td>
 							<td>${user.phone}</td>
 							<td>${user.mobile}</td>
+							<td data-id="selectedOption">
+								<select style="width: 100%" id="isTemplateSelect" name="isTemplate" lay-filter="table" lay-verify = '' class="form-control simple-select">
+									<option value="">请选择</option>
+									<option value="0" <c:if test="${user.isTemplate=='0'}">selected</c:if>>临时</option>
+									<option value="1" <c:if test="${user.isTemplate=='1'}">selected</c:if>>长期</option>
+								</select>
+							</td>
 							<shiro:hasPermission name="sys:role:edit"><td class="op-td">
-								<a href="${ctx}/areaStaff/areaStaff/outUser?userId=${user.id}&id=${areaStaffInfo.id}&areaStaffUserInfoId=${user.auditUserId}"
-								   onclick="return confirmx('确认要将用户<b>[${user.name}]</b>移除吗?', this.href)" class="op-btn op-btn-add"><i class="glyphicon glyphicon-remove"></i> 移除</a>
+								<button class="btn btn-danger delete-btn">删除</button>
 							</td></shiro:hasPermission>
 						</tr>
 					</c:forEach>
@@ -169,6 +196,7 @@
 </div>
 
 <script type="text/javascript">
+	var preIds
 	$("#assignButton").click(function(){
 
 		top.layer.open({
@@ -181,6 +209,7 @@
 			btn: ['确定', '关闭'],
 			yes: function(index, layero){
 				var pre_ids = layero.find("iframe")[0].contentWindow.pre_ids;
+				preIds = pre_ids
 				var ids = layero.find("iframe")[0].contentWindow.ids;
 				if(ids[0]==''){
 					ids.shift();
@@ -197,13 +226,168 @@
 					idsArr = (idsArr + ids[i]) + (((i + 1)== ids.length) ? '':',');
 				}
 				$('#idsArr').val(idsArr);
-				$('#assignRoleForm').submit();
+				getUser(idsArr)
+				console.log(idsArr)
+				// $('#assignRoleForm').submit();
 				top.layer.close(index);
 			},
 			cancel: function(index){
 			}
 		});
 	});
+
+	function getUser(ids) {
+		var areaId = $("#id").val()
+		$.ajax({
+			async:false,
+			type:'post',
+			url:'${ctx}/areaStaff/areaStaff/getUser',
+			data:{
+				"ids":ids,
+				"areaId":areaId,
+			},
+			success:function(data){
+				console.log('pre_ids',preIds)
+				// 获取当前表格中所有行的userId
+				var existingIds = $('#contentTable tbody tr td[data-id="userId"]').map(function() {
+					return $(this).text();
+				}).get();
+				var tbody = $('#contentTable tbody'); // 获取表格的 tbody 元素
+				//tbody.empty(); // 清空现有的 tbody 内容
+				$.each(data, function(index, user) {
+					if (existingIds.indexOf(user.id.toString()) === -1) {
+						var row = $('<tr></tr>'); // 创建一个新的行元素
+						// 添加归属公司、归属部门等列
+						row.append($('<td style="display: none;" data-id="userId"></td>').text(user.id));
+						row.append($('<td></td>').text(user.company.name));
+						row.append($('<td></td>').text(user.office.name));
+						row.append($('<td data-id="userName"></td>').text(user.name));
+						row.append($('<td></td>').text(user.phone));
+						row.append($('<td></td>').text(user.mobile));
+						// 添加长期/临时选择框
+						var select = $('<select style="width: 100%" name="isTemplate" lay-filter="table" lay-verify = \'\' class="form-control simple-select"></select>');
+						select.append($('<option value="">请选择</option>'));
+						select.append($('<option value="0"' + (user.isTemplate === '0' ? ' selected' : '') + '>临时</option>'));
+						select.append($('<option value="1"' + (user.isTemplate === '1' ? ' selected' : '') + '>长期</option>'));
+						row.append($('<td data-id="selectedOption"></td>').append(select));
+						// 如果用户有权限编辑,添加操作列
+						if ($('#contentTable').find('th:last-child').text().trim() === '操作') {
+							var deleteButton = $('<button class="btn btn-danger delete-btn">删除</button>');
+							row.append($('<td class="op-td"></td>').append(deleteButton));
+						}
+						console.log('tow',row)
+						// 将行添加到 tbody
+						tbody.append(row);
+					}
+				});
+			}
+		})
+	}
+	$('#contentTable').on('click', '.delete-btn', function() {
+		var $row = $(this).closest('tr');
+		// 删除行
+		$row.remove();
+		var usersArray = []; // 用于存储每行的userId和下拉框选中的值
+		var tableRows = document.querySelectorAll('table.details tbody tr'); // 只遍历tbody中的行
+
+		tableRows.forEach(function(row) {
+			var userIdElement = row.querySelector('td[data-id="userId"]');
+			var userId = userIdElement ? userIdElement.innerText.trim() : null; // 确保userId存在
+
+			if (userId) {
+				if (idsArr.length > 0) {
+					idsArr += ',';
+				}
+				// 将userId添加到idsArr中
+				idsArr += userId;
+
+				var hiddenInput = document.getElementById('idsArr'); // 注意:使用实际的ID
+				if (hiddenInput) {
+					hiddenInput.value = idsArr;
+				}
+				console.log('hiddenInput',hiddenInput);
+
+				var selectElement = row.querySelector('select[name="isTemplate"]'); // 假设下拉框的name属性是"isTemplate"
+				var selectedOptionValue = selectElement ? selectElement.value : null; // 获取下拉框选中的值
+
+				if (selectedOptionValue) {
+					// 将userId和selectedOptionValue作为键值对存储到对象中
+					var userData = userId+":"+selectedOptionValue
+					usersArray.push(userData); // 将对象添加到数组中
+				}
+			}
+		});
+		var users = "";
+		for (var i = 0; i<usersArray.length; i++) {
+			users = (users + usersArray[i]) + (((i + 1)== usersArray.length) ? '':';');
+		}
+		// 设置到hidden input中
+		var usersArr = document.getElementById('usersArr');
+		if (usersArr) {
+			$("#usersArr").val(users)
+			//usersArr.value = JSON.stringify(usersArray);
+		}
+
+		console.log('usersArr',usersArr);
+	});
+	document.querySelectorAll('table tr').forEach(function(row) {
+		row.addEventListener('click', function() {
+
+			const allRows = document.querySelectorAll('table tr');
+			allRows.forEach(r => r.classList.remove('selected'));
+			this.classList.add('selected');
+			console.log('allRows',allRows)
+		});
+	});
+	$('#contentTable').on('change', 'select[name="isTemplate"]', function() {
+		var idsArr = '';
+		var usersArray = []; // 用于存储每行的userId和下拉框选中的值
+		var tableRows = document.querySelectorAll('table.details tbody tr'); // 只遍历tbody中的行
+
+		tableRows.forEach(function(row) {
+			var userIdElement = row.querySelector('td[data-id="userId"]');
+			var userId = userIdElement ? userIdElement.innerText.trim() : null; // 确保userId存在
+
+			if (userId) {
+				if (idsArr.length > 0) {
+					idsArr += ',';
+				}
+				// 将userId添加到idsArr中
+				idsArr += userId;
+
+				var hiddenInput = document.getElementById('idsArr'); // 注意:使用实际的ID
+				if (hiddenInput) {
+					hiddenInput.value = idsArr;
+				}
+				console.log('hiddenInput',hiddenInput);
+
+				var selectElement = row.querySelector('select[name="isTemplate"]'); // 假设下拉框的name属性是"isTemplate"
+				var selectedOptionValue = selectElement ? selectElement.value : null; // 获取下拉框选中的值
+
+				if (selectedOptionValue) {
+					// 将userId和selectedOptionValue作为键值对存储到对象中
+					var userData = userId+":"+selectedOptionValue
+
+					usersArray.push(userData); // 将对象添加到数组中
+				}
+			}
+		});
+		var users = "";
+		for (var i = 0; i<usersArray.length; i++) {
+			users = (users + usersArray[i]) + (((i + 1)== usersArray.length) ? '':';');
+		}
+
+		// 设置到usersArr中
+		var usersArr = document.getElementById('usersArr');
+		if (usersArr) {
+			// $("#usersArr").val(usersArray)
+			usersArr.value = users;
+		}
+		console.log('usersArr',usersArr);
+	});
 </script>
 </body>
+<style>
+
+</style>
 </html>

+ 5 - 0
src/main/webapp/webpage/modules/areaStaff/areaStaffView.jsp

@@ -93,6 +93,7 @@
 						<th>姓名</th>
 						<th>电话</th>
 						<th>手机</th>
+						<th>长期/临时</th>
 					</tr>
 					</thead>
 					<tbody>
@@ -103,6 +104,10 @@
 							<td>${user.name}</td>
 							<td>${user.phone}</td>
 							<td>${user.mobile}</td>
+							<td>
+								<c:if test="${user.isTemplate=='0'}">临时</c:if>
+								<c:if test="${user.isTemplate=='1'}">长期</c:if>
+							</td>
 						</tr>
 					</c:forEach>
 					</tbody>