【EasyUI篇】树组件——Tree

微信公众号:程序yuan
关注可了解更多的教程。问题或建议,请公众号留言;

查看--> 全套EasyUI示例目录

Tree树组件

Tree 树,在Easyui也是一个非常常见的组件,在组件一个管理系统的时候,少不了使用树来做导航菜单,那么,现在让我们一起来学习一下吧。。。

【EasyUI篇】树组件——Tree_第1张图片

 

【EasyUI篇】树组件——Tree_第2张图片

【EasyUI篇】树组件——Tree_第3张图片

【EasyUI篇】树组件——Tree_第4张图片

数据库设计:

【EasyUI篇】树组件——Tree_第5张图片

【EasyUI篇】树组件——Tree_第6张图片

JSP文件

<%--
  Created by IntelliJ IDEA.
  User: ooyhao
  Date: 2018/7/29 0029
  Time: 9:21
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Tree
    
    
    
    
    
    
    
    
    
    



    <%--
        
  •             宜春学院             
                      
    •                     数学与计算机科学学院                     
                                
      • 学工科
      •                         
      •                             计算机科学与技术                             
                                          
        • 计算机科学与技术1班
        •                                 
        • 计算机科学与技术2班
        •                             
                                
      •                         
      •                             网络工程                             
                                          
        • 网络工程2班
        •                                 
        • 网络工程1班
        •                             
                                
      •                     
                      
    •                 
    • 学工处
    •                 
    •                     体育学院                     
                                
      • 体育教育
      •                         
      • 体育表演
      •                     
                      
    •             
            
  •         
  •             南昌大学             
                      
    • 软件学院
    •             
            
  •     --%>                        变成父节点
            增加
            修改
            删除
            取消
        

    JS文件

    $(function () {
    
        var options = {
            url:'findTrees.action',
            // url:'getTrees.action',
            method:'post',
            //展开折叠是否使用动画
            animate:true,
            //是否在每一个节点前显示复选框
            checkbox:true,
            //是否进行层叠选中
            // cascadeCheck:false,
            //是否只在叶子节点显示复选框,需要配合checkbox使用
            // onlyLeafCheck:true,
            lines:true,
            //是否使用拖拽功能
            dnd:false,
            // data:[],//本地加载的菜单数据
            formatter:function (node) {
                // return '['+node.text+']';
                return node.text;
            },
            onLoadSuccess:function (node,data) {
                if(data){
                    $(data).each(function (index,value) {
                        // value.iconCls='icon-ok';
                        // value.text = value.text+'@';
                        if(value.state="closed"){
                            // $("#box").tree("expandAll");
                        }
                    });
                }
            },
            onClick:function (node) {
                // console.log(node);
            },
            onDblClick:function (node) {
                // console.log(node);
            },
            onBeforeLoad:function (node,param) {
                // console.log(node);
                console.log(param);//参数
            },
            onBeforeExpand:function (node) {
                // console.log(node);
            },
            onExpand:function (node) {
                // console.log(node);
            },
            onBeforeCollapse:function (node) {
                // console.log(node);
            },
            onCollapse:function (node) {
                // console.log(node);
            },
            //勾选复选框
            onBeforeCheck:function (node,checked) {
                // console.log(node);
                // console.log(checked);
            },
            onCheck:function (node,checked) {
                // console.log(node);
                // console.log(checked);
            },
            //点击节点
            onBeforeSelect:function (node) {
                // console.log(node);
            },
            onSelect:function (node) {
                // console.log(node);
            },
            onContextMenu:function (e,node) {
                e.preventDefault();
                $("#box").tree('select',node.target);
                $("#menu").menu('show',{
                    left:e.pageX,
                    top:e.pageY,
                });
            },
            onBeforeEdit:function () {
                // alert("before");
            },
            onAfterEdit:function (node) {
                var id = node.id;
                var text = node.text;
                $.ajax({
                    url:'updateTree.action',
                    type:'post',
                    data:{
                        id:id,
                        text:text,
                    },
                    dataType:"json",
                    success:function (data) {
                        $.messager.show({
                            title:"提示",
                            msg:data.msg,
                            timeout:2000,
                            showType:'slide',
                        });
                    }
                });
            },
            onCancelEdit:function (node) {
                // alert("cancel");
            }
        };
    
        $("#box").tree(options);
        $("#menu").menu({
            width:150,
            onClick:function (item) {
                console.log(item);
                if(item.text == "修改"){
                    var node = $('#box').tree('getSelected');
                    $("#box").tree('beginEdit',node.target);
    
                }else if(item.text == "删除"){
                    var node = $('#box').tree('getSelected');
                    if(!$("#box").tree('isLeaf',node.target)){
                        $.messager.alert("错误","不能删除这个节点",'error');
                        return;
                    }
                    $.ajax({
                       url:'deleteTreeById.action',
                       type:'post',
                       data:{
                           id:node.id,
                       },
                       dataType:"json",
                       success:function (data) {
                           $("#box").tree('remove',node.target);
                           $.messager.show({
                               title:"提示",
                               msg:data.msg,
                               timeout:2000,
                               showType:"slide",
                           });
                       }
                    });
    
                }else if(item.text == "变成父节点"){
                    var node = $('#box').tree('getSelected');
                    if(!$('#box').tree("isLeaf",node.target)){
                        $.messager.alert("提示","当前节点为父节点,不可转换","warning");
                        return;
                    }
                    $.ajax({
                        url:'changeNodeState.action',
                        type:'post',
                        data:{
                            id:node.id,
                        },
                        dataType:'json',
                        success:function (data) {
                            $.messager.show({
                                title:'提示',
                                msg:data.msg,
                                timeout:2000,
                                showType:'slide',
                            });
                            $('#box').tree('update',{
                                target:node.target,
                                id:node.id,
                                text:node.text,
                                state:'closed',
                            });
                            var pNode = $('#box').tree('getParent',node.target);
                            $('#box').tree('reload',pNode.target);
                        }
    
                    });
    
                }else if(item.text == "增加"){
                    var node = $('#box').tree('getSelected');
                    if($('#box').tree("isLeaf",node.target)){
                        $.messager.alert("提示","当前节点不是父节点,请将其装换为父节点","info");
                        return;
                    }
                    $.ajax({
                        url:'addTree.action',
                        type:'post',
                        data:{
                            text:'新节点',
                            pid:node.id,
                            flag:0,
                        },
                        dataType:'json',
                        success:function (data) {
                            if(data.flag){
                                $('#box').tree('append',{
                                    parent:node.target,
                                    data:[
                                        {
                                            text:"新节点",
                                        }
                                    ]
                                });
                            }
                            $.messager.show({
                                title:"提示",
                                msg:data.msg,
                                timeout:2000,
                                showType:'slide',
                            });
                            var pNode = $('#box').tree('getParent',node.target);
                            $('#box').tree('reload',node.target);
                        }
                    });
                }else if(item.text == "取消"){
                    var node = $('#box').tree('getSelected');
                    $("#box").tree('reload',node.target);
                }
            },
    
        });
    });
    

    Controller文件

    package com.ooyhao.controller;
    
    import com.ooyhao.EasyUIVo.Message;
    import com.ooyhao.pojo.Tree;
    import com.ooyhao.service.TreeService;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    
    /**
     * @author ooyhao
     */
    @Controller
    public class TreeController {
    
        @Autowired
        private TreeService treeService;
    
        @RequestMapping(value = "getTrees")
        @ResponseBody
        public List getTrees(){
            return treeService.getTrees();
        }
    
        @RequestMapping(value = "findTrees")
        @ResponseBody
        public List findTrees(String id){
            int pid = -1;
            if(id != null)
                pid = Integer.parseInt(id);
            return treeService.findTreesByPid(pid);
        }
        @RequestMapping(value = "deleteTreeById")
        @ResponseBody
        public Message deleteTreeById(String id){
            treeService.deleteTreeById(Integer.parseInt(id));
            return new Message(true,"删除成功");
        }
    
        @RequestMapping(value = "updateTree")
        @ResponseBody
        public Message updateTree(String id, String text){
            Tree tree = treeService.getTreeById(Integer.parseInt(id));
            tree.setText(text);
            treeService.updateTree(tree);
            return new Message(true,"更新成功");
        }
    
        @RequestMapping(value = "addTree")
        @ResponseBody
        public Message addTree(Tree tree){
            treeService.addTree(tree);
            return new Message(true,"添加成功");
        }
        @RequestMapping(value = "changeNodeState")
        @ResponseBody
        public Message changeNodeState(Integer id){
            Tree tree = treeService.getTreeById(id);
            tree.setState("closed");
            treeService.updateTree(tree);
            return new Message(true,"状态改变成功");
        }
    
    }
    

    Service文件

    package com.ooyhao.service;
    
    import com.ooyhao.pojo.Tree;
    
    import java.util.List;
    
    /**
     * @author ooyhao
     */
    public interface TreeService {
    
       public List getTrees();
    
       public List findTreesByPid(Integer pid);
    
       public void deleteTreeById(Integer id);
    
       public void updateTree(Tree tree);
    
       public Tree getTreeById(Integer id);
    
       public void addTree(Tree tree);
    
    }
    

    ServiceImpl文件

    package com.ooyhao.service;
    
    import com.ooyhao.dao.TreeMapper;
    import com.ooyhao.pojo.Tree;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    /**
     * @author ooyhao
     */
    @Service
    public class TreeServiceImpl implements TreeService {
    
        @Autowired
        private TreeMapper treeMapper;
    
        /**
         * 一次获得所有树结构
         * @return
         */
        @Override
        public List getTrees() {
            return buildTree(-1);
        }
    
        //使用递归创建菜单树
        public List buildTree(Integer pid){
            //创建一棵树
            //获得一级菜单
            List trees = treeMapper.getTreesByPid(pid);
            if(trees == null || trees.size() == 0){
                return null;
            }
            //遍历一级菜单
            for(Tree tree : trees){
                //获得每一个节点的id作为下一级的父级id
                List treeList = buildTree(tree.getId());
                tree.setChildren(treeList);
            }
    
            return trees;
        }
    
        /**
         * 异步创建树
         * @param pid
         * @return
         */
        @Override
        public List findTreesByPid(Integer pid) {
            return treeMapper.getTreesByPid(pid);
        }
    
        @Override
        public void deleteTreeById(Integer id) {
            treeMapper.deleteTreeById(id);
        }
    
        @Override
        public void updateTree(Tree tree) {
            treeMapper.updateTree(tree);
        }
    
        @Override
        public Tree getTreeById(Integer id) {
            return treeMapper.getTreeById(id);
        }
    
        @Override
        public void addTree(Tree tree) {
            treeMapper.addTree(tree);
        }
    
    }
    

    DAO文件

    package com.ooyhao.dao;
    
    import com.ooyhao.pojo.Tree;
    
    import java.util.List;
    
    /**
     * @author ooyhao
     */
    public interface TreeMapper {
    
        /**
         * 获得所有的记录
         * @return
         */
        public List getTrees();
    
        /**
         * 根据pid获得记录
         */
        public List getTreesByPid(Integer pid);
    
        /**
         * 根据id获得记录
         */
        public Tree getTreeById(Integer id);
    
        /**
         * 根据id删除记录
         */
        public void deleteTreeById(Integer id);
    
        /**
         * 更新记录
         */
        public void updateTree(Tree tree);
    
        /**
         * 插入一条记录
         */
        public void addTree(Tree tree);
    }
    

    Mapper文件

    
    
    
    
        
            select * from tb_tree where flag != 2;
        
    
        
            select * from tb_tree WHERE pid = #{pid} ;
        
    
        
            select * from tb_tree where id = #{id}
        
    
        
            DELETE FROM tb_tree WHERE id = #{id};
        
    
        
            UPDATE tb_tree
            
                
                    text = #{text},
                
                
                    pid = #{pid},
                
                
                    attributes = #{attributes},
                
                
                    flag = #{flag},
                
                
                    state =  #{state},
                
            
            WHERE  id = #{id}
        
    
        
            insert into tb_tree (text,pid,state,flag,attributes)values(#{text},#{pid},#{state},#{flag},#{attributes});
        
    
    
    

    Message文件

    package com.ooyhao.EasyUIVo;
    
    import java.io.Serializable;
    
    /**
     * @author ooyhao
     */
    public class Message implements Serializable{
        private Boolean flag = true;
        private String msg = "操作成功";
        private T obj;
    
        public Message() {
        }
    
        public Message(Boolean flag, String msg) {
            this.flag = flag;
            this.msg = msg;
        }
    
        public Message(Boolean flag, String msg, T obj) {
            this.flag = flag;
            this.msg = msg;
            this.obj = obj;
        }
    
        public Boolean getFlag() {
            return flag;
        }
    
        public void setFlag(Boolean flag) {
            this.flag = flag;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getObj() {
            return obj;
        }
    
        public void setObj(T obj) {
            this.obj = obj;
        }
    
        @Override
        public String toString() {
            return "Message{" +
                    "flag=" + flag +
                    ", msg='" + msg + '\'' +
                    ", obj=" + obj +
                    '}';
        }
    }
    

    Tree文件

    package com.ooyhao.pojo;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author ooyhao
     */
    public class Tree implements Serializable {
    
        private Integer id;
        private String text;
        private Integer pid;
        private Integer flag;
        private String state;
        private String attributes;
    
        private List children = new ArrayList<>();
    
        public Tree() {
    
        }
    
        public Tree(Integer id, String text, Integer pid, Integer flag, String state, String attributes) {
            this.id = id;
            this.text = text;
            this.pid = pid;
            this.flag = flag;
            this.state = state;
            this.attributes = attributes;
        }
    
    
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    
        public Integer getPid() {
            return pid;
        }
    
        public void setPid(Integer pid) {
            this.pid = pid;
        }
    
        public Integer getFlag() {
            return flag;
        }
    
        public void setFlag(Integer flag) {
            this.flag = flag;
        }
    
        public String getAttributes() {
            return attributes;
        }
    
        public void setAttributes(String attributes) {
            this.attributes = attributes;
        }
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    
        public List getChildren() {
            return children;
        }
    
        public void setChildren(List children) {
            this.children = children;
        }
    
        @Override
        public String toString() {
            return "Tree{" +
                    "id=" + id +
                    ", text='" + text + '\'' +
                    ", pid=" + pid +
                    ", flag=" + flag +
                    ", state='" + state + '\'' +
                    ", attributes='" + attributes + '\'' +
                    ", children=" + children +
                    '}';
        }
    }
    

    效果图

    【EasyUI篇】树组件——Tree_第7张图片

     

     

    ------------------------------------------------

    关注小编微信公众号获取更多资源

     

     

    你可能感兴趣的:(前端框架EasyUI)