动态菜单

参考文章:https://cloud.tencent.com/developer/article/1342558

主要修改两个地方:

1.系统初始化加载一级菜单,在adminlte.js文件

$(window).on('load', function () {

        $.ajax({
url: "/Home/GetTree?id=0",
type: "Post",
timeout: 5000,
async: true,
dataType: "json",
success: function (data) {
if (data != null && data != undefined) {
var leftTreeBox = $("#ModuleNav").empty();
leftTreeBox.append("<li class=\"header\">MAIN NAVIGATION</li>");
var treeHtml = "";
for (var i = 0; i < data.length; i++) {
//if (i == 0) {
// treeHtml += "<li class=\"active treeview\" name=" + data[i].parentId + " id="+data[i].id+"><a href=#" + data[i].id + "><i class=\"fa fa-heartbeat\"></i><span>" + data[i].text + "</span><span class=\"pull-right-container\"><i class=\"fa fa-angle-left pull-right\"></i></span></a></li>";
//}
//else {
treeHtml += "<li class=\"treeview\" name=" + data[i].parentId + " id=" + data[i].id +"><a href=#" + data[i].id + "><i class=\"fa fa-heartbeat\"></i><span>" + data[i].text + "</span><span class=\"pull-right-container\"><i class=\"fa fa-angle-left pull-right\"></i></span></a></li>";
//} }
leftTreeBox.append(treeHtml);
}
else {
console.log("菜单加载失败");
}
},
error: function (error) {
console.log("菜单加载失败:" + error);
}
}) $(Selector.data).each(function () {
//原文
Plugin.call($(this)); });
});

2.加载二级菜单,在adminlte.js文件

// 判断该菜单是否是二级菜单如果是则添加选项卡 (2018-12-25 lzy add)
Tree.prototype._setUpListeners = function () {
var that = this;//获取树节点 $(this.element).on('click', this.options.trigger, function (event) {
var ele = $(this);
var id = ele.attr("href").substring(1, $(this).attr("href").length);//如果是一级菜单那么获取ID否则获取到节点的链接串为跳转页 //获取二级菜单
if (ele.parent().attr("name") == 0) { //赋予当前项选中样式,且菜单展开
ele.parent().addClass("active").siblings().removeClass("active");
that.toggle($(this), event); $.ajax({
url: "/Home/GetTree?id=" + encodeURI(id),
type: "Post",
timeout: 5000,
async: true,
dataType: "json",
success: function (data) {
if (data != null && data != undefined) {
ele.parent().children(".treeview-menu").remove();
ele.parent().append("<ul class=\"treeview-menu menu-open\">");
var treeHtml = "";
for (var i = 0; i < data.length; i++) {
treeHtml += "<li name=\"1\" id=" + data[i].id +"><a href=#" + data[i].value + "><i class=\"fa fa-circle-o\"></i>" + data[i].text + "</a></li>"
}
ele.parent().find(".treeview-menu").append(treeHtml);
ele.parent().find(".treeview-menu").append("</ul>");
}
else {
console.log("菜单加载失败");
} return;
},
error: function (error) {
console.log("菜单加载失败:" + error);
}
}) }//添加选项卡调转
else if ($(this).parent().attr("name") == 1)
{
var tabId = ele.parent().attr("id");
var tabUrl = id;
var tabName = ele.text();
//isCheckAddTab(tabId, tabUrl, tabName);
addTabs({ "id": tabId, "title": tabName, "content": "", "url": tabUrl });
}
//原来执行的函数
//that.toggle($(this), event);
});
};

注:

bootstrap tab封装

var addTabs = function (obj) {
var id = "tab_" + obj.id;
var content = ""; $("#tabMain .active").removeClass("active");
$(".tab-content .active").removeClass("active"); //如果TAB不存在,创建一个新的TAB
if (!$("#" + id)[0]) {
//固定TAB中IFRAME高度
var mainHeight = $(document.body).height() - 95;
//创建新TAB的title
var title = '<li id="tab_' + id + '"><a href="#' + id + '" data-toggle="tab">' + obj.title;
//是否允许关闭
if (obj.close) {
title += ' <i class="icon-cancel3"tabclose="' + id + '"></i>';
}
title += '</a></li>';
//是否指定TAB内容
if (obj.content) {
content = '<div role="tabpanel"class="tab-pane"id="' + id + '">' + obj.content + '</div>';
} else {//没有内容,使用IFRAME打开链接
content = '<div role="tabpanel" class="tab-pane" id="' + id + '"><iframe frameborder="0" src="' + obj.url + '" scrolling="auto" style="width:100%;height:' + mainHeight + 'px;"></iframe></div>'
}
//加入TABS
$("#tabMain").append(title);
$("#tabContent").append(content);
} //激活TAB
$("#tab_" + id).addClass('active');
$("#" + id).addClass("active");
};

adminlte+layui框架搭建2 - 动态菜单的更多相关文章

  1. adminlte+layui框架搭建1

    之前写过一篇layui-master的UI搭建,但是感觉layui-master缺少一些东西(前台页面不过多研究),比如说页面的皮肤.菜单.插件,当然我也希望layui的插件可以越来越多,支持多个浏览 ...

  2. adminlte+layui框架搭建3 - layui弹出层

    在amdinlte首页引入layui.js 和layui.css后添加代码 <script> layui.use(['layer'], function () { var layer = ...

  3. SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成

    我们知道,当下最火的前端框架,非蚂蚁金服的AntDesign莫属,这个框架不仅在国内非常有名,在国外GitHub上React前端框架也排名第一.而且这个框架涵盖了React.Vue.Angular等多 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  5. Unity 游戏框架搭建 (一) 概述

      为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频<Unity项目架构设计与开发管理>,对于我这种初学者来说全是干货.简单的总结了一下,以后慢慢提炼. 关于Unity的架 ...

  6. [原创]基于VueJs的前后端分离框架搭建之完全攻略

    首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...

  7. 权限管理系统之项目框架搭建并集成日志、mybatis和分页

    前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...

  8. webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制

    webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...

  9. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介

    约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...

随机推荐

  1. saltstack系列(一)——介绍与安装

    saltstack简介 saltstack 是服务器基础架构集中化管理平台.具备配置管理.远程执行.监控等功能. saltstack 基于python. 注意: puppet是一种Linux.Unix ...

  2. CronTrigger表达式和Quartz使用实例入门

    CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,如每月8日发工资的定时任务. CronTrigger,你可以 ...

  3. libevent源码深度剖析六

    libevent源码深度剖析六 ——初见事件处理框架 张亮 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析 lib ...

  4. vim 添加插件

    vim 的功能可以通过向它添加plugin得以扩展.所谓的plugin不过是一个vim会自动载入执行的脚本.把一个脚本放到你的plugin目录就可以了,非常容易. plugin基本上分为两类:  全局 ...

  5. java方法学习记录

    ---恢复内容开始--- 方法重载:两个方法有相同的名字,但参数不同,就是方法重载,且不能仅仅依据修饰符或者返回类型的不同来重载方法. 命令行参数的使用 有时候你希望运行一个程序时候再传递给它消息.这 ...

  6. Vue.js如何搭建本地dev server和json-server 模拟请求服务器

    前言:vue-cli(版本更新),由原来的2.8.1升级为2.9.1.主要改变是原来在build文件夹下的dev-server.js删掉了,增加了webpack.dev.conf.js. 所以这次讲的 ...

  7. Django框架 之 Auth用户认证

    Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...

  8. 手打的table

    突然觉得,如果我不上传源码和写篇博客,对不起花在这个破网页2个小时的时间,完全手打,浏览器调效果. 源码如下: a.html: <!DOCTYPE html PUBLIC "-//W3 ...

  9. 使用Monkey对APP进行随机测试

    Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程序进行压力测试,检测程序多久的时间 ...

  10. MongoDB整理笔记の安全访问

    MongoDB安全访问将从以下三个方面得到控制!   1.绑定IP内网地址访问MongoDB服务     2.设置监听端口     3.使用用户名和密码 绑定IP内网地址访问MongoDB服务 Mon ...