动态菜单

参考文章: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. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 1_Introduction and Basic Concepts 介绍和基本概念

    目录 1.1 欢迎1.2 机器学习是什么 1.2.1 机器学习定义 1.2.2 机器学习算法 - Supervised learning 监督学习 - Unsupervised learning  无 ...

  2. js监听文本框内容变化

    js监听文本框内容变化 原理很简单,就是在外部先声明一个用来记录input值的变量,然后每0.1秒比较这个值与input的值,如果发生改变,则运行自己的代码,同时改变变量.从而实现对input值改变的 ...

  3. 【总结整理】pv、uv

    1.pv的全称是page view,译为页面浏览量或点击量,通常是衡量一个网站甚至一条网络新闻的指标.用户每次对网站中的一个页面的请求或访问均被记录1个PV,用户对同一页面的多次访问,pv累计.例如, ...

  4. Python中sort与sorted函数

    python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的: 并且sort()函数是内置函数,会改变当前对象,而sorted()函 ...

  5. 银行家算法之JavaScript实现

    上学期有个课程叫做操作系统,期末的时候这课程还有个课程设计,其中有个题目叫做银行家算法. 什么是银行家算法我就不解释了! 看着同学们的设计,大同小异甚至前篇一律. 清一色的控制台程序,清一色的蛋疼输入 ...

  6. 633. Sum of Square Numbers 是否由两个完全平方数构成

    [抄题]: Given a non-negative integer c, your task is to decide whether there're two integers a and b s ...

  7. 框架和cms区别

    cms:精装房,拎包即可入住 框架:毛坯房,内部装修可根据自己需求来 选择策略:个性化需求不高的话,可以选择cms

  8. GO程序设计2——面向过程基础知识

    1 简介 GO语言google开发的新语言.有如下特性: 自动垃圾回收.更丰富的内置数据类型.函数多返回值.错误处理.匿名函数和闭包.类型和接口.并发编程.反射.多语言混合编程 package mai ...

  9. [GO]数组的比较和赋值

    package main import "fmt" func main() { //支持比较,只支持==或!=,比较是不是每一个元素都一样,2个数据比较,数据类型要一样 a := ...

  10. Linq学习<一>

    lambda查询语法: var result =arrarylist.where(n=>n.contains("l"))  简化的委托方法实例 linq查询结构: var  ...