Jelajahi Sumber

报销申请人员添加筛选项

user5 4 tahun lalu
induk
melakukan
41f069db0f

+ 6 - 0
src/main/java/com/jeeplus/modules/sys/dao/UserDao.java

@@ -43,6 +43,12 @@ public interface UserDao extends CrudDao<User> {
 	 */
 	public List<User> findUserByOfficeId(User user);
 	/**
+	 * 通过OfficeId获取用户列表,仅返回用户id和name(树查询用户时用)
+	 * @param user
+	 * @return
+	 */
+	public List<User> findUserByOfficeIdAndName(User user);
+	/**
 	 * 通过Offices获取用户列表,仅返回用户id和name(树查询用户时用)
 	 * @param user
 	 * @return

+ 19 - 0
src/main/java/com/jeeplus/modules/sys/service/SystemService.java

@@ -281,6 +281,25 @@ public class SystemService extends BaseService implements InitializingBean {
                 UserUtils.USER_CACHE_LIST_BY_OFFICE_ID_ + officeId, list);
         return list;
     }
+
+    /**
+     * 通过部门ID获取用户列表,仅返回用户id和name(树查询用户时用)
+     *
+     * @return
+     */
+    public List<User> findUserByOfficeIdAndName(String officeId,String selectName) {
+
+        User user = new User();
+        user.setOffice(new Office(officeId));
+        user.setName(selectName);
+        if(!UserUtils.getSelectCompany().getId().equals("1")) {
+            user.setCompany(UserUtils.getSelectCompany());
+        }
+        List<User> list = userDao.findUserByOfficeIdAndName(user);
+        CacheUtils.put(UserUtils.USER_CACHE,
+                UserUtils.USER_CACHE_LIST_BY_OFFICE_ID_ + officeId, list);
+        return list;
+    }
     /**
      * 通过部门ID获取用户列表,仅返回用户id和name(树查询用户时用)
      *

+ 2 - 1
src/main/java/com/jeeplus/modules/sys/web/OfficeController.java

@@ -480,7 +480,7 @@ public class OfficeController extends BaseController {
     @RequiresPermissions("user")
     @ResponseBody
     @RequestMapping(value = "treeDataAll")
-    public List<Map<String, Object>> treeDataAll(@RequestParam(required = false) String extId, @RequestParam(required = false) String type,
+    public List<Map<String, Object>> treeDataAll(@RequestParam(required = false) String extId, @RequestParam(required = false) String type, @RequestParam(required = false) String selectName,
                                                  @RequestParam(required = false) Long grade, @RequestParam(required = false) Boolean isAll, HttpServletResponse response) {
         List<Map<String, Object>> mapList = Lists.newArrayList();
         Office office = new Office();
@@ -497,6 +497,7 @@ public class OfficeController extends BaseController {
                 map.put("pId", e.getParentId());
                 map.put("pIds", e.getParentIds());
                 map.put("name", e.getTopCompany());
+                map.put("selectName", selectName);
                 if (type != null && "3".equals(type)) {
                     map.put("isParent", true);
                 }

+ 17 - 0
src/main/java/com/jeeplus/modules/sys/web/TagController.java

@@ -40,6 +40,23 @@ public class TagController extends BaseController {
 	 * 树结构选择标签(treeselect.tag)
 	 */
 	@RequiresPermissions("user")
+	@RequestMapping(value = "treeselectReimbur")
+	public String treeselectReimbur(HttpServletRequest request, Model model) {
+		model.addAttribute("url", request.getParameter("url")); 	// 树结构数据URL
+		model.addAttribute("extId", request.getParameter("extId")); // 排除的编号ID
+		model.addAttribute("checked", request.getParameter("checked")); // 是否可复选
+		model.addAttribute("selectIds", request.getParameter("selectIds")); // 指定默认选中的ID
+		model.addAttribute("isAll", request.getParameter("isAll")); 	// 是否读取全部数据,不进行权限过滤
+		model.addAttribute("module", request.getParameter("module"));	// 过滤栏目模型(仅针对CMS的Category树)
+		model.addAttribute("branchOffice", request.getParameter("branchOffice"));	// 过滤栏目模型(仅针对CMS的Category树)
+		model.addAttribute("selectName", request.getParameter("selectName"));	// 查询名称
+		return "modules/sys/tagTreeselectReimbur";
+	}
+
+	/**
+	 * 树结构选择标签(treeselect.tag)
+	 */
+	@RequiresPermissions("user")
 	@RequestMapping(value = "treeselectDict")
 	public String treeselectDict(HttpServletRequest request, Model model) {
 		model.addAttribute("url", request.getParameter("url")); 	// 树结构数据URL

+ 96 - 0
src/main/java/com/jeeplus/modules/sys/web/UserController.java

@@ -960,6 +960,102 @@ public class UserController extends BaseController {
         return mapList;
     }
 
+    @RequiresPermissions("user")
+    @ResponseBody
+    @RequestMapping(value = "treeDataByName")
+    public List<Map<String, Object>> treeDataByName(@RequestParam(required=false) String projectId,@RequestParam(required=false) String officeId,@RequestParam(required = false) String selectName, HttpServletResponse response) {
+        List<Map<String, Object>> mapList = Lists.newArrayList();
+        if(StringUtils.isBlank(projectId)){
+            List<User> list = systemService.findUserByOfficeIdAndName(officeId,selectName);
+            for (int i=0; i<list.size(); i++){
+                User e = list.get(i);
+                Map<String, Object> map = Maps.newHashMap();
+                map.put("id", "u_"+e.getId());
+                map.put("pId", officeId);
+                String name = StringUtils.replace(e.getName(), " ", "");
+                name = StringEscapeUtils.unescapeHtml4(name);
+                String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
+                officeName = StringEscapeUtils.unescapeHtml4(officeName);
+                map.put("name", name);
+                map.put("officeId", officeName);
+                mapList.add(map);
+            }
+        }else{
+            List<User> list = systemService.findUserByOfficeId(officeId);
+            //查询项目组成员信息
+            List<User> members = workProjectUserDao.isDelFalg(projectId, "");
+            Set<String> setUser = new HashSet();
+            for (User user: members) {
+                setUser.add(user.getId());
+            }
+            List<String> userIdList = new ArrayList<>(setUser);
+            for (int i=0; i<list.size(); i++){
+                User e = list.get(i);
+                if(userIdList.contains(e.getId())){
+                    Map<String, Object> map = Maps.newHashMap();
+                    map.put("id", "u_"+e.getId());
+                    map.put("pId", officeId);
+                    String name = StringUtils.replace(e.getName(), " ", "");
+                    name = StringEscapeUtils.unescapeHtml4(name);
+                    map.put("name", name);
+                    String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
+                    officeName = StringEscapeUtils.unescapeHtml4(officeName);
+                    map.put("officeId", officeName);
+                    mapList.add(map);
+                }
+            }
+        }
+        return mapList;
+    }
+
+    @RequiresPermissions("user")
+    @ResponseBody
+    @RequestMapping(value = "treeDataReimbur")
+    public List<Map<String, Object>> treeDataReimbur(@RequestParam(required=false) String projectId,@RequestParam(required=false) String officeId, HttpServletResponse response) {
+        List<Map<String, Object>> mapList = Lists.newArrayList();
+        if(StringUtils.isBlank(projectId)){
+            List<User> list = systemService.findUserByOfficeId(officeId);
+            for (int i=0; i<list.size(); i++){
+                User e = list.get(i);
+                Map<String, Object> map = Maps.newHashMap();
+                map.put("id", "u_"+e.getId());
+                map.put("pId", officeId);
+                String name = StringUtils.replace(e.getName(), " ", "");
+                name = StringEscapeUtils.unescapeHtml4(name);
+                String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
+                officeName = StringEscapeUtils.unescapeHtml4(officeName);
+                map.put("name", name);
+                map.put("officeId", officeName);
+                mapList.add(map);
+            }
+        }else{
+            List<User> list = systemService.findUserByOfficeId(officeId);
+            //查询项目组成员信息
+            List<User> members = workProjectUserDao.isDelFalg(projectId, "");
+            Set<String> setUser = new HashSet();
+            for (User user: members) {
+                setUser.add(user.getId());
+            }
+            List<String> userIdList = new ArrayList<>(setUser);
+            for (int i=0; i<list.size(); i++){
+                User e = list.get(i);
+                if(userIdList.contains(e.getId())){
+                    Map<String, Object> map = Maps.newHashMap();
+                    map.put("id", "u_"+e.getId());
+                    map.put("pId", officeId);
+                    String name = StringUtils.replace(e.getName(), " ", "");
+                    name = StringEscapeUtils.unescapeHtml4(name);
+                    map.put("name", name);
+                    String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
+                    officeName = StringEscapeUtils.unescapeHtml4(officeName);
+                    map.put("officeId", officeName);
+                    mapList.add(map);
+                }
+            }
+        }
+        return mapList;
+    }
+
     /**
      * web端ajax验证用户名是否可用
      * @param loginName

+ 24 - 0
src/main/resources/mappings/modules/sys/UserDao.xml

@@ -440,6 +440,30 @@
 		AND uo.status IN ('试用','正式','劳务')
 		ORDER BY a.name
 	</select>
+
+	<!-- 根据OfficeId获取用户(树查询用户时用) -->
+	<select id="findUserByOfficeIdAndName" resultType="User" useCache="true">
+		SELECT
+		a.id, a.name, a.login_name,a.photo
+		,so.name as "office.name"
+		FROM sys_user a
+		left join sys_office so on so.id = a.office_id
+		LEFT JOIN work_staff_achives uo ON uo.user_id = a.id
+		LEFT JOIN sys_office o ON o.id = uo.office_id
+		WHERE a.del_flag = #{DEL_FLAG_NORMAL}
+		AND o.del_flag = #{DEL_FLAG_NORMAL}
+		<if test="office != null and office.id != null and office.id !='' ">
+			AND uo.office_id = #{office.id}
+		</if>
+		<if test="name != null and name !='' ">
+			AND a.name like concat ('%',#{name},'%')
+		</if>
+		<if test="company != null and company.id != null and company.id !='' ">
+			AND uo.company_id = #{company.id}
+		</if>
+		AND uo.status IN ('试用','正式','劳务')
+		ORDER BY a.name
+	</select>
 	<!-- 根据OfficeId获取用户(树查询用户时用) -->
 	<select id="findUserByOffices" resultType="User" useCache="true">
 		SELECT

+ 1 - 1
src/main/webapp/WEB-INF/tags/sys/reimburtreeselectUser.tag

@@ -41,7 +41,7 @@
 		    area: ['300px', '420px'],
 		    title:"选择${title}",
 		    ajaxData:{selectIds: $("#${id}Id").val()},
-		    content: "${ctx}/tag/treeselect?url="+encodeURIComponent("${url}")+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}" ,
+		    content: "${ctx}/tag/treeselectReimbur?url="+encodeURIComponent("${url}")+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}" ,
 		    btn: ['确定', '关闭']
     	       ,yes: function(index, layero){ //或者使用btn1
 						var tree = layero.find("iframe")[0].contentWindow.tree;//h.find("iframe").contents();

+ 219 - 0
src/main/webapp/webpage/modules/sys/tagTreeselectReimbur.jsp

@@ -0,0 +1,219 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>数据选择</title>
+	<meta name="decorator" content="blank"/>
+	<%@include file="/webpage/include/treeview.jsp" %>
+	<script type="text/javascript">
+		var key, lastValue = "", nodeList = [], type = getQueryString("type", "${url}");
+		var tree, setting = {view:{selectedMulti:false,dblClickExpand:false},check:{enable:"${checked}",nocheckInherit:true},
+				async:{enable:(type==3),url:"${ctx}/sys/user/treeDataByName",autoParam:["id=officeId","projectId=projectId","selectName=selectName"]},
+				data:{simpleData:{enable:true}},callback:{<%--
+					beforeClick: function(treeId, treeNode){
+						if("${checked}" == "true"){
+							//tree.checkNode(treeNode, !node.checked, true, true);
+							tree.expandNode(treeNode, true, false, false);
+						}
+					}, --%>
+					onClick:function(event, treeId, treeNode){
+						tree.expandNode(treeNode);
+					},onCheck: function(e, treeId, treeNode){
+						var nodes = tree.getCheckedNodes(true);
+						for (var i=0, l=nodes.length; i<l; i++) {
+							tree.expandNode(nodes[i], true, false, false);
+						}
+						return false;
+					},onAsyncSuccess: function(event, treeId, treeNode, msg){
+						var nodes = tree.getNodesByParam("pId", treeNode.id, null);
+						for (var i=0, l=nodes.length; i<l; i++) {
+							try{tree.checkNode(nodes[i], treeNode.checked, true);}catch(e){}
+							//tree.selectNode(nodes[i], false);
+						}
+						selectCheckNode();
+					},onDblClick: function(){//<c:if test="${!checked}">
+						top.$.jBox.getBox().find("button[value='ok']").trigger("click");
+						//$("input[type='text']", top.mainFrame.document).focus();//</c:if>
+					}
+				}
+			};
+		function expandNodes(nodes) {
+			if (!nodes) return;
+			for (var i=0, l=nodes.length; i<l; i++) {
+				tree.expandNode(nodes[i], true, false, false);
+				if (nodes[i].isParent && nodes[i].zAsync) {
+					expandNodes(nodes[i].children);
+				}
+			}
+		}
+		$(document).ready(function(){
+			$.get("${ctx}${url}${fn:indexOf(url,'?')==-1?'?':'&'}&extId=${extId}&isAll=${isAll}&module=${module}&t="
+					+ new Date().getTime()+"&branchOffice=${branchOffice}", function(zNodes){
+				// 初始化树结构
+				tree = $.fn.zTree.init($("#tree"), setting, zNodes);
+				
+				// 默认展开一级节点
+				var nodes = tree.getNodesByParam("level", 0);
+				for(var i=0; i<nodes.length; i++) {
+					tree.expandNode(nodes[i], true, false, false);
+				}
+				//异步加载子节点(加载用户)
+				var nodesOne = tree.getNodesByParam("isParent", true);
+				for(var j=0; j<nodesOne.length; j++) {
+					tree.reAsyncChildNodes(nodesOne[j],"!refresh",false);
+				}
+				selectCheckNode();
+			});
+			key = $("#key");
+			key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);
+			key.bind('keydown', function (e){if(e.which == 13){searchNode();}});
+			setTimeout("search();", "300");
+		});
+		
+		// 默认选择节点
+		function selectCheckNode(){
+			var ids = "${selectIds}".split(",");
+			for(var i=0; i<ids.length; i++) {
+				var node = tree.getNodeByParam("id", (type==3?"u_":"")+ids[i]);
+				if("${checked}" == "true"){
+					try{tree.checkNode(node, true, true);}catch(e){}
+					tree.selectNode(node, false);
+				}else{
+					tree.selectNode(node, true);
+				}
+			}
+		}
+	  	function focusKey(e) {
+			if (key.hasClass("empty")) {
+				key.removeClass("empty");
+			}
+		}
+		function blurKey(e) {
+			if (key.get(0).value === "") {
+				key.addClass("empty");
+			}
+			searchNode(e);
+		}
+		
+		//搜索节点
+		function searchNode() {
+			// 取得输入的关键字的值
+			var value = $.trim(key.get(0).value);
+			
+			// 按名字查询
+			var keyType = "name";<%--
+			if (key.hasClass("empty")) {
+				value = "";
+			}--%>
+			
+			// 如果和上次一次,就退出不查了。
+			if (lastValue === value) {
+				return;
+			}
+			
+			// 保存最后一次
+			lastValue = value;
+			
+			var nodes = tree.getNodes();
+			// 如果要查空字串,就退出不查了。
+			if (value == "") {
+				showAllNode(nodes);
+				return;
+			}
+			hideAllNode(nodes);
+			nodeList = tree.getNodesByParamFuzzy(keyType, value);
+			updateNodes(nodeList);
+		}
+		
+		//隐藏所有节点
+		function hideAllNode(nodes){			
+			nodes = tree.transformToArray(nodes);
+			for(var i=nodes.length-1; i>=0; i--) {
+				tree.hideNode(nodes[i]);
+			}
+		}
+		
+		//显示所有节点
+		function showAllNode(nodes){			
+			nodes = tree.transformToArray(nodes);
+			for(var i=nodes.length-1; i>=0; i--) {
+				/* if(!nodes[i].isParent){
+					tree.showNode(nodes[i]);
+				}else{ */
+					if(nodes[i].getParentNode()!=null){
+						tree.expandNode(nodes[i],false,false,false,false);
+					}else{
+						tree.expandNode(nodes[i],true,true,false,false);
+					}
+					tree.showNode(nodes[i]);
+					showAllNode(nodes[i].children);
+				/* } */
+			}
+		}
+		
+		//更新节点状态
+		function updateNodes(nodeList) {
+			tree.showNodes(nodeList);
+			for(var i=0, l=nodeList.length; i<l; i++) {
+				
+				//展开当前节点的父节点
+				tree.showNode(nodeList[i].getParentNode()); 
+				//tree.expandNode(nodeList[i].getParentNode(), true, false, false);
+				//显示展开符合条件节点的父节点
+				while(nodeList[i].getParentNode()!=null){
+					tree.expandNode(nodeList[i].getParentNode(), true, false, false);
+					nodeList[i] = nodeList[i].getParentNode();
+					tree.showNode(nodeList[i].getParentNode());
+				}
+				//显示根节点
+				tree.showNode(nodeList[i].getParentNode());
+				//展开根节点
+				tree.expandNode(nodeList[i].getParentNode(), true, false, false);
+			}
+		}
+
+		function copyText() {
+			var selectName = $("#selectName").val();
+			$.ajax({
+				url:"${ctx}/sys/user/treeDataReimbur",
+				async:false,
+				type:"post",
+				success:function (result) {
+					$.get("${ctx}${url}${fn:indexOf(url,'?')==-1?'?':'&'}&extId=${extId}&isAll=${isAll}&module=${module}&t="
+							+ new Date().getTime()+"&branchOffice=${branchOffice}"+"&selectName="+selectName, function(zNodes){
+						// 初始化树结构
+						tree = $.fn.zTree.init($("#tree"), setting, zNodes);
+
+						// 默认展开一级节点
+						var nodes = tree.getNodesByParam("level", 0);
+						for(var i=0; i<nodes.length; i++) {
+							tree.expandNode(nodes[i], true, false, false);
+						}
+						//异步加载子节点(加载用户)
+						var nodesOne = tree.getNodesByParam("isParent", true);
+						for(var j=0; j<nodesOne.length; j++) {
+							tree.reAsyncChildNodes(nodesOne[j],"!refresh",false);
+						}
+						selectCheckNode();
+					});
+					key = $("#key");
+					key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);
+					key.bind('keydown', function (e){if(e.which == 13){searchNode();}});
+					setTimeout("search();", "300");
+				}
+			})
+		}
+		
+		
+	</script>
+</head>
+<body>
+	<div class="input-group">
+		<input htmlEscape="false"  class="form-control layui-input" id="selectName" name="selectName" value="" placeholder="人员搜索">
+		<span class="input-group-btn">
+				 <button type="button"  id="Button" onclick="copyText()" style="height: 40px;" class="layui-btn layui-btn-sm"><i class="fa fa-search"> 查询</i>
+				 </button>
+			</span>
+	</div>
+	<div id="tree" class="ztree" style="padding:15px 20px;"></div>
+</body>