首页 > 其他分享 >zTree -- jQuery 树插件的使用包括添加、编辑(MVC)

zTree -- jQuery 树插件的使用包括添加、编辑(MVC)

时间:2023-07-26 17:44:06浏览次数:45  
标签:jQuery 插件 selectedNodeIds -- Dep var nodes true 节点

zTree -- jQuery 树插件网址:https://www.treejs.cn/v3/main.php#_zTreeInfo

自行下载所需要的文件

我自己写的一些具体示例:

使用的.netCore 6 后端使用的ORM框架SqlSugar的中的ToTreeAsync方法返回的需要的数据格式,如果没用SqlSugar可以自己写递归来完成

public async Task<ResultDto<List<DepartmentDto>>> GetZreeInfo(long pId)
        {
            try
            {
                var tree = await _db.Queryable<DepartmentModel>().Select(x=>new DepartmentDto()).ToTreeAsync(it => it.children, it => it.Dep_Pid, 0);

                return new ResultDto<List<DepartmentDto>>
                {
                    code = 0,
                    data = tree,
                    msg = "",
                    count = tree.Count,
                };

            }
            catch (Exception)
            {

                throw;
            }
        }

具体的一些文件的引用根据自己的实际情况去引用

接下来就是怎么去在MVC中去使用

首先是去写添加的时候

<div class="layui-form-item">
        <label class="layui-form-label">责任科室:</label>
        <div class="layui-input-block">
            <div class="layui-inline">
                <input type="text" id="selectedNode" name="Dep_Names" readonly class="layui-input">
            </div>
            <div class="layui-inline">
                <button type="button" class="layui-btn layui-btn-primary" onclick="openTree()">选择</button>
            </div>
        </div>
</div>

这段代码写在你的form表单中你需要的位置即可,注意标签中的name是你数据库中所定义的你需要添加的值的名称

<!-- 树形选择器的弹层 -->
<script type="text/html" id="treeSelector">
    <ul id="treeDemo" class="ztree"></ul>
</script>

<script>
    layui.use(['layer'], function () {
        var layer = layui.layer;
        var treeData = [];
        $.ajax({
            url: '@Url.Action("GetZreeInfo")',
            type: 'get',
            async: false,
            success: function (res) {
                treeData = res.data;
            }
        })
        // 打开责任科室树选择器
        window.openTree = function () {
            var index = layer.open({
                type: 1,
                title: '选择科室',
                content: $('#treeSelector').html(),
                area: ['300px', '500px'],
                success: function (layero, index) {
                    // 渲染责任科室树选择器
                    var setting = {
                        view: {
                            dblClickExpand: false, // 禁止双击展开收起
                            showLine: true // 显示连接线
                        },
                        data: {
                            simpleData: {
                                enable: true,
                                idKey: 'Dep_Id',
                                pIdKey: null,
                                rootPId: null
                            },
                            key: {
                                name: 'Dep_Name', // 节点名称字段
                                title: 'Dep_Name' // 新增节点名称字段
                            }
                        },
                        check: {
                            enable: true, // 开启多选功能
                            chkStyle: 'checkbox', // 设置选择框的样式为复选框
                            chkboxType: { y: 's', n: 's' } // 只在父节点和子节点之间设置关联关系,不关联父级
                        },
                        callback: {
                            onCheck: function (event, treeId, treeNode) {
                                var zTreeObj = $.fn.zTree.getZTreeObj(treeId);
                                var nodes = zTreeObj.getCheckedNodes(true);

                                var selectedNodeNames = [];
                                for (var i = 0; i < nodes.length; i++) {
                                    if (!nodes[i].isParent) { // 判断节点是否为父节点
                                        selectedNodeNames.push(nodes[i].Dep_Name); // 只将非父节点的值添加到数组中
                                    }
                                }

                                $('#selectedNode').val(selectedNodeNames.join(', '));

                                var selectedNodeIds = []; // 存储选择的节点ID

                                for (var i = 0; i < nodes.length; i++) {
                                    selectedNodeIds.push(nodes[i].Dep_Id); // ID添加到数组中
                                }
                                $('#selectedNodeIds').val(selectedNodeIds.join(', '));
                            }
                        }
                    };
                    $.fn.zTree.init($('#treeDemo'), setting, treeData);
                }
            });
        };
    });
</script>

最后根据<scrip>中的代码具体的参考去完成

接下来是编辑

同样的去复制你的添加界面的代码 只不过我在这里使用到了 asp-for来进行数据回显,你可以根据你自己的方式去实现

<div class="layui-form-item layui-hide">
        <div class="layui-input-block">
            <input type="text" id="selectedNodeId" asp-for="Dep_Ids" readonly class="layui-input">
            <input type="hidden" asp-for="Ope_Password" />
            <input type="hidden" asp-for="Ope_Id" />
            <button class="layui-btn" lay-submit lay-filter="formDemo" id="formDemo">添加</button>
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
</div>
<!-- 树形选择器的弹层 -->
<script type="text/html" id="treeSelector">
    <ul id="treeDemo" class="ztree"></ul>
</script>

<script>
    layui.use(['layer'], function () {
        var layer = layui.layer;
        var treeData = [];
        $.ajax({
            url: '@Url.Action("GetZreeInfo")',
            type: 'get',
            async: false,
            success: function (res) {
                treeData = res.data;
            }
        })
        // 打开责任科室树选择器
        window.openTree = function () {
            var index = layer.open({
                type: 1,
                title: '选择科室',
                content: $('#treeSelector').html(),
                area: ['300px', '400px'],
                success: function (layero, index) {
                    // 渲染责任科室树选择器
                    var setting = {
                        view: {
                            dblClickExpand: false, // 禁止双击展开收起
                            showLine: true // 显示连接线
                        },
                        data: {
                            simpleData: {
                                enable: true,
                                idKey: 'Dep_Id',
                                pIdKey: null,
                                rootPId: null
                            },
                            key: {
                                name: 'Dep_Name', // 节点名称字段
                                title: 'Dep_Name' // 新增节点名称字段
                            }
                        },
                        check: {
                            enable: true, // 开启多选功能
                            chkStyle: 'checkbox', // 设置选择框的样式为复选框
                            chkboxType: { y: 's', n: 's' } // 只在父节点和子节点之间设置关联关系,不关联父级
                        },
                        callback: {
                            onCheck: function (event, treeId, treeNode) {
                                var zTreeObj = $.fn.zTree.getZTreeObj(treeId);
                                var nodes = zTreeObj.getCheckedNodes(true);

                                var selectedNodeNames = [];
                                for (var i = 0; i < nodes.length; i++) {
                                    if (!nodes[i].isParent) { // 判断节点是否为父节点
                                        selectedNodeNames.push(nodes[i].Dep_Name); // 只将非父节点的值添加到数组中
                                    }
                                }

                                $('#selectedNode').val(selectedNodeNames.join(', '));

                                var selectedNodeIds = []; // 存储选择的节点ID

                                for (var i = 0; i < nodes.length; i++) {
                                    selectedNodeIds.push(nodes[i].Dep_Id); // ID添加到数组中

                                }
                                $('#selectedNodeId').val(selectedNodeIds.join(', '));
                            }
                        }
                    };
                    $.fn.zTree.init($('#treeDemo'), setting, treeData);
                    //反填树的操作
                    //获取AoId的值
                    var AoId = $("#selectedNodeId").val();
                    console.log(AoId);
                    //转化为数组
                    var selectedNodeIds = AoId.split(",");
                    //获取责任科室树的 zTree 对象
                    var zTreeObj = $.fn.zTree.getZTreeObj("treeDemo");
                    //设置为选中状态
                    for (var i = 0; i < selectedNodeIds.length; i++) {
                        var node = zTreeObj.getNodeByParam("Dep_Id", selectedNodeIds[i], null);
                        zTreeObj.checkNode(node, true, false);  //设置为选中状态
                    }
                    // 更新已选择的节点名称
                    var nodes = zTreeObj.getCheckedNodes(true);
                    var selectedNodeNames = [];
                    for (var i = 0; i < nodes.length; i++) {
                        if (!nodes[i].isParent) {
                            selectedNodeNames.push(nodes[i].Dep_Name);
                        }
                    }

                    $('#selectedNode').val(selectedNodeNames.join(', '));

                    // 更新已选择的节点ID
                    var selectedNodeId = [];
                    for (var i = 0; i < nodes.length; i++) {
                        if (!nodes[i].isParent) {
                            selectedNodeId.push(nodes[i].Dep_Id);
                        }
                    }
                    $('#selectedNodeId').val(selectedNodeId.join(', '));
                }
            });
        };
    });
</script>

代码仅供参考,具体的实现可以参考上面的网址和代码。

标签:jQuery,插件,selectedNodeIds,--,Dep,var,nodes,true,节点
From: https://www.cnblogs.com/zkmblog/p/17572408.html

相关文章

  • 常见 DP 模型学习笔记
    一些经典的DP类型。I.数位DP数位DP归在此处,无论是高位往低位还是低位往高位。需要注意数位DP的本质是一种按位比较的贪心思想,因而可以加以扩展。I.[CQOI2013]二进制A+B最后判无解试了很多次才判成功……主要是因为“\(a,b,c\leq2^{30}\)中有个\(\leq\)而不是\(<\)就很......
  • 代码随想录算法训练营第一天| LeetCode 704. 二分查找、LeetCode 27. 移除元素
    704.二分查找    题目链接:https://leetcode.cn/problems/binary-search/   视频链接:https://www.bilibili.com/video/BV1fA4y1o715     文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html    卡哥的题目建......
  • JDBC p2 JDBC API
    JDBCAPI获取数据库连接5种方式通过new创建Driver对象;使用反射加载Driver类,动态加载,减少依赖性,更加灵活;使用DriverManager替代Driver进行统一管理,有了更好的扩展性;使用Class.forName自动完成注册驱动,简化代码;在方式4的基础上改进,增加配置文件,让mysql连接更灵活,最推荐......
  • js监视有没有被刷新后跳转其他页面
    js监视有没有被刷新window.addEventListener('beforeunload',function(event){//这里可以执行你想要的操作,例如询问用户是否确认离开页面window.location.href='https://mp.gnek257.autos/DIET/TR/US/LP2/index.html';})在beforeunload事件处理程序中使用window.......
  • 基于图神经网络的电商购买预测
    目录1.查看数据(1)数据介绍(2)选择部分数据建模(3)合并两个表2.构建自己的数据集3.构建网络结构(1)TopKPooling流程(2)构建网络模型4.模型训练5.结果本文把每一件商品看做一个点,session_id表示用户,每个用户的浏览购买物品形成一张图。把每个点都embedding成128维的向量,构建网络......
  • 隔离css继承的样式
    项目里遇到一个富文本在编辑器内和页面上渲染出来的样式不一致的问题,具体表现在fons-size和line-height等可继承的属性上,经过排查发现确实是继承了父元素的样式导致的随即我在想如何隔离父元素的样式,经过我在张鑫旭的博客里一整翻,终于style:"all:initial;"解决问题CSS3的all属......
  • 硬件知识
    常用的显卡接口DP的传输速度最快重要参数天梯图......
  • TCP和UDP的区别以及各自的应用场景
    TCP和UDP区别:1.连接TCP是面向连接的传输层协议,传输数据前先要建立连接。UDP是不需要连接的,即刻就可以传输数据。2.服务对象TCP是一对一的两点服务,也就是说一条连接只有两个端点。UDP支持一对一,一对多,多对多的交互通信。3.可靠性TCP是要保证可靠交付数据的,数据无差错,不丢失......
  • GSAP 基础
    GreenSockAnimationPlatform(GSAP)是一个业界知名的动画库,它被1100多万个网站使用,有超过50%的获奖的网站都是用了它。不管是在原生环境中,还是任意的框架中,你可以使用GSAP去让非常多的东西动起来。不管你是想要去让UI界面产生交互动画,还是SVG图形产生动画,甚至是Threejs还是Reac......
  • 暑假集训D3 2023.7.26 补题
    G.P6183[USACO10MAR]TheRockGameS题意:给定长度n,构造\(2^n\)个由X和O组成的字符串,使得第一个字符串和最后一个字符串只由O组成,并且相邻的字符串只有一处不同,不得有重复的字符串.BFS貌似做不了.看题解有佬用格雷码的知识.代码如下#include<stdio.h>#include<st......