zTree加载树形节点(父子菜单,省市区)

star2017 1年前 ⋅ 1222 阅读

后台管理系统经常要用到树形插件来展示具有父子关系的功能,如父子菜单,省市区关系等;还有通过树形插件节点的勾选来设置用户与菜单权限的关联,或某些功能与省市区的关联。

zTree在树形节点的展示上用的是比较多的,支持 JSON 数据,可灵活编辑(增/删/改/查)功能。

zTree官网:http://www.treejs.cn/v3/main.php#_zTreeInfo

前端页面使用树形插件来展示具有父子关系的数据,当对树形节点的属性(例如:勾选)进行设置时,还需要将修改后的属性返回给后端时行处理。
下面以后台管理系统左侧导航栏的导航菜单为例,导航菜单一般都会两级菜单,一级菜单与二级菜单具有父子关系。

树形菜单

实际开发中,后台通常返回给前端 JSON数据,此示例以 JSON数据文件为例。

菜单实体类

/**
 * @Name: SysMenu
 * @Desc: 系统菜单
 * @Date: 2018-06-28 16:33
 **/
public class SysMenu implements Serializable {
    private static final long serialVersionUID = -3254583720331660709L;

    private Long id;                        //菜单ID
    private String name;                    //菜单名称
    private Long parentId;                  //父菜单ID
    private String url;                     //菜单URL
    private Integer state;                  //菜单状态
    private String icon;                    //菜单图标

    //...................

    private Boolean checked;                   //菜单选中

    //------set/get方法---------

}

菜单json数据

菜单json数据文件:menu.json

[{    "id": 15,    "name": "产品管理",    "parentId": 0,    "url": null,    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:07:30",    "subSysMenuList": null,    "checked": null},
 {    "id": 20,    "name": "会员管理",    "parentId": 0,    "url": null,    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:07:30",    "subSysMenuList": null,    "checked": true},
 {    "id": 40,    "name": "系统管理",    "parentId": 0,    "url": null,    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:07:30",    "subSysMenuList": null,    "checked": true},
 {    "id": 1501,    "name": "产品列表",    "parentId": 15,    "url": "/Product/list",    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:07:46",    "subSysMenuList": null,    "checked": null},
 {    "id": 2001,    "name": "会员列表",    "parentId": 20,    "url": "/DydUserInfo/list",    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:08:10",    "subSysMenuList": null,    "checked": true},
 {    "id": 2002,    "name": "会员类别",    "parentId": 20,    "url": "/LevelUp/list",    "state": 1,    "icon": null,    "createTime": "2018-07-02 07:08:33",    "subSysMenuList": null,    "checked": true},
 {    "id": 4001,    "name": "用户管理",    "parentId": 40,    "url": "/User/list",    "state": 1,    "icon": null,    "createTime": "2018-07-03 01:14:00",    "subSysMenuList": null,    "checked": true},
 {    "id": 4002,    "name": "角色管理",    "parentId": 40,    "url": "/sysRole/list",    "state": 1,    "icon": null,    "createTime": "2018-07-03 01:14:27",    "subSysMenuList": null,    "checked": true}]

页面展示

  1. 将 json 数据显示为树形菜单。
  2. 获取选中的节点返回给后台处理。
<!DOCTYPE html>
<HTML>

    <HEAD>
        <TITLE> ZTREE DEMO </TITLE>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <link rel="stylesheet" href="css/demo.css" type="text/css">
        <link rel="stylesheet" href="css/zTreeStyle.css" type="text/css">

        <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="js/jquery.ztree.core.min.js"></script>
        <script type="text/javascript" src="js/jquery.ztree.excheck.min.js"></script>
        <script type="text/javascript" src="js/jquery.ztree.exedit.min.js"></script>

        <SCRIPT LANGUAGE="JavaScript">
            $(document).ready(function() {
                load_menu_json();

            });

            //加载json数据
            function load_menu_json() {
                $.getJSON("json/menu.json", function(data) {
                    console.log(data);

                    var zNodes = new Array();

                    for(var i = 0; i < data.length; i++) {
                        var value = {
                            id: data[i].id,
                            code: data[i].id,
                            pId: data[i].parentId,
                            name: data[i].name,
                            checked: data[i].checked
                        };
                        zNodes.push(value)
                    }
                    //调用zTree
                    menu_zTree(zNodes);
                });
            };

            function menu_zTree(zNodes) {
                var zTreeObj;
                // zTree 的参数配置
                var setting = {
                    check: {
                        enable: true,
                        chkStyle: "checkbox",
                        chkboxType: {
                            "Y": "ps",
                            "N": "sp"
                        }
                    },
                    //启用简单数据结构
                    data: {
                        simpleData: {
                            enable: true
                        }
                    }
                };
                console.log(zNodes);
                $.fn.zTree.init($("#treeDemo"), setting, zNodes);

                //调用获取选中的节点, 必须在zTree初始化后
                get_checked();
            }

            //获取选中节点值
            function get_checked() {
                //定义接收菜单ID的数组
                var menuIds = new Array();
                //获取zTree 对象
                var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
                //通过zTree 对象获取选中的节点,是个数组
                var nodes = treeObj.getCheckedNodes(true);
                //遍历节点,取出菜单ID
                for (var i = 0; i < nodes.length; i++) {
                    //将id装入menuIds
                    menuIds.push(nodes[i].id);
                }
                console.log(menuIds);
            }
        </SCRIPT>
    </HEAD>

    <BODY>
        <div>
            <ul id="treeDemo" class="ztree"></ul>
        </div>
    </BODY>

</HTML>
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: