jqxtree异步加载部门树

整体思路

  A.要想实现异步加载第一次加载的是一级部门

  B.加载一级部门,如果有子部门,部门前面带+号,没有子部门,部门前面没有+号(+号也就是点击可以展开)

  C.在sql中实现如果有子部门默认都加载一个子部门名称为“查询中...”的部门,id自己定唯一就行,这样就可以实现加载的一级部门到底前面带不带+号

  D.当点击可以展开的部门时,将部门为“查询中...”的替换为异步查出来的部门

1.引入样式和js(差不多能用到的都引入吧以便以后能用到) 

<link rel="stylesheet" href="<%=basePath%>sg/jqwidgets/styles/jqx.base.css" type="text/css" />
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxcore.js"></script>
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxdata.js"></script>
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxbuttons.js"></script>
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxscrollbar.js"></script>
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxpanel.js"></script>
<script type="text/javascript" src="<%=basePath%>/sg/jqwidgets/jqxtree.js"></script>

2.html页面 

<div class="tab-pane active" id="tab_1"> </div>

3.js代码

    //部门树输出的div
    var tree = $(‘#tab_1‘);
    //一级部门数据
    var source = null;
    //下级部门数据
    var source1 = null;
    //首先请求一级部门数据
    $.ajax({
              type: "POST",
                 dataType : ‘json‘,
                  url: app_base_path+"background/biz/selectDept.html",
                data: {
                      "id":""//父id为空标示加载一部门数据
                  },
                success :function(result) {
                  result = eval("("+result+")");
                  var data = result.result;
                        source =
                        {
                            datatype: "json",
                            datafields: [
                                { name: ‘c_id‘ },//部门id
                                { name: ‘c_pid‘ },//父级部门id
                                { name: ‘c_name‘ },//部门名称
                                { name: ‘value‘ }//此处写部门id就行
                            ],
                            id: ‘c_id‘,
                            localdata: data
                        };
                            //生成部门树
                      var dataAdapter = new $.jqx.dataAdapter(source);
                      dataAdapter.dataBind();
                      var records = dataAdapter.getRecordsHierarchy(‘c_id‘, ‘c_pid‘, ‘items‘, [{ name: ‘c_name‘, map: ‘label‘,icon: "<%=basePath%>/                     dhtml/imgs/csh_bluebooks/folderClosed.gif"}]);
                       tree.jqxTree({ source: records, width: ‘400px‘, height: ‘420px‘});
                //当点击展开部门时执行以下代码(异步加载下级部门)
               tree.on(‘expand‘, function (event) {
                      var label = tree.jqxTree(‘getItem‘, event.args.element).label;//
                      var $element = $(event.args.element);
                      var loader = false;
                      var loaderItem = null;
                      var children = $element.find(‘ul:first‘).children();//第一个下级部门(也就是如果有下级部门时默认加载一个名称为“查询中...”的虚拟下级部门)
                          //判断是否有下级部门名称为‘查询中...‘的
                      $.each(children, function () {
                          var item = tree.jqxTree(‘getItem‘, this);
                          if (item && item.label == ‘查询中...‘) {
                              loaderItem = item;
                              loader = true;
                              return false
                          };
                      });
                      //根据父级部门id查询子部门
                      if (loader) {
                          $.ajax({
                              type: "POST",
                                 dataType : ‘json‘,
                                url: app_base_path+"background/biz/selectDept.html",
                              data: {
                                      "id":loaderItem.value//父级部门id
                                  },
                              success :function(result) {
                              result = eval("("+result+")");
                            var data = result.result;
                                    // prepare the data
                                    source1 =
                                    {
                                        datatype: "json",
                                        datafields: [
                                                 { name: ‘c_id‘ },
                                                { name: ‘c_pid‘ },
                                                { name: ‘c_name‘ },
                                              { name: ‘value‘ }
                                        ],
                                        id: ‘c_id‘,
                                        localdata: data
                                    };
                           var dataAdapter = new $.jqx.dataAdapter(source1);
                            dataAdapter.dataBind();
                           var records1 = dataAdapter.getRecordsHierarchy(‘c_id‘, ‘c_pid‘, ‘items‘, [{ name: ‘c_name‘, map: ‘label‘,icon: "<%=basePath%>/dhtml/imgs/csh_bluebooks/folderClosed.gif"}]);
                                    tree.jqxTree(‘addTo‘, records1, $element[0]);
                                    tree.jqxTree(‘removeItem‘, loaderItem.element);
                                }
                          });
                      }
                  });  

            }
  });

4.数据库语句(我用的是postgre数据库)

  思路:a.首次查询父级部门id为null也就是一级部门,且如果有下级部门默认加载一个名称为"查询中..."的子部门

      sql实现 直接查询pid = {#id}根据pid groub by 以下并且产生的一定为此部门的一个子部门再修改下字段就可以

      例如:我写的这是包含人员表的 也就是部门下面的人也查出来了      

      select row_number() over()::character varying(30)||‘999999‘ c_id,c_pid,‘查询中...‘ c_name,c_pid value1  from (
            select pt.c_id,pt.c_name,pt.c_pid,pt.c_id as value   from db_sgtz.t_dept pt
            union ALL
            select c_id  ,c_name ,c_dept as c_pid,c_id as value from db_sgtz.t_aty_user_zuig) a
                          where c_pid  in(
            select c_id from (
            select pt.c_id,pt.c_name,pt.c_pid,pt.c_id as value   from db_sgtz.t_dept pt
            union ALL
                        select c_id  ,c_name ,c_dept as c_pid,c_id as value from db_sgtz.t_aty_user_zuig) a

    b.sql的难点就在与a如果明白a自然整条sql就好写了

    全部sql  

<select id="selectDept" parameterType="java.util.HashMap" resultType="Dept">
    select c_id,c_pid,c_name,value from (

        select c_id,c_pid,c_name,value from (
            select pt.c_id,pt.c_name,pt.c_pid,pt.c_id as value   from db_sgtz.t_dept pt
            union ALL
            select c_id  ,c_name ,c_dept as c_pid,c_id as value from db_sgtz.t_aty_user_zuig) a
            <if test="c_id == null or c_id == ‘‘">
            where c_pid is  null
            </if>
            <if test="c_id != null and  c_id != ‘‘">
            where c_pid =  #{c_id}
            </if>
            union All
            select row_number() over()::character varying(30)||‘999999‘ c_id,c_pid,‘查询中...‘ c_name,c_pid value1  from (
            select pt.c_id,pt.c_name,pt.c_pid,pt.c_id as value   from db_sgtz.t_dept pt
            union ALL
            select c_id  ,c_name ,c_dept as c_pid,c_id as value from db_sgtz.t_aty_user_zuig) a 

                          where c_pid  in(
            select c_id from (
            select pt.c_id,pt.c_name,pt.c_pid,pt.c_id as value   from db_sgtz.t_dept pt
            union ALL
                        select c_id  ,c_name ,c_dept as c_pid,c_id as value from db_sgtz.t_aty_user_zuig) a

            <if test="c_id == null or c_id == ‘‘">
            where c_pid is  null
            </if>
            <if test="c_id != null and  c_id != ‘‘">
            where c_pid =  #{c_id}
            </if>
             )
             group by c_pid ) h
             order by to_number(c_id,‘99999999‘)
    </select>

     b.

时间: 2024-10-06 03:41:03

jqxtree异步加载部门树的相关文章

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;新增“行政区域管理”,同时大批量树采用异步加载

行政区划:简称政区,是国家为了进行分级管理而实行的区域划分.中国现行的行政区划实行如下原则:1.全国分为省.自治区.直辖市:2.省.自治区分为自治州.县.自治县.市:3.自治州分为县.自治县.市:4.县.自治县分为乡.民族乡.镇: 5.直辖市和较大的市分为区.县:6.国家在必要时设立的特别行政区.行政区划是国家为了进行分级管理而实行的区域划分.中国现行六级行政区,即省级.地级.县级.乡级.村级.组级,其中省.县.乡三级为基本行政区. “行政区域管理”基本在每一个业务系统中都会用到,框架从3.2版

Jquery树控件ZTree异步加载

转载请注明出处:jiq?钦's technical Blog 异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 这里面主要设计ztree的setting变量的async属性设置: var setting = { async: { enable: true, url:"InitServiceIpsData.action", autoParam:["id", "name"], dataFilter:

使用jOrgChart插件, 异步加载生成组织架构图

jOrgChart插件是一个用来实现组织结构图的Jquery的插件- 一.特点 1.支持拖拽修改子节点: 2.支持节点缩放展示: 3.方便修改css定义样式: 4.超轻量型: 5.兼容性好,基本支持所有浏览器. 二.异步加载生成自上而下的组织结构图前期准备 1.通过后台查询数据库,生成树形数组结构,返回前台: 2.需要引入js 插件和css 文件 a.jquery.jOrgChart.css(插件样式自行修改) b.jquery.jOrgChart.js c. jquery.min.js d.j

zTree异步加载自动展开

最近在处理一个树形菜单,要做到异步加载.自动展开.可怎么搞都不行,要点击一下才能展开所有. 使用的zTree版本是v3.5.18.其实还是蛮简单的.话不多说,代码如下: /**  * 初始化菜单  */ var initTree = function(treeId) {     var settings = {             treeId: treeId,             async: {                 enable: true,               

winform TreeView的一些用法以及异步加载

今天,主要弄了一下对于树型控件的一些方法,以及异步加载.参考: http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treeview.html 下面是TreeView的一些用法 private void BindTreeView() { treeView1.LabelEdit = false;//不可编辑 //添加结点 TreeNode root = new TreeNode(); root.Text = "根节点"

jQuery.treetable使用及异步加载

Usage 1 GitHub 地址 https://github.com/ludo/jquery-treetable/ 2 API 地址 http://ludo.cubicphuse.nl/jquery-treetable/ 3 jQuery 官网链接 http://plugins.jquery.com/treetable/ 引入代码: <link href="path/to/jquery.treetable.css" rel="stylesheet" typ

关于ztree异步加载的问题(二)

本来以为这个异步加载会很难控制,因为考虑到ztree节点图标的控制,结果并不是那么困难,ztree自己控制图标,你只要在json中设置isParent:true,它自己会识别父节点并控制图标,以下是核心代码: <!--前台js代码以及html--> //参数设置 var setting={ async: { enable: true, url:"${pageContext.request.contextPath}/page/department_ascyDepartment.do&q

【zTree】简单实例与异步加载实例

[zTree]简单实例与异步加载实例 我们在项目中经常会需要用到树,这次按照数据库存储的特点重新了做一个小demo,使用zTree来实现这个功能. 简单实例: 首先我们需要在界面中引入代码,很简单,但是很重要,它用来存放加载的树. ps:添加ztree的引用,下载地址:http://www.ztree.me/v3/main.php#_zTreeInfo [html] view plain copy <span style="font-family:KaiTi_GB2312;font-siz

EasyUI异步加载Tree实现(另类,简洁)

前言 前几天事情比较的多,回学校时候行李,邮寄包裹,归还图书准备毕业.之后又是入职体检,各种琐碎的小事,文章也停更了几次.今天正好有一些零碎的时间可以把之前的工作内容做一个总结整理.这篇文章就是关于EasyUI实现异步加载树的. 异步Tree 首先需明白的是这里所说的异步加载是一个宽泛的概念.以一个实际的树形菜单为例,一般情况下在数据量不大的时候,我们可以一次性的把数据加载出来,这是符合常理的.但是如果数据量大,更加合适的做法便是按树的层级,动态的加载某层级的数据,这样的一种描述就是这里所说的异