国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

EasyUI創建人員樹的實例代碼

2019-11-19 15:25:53
字體:
來源:轉載
供稿:網友

最近做了一個樹狀的下拉列表,在這里記錄一下,以后可以直接使用

項目中的樹狀下拉列表是用來選擇人員用的,具體實現展示如下:

先說一說功能,左邊的人員數是提供選人的,當點擊中間的按鈕,選中的人員會直接移到右邊,如果要刪除已選中的人員,只需要雙擊右邊人的姓名即可,點擊確定進行集體的業務邏輯操作,一般就是新增人員到某一個表中。

我們再來看看這個DIV的具體代碼,由于項目中在多個地方都使用到了這個人員樹,所以我把這個DIV抽象出來當作一個公共的jsp頁面。如需調用,只需要include這個jsp即可

userTree.jsp:

<%@ page contentType="text/html;charset=utf-8"%><%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib prefix="sino" tagdir="/WEB-INF/tags"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><c:set var="ctx" value="${pageContext.request.contextPath}" /><!--彈出窗口,人員樹必要--><link href="${ctx}/static/lib/jquery-easyui/themes/default/easyui.css" rel="external nofollow" rel="external nofollow"  type="text/css" rel="stylesheet" /><script src="${ctx}/static/lib/jquery-easyui/jquery.easyui.min.js" type="text/javascript"></script><style type="text/css"> li:hover { cursor: pointer; }</style><!-- 模態框彈出設置評估人 --> <div id="groupuser" class="modal fade" aria-hidden="true"  data-backdrop="static">  <div class="modal-dialog">   <div class="modal-content">    <input type="hidden" id="ModaltaskLineId" />    <div class="modal-header">     <h4 class="modal-title text-left">請選擇評估人</h4>    </div>    <div class="modal-body">     <div >      <div style=" float: left; width: 300px;font-size:15px; ">      待選擇人      </div>      <div style="float: left; font-size:15px; width: 100px; ">      已選擇人      </div>     </div>     <div>      <div id="tt"       style="border:1px solid #e4eaf8; float: left; width: 250px; height: 300px; overflow-x: scroll;">      </div>      <div align="center" style="float: left; margin-left: 10px; margin-right:10px; height: 150px;margin-top: 150px;">       <button type="button" class="btn-xs btn-primary" onclick="$add()">>></button>      </div>      <div       style="border:1px solid #e4eaf8;width:250px; height: 300px;overflow-x: scroll;">       <ul id="names" style="list-style: none;padding-left:5px;">       </ul>      </div>      <p></p>     </div>     <div align="center">        <input class="btn btn-cmcc mr15 " type="button" value="確定" onclick="modelCheckAssessors()">        <input class="btn btn-cmcc mr15" type="button" value="取消" onclick="modalHide()">      </div>     <p/>    </div>   </div>  </div> </div><script type="text/javascript"> //人員數組(longinName) 本項目是已登錄名為主鍵存入,也可存入userID var arr = []; //點擊確定的處理邏輯方法名稱,調用方法的時候需要設置 var fn = ""; //展示人員樹,右邊沒有默認值 function showTree(groupId) {          //查詢范圍是在groupId這個部門以下的節點部門和人員  //console.log(groupId);  $('#tt').tree({   //一般情況下,除了url外,其他參數非必選   //url: contextPath + requestURL,//請求的后臺路徑              //這里需要注意的是后臺url不要指定請求方式為GET方式,否則會報錯。   url : CONTEXT_PATH + "/sysmgr/user/chooseAssessorTree?groupId="+groupId,   animate : true, //是否需要動畫效果   checkbox : 'true', //是否需要checkbox 支持復選   cascadeCheck : 'false',//是否級聯選中   onlyLeafCheck : 'true', //是否只有leaf節點有checkbox   lines : true,//是否顯示線   onClick : function(node) {    //點擊    /* var leaf = $('#tt').tree("isLeaf", node.target); //判斷是否為leaf     if(leaf){     arr.push(node.id);     } */    $('#tt').tree("toggle", node.target);//點擊父節點和點擊父節點前面的+號一樣能展開   },   onLoadError : function(node, data) {    alert("查詢不到數據,樹形加載失敗");    return;   },   onCheck : function(node, checked) {    if (checked) {     //arr.push(node);    } else {     //arr.remove(node);    }   }  /* onBeforeLoad:function(node,param){   param.screeningTxt = $("#screeningTxt").val();  }*/  });  $("#groupuser").modal("show");//顯示模態框, }       //接口方法,外面的jsp通過調用這個方法來彈出人員樹模態框,且希望只能調用這個方法 //展示人員數,右邊有默認值 //參數havaDefault表示是否有默認值,注意,批量設置不能夠有默認值 布爾值:true,false //參數loginNameDisplayNameStr是longinName和displayName的組合字符串,例如有三個人:"zhangsan-張三,lisi-李四,wangwu-王五",如果沒有默認值,就設置為null       //參數method表示方法名稱,即你點擊確定之后返回的人員的處理方法名稱,注意這個方法規定參數只能有一個,那就是人員登陸名的一個字符串,多個人用";"隔開    //參數groupId表示傳入到后臺的一個參數。在本項目中,由于需要根據條件查詢出不同公司/部門下的人員,所以傳入了部門ID,若沒有,可以為null function showTreeDefault(loginNameDisplayNameStr, method, havaDefault,groupId) {  arr = [];//需要設置為全局變量  fn = method;  if (!havaDefault) {   showTree(groupId);   return;  }  if (loginNameDisplayNameStr!=null) {   //alert(loginNameDisplayNameStr);   //加載默認值到樹的右邊邊框   var result = loginNameDisplayNameStr.split(",");   for (var i = 0; i < result.length; i++) {    var user = result[i].split("-");    var loginName = user[0];    var displayName = user[1];    var ul = document.getElementById("names");    var li = document.createElement("li");    li.setAttribute("value", loginName);    li.setAttribute("ondblclick", "$remove(this)");    li.innerHTML = displayName;    ul.appendChild(li);    arr.push(loginName);   }  }  showTree(groupId); } function modelCheckAssessors() {  if (arr.length != 0) {              //將登錄名數組以";"隔開組成一個字符串   var loginNameStr = arr.join(";");   returnVal(loginNameStr);  } else {   returnVal(null);  } } function returnVal(retArr) {  //調用處理邏輯方法  window[fn](retArr);  //關閉模態框  modalHide(); } function modalHide() {  //清空右邊li的數據  $('ul li').remove();  $("#groupuser").modal("hide"); } function $add() {  var nodes = $('#tt').tree('getChecked');  if (nodes.length != 0) {   for (var i = 0; i < nodes.length; i++) {    var loginName = nodes[i].id;    var userName = nodes[i].text;    addEleInMainBox(loginName, userName);    $('#tt').tree('uncheck', nodes[i].target);//去掉選中的   }  } }; function addEleInMainBox(loginName, userName) {  //1.判斷當前div中是否已經存在該loginName,如果有重復的則不添加  if (arr.Exists(loginName)) {   //alert("已經存在"+loginName+",不再添加");   return;  }  //2.添加該評估人到li中  var ul = document.getElementById("names");  var li = document.createElement("li");  li.setAttribute("value", loginName);  li.setAttribute("ondblclick", "$remove(this)");  li.innerHTML = userName;  ul.appendChild(li);  arr.push(loginName); } function $remove(obj) {  var loginName = obj.getAttribute("value");  obj.parentNode.removeChild(obj);  arr.remove(loginName); } Array.prototype.remove = function(val) {  var index = this.indexOf(val);  if (index > -1) {   this.splice(index, 1);  } }; Array.prototype.Exists = function(v) {  var b = false;  for (var i = 0; i < this.length; i++) {   if (this[i] == v) {    b = true;    break;   }  }  return b; };</script>

下面再來看看java后臺是如何來查找這個樹的,附上后臺代碼

//選擇評估人-樹形結構 @RequestMapping(value = "chooseAssessorTree")//這里不要指定請求方式 public void chooseAssessorTree(HttpServletRequest req,HttpServletResponse res){   //每次點擊節點的時候會傳入一個節點ID值<br data-filtered="filtered">      String id = req.getParameter("id");   //第一次加載樹時選擇的區域   String groupId = req.getParameter("groupId");   List<Map<String,Object>> list=userService.queryJSAssessor(id,groupId);   BuildJSON.printToClient(req, res, arrayBuilder(list)); } //獲得樹值 private JSONArray arrayBuilder(List<Map<String,Object>> list) {  JSONArray arr = new JSONArray();  if (list != null && list.size() > 0) {   for (int i=0;i<list.size();i++) {    JSONObject obj = new JSONObject();    Map map=list.get(i);    String userImg=map.get("userImg").toString();    if (userImg.equals("1")) {//表示到了葉子節點,選擇出人     obj.put("id", map.get("loginName"));     obj.put("text", map.get("displayName"));     obj.put("state", "open");     //obj.put("iconCls", "icon-user2-gj");    }else{     obj.put("id", map.get("groupId"));     obj.put("text", map.get("groupName"));     obj.put("state", "closed");    }    arr.add(obj);   }  }  return arr; }

dao查詢方法

/**查詢樹結構的人員以及部門數據  * @param parentGroupId  * @param groupId 第一次加載樹查詢的 區域 例如是成都分公司,則查詢出成都分公司下面的部門以及人員  * @return  */ List<Map<String, Object>> queryJSAssessor(@Param("parentGroupId") String parentGroupId, @Param("groupId")String groupId);  

對應的xml

<select id="queryJSAssessor" resultType="Map" parameterType="String">  SELECT    e.loginName,    e.displayName,    e.groupId,    e.groupCode,    e.groupName,    e.disOrder,    e.userImg    FROM    (SELECT s.loginName,s.displayName,s.groupId,s.groupCode,s.groupName,s.disOrder,s.userImg FROM     (SELECT '0' loginName,       '0' displayName,      fg.ID groupId,      fg.CODE groupCode,      fg.NAME groupName,      fg.DISPLAY_ORDER disOrder,      isnull((select count(id) FROM FND_GROUP where PARENT_ID=fg.ID),0) groupLeaf,      (select COUNT(1) from FND_USER_GROUP fug, FND_USER fu where fug.USER_ID = fu.ID and fug.GROUP_ID = fg.ID) userLeaf,      0 userImg     FROM FND_GROUP fg     WHERE fg.ENABLE_FLAG = 'Y'     <if test="parentGroupId != null and '' != parentGroupId">      AND fg.PARENT_ID = #{parentGroupId}     </if>      <if test="parentGroupId == null or '' == parentGroupId">       <if test="groupId!=null and '' !=groupId">        AND fg.PARENT_ID = #{groupId}       </if>       <if test="groupId==null or ''==groupId">       AND fg.GROUP_LEVEL = 0       </if>      </if>      )s WHERE s.groupLeaf>0 OR s.userLeaf>0   UNION ALL      SELECT fu.LOGIN_NAME loginName,       fu.DISPLAY_NAME displayName,       fg.ID groupId,      fg.CODE groupCode,      fg.NAME groupName,      fg.DISPLAY_ORDER disOrder,      1 userImg    FROM FND_USER fu     LEFT JOIN FND_USER_GROUP fug ON fu.ID=fug.USER_ID    LEFT JOIN FND_GROUP fg ON fug.GROUP_ID=fg.ID     WHERE fu.ENABLE_FLAG = 'Y'      AND fug.PRIMARY_FLAG='Y'     AND fg.NAME!=''     AND fu.LOGIN_NAME!=''     AND fu.DISPLAY_NAME!=''     AND fu.MOBILE!=''     <if test="parentGroupId != null and '' != parentGroupId">      AND fug.GROUP_ID = #{parentGroupId}     </if>     <if test="parentGroupId == null or '' == parentGroupId">       <if test="groupId!=null and '' !=groupId">        AND fug.GROUP_ID = #{groupId}       </if>       <if test="groupId==null or ''==groupId">       AND fg.GROUP_LEVEL = 0       </if>      </if>      )e   ORDER BY userImg, CAST(disOrder AS int) </select>

最后再附上一個使用實例的 jsp

<%-- Created by IntelliJ IDEA. User: zht Date: 2017/7/18 Time: 20:36 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=utf-8" %><%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib prefix="sino" tagdir="/WEB-INF/tags" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><c:set var="ctx" value="${pageContext.request.contextPath}"/><!DOCTYPE html><html><head> <title>專項評估 > 任務分發</title> <script src="${ctx}/static/scm/js/commonDialog.js" type="text/javascript"></script> <link href="${ctx}/static/sinoprof/core/css/menu-dropdown.css" rel="external nofollow" type="text/css" rel="stylesheet"/> <script src="${ctx}/static/sinoprof/core/js/namespace.js" type="text/javascript"></script> <script src="${ctx}/static/sinoprof/core/js/lookupDialogRemember.js" type="text/javascript"></script> <script src="${ctx}/static/scm/js/taskEditExcelData.js" type="text/javascript"></script> <script src="${ctx}/static/scm/js/bootstrap-filestyle.js" type="text/javascript"></script> <link href="${ctx}/static/lib/jquery-easyui/themes/default/easyui.css" rel="external nofollow" rel="external nofollow"  type="text/css" rel="stylesheet" /> <script src="${ctx}/static/lib/jquery-easyui/jquery.easyui.min.js" type="text/javascript"></script> <sino:sinoflow ctx="${ctx}" SFActInfo="${SFActInfo}"/> <style type="text/css">  .table tbody td:nth-child(1n) {   text-align: center;   vertical-align: middle;  }  .mr15 {   margin-right: 15px;  } </style></head><body><form:form id="appform" name="specialTask" class="form-horizontal" role="form"   action="${ctx}/scm/special/distribute/submit" method="post"> <input type="hidden" id="Launch_Code" /> <input type="hidden" id="APPL_COLUMN4"> <input type="hidden" id="loginIds" name="loginIds" > <input type="hidden" id="Launch_Code_Bypass" value="C1"> <input type="hidden" id="groups" name="groups" value="${flowGroups}"> <input type="hidden" id="sf_actID" value="${sf_actID}"> <input type="hidden" id="nextLoginName" value="${nextLoginName}"> <div class="control-group">  <input type="hidden" name="taskId" value="${taskId}">  <input type="hidden" name="taskName" value="${taskName}">  <h2 style="text-align:center">${taskName}</h2>  <input type="hidden" id="taskId" value="${taskId}">  <div style="height: 70px">   <div class="pull-right mr15">    <button type="button" class="btn-cmcc" onclick="doSubmit();">任務分發</button>   </div>   <div class="pull-right mr15">    <button id="cancelBtn" type="button" class="btn-cmcc" onclick="window.location.href='${ctx}/flow/workbench/pendingTray'">關閉</button>   </div>  </div>  <div class="group-header col-xs-12">   <span class="title">本次評估信息</span>   <div class="dropdown opts table-opts" data-table="3">    <a class="btn-span" style="color:white" data-action="" onclick="checkAssessors(this,true);">批量設置評分人</a>    <a class="btn-span" style="color:white" data-action="" onclick="removeAssessors(this,true);">批量清空評分人</a>   </div>  </div>  <div class="form-group" >   <div class="col-md-12">    <table class="col-md-12 table table-striped table-bordered table-hover">     <thead>     <tr>      <td style="width:3%"><input type="checkbox" id="selectAll" name="selectAll"/></td>      <th style="width:4%">序號</th>      <th style="width:35%">協議/合同名稱</th>      <th style="width:23%">評估供應商</th>      <th style="width:20%">評估人</th>      <th style="width:15%">評估模板</th>     </tr>     </thead>     <tbody>     <c:forEach items="${specialTaskLineList}" var="line" varStatus="status">      <tr>       <td><input type="checkbox" name="chkItem" value="${line.taskLineSetId}"></td>       <th>${status.index+1}        <input type="hidden" name="taskLineId" value="${line.taskLineId}">        <input type="hidden" name="taskLineSetId" value="${line.taskLineSetId}">        <input type="hidden" name="objectType" value="${line.objectType}">       </th>       <td>${line.contractName}</td>       <td>${line.vendorName}</td>       <td class="assessorsTd" name="assessorsTd" style="text-align:left; color:#E69500">        <c:if test="${line.userNames !=null}">         <a onclick="checkAssessors(this,false);"style="color:#E69500" > ${line.userNames}</a>         <!-- <a onclick="removeAssessors(this,false);" style="">清空</a> -->         <input type="hidden" name="userNames" value="${line.userNames}" />         <input type="hidden" class="loginNames" name="loginNames" value="${line.loginNames}" />         <input type="hidden" name="loginNameDisplayNameStr" value="${line.loginNameDisplayNameStr}" />         <input type="hidden" name="flowGroups" value="${line.flowGroups}" />        </c:if>        <c:if test="${line.userNames ==null}">         <a onclick='checkAssessors(this,false);' style='color: red'>設置評估人</a>        </c:if>       </td>       <td> <a href="##" rel="external nofollow" onclick="showIndicatorsDetail(this)">${line.templetName}</a></td>      </tr>     </c:forEach>     </tbody>    </table>   </div>  </div> </div></form:form> <jsp:include page="/WEB-INF/views/workflow/workbench/userTree.jsp" /><%-- <%@ include file="../../../../static/scm/userTree.jsp"%> --%><script type="text/javascript"> $(function () {  //全選、取消全選的事件  $("#selectAll").click(function () {   $("input[name='chkItem']").prop("checked", this.checked);  }); }); function assessorsValidate(){  var flag=true;  $(".assessorsTd").each(function(){   var validateMedium=$(this).find("input[name='loginNames']").val();   if(!validateMedium){    flag=false;    msgAlert("評估人未設置");    return false;   }  });  return flag; } function do_Validate_Save() {//流程“暫存”前由流程引擎自動調用,如果該函數返回false,流程引擎中止“暫存”操作  if ($("#appform").valid()&&assessorsValidate()) {   return true;  }else{   return false;  } } //提交數據 function doSubmit() {  var companyId = $("#companyId").val();  if(companyId =="00"){   $("#Launch_Code").val("B");  }else {   $("#Launch_Code").val("A");  }  if (do_Validate_Save()){   var assessors=new Array();   $('.loginNames').each(function(index){    var arrayEach=($(this).val()).split(",");    for(var i=0;i<arrayEach.length;i++){     if(assessors.indexOf(arrayEach[i])<0){      assessors.push(arrayEach[i]);     }    }   });   assessors=assessors.join(";");   if($("#nextLoginName").val()){    $("#loginIds").val($("#nextLoginName").val());   }else {    $("#loginIds").val(assessors);   }   if(checkAppraiser()){    do_Div_Complete_Start();   }else {    msgAlert("存在指標評估人為空");   }  } } function checkAppraiser(){  var flag = true;  var taskId = $("#taskId").val();  $.ajax({   url:"${ctx}/scm/special/distribute/checkAppraiser",   type:"post",   dataType:"json",   async:false,   data:{"taskId":taskId},   success:function(result){    if(result>0){     flag = false;    }   }  });  return flag; } //選擇評估人 function checkAssessors(obj,flag) {  if(flag&& $("input[name='chkItem']:checked").length == 0){   msgAlert("請選擇要設置的行。");   return;  }  arr = [];//需要設置為全局變量  var method="dealMethod";  if(!flag){    var taskLineSetId = $(obj).parents("tr").find("input[name='taskLineSetId']").val();    //這里的ModaltaskId為模態框里面的id值,表示需要修改的行,該列表示可以傳遞的參數    $("#ModaltaskLineId").val(taskLineSetId);    //獲取評估人信息loginName和displayNameStr(默認值)    var loginNameDisplayNameStr = $(obj).parents("tr").find("input[name='loginNameDisplayNameStr']").val();    showTreeDefault(loginNameDisplayNameStr,method,true);  }  //批量設置評估人  else{    var check = $("input[name='chkItem']:checked");    var taskLineIdStr="";    check.each(function (index) {     if(index==0){      taskLineIdStr=$(this).val();     }else{      taskLineIdStr+=","+$(this).val();     }   });    $("#ModaltaskLineId").val(taskLineIdStr);   showTreeDefault(null,method,false);  } } //判斷是否是批量設置評估人,如果是批量,循環處理(本方法也是模態框處理方法) function dealMethod(loginNames){   if(loginNames==null){    alert("評估人不能為空,設置失敗!");    return ;   }   var taskLineSetIdStr = $("#ModaltaskLineId").val();   $.commonDialog.showProgress('${ctx}', '正在設置評估人,請稍候...');   saveAppraiser(taskLineSetIdStr,loginNames); } function saveAppraiser(taskLineSetIdStr,loginNames) {  $.ajax({   url:"${ctx}/scm/special/distribute/saveAppraiser",   type:"post",   dataType:"json",   async:false,   data:{"taskLineSetIdStr":taskLineSetIdStr,"loginNames":loginNames},   success:function(result){    window.location.reload();   }  }); } function removeAssessors(obj,flag) {  if(flag&& $("input[name='chkItem']:checked").length == 0){   msgAlert("請選擇要設置的行。");   return;  }  msgConfirm("是否確認清空?",    function () {     $.commonDialog.showProgress('${ctx}', '正在刪除,請稍候...');     $("#nextLoginName").val("");     if(flag){      $("input[name='chkItem']:checked").each(function () {       removepeople($(this).parents("tr").find("td input[name ='loginNames']"));      });     }else {      removepeople(obj);     }     window.location.reload();//     $.commonDialog.hiddenProgress();    }  ); } function removepeople(obj) {  var taskLineSetId = $(obj).parents("tr").find("th input[name=taskLineSetId]").val();  $.ajax({   url:"${ctx}/scm/special/distribute/delAppraiser",   type:"post",   dataType:"json",   async:false,   data:{"taskLineSetId":taskLineSetId},   success:function(result){//    if(result =='Y'){//     $(obj).parent("td") .html("<a onclick='checkAssessors(this,false);' style='color: red'>設置評估人</a>");//    }   }  }); } function showIndicatorsDetail(obj) {  var loginNames = $(obj).parents("tr").find("td input[name=loginNames]").val();  var taskLineId = $(obj).parents("tr").find("th input[name=taskLineId]").val();  var objectType = $(obj).parents("tr").find("th input[name=objectType]").val();  var sf_actID = $("#sf_actID").val();  if(loginNames){   window.location.href= "${ctx}/scm/special/distribute/indicatorsEdit?taskLineId="+taskLineId+"&objectType="+objectType+"&sf_actID="+sf_actID;  }else {   msgAlert("請先設置評估人!");  } }</script></body></html>

總結

以上所述是小編給大家介紹的EasyUI創建人員樹的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长岛县| 杨浦区| 南川市| 水城县| 余姚市| 闸北区| 扎囊县| 屏东县| 海安县| 平湖市| 岳池县| 湛江市| 中西区| 都匀市| 罗山县| 青龙| 从化市| 阿勒泰市| 福海县| 江山市| 且末县| 莱州市| 班玛县| 安平县| 罗江县| 南漳县| 富源县| 礼泉县| 麻江县| 昆山市| 绵竹市| 朝阳市| 青州市| 苍南县| 桐梓县| 天气| 保德县| 高平市| 新野县| 四会市| 平塘县|