问题:

  机构维护时,前端框架用的是easyui,如果同步全加载会出现页面延迟严重,影响用户体验

解决:

  机构逐层加载,点击后加载

  逐层加载会出现一个问题:子节点只有点击后才能加载子集

  所以开始为叶子节点图标,点击后变成枝节点,不点就误以为到最后一层

  目前的解决办法是加载是提供状态属性,默认关闭,加载不到子集时展开状态为叶子节点图标

实现:

  1. function initOrgMaintainDetail(versionId){
  2. var tree = $("#orgMaintainDetail").treegrid();
  3. var dataTree = '';
  4. $.ajax({
  5. url:'./fileServiceType/getOrgTreeDetail',
  6. async:false,
  7. data: {
  8. Authorization: localStorage.token,
  9. versionId:versionId
  10. },
  11. success:function(data){
  12. dataTree = data;
  13. }
  14. });
      //开始加载机构树前两层
  15. tree.treegrid({
  16. data:dataTree,
  17. queryParams: {
  18. Authorization: localStorage.token,
  19. versionId:versionId
  20. },
  21. idField:'orgTypeId',
  22. cascadeCheck:true,
  23. treeField:'orgDesc',
  24. fitColumns:true,
  25. animate: true,
  26. columns:[[
  27. {title:'金融机构编码',field:'orgTypeId',align:'center',width:200},
  28. {title:'金融机构名称',field:'orgDesc',width:300},
  29. {title:'是否启用',field:'isActive',align:'center',formatter:function(value){
  30. return value == 1?'启用':'禁用';
  31. },width:100},
  32. //{title:'归属人行',field:'reserved',align:'center',width:200},
  33. {title:'归属地区',field:'areaNo',align:'center',width:150,formatter:function(value,rec){
  34. var areaDscr ='';
  35. $.ajax({
  36. url:'area/find',
  37. data:{ Authorization: localStorage.token,areaId:rec.areaNo},
  38. type:'POST',
  39. dataType:'JSON',
  40. async:false,
  41. success:function(data){
  42. areaDscr = data.AREA_DSCR;
  43. }
  44. });
  45. return areaDscr;
  46. }},
  47. {title:'操作',field:'operate',align:'center',width:200,
  48. formatter:function(value,rec){
  49. var add = "<a href='javascript:void(0);' onclick=\"openAddOrUptOrgPancyBox('" + 1 + "','"+
  50. rec.orgTypeId + "','"+
  51. 0 + "','"+
  52. rec.org_lvl + "','"+
  53. 1 + "','"+
  54. 0 + "','"+
  55. 0 +
  56. "');\"><font color='#1e90ff'>新增</font></a>";
  57.  
  58. var editArea = "<a href='javascript:void(0);' onclick=\"onclickAreaPancyBox('" + rec.areaNo + "')\"><font color='#1e90ff'>地区维护</font></a><br>";
  59. var update = "<a href='javascript:void(0);' onclick=\"openAddOrUptOrgPancyBox('" + 0 + "','"+
  60. rec.orgTypeId + "','"+
  61. rec.orgDesc + "','"+
  62. rec.org_lvl + "','"+
  63. rec.isActive + "','"+
  64. rec.ord + "','"+
  65. rec.areaNo +
  66. "')\"><font color='#1e90ff'>修改</font></a>";
  67. var batchLoad = "<a href='javascript:void(0);' onclick=\"batchImportDBMS('" + rec.ORG_ID + "','"+
  68. rec.LVL + "','"+
  69. rec.ORG_ID +
  70. "')\"><font color='#1e90ff'>批量导入BMS</font></a>";
  71. if(rec.org_lvl == 1){
  72. return add + "&nbsp;" + update + "&nbsp;";
  73. }else{
  74. return add + "&nbsp;" + update;
  75. }
  76.  
  77. }
  78. }
  79. ]],
  80. onLoadSuccess: function (row, data) {
  81. tree.treegrid("collapseAll");
  82. },
  83. onBeforeExpand:function(row){
  84. expandNode(row,tree,versionId);
  85. },
  86. onDblClickRow: function (row) {
  87. tree.treegrid('toggle',row.orgTypeId);
  88. }
  89. });
  90. }
  91. //追加子节点
  92. function expandNode(row,tree,versionId){
  93. $.ajax({
  94. url: './fileServiceType/getOrgNodeChilds',
  95. type: 'POST',
  96. async:false,
  97. data: {
  98. Authorization: localStorage.token,
  99. org_lvl: row.org_lvl,
  100. p_Id: row.orgTypeId,
  101. versionId:versionId
  102. },
  103. success: function (data) {
  104. if(data != ''){
  105. $.each(data, function(idx, obj) {
  106. var node = tree.treegrid('find',obj.orgTypeId);
  107. //该节点存在则不拼接
  108. if(node==null){
  109. tree.treegrid('append',{
  110. parent: row.orgTypeId,
  111. data: [{
  112. orgTypeId: obj.orgTypeId,
  113. orgDesc: obj.orgDesc,
  114. org_lvl: obj.org_lvl,
  115. areaNo: obj.areaNo,
  116. isActive:obj.isActive,
  117. ord:obj.ord,
  118. reserved:obj.reserved,
  119. state:obj.state
  120. }]
  121. });
  122. }
  123.  
  124. });
  125. }else{
  126. //没有数据则更改节点状态为叶子节点
  127. tree.treegrid('update',{
  128. id:row.orgTypeId,
  129. row:{
                  //每层都默认有子集,直到查不到子集再展开
  130. state:'open'
  131. }
  132. });
  133.  
  134. }
  135.  
  136. }
  137. });
  138. }

节点实体类:

  1. package org.triber.portal.model.bank;
  2.  
  3. import lombok.Getter;
  4. import lombok.Setter;
  5.  
  6. import java.io.Serializable;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. public class Node implements Serializable {
  11.  
  12. /**
  13. * 加载树需要列
  14. */
  15. @Getter @Setter private String orgTypeId;//编号
  16. @Getter @Setter private String orgDesc;//名字
  17. @Getter @Setter private List<Node> children = new ArrayList<Node>();//子集
  18. @Getter @Setter private String p_Id;
  19. @Getter @Setter private String isActive;
  20. @Getter @Setter private String org_lvl;//级别
  21. @Getter @Setter private String ord;//排序
  22. @Getter @Setter private String areaNo;
  23. @Getter @Setter private String state = "closed";//节点状态
  24. /**
  25. * 信息列
  26. */
  27. // @Getter @Setter private String isAdd;
  28. // @Getter @Setter private String addOrgIdPancy;
  29. // @Getter @Setter private String isCheckNodeId;
  30. // @Getter @Setter private String orgId;
  31. // @Getter @Setter private String addOrgDscrPancy;
  32. // @Getter @Setter private String addOrgDscr1Pancy;
  33. // @Getter @Setter private String addIsActive;
  34. // @Getter @Setter private String nodesNum;
  35. // @Getter @Setter private String orgLvl;
  36. // @Getter @Setter private String lvlOrd;
  37. // @Getter @Setter private String versionId;
  38. // @Getter @Setter private String humanDecencyId;
  39.  
  40. }

查询sql:

  1.   <select id="getOrgRootTree" resultType="org.triber.common.model.user.TreeNode">
  2. SELECT DISTINCT
  3. tt1.id, tt1.`NAME`, tt1.pid, CASE WHEN tt3.org_id=tt1.id THEN 1 ELSE 0 END AS isChecked,'closed' AS state,
  4. CASE
  5. WHEN tt1.id = tt2.ORG_TYPE_ID_1
  6. OR tt1.id = tt2.ORG_TYPE_ID_2
  7. OR tt1.id = tt2.ORG_ID_1
  8. OR tt1.id = tt2.ORG_ID_2
  9. OR tt1.id = tt2.ORG_ID_3
  10. OR tt1.id = tt2.ORG_ID_4
  11. OR tt1.id = tt2.ORG_ID_5 THEN
  12. 1
  13. ELSE
  14. 0
  15. END AS hasChecked
  16. FROM
  17. (
  18. SELECT DISTINCT org_type_id_1 id, org_type_dscr_1 `NAME`, 0 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  19. UNION
  20. SELECT DISTINCT org_type_id_2 id, org_type_dscr_2 `NAME`, org_type_id_1 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  21. ) tt1
  22. LEFT JOIN
  23. (
  24. SELECT findcheck.org_id, findcheck.biz_type_id, tobl.ORG_TYPE_ID_1, tobl.ORG_TYPE_ID_2, tobl.ORG_ID_1, tobl.ORG_ID_2, tobl.ORG_ID_3, tobl.ORG_ID_4, tobl.ORG_ID_5, tobl.`LEVEL` FROM dmcode.t_org_biz_lvl tobl
  25. RIGHT JOIN
  26. (
  27. SELECT biz_type_id,org_id FROM comm_sys.t_biz_type_org_xref WHERE biz_type_id IS NOT NULL AND biz_type_id = #{bizTypeId}
  28. ) findcheck
  29. ON (tobl.ORG_ID = findcheck.org_id OR findcheck.org_id = tobl.ORG_TYPE_ID_1 OR findcheck.org_id = tobl.ORG_TYPE_ID_2)
  30. ) tt2 ON (tt1.id = tt2.ORG_TYPE_ID_1 OR tt1.id = tt2.ORG_TYPE_ID_2)
  31. LEFT JOIN (SELECT org_id FROM comm_sys.t_biz_type_org_xref WHERE biz_type_id = #{bizTypeId}) tt3 ON tt1.id = tt3.org_id
  32. ORDER BY tt1.id
  33. </select>
  34.   
      //加载子节点
  35. <select id="getOrgTreeByParent" resultType="org.triber.common.model.user.TreeNode">
  36. SELECT
  37. DISTINCT tt1.id,tt1.`NAME`,tt1.pid,tt1.state,
  38. CASE WHEN tt1.id = tt3.org_id THEN 1 ELSE 0 END AS isChecked,
  39. CASE
  40. WHEN tt1.id = tt2.ORG_TYPE_ID_1
  41. OR tt1.id = tt2.ORG_TYPE_ID_2
  42. OR tt1.id = tt2.ORG_ID_1
  43. OR tt1.id = tt2.ORG_ID_2
  44. OR tt1.id = tt2.ORG_ID_3
  45. OR tt1.id = tt2.ORG_ID_4
  46. OR tt1.id = tt2.ORG_ID_5 THEN 1
  47. ELSE 0
  48. END AS hasChecked
  49. FROM (
  50. SELECT DISTINCT
  51. org_all.id,org_all.NAME,org_all.pid,
  52. CASE WHEN org_all.id IN (SELECT DISTINCT parent_org_id FROM dmcode.t_org_biz_lvl WHERE parent_org_id IS NOT NULL AND parent_org_id != '') THEN 'closed' ELSE 'open' END AS state
  53. FROM (
  54. SELECT DISTINCT org_id_1 id,org_dscr_1 `NAME`,org_type_id_2 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  55. UNION
  56. SELECT DISTINCT org_id_2 id,org_dscr_2 `NAME`,org_id_1 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  57. UNION
  58. SELECT DISTINCT org_id_3 id,org_dscr_3 `NAME`,org_id_2 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  59. UNION
  60. SELECT DISTINCT org_id_4 id,org_dscr_4 `NAME`,org_id_3 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  61. UNION
  62. SELECT DISTINCT org_id_5 id,org_dscr_5 `NAME`,org_id_4 pid FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}
  63. ) org_all
  64. LEFT JOIN (SELECT org_id FROM dmcode.t_org_biz_lvl WHERE org_dept_mapping_flag = #{orgDeptMappingFlag}) w ON org_all.id = w.org_id
  65. WHERE 1=1
  66. AND org_all.id != org_all.pid
  67. <if test="pid != null and pid != ''">
  68. AND pid = #{pid}
  69. </if>
  70. <if test="areaId != null and areaId != ''">
  71. AND org_all.AREA_NO_ID IN (SELECT AREA_NO_ID FROM dmcode.t_area_code WHERE (area_no_id_1 = #{areaId} OR area_no_id_2 = #{areaId} OR area_no_id = #{areaId} OR OLD_AREA_NO_ID = #{areaId} OR DISTRICT_CODE = #{areaId}))
  72. </if>
  73. ) tt1
  74. LEFT JOIN
  75. (
  76. SELECT
  77. findcheck.org_id,findcheck.biz_type_id,tobl.ORG_TYPE_ID_1,tobl.ORG_TYPE_ID_2,tobl.ORG_ID_1,tobl.ORG_ID_2,tobl.ORG_ID_3,tobl.ORG_ID_4,tobl.ORG_ID_5,tobl.`LEVEL` FROM dmcode.t_org_biz_lvl tobl
  78. RIGHT JOIN
  79. (
  80. SELECT biz_type_id, org_id FROM comm_sys.t_biz_type_org_xref WHERE biz_type_id IS NOT NULL AND biz_type_id = #{bizTypeId}
  81. ) findcheck
  82. ON tobl.ORG_ID = findcheck.org_id
  83. ) tt2 ON
  84. (
  85. CASE
  86. WHEN tt2.`LEVEL` = 1 THEN tt1.id = tt2.ORG_TYPE_ID_2
  87. WHEN tt2.`LEVEL` = 2 THEN tt1.id = tt2.ORG_ID_1
  88. WHEN tt2.`LEVEL` = 3 THEN tt1.id = tt2.ORG_ID_2
  89. WHEN tt2.`LEVEL` = 4 THEN tt1.id = tt2.ORG_ID_3
  90. WHEN tt2.`LEVEL` = 5 THEN tt1.id = tt2.ORG_ID_4
  91. ELSE
  92. tt1.id = tt2.ORG_ID
  93. END
  94. )
  95. LEFT JOIN (SELECT org_id FROM comm_sys.t_biz_type_org_xref WHERE biz_type_id = #{bizTypeId}) tt3 ON tt1.id = tt3.org_id
  96. ORDER BY tt1.id
  97. </select>

treegrid -表格树异步加载的更多相关文章

  1. combotree -下拉框树异步加载

    问题: 下拉树数据比较多时,全加载会产生页面延迟,需要实现异步加载 方案: 点击事件加载:先加载部分,点击节点时再展开并追加子节点 onBeforeExpand事件:在展开树前加载,感觉这种方式比较优 ...

  2. 多线程异步加载图片async_pictures

    异步加载图片 目标:在表格中异步加载网络图片 目的: 模拟 SDWebImage 基本功能实现 理解 SDWebImage 的底层实现机制 SDWebImage 是非常著名的网络图片处理框架,目前国内 ...

  3. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  4. 玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)

    关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?i ...

  5. Jquery树控件ZTree异步加载

    异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 这里面主要设计ztree的setting变量的async属性设置: var setting = { ...

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

    行政区划:简称政区,是国家为了进行分级管理而实行的区域划分.中国现行的行政区划实行如下原则:1.全国分为省.自治区.直辖市:2.省.自治区分为自治州.县.自治县.市:3.自治州分为县.自治县.市:4. ...

  7. ztree异步加载树节点

    参考文档:https://www.cnblogs.com/tenWood/p/8620708.html ztree api地址:http://www.treejs.cn/v3/api.php 说明:j ...

  8. jqxtree异步加载部门树

    整体思路 A.要想实现异步加载第一次加载的是一级部门 B.加载一级部门,如果有子部门,部门前面带+号,没有子部门,部门前面没有+号(+号也就是点击可以展开) C.在sql中实现如果有子部门默认都加载一 ...

  9. bootstrap异步加载树后样式显示问题

    整个过程: 1.先加载整个页面 2.通过jquery异步请求后台返回数据 3.循环遍历数据,拼接需要的内容 4.把拼接好的数据加载到页面中. 问题: 把拼接好的内容加载到页面后,样式显示不正确.而如果 ...

随机推荐

  1. wireshark:no interface can be used for capturing in this system with the current configuration

    在虚拟机unbuntu中,进行wireshark抓包,出现:no interface can be used for capturing in this system with the current ...

  2. Ext之grid內編輯

    Ext.grid.Panel xtype:gridpanel,grid 如果要完成在grid中編輯的功能.首先要填加 selType: 'cellmodel',    plugins: [       ...

  3. deque详解

    deque是double-ended queue的简称,deque和vector几乎上是一样的,使用的非常少,定义在<deque>头文件里: deque和vector的区别在于: 1)de ...

  4. 码农视角 - Angular 框架起步

    开发环境 1.npm 安装最新的Nodejs,便包含此工具.类似Nuget一样的东西,不过与Nuget不同的是,这玩意完全是命令行的.然后用npm来安装开发环境,也就是下边的angular cli. ...

  5. 在Ubuntu 18.04中安装Oracle Java JDK 8

    Webupd8 Team维护一个PPA存储库,其中包含适用于所有当前Ubuntu版本的Oracle Java 8安装程序脚本. 1.打开终端并运行命令添加PPA: sudo add-apt-repos ...

  6. LWIP network interface 即 LWIP 的 硬件 数据 接口 移植 详解 STM32 以太网数据 到达 的第二站: void ethernetif_input( void * pvParameters )

    根据 上一篇 文章 , ETH  DMA 数据中断 会 发送 一个信号量 ,我使用 全局 搜索 这个信号量 s_xSemaphore 得到 一下 几个 值 根据 这个 分析  我们找到了   数据 的 ...

  7. IOS 创建简单表视图

    创建简单表视图 此实例主要实现UITableViewDataSource协议中必需要实现的两个方法tableView:numberOfRowsInSection: 和tableView:cellFor ...

  8. 生成二维码的 jQuery 插件:jquery.qrcode.js的中文乱码问题

    在使用jquery.qrcode.js这个插件生成二维码的时候发现并不能识别中文. 原因在于:jquery-qrcode是采用charCodeAt()方式进行编码转 换的. 而这个方法默认会获取它的U ...

  9. 25条提高iOS App性能的技巧和诀窍

    25条提高iOS App性能的技巧和诀窍 当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核. 然而,由于IO ...

  10. Python 分支、循环、条件、枚举

    对于表达式,分为“左结合”和“右结合” 左结合:对于没有 = 号的,从左到右边,当然要考虑优先级. 右结合:对于有 = 号存在的情况,右边的自成一体,然后赋值给左边变量   优先级: 逻辑运算符的优先 ...