动态菜单

参考文章: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. 幂等性的含义和 HTTP请求方法的幂等性

    幂等性的含义和 HTTP请求方法的幂等性 1.什么是幂等性 =============== 幂等性,英文是idempotent,读作[aɪ'dɛmpətənt]. 它的含义如下: “Methods c ...

  2. 配置Linux的SSH双重认证

    背景:双因子认证(简称:2FA,以下简称2FA),在这里其为SSH的第二重认证.2FA指的是密码以及实物(信用卡.SMS手机.令牌或指纹等生物标志)两种条件对用户进行认证的方法.通过两种不同的认证程序 ...

  3. fhq-treap模板

    模板保存. #include<iostream> #include<cstdio> #include<cstring> #include<ctime> ...

  4. Codeforces 1120D (树形DP 或 最小生成树)

    题意看这篇博客:https://blog.csdn.net/dreaming__ldx/article/details/88418543 思路看这篇:https://blog.csdn.net/cor ...

  5. dubbo参数调优

    dubbo中配置优先级规律:方法级配置优先级高于接口级,consumer的优先级高于provider. 详细: consumer的method配置  >  provider的method配置 c ...

  6. SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架

    1 JDK动态代理详解 静态代理.JDK动态代理.Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文. 1.1 JDK代理的基本步骤 >通过实现InvocationHandler接口来 ...

  7. 24、Linux 多线程压缩工具pigz 的学习

    转载: https://blog.csdn.net/q871761987/article/details/72230355 https://blog.csdn.net/woodcorpse/artic ...

  8. 登录到 SQL Server 实例

    登录到 SQL Server 实例(命令提示符)   登录到 SQL Server 的默认实例 从命令提示符输入以下命令,使用 Windows 身份验证进行连接:     sqlcmd [ /E ] ...

  9. Python基础入门-实现计算器多种姿势

    在Python中,虽然定义一个函数只需要def关键字,但是他能实现多种功能和用途,比如今天我们讲解的这几种方式.如何使用函数实现一个计算器的功能呢?当然,实现计算器的方式有很多种,我们举几个比较典型的 ...

  10. (转)Web API 强势入门指南

    原文地址:http://www.cnblogs.com/developersupport/p/aspnet-webapi.html Web API是一个比较宽泛的概念.这里我们提到Web API特指A ...