EasyUI动态生成菜单

时间:2023-07-25 23:31:14

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

  普通用户看到的菜:EasyUI动态生成菜单

EasyUI动态生成菜单

  管理员看到的菜单:

EasyUI动态生成菜单

EasyUI动态生成菜单

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

EasyUI动态生成菜单

  接下来看实现:

  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动态展示用户信息