业务需求:不同角色有不同的权限,我们根据角色加载页面时展示不同的菜单。在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动态生成菜单的更多相关文章

  1. easyui动态生成双列头

    实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...

  2. Devexpress Ribbon 动态生成菜单

    /// <summary> /// 动态加载菜单 /// </summary> private void GetMenuBind() { //根据登录用户角色菜单动态创建 // ...

  3. EasyUI 动态生成列加分页

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  4. easyui动态生成列

    需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...

  5. Asp.Net Core MVC在View中,根据用户权限动态生成菜单

    1. 用户登录时,将用户的权限写入Cookie: //将需要的信息写入claims后 var identity = new ClaimsIdentity(claims, IdentityConstan ...

  6. Jquery EasyUI动态生成Tab

    function addTab(title, url) { if ($('#tt').tabs('exists', title)) { $('#tt').tabs('select', title); ...

  7. 巨蟒django之权限7:动态生成一级&&二级菜单

    内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...

  8. python 全栈开发,Day109(客户管理之动态"二级"菜单)

    昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...

  9. PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)

    关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...

随机推荐

  1. 用js刷剑指offer(最小的K个数)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 牛客网链接 js代码 function GetLeastNumbe ...

  2. 剑指Offer(二十七):字符串的排列

    剑指Offer(二十七):字符串的排列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

  3. unity之龙骨动画

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321  我的个人博客 做游戏有史以来,第一次接触到龙骨动画,为新人引个路吧. (1)首先拿到美术给我三个文件,分别是name_ske. ...

  4. 3星|华杉华楠《超级符号原理》:超级符号是指注册为商标的企业logo

    “ 超级符号是私有财产,超级符号是通过对传统符号的改造,使之成为注册商标,成为私有化财产,通过占有它,让竞争对手无法使用.P112” 超级符号原理 作者: 华杉 华楠 出版社: 文汇出版社 出版年: ...

  5. JVM堆空间用途分析与划分依据

    在上一次[https://www.cnblogs.com/webor2006/p/9876493.html]已经对JVM的内存空间的划分进行了理论化的学习,这次还是对上一次提到的理论进行进一步的补充, ...

  6. 记一个VS连接过程中找不到cpp的解决方法

    在新增几个qt页面时,发现原来没动的几个cpp 连接报错了,错误均是qt的相关文件找不到 应该是moc文件没有生产或者没有被包含进工程.我想着既然我没动,应该不会是moc的原因,就在其他方向解决了很久 ...

  7. Entity Framework 在MySQL中执行SQL语句,关于参数问题

    在Entity Framework中添加MySQL模型,在写代码的过程中需要直接执行SQL语句. 在SQL语句中用到了@curRank := 0 这样在SQL语句中定义参数,同时还会有传入参数:ai. ...

  8. UTF-8&Unicode,0xC0和0x80是什么?

    转载:http://blog.sina.com.cn/s/blog_7c4f3b160101dv4p.html 一个字符串长度统计的代码,如下 int calcLen(const char* _str ...

  9. uni-app之导航配置pages.json

    1.基础配置,各个页面都要在这里边引入. 2.基础配置,头部导航左右上脚的buttons设置. 3.如果没有权限展示底部导航的需求,可以直接在此文件配置底部导航.

  10. js中event.preventDefault()和 event.stopPropagation( ) 方法详解

    event.preventDefault() 1.首先event.preventDefault()是通知浏览器不要执行与事件关联的默认动作,例如:  这里a标签的默认事件是跳转,这里我们告诉浏览器取消 ...