adminlte+layui框架搭建2 - 动态菜单
动态菜单
参考文章: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 - 动态菜单的更多相关文章
- adminlte+layui框架搭建1
之前写过一篇layui-master的UI搭建,但是感觉layui-master缺少一些东西(前台页面不过多研究),比如说页面的皮肤.菜单.插件,当然我也希望layui的插件可以越来越多,支持多个浏览 ...
- adminlte+layui框架搭建3 - layui弹出层
在amdinlte首页引入layui.js 和layui.css后添加代码 <script> layui.use(['layer'], function () { var layer = ...
- SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成
我们知道,当下最火的前端框架,非蚂蚁金服的AntDesign莫属,这个框架不仅在国内非常有名,在国外GitHub上React前端框架也排名第一.而且这个框架涵盖了React.Vue.Angular等多 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2 ...
- Unity 游戏框架搭建 (一) 概述
为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频<Unity项目架构设计与开发管理>,对于我这种初学者来说全是干货.简单的总结了一下,以后慢慢提炼. 关于Unity的架 ...
- [原创]基于VueJs的前后端分离框架搭建之完全攻略
首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...
- 权限管理系统之项目框架搭建并集成日志、mybatis和分页
前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...
- webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制
webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...
- Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介
约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...
随机推荐
- less使用变量实现Url的前缀
@url-prefix: "../../../../../Skin/Template/Default"; .test { background: url("@{url-p ...
- C# 堆和栈的区别?
解释1.栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义:堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小 解释2. 存放在栈中时要管存储顺 ...
- 9-python 的ProxyHandler处理器(代理设置)
ProxyHandler处理器(代理设置) 使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的. 很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正 ...
- Python 安装selenium
一.报错信息 No module named 'selenium' 二.系统环境 操作系统:Win10 64位 Python版本:Python 3.7.0 三.安装参考 1.使用pip安装seleni ...
- 33.HAVING 子句
HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...
- Django框架 之 Cookie、Session整理补充
Django框架 之 Cookie.Session整理补充 浏览目录 Django实现的Cookie Django实现的Session 一.Django实现的Cookie 1.获取Cookie 1 2 ...
- SpringMVC——处理数据模型
Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据 Map 及 Model: 入参 ...
- Mybatis_映射文件_Select
一.Select元素来定义查询操作 Id:唯一标识符.用来引用这条SQL语句,需要和接口的方法名一致 parameterType:参数类型.可以不传,MyBatis会根据TypeHandler自动推断 ...
- js-简单的作业
作业 1 将课堂 偶数奇数和 猜数字游戏 电话银行转for循环 2 编写 “个人所得税计算器”函数 10000 计算个税的方法: 3500 以下免征 6500 3500 ~ 5000 部分 缴纳 3% ...
- Visual Studio OpenCV 开发环境配置
因为VS配置OpenCV好多新手都很难一次配置成功,而且OpenCV库每新建一个项目都要配置很是麻烦,所以今天就给大家介绍一个“一劳永逸”的方法. 注:理论上只要VS和OpenCV是版本兼容的,该方法 ...