资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

EasyUI如何创建人员树

这篇文章主要为大家展示了“EasyUI如何创建人员树”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“EasyUI如何创建人员树”这篇文章吧。

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了南湖免费建站欢迎大家使用!

项目中的树状下拉列表是用来选择人员用的,具体实现展示如下:

EasyUI如何创建人员树

先说一说功能,左边的人员数是提供选人的,当点击中间的按钮,选中的人员会直接移到右边,如果要删除已选中的人员,只需要双击右边人的姓名即可,点击确定进行集体的业务逻辑操作,一般就是新增人员到某一个表中。

我们再来看看这个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"%>





 li:hover {
 cursor: pointer;
 }


 
  
   
    
    
     请选择评估人
    
                        待选择人       
             已选择人       
           
             
              >>              
                      
      

                                          

               //人员数组(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;  };

下面再来看看java后台是如何来查找这个树的,附上后台代码

//选择评估人-树形结构
 @RequestMapping(value = "chooseAssessorTree")//这里不要指定请求方式
 public void chooseAssessorTree(HttpServletRequest req,HttpServletResponse res){
   //每次点击节点的时候会传入一个节点ID值      String id = req.getParameter("id");
   //第一次加载树时选择的区域
   String groupId = req.getParameter("groupId");
   List> list=userService.queryJSAssessor(id,groupId);
   BuildJSON.printToClient(req, res, arrayBuilder(list));
 }
 //获得树值
 private JSONArray arrayBuilder(List> list) {
  JSONArray arr = new JSONArray();
  if (list != null && list.size() > 0) {
   for (int i=0;i

dao查询方法

/**查询树结构的人员以及部门数据
  * @param parentGroupId
  * @param groupId 第一次加载树查询的 区域 例如是成都分公司,则查询出成都分公司下面的部门以及人员
  * @return
  */
 List> queryJSAssessor(@Param("parentGroupId") String parentGroupId, @Param("groupId")String groupId);  

对应的xml


  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'
     
      AND fg.PARENT_ID = #{parentGroupId}
     
      
       
        AND fg.PARENT_ID = #{groupId}
       
       
       AND fg.GROUP_LEVEL = 0
       
      
      )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!=''
     
      AND fug.GROUP_ID = #{parentGroupId}
     
     
       
        AND fug.GROUP_ID = #{groupId}
       
       
       AND fg.GROUP_LEVEL = 0
       
      
      )e
   ORDER BY userImg, CAST(disOrder AS int)
 

最后再附上一个使用实例的 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" %>




 专项评估 > 任务分发
 
 
 
 
 
 
 
 
 
 
  .table tbody td:nth-child(1n) {
   text-align: center;
   vertical-align: middle;
  }
  .mr15 {
   margin-right: 15px;
  }
 



 
 
 
 
 
 
 
 
  
  
  ${taskName}
  
  
   
    任务分发
   
   
    关闭
   
  
  
   本次评估信息
   
    批量设置评分人
    批量清空评分人
   
  
  
   
    
     
     
      
      序号
      协议/合同名称
      评估供应商
      评估人
      评估模板
     
     
     
     
      
       
       ${status.index+1}
        
        
        
       
       ${line.contractName}
       ${line.vendorName}
       
        
          ${line.userNames}
         
         
         
         
         
        
        
         设置评估人
        
       
        ${line.templetName}
      
     
     
    
   
  
 

 
<%-- <%@ include file="../../../../static/scm/userTree.jsp"%> --%>

 $(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;i0){
     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("设置评估人");
//    }
   }
  });
 }
 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("请先设置评估人!");
  }
 }


以上是“EasyUI如何创建人员树”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文名称:EasyUI如何创建人员树
转载来于:http://www.cdkjz.cn/article/ghhddg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220