| /** | 
|   | 
|  @Name:layuiAdmin iframe版核心模块 | 
|  @Author:贤心 | 
|  @Site:http://www.layui.com/admin/ | 
|  @License:LPPL | 
|      | 
|  */ | 
|   | 
| layui.define('view', function(exports){ | 
|   var $ = layui.jquery | 
|   ,laytpl = layui.laytpl | 
|   ,element = layui.element | 
|   ,setter = layui.setter | 
|   ,view = layui.view | 
|   ,device = layui.device() | 
|    | 
|   ,$win = $(window), $body = $('body') | 
|   ,container = $('#'+ setter.container) | 
|    | 
|   ,SHOW = 'layui-show', HIDE = 'layui-hide', THIS = 'layui-this', DISABLED = 'layui-disabled', TEMP = 'template' | 
|   ,APP_BODY = '#LAY_app_body', APP_FLEXIBLE = 'LAY_app_flexible' | 
|   ,FILTER_TAB_TBAS = 'layadmin-layout-tabs' | 
|   ,APP_SPREAD_SM = 'layadmin-side-spread-sm', TABS_BODY = 'layadmin-tabsbody-item' | 
|   ,ICON_SHRINK = 'layui-icon-shrink-right', ICON_SPREAD = 'layui-icon-spread-left' | 
|   ,SIDE_SHRINK = 'layadmin-side-shrink', SIDE_MENU = 'LAY-system-side-menu' | 
|   | 
|   //通用方法 | 
|   ,admin = { | 
|     v: '1.2.1 std' | 
|      | 
|     //数据的异步请求 | 
|     ,req: view.req | 
|      | 
|     //清除本地 token,并跳转到登入页 | 
|     ,exit: view.exit | 
|      | 
|     //xss 转义 | 
|     ,escape: function(html){ | 
|       return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') | 
|       .replace(/</g, '<').replace(/>/g, '>') | 
|       .replace(/'/g, ''').replace(/"/g, '"'); | 
|     } | 
|      | 
|     //事件监听 | 
|     ,on: function(events, callback){ | 
|       return layui.onevent.call(this, setter.MOD_NAME, events, callback); | 
|     } | 
|      | 
|     //发送验证码 | 
|     ,sendAuthCode: function(options){ | 
|       options = $.extend({ | 
|         seconds: 60 | 
|         ,elemPhone: '#LAY_phone' | 
|         ,elemVercode: '#LAY_vercode' | 
|       }, options); | 
|   | 
|       var seconds = options.seconds | 
|       ,btn = $(options.elem) | 
|       ,token = null | 
|       ,timer, countDown = function(loop){ | 
|         seconds--; | 
|         if(seconds < 0){ | 
|           btn.removeClass(DISABLED).html('获取验证码'); | 
|           seconds = options.seconds; | 
|           clearInterval(timer); | 
|         } else { | 
|           btn.addClass(DISABLED).html(seconds + '秒后重获'); | 
|         } | 
|   | 
|         if(!loop){ | 
|           timer = setInterval(function(){ | 
|             countDown(true); | 
|           }, 1000); | 
|         } | 
|       }; | 
|        | 
|       options.elemPhone = $(options.elemPhone); | 
|       options.elemVercode = $(options.elemVercode); | 
|   | 
|       btn.on('click', function(){ | 
|         var elemPhone = options.elemPhone | 
|         ,value = elemPhone.val(); | 
|   | 
|         if(seconds !== options.seconds || $(this).hasClass(DISABLED)) return; | 
|   | 
|         if(!/^1\d{10}$/.test(value)){ | 
|           elemPhone.focus(); | 
|           return layer.msg('请输入正确的手机号') | 
|         }; | 
|          | 
|         if(typeof options.ajax === 'object'){ | 
|           var success = options.ajax.success; | 
|           delete options.ajax.success; | 
|         } | 
|          | 
|         admin.req($.extend(true, { | 
|           url: '/auth/code' | 
|           ,type: 'get' | 
|           ,data: { | 
|             phone: value | 
|           } | 
|           ,success: function(res){ | 
|             layer.msg('验证码已发送至你的手机,请注意查收', { | 
|               icon: 1 | 
|               ,shade: 0 | 
|             }); | 
|             options.elemVercode.focus(); | 
|             countDown(); | 
|             success && success(res); | 
|           } | 
|         }, options.ajax)); | 
|       }); | 
|     } | 
|      | 
|     //屏幕类型 | 
|     ,screen: function(){ | 
|       var width = $win.width() | 
|       if(width > 1200){ | 
|         return 3; //大屏幕 | 
|       } else if(width > 992){ | 
|         return 2; //中屏幕 | 
|       } else if(width > 768){ | 
|         return 1; //小屏幕 | 
|       } else { | 
|         return 0; //超小屏幕 | 
|       } | 
|     } | 
|      | 
|     //侧边伸缩 | 
|     ,sideFlexible: function(status){ | 
|       var app = container | 
|       ,iconElem =  $('#'+ APP_FLEXIBLE) | 
|       ,screen = admin.screen(); | 
|   | 
|       //设置状态,PC:默认展开、移动:默认收缩 | 
|       if(status === 'spread'){ | 
|         //切换到展开状态的 icon,箭头:← | 
|         iconElem.removeClass(ICON_SPREAD).addClass(ICON_SHRINK); | 
|          | 
|         //移动:从左到右位移;PC:清除多余选择器恢复默认 | 
|         if(screen < 2){ | 
|           app.addClass(APP_SPREAD_SM); | 
|         } else { | 
|           app.removeClass(APP_SPREAD_SM); | 
|         } | 
|          | 
|         app.removeClass(SIDE_SHRINK) | 
|       } else { | 
|         //切换到搜索状态的 icon,箭头:→ | 
|         iconElem.removeClass(ICON_SHRINK).addClass(ICON_SPREAD); | 
|          | 
|         //移动:清除多余选择器恢复默认;PC:从右往左收缩 | 
|         if(screen < 2){ | 
|           app.removeClass(SIDE_SHRINK); | 
|         } else { | 
|           app.addClass(SIDE_SHRINK); | 
|         } | 
|          | 
|         app.removeClass(APP_SPREAD_SM) | 
|       } | 
|        | 
|       layui.event.call(this, setter.MOD_NAME, 'side({*})', { | 
|         status: status | 
|       }); | 
|     } | 
|      | 
|     //弹出面板 | 
|     ,popup: view.popup | 
|      | 
|     //右侧面板 | 
|     ,popupRight: function(options){ | 
|       //layer.close(admin.popup.index); | 
|       return admin.popup.index = layer.open($.extend({ | 
|         type: 1 | 
|         ,id: 'LAY_adminPopupR' | 
|         ,anim: -1 | 
|         ,title: false | 
|         ,closeBtn: false | 
|         ,offset: 'r' | 
|         ,shade: 0.1 | 
|         ,shadeClose: true | 
|         ,skin: 'layui-anim layui-anim-rl layui-layer-adminRight' | 
|         ,area: '300px' | 
|       }, options)); | 
|     } | 
|      | 
|     //主题设置 | 
|     ,theme: function(options){ | 
|       var theme = setter.theme | 
|       ,local = layui.data(setter.tableName) | 
|       ,id = 'LAY_layadmin_theme' | 
|       ,style = document.createElement('style') | 
|       ,styleText = laytpl([ | 
|         //主题色 | 
|         '.layui-side-menu,' | 
|         ,'.layadmin-pagetabs .layui-tab-title li:after,' | 
|         ,'.layadmin-pagetabs .layui-tab-title li.layui-this:after,' | 
|         ,'.layui-layer-admin .layui-layer-title,' | 
|         ,'.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child' | 
|         ,'{background-color:{{d.color.main}} !important;}' | 
|   | 
|         //选中色 | 
|         ,'.layui-nav-tree .layui-this,' | 
|         ,'.layui-nav-tree .layui-this>a,' | 
|         ,'.layui-nav-tree .layui-nav-child dd.layui-this,' | 
|         ,'.layui-nav-tree .layui-nav-child dd.layui-this a' | 
|         ,'{background-color:{{d.color.selected}} !important;}' | 
|          | 
|         //logo | 
|         ,'.layui-layout-admin .layui-logo{background-color:{{d.color.logo || d.color.main}} !important;}' | 
|          | 
|         //头部色 | 
|         ,'{{# if(d.color.header){ }}' | 
|           ,'.layui-layout-admin .layui-header{background-color:{{ d.color.header }};}' | 
|           ,'.layui-layout-admin .layui-header a,' | 
|           ,'.layui-layout-admin .layui-header a cite{color: #f8f8f8;}' | 
|           ,'.layui-layout-admin .layui-header a:hover{color: #fff;}' | 
|           ,'.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-top-color: #fbfbfb;}' | 
|           ,'.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color: transparent; border-bottom-color: #fbfbfb;}' | 
|           ,'.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar{background-color: #fff; background-color: rgba(255,255,255,.5);}' | 
|           ,'.layadmin-pagetabs .layui-tab-title li:after{display: none;}' | 
|         ,'{{# } }}' | 
|       ].join('')).render(options = $.extend({}, local.theme, options)) | 
|       ,styleElem = document.getElementById(id); | 
|        | 
|       //添加主题样式 | 
|       if('styleSheet' in style){ | 
|         style.setAttribute('type', 'text/css'); | 
|         style.styleSheet.cssText = styleText; | 
|       } else { | 
|         style.innerHTML = styleText; | 
|       } | 
|       style.id = id; | 
|        | 
|       styleElem && $body[0].removeChild(styleElem); | 
|       $body[0].appendChild(style); | 
|       $body.attr('layadmin-themealias', options.color.alias); | 
|        | 
|       //本地存储记录 | 
|       local.theme = local.theme || {}; | 
|       layui.each(options, function(key, value){ | 
|         local.theme[key] = value; | 
|       }); | 
|       layui.data(setter.tableName, { | 
|         key: 'theme' | 
|         ,value: local.theme | 
|       });  | 
|     } | 
|      | 
|     //初始化主题 | 
|     ,initTheme: function(index){ | 
|       var theme = setter.theme; | 
|       index = index || 0; | 
|       if(theme.color[index]){ | 
|         theme.color[index].index = index; | 
|         admin.theme({ | 
|           color: theme.color[index] | 
|         }); | 
|       } | 
|     } | 
|      | 
|     //记录最近一次点击的页面标签数据 | 
|     ,tabsPage: {} | 
|      | 
|     //获取页面标签主体元素 | 
|     ,tabsBody: function(index){ | 
|       return $(APP_BODY).find('.'+ TABS_BODY).eq(index || 0); | 
|     } | 
|      | 
|     //切换页面标签主体 | 
|     ,tabsBodyChange: function(index, options){ | 
|       options = options || {}; | 
|        | 
|       admin.tabsBody(index).addClass(SHOW).siblings().removeClass(SHOW); | 
|       events.rollPage('auto', index); | 
|        | 
|       //执行 {setter.MOD_NAME}.tabsPage 下的事件 | 
|       layui.event.call(this, setter.MOD_NAME, 'tabsPage({*})', { | 
|         url: options.url | 
|         ,text: options.text | 
|       }); | 
|     } | 
|      | 
|     //resize事件管理 | 
|     ,resize: function(fn){ | 
|       var router = layui.router() | 
|       ,key = router.path.join('-'); | 
|        | 
|       if(admin.resizeFn[key]){ | 
|         $win.off('resize', admin.resizeFn[key]); | 
|         delete admin.resizeFn[key]; | 
|       } | 
|        | 
|       if(fn === 'off') return; //如果是清除 resize 事件,则终止往下执行 | 
|        | 
|       fn(), admin.resizeFn[key] = fn; | 
|       $win.on('resize', admin.resizeFn[key]); | 
|     } | 
|     ,resizeFn: {} | 
|     ,runResize: function(){ | 
|       var router = layui.router() | 
|       ,key = router.path.join('-'); | 
|       admin.resizeFn[key] && admin.resizeFn[key](); | 
|     } | 
|     ,delResize: function(){ | 
|       this.resize('off'); | 
|     } | 
|      | 
|     //关闭当前 pageTabs | 
|     ,closeThisTabs: function(){ | 
|       if(!admin.tabsPage.index) return; | 
|       $(TABS_HEADER).eq(admin.tabsPage.index).find('.layui-tab-close').trigger('click'); | 
|     } | 
|      | 
|     //全屏 | 
|     ,fullScreen: function(){ | 
|       var ele = document.documentElement | 
|       ,reqFullScreen = ele.requestFullScreen || ele.webkitRequestFullScreen  | 
|       || ele.mozRequestFullScreen || ele.msRequestFullscreen;       | 
|       if(typeof reqFullScreen !== 'undefined' && reqFullScreen) { | 
|         reqFullScreen.call(ele); | 
|       }; | 
|     } | 
|      | 
|     //退出全屏 | 
|     ,exitScreen: function(){ | 
|       var ele = document.documentElement | 
|       if (document.exitFullscreen) {   | 
|         document.exitFullscreen();   | 
|       } else if (document.mozCancelFullScreen) {   | 
|         document.mozCancelFullScreen();   | 
|       } else if (document.webkitCancelFullScreen) {   | 
|         document.webkitCancelFullScreen();   | 
|       } else if (document.msExitFullscreen) {   | 
|         document.msExitFullscreen();   | 
|       } | 
|     } | 
|      | 
|     //…… | 
|   }; | 
|    | 
|   //事件 | 
|   var events = admin.events = { | 
|     //伸缩 | 
|     flexible: function(othis){ | 
|       var iconElem = othis.find('#'+ APP_FLEXIBLE) | 
|       ,isSpread = iconElem.hasClass(ICON_SPREAD); | 
|       admin.sideFlexible(isSpread ? 'spread' : null); | 
|     } | 
|      | 
|     //刷新 | 
|     ,refresh: function(){ | 
|       var ELEM_IFRAME = '.layadmin-iframe' | 
|       ,length = $('.'+ TABS_BODY).length; | 
|        | 
|       if(admin.tabsPage.index >= length){ | 
|         admin.tabsPage.index = length - 1; | 
|       } | 
|        | 
|       var iframe = admin.tabsBody(admin.tabsPage.index).find(ELEM_IFRAME); | 
|       iframe[0].contentWindow.location.reload(true); | 
|     } | 
|   | 
|     //输入框搜索 | 
|     ,serach: function(othis){ | 
|       othis.off('keypress').on('keypress',function(e){ | 
|         if(!this.value.replace(/\s/g, '')) return; | 
|         //回车跳转 | 
|         if(e.keyCode === 13){ | 
|           var href = othis.attr('lay-action') | 
|           ,text = othis.attr('lay-text') || '搜索'; | 
|            | 
|           href = href + this.value; | 
|           text = text + ' <span style="color: #FF5722;">'+ admin.escape(this.value) +'</span>'; | 
|            | 
|           //打开标签页 | 
|           layui.index.openTabsPage(href, text); | 
|            | 
|           //如果搜索关键词已经打开,则刷新页面即可 | 
|           events.serach.keys || (events.serach.keys = {}); | 
|           events.serach.keys[admin.tabsPage.index] = this.value; | 
|           if(this.value === events.serach.keys[admin.tabsPage.index]){ | 
|             events.refresh(othis); | 
|           } | 
|            | 
|           //清空输入框 | 
|           this.value = ''; | 
|         }        | 
|       }); | 
|     } | 
|      | 
|     //点击消息 | 
|     ,message: function(othis){ | 
|       othis.find('.layui-badge-dot').remove(); | 
|     } | 
|      | 
|     //弹出主题面板 | 
|     ,theme: function(){ | 
|       admin.popupRight({ | 
|         id: 'LAY_adminPopupTheme' | 
|         ,success: function(){ | 
|           view(this.id).render('system/theme') | 
|         } | 
|       }); | 
|     } | 
|      | 
|     //便签 | 
|     ,note: function(othis){ | 
|       var mobile = admin.screen() < 2 | 
|       ,note = layui.data(setter.tableName).note; | 
|        | 
|       events.note.index = admin.popup({ | 
|         title: '便签' | 
|         ,shade: 0 | 
|         ,offset: [ | 
|           '41px' | 
|           ,(mobile ? null : (othis.offset().left - 250) + 'px') | 
|         ] | 
|         ,anim: -1 | 
|         ,id: 'LAY_adminNote' | 
|         ,skin: 'layadmin-note layui-anim layui-anim-upbit' | 
|         ,content: '<textarea placeholder="内容"></textarea>' | 
|         ,resize: false | 
|         ,success: function(layero, index){ | 
|           var textarea = layero.find('textarea') | 
|           ,value = note === undefined ? '便签中的内容会存储在本地,这样即便你关掉了浏览器,在下次打开时,依然会读取到上一次的记录。是个非常小巧实用的本地备忘录' : note; | 
|            | 
|           textarea.val(value).focus().on('keyup', function(){ | 
|             layui.data(setter.tableName, { | 
|               key: 'note' | 
|               ,value: this.value | 
|             }); | 
|           }); | 
|         } | 
|       }) | 
|     } | 
|   | 
|     //全屏 | 
|     ,fullscreen: function(othis){ | 
|       var SCREEN_FULL = 'layui-icon-screen-full' | 
|       ,SCREEN_REST = 'layui-icon-screen-restore' | 
|       ,iconElem = othis.children("i"); | 
|        | 
|       if(iconElem.hasClass(SCREEN_FULL)){ | 
|         admin.fullScreen(); | 
|         iconElem.addClass(SCREEN_REST).removeClass(SCREEN_FULL); | 
|       } else { | 
|         admin.exitScreen(); | 
|         iconElem.addClass(SCREEN_FULL).removeClass(SCREEN_REST); | 
|       } | 
|     } | 
|   | 
|     //弹出关于面板 | 
|     ,about: function(){ | 
|       admin.popupRight({ | 
|         id: 'LAY_adminPopupAbout' | 
|         ,success: function(){ | 
|           view(this.id).render('system/about'); | 
|         } | 
|       }); | 
|     } | 
|      | 
|     //弹出更多面板 | 
|     ,more: function(){ | 
|       admin.popupRight({ | 
|         id: 'LAY_adminPopupMore' | 
|         ,success: function(){ | 
|           view(this.id).render('system/more'); | 
|         } | 
|       }); | 
|     } | 
|      | 
|     //返回上一页 | 
|     ,back: function(){ | 
|       history.back(); | 
|     } | 
|      | 
|     //主题设置 | 
|     ,setTheme: function(othis){ | 
|       var index = othis.data('index') | 
|       ,nextIndex = othis.siblings('.layui-this').data('index'); | 
|        | 
|       if(othis.hasClass(THIS)) return; | 
|        | 
|       othis.addClass(THIS).siblings('.layui-this').removeClass(THIS); | 
|       admin.initTheme(index); | 
|     } | 
|      | 
|     //左右滚动页面标签 | 
|     ,rollPage: function(type, index){ | 
|       var tabsHeader = $('#LAY_app_tabsheader') | 
|       ,liItem = tabsHeader.children('li') | 
|       ,scrollWidth = tabsHeader.prop('scrollWidth') | 
|       ,outerWidth = tabsHeader.outerWidth() | 
|       ,tabsLeft = parseFloat(tabsHeader.css('left')); | 
|        | 
|       //右左往右 | 
|       if(type === 'left'){ | 
|         if(!tabsLeft && tabsLeft <=0) return; | 
|          | 
|         //当前的left减去可视宽度,用于与上一轮的页标比较 | 
|         var  prefLeft = -tabsLeft - outerWidth;  | 
|   | 
|         liItem.each(function(index, item){ | 
|           var li = $(item) | 
|           ,left = li.position().left; | 
|            | 
|           if(left >= prefLeft){ | 
|             tabsHeader.css('left', -left); | 
|             return false; | 
|           } | 
|         }); | 
|       } else if(type === 'auto'){ //自动滚动 | 
|         (function(){ | 
|           var thisLi = liItem.eq(index), thisLeft; | 
|            | 
|           if(!thisLi[0]) return; | 
|           thisLeft = thisLi.position().left; | 
|            | 
|           //当目标标签在可视区域左侧时 | 
|           if(thisLeft < -tabsLeft){ | 
|             return tabsHeader.css('left', -thisLeft); | 
|           } | 
|            | 
|           //当目标标签在可视区域右侧时 | 
|           if(thisLeft + thisLi.outerWidth() >= outerWidth - tabsLeft){ | 
|             var subLeft = thisLeft + thisLi.outerWidth() - (outerWidth - tabsLeft); | 
|             liItem.each(function(i, item){ | 
|               var li = $(item) | 
|               ,left = li.position().left; | 
|                | 
|               //从当前可视区域的最左第二个节点遍历,如果减去最左节点的差 > 目标在右侧不可见的宽度,则将该节点放置可视区域最左 | 
|               if(left + tabsLeft > 0){ | 
|                 if(left - tabsLeft > subLeft){ | 
|                   tabsHeader.css('left', -left); | 
|                   return false; | 
|                 } | 
|               } | 
|             }); | 
|           } | 
|         }()); | 
|       } else { | 
|         //默认向左滚动 | 
|         liItem.each(function(i, item){ | 
|           var li = $(item) | 
|           ,left = li.position().left; | 
|   | 
|           if(left + li.outerWidth() >= outerWidth - tabsLeft){ | 
|             tabsHeader.css('left', -left); | 
|             return false; | 
|           } | 
|         }); | 
|       }       | 
|     } | 
|      | 
|     //向右滚动页面标签 | 
|     ,leftPage: function(){ | 
|       events.rollPage('left'); | 
|     } | 
|      | 
|     //向左滚动页面标签 | 
|     ,rightPage: function(){ | 
|       events.rollPage(); | 
|     } | 
|      | 
|     //关闭当前标签页 | 
|     ,closeThisTabs: function(){ | 
|       var topAdmin = parent === self ? admin : parent.layui.admin; | 
|       topAdmin.closeThisTabs(); | 
|     } | 
|      | 
|     //关闭其它标签页 | 
|     ,closeOtherTabs: function(type){ | 
|       var TABS_REMOVE = 'LAY-system-pagetabs-remove'; | 
|       if(type === 'all'){ | 
|         $(TABS_HEADER+ ':gt(0)').remove(); | 
|         $(APP_BODY).find('.'+ TABS_BODY+ ':gt(0)').remove(); | 
|   | 
|         $(TABS_HEADER).eq(0).trigger('click'); | 
|       } else { | 
|         $(TABS_HEADER).each(function(index, item){ | 
|           if(index && index != admin.tabsPage.index){ | 
|             $(item).addClass(TABS_REMOVE); | 
|             admin.tabsBody(index).addClass(TABS_REMOVE); | 
|           } | 
|         }); | 
|         $('.'+ TABS_REMOVE).remove(); | 
|       } | 
|     } | 
|      | 
|     //关闭全部标签页 | 
|     ,closeAllTabs: function(){ | 
|       events.closeOtherTabs('all'); | 
|       //location.hash = ''; | 
|     } | 
|      | 
|     //遮罩 | 
|     ,shade: function(){ | 
|       admin.sideFlexible(); | 
|     } | 
|      | 
|     //呼出IM 示例 | 
|     ,im: function(){ | 
|       admin.popup({ | 
|         id: 'LAY-popup-layim-demo' //定义唯一ID,防止重复弹出 | 
|         ,shade: 0 | 
|         ,area: ['800px', '300px'] | 
|         ,title: '面板外的操作示例' | 
|         ,offset: 'lb' | 
|         ,success: function(){ | 
|           //将 views 目录下的某视图文件内容渲染给该面板 | 
|           layui.view(this.id).render('layim/demo').then(function(){ | 
|             layui.use('im'); | 
|           }); | 
|         } | 
|       }) | 
|     } | 
|   }; | 
|    | 
|   //初始 | 
|   !function(){ | 
|     //主题初始化,本地主题记录优先,其次为 initColorIndex | 
|     var local = layui.data(setter.tableName); | 
|     if(local.theme){ | 
|       admin.theme(local.theme); | 
|     } else if(setter.theme){ | 
|       admin.initTheme(setter.theme.initColorIndex); | 
|     } | 
|      | 
|     //常规版默认开启多标签页 | 
|     if(!('pageTabs' in layui.setter)) layui.setter.pageTabs = true; | 
|      | 
|     //不开启页面标签时 | 
|     if(!setter.pageTabs){ | 
|       $('#LAY_app_tabs').addClass(HIDE); | 
|       container.addClass('layadmin-tabspage-none'); | 
|     } | 
|   | 
|     //低版本IE提示 | 
|     if(device.ie && device.ie < 10){ | 
|       view.error('IE'+ device.ie + '下访问可能不佳,推荐使用:Chrome / Firefox / Edge 等高级浏览器', { | 
|         offset: 'auto' | 
|         ,id: 'LAY_errorIE' | 
|       }); | 
|     } | 
|      | 
|   }(); | 
|    | 
|   //admin.prevRouter = {}; //上一个路由 | 
|    | 
|   //监听 tab 组件切换,同步 index | 
|   element.on('tab('+ FILTER_TAB_TBAS +')', function(data){ | 
|     admin.tabsPage.index = data.index; | 
|   }); | 
|    | 
|   //监听选项卡切换,改变菜单状态 | 
|   admin.on('tabsPage(setMenustatus)', function(router){ | 
|     var pathURL = router.url, getData = function(item){ | 
|       return { | 
|         list: item.children('.layui-nav-child') | 
|         ,a: item.children('*[lay-href]') | 
|       } | 
|     } | 
|     ,sideMenu = $('#'+ SIDE_MENU) | 
|     ,SIDE_NAV_ITEMD = 'layui-nav-itemed' | 
|      | 
|     //捕获对应菜单 | 
|     ,matchMenu = function(list){ | 
|       list.each(function(index1, item1){ | 
|         var othis1 = $(item1) | 
|         ,data1 = getData(othis1) | 
|         ,listChildren1 = data1.list.children('dd') | 
|         ,matched1 = pathURL === data1.a.attr('lay-href'); | 
|          | 
|         listChildren1.each(function(index2, item2){ | 
|           var othis2 = $(item2) | 
|           ,data2 = getData(othis2) | 
|           ,listChildren2 = data2.list.children('dd') | 
|           ,matched2 = pathURL === data2.a.attr('lay-href'); | 
|            | 
|           listChildren2.each(function(index3, item3){ | 
|             var othis3 = $(item3) | 
|             ,data3 = getData(othis3) | 
|             ,matched3 = pathURL === data3.a.attr('lay-href'); | 
|              | 
|             if(matched3){ | 
|               var selected = data3.list[0] ? SIDE_NAV_ITEMD : THIS; | 
|               othis3.addClass(selected).siblings().removeClass(selected); //标记选择器 | 
|               return false; | 
|             } | 
|              | 
|           }); | 
|   | 
|           if(matched2){ | 
|             var selected = data2.list[0] ? SIDE_NAV_ITEMD : THIS; | 
|             othis2.addClass(selected).siblings().removeClass(selected); //标记选择器 | 
|             return false | 
|           } | 
|            | 
|         }); | 
|          | 
|         if(matched1){ | 
|           var selected = data1.list[0] ? SIDE_NAV_ITEMD : THIS; | 
|           othis1.addClass(selected).siblings().removeClass(selected); //标记选择器 | 
|           return false; | 
|         } | 
|          | 
|       }); | 
|     } | 
|      | 
|     //重置状态 | 
|     sideMenu.find('.'+ THIS).removeClass(THIS); | 
|      | 
|     //移动端点击菜单时自动收缩 | 
|     if(admin.screen() < 2) admin.sideFlexible(); | 
|      | 
|     //开始捕获 | 
|     matchMenu(sideMenu.children('li')); | 
|   }); | 
|    | 
|   //监听侧边导航点击事件 | 
|   element.on('nav(layadmin-system-side-menu)', function(elem){ | 
|     if(elem.siblings('.layui-nav-child')[0] && container.hasClass(SIDE_SHRINK)){ | 
|       admin.sideFlexible('spread'); | 
|       layer.close(elem.data('index')); | 
|     }; | 
|     admin.tabsPage.type = 'nav'; | 
|   }); | 
|    | 
|   //监听选项卡的更多操作 | 
|   element.on('nav(layadmin-pagetabs-nav)', function(elem){ | 
|     var dd = elem.parent(); | 
|     dd.removeClass(THIS); | 
|     dd.parent().removeClass(SHOW); | 
|   }); | 
|    | 
|   //同步路由 | 
|   var setThisRouter = function(othis){ | 
|     var layid = othis.attr('lay-id') | 
|     ,attr = othis.attr('lay-attr') | 
|     ,index = othis.index(); | 
|      | 
|     admin.tabsBodyChange(index, { | 
|       url: attr | 
|     }); | 
|     //location.hash = layid === setter.entry ? '/' : attr; | 
|   } | 
|   ,TABS_HEADER = '#LAY_app_tabsheader>li'; | 
|    | 
|   //标签页标题点击 | 
|   $body.on('click', TABS_HEADER, function(){ | 
|     var othis = $(this) | 
|     ,index = othis.index(); | 
|      | 
|     admin.tabsPage.type = 'tab'; | 
|     admin.tabsPage.index = index; | 
|   | 
|     setThisRouter(othis); | 
|   }); | 
|    | 
|   //监听 tabspage 删除 | 
|   element.on('tabDelete('+ FILTER_TAB_TBAS +')', function(obj){ | 
|     var othis = $(TABS_HEADER+ '.layui-this'); | 
|      | 
|     obj.index && admin.tabsBody(obj.index).remove(); | 
|     setThisRouter(othis); | 
|      | 
|     //移除resize事件 | 
|     admin.delResize(); | 
|   }); | 
|    | 
|   //页面跳转 | 
|   $body.on('click', '*[lay-href]', function(){ | 
|     var othis = $(this) | 
|     ,href = othis.attr('lay-href') | 
|     ,text = othis.attr('lay-text') | 
|     ,router = layui.router(); | 
|      | 
|     admin.tabsPage.elem = othis; | 
|     //admin.prevRouter[router.path[0]] = router.href; //记录上一次各菜单的路由信息 | 
|   | 
|     //执行跳转 | 
|     var topLayui = parent === self ? layui : top.layui; | 
|     topLayui.index.openTabsPage(href, text || othis.text()); | 
|   }); | 
|    | 
|   //点击事件 | 
|   $body.on('click', '*[layadmin-event]', function(){ | 
|     var othis = $(this) | 
|     ,attrEvent = othis.attr('layadmin-event'); | 
|     events[attrEvent] && events[attrEvent].call(this, othis); | 
|   }); | 
|    | 
|   //tips | 
|   $body.on('mouseenter', '*[lay-tips]', function(){ | 
|     var othis = $(this); | 
|      | 
|     if(othis.parent().hasClass('layui-nav-item') && !container.hasClass(SIDE_SHRINK)) return; | 
|      | 
|     var tips = othis.attr('lay-tips') | 
|     ,offset = othis.attr('lay-offset')  | 
|     ,direction = othis.attr('lay-direction') | 
|     ,index = layer.tips(tips, this, { | 
|       tips: direction || 1 | 
|       ,time: -1 | 
|       ,success: function(layero, index){ | 
|         if(offset){ | 
|           layero.css('margin-left', offset + 'px'); | 
|         } | 
|       } | 
|     }); | 
|     othis.data('index', index); | 
|   }).on('mouseleave', '*[lay-tips]', function(){ | 
|     layer.close($(this).data('index')); | 
|   }); | 
|    | 
|   //窗口resize事件 | 
|   var resizeSystem = layui.data.resizeSystem = function(){ | 
|     //layer.close(events.note.index); | 
|     layer.closeAll('tips'); | 
|      | 
|     if(!resizeSystem.lock){ | 
|       setTimeout(function(){ | 
|         admin.sideFlexible(admin.screen() < 2 ? '' : 'spread'); | 
|         delete resizeSystem.lock; | 
|       }, 100); | 
|     } | 
|      | 
|     resizeSystem.lock = true; | 
|   } | 
|   $win.on('resize', layui.data.resizeSystem); | 
|    | 
|   //接口输出 | 
|   exports('admin', admin); | 
| }); |