123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- 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);
- });
- })
|