New file |
| | |
| | | /** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */ |
| | | |
| | | layui.define(['layer', 'element', 'admin'], function (exports) { |
| | | var $ = layui.jquery; |
| | | var layer = layui.layer; |
| | | var element = layui.element; |
| | | var admin = layui.admin; |
| | | var setter = admin.setter; |
| | | var headerDOM = '.layui-layout-admin>.layui-header'; |
| | | var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll'; |
| | | var bodyDOM = '.layui-layout-admin>.layui-body'; |
| | | var tabDOM = bodyDOM + '>.layui-tab'; |
| | | var titleDOM = bodyDOM + '>.layui-body-header'; |
| | | var tabFilter = 'admin-pagetabs'; |
| | | var navFilter = 'admin-side-nav'; |
| | | var tabEndCall = {}; // Tab关闭的事件回调 |
| | | var mIsAddTab = false; // 是否是添加Tab,添加Tab的时候切换不自动刷新 |
| | | var index = {homeUrl: undefined, mTabPosition: undefined, mTabList: []}; |
| | | |
| | | /** 渲染主体部分 */ |
| | | index.loadView = function (param) { |
| | | if (!param.menuPath) return layer.msg('url不能为空', {icon: 2, anim: 6}); |
| | | if (setter.pageTabs) { // 多标签模式 |
| | | var flag; // 选项卡是否已添加 |
| | | $(tabDOM + '>.layui-tab-title>li').each(function () { |
| | | if ($(this).attr('lay-id') === param.menuPath) flag = true; |
| | | }); |
| | | if (!flag) { // 添加选项卡 |
| | | if (index.mTabList.length + 1 >= setter.maxTabNum) { |
| | | layer.msg('最多打开' + setter.maxTabNum + '个选项卡', {icon: 2, anim: 6}); |
| | | return admin.activeNav(index.mTabPosition); |
| | | } |
| | | mIsAddTab = true; |
| | | element.tabAdd(tabFilter, { |
| | | id: param.menuPath, title: '<span class="title">' + (param.menuName || '') + '</span>', |
| | | content: '<iframe class="admin-iframe" lay-id="' + param.menuPath + '" src="' + param.menuPath + |
| | | '" onload="layui.index.hideLoading(this);" frameborder="0"></iframe>' |
| | | }); |
| | | admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''}); |
| | | if (param.menuPath !== index.homeUrl) index.mTabList.push(param); // 记录tab |
| | | if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList); // 缓存tab |
| | | } |
| | | if (!param.noChange) element.tabChange(tabFilter, param.menuPath); // 切换到此tab |
| | | } else { // 单标签模式 |
| | | admin.activeNav(param.menuPath); |
| | | var $contentDom = $(bodyDOM + '>div>.admin-iframe'); |
| | | if ($contentDom.length === 0) { |
| | | $(bodyDOM).html([ |
| | | '<div class="layui-body-header">', |
| | | ' <span class="layui-body-header-title"></span>', |
| | | ' <span class="layui-breadcrumb pull-right" lay-filter="admin-body-breadcrumb" style="visibility: visible;"></span>', |
| | | '</div>', |
| | | '<div style="-webkit-overflow-scrolling: touch;">', |
| | | ' <iframe class="admin-iframe" lay-id="', param.menuPath, '" src="', param.menuPath, '"', |
| | | ' onload="layui.index.hideLoading(this);" frameborder="0"></iframe>', |
| | | '</div>'].join('')); |
| | | admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''}); |
| | | } else { |
| | | admin.showLoading({elem: $contentDom.parent(), size: ''}); |
| | | $contentDom.attr('lay-id', param.menuPath).attr('src', param.menuPath); |
| | | } |
| | | $('[lay-filter="admin-body-breadcrumb"]').html(index.getBreadcrumbHtml(param.menuPath)); |
| | | index.mTabList.splice(0, index.mTabList.length); |
| | | if (param.menuPath === index.homeUrl) { |
| | | index.mTabPosition = undefined; |
| | | index.setTabTitle($(param.menuName).text() || $(sideDOM + ' [lay-href="' + index.homeUrl + '"]').text() || '主页'); |
| | | } else { |
| | | index.mTabPosition = param.menuPath; |
| | | index.mTabList.push(param); |
| | | index.setTabTitle(param.menuName); |
| | | } |
| | | if (!setter.cacheTab) return; |
| | | admin.putTempData('indexTabs', index.mTabList); |
| | | admin.putTempData('tabPosition', index.mTabPosition); |
| | | } |
| | | if (admin.getPageWidth() <= 768) admin.flexible(true); // 移动端自动收起侧导航 |
| | | }; |
| | | |
| | | /** 加载主页 */ |
| | | index.loadHome = function (param) { |
| | | var cacheTabs = admin.getTempData('indexTabs'); // 获取缓存tab |
| | | var cachePosition = admin.getTempData('tabPosition'); |
| | | var recover = (param.loadSetting === undefined || param.loadSetting) && (setter.cacheTab && cacheTabs && cacheTabs.length > 0); |
| | | index.homeUrl = param.menuPath; |
| | | param.noChange = cachePosition ? recover : false; |
| | | if (setter.pageTabs || !recover) index.loadView(param); |
| | | if (recover) { // 恢复缓存tab |
| | | for (var i = 0; i < cacheTabs.length; i++) { |
| | | cacheTabs[i].noChange = cacheTabs[i].menuPath !== cachePosition; |
| | | if (!cacheTabs[i].noChange || (setter.pageTabs && !param.onlyLast)) index.loadView(cacheTabs[i]); |
| | | } |
| | | } |
| | | admin.removeLoading(undefined, false); |
| | | }; |
| | | |
| | | /** 打开tab */ |
| | | index.openTab = function (param) { |
| | | if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.openTab(param); |
| | | if (param.end) tabEndCall[param.url] = param.end; |
| | | index.loadView({menuPath: param.url, menuName: param.title}); |
| | | }; |
| | | |
| | | /** 关闭tab */ |
| | | index.closeTab = function (url) { |
| | | if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.closeTab(url); |
| | | element.tabDelete(tabFilter, url); |
| | | }; |
| | | |
| | | /** 设置是否记忆Tab */ |
| | | index.setTabCache = function (isCache) { |
| | | if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabCache(isCache); |
| | | admin.putSetting('cacheTab', isCache); |
| | | if (!isCache) return index.clearTabCache(); |
| | | admin.putTempData('indexTabs', index.mTabList); |
| | | admin.putTempData('tabPosition', index.mTabPosition); |
| | | }; |
| | | |
| | | /** 清除tab记忆 */ |
| | | index.clearTabCache = function () { |
| | | admin.putTempData('indexTabs', null); |
| | | admin.putTempData('tabPosition', null); |
| | | }; |
| | | |
| | | /** 设置tab标题 */ |
| | | index.setTabTitle = function (title, tabId) { |
| | | if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitle(title, tabId); |
| | | if (setter.pageTabs) { |
| | | if (!tabId) tabId = $(tabDOM + '>.layui-tab-title>li.layui-this').attr('lay-id'); |
| | | if (tabId) $(tabDOM + '>.layui-tab-title>li[lay-id="' + tabId + '"] .title').html(title || ''); |
| | | } else if (title) { |
| | | $(titleDOM + '>.layui-body-header-title').html(title); |
| | | $(titleDOM).addClass('show'); |
| | | $(headerDOM).css('box-shadow', '0 1px 0 0 rgba(0, 0, 0, .03)'); |
| | | } else { |
| | | $(titleDOM).removeClass('show'); |
| | | $(headerDOM).css('box-shadow', ''); |
| | | } |
| | | }; |
| | | |
| | | /** 自定义tab标题 */ |
| | | index.setTabTitleHtml = function (html) { |
| | | if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitleHtml(html); |
| | | if (setter.pageTabs) return; |
| | | if (!html) return $(titleDOM).removeClass('show'); |
| | | $(titleDOM).html(html); |
| | | $(titleDOM).addClass('show'); |
| | | }; |
| | | |
| | | /** 获取面包屑 */ |
| | | index.getBreadcrumb = function (tabId) { |
| | | if (!tabId) tabId = $(bodyDOM + '>div>.admin-iframe').attr('lay-id'); |
| | | var breadcrumb = []; |
| | | var $href = $(sideDOM).find('[lay-href="' + tabId + '"]'); |
| | | if ($href.length > 0) breadcrumb.push($href.text().replace(/(^\s*)|(\s*$)/g, '')); |
| | | while (true) { |
| | | $href = $href.parent('dd').parent('dl').prev('a'); |
| | | if ($href.length === 0) break; |
| | | breadcrumb.unshift($href.text().replace(/(^\s*)|(\s*$)/g, '')); |
| | | } |
| | | return breadcrumb; |
| | | }; |
| | | |
| | | /** 获取面包屑结构 */ |
| | | index.getBreadcrumbHtml = function (tabId) { |
| | | var breadcrumb = index.getBreadcrumb(tabId); |
| | | var htmlStr = tabId === index.homeUrl ? '' : ('<a ew-href="' + index.homeUrl + '">首页</a>'); |
| | | for (var i = 0; i < breadcrumb.length - 1; i++) { |
| | | if (htmlStr) htmlStr += '<span lay-separator="">/</span>'; |
| | | htmlStr += ('<a><cite>' + breadcrumb[i] + '</cite></a>'); |
| | | } |
| | | return htmlStr; |
| | | }; |
| | | |
| | | /** 关闭loading */ |
| | | index.hideLoading = function (url) { |
| | | if (typeof url !== 'string') url = $(url).attr('lay-id'); |
| | | admin.removeLoading($('iframe[lay-id="' + url + '"],' + bodyDOM + ' iframe[lay-id]').parent(), false); |
| | | }; |
| | | |
| | | /** 移动设备遮罩层 */ |
| | | var siteShadeDom = '.layui-layout-admin .site-mobile-shade'; |
| | | if ($(siteShadeDom).length === 0) $('.layui-layout-admin').append('<div class="site-mobile-shade"></div>'); |
| | | $(siteShadeDom).click(function () { |
| | | admin.flexible(true); |
| | | }); |
| | | |
| | | /** 补充tab的dom */ |
| | | if (setter.pageTabs && $(tabDOM).length === 0) { |
| | | $(bodyDOM).html([ |
| | | '<div class="layui-tab" lay-allowClose="true" lay-filter="', tabFilter, '" lay-autoRefresh="', setter.tabAutoRefresh == 'true', '">', |
| | | ' <ul class="layui-tab-title"></ul><div class="layui-tab-content"></div>', |
| | | '</div>', |
| | | '<div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>', |
| | | '<div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>', |
| | | '<div class="layui-icon admin-tabs-control layui-icon-down">', |
| | | ' <ul class="layui-nav" lay-filter="admin-pagetabs-nav">', |
| | | ' <li class="layui-nav-item" lay-unselect>', |
| | | ' <dl class="layui-nav-child layui-anim-fadein">', |
| | | ' <dd ew-event="closeThisTabs" lay-unselect><a>关闭当前标签页</a></dd>', |
| | | ' <dd ew-event="closeOtherTabs" lay-unselect><a>关闭其它标签页</a></dd>', |
| | | ' <dd ew-event="closeAllTabs" lay-unselect><a>关闭全部标签页</a></dd>', |
| | | ' </dl>', |
| | | ' </li>', |
| | | ' </ul>', |
| | | '</div>' |
| | | ].join('')); |
| | | element.render('nav', 'admin-pagetabs-nav'); |
| | | } |
| | | |
| | | /** 侧导航点击监听 */ |
| | | element.on('nav(' + navFilter + ')', function (elem) { |
| | | var $that = $(elem); |
| | | var href = $that.attr('lay-href'); |
| | | if (!href || href === '#') return; |
| | | if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))(); |
| | | var name = $that.attr('ew-title') || $that.text().replace(/(^\s*)|(\s*$)/g, ''); |
| | | var end = $that.attr('ew-end'); |
| | | try { |
| | | if (end) end = new Function(end); |
| | | else end = undefined; |
| | | } catch (e) { |
| | | console.error(e); |
| | | } |
| | | index.openTab({url: href, title: name, end: end}); |
| | | layui.event.call(this, 'admin', 'side({*})', {href: href}); |
| | | }); |
| | | |
| | | /** tab切换监听 */ |
| | | element.on('tab(' + tabFilter + ')', function () { |
| | | var layId = $(this).attr('lay-id'); |
| | | index.mTabPosition = (layId !== index.homeUrl ? layId : undefined); // 记录当前Tab位置 |
| | | if (setter.cacheTab) admin.putTempData('tabPosition', index.mTabPosition); |
| | | admin.activeNav(layId); |
| | | admin.rollPage('auto'); |
| | | if ($(tabDOM).attr('lay-autoRefresh') == 'true' && !mIsAddTab) admin.refresh(layId, true); // 切换tab刷新 |
| | | mIsAddTab = false; |
| | | layui.event.call(this, 'admin', 'tab({*})', {layId: layId}); |
| | | }); |
| | | |
| | | /** tab删除监听 */ |
| | | element.on('tabDelete(' + tabFilter + ')', function (data) { |
| | | var mTab = index.mTabList[data.index - 1]; |
| | | if (mTab) { |
| | | index.mTabList.splice(data.index - 1, 1); |
| | | if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList); |
| | | tabEndCall[mTab.menuPath] && tabEndCall[mTab.menuPath].call(); |
| | | layui.event.call(this, 'admin', 'tabDelete({*})', {layId: mTab.menuPath}); |
| | | } |
| | | if ($(tabDOM + '>.layui-tab-title>li.layui-this').length === 0) |
| | | $(tabDOM + '>.layui-tab-title>li:last').trigger('click'); // 解决删除后可能无选中bug |
| | | }); |
| | | |
| | | /** 多系统切换事件 */ |
| | | $(document).off('click.navMore').on('click.navMore', '[nav-bind]', function () { |
| | | var navId = $(this).attr('nav-bind'); |
| | | $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide'); |
| | | $('ul[nav-id="' + navId + '"]').removeClass('layui-hide'); |
| | | $(headerDOM + '>.layui-nav .layui-nav-item').removeClass('layui-this'); |
| | | $(this).parent('.layui-nav-item').addClass('layui-this'); |
| | | if (admin.getPageWidth() <= 768) admin.flexible(false); // 展开侧边栏 |
| | | layui.event.call(this, 'admin', 'nav({*})', {navId: navId}); |
| | | }); |
| | | |
| | | /** 开启Tab右键菜单 */ |
| | | if (setter.openTabCtxMenu && setter.pageTabs) { |
| | | layui.use('contextMenu', function () { |
| | | if (!layui.contextMenu) return; |
| | | $(tabDOM + '>.layui-tab-title').off('contextmenu.tab').on('contextmenu.tab', 'li', function (e) { |
| | | var layId = $(this).attr('lay-id'); |
| | | layui.contextMenu.show([{ |
| | | icon: 'layui-icon layui-icon-refresh', |
| | | name: '刷新当前', |
| | | click: function () { |
| | | element.tabChange(tabFilter, layId); |
| | | if ('true' != $(tabDOM).attr('lay-autoRefresh')) admin.refresh(layId); |
| | | } |
| | | }, { |
| | | icon: 'layui-icon layui-icon-close-fill ctx-ic-lg', |
| | | name: '关闭当前', |
| | | click: function () { |
| | | admin.closeThisTabs(layId); |
| | | } |
| | | }, { |
| | | icon: 'layui-icon layui-icon-unlink', |
| | | name: '关闭其他', |
| | | click: function () { |
| | | admin.closeOtherTabs(layId); |
| | | } |
| | | }, { |
| | | icon: 'layui-icon layui-icon-close ctx-ic-lg', |
| | | name: '关闭全部', |
| | | click: function () { |
| | | admin.closeAllTabs(); |
| | | } |
| | | }], e.clientX, e.clientY); |
| | | return false; |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | exports('index', index); |
| | | }); |