From 68bd753f1b77f39c1dd5609620ce29f9b8b412b5 Mon Sep 17 00:00:00 2001
From: fei.wang <wf18701153496@163.com>
Date: 星期一, 13 五月 2024 17:52:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/webapp/js/miniTab.js |  582 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 582 insertions(+), 0 deletions(-)

diff --git a/src/webapp/js/miniTab.js b/src/webapp/js/miniTab.js
new file mode 100644
index 0000000..fd9895f
--- /dev/null
+++ b/src/webapp/js/miniTab.js
@@ -0,0 +1,582 @@
+/**
+ * date:2020/02/27
+ * author:Mr.Chung
+ * version:2.0
+ * description:layuimini tab妗嗘灦鎵╁睍
+ */
+layui.define(["element", "layer", "jquery"], function (exports) {
+    var element = layui.element,
+        layer = layui.layer,
+        $ = layui.$;
+
+
+    var miniTab = {
+
+        /**
+         * 鍒濆鍖杢ab
+         * @param options
+         */
+        render: function (options) {
+            options.filter = options.filter || null;
+            options.multiModule = options.multiModule || false;
+            options.urlHashLocation = options.urlHashLocation || false;
+            options.maxTabNum = options.maxTabNum || 20;
+            options.menuList = options.menuList || [];  // todo 鍚庢湡鑿滃崟鎯虫敼涓轰笉鎿嶄綔dom, 鑰屾槸鐩存帴鎿嶄綔鍒濆鍖栦紶杩囨潵鐨勬暟鎹�
+            options.homeInfo = options.homeInfo || {};
+            options.listenSwichCallback = options.listenSwichCallback || function () {
+            };
+            miniTab.listen(options);
+            miniTab.listenRoll();
+            miniTab.listenSwitch(options);
+            miniTab.listenHash(options);
+        },
+
+        /**
+         * 鏂板缓tab绐楀彛
+         * @param options.tabId
+         * @param options.href
+         * @param options.title
+         * @param options.isIframe
+         * @param options.maxTabNum
+         */
+        create: function (options) {
+            options.tabId = options.tabId || null;
+            options.href = options.href || null;
+            options.title = options.title || null;
+            options.isIframe = options.isIframe || false;
+            options.maxTabNum = options.maxTabNum || 20;
+            if ($(".layuimini-tab .layui-tab-title li").length >= options.maxTabNum) {
+                layer.msg('Tab绐楀彛宸茶揪鍒伴檺瀹氭暟閲忥紝璇峰厛鍏抽棴閮ㄥ垎Tab');
+                return false;
+            }
+            var ele = element;
+            if (options.isIframe) ele = parent.layui.element;
+            ele.tabAdd('layuiminiTab', {
+                title: '<span class="layuimini-tab-active"></span><span>' + options.title + '</span><i class="layui-icon layui-unselect layui-tab-close">醼�</i>' //鐢ㄤ簬婕旂ず
+                , content: '<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0"   src="' + options.href + '"></iframe>'
+                , id: options.tabId
+            });
+            $('.layuimini-menu-left').attr('layuimini-tab-tag', 'add');
+            sessionStorage.setItem('layuiminimenu_' + options.tabId, options.title);
+        },
+
+
+        /**
+         * 鍒囨崲閫夐」鍗�
+         * @param tabId
+         */
+        change: function (tabId) {
+            element.tabChange('layuiminiTab', tabId);
+        },
+
+        /**
+         * 鍒犻櫎tab绐楀彛
+         * @param tabId
+         * @param isParent
+         */
+        delete: function (tabId, isParent) {
+            // todo 鏈煡BUG锛屼笉鐭ラ亾鏄笉鏄痩ayui闂锛屽繀椤诲厛鍒犻櫎鍏冪礌
+            $(".layuimini-tab .layui-tab-title .layui-unselect.layui-tab-bar").remove();
+
+            if (isParent === true) {
+                parent.layui.element.tabDelete('layuiminiTab', tabId);
+            } else {
+                element.tabDelete('layuiminiTab', tabId);
+            }
+        },
+
+        /**
+         * 鍦╥frame灞傛墦寮�鏂皌ab鏂规硶
+         */
+        openNewTabByIframe: function (options) {
+            options.href = options.href || null;
+            options.title = options.title || null;
+            var loading = parent.layer.load(0, {shade: false, time: 2 * 1000});
+            if (options.href === null || options.href === undefined) options.href = new Date().getTime();
+            var checkTab = miniTab.check(options.href, true);
+            if (!checkTab) {
+                miniTab.create({
+                    tabId: options.href,
+                    href: options.href,
+                    title: options.title,
+                    isIframe: true,
+                });
+            }
+            parent.layui.element.tabChange('layuiminiTab', options.href);
+            parent.layer.close(loading);
+        },
+
+        /**
+         * 鍦╥frame灞傚叧闂綋鍓峵ab鏂规硶
+         */
+        deleteCurrentByIframe: function () {
+            var ele = $(".layuimini-tab .layui-tab-title li.layui-this", parent.document);
+            if (ele.length > 0) {
+                var layId = $(ele[0]).attr('lay-id');
+                miniTab.delete(layId, true);
+            }
+        },
+
+        /**
+         * 鍒ゆ柇tab绐楀彛
+         */
+        check: function (tabId, isIframe) {
+            // 鍒ゆ柇閫夐」鍗′笂鏄惁鏈�
+            var checkTab = false;
+            if (isIframe === undefined || isIframe === false) {
+                $(".layui-tab-title li").each(function () {
+                    var checkTabId = $(this).attr('lay-id');
+                    if (checkTabId != null && checkTabId === tabId) {
+                        checkTab = true;
+                    }
+                });
+            } else {
+                parent.layui.$(".layui-tab-title li").each(function () {
+                    var checkTabId = $(this).attr('lay-id');
+                    if (checkTabId != null && checkTabId === tabId) {
+                        checkTab = true;
+                    }
+                });
+            }
+            return checkTab;
+        },
+
+        /**
+         * 寮�鍚痶ab鍙抽敭鑿滃崟
+         * @param tabId
+         * @param left
+         */
+        openTabRignMenu: function (tabId, left) {
+            miniTab.closeTabRignMenu();
+            var menuHtml = '<div class="layui-unselect layui-form-select layui-form-selected layuimini-tab-mousedown layui-show" data-tab-id="' + tabId + '" style="left: ' + left + 'px!important">\n' +
+                '<dl>\n' +
+                '<dd><a href="javascript:;" layuimini-tab-menu-close="current">鍏� 闂� 褰� 鍓�</a></dd>\n' +
+                '<dd><a href="javascript:;" layuimini-tab-menu-close="other">鍏� 闂� 鍏� 浠�</a></dd>\n' +
+                '<dd><a href="javascript:;" layuimini-tab-menu-close="all">鍏� 闂� 鍏� 閮�</a></dd>\n' +
+                '</dl>\n' +
+                '</div>';
+            var makeHtml = '<div class="layuimini-tab-make"></div>';
+            $('.layuimini-tab .layui-tab-title').after(menuHtml);
+            $('.layuimini-tab .layui-tab-content').after(makeHtml);
+        },
+
+        /**
+         * 鍏抽棴tab鍙抽敭鑿滃崟
+         */
+        closeTabRignMenu: function () {
+            $('.layuimini-tab-mousedown').remove();
+            $('.layuimini-tab-make').remove();
+        },
+
+        /**
+         * 鏌ヨ鑿滃崟淇℃伅
+         * @param href
+         * @param menuList
+         */
+        searchMenu: function (href, menuList) {
+            var menu;
+            for (key in menuList) {
+                var item = menuList[key];
+                if (item.href === href) {
+                    menu = item;
+                    break;
+                }
+                if (item.child) {
+                    newMenu = miniTab.searchMenu(href, item.child);
+                    if (newMenu) {
+                        menu = newMenu;
+                        break;
+                    }
+                }
+            }
+            return menu;
+        },
+
+        /**
+         * 鐩戝惉
+         * @param options
+         */
+        listen: function (options) {
+            options = options || {};
+            options.maxTabNum = options.maxTabNum || 20;
+
+            /**
+             * 鎵撳紑鏂扮獥鍙�
+             */
+            $('body').on('click', '[layuimini-href]', function () {
+                var loading = layer.load(0, {shade: false, time: 2 * 1000});
+                var tabId = $(this).attr('layuimini-href'),
+                    href = $(this).attr('layuimini-href'),
+                    title = $(this).text(),
+                    target = $(this).attr('target');
+
+                var el = $("[layuimini-href='" + href + "']", ".layuimini-menu-left");
+                layer.close(window.openTips);
+                if (el.length) {
+                    $(el).closest(".layui-nav-tree").find(".layui-this").removeClass("layui-this");
+                    $(el).parent().addClass("layui-this");
+                }
+
+                if (target === '_blank') {
+                    layer.close(loading);
+                    window.open(href, "_blank");
+                    return false;
+                }
+
+                if (tabId === null || tabId === undefined) tabId = new Date().getTime();
+                var checkTab = miniTab.check(tabId);
+                if (!checkTab) {
+                    miniTab.create({
+                        tabId: tabId,
+                        href: href,
+                        title: title,
+                        isIframe: false,
+                        maxTabNum: options.maxTabNum,
+                    });
+                }
+                element.tabChange('layuiminiTab', tabId);
+                layer.close(loading);
+            });
+
+            /**
+             * 鍦╥frame瀛愯彍鍗曚笂鎵撳紑鏂扮獥鍙�
+             */
+            $('body').on('click', '[layuimini-content-href]', function () {
+                var loading = parent.layer.load(0, {shade: false, time: 2 * 1000});
+                var tabId = $(this).attr('layuimini-content-href'),
+                    href = $(this).attr('layuimini-content-href'),
+                    title = $(this).attr('data-title'),
+                    target = $(this).attr('target');
+                if (target === '_blank') {
+                    parent.layer.close(loading);
+                    window.open(href, "_blank");
+                    return false;
+                }
+                if (tabId === null || tabId === undefined) tabId = new Date().getTime();
+                var checkTab = miniTab.check(tabId, true);
+                if (!checkTab) {
+                    miniTab.create({
+                        tabId: tabId,
+                        href: href,
+                        title: title,
+                        isIframe: true,
+                        maxTabNum: options.maxTabNum,
+                    });
+                }
+                parent.layui.element.tabChange('layuiminiTab', tabId);
+                parent.layer.close(loading);
+            });
+
+            /**
+             * 鍏抽棴閫夐」鍗�
+             **/
+            $('body').on('click', '.layuimini-tab .layui-tab-title .layui-tab-close', function () {
+                var loading = layer.load(0, {shade: false, time: 2 * 1000});
+                var $parent = $(this).parent();
+                var tabId = $parent.attr('lay-id');
+                if (tabId !== undefined || tabId !== null) {
+                    miniTab.delete(tabId);
+                }
+                layer.close(loading);
+            });
+
+            /**
+             * 閫夐」鍗℃搷浣�
+             */
+            $('body').on('click', '[layuimini-tab-close]', function () {
+                var loading = layer.load(0, {shade: false, time: 2 * 1000});
+                var closeType = $(this).attr('layuimini-tab-close');
+                $(".layuimini-tab .layui-tab-title li").each(function () {
+                    var tabId = $(this).attr('lay-id');
+                    var id = $(this).attr('id');
+                    var isCurrent = $(this).hasClass('layui-this');
+                    if (id !== 'layuiminiHomeTabId') {
+                        if (closeType === 'all') {
+                            miniTab.delete(tabId);
+                        } else {
+                            if (closeType === 'current' && isCurrent) {
+                                miniTab.delete(tabId);
+                            } else if (closeType === 'other' && !isCurrent) {
+                                miniTab.delete(tabId);
+                            }
+                        }
+                    }
+                });
+                layer.close(loading);
+            });
+
+            /**
+             * 绂佺敤缃戦〉鍙抽敭
+             */
+            $(".layuimini-tab .layui-tab-title").unbind("mousedown").bind("contextmenu", function (e) {
+                e.preventDefault();
+                return false;
+            });
+
+            /**
+             * 娉ㄥ唽榧犳爣鍙抽敭
+             */
+            $('body').on('mousedown', '.layuimini-tab .layui-tab-title li', function (e) {
+                var left = $(this).offset().left - $('.layuimini-tab ').offset().left + ($(this).width() / 2),
+                    tabId = $(this).attr('lay-id');
+                if (e.which === 3) {
+                    miniTab.openTabRignMenu(tabId, left);
+                }
+            });
+
+            /**
+             * 鍏抽棴tab鍙抽敭鑿滃崟
+             */
+            $('body').on('click', '.layui-body,.layui-header,.layuimini-menu-left,.layuimini-tab-make', function () {
+                miniTab.closeTabRignMenu();
+            });
+
+            /**
+             * tab鍙抽敭閫夐」鍗℃搷浣�
+             */
+            $('body').on('click', '[layuimini-tab-menu-close]', function () {
+                var loading = layer.load(0, {shade: false, time: 2 * 1000});
+                var closeType = $(this).attr('layuimini-tab-menu-close'),
+                    currentTabId = $('.layuimini-tab-mousedown').attr('data-tab-id');
+                $(".layuimini-tab .layui-tab-title li").each(function () {
+                    var tabId = $(this).attr('lay-id');
+                    var id = $(this).attr('id');
+                    if (id !== 'layuiminiHomeTabId') {
+                        if (closeType === 'all') {
+                            miniTab.delete(tabId);
+                        } else {
+                            if (closeType === 'current' && currentTabId === tabId) {
+                                miniTab.delete(tabId);
+                            } else if (closeType === 'other' && currentTabId !== tabId) {
+                                miniTab.delete(tabId);
+                            }
+                        }
+                    }
+                });
+                miniTab.closeTabRignMenu();
+                layer.close(loading);
+            });
+        },
+
+        /**
+         * 鐩戝惉tab鍒囨崲
+         * @param options
+         */
+        listenSwitch: function (options) {
+            options.filter = options.filter || null;
+            options.multiModule = options.multiModule || false;
+            options.urlHashLocation = options.urlHashLocation || false;
+            options.listenSwichCallback = options.listenSwichCallback || function () {
+
+            };
+            element.on('tab(' + options.filter + ')', function (data) {
+                var tabId = $(this).attr('lay-id');
+                if (options.urlHashLocation) {
+                    location.hash = '/' + tabId;
+                }
+                if (typeof options.listenSwichCallback === 'function') {
+                    options.listenSwichCallback();
+                }
+                // 鍒ゆ柇鏄惁涓烘柊澧炵獥鍙�
+                if ($('.layuimini-menu-left').attr('layuimini-tab-tag') === 'add') {
+                    $('.layuimini-menu-left').attr('layuimini-tab-tag', 'no')
+                } else {
+                    $("[layuimini-href]").parent().removeClass('layui-this');
+                    if (options.multiModule) {
+                        miniTab.listenSwitchMultiModule(tabId);
+                    } else {
+                        miniTab.listenSwitchSingleModule(tabId);
+                    }
+                }
+                miniTab.rollPosition();
+            });
+        },
+
+        /**
+         * 鐩戝惉hash鍙樺寲
+         * @param options
+         * @returns {boolean}
+         */
+        listenHash: function (options) {
+            options.urlHashLocation = options.urlHashLocation || false;
+            options.maxTabNum = options.maxTabNum || 20;
+            options.homeInfo = options.homeInfo || {};
+            options.menuList = options.menuList || [];
+            if (!options.urlHashLocation) return false;
+            var tabId = location.hash.replace(/^#\//, '');
+            if (tabId === null || tabId === undefined || tabId ==='') return false;
+
+            // 鍒ゆ柇鏄惁涓洪椤�
+            if(tabId ===options.homeInfo.href) return false;
+
+            // 鍒ゆ柇鏄惁涓哄彸渚ц彍鍗�
+            var menu = miniTab.searchMenu(tabId, options.menuList);
+            if (menu !== undefined) {
+                miniTab.create({
+                    tabId: tabId,
+                    href: tabId,
+                    title: menu.title,
+                    isIframe: false,
+                    maxTabNum: options.maxTabNum,
+                });
+                $('.layuimini-menu-left').attr('layuimini-tab-tag', 'no');
+                element.tabChange('layuiminiTab', tabId);
+                return false;
+            }
+
+            // 鍒ゆ柇鏄惁涓哄揩鎹疯彍鍗�
+            var isSearchMenu = false;
+            $("[layuimini-content-href]").each(function () {
+                if ($(this).attr("layuimini-content-href") === tabId) {
+                    var title = $(this).attr("data-title");
+                    miniTab.create({
+                        tabId: tabId,
+                        href: tabId,
+                        title: title,
+                        isIframe: false,
+                        maxTabNum: options.maxTabNum,
+                    });
+                    $('.layuimini-menu-left').attr('layuimini-tab-tag', 'no');
+                    element.tabChange('layuiminiTab', tabId);
+                    isSearchMenu = true;
+                    return false;
+                }
+            });
+            if (isSearchMenu) return false;
+
+            // 鏃笉鏄彸渚ц彍鍗曘�佸揩鎹疯彍鍗�,灏辩洿鎺ユ墦寮�
+            var title = sessionStorage.getItem('layuiminimenu_' + tabId) === null ? tabId : sessionStorage.getItem('layuiminimenu_' + tabId);
+            miniTab.create({
+                tabId: tabId,
+                href: tabId,
+                title: title,
+                isIframe: false,
+                maxTabNum: options.maxTabNum,
+            });
+            element.tabChange('layuiminiTab', tabId);
+            return false;
+        },
+
+        /**
+         * 鐩戝惉婊氬姩
+         */
+        listenRoll: function () {
+            $(".layuimini-tab-roll-left").click(function () {
+                miniTab.rollClick("left");
+            });
+            $(".layuimini-tab-roll-right").click(function () {
+                miniTab.rollClick("right");
+            });
+        },
+
+        /**
+         * 鍗曟ā鍧楀垏鎹�
+         * @param tabId
+         */
+        listenSwitchSingleModule: function (tabId) {
+            $("[layuimini-href]").each(function () {
+                if ($(this).attr("layuimini-href") === tabId) {
+                    // 鑷姩灞曞紑鑿滃崟鏍�
+                    var addMenuClass = function ($element, type) {
+                        if (type === 1) {
+                            $element.addClass('layui-this');
+                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-this')) {
+                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
+                            } else {
+                                addMenuClass($element.parent().parent(), 2);
+                            }
+                        } else {
+                            $element.addClass('layui-nav-itemed');
+                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-nav-itemed')) {
+                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
+                            } else {
+                                addMenuClass($element.parent().parent(), 2);
+                            }
+                        }
+                    };
+                    addMenuClass($(this).parent(), 1);
+                    return false;
+                }
+            });
+        },
+
+        /**
+         * 澶氭ā鍧楀垏鎹�
+         * @param tabId
+         */
+        listenSwitchMultiModule: function (tabId) {
+            $("[layuimini-href]").each(function () {
+                if ($(this).attr("layuimini-href") === tabId) {
+
+                    // 鑷姩灞曞紑鑿滃崟鏍�
+                    var addMenuClass = function ($element, type) {
+                        if (type === 1) {
+                            $element.addClass('layui-this');
+                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-this')) {
+                                var moduleId = $element.parent().attr('id');
+                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
+                                $("#" + moduleId + "HeaderId").addClass("layui-this");
+                                $(".layuimini-menu-left .layui-nav.layui-nav-tree").attr('class', 'layui-nav layui-nav-tree layui-hide');
+                                $("#" + moduleId).attr('class', 'layui-nav layui-nav-tree layui-this');
+                            } else {
+                                addMenuClass($element.parent().parent(), 2);
+                            }
+                        } else {
+                            $element.addClass('layui-nav-itemed');
+                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-nav-itemed')) {
+                                var moduleId = $element.parent().attr('id');
+                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
+                                $("#" + moduleId + "HeaderId").addClass("layui-this");
+                                $(".layuimini-menu-left .layui-nav.layui-nav-tree").attr('class', 'layui-nav layui-nav-tree layui-hide');
+                                $("#" + moduleId).attr('class', 'layui-nav layui-nav-tree layui-this');
+                            } else {
+                                addMenuClass($element.parent().parent(), 2);
+                            }
+                        }
+                    };
+                    addMenuClass($(this).parent(), 1);
+                    return false;
+                }
+            });
+        },
+
+        /**
+         * 鑷姩瀹氫綅
+         */
+        rollPosition: function () {
+            var $tabTitle = $('.layuimini-tab  .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);
+        },
+
+        /**
+         * 鐐瑰嚮婊氬姩
+         * @param direction
+         */
+        rollClick: function (direction) {
+            var $tabTitle = $('.layuimini-tab  .layui-tab-title');
+            var left = $tabTitle.scrollLeft();
+            if ('left' === direction) {
+                $tabTitle.animate({
+                    scrollLeft: left - 450
+                }, 200);
+            } else {
+                $tabTitle.animate({
+                    scrollLeft: left + 450
+                }, 200);
+            }
+        }
+
+    };
+
+    exports("miniTab", miniTab);
+});

--
Gitblit v1.9.3