zoukankan      html  css  js  c++  java
  • 使用ztree展示树形菜单结构

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

    一、功能简介

    在权限系统中,实现给角色指定菜单权限的功能。主要包括以下几点:

    读取全部菜单项,并以树形结构展现;

    勾选角色拥有的菜单权限,保存入库;

    重新编辑角色权限时,默认选中角色已有的菜单权限。

    二、界面

    Image

    三、实现过程

    1.在服务端获取全部菜单资源,并转换为json字符串。

    @RequestMapping("/edit")

        public String edit(Integer roleId, Model model) {

            ……

            //树形菜单资源

            List<Map<String, Object>> allResources = resourceService.getTreeMap();

            //当前角色已有资源,设置checked和open属性

            if (roleId != null) {

                Set<CmsResource> roleResources = resourceService.findByRoleId(roleId);

                if (roleResources != null && !roleResources.isEmpty()) {

                    for (Map<String, Object> resource : allResources) {

                        Integer id =(Integer)resource.get("id");

                        for (CmsResource roleResource : roleResources) {

                            if (roleResource.getResourceId().equals(id)) {

                                resource.put("checked", true);

                                resource.put("open", true);

                                break;

                            }

                        }

                    }

                }

            }

            //转换为json字符串

            String resourceJson = new Gson().toJson(allResources);

            model.addAttribute("resourceJson", resourceJson);

            return "/role/edit";

        }

    其中resourceService.getTreeMap()方法用来获取全部菜单资源,主要包括这几个字段:id,name,pId,open。

    2.在view页面引入tree控件,并初始化设置。

    <link rel="stylesheet" th:href="@{/static/zTree_v3/css/zTreeStyle/zTreeStyle.css}”>

    <script th:src="@{/static/js/jquery/jquery.min.js}"></script>

    <script type="text/javascript" th:src="@{/static/zTree_v3/js/jquery.ztree.core.js}"></script>

    <script type="text/javascript" th:src="@{/static/zTree_v3/js/jquery.ztree.excheck.js}"></script>

    3.在view页面中读取服务端传过来的resourceJson字符串,并使用ztree控件加载树形结构。

    <script th:inline="javascript">

            /*<![CDATA[*/

            var zTreeObj;

            var setting = {

                data: {

                    simpleData: {

                        enable: true

                    }

                },

                check: {

                    enable: true,

                    chkStyle: "checkbox",

                    chkboxType: {"Y": "ps", "N": "ps"}

                }

            };

            //加载菜单

            $().ready(function () {

                var zNodes = eval(/*[[${resourceJson}]]*/);

                zTreeObj = $.fn.zTree.init($("#ztree"), setting, zNodes);

            });

          //保存之前调用该方法,获取菜单当前选中项

            function fillResourceIds(){

                var resourceIds=new Array();

                var treeObj = $.fn.zTree.getZTreeObj("ztree");

                var nodes = treeObj.getCheckedNodes(true);

                if(nodes){

                    for(var i in nodes){

                        resourceIds.push(nodes[i].id);

                    }

                }

                return resourceIds;

            }

            /*]]>*/

        </script>

  • 相关阅读:
    Python校验文件MD5值
    no acceptable C compiler found in $PATH解决办法
    PRD是什么
    项目中PO、PM的职责区分
    vue-cli中打包之后css加载顺序有错
    vue-cli中打包图片路径错误
    vue2.0的父子组件数据传递
    vue中style的用法
    vue中class的用法
    angular淘宝购物车案例
  • 原文地址:https://www.cnblogs.com/janes/p/7567300.html
Copyright © 2011-2022 走看看