var tabFilter, menu = [], liIndex, curNav, delMenu; layui.define(["element", "jquery"], function (exports) { var element = layui.element, $ = layui.jquery, layId, Tab = function () { this.tabConfig = { closed: true, openTabNum: 100, tabFilter: "bodyTab" } }; //获取二级菜单数据 Tab.prototype.render = function () { var _this = this; $.ajax({ url: 'mainMenu?sysId=' + location.searchObj().sysId, data: { requestMode: 0 }, async: false, success: function (res) { //layer.closeAll('loading'); //关闭加载层 if (!(res.retHead.errCode - 0)) { navs = res.retBody.list; if (!navs) { return; } //显示左侧菜单 if ($(".navBar").html() == '') { $(".navBar").html(navBar(navs)).height($(window).height() - 60); element.init(); //初始化页面元素 $(window).resize(function () { $(".navBar").height($(window).height() - 60); }) } } else if ((res.retHead.errCode - 0) == 1004) { top.location.href = window.hywa.jumpPage.login; } } }); } //参数设置 Tab.prototype.set = function (option) { var _this = this; $.extend(true, _this.tabConfig, option); return _this; }; //通过title获取lay-id Tab.prototype.getLayId = function (title) { $(".layui-tab-title.top_tab li").each(function () { if ($(this).find("cite").text() == title) { layId = $(this).attr("lay-id"); } }) return layId; } //通过title判断tab是否存在 Tab.prototype.hasTab = function (title) { var tabIndex = -1; $(".layui-tab-title.top_tab li").each(function () { if ($(this).find("cite").text() == title) { tabIndex = 1; } }) return tabIndex; } //右侧内容tab操作 var tabIdIndex = 0; Tab.prototype.tabAdd = function (_this) { if (window.sessionStorage.getItem("menu")) { menu = JSON.parse(window.sessionStorage.getItem("menu")); } var that = this; var closed = that.tabConfig.closed, openTabNum = that.tabConfig.openTabNum; tabFilter = that.tabConfig.tabFilter; if (_this.find("i.iconfont,i.layui-icon").attr("data-icon") != undefined) { var title = ''; if (that.hasTab(_this.find("cite").text()) == -1 && _this.siblings("dl.layui-nav-child").length == 0) { if ($(".layui-tab-title.top_tab li").length == openTabNum) { layer.msg('只能同时打开' + openTabNum + '个选项卡哦。不然系统会卡的!'); return; } tabIdIndex++; title += '<cite>' + _this.find("cite").text() + '</cite>'; title += '<i class="layui-icon layui-unselect layui-tab-close" data-id="' + tabIdIndex + '">ဆ</i>'; element.tabAdd(tabFilter, { title: title, content: "<iframe src='views/" + _this.attr("data-url") + "' data-id='" + tabIdIndex + "'></frame>", id: new Date().getTime() }) //当前窗口内容 var curmenu = { "icon": _this.find("i.iconfont").attr("data-icon") != undefined ? _this.find( "i.iconfont").attr("data-icon") : _this.find("i.layui-icon").attr( "data-icon"), "title": _this.find("cite").text(), "href": _this.attr("data-url"), "layId": new Date().getTime() } menu.push(curmenu); window.sessionStorage.setItem("menu", JSON.stringify(menu)); //打开的窗口 window.sessionStorage.setItem("curmenu", JSON.stringify(curmenu)); //当前的窗口 element.tabChange(tabFilter, that.getLayId(_this.find("cite").text())); that.tabMove(); //顶部窗口是否可滚动 } else { //当前窗口内容 var curmenu = { "icon": _this.find("i.iconfont").attr("data-icon") != undefined ? _this.find( "i.iconfont").attr("data-icon") : _this.find("i.layui-icon").attr( "data-icon"), "title": _this.find("cite").text(), "href": _this.attr("data-url"), "layId": new Date().getTime() } window.sessionStorage.setItem("curmenu", JSON.stringify(curmenu)); //当前的窗口 element.tabChange(tabFilter, that.getLayId(_this.find("cite").text())); that.tabMove(); //顶部窗口是否可滚动 } } } //顶部窗口移动 Tab.prototype.tabMove = function () { $(window).on("resize", function () { var topTabsBox = $("#top_tabs_box"), topTabsBoxWidth = $("#top_tabs_box").width(), topTabs = $("#top_tabs"), topTabsWidth = $("#top_tabs").width(), tabLi = topTabs.find("li.layui-this"), top_tabs = document.getElementById("top_tabs");; if (topTabsWidth > topTabsBoxWidth) { if (tabLi.position().left > topTabsBoxWidth || tabLi.position().left + topTabsBoxWidth > topTabsWidth) { topTabs.css("left", topTabsBoxWidth - topTabsWidth); } else { topTabs.css("left", -tabLi.position().left); } //拖动效果 var flag = false; var cur = { x: 0, y: 0 } var nx, dx, x; function down() { flag = true; var touch; if (event.touches) { touch = event.touches[0]; } else { touch = event; } cur.x = touch.clientX; dx = top_tabs.offsetLeft; } function move() { var self = this; window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); if (flag) { var touch; if (event.touches) { touch = event.touches[0]; } else { touch = event; } nx = touch.clientX - cur.x; x = dx + nx; if (x > 0) { x = 0; } else { if (x < topTabsBoxWidth - topTabsWidth) { x = topTabsBoxWidth - topTabsWidth; } else { x = dx + nx; } } top_tabs.style.left = x + "px"; //阻止页面的滑动默认事件 document.addEventListener("touchmove", function () { event.preventDefault(); }, false); } } //鼠标释放时候的函数 function end() { flag = false; } //pc端拖动效果 topTabs.on("mousedown", down); topTabs.on("mousemove", move); $(document).on("mouseup", end); //移动端拖动效果 topTabs.on("touchstart", down); topTabs.on("touchmove", move); topTabs.on("touchend", end); } else { //移除pc端拖动效果 topTabs.off("mousedown", down); topTabs.off("mousemove", move); topTabs.off("mouseup", end); //移除移动端拖动效果 topTabs.off("touchstart", down); topTabs.off("touchmove", move); topTabs.off("touchend", end); topTabs.removeAttr("style"); return false; } }).resize(); } $("body").on("click", ".top_tab li", function () { //切换后获取当前窗口的内容 var curmenu = ''; var menu = JSON.parse(window.sessionStorage.getItem("menu")); curmenu = menu[$(this).index() - 1]; if ($(this).index() == 0) { window.sessionStorage.setItem("curmenu", ''); } else { window.sessionStorage.setItem("curmenu", JSON.stringify(curmenu)); if (window.sessionStorage.getItem("curmenu") == "undefined") { //如果删除的不是当前选中的tab,则将curmenu设置成当前选中的tab if (curNav != JSON.stringify(delMenu)) { window.sessionStorage.setItem("curmenu", curNav); } else { window.sessionStorage.setItem("curmenu", JSON.stringify(menu[liIndex - 1])); } } } element.tabChange(tabFilter, $(this).attr("lay-id")).init(); }) //删除tab $("body").on("click", ".top_tab li i.layui-tab-close", function () { //删除tab后重置session中的menu和curmenu liIndex = $(this).parent("li").index(); var menu = JSON.parse(window.sessionStorage.getItem("menu")); //获取被删除元素 delMenu = menu[liIndex - 1]; var curmenu = window.sessionStorage.getItem("curmenu") == "undefined" ? "undefined" : window.sessionStorage .getItem("curmenu") == "" ? '' : JSON.parse(window.sessionStorage.getItem("curmenu")); if (JSON.stringify(curmenu) != JSON.stringify(menu[liIndex - 1])) { //如果删除的不是当前选中的tab // window.sessionStorage.setItem("curmenu",JSON.stringify(curmenu)); curNav = JSON.stringify(curmenu); } else { if ($(this).parent("li").length > liIndex) { window.sessionStorage.setItem("curmenu", curmenu); curNav = curmenu; } else { window.sessionStorage.setItem("curmenu", JSON.stringify(menu[liIndex - 1])); curNav = JSON.stringify(menu[liIndex - 1]); } } menu.splice((liIndex - 1), 1); window.sessionStorage.setItem("menu", JSON.stringify(menu)); element.tabDelete("bodyTab", $(this).parent("li").attr("lay-id")).init(); }) var bodyTab = new Tab(); exports("bodyTab", function (option) { return bodyTab.set(option); }); })