jqxtree异步加载部门树
2016-06-28 21:33
363 查看
整体思路
A.要想实现异步加载第一次加载的是一级部门
B.加载一级部门,如果有子部门,部门前面带+号,没有子部门,部门前面没有+号(+号也就是点击可以展开)
C.在sql中实现如果有子部门默认都加载一个子部门名称为“查询中...”的部门,id自己定唯一就行,这样就可以实现加载的一级部门到底前面带不带+号
D.当点击可以展开的部门时,将部门为“查询中...”的替换为异步查出来的部门
1.引入样式和js(差不多能用到的都引入吧以便以后能用到)
2.html页面
3.js代码
4.数据库语句(我用的是postgre数据库)
思路:a.首次查询父级部门id为null也就是一级部门,且如果有下级部门默认加载一个名称为"查询中..."的子部门
sql实现 直接查询pid = {#id}根据pid groub by 以下并且产生的一定为此部门的一个子部门再修改下字段就可以
例如:我写的这是包含人员表的 也就是部门下面的人也查出来了
b.sql的难点就在与a如果明白a自然整条sql就好写了
全部sql
5.效果图
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>
5.效果图
相关文章推荐
- 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别
- redis 密码时 重启问题
- MSP430F5438A I2C 从机无响应(地址设置问题)
- 团体程序设计天梯赛L2-002 链表去重(模拟)
- 标签流式布局
- mysql 主键选择
- JavaSE 基础 第03节 详解第一个Java程序
- Java连接MongoDB样例
- CF 632F Magic Matrix
- BMP格式图像文件详析
- 内核级HOOK的几种实现与应用
- C++ Coding Tricks Note
- 团体程序设计天梯赛L2-001 紧急救援(最短路)
- latex字体设置
- CI框架快速入门1--目录结构分析
- 【城会玩】hrbust 1341Who will be punished【思维】
- HDU-2553 N皇后问题(暴力回溯法)
- HDU 3339 In Action 最短路+01背包
- JavaSE 基础 第02节 搭建Java开发环境
- 机器学习:正则化