• layui树形结构


     主要有基础参数和 数据源属性

    layui 官方文档:https://www.layui.com/doc/modules/tree.html

    后台获取数据源 JSON 方法

    调用获取tree需要的数据源:

            //查询所有的最顶级菜单
            List<Menu> childrenMenus = menuServiceImpl.list(new QueryWrapper<Menu>().isNull("parent_id"));
            List<JSONObject> jsonObjects = menuServiceImpl.menuData(childrenMenus);
        public List<JSONObject> menuData(List<Menu> rootMenus) {
            JSONObject jsonObject = new JSONObject();
            List<JSONObject> l1 = new ArrayList<>();
            for (Menu menu : rootMenus) {
                jsonObject = new JSONObject();
                Integer menuId = menu.getId();
                jsonObject.put("id", menuId);
                jsonObject.put("spread",true);//是否展开。
                //jsonObject.put("checked",true);//是否初始为选中状态,默认false
                jsonObject.put("title", menu.getName());
                List<Menu> childrenMenus = list(new QueryWrapper<Menu>().eq("parent_id", menuId));
                //jsonObject.put("href", menu.getAttributes().get("href"));//rr.getAttributes()
                if (!CollectionUtils.isEmpty(childrenMenus)) {
                    List<JSONObject> lss = menuData(childrenMenus);
                    jsonObject.put("children", lss);
                }
                l1.add(jsonObject);
            }
            return l1;
        }

     前段layui,js

       /***************************** 分配权限 ***********************************/
        layui.use('tree', function(){
            var tree = layui.tree;
            const datas = [[${treeData}]];
            //渲染
            var inst1 = tree.render({
                id:'menuTreeId'
                ,elem: '#tree'  //绑定元素
                ,data:datas
                //,edit:['add','update', 'del']
                ,spread: true //是否初始展开,默认false
                ,accordion: false //是否开启手风琴模式,默认 false
                ,showLine:true //是否开启连接线,默认为true,为false 文件夹左边出现三角符号
                ,text: {
                    defaultNodeName: '未命名' //节点默认名称
                    ,none: '无数据' //数据为空时的提示文本
                }
                ,checked: true //是否初始为选中状态,默认false
                ,showCheckbox: true    //是否显示复选框
                ,click: function(obj){
                    console.log(obj.data); //得到当前点击的节点数据
                    console.log(obj.state); //得到当前节点的展开状态:open、close、normal
                    console.log(obj.elem); //得到当前节点元素
    
                    console.log(obj.data.children); //当前节点下是否有子节点
                }
                ,oncheck: function(obj){//复选框点击的回调
                    console.log(obj.data); //得到当前点击的节点数据
                    console.log(obj.checked); //得到当前节点的展开状态:open、close、normal
                    console.log(obj.elem); //得到当前节点元素
    
                }
            });
        });
            function showTright(){
            layui.use('layer', function(){
                layer = layui.layer;
            });
            layer.open({
                type: 1,
                area: ['500px', '800px'],
                content: $('#dialog-tright') //这里content是一个DOM,注意:最好该元素要存放在body最外层,否则可能被其它的相对元素所影响
            });
        }
        function save() {
            var tree = layui.tree;
            //获得选中的节点
            var checkData = tree.getChecked('menuTreeId');
            console.log("进入save()方法"+JSON.stringify(eachJsonTree(checkData)));//测试已转换为一维数组
        }
        //深度遍历,多维数组转变为一维数组
        function eachJsonTree(data) {
            var result = [];    // 存放结果
            (function traverse(node) {
                node.forEach(i => {
                    result.push({
                        id: i.id, title: i.title,
                    });
                    // 有子数据的先遍历子数据
                    i.children && traverse(i.children)
                })
            })(data);
            return result;
        }
        //广度遍历,多维数组转换为一维数组
        function gothrough(data) {
            const queue = [...data];
            const result = [];
            while (true) {
                const next = queue.shift();
                if (!next) {
                    break;
                }
                result.push({
                    id: next.id,
                    title: next.title
                });
                if (Array.isArray(next.children)) {
                    queue.push(...next.children);
                }
            }
            return result;
    
        }
    参考链接:http://www.imooc.com/wenda/detail/511049

     

    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    2015 年最受 Linux 爱好者欢迎的软硬件大盘点
    Java 9终于要包含Jigsaw项目了
    Linux 容器技术史话:从 chroot 到未来
    开发者最常用的 8 款 Sublime Text 3 插件
    60,000毫秒内对Linux的性能诊断效的方法
    bzoj 2595 [Wc2008]游览计划(斯坦纳树)
    bzoj 3997 [TJOI2015]组合数学(DP)
    bzoj 1014 [JSOI2008]火星人prefix(splay+hash)
    bzoj 1090 [SCOI2003]字符串折叠(区间DP)
    bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/12345765.html
Copyright © 2020-2023  润新知