easyui 导航
来源:互联网 发布:寻侠乐理突破数据 编辑:程序博客网 时间:2024/05/17 08:08
1.首先引入easyui 相关js和样式。
2.构建树 <ul id="tree" class="easyui-tree"></ul>
请求后台组装json数据格式。
封装菜单需要的几个基本属性。前台js接收返回的数据自动构建树!
最重要的就是这个递归,根据一级目录,也就是所有的根节点,递归找他们的子节点,直至叶子节点。
权限集合,就是一个存在父子关系的菜单对象,根据父子关系,拼装成树。
最后的效果
可复制的核心代码:
<script type="text/javascript">
$(function(){
$("#tree").tree({
lines:true,
url:'${_currConText}/grant/view/menuTreeEasyUI.action?systemType=301',
onLoadSuccess:function(){
$("#tree").tree('collapseAll');
},
onClick:function(node){
if(node.state=='closed'&&(!$("#tree").tree('isLeaf',node.target))){ //状态为关闭而且非叶子节点
$(this).tree('expand',node.target);//点击文字展开菜单
if (node.attributes && node.attributes.url) {
openTab(node);
}
}else{
if($("#tree").tree('isLeaf',node.target)){ //状态为打开而且为叶子节点
if (node.attributes && node.attributes.url) {
openTab(node);
}
}else{
$(this).tree('collapse',node.target);//点击文字关闭菜单
}
}
}
});
function openTab(node){
if($("#tabs").tabs("exists",node.text)){
$("#tabs").tabs("select",node.text);
}else{
var content="<iframe frameborder=0 scrolling='auto' style='width:100%;height:100%' src='${pageContext.request.contextPath}"+node.attributes.url+"'></iframe>"
$("#tabs").tabs("add",{
title:node.text,
iconCls:node.iconCls,
closable:true,
content:content
});
}
}
});
function logout() {
if('${status}'==0){
window.parent.location = "${ctx}/login/logout/?ranNum=" + Math.random();
}else{
var sessid = '${sessionScope.sessid}';
var url = "${oauth_login_url}/public/login/isLogout.shtm?goto_url=${goto_url}/&sessid="+sessid;
window.parent.location=url;
}
}
</script>
@ResponseBody
@RequestMapping("menuTreeEasyUI")
public String menuTreeEasyUI(HttpServletRequest request,HttpServletResponse response) {
HttpSession session = request.getSession();
response.setContentType(contentType);
Integer type = RequestHandler.getInteger(request, "systemType");
Map con = new HashMap();
con.put("adminID", session.getAttribute(SessionName.ADMIN_USER_ID));
con.put("systemType", type);
//获得用户权限
List<Privilege> userPriList = privilegeService.getPriByUser(con);
List<TreeMenu> tmList = new ArrayList<TreeMenu>();//所有一级目录集合
for(Privilege p : userPriList){
if(p.getParentID()==-1){//父ID是-1说明是一级目录
TreeMenu menu = new TreeMenu();
menu.setId(p.getPrivilegeID()+"");
menu.setState("open");
menu.setText(p.getPrivilegeName());
menu.setIconCls("icon-man");
Map<String,String> attrMap = new HashMap<String, String>();
attrMap.put("url",p.getActionURL());
menu.setAttributes(attrMap);
List<TreeMenu> childList =getChildren(p,userPriList);
if(childList!=null&&childList.size()>0){//如果一级目录子目录不为空才展示出来
menu.setChildren(childList);
tmList.add(menu);
}
}
}
String jsonStr =JSON.toJSONString(tmList);//以一级目录为根,构建树的json字符串
return jsonStr;
}
/**
* 根据当前目录,递归找到其所有子节点
* @param p
* @param userPriList
* @return
* @date 20160914
* @author zhouzhenwei
*/
private List<TreeMenu> getChildren(Privilege p, List<Privilege> userPriList) {
if(p.getTreeType()==2){//type为2 代表叶子节点
return null;
}else{
List<TreeMenu> mList = new ArrayList<TreeMenu>();
for(Privilege cp : userPriList ){//在权限集合中找到,当前权限菜单的子节点
if((cp.getParentID()+1)==(p.getPrivilegeID()+1)){//如果某个菜单的父ID为当前菜单ID,那么就把它作为当前菜单的child
//封装菜单对象
TreeMenu tm = new TreeMenu();
tm.setId(cp.getPrivilegeID()+"");
tm.setState("open");
tm.setText(cp.getPrivilegeName());
tm.setIconCls("icon-lock");
Map<String,String> attrMap = new HashMap<String, String>();
attrMap.put("url",cp.getActionURL());
tm.setAttributes(attrMap);
tm.setChildren(getChildren(cp,userPriList));
mList.add(tm);
}
}
return mList;
}
}
阅读全文
0 0
- easyUi 导航
- easyui 导航
- EasyUi---tree 导航目录
- EasyUI+js实现动态加载导航栏
- MVC+Easyui tree菜单导航静态(8)
- easyui之菜单导航切换Tab
- easyui左侧导航菜单右侧载入百度地图项目框架
- easyui如何去掉左侧导航栏tree的图标
- easyUI 导航栏动态生成时绑定事件不相应
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
- easyUI
- EasyUI
- Easyui
- EasyUI
- easyUI
- EasyUI
- easyUI
- easyUI
- 微信小程序实现滑动tab标签页
- 碳云智能为啥要买下这家视觉公司,还“顺便”建了个以色列 AI 中心?
- 服务器定期执行任务
- 指针与二维数组
- SQL Server 系统信息查询
- easyui 导航
- 第九天(数组,预定义数组,函数,使用数据库)
- 别只盯着亮光黑,苹果还为你增添了“绿色”
- Redis 集群教程
- 惠普又双叒叒卖身,这次“赚了”88亿!
- 全球 92 家医疗 AI 初创公司都在关注哪些方向?
- 关于iPhone 7,我只讲两点
- asp.net的魅力(1)
- Qml圆形进度条