`
hb_wxd
  • 浏览: 6943 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

zTree 权限树

阅读更多
分享给大家一些我使用zTree的心得。



背景:权限表(role_right) ,角色表(role),资源列表(menu),权限 字段为roleId,menuId.

需求:根据登陆的角色不同生成带有权限的资源树,在开发中我是用了oracle的一个特有查询:递归查询,

代码如下:

select m.menu_id as menuid,
       m.code as code,
       m.name as name,
       m.url as url,
       m.type as type,
       m.parentid as parentid,
       m.memo as memo,
       m.no as no,
       m.is_branch as isbranch,

       m.LEVELS as levels,
       nvl((select '0'
             from uup_menu um
            where exists (select 'x'
                           from uup_role_right rr
                          where um.menu_id = rr.menu_id(+)
                            and um.menu_id = m.menu_id
                            and rr.role_id = 1
                            and rownum = 1)),
       '1') as flag
 from uup_menu m
 start with m.parentid = 0
        and m.is_menu = 1
        and m.is_show = 1
        and m.rec_status = 1
connect by prior m.id = m.parentid
 order siblings by m.no asc




重要字段:

No:排序字段、Level:第几级别。flag:标识是否在role_right有此资源

通过这个查询能很好的将数据库中关于资源列表按照No进行排序,(注意:

同级的no对同级有效,同一父级的子级按照no排序,当某个父级被影藏的时候对应的此父级的所有子级将不

会被查询出来)最终生成的将是一个排列好的按照顺序出来的数据集。

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

java程序需要查询的数据集拼接为json格式的字符串。部分代码:
 /**
  * 
  * @param roleId
  * @return menuString --json格式的zTree节点数据
  * @author tianyaxiangdong <br>
  * @mail tianyaxiangdong@hotmail.com<br>
  * @create 2010-8-15 <br>
  * @update 2010-8-15 <br>
  * @version 1.0<br>
  * @desc 返回更具roleId查询出的树形资源列表。

  * isCa标识是否被选中,不使用checkbox的时候可以将checked从代码中删除
  * ztree所有的类型的 json数据都是一样的
  * 使用的Ibatis<br>
  */

 public String getMenuStringWhitCheckbox(Long roleId) {
  String menuString = "";
  HashMap parameterMap = new HashMap();
  List<UupMenu> menuList = new ArrayList();
  parameterMap.put("roleId",roleId );
  parameterMap.put("isShow",1 );
  parameterMap.put("isMenu",1 );
  parameterMap.put("recStatus", UupMenu.REC_STATUS_VALID);
  menuList = searchUupMenuChecked(parameterMap);
  int size = menuList.size();


  String icon = ""; // 暂时未用到

  String nId ="";
  String nName = "";
  int levels = 1;
  int isCa  = 0; //是否选中

  UupMenu menuNext = null;
  UupMenu menu = null;
  UupMenu menuBefor = null;

  String str2 ="";
  String str3 = "";
  for (int i=0;i< size;i++)
  { 
   
   menu = menuList.get(i);
   nId = menu.getMenuId().toString();
   nName = menu.getName();
   levels = menu.getLevels();
   isCa = menu.getIsCa();
   boolean b_isCa = false;
   if(isCa == 0)
    b_isCa = true;
   if(i  <  size-1) 
   { 
     menuNext = menuList.get(i+1);
     if( i > 0)
      menuBefor =  menuList.get(i-1);
        
     if(levels <  menuNext.getLevels() ) //表示为是公共节点
     {
      
      str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ' , checked:"+b_isCa+" ";
      
      str2 += " ,nodes: ["; 
     }

     if( levels > menuNext.getLevels()) //标识此处为菜单从子级向它父级的同级过渡
     { 
      
      str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ' , checked:"+b_isCa+" }";
      
      int len =  levels - menuNext.getLevels();
      for( int l = 0;l < len;l++)
      {
       str2 += "]}"; 
      }
     
      str2 += ",";   
     }
     if(levels == menuNext.getLevels())
     {

      if(menuBefor != null){
       if(levels > menuBefor.getLevels())
        str3 ="";
      }
   
      str2 += str3+"{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" },";
     }
   }
   else //最后一个菜单, 如果
   {
    String endStr = "";

    if(levels > 1){ //最后一个菜单项为第3级才需要使用" ]} "包含
     for(int k=0;k<levels-1;k++){   
      endStr += "]}";
     }
     str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" } "+endStr;
    }
    else
     str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" }";
   }
  }
  
  menuString = "["+str2+"]";
 
  return menuString;
 }


---------------------searchUupMenuChecked.java
 /*
  * 使用oracle 递归查询 带有checked 的树。
  */
 private List searchUupMenuChecked(HashMap parameterMap) {
  List<UupMenu> uupMenuList = (List) getSqlMapClientTemplate().queryForList(
    "searchUupMenuChecked", parameterMap);
  return uupMenuList;
 }


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

ps:以上代码为java代码。某些备注有问题。希望自己能耐心看一遍

注意:level是其中最重要的一个参数,他标识当前资源是第几级,当当前资源是过渡资源的时候,需要进行

封口("]}"),通过级别能轻易算出当前资源和下一资源的级别关系,从而确定经行几次封口。

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

感谢zTree作者,希望zTree越来越棒。
http://baby666.cn/----zTree官网


  • 描述: 树形截图
  • 大小: 4.5 KB
分享到:
评论

相关推荐

    ztree实现权限树实例

    通过以上步骤,我们就成功地实现了ZTree权限树实例,可以实现父子菜单的级联选择。在实际项目中,这些功能可以通过后端接口动态获取数据,并结合用户的操作进行权限的增删改查。这个实例不仅适用于权限管理,还可以...

    zTree权限的赋予

    当用户登录或权限发生改变时,后台需要返回当前用户的权限树结构,前端通过zTree的`treeObj.reAsyncChildNodes()`方法进行数据刷新,确保用户看到的是他们有权访问的资源。 zTree_v3版本提供了更多的特性,如优化的...

    layui+ztree下拉树,支持单选和多选

    这个下拉树组件适用于多种场景,比如在权限管理中选择角色、在组织结构中选择员工、在商品分类中选择类型等。通过自定义`ztree`的配置项和事件回调,可以满足不同业务需求的定制化开发。 总结起来,`layui+ztree...

    JQUERY ZTREE 动态树代码

    JQUERY ZTREE是一款基于jQuery的高效、轻量级的树形插件,广泛应用于数据展示、文件管理、权限控制等多种场景。它的核心特性在于支持动态加载、丰富的节点操作和交互效果,以及自定义的样式和图标。在本技术资料中,...

    ztree-权限树-简单数据格式

    《ztree-权限树-简单数据格式》是一个与IT领域密切相关的压缩包文件,主要包含了一个名为"ztree"的程序或组件。该文件的描述多次强调“解压即用”,意味着用户在下载并解压文件后,无需进行复杂的安装过程,可以直接...

    ztree树选中节点弹出层编辑

    在IT领域,特别是前端开发中,ZTree是一款广泛使用的JavaScript组件,它主要用于构建可交互的树形结构。"ztree树选中节点弹出层编辑"这个话题涉及到ZTree的一个重要功能,即用户在选择树形结构中的某个节点时,会...

    zTree文件树and权限树插件,方便简洁,功能强大好用

    zTree是一款基于jQuery的文件树和权限树插件,它以其简洁、高效的特性深受开发者喜爱。在网页应用中,zTree常用于展示层级结构的数据,如文件目录、组织架构或权限管理等。它不仅提供了丰富的配置选项,还支持多种...

    ztree实现左右两棵树的节点移动

    在IT领域,特别是前端开发中,ZTree是一款广泛使用的JavaScript组件,它主要用于构建可操作的树形结构。本文将深入探讨如何使用ZTree实现左右两棵树之间的节点移动,包括节点的添加、删除以及同步更新的操作。 首先...

    ajax+zTree 文件树

    在实际项目中,zTree常用于文件管理系统、权限分配系统、菜单导航等场景。通过Ajax动态加载数据,可以减少初次加载时的数据量,提高页面响应速度,同时提供良好的用户体验。 总结,Ajax和zTree的结合,为构建动态...

    zTree_树形插件源码,完整实例

    此外,zTree还支持多级展开、节点的拖拽、搜索功能、权限控制等高级特性。在实际项目中,你可以根据业务需求灵活组合使用。例如,通过设置`data.key.children`来指定子节点键名,或者通过`view.showLine`来控制是否...

    ztree easyUI 权限分配

    在权限分配场景中,ZTree可以将权限结构以树形视图展示,用户可以通过直观的拖拽或选择操作来分配权限。通过设置节点的展开、选中、禁用等状态,可以灵活控制用户的访问权限。同时,ZTree支持异步加载数据,对于大型...

    select2ztree.zip

    《基于Select2与jQuery-ZTree实现的树形下拉框详解》 在现代网页开发中,用户界面的设计和交互体验愈发重要。一个优秀的界面能够提升用户的操作效率,增强产品的吸引力。今天,我们将深入探讨如何利用Select2和...

    ztree树形插件

    在Web开发中,zTree能够帮助开发者快速构建出功能丰富的树形结构,如文件目录、组织架构、权限管理等。zTree的核心优势在于其强大的定制能力和灵活的API设计,使得开发者可以根据实际需求定制各种交互效果。 **1. ...

    ztree树形菜单demo

    ZTree是一款基于JavaScript的开源项目,它主要用于构建可交互的树形数据结构,常用于网站的导航、组织架构展示、权限管理等领域。在本“ztree树形菜单demo”中,我们将探讨ZTree的核心功能、如何实现节点的显示以及...

    jquery ztree两棵树权限管理的demo分享

    "两棵树权限管理"通常指的是一个用户或角色可能拥有两个独立的权限树,比如一个是组织架构树,另一个是功能权限树。用户在组织架构树上可以管理成员的上下级关系,而在功能权限树上则可以分配不同的操作权限。通过...

    zTree树结构样例

    zTree是一款广泛应用于Web开发中的JavaScript插件,主要用于构建各种树形结构,如文件目录、组织架构、权限管理等。它的优点在于轻量级、高度可定制化以及丰富的API和事件,使得开发者能够轻松实现复杂的功能。在...

    一个SSM写的权限管理系统,RBAC权限模型,zTree刷权限树,动态生成权限菜单.zip

    一个SSM写的权限管理系统,RBAC权限模型,zTree刷权限树,动态生成权限菜单

    ztree树形菜单、ztree树形菜单demo

    zTree的核心功能是将JSON数据转换为交互式的树形结构,适用于文件目录、组织结构、权限管理等多种场景。 ### zTree基本概念 1. **节点**:在zTree中,每个树形结构的基本单元称为节点。节点可以包含文本、图标、...

    jquery ztree两棵树权限管理demo

    本文将深入探讨如何使用jQuery ZTree来实现两棵树之间的权限管理功能,以及如何进行数据移动。 ZTree是一个基于jQuery的插件,它提供了丰富的树状节点操作,如展开、折叠、选择、拖拽等。在“jquery ztree两棵树...

Global site tag (gtag.js) - Google Analytics