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 ...
随机推荐
- golang Methods on structs
原文:http://golangtutorials.blogspot.com/2011/06/methods-on-structs.html snmp 下载,有空学习一下! https://sourc ...
- 云计算(6)--一些MapReduce的例子
例1:文件的字符串查找 这里reduce不做merge的工作,因为每行都是不一样的,不能merge. 与传统的grep程序相比,使用MapReduce可以加快处理,因为1它是Distributed的, ...
- 使用docker简单启动springboot项目
1.搭建docker环境 需要linux系统必须是centOS7以上 执行一下命令: yum install epel-release –y yum clean all yum list 2.安装 y ...
- 利用selenium自动化测试样例一
import argparse import logging import psycopg2 import datetime,time import os,sys from selenium impo ...
- Liunx使用
进入文件后的操作 1. vi打开文件后是命令模式状态,要用i或者a命令才可进入可编辑的状态哟. 2.在编辑模式的情况下敲完内容,这个时候就应该保存文件了. 保存文件要按esc,这样就会退回vi的命令模 ...
- jquery轮播事件效果
今天闲着有时间把轮播事件重新写了一下,发现以前用的很多插件大多支持度不算太友好,很多小问题 自己写了一个,不好地方请指教 先建立文件,css,js,图片,引入jquery <!DOCTYPE h ...
- CSP模拟赛 Repulsed(树形DP)
题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给 ...
- sql server in和exists 的区别
如图,现在有两个数据集,左边表示#tempTable1,右边表示#tempTable2.现在有以下问题: 1.求两个集的交集? 2.求tempTable1中不属于集#tempTable2的集? 先 ...
- 发布VS源码
发布VS源码步奏 先将Web.config设置修改一下 IP设置成点 文件名称设置成文件夹的名称,右键点击项目,点发布 勾选删除现有文件,点击发布 打开文件加 将文件解压成压缩包, 打 ...
- [Codevs] 一塔湖图
http://codevs.cn/problem/1024/ floyd 走起 #include <iostream> #include <cstdio> #include & ...