• 使用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>

  • 相关阅读:
    UI自动化实现多浏览器运行
    【转】C#操作XML方法集合
    日拱一卒
    敏捷开发- planning会议中的开会趣事
    敏捷开发- 可行走的骨骼
    敏捷开发- 测试人员何去何从
    Nunit & Specflow
    [转]根本原因分析(Root Cause Analysis)
    Selenium 中抓取dropdown
    网页模板
  • 原文地址:https://www.cnblogs.com/janes/p/7567300.html
Copyright © 2020-2023  润新知