改造一下jeecg中的部门树

假装有需求

关于 jeecg 提供的部门树,相信很多小伙伴都已经用过了,今天假装有那么一个需求 "部门树弹窗选择默认展开下级部门",带着这个需求再次去探索一下吧。

一、改造之前的部门选择树流程

1.1 t:departSelect标签

代码片段:

<t:departSelect selectedNamesInputId="orgNames" selectedIdsInputId="orgIds"></t:departSelect>

关于 selectedNamesInputIdselectedIdsInputId 属性:

  • selectedNamesInputId:用于显示勾选后的部门名称
  • selectedIdsInputId:用于记录勾选后的部门id

使用 "t:departSelect" 标签其实帮我们创建了两个 inputorgNamesorgIds,就是上方指定的两个属性名称,效果如下:

<input class="inuptxt" readonly="true" type="text" id="orgNames" name="orgNames" style="width: 150px" onclick="openDepartmentSelect()"><input class="inuptxt" id="orgIds" name="orgIds" type="hidden" value=",">

通过生成的这两个 input,我们发现重点落在了 openDepartmentSelect() 这个方法,下面来看一下这个方法。

1.2 openDepartmentSelect()方法

方法代码:

function openDepartmentSelect() {        $.dialog.setting.zIndex = 9999;         $.dialog({        content: ‘url:departController.do?departSelect‘,         zIndex: 2100,         title: ‘组织机构列表‘,         lock: true,         width: ‘400px‘,         height: ‘350px‘,         opacity: 0.4,         button: [               {name: ‘确定‘, callback: callbackDepartmentSelect, focus: true},               {name: ‘取消‘, callback: function (){}}   ]    }).zindex();}

知识点: jeecg 中所有的表单弹出采用的技术都是 lhgdialog ,技术链接:http://www.lhgdialog.com/

通过上方的请求链接,我们找到最终的跳转界面(departSelect.jsp):

1.3 departSelect.jsp界面

<html><head><title>组织机构集合</title>···<script type="text/javascript">    ...    //加载展开方法    function zTreeOnExpand(event, treeId, treeNode){         var treeNodeId = treeNode.id;         $.post(            ‘departController.do?getDepartInfo‘,            {parentid:treeNodeId,orgIds:$("#orgIds").val()},            function(data){                var d = $.parseJSON(data);                if (d.success) {                    var dbDate = eval(d.msg);                    var tree = $.fn.zTree.getZTreeObj("departSelect");

                    if (!treeNode.zAsync){                        tree.addNodes(treeNode, dbDate);                        treeNode.zAsync = true;                    } else{                        tree.reAsyncChildNodes(treeNode, "refresh");                    }                    //tree.addNodes(treeNode, dbDate);                }            }        );    }

    //首次进入加载level为1的    $(function(){        $.post(            ‘departController.do?getDepartInfo‘,            {orgIds:$("#orgIds").val()},            function(data){                var d = $.parseJSON(data);                if (d.success) {                    var dbDate = eval(d.msg);                    $.fn.zTree.init($("#departSelect"), setting, dbDate);                }            }        );    });</script></head><body style="overflow-y: auto" scroll="no"><input id="orgIds" name="orgIds" type="hidden" value="${orgIds}"><ul id="departSelect" class="ztree" style="margin-top: 30px;"></ul></body></html>

知识点: jeecg 中所采用的树列表是 ztree ,技术链接:http://www.treejs.cn/

关于上方这两个方法的解读:
界面加载,首先请求数据,获取数据后初始化 ztree,每次部件被点击都会触发 zTreeOnExpand 方法,附带父部门 id 获取子部门数据。

通过该界面我们找到了最先请求数据的方法:getDepartInfo 方法,那么这个方法其实我们通过上方的注释已经了解到 首次进入加载level为1的,意味着只加载了父部门的数据,通过具体后台代码验证:

@RequestMapping(params = "getDepartInfo")@ResponseBodypublic AjaxJson getDepartInfo(HttpServletRequest request, HttpServletResponse response){

    AjaxJson j = new AjaxJson();

    String orgIds = request.getParameter("orgIds");

    String[] ids = new String[]{};     if(StringUtils.isNotBlank(orgIds)){        orgIds = orgIds.substring(0, orgIds.length()-1);        ids = orgIds.split("\\,");    }

    List<TSDepart> tSDeparts = new ArrayList<TSDepart>();

    StringBuffer hql = new StringBuffer(" from TSDepart t where 1=1 ");    tSDeparts = this.systemService.findHql(hql.toString());

    List<Map<String,Object>> dateList = new ArrayList<Map<String,Object>>();    if(tSDeparts.size()>0){        Map<String,Object> map = null;        String sql = null;         Object[] params = null;        for(TSDepart depart:tSDeparts){            map = new HashMap<String,Object>();            map.put("id", depart.getId());            map.put("name", depart.getDepartname());

            map.put("code",depart.getOrgCode());

            if(ids.length>0){                for(String id:ids){                    if(id.equals(depart.getId())){                        map.put("checked", true);                    }                }            }

            if(depart.getTSPDepart() != null){                map.put("pId", depart.getTSPDepart().getId());            }else{                map.put("pId", "1");            }

            if(ids.length>0){                for(String id:ids){                    if(id.equals(depart.getId())){                        map.put("checked", true);                    }                }            }

            dateList.add(map);        }    }    net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(dateList);    j.setMsg(jsonArray.toString());    return j;}

果不其然,只加载了 orgType = 1 的结节。

至此,我们已经清楚地了解到具体改造步骤在于数据,接下来要开始改造了。

二、改造需求中的部门树

2.1 后台getDepartInfo方法

删除掉了 parentid 的判断条件

if(StringUtils.isNotBlank(parentid)){        TSDepart dePart = this.systemService.getEntity(TSDepart.class, parentid);    hql.append(" and TSPDepart = ?");    tSDeparts = this.systemService.findHql(hql.toString(), dePart);} else {    hql.append(" and t.orgType = ?");    tSDeparts = this.systemService.findHql(hql.toString(), "1");}

2.2

$(function(){    $.post(        ‘departController.do?getDepartInfo‘,        {orgIds:$("#orgIds").val()},        function(data){            var d = $.parseJSON(data);            if (d.success) {                var dbDate = eval(d.msg);                $.fn.zTree.init($("#departSelect"), setting, dbDate);

                //1、全部展开                //$.fn.zTree.init($("#departSelect"), setting, dbDate).expandAll(true);

                var treeObj = $.fn.zTree.getZTreeObj("departSelect");                var nodes = treeObj.getNodes();

                //设置节点展开                for (var i= 0; i < nodes.length; i++) {                    //2、第二种方式实现全部展开                    //treeObj.expandNode(nodes[i], true, true, true);                }

                //3、只展开第一个节点                treeObj.expandNode(nodes[0], true, true, true);            }        }    );});

效果图:

上方代码,提供了1、2、3,其中1、2都是事先全部展开节点,3表示展开指定的节点,具体用法请参考:http://www.treejs.cn/v3/api.php

三、试一试

既然我们了解到了ztee的使用,那么我们不防再完善一下这个部门选择,增加一个模糊搜索的功能,具体实现效果如下。

最后

文章作者:niceyoo
文章地址:https://www.cnblogs.com/niceyoo/p/10527254.html
如果觉得文章对你有所帮助,右下方点个推荐~


原文地址:https://www.cnblogs.com/niceyoo/p/10527254.html

时间: 2024-10-14 02:30:39

改造一下jeecg中的部门树的相关文章

Jeecg中的&lt;t:datagrid treegrid=&quot;true&quot;&gt;实现

Jeecg的代码生成器很不错,但是可能有的时候不是那么符合我们实际项目的功能需求,这里会首先介绍jeecg原生生成的样子,以及根据需求进行的改造.Jeecg中的<t:datagrid>就是将easyui进行封装而成.jsp页面引入:<%@include file="/context/mytags.jsp"%>,在mytags.jsp中<%@ taglib prefix="t" uri="/easyui-tags"%&

jqxtree异步加载部门树

整体思路 A.要想实现异步加载第一次加载的是一级部门 B.加载一级部门,如果有子部门,部门前面带+号,没有子部门,部门前面没有+号(+号也就是点击可以展开) C.在sql中实现如果有子部门默认都加载一个子部门名称为“查询中...”的部门,id自己定唯一就行,这样就可以实现加载的一级部门到底前面带不带+号 D.当点击可以展开的部门时,将部门为“查询中...”的替换为异步查出来的部门 1.引入样式和js(差不多能用到的都引入吧以便以后能用到) <link rel="stylesheet&quo

如何将数据库中存的树转化为树形列表(以easyui的tree为例)

很多时候,我们会把一棵树存放到数据库中,当前台需要展示一个树形列表时,将这棵树读取出来并显示,这个过程是怎么实现的呢? 这篇文章是以构造一棵easyui前台框架的一个树形列表为例,后台框架是spring MVC+JPA. 首先看一下数据库中这颗树是怎么存的: 树的结构一目了然,这是一棵表示部门的树. 下面是实体类: /** * 部门类 用户所属部门(这里的部门是一个相对抽象的词) * 使用前缀编码,每级增加三个数字,如:第一级 001,第二级001001,第三级001001001 * @auth

iMatrix平台中页标签树(ztree:ztree-leaf)用法

1.1.1    页签标签树<ztree:ztree-leaf> 1.1.1.1    用法 <ztree:ztree-leaf leafs='[{                                 leaftitle:"部门人员树",                                 treeId:"treeId1",                                 treeType: "MA

我所经历的企业中IT部门在企业内部的地位

本月参加了一个ITIL的培训,从培训中了解很多关于企业信息化及系统业务运维的知识和方法论.通过这次培训并结合自己近6年的IT 工作经历,明白了以前很多不明白的道理. 先说说自己经历的几家公司吧,我属于那种跳槽不频繁的那种,工作6年,包括现在这家公司,我只呆过3家公司,这3家公司各有特色. 先说第一家吧,第一家是一家日资的纯软件外包公司,主要是做日本一个大企业的软件外包项目,这家公司的规模虽然不大,员工90%以上 都是中国人,但是管理却是日式的,我进入这家公司时,这家公司在深圳成立还不久,不到一年

SQL 由人员汇总到部门树递归合计总数函数

1.由人员计算出总数,在部门树(tree)按结构汇总(主父绑定) CREATE function [dbo].[GetEmpDepNum] ( @ID int ) RETURNS @Tree Table (ID [int] IDENTITY (1, 1),PID Int,FID Int,SN Varchar(150), Name Varchar(150), Num Varchar(150)) as begin declare @MaxNum int,@i int,@f int,@sNnm int

JEECG中修改时间相关自定义定时器

JEECG中使用,如下: @InitBinder public void initBinder(ServletRequestDataBinder binder) { binder.registerCustomEditor(Date.class, new DateConvertEditor()); } 其中的DateConvertEditor类是JEECG中用于将日期进行转换的类.其主要代码如下: private SimpleDateFormat datetimeFormat = new Simp

FineReport中如何制作树数据集来实现组织树报表

1. 问题描述 FineReport,组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集--树数据集,只需要简单的设置就能自动递归出层级,方便的实现如下图组织树报表: 图一   图二 2. FineReport构建树 2.1 新建报表,添加数据集 新建工作薄,添加数据集ds1取出原始数据,SQL语句为SELECT * FROM 公司部门. 2.2 定义树数据集 1)根据父字段构建树 使用情形:原始表

Day03处理上级部门(树状结构)和用户管理

系统管理:部门管理-处理上级部门 添加或者修改时,上级部门的格式如图:.解决此功能将面临两个问题:1.将所有部门名称以下拉选的形式展示出来2.以树状结构展示.在此我们先解决问题1. 在添加页面中展示所有部门名称,并完成添加功能 DepartmentAction: public String addUI() throws Exception { //准备数据 List<Department> departmentList = departmentService.findAll(); Action