EasyUI动态生成菜单
业务需求:不同角色有不同的权限,我们根据角色加载页面时展示不同的菜单。在easyUI中,菜单一般采用手风琴accordion组件进行展示,一级菜单下可以加载二级菜单,效果如下:
普通用户看到的菜:

管理员看到的菜单:


点击二级菜单后将在右边添加一个tab页,支持多个tab页同时展示:

接下来看实现:
html我们把各种角色都需要展示的菜单列出来,比如:订单查询跟发票生成
<div data-options="region:'west',title:'菜单',split:true,iconCls:'icon-table'" style="width:180px;">
<div id="menus" class="easyui-accordion" data-options="fit:true,border:false,selected:false">
<div data-options="title:'订单查询',iconCls:'icon-page'" style="padding:8px;">
<ul class="easyui-tree" data-options="onBeforeSelect:function(node){return false;}">
<li><a onclick="tab_add('订单查询','/orders.html')">订单查询</a></li>
</ul>
</div>
<div data-options="title:'发票生成',iconCls:'icon-page'" style="padding:8px;">
<ul class="easyui-tree" data-options="onBeforeSelect:function(node){return false;}">
<li><a onclick="tab_add('发票生成','/invoice.html')">发票生成</a></li>
</ul>
</div>
</div>
</div>
<div data-options="region:'center',border:false">
<div class="easyui-tabs" fit="true" id="tt">
</div>
<div id="menu" class="easyui-menu">
<div data-options="iconCls:'icon-reload'" onclick="tab_refresh()">Refresh</div>
<div data-options="iconCls:'icon-cancel'" onclick="tab_close()">Close</div>
</div>
</div>
在js中动态根据权限添加菜单,生成tab页,支持右键刷新和关闭:
// 菜单选中后添加tab
function tab_add(title, url) {
if ($('#tt').tabs('exists', title)) {
$('#tt').tabs('select', title)
} else {
var content = '<iframe scrolling="auto" frameborder="0" src="' + url + '" style="width:100%;height:100%;"></iframe>';
$('#tt').tabs('add', {
title: title,
content: content,
closable: true
});
}
} // 右键刷新
function tab_refresh() {
var content = $('#tt').tabs('getTab', menuOfTab).panel('options').content;
$('#tt').tabs('getTab', menuOfTab).panel({
content: content
});
} // 右键关闭
function tab_close() {
$('#tt').tabs('close', menuOfTab);
} // 当角色不同时,创建不同的菜单
function createMenu(roleValue) {
var content = "<ul id='Flow' style='padding:8px;'>";
content += "<li><a onclick=\"tab_add('评测查询','flows.html')\">评测查询</a></li>";
if (roleValue == '1') {
content += "<li><a onclick=\"tab_add('评测登记','register.html')\">评测登记</a></li>";
content += "<li><a onclick=\"tab_add('评测退款','refund.html')\">评测退款</a></li>";
} else if (roleValue == '2') {
content += "<li><a onclick=\"tab_add('评测审批','approve.html')\">评测审批</a></li>";
} else if (roleValue == '3') {
content += "<li><a onclick=\"tab_add('评测退款','refund.html')\">评测退款</a></li>";
}
content += "</ul>";
$('#menus').accordion('add', {
title: '评测管理',
content: content,
iconCls: 'icon-page',
selected: false
});
$('#Flow').tree({
onBeforeSelect: function (node) {
return false;
}
}); // 当角色为admin时,添加merchant和user菜单
if (roleValue == '4') {
var content = "<ul id='Merchant' style='padding:8px;'>";
content += "<li><a onclick=\"tab_add('账户管理','merchant.html')\">账户管理</a></li></ul>";
$('#menus').accordion('add', {
title: '账户管理',
content: content,
iconCls: 'icon-page',
selected: false
});
$('#Merchant').tree({
onBeforeSelect: function (node) {
return false;
}
}); content = "<ul id='User' style='padding:8px;'>";
content += "<li><a onclick=\"tab_add('用户管理','user.html')\">用户管理</a></li></ul>";
$('#menus').accordion('add', {
title: '登陆用户管理',
content: content,
iconCls: 'icon-page',
selected: false
});
$('#User').tree({
onBeforeSelect: function (node) {
return false;
}
}); content = "<ul id='SKU' style='padding:8px;'>";
content += "<li><a onclick=\"tab_add('产品SKU配置','sku.html')\">产品SKU配置</a></li></ul>";
$('#menus').accordion('add', {
title: '产品SKU中文配置',
content: content,
iconCls: 'icon-page',
selected: false
});
$('#SKU').tree({
onBeforeSelect: function (node) {
return false;
}
}); content = "<ul id='task' style='padding:8px;'>";
content += "<li><a onclick=\"tab_add('定时任务配置','task.html')\">定时任务执行时间配置</a></li></ul>";
$('#menus').accordion('add', {
title: '定时任务配置',
content: content,
iconCls: 'icon-page',
selected: false
});
$('#task').tree({
onBeforeSelect: function (node) {
return false;
}
});
}
}
上面的roleValue是在登陆时调用后台接口获取到的,可以参见EasyUI动态展示用户信息。
EasyUI动态生成菜单的更多相关文章
- easyui动态生成双列头
实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...
- Devexpress Ribbon 动态生成菜单
/// <summary> /// 动态加载菜单 /// </summary> private void GetMenuBind() { //根据登录用户角色菜单动态创建 // ...
- EasyUI 动态生成列加分页
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- easyui动态生成列
需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...
- Asp.Net Core MVC在View中,根据用户权限动态生成菜单
1. 用户登录时,将用户的权限写入Cookie: //将需要的信息写入claims后 var identity = new ClaimsIdentity(claims, IdentityConstan ...
- Jquery EasyUI动态生成Tab
function addTab(title, url) { if ($('#tt').tabs('exists', title)) { $('#tt').tabs('select', title); ...
- 巨蟒django之权限7:动态生成一级&&二级菜单
内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...
- python 全栈开发,Day109(客户管理之动态"二级"菜单)
昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...
随机推荐
- ArrayList之foreach循环删除倒数第二个元素,不触发fail-fast机制
今天一朋友问了个问题,对于如下一段代码,运行后会有怎样的结果? public class ArrayListTest { public static void main(String[] args) ...
- DataTable通过Select进行过滤
DataTable方法测试 //测试DataTable的select DataTable dt = new DataTable(); //a.OrderType, //a.[Status] dt.Co ...
- 检查shell脚本
1.检查solr服务监控脚本: #/bin/bash starttime=$(date +%Y-%m-%d\ %H:%M:%S) http_code=$(curl -I -m -o /dev//sol ...
- 深入理解JVM内幕:从基本结构到Java 7新特性[转]
英文原文:cubrid,编译:ImportNew - 朱伟杰 译文链接:http://www.importnew.com/1486.html [如需转载,请在正文中标注并保留原文链接.译文链接和译者等 ...
- PAT_B 20
这道题就是简单的贪心,有几个注意点: 1.又是一个单体有多个属性(即月饼有总量,总价,单价几个属性),这个时候可以考虑使用struct结构,我还是傻傻使用pair,还是没有养成习惯,幸好这道题存下来两 ...
- 26.C# 文件系统
1.流的含义 流是一系列具有方向性的字节序列,比如水管中的水流,只不过现在管道中装的不是水,而是字节序列.当流是用于向外部目标比如磁盘输出数据时称为输出流,当流是用于把数据从外部目标读入程序称为输入流 ...
- P4393 [BOI2007]Sequence 序列问题[贪心]
题目描述 对于一个给定的序列a1, -, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一 ...
- 关于strlen和sizeof的使用
在学习C语言中发现strlen和sizeof的关系不是很明确,今天来总结一下这两个的区别: sizeof 是运算符,用来计算字节数,在计算字符串数组大小时包含(\0) 在编译时计算大小,参数可以是数组 ...
- 使用jQuery快速高效制作网页交互特效-----JavaScript操作DOM对象
一.DOM操作分类 使用JavaScript操作DOM时通常分为三类:DOM Core.HTMl--DOM和CSS-DOM 二.访问节点 节点属性 三.节点信息 四.操作节点的属性 语法: ge ...
- CSS 布局和 BFC
什么是 BFC 在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的.W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子 ...