text: /**
   * date:2020/02/27
   * author:Mr.Chung
   * version:2.0
   * description:layuimini 菜单框架扩展
   */
  define(["jquery"], function ($) {
      var element = layui.element,
          $ = layui.$,
          laytpl  = layui.laytpl,
          layer = layui.layer;
  
      var miniMenu = {
  
          /**
           * 菜单初始化
           * @param options.menuList   菜单数据信息
           * @param options.multiModule 是否开启多模块
           * @param options.menuChildOpen 是否展开子菜单
           */
          render: function (options) {
              options.menuList = options.menuList || [];
              options.multiModule = options.multiModule || false;
              options.menuChildOpen = options.menuChildOpen || false;
              if (options.multiModule) {
                  miniMenu.renderMultiModule(options.menuList, options.menuChildOpen);
              } else {
                  miniMenu.renderSingleModule(options.menuList, options.menuChildOpen);
              }
              miniMenu.listen();
          },
  
          /**
           * 单模块
           * @param menuList 菜单数据
           * @param menuChildOpen 是否默认展开
           */
          renderSingleModule: function (menuList, menuChildOpen) {
              menuList = menuList || [];
              var leftMenuHtml = '',
                  childOpenClass = '',
                  leftMenuCheckDefault = 'layui-this';
              var me = this ;
              if (menuChildOpen) childOpenClass = ' layui-nav-itemed';
              leftMenuHtml = this.renderLeftMenu(menuList,{ childOpenClass:childOpenClass }) ;
              $('.layui-layout-body').addClass('layuimini-single-module'); //单模块标识
              $('.layuimini-header-menu').remove();
              $('.layuimini-menu-left').html(leftMenuHtml);
  
              element.init();
          },
  
          /**
           * 渲染一级菜单
           */
          compileMenu: function(menu,isSub){
              var menuHtml = '<li {{#if( d.menu){ }}  data-menu="{{d.menu}}" {{#}}} class="layui-nav-item menu-li {{d.childOpenClass}} {{d.className}}"  {{#if( d.id){ }}  id="{{d.id}}" {{#}}}> <a {{#if( d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }}  target="{{d.target}}" {{#}}} href="javascript:;">{{#if( d.icon){ }}  <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav">{{d.title}}</span></a>  {{# if(d.children){}} {{d.children}} {{#}}} </li>' ;
              if(isSub){
                  menuHtml = '<dd class="menu-dd {{d.childOpenClass}} {{ d.className }}"> <a href="javascript:;"  {{#if( d.menu){ }}  data-menu="{{d.menu}}" {{#}}} {{#if( d.id){ }}  id="{{d.id}}" {{#}}} {{#if(( !d.child || !d.child.length ) && d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }}  target="{{d.target}}" {{#}}}> {{#if( d.icon){ }}  <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav"> {{d.title}}</span></a> {{# if(d.children){}} {{d.children}} {{#}}}</dd>'
              }
              return laytpl(menuHtml).render(menu);
          },
          compileMenuContainer :function(menu,isSub){
              var wrapperHtml = '<ul class="layui-nav layui-nav-tree layui-left-nav-tree {{d.className}}" id="{{d.id}}">{{d.children}}</ul>' ;
              if(isSub){
                  wrapperHtml = '<dl class="layui-nav-child ">{{d.children}}</dl>' ;
              }
              if(!menu.children){
                  return "";
              }
              return laytpl(wrapperHtml).render(menu);
          },
  
          each:function(list,callback){
              var _list = [];
              for(var i = 0 ,length = list.length ; i<length ;i++ ){
                  _list[i] = callback(i,list[i]) ;
              }
              return _list ;
          },
          renderChildrenMenu:function(menuList,options){
              var me = this ;
              menuList = menuList || [] ;
              var html = this.each(menuList,function (idx,menu) {
                  if(menu.child && menu.child.length){
                      menu.children = me.renderChildrenMenu(menu.child,{ childOpenClass: options.childOpenClass || '' });
                  }
                  menu.className = "" ;
                  menu.childOpenClass = options.childOpenClass || ''
                  return me.compileMenu(menu,true)
              }).join("");
              return me.compileMenuContainer({ children:html },true)
          },
          renderLeftMenu :function(leftMenus,options){
              options = options || {};
              var me = this ;
              var leftMenusHtml =  me.each(leftMenus || [],function (idx,leftMenu) { // 左侧菜单遍历
                  var children = me.renderChildrenMenu(leftMenu.child, { childOpenClass:options.childOpenClass });
                  var leftMenuHtml = me.compileMenu({
                      href:leftMenu.href,
                      target:leftMenu.target,
                      childOpenClass:options.childOpenClass,
                      icon:leftMenu.icon,
                      title:leftMenu.title,
                      children:children,
                      className: '',
                  });
                  return leftMenuHtml ;
              }).join("");
  
              leftMenusHtml = me.compileMenuContainer({ id:options.parentMenuId,className:options.leftMenuCheckDefault,children:leftMenusHtml }) ;
              return leftMenusHtml ;
          },
          /**
           * 多模块
           * @param menuList 菜单数据
           * @param menuChildOpen 是否默认展开
           */
          renderMultiModule: function (menuList, menuChildOpen) {
              menuList = menuList || [];
              var me = this ;
              var headerMenuHtml = '',
                  headerMobileMenuHtml = '',
                  leftMenuHtml = '',
                  leftMenuCheckDefault = 'layui-this',
                  childOpenClass = '',
                  headerMenuCheckDefault = 'layui-this';
  
              if (menuChildOpen) childOpenClass = ' layui-nav-itemed';
              var headerMenuHtml = this.each(menuList, function (index, val) { //顶部菜单渲染
                  var menu = 'multi_module_' + index ;
                  var id = menu+"HeaderId";
                  var topMenuItemHtml = "" ;
                  topMenuItemHtml = me.compileMenu({
                      className:headerMenuCheckDefault,
                      menu:menu,
                      id:id,
                      title:val.title,
                      href:"",
                      target:"",
                      children:""
                  });
                  leftMenuHtml+=me.renderLeftMenu(val.child,{
                      parentMenuId:menu,
                      childOpenClass:childOpenClass,
                      leftMenuCheckDefault:leftMenuCheckDefault
                  });
                  headerMobileMenuHtml +=me.compileMenu({ id:id,menu:menu,id:id,icon:val.icon, title:val.title, },true);
                  headerMenuCheckDefault = "";
                  leftMenuCheckDefault = "layui-hide" ;
                  return topMenuItemHtml ;
              }).join("");
              $('.layui-layout-body').addClass('layuimini-multi-module'); //多模块标识
              $('.layuimini-menu-header-pc').html(headerMenuHtml); //电脑
              $('.layuimini-menu-left').html(leftMenuHtml);
              $('.layuimini-menu-header-mobile').html(headerMobileMenuHtml); //手机
              element.init();
          },
  
          /**
           * 监听
           */
          listen: function () {
  
              /**
               * 菜单模块切换
               */
              $('body').on('click', '[data-menu]', function () {
                  var loading = layer.load(0, {shade: false, time: 2 * 1000});
                  var menuId = $(this).attr('data-menu');
                  // header
                  $(".layuimini-header-menu .layui-nav-item.layui-this").removeClass('layui-this');
                  $(this).addClass('layui-this');
                  // left
                  $(".layuimini-menu-left .layui-nav.layui-nav-tree.layui-this").addClass('layui-hide');
                  $(".layuimini-menu-left .layui-nav.layui-nav-tree.layui-this.layui-hide").removeClass('layui-this');
                  $("#" + menuId).removeClass('layui-hide');
                  $("#" + menuId).addClass('layui-this');
                  layer.close(loading);
              });
  
              /**
               * 菜单缩放
               */
              $('body').on('click', '.layuimini-site-mobile', function () {
                  var loading = layer.load(0, {shade: false, time: 2 * 1000});
                  var isShow = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                  if (isShow == 1) { // 缩放
                      $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 0);
                      $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-indent');
                      $('.layui-layout-body').removeClass('layuimini-all');
                      $('.layui-layout-body').addClass('layuimini-mini');
                  } else { // 正常
                      $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 1);
                      $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-outdent');
                      $('.layui-layout-body').removeClass('layuimini-mini');
                      $('.layui-layout-body').addClass('layuimini-all');
                      layer.close(window.openTips);
                  }
                  element.init();
                  layer.close(loading);
              });
              /**
               * 菜单缩放
               */
              $('body').on('click', '[data-side-fold]', function () {
                  var loading = layer.load(0, {shade: false, time: 2 * 1000});
                  var isShow = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                  if (isShow == 1) { // 缩放
                      $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 0);
                      $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-indent');
                      $('.layui-layout-body').removeClass('layuimini-all');
                      $('.layui-layout-body').addClass('layuimini-mini');
                      // $(".menu-li").each(function (idx,el) {
                      //     $(el).addClass("hidden-sub-menu");
                      // });
  
                  } else { // 正常
                      $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 1);
                      $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-outdent');
                      $('.layui-layout-body').removeClass('layuimini-mini');
                      $('.layui-layout-body').addClass('layuimini-all');
                      // $(".menu-li").each(function (idx,el) {
                      //     $(el).removeClass("hidden-sub-menu");
                      // });
                      layer.close(window.openTips);
                  }
                  element.init();
                  layer.close(loading);
              });
  
              /**
               * 手机端点开模块
               */
              $('body').on('click', '.layuimini-header-menu.layuimini-mobile-show dd', function () {
                  var loading = layer.load(0, {shade: false, time: 2 * 1000});
                  var check = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                  if(check === "1"){
                      $('.layuimini-site-mobile').trigger("click");
                      element.init();
                  }
                  layer.close(loading);
              });
          },
  
      };
  
  
     return miniMenu;
  });