分享给大家一些我使用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的`treeObj.reAsyncChildNodes()`方法进行数据刷新,确保用户看到的是他们有权访问的资源。 zTree_v3版本提供了更多的特性,如优化的...
这个下拉树组件适用于多种场景,比如在权限管理中选择角色、在组织结构中选择员工、在商品分类中选择类型等。通过自定义`ztree`的配置项和事件回调,可以满足不同业务需求的定制化开发。 总结起来,`layui+ztree...
JQUERY ZTREE是一款基于jQuery的高效、轻量级的树形插件,广泛应用于数据展示、文件管理、权限控制等多种场景。它的核心特性在于支持动态加载、丰富的节点操作和交互效果,以及自定义的样式和图标。在本技术资料中,...
《ztree-权限树-简单数据格式》是一个与IT领域密切相关的压缩包文件,主要包含了一个名为"ztree"的程序或组件。该文件的描述多次强调“解压即用”,意味着用户在下载并解压文件后,无需进行复杂的安装过程,可以直接...
在IT领域,特别是前端开发中,ZTree是一款广泛使用的JavaScript组件,它主要用于构建可交互的树形结构。"ztree树选中节点弹出层编辑"这个话题涉及到ZTree的一个重要功能,即用户在选择树形结构中的某个节点时,会...
zTree是一款基于jQuery的文件树和权限树插件,它以其简洁、高效的特性深受开发者喜爱。在网页应用中,zTree常用于展示层级结构的数据,如文件目录、组织架构或权限管理等。它不仅提供了丰富的配置选项,还支持多种...
在IT领域,特别是前端开发中,ZTree是一款广泛使用的JavaScript组件,它主要用于构建可操作的树形结构。本文将深入探讨如何使用ZTree实现左右两棵树之间的节点移动,包括节点的添加、删除以及同步更新的操作。 首先...
在实际项目中,zTree常用于文件管理系统、权限分配系统、菜单导航等场景。通过Ajax动态加载数据,可以减少初次加载时的数据量,提高页面响应速度,同时提供良好的用户体验。 总结,Ajax和zTree的结合,为构建动态...
此外,zTree还支持多级展开、节点的拖拽、搜索功能、权限控制等高级特性。在实际项目中,你可以根据业务需求灵活组合使用。例如,通过设置`data.key.children`来指定子节点键名,或者通过`view.showLine`来控制是否...
在权限分配场景中,ZTree可以将权限结构以树形视图展示,用户可以通过直观的拖拽或选择操作来分配权限。通过设置节点的展开、选中、禁用等状态,可以灵活控制用户的访问权限。同时,ZTree支持异步加载数据,对于大型...
《基于Select2与jQuery-ZTree实现的树形下拉框详解》 在现代网页开发中,用户界面的设计和交互体验愈发重要。一个优秀的界面能够提升用户的操作效率,增强产品的吸引力。今天,我们将深入探讨如何利用Select2和...
在Web开发中,zTree能够帮助开发者快速构建出功能丰富的树形结构,如文件目录、组织架构、权限管理等。zTree的核心优势在于其强大的定制能力和灵活的API设计,使得开发者可以根据实际需求定制各种交互效果。 **1. ...
ZTree是一款基于JavaScript的开源项目,它主要用于构建可交互的树形数据结构,常用于网站的导航、组织架构展示、权限管理等领域。在本“ztree树形菜单demo”中,我们将探讨ZTree的核心功能、如何实现节点的显示以及...
"两棵树权限管理"通常指的是一个用户或角色可能拥有两个独立的权限树,比如一个是组织架构树,另一个是功能权限树。用户在组织架构树上可以管理成员的上下级关系,而在功能权限树上则可以分配不同的操作权限。通过...
zTree是一款广泛应用于Web开发中的JavaScript插件,主要用于构建各种树形结构,如文件目录、组织架构、权限管理等。它的优点在于轻量级、高度可定制化以及丰富的API和事件,使得开发者能够轻松实现复杂的功能。在...
一个SSM写的权限管理系统,RBAC权限模型,zTree刷权限树,动态生成权限菜单
zTree的核心功能是将JSON数据转换为交互式的树形结构,适用于文件目录、组织结构、权限管理等多种场景。 ### zTree基本概念 1. **节点**:在zTree中,每个树形结构的基本单元称为节点。节点可以包含文本、图标、...
本文将深入探讨如何使用jQuery ZTree来实现两棵树之间的权限管理功能,以及如何进行数据移动。 ZTree是一个基于jQuery的插件,它提供了丰富的树状节点操作,如展开、折叠、选择、拖拽等。在“jquery ztree两棵树...