diff --git a/src/plugin/admin/public/component/pear/module/tab.js b/src/plugin/admin/public/component/pear/module/tab.js index 4284f45d..77d75244 100644 --- a/src/plugin/admin/public/component/pear/module/tab.js +++ b/src/plugin/admin/public/component/pear/module/tab.js @@ -1,663 +1,677 @@ -layui.define(['jquery', 'element'], function(exports) { - "use strict"; - - var MOD_NAME = 'tab', - $ = layui.jquery, - element = layui.element; - - var pearTab = function(opt) { - this.option = opt; - }; - - var tabData = new Array(); - var tabDataCurrent = 0; - var contextTabDOM; - - pearTab.prototype.render = function(opt) { - - var option = { - elem: opt.elem, - data: opt.data, - tool: opt.tool, - roll: opt.roll, - index: opt.index, - width: opt.width, - height: opt.height, - tabMax: opt.tabMax, - session: opt.session ? opt.session : false, - preload: opt.preload ? opt.preload : false, - closeEvent: opt.closeEvent, - success: opt.success ? opt.success : function(id) {} - } - - if (option.session) { - if (sessionStorage.getItem(option.elem + "-pear-tab-data") != null) { - tabData = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); - option.data = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(option.elem + "-pear-tab-data-current"); - tabData.forEach(function(item, index) { - if (item.id == tabDataCurrent) { - option.index = index; - } - }) - } else { - tabData = opt.data; - } - } - - var lastIndex; - var tab = createTab(option); - $("#" + option.elem).html(tab); - $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function() { - rollPage("left", option); - }) - $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function() { - rollPage("right", option); - }) - element.init(); - toolEvent(option); - $("#" + option.elem).width(opt.width); - $("#" + option.elem).height(opt.height); - $("#" + option.elem).css({ - position: "relative" - }); - closeEvent(option); - - option.success(sessionStorage.getItem(option.elem + "-pear-tab-data-current")); - - $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li", - function(e) { - // 获取当前元素位置 - var top = e.clientY; - var left = e.clientX; - var menuWidth = 100; - var currentId = $(this).attr("lay-id"); - var menu = ""; - - contextTabDOM = $(this); - var isOutsideBounds = (left + menuWidth) > $(window).width(); - if (isOutsideBounds) { - left = $(window).width() - menuWidth; - } - // 初始化 - layer.open({ - type: 1, - title: false, - shade: false, - skin: 'pear-tab-menu', - closeBtn: false, - area: [menuWidth + 'px', '108px'], - fixed: true, - anim: false, - isOutAnim: false, - offset: [top, left], - content: menu, //iframe的url, - success: function(layero, index) { - layer.close(lastIndex); - lastIndex = index; - menuEvent(option, index); - var timer; - $(layero).on('mouseout', function() { - timer = setTimeout(function() { - layer.close(index); - }, 30) - }); - - $(layero).on('mouseover', function() { - clearTimeout(timer); - }); - - // 清除 item 右击 - $(layero).on('contextmenu', function() { - return false; - }) - - } - }); - return false; - }) - - mousewheelAndTouchmoveHandler(option) - return new pearTab(option); - } - - pearTab.prototype.click = function(callback) { - var elem = this.option.elem; - var option = this.option; - element.on('tab(' + this.option.elem + ')', function(data) { - var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id"); - sessionStorage.setItem(option.elem + "-pear-tab-data-current", id); - if (!option.preload) { - var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find( - "iframe[id='" + id + "']"); - var iframeUrl = $iframe.attr("src"); - if (!iframeUrl || iframeUrl === "about:blank") { - // 获取 url 并重载 - tabData.forEach(function(item, index) { - if (item.id === id) { - iframeUrl = item.url; - } - }) - tabIframeLoading(elem); - $iframe.attr("src", iframeUrl); - } - } - callback(id); - }); - } - - pearTab.prototype.positionTab = function() { - var $tabTitle = $('.layui-tab[lay-filter=' + this.option.elem + '] .layui-tab-title'); - var autoLeft = 0; - $tabTitle.children("li").each(function() { - if ($(this).hasClass('layui-this')) { - return false; - } else { - autoLeft += $(this).outerWidth(); - } - }); - $tabTitle.animate({ - scrollLeft: autoLeft - $tabTitle.width() / 3 - }, 200); - } - - pearTab.prototype.clear = function() { - sessionStorage.removeItem(this.option.elem + "-pear-tab-data"); - sessionStorage.removeItem(this.option.elem + "-pear-tab-data-current"); - } - - pearTab.prototype.addTab = function(opt) { - var title = ''; - if (opt.close) { - title += '' + opt.title + - ''; - } else { - title += '' + opt.title + - ''; - } - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - } else { - var isData = false; - $.each($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]"), function() { - if ($(this).attr("lay-id") == opt.id) { - isData = true; - } - }) - - if (isData == false) { - element.tabAdd(elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - - } - } - sessionStorage.setItem(elem + "-pear-tab-data-current", opt.id); - element.tabChange(elem, opt.id); - } - - /** 添 加 唯 一 选 项 卡 */ - pearTab.prototype.addTabOnly = function(opt, time) { - var title = ''; - if (opt.close) { - title += '' + opt.title + - ''; - } else { - title += '' + opt.title + - ''; - } - if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= - 0) { - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); - } else { - var isData = false; - $.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"), - function() { - if ($(this).attr("lay-id") == opt.id) { - isData = true; - } - }) - if (isData == false) { - - if (this.option.tabMax != false) { - if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]") - .length >= this.option.tabMax) { - layer.msg("最多打开" + this.option.tabMax + "个标签页", { - icon: 2, - time: 1000, - shift: 6 - }); - return false; - } - } - - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); - } - } - element.tabChange(this.option.elem, opt.id); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); - } - - // 刷 新 指 定 的 选 项 卡 - pearTab.prototype.refresh = function(time) { - // 刷 新 指 定 的 选 项 卡 - var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show") - .find("iframe"); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem); - } - $iframe.attr("src", $iframe.attr("src")); - } - - function tabIframeLoading(elem, id) { - var load = '
' + - '
' + - '' + - '
' + - '
' - var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content .layui-show").find("iframe"); - if (id) { - $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find("iframe[id='" + id + - "']"); - } - $iframe.parent().append(load); - var pearLoad = $("#" + elem).find("#pear-tab-loading" + index); - pearLoad.css({ - display: "block" - }); - index++; - $iframe.on("load", function() { - pearLoad.fadeOut(1000, function() { - pearLoad.remove(); - }); - }) - } - - function tabDelete(elem, id, callback, option) { - //根据 elem id 来删除指定的 layui title li - var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title"); - - // 删除指定 id 的 title - var removeTab = tabTitle.find("li[lay-id='" + id + "']"); - var nextNode = removeTab.next("li"); - if (!removeTab.hasClass("layui-this")) { - removeTab.remove(); - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']") - .parent(); - tabContent.remove(); - - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); - tabData = tabData.filter(function(item) { - return item.id != id; - }) - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - return false; - } - - var currId; - if (nextNode.length) { - nextNode.addClass("layui-this"); - currId = nextNode.attr("lay-id"); - $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); - } else { - var prevNode = removeTab.prev("li"); - prevNode.addClass("layui-this"); - currId = prevNode.attr("lay-id"); - $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); - } - callback(currId); - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); - tabData = tabData.filter(function(item) { - return item.id != id; - }) - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(elem + "-pear-tab-data-current", currId); - - removeTab.remove(); - // 删除 content - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent(); - // 删除 - tabContent.remove(); - } - - function createTab(option) { - - var type = ""; - var types = option.type + " "; - if (option.roll == true) { - type = "layui-tab-roll"; - } - if (option.tool != false) { - type = "layui-tab-tool"; - } - if (option.roll == true && option.tool != false) { - type = "layui-tab-rollTool"; - } - var tab = '
'; - var title = '
'; - - tab += title; - tab += control; - tab += content; - tab += ''; - tab += '' - return tab; - } - - function rollPage(d, option) { - var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); - var left = $tabTitle.scrollLeft(); - if ('left' === d) { - $tabTitle.animate({ - scrollLeft: left - 450 - }, 200); - } else { - $tabTitle.animate({ - scrollLeft: left + 450 - }, 200); - } - } - - function closeEvent(option) { - $(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function() { - var layid = $(this).parent().attr("lay-id"); - tabDelete(option.elem, layid, option.closeEvent, option); - }) - } - - function menuEvent(option, index) { - - $("#" + option.elem + "closeThis").click(function() { - var currentTab = contextTabDOM; - - if (currentTab.find("span").is(".able-close")) { - var currentId = currentTab.attr("lay-id"); - tabDelete(option.elem, currentId, option.closeEvent, option); - } else { - layer.msg("当前页面不允许关闭", { - icon: 3, - time: 800 - }) - } - layer.close(index); - }) - - $("#" + option.elem + "closeOther").click(function() { - var currentId = contextTabDOM.attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).attr("lay-id") != currentId) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, - option); - } - } - }) - layer.close(index); - }) - - $("#" + option.elem + "closeAll").click(function() { - var currentId = contextTabDOM.attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); - } - }) - layer.close(index); - }) - } - - function toolEvent(option) { - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeThis", function() { - var currentTab = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this"); - if (currentTab.find("span").is(".able-close")) { - var currentId = currentTab.attr("lay-id"); - tabDelete(option.elem, currentId, option.closeEvent, option); - } else { - layer.msg("当前页面不允许关闭", { - icon: 3, - time: 800 - }) - } - }) - - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeOther", function() { - var currentId = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this").attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).attr("lay-id") != currentId) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, - option); - } - } - }) - }) - - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeAll", function() { - var currentId = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this").attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); - } - }) - }) - } - - function mousewheelAndTouchmoveHandler(option) { - var $bodyTab = $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title") - var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); - var mouseScrollStep = 100 - // 鼠标滚轮 - $bodyTab.on("mousewheel DOMMouseScroll", function(e) { - e.originalEvent.preventDefault() - var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? "top" : - "down")) || // chrome & ie - (e.originalEvent.detail && (e.originalEvent.detail > 0 ? "down" : "top")); // firefox - var scrollLeft = $tabTitle.scrollLeft(); - - if (delta === "top") { - scrollLeft -= mouseScrollStep - } else if (delta === "down") { - scrollLeft += mouseScrollStep - } - $tabTitle.scrollLeft(scrollLeft) - }); - - // 触摸移动 - var touchX = 0; - $bodyTab.on("touchstart", function(e) { - var touch = e.originalEvent.targetTouches[0]; - touchX = touch.pageX - }) - $bodyTab.on("touchmove", function(e) { - var event = e.originalEvent; - if (event.targetTouches.length > 1) return; - event.preventDefault(); - var touch = event.targetTouches[0]; - var distanceX = touchX - touch.pageX - var scrollLeft = $tabTitle.scrollLeft(); - touchX = touch.pageX - $tabTitle.scrollLeft(scrollLeft += distanceX) - }); - } - - exports(MOD_NAME, new pearTab()); -}) +layui.define(['jquery', 'element'], function (exports) { + "use strict"; + + var MOD_NAME = 'tab', + $ = layui.jquery, + element = layui.element; + + var pearTab = function (opt) { + this.option = opt; + }; + + var tabData = []; + var tabDataCurrent = 0; + var contextTabDOM; + + pearTab.prototype.render = function (opt) { + + var option = { + elem: opt.elem, + data: opt.data, + tool: opt.tool, + roll: opt.roll, + index: opt.index, + width: opt.width, + height: opt.height, + tabMax: opt.tabMax, + session: opt.session ? opt.session : false, + preload: opt.preload ? opt.preload : false, + closeEvent: opt.closeEvent, + success: opt.success ? opt.success : function (id) { + }, + } + + if (option.session) { + if (sessionStorage.getItem(option.elem + "-pear-tab-data") != null) { + tabData = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); + option.data = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); + tabDataCurrent = sessionStorage.getItem(option.elem + "-pear-tab-data-current"); + tabData.forEach(function (item, index) { + if (item.id == tabDataCurrent) { + option.index = index; + } + }) + } else { + tabData = opt.data; + } + } + + var lastIndex; + var tab = createTab(option); + $("#" + option.elem).html(tab); + $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function () { + rollPage("left", option); + }) + $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function () { + rollPage("right", option); + }) + element.init(); + toolEvent(option); + $("#" + option.elem).width(opt.width); + $("#" + option.elem).height(opt.height); + $("#" + option.elem).css({ + position: "relative", + }); + closeEvent(option); + + option.success(sessionStorage.getItem(option.elem + "-pear-tab-data-current")); + + $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li", + function (e) { + // 获取当前元素位置 + var top = e.clientY; + var left = e.clientX; + var menuWidth = 100; + // var currentId = $(this).attr("lay-id"); + var menu = ""; + + contextTabDOM = $(this); + var isOutsideBounds = (left + menuWidth) > $(window).width(); + if (isOutsideBounds) { + left = $(window).width() - menuWidth; + } + // 初始化 + layer.open({ + type: 1, + title: false, + shade: false, + skin: 'pear-tab-menu', + closeBtn: false, + area: [menuWidth + 'px', '108px'], + fixed: true, + anim: false, + isOutAnim: false, + offset: [top, left], + content: menu, //iframe的url, + success: function (layero, index) { + layer.close(lastIndex); + lastIndex = index; + menuEvent(option, index); + var timer; + $(layero).on('mouseout', function () { + timer = setTimeout(function () { + layer.close(index); + }, 30) + }); + + $(layero).on('mouseover', function () { + clearTimeout(timer); + }); + + // 清除 item 右击 + $(layero).on('contextmenu', function () { + return false; + }) + + }, + }); + return false; + }) + + mousewheelAndTouchmoveHandler(option); + return new pearTab(option); + } + + // 获取当前选项卡选项 + var getCurrentTabItem = function (elem) { + return $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this"); + } + + // 加载空 iframe + var loadBlankIframe = function (elem, id) { + if (id === undefined) { + id = getCurrentTabItem(elem).attr("lay-id"); + } + var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find("iframe[id='" + id + "']"); + var iframeUrl = $iframe.attr("src"); + if (!iframeUrl || iframeUrl === "about:blank") { + // 获取 url 并重载 + tabData.forEach(function (item) { + if (item.id === id) { + iframeUrl = item.url; + } + }); + tabIframeLoading(elem); + $iframe.attr("src", iframeUrl); + } + } + + pearTab.prototype.click = function (callback) { + var elem = this.option.elem; + var option = this.option; + element.on('tab(' + this.option.elem + ')', function (data) { + var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id"); + sessionStorage.setItem(option.elem + "-pear-tab-data-current", id); + if (!option.preload) { + loadBlankIframe(elem, id); + } + callback(id); + }); + } + + pearTab.prototype.positionTab = function () { + var $tabTitle = $('.layui-tab[lay-filter=' + this.option.elem + '] .layui-tab-title'); + var autoLeft = 0; + $tabTitle.children("li").each(function () { + if ($(this).hasClass('layui-this')) { + return false; + } else { + autoLeft += $(this).outerWidth(); + } + }); + $tabTitle.animate({ + scrollLeft: autoLeft - $tabTitle.width() / 3, + }, 200); + } + + pearTab.prototype.clear = function () { + sessionStorage.removeItem(this.option.elem + "-pear-tab-data"); + sessionStorage.removeItem(this.option.elem + "-pear-tab-data-current"); + } + + pearTab.prototype.addTab = function (opt) { + var title = ''; + if (opt.close) { + title += '' + opt.title + + ''; + } else { + title += '' + opt.title + + ''; + } + element.tabAdd(this.option.elem, { + title: title, + content: '', + id: opt.id, + }); + if (time != false && time != 0) { + tabIframeLoading(elem, opt.id); + } + tabData.push(opt); + sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + } else { + var isData = false; + $.each($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]"), function () { + if ($(this).attr("lay-id") == opt.id) { + isData = true; + } + }) + + if (isData == false) { + element.tabAdd(elem, { + title: title, + content: '', + id: opt.id, + }); + if (time != false && time != 0) { + tabIframeLoading(this.option.elem, opt.id); + } + tabData.push(opt); + sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + + } + } + sessionStorage.setItem(elem + "-pear-tab-data-current", opt.id); + element.tabChange(elem, opt.id); + } + + /** 添 加 唯 一 选 项 卡 */ + pearTab.prototype.addTabOnly = function (opt, time) { + var title = ''; + if (opt.close) { + title += '' + opt.title + + ''; + } else { + title += '' + opt.title + + ''; + } + if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= + 0) { + element.tabAdd(this.option.elem, { + title: title, + content: '', + id: opt.id, + }); + if (time != false && time != 0) { + tabIframeLoading(this.option.elem, opt.id); + } + tabData.push(opt); + sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); + } else { + var isData = false; + $.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"), + function () { + if ($(this).attr("lay-id") == opt.id) { + isData = true; + } + }) + if (isData == false) { + + if (this.option.tabMax != false) { + if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]") + .length >= this.option.tabMax) { + layer.msg("最多打开" + this.option.tabMax + "个标签页", { + icon: 2, + time: 1000, + shift: 6, + }); + return false; + } + } + + element.tabAdd(this.option.elem, { + title: title, + content: '', + id: opt.id, + }); + if (time != false && time != 0) { + tabIframeLoading(this.option.elem, opt.id); + } + tabData.push(opt); + sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); + } + } + element.tabChange(this.option.elem, opt.id); + sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); + } + + // 刷 新 指 定 的 选 项 卡 + pearTab.prototype.refresh = function (time) { + // 刷 新 指 定 的 选 项 卡 + var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show") + .find("iframe"); + if (time != false && time != 0) { + tabIframeLoading(this.option.elem); + } + $iframe.attr("src", $iframe.attr("src")); + } + + function tabIframeLoading(elem, id) { + var load = '
' + + '
' + + '' + + '
' + + '
' + var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content .layui-show").find("iframe"); + if (id) { + $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find("iframe[id='" + id + + "']"); + } + $iframe.parent().append(load); + var pearLoad = $("#" + elem).find("#pear-tab-loading" + index); + pearLoad.css({ + display: "block", + }); + index++; + $iframe.on("load", function () { + pearLoad.fadeOut(1000, function () { + pearLoad.remove(); + }); + }) + } + + function tabDelete(elem, id, callback, option) { + // 根据 elem id 来删除指定的 layui title li + var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title"); + + // 删除指定 id 的 title + var removeTab = tabTitle.find("li[lay-id='" + id + "']"); + var nextNode = removeTab.next("li"); + if (!removeTab.hasClass("layui-this")) { + removeTab.remove(); + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']") + .parent(); + tabContent.remove(); + + tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); + tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); + tabData = tabData.filter(function (item) { + return item.id != id; + }) + sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + return false; + } + + var currId; + if (nextNode.length) { + nextNode.addClass("layui-this"); + currId = nextNode.attr("lay-id"); + $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); + } else { + var prevNode = removeTab.prev("li"); + prevNode.addClass("layui-this"); + currId = prevNode.attr("lay-id"); + $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); + } + callback(currId); + tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); + tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); + tabData = tabData.filter(function (item) { + return item.id != id; + }) + sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(elem + "-pear-tab-data-current", currId); + + removeTab.remove(); + // 删除 content + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent(); + // 删除 + tabContent.remove(); + } + + function createTab(option) { + var type = ""; + var types = option.type + " "; + if (option.roll == true) { + type = "layui-tab-roll"; + } + if (option.tool != false) { + type = "layui-tab-tool"; + } + if (option.roll == true && option.tool != false) { + type = "layui-tab-rollTool"; + } + var tab = '
'; + var title = '
'; + + tab += title; + tab += control; + tab += content; + tab += ''; + tab += '' + return tab; + } + + function rollPage(d, option) { + var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); + var left = $tabTitle.scrollLeft(); + if ('left' === d) { + $tabTitle.animate({ + scrollLeft: left - 450, + }, 200); + } else { + $tabTitle.animate({ + scrollLeft: left + 450, + }, 200); + } + } + + function closeEvent(option) { + $(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function () { + var layid = $(this).parent().attr("lay-id"); + tabDelete(option.elem, layid, option.closeEvent, option); + loadBlankIframe(option.elem); + }) + } + + function menuEvent(option, index) { + $("#" + option.elem + "closeThis").click(function () { + var currentTab = contextTabDOM; + if (currentTab.find("span").is(".able-close")) { + var currentId = currentTab.attr("lay-id"); + tabDelete(option.elem, currentId, option.closeEvent, option); + loadBlankIframe(option.elem); + } else { + layer.msg("当前页面不允许关闭", { + icon: 3, + time: 800, + }) + } + layer.close(index); + }) + + $("#" + option.elem + "closeOther").click(function () { + var currentId = contextTabDOM.attr("lay-id"); + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).attr("lay-id") != currentId) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, + option); + } + } + }) + layer.close(index); + loadBlankIframe(option.elem); + }) + + $("#" + option.elem + "closeAll").click(function () { + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); + } + }) + layer.close(index); + loadBlankIframe(option.elem); + }) + } + + function toolEvent(option) { + $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeThis", function () { + var currentTab = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title .layui-this"); + if (currentTab.find("span").is(".able-close")) { + var currentId = currentTab.attr("lay-id"); + tabDelete(option.elem, currentId, option.closeEvent, option); + loadBlankIframe(option.elem); + } else { + layer.msg("当前页面不允许关闭", { + icon: 3, + time: 800, + }) + } + }) + + $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeOther", function () { + var currentId = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title .layui-this").attr("lay-id"); + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).attr("lay-id") != currentId) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, + option); + } + } + }); + loadBlankIframe(option.elem); + }) + + $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeAll", function () { + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); + } + }) + loadBlankIframe(option.elem); + }) + } + + function mousewheelAndTouchmoveHandler(option) { + var $bodyTab = $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title") + var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); + var mouseScrollStep = 100 + // 鼠标滚轮 + $bodyTab.on("mousewheel DOMMouseScroll", function (e) { + e.originalEvent.preventDefault() + var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? "top" : "down")) || // chrome & ie + (e.originalEvent.detail && (e.originalEvent.detail > 0 ? "down" : "top")); // firefox + var scrollLeft = $tabTitle.scrollLeft(); + + if (delta === "top") { + scrollLeft -= mouseScrollStep + } else if (delta === "down") { + scrollLeft += mouseScrollStep + } + $tabTitle.scrollLeft(scrollLeft) + }); + + // 触摸移动 + var touchX = 0; + $bodyTab.on("touchstart", function (e) { + var touch = e.originalEvent.targetTouches[0]; + touchX = touch.pageX + }) + $bodyTab.on("touchmove", function (e) { + var event = e.originalEvent; + if (event.targetTouches.length > 1) return; + event.preventDefault(); + var touch = event.targetTouches[0]; + var distanceX = touchX - touch.pageX + var scrollLeft = $tabTitle.scrollLeft(); + touchX = touch.pageX + $tabTitle.scrollLeft(scrollLeft += distanceX) + }); + } + + exports(MOD_NAME, new pearTab()); +});