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






    本文转自 陈敬(Cathy) 博客园博客,原文链接:

http://www.cnblogs.com/janes/p/7567300.html

,如需转载请自行联系原作者


相关文章
|
3月前
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
38 0
|
5月前
|
JavaScript
原生js树形菜单
原生js树形菜单
22 0
|
6月前
|
JavaScript 前端开发
52EasyUI 树形菜单- 树形菜单添加节点
52EasyUI 树形菜单- 树形菜单添加节点
30 0
|
6月前
57EasyUI 树形菜单- 创建复杂树形网格
57EasyUI 树形菜单- 创建复杂树形网格
31 0
|
6月前
58EasyUI 树形菜单- 树形网格动态加载
58EasyUI 树形菜单- 树形网格动态加载
23 0
|
6月前
56EasyUI 树形菜单- 创建基础树形网格
56EasyUI 树形菜单- 创建基础树形网格
24 0
|
11天前
|
JSON JavaScript 数据格式
jQuery 树型菜单完整代码
jQuery 树型菜单完整代码
|
前端开发 JavaScript API
在 Vue3 + Element Plus 中生成动态表格,动态修改表格,多级表头,合并单元格
在 Vue 中,表格组件是使用频率及复杂度排名第一的组件,前端经常需要根据后台返回的数据动态渲染表格,比如动态表格如何生成,因为表格的列并不是固定的,在未知表格具体有哪些列的场景下,前端如何动态渲染表格数据。又或者需要把表格单元格进行合并处理,比如第一列是日期,需要把相同的日期进行合并,这样表格看起来会更加清晰。 本文手把手教你如何在 Vue3 + Element Plus 中创建表格、生成动态表格、创建动态多级表头、表格行合并、列合并等问题。如果你正在搭建后台管理工具,又不想处理前端问题,推荐使用卡拉云 ,卡拉云是新一代低代码开发工具,可一键接入常见数据库及 API ,无需懂前端,仅需拖拽即
2452 0
|
3月前
Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?
Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?
26 0
|
4月前
|
XML JavaScript 小程序
使用jquery treetable 实现树形表格拖拽
这里记录一下使用jquery treetable时遇到的坑。 我这里的需求是做一个树形表格,并且可拖拽。 最后要实现的效果大概是这样的:(文末有实例)
26 0