zTree 异步加载实现 点击加载

news2024/12/23 5:14:55

 效果图如下  每级最多显示5000条数据,点击加载 会再次加载5000条数据

可以监听滚动条 动态加载 我这没实现这种方式。

 


    <!-- ztreejs -->
<script src=".ztree/js/jquery.ztree.core.min.js" type="text/javascript"></script>
<script src="ztree/js/jquery.ztree.excheck.min.js" type="text/javascript"></script>
   
 <ul id="treeDemo" class="ztree"></ul>

<script type="text/javascript">
    var urlPath = getUrlPath();


    // 每页显示个数
    const limit = 5000;
    var parentNodes = [];
    var nodePageArr=new Set();


    var param = {
        displayUp: false,
        level: 1,
        displayOrg: true,
        displayStop: true,
        displayLevel: "currLevel",
        displayType: "user",page:1,limit:limit
    };
   
    var setting = {
        async: {
            enable: true,
            url: urlPath + "/method?noCache=" + new Date().getTime(),
            dataType: "json",
            type: "GET",
            autoParam: ["id"],
            otherParam: param,
            dataFilter: ret_filter
        },
        data: {
            simpleData: {
                enable: true,
                idKey: "id",
                pIdKey: "code",
                nocheck: false
            }
        },
        check: {
            enable: true,
            chkStyle: checkType,  //单选或多选框
        },
        callback: {
            onClick:zTreeOnClick,//添加点击事件
            onNodeCreated: zTreeOnNodeCreated,
            onAsyncSuccess: function (event, treeId, node, msg) {
                if (node == undefined) {
                    // 展开根节点信息
                    $.fn.zTree.getZTreeObj("treeDemo").expandNode(getRoot());
                }
            }
        }
    };

   

    function ret_filter(treeId, parentNode, childNodes) {
        if (!childNodes || childNodes.length == 0) {
            var nodes = [];
            var node = new Object();
            node.id = parentNode.id + "_nochild";
            node.code = parentNode.id;
            node.name = "无下级";
            node.nocheck = true;
            nodes.push(node);
            return nodes;
        }
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        // 以下内容是后端返回的数据
        if (!strIsEmpty(childNodes[childNodes.length - 1].pageCount)) {
            var pageNow = childNodes[childNodes.length - 1].pageNow; // 当前页数
            var pageCount = childNodes[childNodes.length - 1].pageCount; // 总页数
            var pageRow = childNodes[childNodes.length - 1].pageRow; // 总条数
            var code = childNodes[childNodes.length - 1].code;
            var num = parseInt(pageRow) - parseInt(pageNow) * parseInt(limit);
            childNodes.pop();
            nodePageArr.add({code:code,page:pageNow});
            if (pageNow < pageCount) {
                childNodes.push({
                    code: code,
                    name: '点击加载更多...【'+num+'】条数据待显示',
                    isParent: false,
                    open: false,
                    nocheck: true,
                    type: "user",
                    flag: "clickBtn"
                });
            }
        }
        // 回显选中的人员
        for (var i = 0, l = childNodes.length; i < l; i++) {
            if (childNodes[i].type == "user") {
                childNodes[i].isParent = false;
                if (choose.hasOwnProperty(childNodes[i].id)) {
                    treeObj.checkNode(childNodes[i], true, false, false);
                }
            } else {
                childNodes[i].isParent = true;
            }
        }
        return childNodes;
    }

    var submissions = false;
    function zTreeOnClick(event, treeId, treeNode,msg) {
       if (treeNode.flag === 'clickBtn') {
           if (!submissions) {
               var zTreeObj = $.fn.zTree.getZTreeObj("treeDemo");
               submissions = true;
               var page = getCurrentPage(treeNode.code);
               var param = {
                   displayUp: false,
                   level: 1,
                   displayOrg: true,
                   displayStop: true,
                   displayLevel: "currLevel",
                   displayType: "user",
                   page: page,
                   limit: limit,
                   nextData: true,
                   id:treeNode.code
               };
              
               $.ajax({
                   url: urlPath + "/method?noCache=" + new Date().getTime(),
                   dataType: "json",
                   type: "GET",
                   data: param,
                   success: function (data) {
                       submissions = false;
                        // 回显选中的人员
                       for (var i = 0, l = data.length; i < l; i++) {
                           if (choose.hasOwnProperty(data[i].id)) {
                               zTreeObj.checkNode(data[i], true, false, false);
                           }
                       }
                        // 以下内容是后端返回的数据
                       if (!strIsEmpty(data[data.length - 1].pageCount)) {
                           var pageNow = data[data.length - 1].pageNow; // 当前页数
                           var pageCount = data[data.length - 1].pageCount; // 总页数
                           var pageRow = data[data.length - 1].pageRow; // 总条数
                           var code = data[data.length-1].code;
                           nodePageArr.add({code:code,page:pageNow});
                           var num = parseInt(pageRow) - parseInt(pageNow) * parseInt(limit);
                           data.pop();
                           if (pageNow < pageCount) {
                               data.push({
                                   code: code,
                                   name: '点击加载更多...【'+num+'】条数据待显示',
                                   isParent: false,
                                   open:false,
                                   icon:false,
                                   nocheck:true,
                                   type:"user",
                                   flag:"clickBtn"
                               });
                           }
                           zTreeObj.removeNode(treeNode);
                           var parentNode = getParentNode(code);
                           zTreeObj.addNodes(parentNode, data); // 添加新节点
                       }
                   },
                   error: function (xmlhttp, textStatus, errorThrown) {
                       submissions = false;
                       var o = JSON.parse(xmlhttp.responseText);
                       layer.msg(o.message, {icon: 5});
                   }
               });
           } else {
               layer.msg("正在加载数据...请勿重复点击!");
           }
       }
    };

    // 获取所有的父节点
    function getParentNode(code) {
        var nodeRet;
        parentNodes.forEach(function(node) {
            if (node.id === code) {
                nodeRet = node;
            }
        });
        return nodeRet;
    }
    // 获取每级的页数
    function getCurrentPage(code) {
        var nodeRet;
        nodePageArr.forEach(function(node) {
            if (node.code === code) {
                nodeRet = node;
                nodePageArr.delete(node);
            }
        });
        return strIsEmpty(nodeRet)?2:++nodeRet.page;
    }

    function init_dept_tree() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        var root = getRoot();
        if (!strIsEmpty(treeObj) && root !== null) {
            var nodes = [];
            var children = getChildrenNode(root, nodes);
            for (var i = 0; i < children.length; i++) {
                var node = children[i];
                if (node.checked === true) {
                    choose[node.id] = node.name;
                } else if (choose.hasOwnProperty(node.id)) {
                    delete choose[node.id];
                }
            }
        }
        $.fn.zTree.init($("#treeDemo"), setting);
    }

    //加载ztree
    $(document).ready(function () {
        init_dept_tree();
    });

   

    function zTreeOnNodeCreated(event, treeId, treeNode) {
        if (treeNode.type == "department") {
            var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
            treeObj.setChkDisabled(treeNode, true);
            parentNodes.push(treeNode);
        }
    }

  

</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DLAFormer:微软提出多任务统一的端到端文本分析Transformer模型 | ICDAR 2024

论文提出新颖的基于Transformer的端到端方法DLAFormer&#xff0c;在统一的模型中集成多个文档布局分析任务&#xff0c;包括图形页面对象检测、文本区域检测、逻辑角色分类和阅读顺序预测。为了实现这一目标&#xff0c;将各种DLA子任务视为关系预测问题并提出了统一标签空间方…

kafka监控工具EFAK

kafka监控工具&#xff08;EFAK&#xff09; 1、下载2、解压3、配置3.1、安装数据库&#xff0c;需要是mysql&#xff0c;并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址&#xff1a;https://github…

colmap的几种相机类型和内外参取得方法

colmap的相机类型可以参考models.h文件。 主要有以下几种相机类型&#xff1a; SimplePinhole&#xff1a; 内参格式&#xff1a;f, cx, cy 实际用的时候&#xff1a;fxfyf Pinhole: 内参格式&#xff1a;fx, fy, cx, cy 其他可以自行查看models.h文件。 内参存放在images.b…

《微信小程序开发》系列:第1篇—微信小程序简介

1.什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题。它实现了应用“触手可及”的梦想&…

回归分析系列14— 多项式回归

17 多项式回归 17.1 简介 多项式回归是线性回归的一种扩展&#xff0c;它允许回归模型包括输入变量的高次项。这种方法特别适合处理非线性关系的数据。 17.2 多项式回归模型 在多项式回归中&#xff0c;模型形式如下&#xff1a; 其中&#xff0c;p 是多项式的阶数&#xf…

Vue项目-三级联动的路由跳转与传参

三级联动组件的路由的跳转与传参 三级联动&#xff0c;用户可以点击的&#xff1a;一级分类、二级分类和三级分类 以商城项目为例&#xff0c;Home模块跳转到Search模块&#xff0c;以及会把用户选中的产品&#xff08;产品名字、产品ID&#xff09;在路由跳转的时候&#xff…

【控糖有道,健康无忧!糖尿病患者的饮食黄金法则大揭秘】

在快节奏的现代生活中&#xff0c;糖尿病作为一种常见的慢性疾病&#xff0c;正悄然影响着越来越多人的生活质量。面对这一挑战&#xff0c;科学合理的饮食管理成为了控制病情、提升生活品质的关键。今天&#xff0c;就让我们一同揭开糖尿病饮食的黄金法则&#xff0c;让“控糖…

CentOS服务器三级等保加固

1.密码周期: vim /etc/login.defs max_days:90 mindays:2 minlen:8 warnage:72.密码复杂度: vim /etc/pam.d/system-auth &#xff1a; password requisite pam_cracklib.so retry3 difok3 minlen8 lcredit-1 dcredit-1 ucredit-1 ocredit-1 【Ubuntu系统->vim /etc/pam.d/c…

Linux组的介绍,所有者,所在组,修改所在组

目录 linux组的介绍 文件/目录所有者 组的创建 文件/目录所在组 其它组 改变用户所在组 linux组的介绍 每个用户必须属于一个组&#xff0c;不能独立于组外。 这个文件是谁创建的&#xff0c;这个文件的所有者就是谁。 这个文件属于组1&#xff0c;那么组2对它来说就…

VoLTE基本信令流程(整理的学习笔记)

VoLTE基本信令流程 1. 注册基本过程 UE进行Attach&#xff0c;建立QCI9的默认承载使用IMS APN建立PDN连接&#xff0c;建立 QCI5 的默认承载&#xff0c;用于传送 SIP 信令&#xff0c;同时获取到了IMS入口的P-CSCF地址信息UE 通过 QCI5 的默认承载向 IMS 发起注册请求IMS 域…

亚马逊ERP全功能 无隐藏收费的几个地方

亚马逊全功能 ERP 采集图片订单翻译&#xff0c;无任何隐藏收费。 说说有关采集和管理的软件&#xff01;1. 对于做跟卖的人来说需要大量采集产品&#xff0c;采集过来的产品还需要进行文本、图片翻译、修图等操作&#xff0c;图片储存和站点维护另算。市面上有些 ERP 软件在这…

美国高防服务器到底怎么选

美国高防服务器因其强大的硬件设施、高度的网络连接性、丰富的带宽资源和先进的防御技术而受到全球用户的欢迎。以下是选择美国高防服务器时需要考虑的关键因素&#xff0c;rak部落为您整理发布美国高防服务器到底怎么选。 确定服务器需求 容量和带宽&#xff1a;根据业务规模…

共享电动单车管理系统 ---附源码131016

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于共享电动单车管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了共享电动单车管理系统&#xff0c;它彻底…

React 学习——Class类组件生命周期函数

componentDidMount&#xff1a;组件渲染完执行一次&#xff0c;发送网络请求 componentWillUnmount&#xff1a;组件卸载的时候执行&#xff0c;副作用&#xff08;清理的工作 清除定时器 事件绑定&#xff09; import { Component,useState } from react; class Counter e…

敏捷架构开发方法和实践:迎接数字化时代的挑战

在当前飞速发展的数字化时代&#xff0c;传统企业架构的局限性日益显现&#xff0c;特别是在应用敏捷方法的过程中&#xff0c;许多企业发现其架构和组织结构无法支持真正的敏捷转型。为应对这一挑战&#xff0c;《数字化时代的敏捷架构》提出了一个全新的架构框架——敏捷架构…

Typora 软件介绍和利用

Typora 软件介绍 Typora 是一款功能强大的 Markdown 编辑器&#xff0c;以简洁直观的设计和无缝的实时预览而著称。本文将详细介绍 Typora 的功能、优势以及使用体验。 目录 简介主要功能软件优势使用体验系统支持安装与设置 简介 Typora 是一款由 Abner Lee 开发的 Markdo…

最新完整版手机APP软件应用下载类网站模板源码/手游导航源码app软件下载

源码简介&#xff1a; 手机APP软件应用下载类网站模板源码&#xff0c;它是最新完整版&#xff0c;也是手游导航源码&#xff0c;app软件排行榜下载网页源码。 这是一款带有强大后台的app软件手游类源码&#xff0c;界面设计得很漂亮&#xff0c;非常适合做app软件、手机软件…

PPT分享:埃森哲-流程制造的智能工厂规划设计

在分享PPT之前&#xff0c;笔者与大家一起熟悉下&#xff0c;流程制造是什么&#xff0c;与离散制造有哪些区别。 往期回顾>> 125页PPT&#xff1a;某行业数据架构蓝图规划方案 170页PPT&#xff1a;制造业采购供应链及财务管控业务流程蓝图规划 60页PPT:集团SRM项目业…

OpenGL-ES 学习(8) ---- FBO

目录 FBO OverViewFBO 优点使用FBO的步骤 FBO OverView FBO(FrameBuffer Object) 指的是帧缓冲对象&#xff0c;实际上是一个可以添加缓冲区容器&#xff0c;可以为其添加纹理或者渲染缓冲区对象(RBO) FBO(FrameBuffer Object) 本身不能用于渲染&#xff0c;只有添加了纹理或者…

【JS】如何给fetch添加超时功能

前言 Ajax有两种方式实现请求&#xff0c;分别是xhr和fetch&#xff0c;前者有超时功能&#xff0c;fetch则不然。下文尝试给fetch添加超时功能。 实现 使用终止器&#xff0c;在controller.abort()时便会在使用其signal信号的fetch函数发送一个终止信号&#xff0c;请求就会…