【】SpringBoot-LayUI之左侧菜单栏动态实现

SpringBoot后台管理项目之环境部署
SpringBoot后台管理之Mybatis-GeneratorConfig
SpringBoot后台管理项目之数据库
SpringBoot项目之Resuful接口+工具类设计
【待补】SpringBoot项目之shiro
【待补】SpringBoot项目之cache

<!DOCTYPE html> 

<html lang="en" xmlns:th="http://www.thymeleaf.org"> 

<head> 

        <meta charset="UTF-8">

        <title>管理平台</title>

        <meta name="renderer" content="webkit|ie-comp|ie-stand">

        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

        <meta name="viewport" content="width=device-width, 
initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, 
user-scalable=0">

        <meta http-equiv="Cache-Control" content="no-siteapp" />

        <link rel="stylesheet" href="../layui/css/layui.css" />

        <style>

            iframe{

                 100%;

                height: 100%;

            }

        </style>

    </head>

    <body class="layui-layout-body">

<div class="layui-layout layui-layout-admin">

  <div class="layui-header">

    <div class="layui-logo">后台管理系统</div>

  

    <ul class="layui-nav layui-layout-left">

   

        <li class="layui-nav-item  layui-this"><a href="">最新活动</a></li>

        <li class="layui-nav-item ">

          <a href="javascript:;">产品</a>

          <dl class="layui-nav-child">

            <dd><a href="">选项1</a></dd>

            <dd><a href="">选项2</a></dd>

            <dd><a href="">选项3</a></dd>

          </dl>

        </li>

        <li class="layui-nav-item"><a href="">大数据</a></li>

        <li class="layui-nav-item">

          <a href="javascript:;">解决方案</a>

          <dl class="layui-nav-child">

            <dd><a href="">移动模块</a></dd>

            <dd><a href="">后台模版</a></dd>

            <dd class="layui-this"><a href="">选中项</a></dd>

            <dd><a href="">电商平台</a></dd>

            

          </dl>

        </li>

        <li class="layui-nav-item"><a href="">社区</a></li>

      </ul>

    <ul class="layui-nav layui-layout-right">

      <li class="layui-nav-item">

        <a href="javascript:;">

          <img src="http://t.cn/RCzsdCq" class="layui-nav-img">

          

         用户名:  <span  th:text="'hello, ' + ${session.user.username} + 
'!'" ></span>

      

        </a>

        <dl class="layui-nav-child">

          <dd><a href="">基本资料</a></dd>

          <dd><a href="">安全设置</a></dd>

        

        </dl>

      </li>

      <li class="layui-nav-item"><a th:href="/logout">退出</a></li>

    </ul>

  </div>

  

  <div class="layui-side layui-bg-black">

    <div class="layui-side-scroll">

      <!-- 左侧导航区域(可配合<u>layui</u>已有的垂直导航) -->

      <ul id="left_nav" class="layui-nav layui-nav-tree"  
<u>lay-filter</u>="test">

      </ul>

    </div>

  </div>

  

  <div class="layui-body" style="overflow-y: hidden;">

    <!-- 内容主体区域 -->

    <div class="layui-tab" <u>lay-filter</u>="demo" <u>lay-allowClose</u>="true">

      <ul class="layui-tab-title">

      </ul>

      <div class="layui-tab-content" >

      </div>

    </div>

  </div>

  

  <div class="layui-footer">

    <!-- 底部固定区域 -->

    © layui.com - 底部固定区域

  </div>

</div>





      <script src="../layui/layui.js"></script>

<script>

layui.use(['element','layer'], function(){

      var element = layui.element

      ,layer = layui.layer

      ,element = layui.element

      ,$ = layui.jquery;

       var base="http://localhost:8080"; 

       var get_nav=base+"/permission/list";

       var layer;

    

    

     network();

      /*

       * @todo 重新计算iframe高度

       */

      function FrameWH() { 

          var h = $(window).height() - 164;

          //console.log("高度问题=="+h);

          $("iframe").css("height", h + "px");

      }

      

      function network(){

        $.ajax({

            url:"/permission/list",  

            type: "get",

            async: true,

            success: function(res) {

              //console.log("首页请求结果=="+JSON.stringify(res));

              if (res.code===0) {

                  console.log("请求数据成功");

                  loadnav(res.data);

              } else{

                  layer.msg('暂无数据');

              }

            },

            error:function() { 

              layer.msg("请求失败!");

            } 

          });        

      }

      

      

      function loadnav (navdata) {

          for (var i=0;i<navdata.length;i++) {

              var  first_menu=navdata[i];

               var  childMenus=first_menu.list; 

               //console.log("子菜单=="+JSON.stringify(childMenus));

               
if(childMenus==null||childMenus==undefined||childMenus==""){

                   //console.log("没有子菜单=="+first_menu.name);

                   loadTopMenu(first_menu);

               }else{

                    //console.log("有子菜单=="+first_menu.name);

                    loadHasChildMenu(first_menu);

                }

          }

         //列表添加完后再次执行渲染

         xuanran();

      }

      

      

      //加载带有子菜单的

      function loadHasChildMenu(data){

          var fragment = document.getElementById("left_nav");

          var list = document.createElement('li');

          list.className="layui-nav-item ";

          var child_one_Html='<a 
href="javascript:;">'+data.permissionName+'</a>';

          var childmenus=data.list;

          var child_two_Html='<dl class="layui-nav-child">';

          var childHtmls="";

          for (var i=0;i<childmenus.length;i++) {

              var childmenu=childmenus[i];

              //console.log("1.=多级菜单列表=="+childmenu.name+"=="); 
data-title

              var childHtml='<dd><a class="site-demo-active" 
data-id='+childmenu.id+' data-src='+childmenu.url+' 
data-title='+childmenu.permissionName+'>'+childmenu.permissionName+'</a></dd>';

              childHtmls+=childHtml; 

          }

          child_two_Html +=childHtmls+'</dl>';

          list.innerHTML=child_one_Html+child_two_Html;

          fragment.appendChild(list);

          //console.log("2.=多级菜单列表加载完毕");

      }

            

      //加载顶级菜单(没有子菜单)

      function loadTopMenu(data){

          var fragment = document.getElementById("left_nav");

          var list = document.createElement('li'); 

          list.className="layui-nav-item";

      //aa

          list.innerHTML='<a class="site-demo-active" 
data-id='+data.id+' data-src='+data.url+'>'+data.permissionName+'</a>';

          fragment.appendChild(list);

          //console.log("1.=顶级菜单列表加载完毕"); 

      }

      

      function xuanran() {

          layui.use(['element','layer'], function(){

            var element = layui.element;

            layer=layui.layer;

            

            var layFilter = $("#left_nav").attr('lay-filter');

            element.render('nav', layFilter); 

            

            var active = {

              //在这里给active绑定几项事件,后面可通过active调用这些事件

              tabAdd: function (url, id, name) {

                  //新增一个Tab项 传入三个参数,分别对应其标题,tab页面的地址,还有一个规定的id,是标签中data-id的属性值

                  var body_url=url+".html";

                  console.log("要切换的页面地址="+body_url);

                  element.tabAdd('demo', {

                      title: name,

                      content: '<iframe data-frameid="' + id + '" 
scrolling="auto" frameborder="0" src="' + body_url + '"></iframe>',

                      id: id //规定好的id

                  })

                  FrameWH();  //计算ifram层的大小

              },

              tabChange: function (id) {

                  //切换到指定Tab项

                  element.tabChange('demo', id); //根据传入的id传入到指定的tab项

              },

              tabDelete: function (id) {

                  element.tabDelete("demo", id);//删除

              }

            };    

            

       //当点击有site-demo-active属性的标签时,即左侧菜单栏中内容 ,触发点击事件

      $('.site-demo-active').on('click', function () {

           var dataid = $(this);

           if ($(".layui-tab-title li[lay-id]").length <= 0) {

               //如果比零小,则直接打开新的tab项

               //console.log("1.没有tab页,新建tab页");

               console.log("2.没有tab页,新建tab页=="+dataid.text()+"=="+dataid.attr("data-id")+"==="+dataid.attr("data-title"));

               active.tabAdd(dataid.attr("data-src"), 
dataid.attr("data-id"),dataid.attr("data-title"));

           } else {

              //否则判断该tab项是否以及存在

              var isData = false; //初始化一个标志,为false说明未打开该tab项 为true则说明已有

              $.each($(".layui-tab-title li[lay-id]"), function () {

                  //如果点击左侧菜单栏所传入的id 在右侧tab项中的lay-id属性可以找到,则说明该tab项已经打开

                  if ($(this).attr("lay-id") == dataid.attr("data-id")) {

                    console.log("如果点击左侧菜单栏所传入的id 在右侧tab项中的lay-id属性可以找到,则说明该tab项已经打开");

                    isData = true;                     

               }

              })

              if (isData == false) {

                //标志为false 新增一个tab项

                console.log("新增一个tab项")

                active.tabAdd(dataid.attr("data-src"), 
dataid.attr("data-id"),dataid.attr("data-title"));

              }

         }

        //最后不管是否新增tab,最后都转到要打开的选项页面上

        active.tabChange(dataid.attr("data-id"));

      });

    })

    console.log("==列表添加完后再次执行渲染");

}

})

</script>        

    </body>

</html>

感谢那些夸奖和鼓励,那些不经意的惦记和突如其来的善意,热爱世间浪漫万物,沿途也为晚霞驻足,嘻嘻。
原文地址:https://www.cnblogs.com/linanana/p/14654349.html