若依項目人員選擇器實現


下面主要記錄一下在若依項目中,實現人員選擇器功能。

使用了bootstrap Multiselect組件,其官網為:http://www.jiaoben123.com/uploadfiles/demo/d19cb85fac5b4c74bb4e387852f7d23b/#documentation

下載該組件的地址為:https://codeload.github.com/crlcu/multiselect/zip/master

1、下載好之后放在相應的js、css文件夾下,在include.html中分別引入該兩個文件:

 

<link th:href="@{/css/multiselect-master/style.css}" rel="stylesheet"/>
<script th:src="@{/js/plugins/multiselect-master/multiselect.min.js}"></script>

 

2、在system/user/下新建tree.html,具體如下

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
	
	<input id="selectedUserIds"   name="selectedUserIds"    type="hidden" th:value="${selectedUserIds}"/>
	<input id="selectedUserNames" name="selectedUserNames"  type="hidden" th:value="${selectedUserNames}"/>
	<input id="multiSelectFlag" name="multiSelectFlag"  type="hidden" th:value="${multiSelectFlag}"/>
	
	<div class="row">
		<div class="col-xs-10">
			<div class="wrapper">
				<div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
					<label id="btnShow" title="顯示搜索" style="display:none;">︾</label>
					<label id="btnHide" title="隱藏搜索">︽</label>
				</div>
			</div>
			<div class="treeSearchInput" id="search">
				<label>姓名:</label><input type="text" class="empty" id="userName" name="userName" maxlength="50"/>
				<button class="btn" id="btn" onclick="loadUserList()"> 搜索 </button>
			</div>
		</div>
	</div>
	<div class="row">
		<div class="col-xs-4">
			
			<div class="treeExpandCollapse">
				<a href="#" onclick="$.tree.expand()">展開</a> /
				<a href="#" onclick="$.tree.collapse()">折疊</a>
			</div>
			<div id="tree" class="ztree treeselect"></div>
		</div>
		
	
	
	    <div class="col-xs-3" style="padding-top: 10px;">
	     	<h4>待選人員</h4>
	        <select name="from" id="multiselect" class="js-multiselect form-control" size="15" multiple="multiple">
	        </select>
	    </div>

	    <div class="col-xs-1" style="padding-top: 40px;">
	        <button type="button" id="multiselect_rightAll" class="btn btn-block"><i class="glyphicon glyphicon-forward"></i></button>
	        <button type="button" id="multiselect_rightSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-right"></i></button>
	        <button type="button" id="multiselect_leftSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-left"></i></button>
	        <button type="button" id="multiselect_leftAll" class="btn btn-block"><i class="glyphicon glyphicon-backward"></i></button>
	    </div>

	    <div class="col-xs-3" style="padding-top: 10px;">
	   		<h4>已選人員</h4>
	        <select name="to" id="multiselect_to" class="form-control" size="15" multiple="multiple"></select>
	    </div>
	</div>

	<div th:include="include::footer"></div>
	<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
	<script th:inline="javascript">
		$(function() {
			
			var url = ctx + "system/dept/treeData";
			var options = {
		        url: url,
		        expandLevel: 2,
		        onClick : zOnClick
		    };
			$.tree.init(options);
			
			$('input[name="userName"]').on('input propertychange', function() {
				loadUserList();
			});
			
			//獲取多選標記
			var multiSelectFlag = $("#multiSelectFlag").val();
			
			//如果是非多選,進行如下處理,變成單選
			if(!multiSelectFlag || multiSelectFlag != 'true'){
								
				$("#multiselect_rightSelected").click(function(){
					
					var checkValue=$("#multiselect").val();
					
					if(checkValue != ''){
						
						$("#multiselect_to option").each(function(){  //遍歷所有option
					        var val = $(this).val();   //獲取option值
					        var text = $(this).text(); //獲取option文本內容
					        if(val!= ''){
					        	$("#multiselect").append("<option value='" +  val + "'>" +  text + "</option>");
					        }
					    });
						
						$("#multiselect_to").find("option").remove();
					}
					
		        });
				
				$("#multiselect_rightAll").hide();
				$("#multiselect_leftAll").hide();
				
			}
			
			
			
			//1、初始化左右員工選擇器
			$('#multiselect').multiselect({
				includeSelectAllOptions:true
			});
			
			//2、加載已被選擇的人員
			var selectedUserIds = $("#selectedUserIds").val();
			var selectedUserNames = $("#selectedUserNames").val();
						
			if(selectedUserIds != ''){
				var idsArray = selectedUserIds.split(",");
				var namesArray = selectedUserNames.split(",");
				for(var i=0; i<idsArray.length; i++){
                	$("#multiselect_to").append("<option value='" +  idsArray[i] + "'>" +  namesArray[i] + "</option>");
				}
			}
			
			//3、加載所有人員列表
			loadUserList();

		});
		
		//點擊部門樹事件
		function zOnClick(event, treeId, treeNode) {
		    var treeId = treeNode.id;
		    var treeName = treeNode.name;
		    loadUserList(treeId);
		}
		
		//加載人員方法
		function loadUserList(deptId){
			
			//清空當前待選擇人員框列表
			$("#multiselect").find("option").remove();
			
			var userName = $("#userName").val();
			
			var selectedUserIds = "";
			
			//獲取當前已選人員ids,用於過濾
			$("#multiselect_to option").each(function(){  //遍歷所有option
		        var val = $(this).val();   //獲取option值
		        if(val!= ''){
		        	selectedUserIds = selectedUserIds + val + ",";
		        }
		    });
			
			//加載待選人員數據
		    $.ajax({
		        type: "get",
		        url: ctx +"system/user/listForTree",
		        traditional: true,
		        dataType : "json",
		        data:{
		        		deptId : deptId,
		        		userName : userName
		        },
		        success:function(result){
		        	
	                for (var i = 0; i < result.userList.length; i++) {//加載未擁有的角色  這里根據后台傳遞的對象循環添加
	                	//與當前所選人員進行對比,待選人員中過濾掉已選的人員
	                	if(selectedUserIds != ''){
	        				var idsArray = selectedUserIds.split(",");		        					        		
	        				var flag = true;
	        				for(var k=0; k<idsArray.length; k++){
	                        	if( idsArray[k] == result.userList[i].userId){
	                        		flag = false;
	                        	}
	        				}	        				
	        				if(flag){
    		                    $("#multiselect").append("<option value='" + result.userList[i].userId + "'>" + result.userList[i].userName + "</option>");
                        	}
	        			}else{
   		                    $("#multiselect").append("<option value='" + result.userList[i].userId + "'>" + result.userList[i].userName + "</option>");
	        			}
	                }
		        }
		    });
		}
	</script>
</body>
</html>

3、在需要人員選擇的頁面,進行該頁面的調用,比如在新增部門的頁面,選擇部門負責人時:

       <input type="hidden" name="leaderId"  id="leaderId">
            <div class="form-group">
                <label class="col-sm-3 control-label">負責人:</label>
                <div class="col-sm-8">
                    <input class="form-control" type="text" name="leaderName"  onclick="selectUserTree()" id="leaderName">
                </div>
            </div>
         //人員樹形選擇器
        function selectUserTree() {
            var options = {
                title: '人員選擇',
                width: "750",
                url: ctx + "system/user/selectUserTree?selectedUserIds=" + $("#leaderId").val() + "&selectedUserNames=" + $("#leaderName").val() + "&multiSelectFlag=false",
                callBack: doSelect
            };
            $.modal.openOptions(options);
        }
        
        function doSelect(index, layero){
            
            var body = layer.getChildFrame('body', index);
            
            var userIds = "";
            var userNames = "";
            body.find("#multiselect_to option").each(function(){  //遍歷所有option
                var val = $(this).val();   //獲取option值
                var txt = $(this).text();  //獲取option的文本內容
                if(val!= '' && txt!=''){
                    userIds = userIds + val + ",";
                    userNames = userNames + txt + ",";
                }
            });
            
            userIds = userIds.substring(0,userIds.length-1);
            userNames = userNames.substring(0,userNames.length-1);
                
               $("#leaderId").val(userIds);
               $("#leaderName").val(userNames);
               layer.close(index);
        }        

4、增加后台獲取人員接口

     /**
     * 選擇人員樹
     */
    @GetMapping("/selectUserTree")
    public String selectUserTree(String selectedUserIds,String selectedUserNames,Boolean multiSelectFlag,ModelMap mmap)
    {
        mmap.put("dept", deptService.selectDeptById((long)100));
        mmap.put("selectedUserIds", selectedUserIds);
        mmap.put("selectedUserNames", selectedUserNames);
        mmap.put("multiSelectFlag", multiSelectFlag);
        return prefix + "/tree";
    }

 

    @GetMapping("/listForTree")
    @ResponseBody
    public String listForTree(SysUser user)
    {
        List<SysUser> list = userService.selectUserList(user);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("success", true);
        jsonObject.put("userList", list);
        return jsonObject.toString();
    }

 

 

 

5、最后頁面效果:

相關參考:https://blog.csdn.net/kangguowei/article/details/72758221

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM