From 0ef31aff8cf39f3dbaf9db54a097d3cb61d3a974 Mon Sep 17 00:00:00 2001 From: bhuh12 Date: Tue, 30 Apr 2019 17:52:05 +0800 Subject: [PATCH] chore(release): 0.1.9 --- dist/lib/vue-router-tab.common.js | 1215 +++++++++++++----------- dist/lib/vue-router-tab.common.js.map | 2 +- dist/lib/vue-router-tab.umd.js | 1215 +++++++++++++----------- dist/lib/vue-router-tab.umd.js.map | 2 +- dist/lib/vue-router-tab.umd.min.js | 2 +- dist/lib/vue-router-tab.umd.min.js.map | 2 +- package.json | 2 +- 7 files changed, 1353 insertions(+), 1087 deletions(-) diff --git a/dist/lib/vue-router-tab.common.js b/dist/lib/vue-router-tab.common.js index be179b8e..bbf1d1c0 100644 --- a/dist/lib/vue-router-tab.common.js +++ b/dist/lib/vue-router-tab.common.js @@ -890,15 +890,15 @@ if (typeof window !== 'undefined') { // Indicate to webpack that this file can be concatenated /* harmony default export */ var setPublicPath = (null); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/RouterTab.vue?vue&type=template&id=053ff978& -var RouterTabvue_type_template_id_053ff978_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab"},[_c('header',{staticClass:"router-tab-header"},[_c('div',{staticClass:"router-tab-scroll"},[_c('transition-group',_vm._b({staticClass:"router-tab-nav",attrs:{"tag":"ul"},on:{"after-enter":_vm.onTabTransitionEnd,"after-leave":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){ +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/RouterTab/RouterTab.vue?vue&type=template&id=8bd0c2cc& +var RouterTabvue_type_template_id_8bd0c2cc_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab"},[_c('header',{staticClass:"router-tab-header"},[_c('div',{staticClass:"router-tab-scroll"},[_c('transition-group',_vm._b({staticClass:"router-tab-nav",attrs:{"tag":"ul"},on:{"after-enter":_vm.onTabTransitionEnd,"after-leave":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){ var id = ref.id; var to = ref.to; var title = ref.title; var icon = ref.icon; var tips = ref.tips; var closable = ref.closable; -return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{"tag":"li","title":tips || title || '',"to":to},nativeOn:{"contextmenu":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t("default",[(icon)?_c('i',{staticClass:"tab-icon",class:icon}):_vm._e(),_c('span',{staticClass:"tab-title"},[_vm._v(_vm._s(title || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:"tab-close",attrs:{"title":_vm.lang.contextmenu.close},on:{"click":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{ +return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{"tag":"li","title":_vm.i18nText(tips || title) || _vm.lang.tab.untitled,"to":to},nativeOn:{"contextmenu":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t("default",[(icon)?_c('i',{staticClass:"tab-icon",class:icon}):_vm._e(),_c('span',{staticClass:"tab-title"},[_vm._v(_vm._s(_vm.i18nText(title) || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:"tab-close",attrs:{"title":_vm.lang.contextmenu.close},on:{"click":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{ tab: _vm.items[index], tabs: _vm.items, index: index @@ -906,7 +906,7 @@ return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ acti var staticRenderFns = [] -// CONCATENATED MODULE: ./src/components/RouterTab.vue?vue&type=template&id=053ff978& +// CONCATENATED MODULE: ./src/components/RouterTab/RouterTab.vue?vue&type=template&id=8bd0c2cc& // EXTERNAL MODULE: ./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js var regenerator = __webpack_require__("4795"); @@ -937,34 +937,23 @@ function debounce(fn) { }, delay); }; } -// CONCATENATED MODULE: ./src/util/rules.js -// 页签规则 -/* harmony default export */ var rules = ({ - // 地址,例如:"/page/1?type=a#title" 则取 "/page/1" - path: function path(route) { - return route.path; - }, - // 完整地址 (忽略hash),例如:"/page/1?type=a#title" 则取 "/page/1?type=a" - fullpath: function fullpath(route) { - return route.fullPath.replace(route.hash, ''); - } -}); -// CONCATENATED MODULE: ./src/util/alive.js - // 获取缓存 id - -function getAliveId() { - var route = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$route; - var rule = route.meta && route.meta.aliveId || this.aliveId; +// CONCATENATED MODULE: ./src/util/route.js +// 获取路由不带hash的路径 +function getPathWithoutHash(route) { + return route.hash ? route.fullPath.replace(route.hash, '') : route.fullPath; +} // 是否相似路由 - if (typeof rule === 'string') { - rule = rules[rule.toLowerCase()]; - } +function isAlikeRoute(route1, route2) { + return getPathWithoutHash(route1) === getPathWithoutHash(route2); +} // 获取路由页面组件 - if (typeof rule !== 'function') { - rule = rules.path; - } +function getRouteComponent(_ref) { + var matched = _ref.matched; + return matched[matched.length - 1].components.default; +} // 路由是否共用组件 - return rule.bind(this)(route); +function isSameComponentRoute(route1, route2) { + return getRouteComponent(route1) === getRouteComponent(route2); } // CONCATENATED MODULE: ./src/util/dom.js // 滚动 @@ -1000,64 +989,44 @@ function getFirstComponentChild(children) { function isAsyncPlaceholder(node) { return node.isComment && node.asyncFactory; } -// CONCATENATED MODULE: ./src/util/route.js -// 获取路由不带hash的路径 -function getPathWithoutHash(route) { - return route.hash ? route.fullPath.replace(route.hash, '') : route.fullPath; -} // 是否相似路由 - -function isAlikeRoute(route1, route2) { - return getPathWithoutHash(route1) === getPathWithoutHash(route2); -} // 获取路由页面组件 - -function getRouteComponent(_ref) { - var matched = _ref.matched; - return matched[matched.length - 1].components.default; -} // 路由是否共用组件 - -function isSameComponentRoute(route1, route2) { - return getRouteComponent(route1) === getRouteComponent(route2); -} -// CONCATENATED MODULE: ./src/lang/zh-CN.js -/* harmony default export */ var zh_CN = ({ - tab: { - untitled: '无标题' - }, - contextmenu: { - refresh: '刷新', - refreshAll: '刷新所有', - close: '关闭', - closeLefts: '关闭左侧', - closeRights: '关闭右侧', - closeOthers: '关闭其他' +// CONCATENATED MODULE: ./src/components/RouterTab/rule.js +// 内置规则 +var rules = { + // 地址,例如:"/page/1?type=a#title" 则取 "/page/1" + path: function path(route) { + return route.path; }, - msg: { - keepOneTab: '至少应保留1个页签' + // 完整地址 (忽略hash),例如:"/page/1?type=a#title" 则取 "/page/1?type=a" + fullpath: function fullpath(route) { + return route.fullPath.replace(route.hash, ''); } -}); -// CONCATENATED MODULE: ./src/lang/en.js -/* harmony default export */ var en = ({ - tab: { - untitled: 'Untitled' - }, - contextmenu: { - refresh: 'Refresh', - refreshAll: 'Refresh All', - close: 'Close', - closeLefts: 'Close to the Left', - closeRights: 'Close to the Right', - closeOthers: 'Close Others' +}; // 页签缓存规则 + +/* harmony default export */ var rule = ({ + props: { + // 缓存id,如果为函数,则参数为route + aliveId: { + type: [String, Function], + default: 'path' + } }, - msg: { - keepOneTab: 'Keep at least 1 tab' - } -}); -// CONCATENATED MODULE: ./src/lang/index.js + methods: { + // 获取缓存 id + getAliveId: function getAliveId() { + var route = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$route; + var rule = route.meta && route.meta.aliveId || this.aliveId; + if (typeof rule === 'string') { + rule = rules[rule.toLowerCase()]; + } -/* harmony default export */ var src_lang = ({ - 'zh-CN': zh_CN, - en: en + if (typeof rule !== 'function') { + rule = rules.path; + } + + return rule.bind(this)(route); + } + } }); // CONCATENATED MODULE: ./src/components/RouterAlive.js @@ -1066,13 +1035,7 @@ function isSameComponentRoute(route1, route2) { /* harmony default export */ var RouterAlive = ({ name: 'RouterAlive', - props: { - // 缓存id,如果为函数,则参数为route - aliveId: { - type: [String, Function], - default: 'path' - } - }, + mixins: [rule], beforeCreate: function beforeCreate() { Object.assign(this, { cache: Object.create(null), @@ -1141,7 +1104,6 @@ function isSameComponentRoute(route1, route2) { return vnode || slot && slot[0]; }, methods: { - getAliveId: getAliveId, // 设置缓存项 set: function set(key, item) { var cache = this.cache; @@ -1173,120 +1135,18 @@ function isSameComponentRoute(route1, route2) { } } }); -// CONCATENATED MODULE: ./src/mixins/routerTab/iframe.js -// iframe 页签功能混入 -/* harmony default export */ var iframe = ({ - data: function data() { - return { - iframes: [], - currentIframe: null - }; - }, - methods: { - // 获取 iframe 页签路由路径 - getIframePath: function getIframePath(src) { - var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var icon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var path = "".concat(this.basePath, "/iframe/").concat(encodeURIComponent(src)); - - if (title) { - path += '/' + title; - - if (icon) { - path += '/' + icon; - } - } - - return path; - }, - // 打开 iframe 页签 - openIframeTab: function openIframeTab(src, title, icon) { - var path = this.getIframePath(src, title, icon); - this.$router.push(path); - }, - // 关闭 iframe 页签 - closeIframeTab: function closeIframeTab(src) { - var path = this.getIframePath(src); - this.close(path, false); - }, - // 刷新 iframe 页签 - refreshIframeTab: function refreshIframeTab(src) { - var path = this.getIframePath(src); - this.refresh(path, false); - } - } -}); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader??ref--13-0!./src/components/RouterTab.js?vue&type=script&lang=js& +// CONCATENATED MODULE: ./src/components/RouterTab/contextmenu.js function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + // 右键菜单 - // 方法 - - - - - // 语言配置 - - // 子组件 - - // 功能混入 - - -/* harmony default export */ var RouterTabvue_type_script_lang_js_ = ({ - name: 'RouterTab', - components: { - RouterAlive: RouterAlive - }, - mixins: [iframe], - props: { - // 缓存id,如果为函数,则参数为route - aliveId: RouterAlive.props.aliveId, - // 语言配置 - // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en' - // - 为对象时,可设置自定义的语言 - i18n: { - type: [String, Object], - default: 'zh-CN' - }, - // 初始页签数据 - tabs: { - type: Array, - default: function _default() { - return []; - } - }, - // router-view组件配置 - routerView: Object, - // 页签过渡效果 - tabTransition: { - type: [String, Object], - default: 'router-tab-zoom' - }, - // 页面过渡效果 - pageTransition: { - type: [String, Object], - default: function _default() { - return { - name: 'router-tab-swap', - mode: 'out-in' - }; - } - } - }, +/* harmony default export */ var RouterTab_contextmenu = ({ data: function data() { return { - loading: false, - // 路由页面loading - items: [], - // 页签项 - activedTab: null, - // 当前激活的页签 - isRouterAlive: true, // 右键菜单 contextmenu: { id: null, @@ -1297,21 +1157,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }; }, computed: { - // 语言内容 - lang: function lang() { - var lang = null; - var i18n = this.i18n; - - if (typeof i18n === 'string') { - lang = src_lang[i18n]; - } else if (_typeof(i18n) === 'object') { - lang = i18n; - } // 找不到语言配置,则使用英文 - - - if (!lang) lang = src_lang['en']; - return lang; - }, // 右键菜单是否当前页签 isContextTabActived: function isContextTabActived() { return this.contextmenu.id === this.activedTab; @@ -1359,25 +1204,428 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat watch: { // 路由切换更新激活的页签 $route: function $route(_$route) { - this.loading = false; this.hideContextmenu(); - this.updateActivedTab(); - this.fixCommentPage(); }, - activedTab: function () { - var _activedTab = _asyncToGenerator( + // 监听右键菜单显示关闭 + 'contextmenu.id': function contextmenuId(val, old) { + var _this = this; + + if (!old && val) { + // 显示右键菜单,绑定点击关闭事件 + document.addEventListener('click', this.onClick = function (e) { + if (e.target !== _this.$el.querySelector('.router-tab-contextmenu')) { + _this.hideContextmenu(); + } + }); + } else if (old && !val) { + // 隐藏右键菜单,移除点击关闭事件 + document.removeEventListener('click', this.onClick); + } + } + }, + methods: { + // 显示页签右键菜单 + showContextmenu: function showContextmenu(id, index, e) { + // 菜单定位 + var _ref4 = e || emptyObj, + top = _ref4.clientY, + left = _ref4.clientX; + + Object.assign(this.contextmenu, { + id: id, + index: index, + top: top, + left: left + }); + }, + // 关闭页签右键菜单 + hideContextmenu: function hideContextmenu() { + this.showContextmenu(null, -1); + }, + // 关闭多个页签 + closeMulti: function () { + var _closeMulti = _asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee() { - var $cur, $scr, cLeft, sLeft; + regenerator_default.a.mark(function _callee(tabs) { + var _this2 = this; + + var items, $router, contextmenu, nextTab, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, id; + return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - _context.next = 2; - return this.$nextTick(); - - case 2: - $cur = this.$el.querySelector('.router-tab-nav .actived'); + items = this.items, $router = this.$router, contextmenu = this.contextmenu; + nextTab = items.find(function (_ref5) { + var id = _ref5.id; + return id === contextmenu.id; + }); + _iteratorNormalCompletion = true; + _didIteratorError = false; + _iteratorError = undefined; + _context.prev = 5; + _iterator = tabs[Symbol.iterator](); + + case 7: + if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { + _context.next = 19; + break; + } + + id = _step.value.id; + _context.prev = 9; + _context.next = 12; + return this.removeTab(id); + + case 12: + _context.next = 16; + break; + + case 14: + _context.prev = 14; + _context.t0 = _context["catch"](9); + + case 16: + _iteratorNormalCompletion = true; + _context.next = 7; + break; + + case 19: + _context.next = 25; + break; + + case 21: + _context.prev = 21; + _context.t1 = _context["catch"](5); + _didIteratorError = true; + _iteratorError = _context.t1; + + case 25: + _context.prev = 25; + _context.prev = 26; + + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + + case 28: + _context.prev = 28; + + if (!_didIteratorError) { + _context.next = 31; + break; + } + + throw _iteratorError; + + case 31: + return _context.finish(28); + + case 32: + return _context.finish(25); + + case 33: + // 当前页签如已关闭,则打开右键选中页签 + if (items.findIndex(function (_ref6) { + var id = _ref6.id; + return id === _this2.activedTab; + }) === -1) { + $router.replace(nextTab.to); + } + + case 34: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[5, 21, 25, 33], [9, 14], [26,, 28, 32]]); + })); + + function closeMulti(_x) { + return _closeMulti.apply(this, arguments); + } + + return closeMulti; + }() + } +}); +// CONCATENATED MODULE: ./src/lang/zh-CN.js +/* harmony default export */ var zh_CN = ({ + tab: { + untitled: '无标题' + }, + contextmenu: { + refresh: '刷新', + refreshAll: '刷新所有', + close: '关闭', + closeLefts: '关闭左侧', + closeRights: '关闭右侧', + closeOthers: '关闭其他' + }, + msg: { + keepOneTab: '至少应保留1个页签', + i18nProp: '请提供“i18n”方法以处理国际化内容' + } +}); +// CONCATENATED MODULE: ./src/lang/en.js +/* harmony default export */ var en = ({ + tab: { + untitled: 'Untitled' + }, + contextmenu: { + refresh: 'Refresh', + refreshAll: 'Refresh All', + close: 'Close', + closeLefts: 'Close to the Left', + closeRights: 'Close to the Right', + closeOthers: 'Close Others' + }, + msg: { + keepOneTab: 'Keep at least 1 tab', + i18nProp: 'Method "i18n" is not defined on the instance' + } +}); +// CONCATENATED MODULE: ./src/lang/index.js + + +/* harmony default export */ var src_lang = ({ + 'zh-CN': zh_CN, + en: en +}); +// CONCATENATED MODULE: ./src/util/warn.js +var prefix = '[vue-router-tab]'; // 错误 + +function assert(condition, message) { + if (!condition) { + throw new Error("".concat(prefix, " ").concat(message)); + } +} // 警告 + +function warn(condition, message) { + if (false) {} +} +// CONCATENATED MODULE: ./src/components/RouterTab/i18n.js +function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + // 语言配置 + + // 国际化 + +/* harmony default export */ var i18n = ({ + props: { + // 组件语言 + // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en' + // - 为对象时,可设置自定义的语言 + language: { + type: [String, Object], + default: 'zh-CN' + }, + // 页签国际化配置 i18n (key, [args]) + i18n: Function + }, + computed: { + // 语言内容 + lang: function lang() { + var lang = this.language; + + if (typeof lang === 'string') { + lang = src_lang[lang]; + } // 找不到语言配置,则使用英文 + + + if (!lang) lang = src_lang['en']; + return lang; + } + }, + methods: { + // 获取国际化内容 + i18nText: function i18nText(text) { + var _this$ii8nParse = this.ii8nParse(text), + key = _this$ii8nParse.key, + params = _this$ii8nParse.params; + + if (key) { + var hasI18nProp = typeof this.i18n === 'function'; // 未配置 i18n 方法则警告 + + if (!this._hasI18nPropWarn) { + warn(hasI18nProp, this.lang.msg.i18nProp); + this._hasI18nPropWarn = true; + } + + if (hasI18nProp) { + return this.i18n(key, params); + } + } + + return text; + }, + // 解析国际化 + ii8nParse: function ii8nParse(text) { + var key; + var params; // 获取国际化配置 + + if (typeof text === 'string') { + // 字符串方式配置:'i18n:custom.lang.key' + var res = /^i18n:([^\s]+)$/.exec(text); + + if (res) { + key = res[1]; + params = []; + } + } else if (Array.isArray(text)) { + // 数组方式配置:['tab.i18n.key', 'param1', 'param2', ...] + var _text = _toArray(text); + + key = _text[0]; + params = _text.slice(1); + } + + return { + key: key, + params: params + }; + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/iframe.js +// iframe 页签 +/* harmony default export */ var iframe = ({ + data: function data() { + return { + iframes: [], + currentIframe: null + }; + }, + methods: { + // 获取 iframe 页签路由路径 + getIframePath: function getIframePath(src) { + var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var icon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var path = "".concat(this.basePath, "/iframe/").concat(encodeURIComponent(src)); + + if (title) { + path += '/' + title; + + if (icon) { + path += '/' + icon; + } + } + + return path; + }, + // 打开 iframe 页签 + openIframeTab: function openIframeTab(src, title, icon) { + var path = this.getIframePath(src, title, icon); + this.$router.push(path); + }, + // 关闭 iframe 页签 + closeIframeTab: function closeIframeTab(src) { + var path = this.getIframePath(src); + this.close(path, false); + }, + // 刷新 iframe 页签 + refreshIframeTab: function refreshIframeTab(src) { + var path = this.getIframePath(src); + this.refresh(path, false); + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/pageLeave.js + + // 页面离开 + +/* harmony default export */ var pageLeave = ({ + created: function created() { + this.$router.beforeEach(this.routerPageLeaveGuard); + }, + methods: { + // 页面离开导航守卫 + routerPageLeaveGuard: function routerPageLeaveGuard(to, from, next) { + if (this._isDestroyed) { + var hooks = this.$router.beforeHooks; + var idx = hooks.indexOf(this.routerPageLeaveGuard); // 移除已销毁的RouterTab实例注册的导航守卫 + + if (idx > -1) hooks.splice(idx, 1); + next(); + } else { + var id = this.getAliveId(to); + var $alive = this.$refs.routerAlive; + + var _ref = $alive && $alive.cache[id] || emptyObj, + cacheRoute = _ref.route; // 如果不是相同路由则检查beforePageLeave + + + if (cacheRoute && !isAlikeRoute(to, cacheRoute)) { + this.pageLeavePromise(id, 'replace').then(function () { + return next(); + }).catch(function () { + return next(false); + }); + } else { + next(); + } + } + }, + // 页面离开Promise + pageLeavePromise: function pageLeavePromise(id, type) { + var _this = this; + + return new Promise(function (resolve, reject) { + var $alive = _this.$refs.routerAlive; + + var tab = _this.items.find(function (item) { + return item.id === id; + }); // 当前页签 + + + var _ref2 = $alive.cache[id] || emptyObj, + vm = _ref2.vm; // 缓存数据 + + + var beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave; + + if (typeof beforePageLeave === 'function') { + // 页签关闭前 + beforePageLeave.bind(vm)(resolve, reject, tab, type); + } else { + resolve(); + } + }); + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/scroll.js + + +function scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function scroll_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + + + // 页签滚动 + +/* harmony default export */ var RouterTab_scroll = ({ + watch: { + activedTab: function () { + var _activedTab = scroll_asyncToGenerator( + /*#__PURE__*/ + regenerator_default.a.mark(function _callee() { + var $cur, $scr, cLeft, sLeft; + return regenerator_default.a.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.$nextTick(); + + case 2: + $cur = this.$el.querySelector('.router-tab-nav .actived'); $scr = this.$el.querySelector('.router-tab-scroll'); if ($cur) { @@ -1400,26 +1648,117 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat function activedTab() { return _activedTab.apply(this, arguments); } - - return activedTab; - }(), - // 监听右键菜单显示关闭 - 'contextmenu.id': function contextmenuId(val, old) { - var _this = this; - - if (!old && val) { - // 显示右键菜单,绑定点击关闭事件 - document.addEventListener('click', this.onClick = function (e) { - if (e.target !== _this.$el.querySelector('.router-tab-contextmenu')) { - _this.hideContextmenu(); - } - }); - } else if (old && !val) { - // 隐藏右键菜单,移除点击关闭事件 - document.removeEventListener('click', this.onClick); + + return activedTab; + }() + }, + created: function created() { + this.$nextTick(this.adjust); + }, + mounted: function mounted() { + // 页面载入和浏览器窗口大小改变时调整Tab滚动显示 + window.addEventListener('resize', this.onResize = debounce(this.adjust)); + }, + destroyed: function destroyed() { + // 销毁后移除监听事件 + window.removeEventListener('resize', this.onResize); + }, + methods: { + // Tab滚动 + tabScroll: function tabScroll(direction) { + var $tab = this.$el.querySelector('.router-tab-header'); + var $scr = $tab.querySelector('.router-tab-scroll'); + var space = $tab.clientWidth - 110; + scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space)); + }, + // 调整Tab滚动显示 + adjust: function adjust() { + var $tab = this.$el.querySelector('.router-tab-header'); + var $scr = $tab.querySelector('.router-tab-scroll'); + var $nav = $scr.querySelector('.router-tab-nav'); + var $cur = $nav.querySelector('.actived'); + var isScroll = $nav.clientWidth > $scr.clientWidth; // 判断是否需要滚动 + + $tab.classList[isScroll ? 'add' : 'remove']('is-scroll'); + + if ($cur && isScroll) { + scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2); + } + } + } +}); +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader??ref--13-0!./src/components/RouterTab?vue&type=script&lang=js& + + +function RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function RouterTab_vue_type_script_lang_js_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + + // 方法 + + + // 子组件 + + // 功能模块混入 + + + + + + + // RouterTab 组件 + +/* harmony default export */ var RouterTab_vue_type_script_lang_js_ = ({ + name: 'RouterTab', + components: { + RouterAlive: RouterAlive + }, + mixins: [RouterTab_contextmenu, i18n, iframe, pageLeave, rule, RouterTab_scroll], + props: { + // 初始页签数据 + tabs: { + type: Array, + default: function _default() { + return []; + } + }, + // router-view组件配置 + routerView: Object, + // 页签过渡效果 + tabTransition: { + type: [String, Object], + default: 'router-tab-zoom' + }, + // 页面过渡效果 + pageTransition: { + type: [String, Object], + default: function _default() { + return { + name: 'router-tab-swap', + mode: 'out-in' + }; } } }, + data: function data() { + return { + loading: false, + // 路由页面loading + items: [], + // 页签项 + activedTab: null, + // 当前激活的页签 + isRouterAlive: true + }; + }, + watch: { + // 路由切换更新激活的页签 + $route: function $route(_$route) { + this.loading = false; + this.updateActivedTab(); + this.fixCommentPage(); + } + }, beforeCreate: function beforeCreate() { // 添加到原型链 external_commonjs_vue_commonjs2_vue_root_Vue_default.a.prototype.$routerTab = this; // 获取跟路径 @@ -1430,66 +1769,28 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat created: function created() { this.getTabItems(); this.updateActivedTab(); - this.$router.beforeEach(this.routerPageLeaveGuard); - this.$nextTick(this.adjust); - }, - mounted: function mounted() { - // 页面载入和浏览器窗口大小改变时调整Tab滚动显示 - window.addEventListener('resize', this.onResize = debounce(this.adjust)); - }, - destroyed: function destroyed() { - // 销毁后移除监听事件 - window.removeEventListener('resize', this.onResize); }, methods: { - getAliveId: getAliveId, - // 页面离开导航守卫 - routerPageLeaveGuard: function routerPageLeaveGuard(to, from, next) { - if (this._isDestroyed) { - var hooks = this.$router.beforeHooks; - var idx = hooks.indexOf(this.routerPageLeaveGuard); // 移除已销毁的RouterTab实例注册的导航守卫 - - if (idx > -1) hooks.splice(idx, 1); - next(); - } else { - var id = this.getAliveId(to); - var $alive = this.$refs.routerAlive; - - var _ref4 = $alive && $alive.cache[id] || emptyObj, - cacheRoute = _ref4.route; // 如果不是相同路由则检查beforePageLeave - - - if (cacheRoute && !isAlikeRoute(to, cacheRoute)) { - this.pageLeavePromise(id, 'replace').then(function () { - return next(); - }).catch(function () { - return next(false); - }); - } else { - next(); - } - } - }, // 根据初始页签数据生成页签列表 getTabItems: function getTabItems() { - var _this2 = this; + var _this = this; var tabs = this.tabs, $router = this.$router; var ids = {}; this.items = tabs.map(function (item, index) { - var _ref5 = typeof item === 'string' ? { + var _ref = typeof item === 'string' ? { to: item } : item || emptyObj, - to = _ref5.to, - closable = _ref5.closable, - title = _ref5.title, - tips = _ref5.tips; + to = _ref.to, + closable = _ref.closable, + title = _ref.title, + tips = _ref.tips; var route = to && $router.match(to); if (route) { - var tab = _this2.getRouteTab(route); + var tab = _this.getRouteTab(route); var id = tab.id; // 根据id去重 @@ -1510,12 +1811,12 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat this.activedTab = this.getAliveId(); }, // 更新tab数据 - updateTab: function updateTab(key, _ref6) { - var route = _ref6.route, - tab = _ref6.tab; + updateTab: function updateTab(key, _ref2) { + var route = _ref2.route, + tab = _ref2.tab; var items = this.items; - var matchIdx = items.findIndex(function (_ref7) { - var id = _ref7.id; + var matchIdx = items.findIndex(function (_ref3) { + var id = _ref3.id; return id === key; }); var item = Object.assign(this.getRouteTab(route), tab); @@ -1536,8 +1837,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat if (fullMatch) { var matchPath = getPathWithoutHash($route); - var matchTab = this.items.find(function (_ref8) { - var to = _ref8.to; + var matchTab = this.items.find(function (_ref4) { + var to = _ref4.to; return to.split('#')[0] === matchPath; }); @@ -1564,41 +1865,15 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat tips: tips }; }, - // 页面离开Promise - pageLeavePromise: function pageLeavePromise(id, type) { - var _this3 = this; - - return new Promise(function (resolve, reject) { - var $alive = _this3.$refs.routerAlive; - - var tab = _this3.items.find(function (item) { - return item.id === id; - }); // 当前页签 - - - var _ref9 = $alive.cache[id] || emptyObj, - vm = _ref9.vm; // 缓存数据 - - - var beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave; - - if (typeof beforePageLeave === 'function') { - // 页签关闭前 - beforePageLeave.bind(vm)(resolve, reject, tab, type); - } else { - resolve(); - } - }); - }, // 移除tab项 removeTab: function () { - var _removeTab = _asyncToGenerator( + var _removeTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee2(id) { + regenerator_default.a.mark(function _callee(id) { var items, $alive, idx; - return regenerator_default.a.wrap(function _callee2$(_context2) { + return regenerator_default.a.wrap(function _callee$(_context) { while (1) { - switch (_context2.prev = _context2.next) { + switch (_context.prev = _context.next) { case 0: items = this.items; $alive = this.$refs.routerAlive; @@ -1607,34 +1882,34 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }); if (!(items.length === 1)) { - _context2.next = 5; + _context.next = 5; break; } throw new Error(this.lang.msg.keepOneTab); case 5: - _context2.prev = 5; - _context2.next = 8; + _context.prev = 5; + _context.next = 8; return this.pageLeavePromise(id, 'close'); case 8: // 承诺关闭后移除页签和缓存 $alive.remove(id); idx > -1 && items.splice(idx, 1); - _context2.next = 14; + _context.next = 14; break; case 12: - _context2.prev = 12; - _context2.t0 = _context2["catch"](5); + _context.prev = 12; + _context.t0 = _context["catch"](5); case 14: case "end": - return _context2.stop(); + return _context.stop(); } } - }, _callee2, this, [[5, 12]]); + }, _callee, this, [[5, 12]]); })); function removeTab(_x) { @@ -1659,27 +1934,27 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }, // 通过页签id关闭页签 closeTab: function () { - var _closeTab = _asyncToGenerator( + var _closeTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee3() { + regenerator_default.a.mark(function _callee2() { var id, activedTab, items, $router, idx, nextTab, - _args3 = arguments; - return regenerator_default.a.wrap(function _callee3$(_context3) { + _args2 = arguments; + return regenerator_default.a.wrap(function _callee2$(_context2) { while (1) { - switch (_context3.prev = _context3.next) { + switch (_context2.prev = _context2.next) { case 0: - id = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : this.activedTab; + id = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : this.activedTab; activedTab = this.activedTab, items = this.items, $router = this.$router; idx = items.findIndex(function (item) { return item.id === id; }); - _context3.prev = 3; - _context3.next = 6; + _context2.prev = 3; + _context2.next = 6; return this.removeTab(id); case 6: @@ -1689,20 +1964,20 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat $router.replace(nextTab.to); } - _context3.next = 12; + _context2.next = 12; break; case 9: - _context3.prev = 9; - _context3.t0 = _context3["catch"](3); - console.warn(_context3.t0); + _context2.prev = 9; + _context2.t0 = _context2["catch"](3); + console.warn(_context2.t0); case 12: case "end": - return _context3.stop(); + return _context2.stop(); } } - }, _callee3, this, [[3, 9]]); + }, _callee2, this, [[3, 9]]); })); function closeTab() { @@ -1711,111 +1986,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat return closeTab; }(), - // 关闭多个页签 - closeMulti: function () { - var _closeMulti = _asyncToGenerator( - /*#__PURE__*/ - regenerator_default.a.mark(function _callee4(tabs) { - var _this4 = this; - - var items, $router, contextmenu, nextTab, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, id; - - return regenerator_default.a.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - items = this.items, $router = this.$router, contextmenu = this.contextmenu; - nextTab = items.find(function (_ref10) { - var id = _ref10.id; - return id === contextmenu.id; - }); - _iteratorNormalCompletion = true; - _didIteratorError = false; - _iteratorError = undefined; - _context4.prev = 5; - _iterator = tabs[Symbol.iterator](); - - case 7: - if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { - _context4.next = 19; - break; - } - - id = _step.value.id; - _context4.prev = 9; - _context4.next = 12; - return this.removeTab(id); - - case 12: - _context4.next = 16; - break; - - case 14: - _context4.prev = 14; - _context4.t0 = _context4["catch"](9); - - case 16: - _iteratorNormalCompletion = true; - _context4.next = 7; - break; - - case 19: - _context4.next = 25; - break; - - case 21: - _context4.prev = 21; - _context4.t1 = _context4["catch"](5); - _didIteratorError = true; - _iteratorError = _context4.t1; - - case 25: - _context4.prev = 25; - _context4.prev = 26; - - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - - case 28: - _context4.prev = 28; - - if (!_didIteratorError) { - _context4.next = 31; - break; - } - - throw _iteratorError; - - case 31: - return _context4.finish(28); - - case 32: - return _context4.finish(25); - - case 33: - // 当前页签如已关闭,则打开右键选中页签 - if (items.findIndex(function (_ref11) { - var id = _ref11.id; - return id === _this4.activedTab; - }) === -1) { - $router.replace(nextTab.to); - } - - case 34: - case "end": - return _context4.stop(); - } - } - }, _callee4, this, [[5, 21, 25, 33], [9, 14], [26,, 28, 32]]); - })); - - function closeMulti(_x2) { - return _closeMulti.apply(this, arguments); - } - - return closeMulti; - }(), // 通过路由地址刷新页签 refresh: function refresh(location) { var fullMatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; @@ -1832,36 +2002,36 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }, // 刷新指定页签 refreshTab: function () { - var _refreshTab = _asyncToGenerator( + var _refreshTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee5() { + regenerator_default.a.mark(function _callee3() { var id, - _args5 = arguments; - return regenerator_default.a.wrap(function _callee5$(_context5) { + _args3 = arguments; + return regenerator_default.a.wrap(function _callee3$(_context3) { while (1) { - switch (_context5.prev = _context5.next) { + switch (_context3.prev = _context3.next) { case 0: - id = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : this.activedTab; - _context5.prev = 1; - _context5.next = 4; + id = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : this.activedTab; + _context3.prev = 1; + _context3.next = 4; return this.pageLeavePromise(id, 'refresh'); case 4: this.$refs.routerAlive.clear(id); if (id === this.activedTab) this.reloadRouter(); - _context5.next = 10; + _context3.next = 10; break; case 8: - _context5.prev = 8; - _context5.t0 = _context5["catch"](1); + _context3.prev = 8; + _context3.t0 = _context3["catch"](1); case 10: case "end": - return _context5.stop(); + return _context3.stop(); } } - }, _callee5, this, [[1, 8]]); + }, _callee3, this, [[1, 8]]); })); function refreshTab() { @@ -1876,58 +2046,58 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave */ refreshAll: function () { - var _refreshAll = _asyncToGenerator( + var _refreshAll = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee6() { + regenerator_default.a.mark(function _callee4() { var force, $alive, cache, id, - _args6 = arguments; - return regenerator_default.a.wrap(function _callee6$(_context6) { + _args4 = arguments; + return regenerator_default.a.wrap(function _callee4$(_context4) { while (1) { - switch (_context6.prev = _context6.next) { + switch (_context4.prev = _context4.next) { case 0: - force = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : false; + force = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : false; $alive = this.$refs.routerAlive; cache = $alive.cache; - _context6.t0 = regenerator_default.a.keys(cache); + _context4.t0 = regenerator_default.a.keys(cache); case 4: - if ((_context6.t1 = _context6.t0()).done) { - _context6.next = 20; + if ((_context4.t1 = _context4.t0()).done) { + _context4.next = 20; break; } - id = _context6.t1.value; + id = _context4.t1.value; if (force) { - _context6.next = 17; + _context4.next = 17; break; } - _context6.prev = 7; - _context6.next = 10; + _context4.prev = 7; + _context4.next = 10; return this.pageLeavePromise(id, 'refresh'); case 10: $alive.clear(id); - _context6.next = 15; + _context4.next = 15; break; case 13: - _context6.prev = 13; - _context6.t2 = _context6["catch"](7); + _context4.prev = 13; + _context4.t2 = _context4["catch"](7); case 15: - _context6.next = 18; + _context4.next = 18; break; case 17: $alive.clear(id); case 18: - _context6.next = 4; + _context4.next = 4; break; case 20: @@ -1935,10 +2105,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat case 21: case "end": - return _context6.stop(); + return _context4.stop(); } } - }, _callee6, this, [[7, 13]]); + }, _callee4, this, [[7, 13]]); })); function refreshAll() { @@ -1949,25 +2119,25 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }(), // 重载路由组件 reloadRouter: function () { - var _reloadRouter = _asyncToGenerator( + var _reloadRouter = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee7() { + regenerator_default.a.mark(function _callee5() { var ignoreTransition, - _args7 = arguments; - return regenerator_default.a.wrap(function _callee7$(_context7) { + _args5 = arguments; + return regenerator_default.a.wrap(function _callee5$(_context5) { while (1) { - switch (_context7.prev = _context7.next) { + switch (_context5.prev = _context5.next) { case 0: - ignoreTransition = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : false; + ignoreTransition = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false; this.isRouterAlive = false; // 默认在页面过渡结束后会设置 isRouterAlive 为 true // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改 if (!ignoreTransition) { - _context7.next = 6; + _context5.next = 6; break; } - _context7.next = 5; + _context5.next = 5; return this.$nextTick(); case 5: @@ -1975,10 +2145,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat case 6: case "end": - return _context7.stop(); + return _context5.stop(); } } - }, _callee7, this); + }, _callee5, this); })); function reloadRouter() { @@ -1995,45 +2165,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat onPageTransitionEnd: function onPageTransitionEnd() { if (!this.isRouterAlive) this.isRouterAlive = true; }, - // 显示页签右键菜单 - showContextmenu: function showContextmenu(id, index, e) { - // 菜单定位 - var _ref12 = e || emptyObj, - top = _ref12.clientY, - left = _ref12.clientX; - - Object.assign(this.contextmenu, { - id: id, - index: index, - top: top, - left: left - }); - }, - // 关闭页签右键菜单 - hideContextmenu: function hideContextmenu() { - this.showContextmenu(null, -1); - }, - // Tab滚动 - tabScroll: function tabScroll(direction) { - var $tab = this.$el.querySelector('.router-tab-header'); - var $scr = $tab.querySelector('.router-tab-scroll'); - var space = $tab.clientWidth - 110; - scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space)); - }, - // 调整Tab滚动显示 - adjust: function adjust() { - var $tab = this.$el.querySelector('.router-tab-header'); - var $scr = $tab.querySelector('.router-tab-scroll'); - var $nav = $scr.querySelector('.router-tab-nav'); - var $cur = $nav.querySelector('.actived'); - var isScroll = $nav.clientWidth > $scr.clientWidth; // 判断是否需要滚动 - - $tab.classList[isScroll ? 'add' : 'remove']('is-scroll'); - - if ($cur && isScroll) { - scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2); - } - }, // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型 fixCommentPage: function fixCommentPage() { if (this.$refs.routerAlive.$el.nodeType === 8) { @@ -2042,8 +2173,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat } } }); -// CONCATENATED MODULE: ./src/components/RouterTab.js?vue&type=script&lang=js& - /* harmony default export */ var components_RouterTabvue_type_script_lang_js_ = (RouterTabvue_type_script_lang_js_); +// CONCATENATED MODULE: ./src/components/RouterTab?vue&type=script&lang=js& + /* harmony default export */ var components_RouterTab_vue_type_script_lang_js_ = (RouterTab_vue_type_script_lang_js_); // EXTERNAL MODULE: ./src/scss/routerTab.scss?vue&type=style&index=0&lang=scss& var routerTabvue_type_style_index_0_lang_scss_ = __webpack_require__("e42d"); @@ -2145,7 +2276,7 @@ function normalizeComponent ( } } -// CONCATENATED MODULE: ./src/components/RouterTab.vue +// CONCATENATED MODULE: ./src/components/RouterTab/RouterTab.vue @@ -2156,8 +2287,8 @@ function normalizeComponent ( /* normalize component */ var component = normalizeComponent( - components_RouterTabvue_type_script_lang_js_, - RouterTabvue_type_template_id_053ff978_render, + components_RouterTab_vue_type_script_lang_js_, + RouterTabvue_type_template_id_8bd0c2cc_render, staticRenderFns, false, null, @@ -2208,18 +2339,19 @@ var component = normalizeComponent( this._ctorId = ctorId; } }); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=template&id=5f2f2831& -var Iframevue_type_template_id_5f2f2831_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab-iframe-fake"})} -var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=template&id=0c8e4776& +var Iframevue_type_template_id_0c8e4776_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab-iframe-fake"})} +var Iframevue_type_template_id_0c8e4776_staticRenderFns = [] -// CONCATENATED MODULE: ./src/page/Iframe.vue?vue&type=template&id=5f2f2831& +// CONCATENATED MODULE: ./src/page/Iframe.vue?vue&type=template&id=0c8e4776& // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=script&lang=js& // // // // +// iframe 页签页面 /* harmony default export */ var Iframevue_type_script_lang_js_ = ({ name: 'Iframe', props: { @@ -2255,6 +2387,7 @@ var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] deactivated: function deactivated() { this.$routerTab.currentIframe = null; }, + // 组件销毁后移除 iframe destroyed: function destroyed() { var src = this.src; var iframes = this.$routerTab.iframes; @@ -2277,8 +2410,8 @@ var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] var Iframe_component = normalizeComponent( page_Iframevue_type_script_lang_js_, - Iframevue_type_template_id_5f2f2831_render, - Iframevue_type_template_id_5f2f2831_staticRenderFns, + Iframevue_type_template_id_0c8e4776_render, + Iframevue_type_template_id_0c8e4776_staticRenderFns, false, null, null, diff --git a/dist/lib/vue-router-tab.common.js.map b/dist/lib/vue-router-tab.common.js.map index d5a9dae1..e9792e07 100644 --- a/dist/lib/vue-router-tab.common.js.map +++ b/dist/lib/vue-router-tab.common.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./src/scss/transition.scss?86e9","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./src/scss/routerTab.scss?81c9","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab.vue?d199","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/rules.js","webpack://vue-router-tab/./src/util/alive.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/mixins/routerTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab.js","webpack://vue-router-tab/./src/components/RouterTab.js?39cc","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?787e","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["emptyObj","Object","create","emptyArray","isDef","v","undefined","debounce","fn","delay","timeout","context","args","arguments","clearTimeout","setTimeout","call","path","route","fullpath","fullPath","replace","hash","getAliveId","$route","rule","meta","aliveId","rules","toLowerCase","bind","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","i","length","c","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","getPathWithoutHash","isAlikeRoute","route1","route2","getRouteComponent","matched","components","default","isSameComponentRoute","tab","untitled","contextmenu","refresh","refreshAll","close","closeLefts","closeRights","closeOthers","msg","keepOneTab","zhCN","en","name","props","type","String","Function","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","tag","key","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","methods","item","$emit","remove","clear","iframes","currentIframe","getIframePath","src","title","icon","basePath","encodeURIComponent","openIframeTab","$router","push","closeIframeTab","refreshIframeTab","RouterAlive","mixins","iframe","i18n","tabs","routerView","tabTransition","pageTransition","mode","loading","items","activedTab","isRouterAlive","id","index","computed","lang","langs","isContextTabActived","isContextTabCanBeClosed","contextTab","closable","tabsLeft","slice","filter","tabsRight","tabsOther","tid","watch","hideContextmenu","updateActivedTab","fixCommentPage","$nextTick","$cur","querySelector","$scr","cLeft","offsetLeft","sLeft","clientWidth","adjust","val","old","document","addEventListener","onClick","e","target","removeEventListener","Vue","prototype","created","getTabItems","beforeEach","routerPageLeaveGuard","mounted","window","onResize","destroyed","to","from","next","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","pageLeavePromise","then","catch","ids","map","tips","match","getRouteTab","updateTab","matchIdx","findIndex","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","find","split","Promise","resolve","reject","beforePageLeave","$vnode","Ctor","options","removeTab","Error","closeTab","nextTab","console","warn","closeMulti","refreshTab","force","ignoreTransition","onTabTransitionEnd","onPageTransitionEnd","showContextmenu","clientY","clientX","tabScroll","direction","$tab","space","$nav","isScroll","classList","nodeType","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","component","Iframe","params","RouterTab","install","installed","mixin","routerPage","use","RouterTabRoutes","routes"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFA,uC;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,MAAqB;;;;;;;;;ACA9C;AAAA;AAAA;AAA0Y,CAAgB,+bAAG,EAAC,C;;;;;;;ACA9Z,gC;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AA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","file":"vue-router-tab.common.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","// extracted by mini-css-extract-plugin","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = require(\"vue\");","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":tips || title || '',\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(title || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 页签规则\r\nexport default {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n","import rules from './rules'\r\n\r\n// 获取缓存 id\r\nexport function getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","// iframe 页签功能混入\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj, emptyArray, debounce } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { scrollTo } from '../util/dom'\r\nimport { isAlikeRoute, getPathWithoutHash } from '../util/route'\r\n\r\n// 语言配置\r\nimport langs from '../lang'\r\n\r\n// 子组件\r\nimport RouterAlive from './RouterAlive'\r\n\r\n// 功能混入\r\nimport iframe from '../mixins/routerTab/iframe'\r\n\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ iframe ],\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: RouterAlive.props.aliveId,\r\n\r\n // 语言配置\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n i18n: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true,\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = null\r\n let i18n = this.i18n\r\n\r\n if (typeof i18n === 'string') {\r\n lang = langs[i18n]\r\n } else if (typeof i18n === 'object') {\r\n lang = i18n\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n },\r\n\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.hideContextmenu()\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n },\r\n\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=053ff978&\"\nimport script from \"./RouterTab.js?vue&type=script&lang=js&\"\nexport * from \"./RouterTab.js?vue&type=script&lang=js&\"\nimport style0 from \"../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=5f2f2831&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./src/scss/transition.scss?86e9","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./src/scss/routerTab.scss?81c9","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue?9f5c","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/components/RouterTab/rule.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/components/RouterTab/contextmenu.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/util/warn.js","webpack://vue-router-tab/./src/components/RouterTab/i18n.js","webpack://vue-router-tab/./src/components/RouterTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab/pageLeave.js","webpack://vue-router-tab/./src/components/RouterTab/scroll.js","webpack://vue-router-tab/./src/components/RouterTab/index.js","webpack://vue-router-tab/./src/components/RouterTab","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?e1a2","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["emptyObj","Object","create","emptyArray","isDef","v","undefined","debounce","fn","delay","timeout","context","args","arguments","clearTimeout","setTimeout","call","getPathWithoutHash","route","hash","fullPath","replace","isAlikeRoute","route1","route2","getRouteComponent","matched","length","components","default","isSameComponentRoute","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","i","c","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","rules","path","fullpath","props","aliveId","type","String","Function","methods","getAliveId","$route","rule","meta","toLowerCase","bind","name","mixins","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","tag","key","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","item","$emit","remove","clear","contextmenu","id","index","computed","isContextTabActived","activedTab","isContextTabCanBeClosed","items","contextTab","closable","tabsLeft","slice","filter","tabsRight","tabsOther","tid","watch","hideContextmenu","val","old","document","addEventListener","onClick","e","target","querySelector","removeEventListener","showContextmenu","clientY","clientX","closeMulti","tabs","$router","nextTab","find","removeTab","findIndex","to","tab","untitled","refresh","refreshAll","close","closeLefts","closeRights","closeOthers","msg","keepOneTab","i18nProp","zhCN","en","prefix","assert","condition","message","Error","warn","process","language","i18n","lang","langs","i18nText","text","ii8nParse","params","hasI18nProp","_hasI18nPropWarn","res","exec","iframes","currentIframe","getIframePath","src","title","icon","basePath","encodeURIComponent","openIframeTab","push","closeIframeTab","refreshIframeTab","created","beforeEach","routerPageLeaveGuard","from","next","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","pageLeavePromise","then","catch","Promise","resolve","reject","beforePageLeave","$vnode","Ctor","options","$nextTick","$cur","$scr","cLeft","offsetLeft","sLeft","clientWidth","adjust","mounted","window","onResize","destroyed","tabScroll","direction","$tab","space","$nav","isScroll","classList","RouterAlive","iframe","pageLeave","scroll","routerView","tabTransition","pageTransition","mode","loading","isRouterAlive","updateActivedTab","fixCommentPage","Vue","prototype","getTabItems","ids","map","tips","match","getRouteTab","updateTab","matchIdx","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","split","closeTab","console","refreshTab","force","ignoreTransition","onTabTransitionEnd","onPageTransitionEnd","nodeType","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","component","Iframe","RouterTab","install","installed","mixin","routerPage","use","RouterTabRoutes","routes"],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFA,uC;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,MAAqB;;;;;;;;;ACA9C;AAAA;AAAA;AAA0Y,CAAgB,+bAAG,EAAC,C;;;;;;;ACA9Z,gC;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AA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gB;AACrB,UAAI,CAAC,KAAK3B,aAAV,EAAyB,KAAKA,aAAL,GAAqB,IAArB;AAC1B,KA5LM;AA8LP;AACAE,kBA/LO,4BA+LW;AAChB,UAAI,KAAKzC,KAAL,CAAWnG,WAAX,CAAuB5D,GAAvB,CAA2BkO,QAA3B,KAAwC,CAA5C,EAA+C;AAC7C,aAAKzK,YAAL,CAAkB,IAAlB;AACD;AACF;AAnMM;AA9DI,CAAf,E;;AClB8S,CAAgB,oHAAG,EAAC,C;;;;;;;;ACAlU;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC5FwF;AAChC;AACL;AAC6B;AACC;;;AAGjF;AAC6F;AAC7F,gBAAgB,kBAAU;AAC1B,EAAE,6CAAM;AACR,EAAE,6CAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,+D;;ACpBf;AACe;AACb;AACA0F,SAFa,qBAEF;AAAA,QACDxH,MADC,GACkB,IADlB,CACDA,MADC;AAAA,QACO4I,MADP,GACkB,IADlB,CACOA,MADP;AAET,QAAMT,MAAM,GAAGS,MAAM,IAAIA,MAAM,CAAC7G,IAAP,CAAYE,WAArC;AAEA,QAAI,CAACkG,MAAL,EAAa,OAAO,KAAP,CAJJ,CAMT;;AACA,SAAKqE,aAAL,GAAqB,IAArB;AAEA,QAAMtL,GAAG,GAAGiH,MAAM,CAACpI,UAAP,CAAkBC,MAAlB,CAAZ,CATS,CA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","file":"vue-router-tab.common.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","// extracted by mini-css-extract-plugin","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = require(\"vue\");","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":_vm.i18nText(tips || title) || _vm.lang.tab.untitled,\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(_vm.i18nText(title) || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 内置规则\r\nconst rules = {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n\r\n// 页签缓存规则\r\nexport default {\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取缓存 id\r\n getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nimport rule from './RouterTab/rule'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n mixins: [ rule ],\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","import { emptyObj, emptyArray } from '../../util'\r\n\r\n// 右键菜单\r\nexport default {\r\n data () {\r\n return {\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.hideContextmenu()\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签',\r\n i18nProp: '请提供“i18n”方法以处理国际化内容'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab',\r\n i18nProp: 'Method \"i18n\" is not defined on the instance'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","const prefix = '[vue-router-tab]'\r\n\r\n// 错误\r\nexport function assert (condition, message) {\r\n if (!condition) {\r\n throw new Error(`${prefix} ${message}`)\r\n }\r\n}\r\n\r\n// 警告\r\nexport function warn (condition, message) {\r\n if (process.env.NODE_ENV !== 'production' && !condition) {\r\n typeof console !== 'undefined' && console.warn(`${prefix} ${message}`)\r\n }\r\n}\r\n","import langs from '../../lang' // 语言配置\r\nimport { warn } from '../../util/warn'\r\n\r\n// 国际化\r\nexport default {\r\n props: {\r\n // 组件语言\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n language: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 页签国际化配置 i18n (key, [args])\r\n i18n: Function\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = this.language\r\n\r\n if (typeof lang === 'string') {\r\n lang = langs[lang]\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取国际化内容\r\n i18nText (text) {\r\n let { key, params } = this.ii8nParse(text)\r\n\r\n if (key) {\r\n const hasI18nProp = typeof this.i18n === 'function'\r\n\r\n // 未配置 i18n 方法则警告\r\n if (!this._hasI18nPropWarn) {\r\n warn(hasI18nProp, this.lang.msg.i18nProp)\r\n this._hasI18nPropWarn = true\r\n }\r\n\r\n if (hasI18nProp) {\r\n return this.i18n(key, params)\r\n }\r\n }\r\n\r\n return text\r\n },\r\n\r\n // 解析国际化\r\n ii8nParse (text) {\r\n let key\r\n let params\r\n\r\n // 获取国际化配置\r\n if (typeof text === 'string') {\r\n // 字符串方式配置:'i18n:custom.lang.key'\r\n const res = /^i18n:([^\\s]+)$/.exec(text)\r\n\r\n if (res) {\r\n key = res[1]\r\n params = []\r\n }\r\n } else if (Array.isArray(text)) {\r\n // 数组方式配置:['tab.i18n.key', 'param1', 'param2', ...]\r\n [key, ...params] = text\r\n }\r\n\r\n return { key, params }\r\n }\r\n }\r\n}\r\n","// iframe 页签\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../../util'\r\nimport { isAlikeRoute } from '../../util/route'\r\n\r\n// 页面离开\r\nexport default {\r\n created () {\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n },\r\n\r\n methods: {\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import { debounce } from '../../util'\r\nimport { scrollTo } from '../../util/dom'\r\n\r\n// 页签滚动\r\nexport default {\r\n watch: {\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n }\r\n },\r\n\r\n created () {\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj } from '../../util'\r\nimport { getPathWithoutHash } from '../../util/route'\r\n\r\n// 子组件\r\nimport RouterAlive from '../RouterAlive'\r\n\r\n// 功能模块混入\r\nimport contextmenu from './contextmenu'\r\nimport i18n from './i18n'\r\nimport iframe from './iframe'\r\nimport pageLeave from './pageLeave'\r\nimport rule from './rule'\r\nimport scroll from './scroll'\r\n\r\n// RouterTab 组件\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ contextmenu, i18n, iframe, pageLeave, rule, scroll ],\r\n props: {\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n },\r\n\r\n methods: {\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=8bd0c2cc&\"\nimport script from \"./index.js?vue&type=script&lang=js&\"\nexport * from \"./index.js?vue&type=script&lang=js&\"\nimport style0 from \"../../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=0c8e4776&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/lib/vue-router-tab.umd.js b/dist/lib/vue-router-tab.umd.js index 9b063173..4f9a1a0d 100644 --- a/dist/lib/vue-router-tab.umd.js +++ b/dist/lib/vue-router-tab.umd.js @@ -899,15 +899,15 @@ if (typeof window !== 'undefined') { // Indicate to webpack that this file can be concatenated /* harmony default export */ var setPublicPath = (null); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/RouterTab.vue?vue&type=template&id=053ff978& -var RouterTabvue_type_template_id_053ff978_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab"},[_c('header',{staticClass:"router-tab-header"},[_c('div',{staticClass:"router-tab-scroll"},[_c('transition-group',_vm._b({staticClass:"router-tab-nav",attrs:{"tag":"ul"},on:{"after-enter":_vm.onTabTransitionEnd,"after-leave":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){ +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/RouterTab/RouterTab.vue?vue&type=template&id=8bd0c2cc& +var RouterTabvue_type_template_id_8bd0c2cc_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab"},[_c('header',{staticClass:"router-tab-header"},[_c('div',{staticClass:"router-tab-scroll"},[_c('transition-group',_vm._b({staticClass:"router-tab-nav",attrs:{"tag":"ul"},on:{"after-enter":_vm.onTabTransitionEnd,"after-leave":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){ var id = ref.id; var to = ref.to; var title = ref.title; var icon = ref.icon; var tips = ref.tips; var closable = ref.closable; -return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{"tag":"li","title":tips || title || '',"to":to},nativeOn:{"contextmenu":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t("default",[(icon)?_c('i',{staticClass:"tab-icon",class:icon}):_vm._e(),_c('span',{staticClass:"tab-title"},[_vm._v(_vm._s(title || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:"tab-close",attrs:{"title":_vm.lang.contextmenu.close},on:{"click":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{ +return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{"tag":"li","title":_vm.i18nText(tips || title) || _vm.lang.tab.untitled,"to":to},nativeOn:{"contextmenu":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t("default",[(icon)?_c('i',{staticClass:"tab-icon",class:icon}):_vm._e(),_c('span',{staticClass:"tab-title"},[_vm._v(_vm._s(_vm.i18nText(title) || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:"tab-close",attrs:{"title":_vm.lang.contextmenu.close},on:{"click":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{ tab: _vm.items[index], tabs: _vm.items, index: index @@ -915,7 +915,7 @@ return _c('router-link',{key:id || to,staticClass:"router-tab-item",class:{ acti var staticRenderFns = [] -// CONCATENATED MODULE: ./src/components/RouterTab.vue?vue&type=template&id=053ff978& +// CONCATENATED MODULE: ./src/components/RouterTab/RouterTab.vue?vue&type=template&id=8bd0c2cc& // EXTERNAL MODULE: ./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js var regenerator = __webpack_require__("4795"); @@ -946,34 +946,23 @@ function debounce(fn) { }, delay); }; } -// CONCATENATED MODULE: ./src/util/rules.js -// 页签规则 -/* harmony default export */ var rules = ({ - // 地址,例如:"/page/1?type=a#title" 则取 "/page/1" - path: function path(route) { - return route.path; - }, - // 完整地址 (忽略hash),例如:"/page/1?type=a#title" 则取 "/page/1?type=a" - fullpath: function fullpath(route) { - return route.fullPath.replace(route.hash, ''); - } -}); -// CONCATENATED MODULE: ./src/util/alive.js - // 获取缓存 id - -function getAliveId() { - var route = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$route; - var rule = route.meta && route.meta.aliveId || this.aliveId; +// CONCATENATED MODULE: ./src/util/route.js +// 获取路由不带hash的路径 +function getPathWithoutHash(route) { + return route.hash ? route.fullPath.replace(route.hash, '') : route.fullPath; +} // 是否相似路由 - if (typeof rule === 'string') { - rule = rules[rule.toLowerCase()]; - } +function isAlikeRoute(route1, route2) { + return getPathWithoutHash(route1) === getPathWithoutHash(route2); +} // 获取路由页面组件 - if (typeof rule !== 'function') { - rule = rules.path; - } +function getRouteComponent(_ref) { + var matched = _ref.matched; + return matched[matched.length - 1].components.default; +} // 路由是否共用组件 - return rule.bind(this)(route); +function isSameComponentRoute(route1, route2) { + return getRouteComponent(route1) === getRouteComponent(route2); } // CONCATENATED MODULE: ./src/util/dom.js // 滚动 @@ -1009,64 +998,44 @@ function getFirstComponentChild(children) { function isAsyncPlaceholder(node) { return node.isComment && node.asyncFactory; } -// CONCATENATED MODULE: ./src/util/route.js -// 获取路由不带hash的路径 -function getPathWithoutHash(route) { - return route.hash ? route.fullPath.replace(route.hash, '') : route.fullPath; -} // 是否相似路由 - -function isAlikeRoute(route1, route2) { - return getPathWithoutHash(route1) === getPathWithoutHash(route2); -} // 获取路由页面组件 - -function getRouteComponent(_ref) { - var matched = _ref.matched; - return matched[matched.length - 1].components.default; -} // 路由是否共用组件 - -function isSameComponentRoute(route1, route2) { - return getRouteComponent(route1) === getRouteComponent(route2); -} -// CONCATENATED MODULE: ./src/lang/zh-CN.js -/* harmony default export */ var zh_CN = ({ - tab: { - untitled: '无标题' - }, - contextmenu: { - refresh: '刷新', - refreshAll: '刷新所有', - close: '关闭', - closeLefts: '关闭左侧', - closeRights: '关闭右侧', - closeOthers: '关闭其他' +// CONCATENATED MODULE: ./src/components/RouterTab/rule.js +// 内置规则 +var rules = { + // 地址,例如:"/page/1?type=a#title" 则取 "/page/1" + path: function path(route) { + return route.path; }, - msg: { - keepOneTab: '至少应保留1个页签' + // 完整地址 (忽略hash),例如:"/page/1?type=a#title" 则取 "/page/1?type=a" + fullpath: function fullpath(route) { + return route.fullPath.replace(route.hash, ''); } -}); -// CONCATENATED MODULE: ./src/lang/en.js -/* harmony default export */ var en = ({ - tab: { - untitled: 'Untitled' - }, - contextmenu: { - refresh: 'Refresh', - refreshAll: 'Refresh All', - close: 'Close', - closeLefts: 'Close to the Left', - closeRights: 'Close to the Right', - closeOthers: 'Close Others' +}; // 页签缓存规则 + +/* harmony default export */ var rule = ({ + props: { + // 缓存id,如果为函数,则参数为route + aliveId: { + type: [String, Function], + default: 'path' + } }, - msg: { - keepOneTab: 'Keep at least 1 tab' - } -}); -// CONCATENATED MODULE: ./src/lang/index.js + methods: { + // 获取缓存 id + getAliveId: function getAliveId() { + var route = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.$route; + var rule = route.meta && route.meta.aliveId || this.aliveId; + if (typeof rule === 'string') { + rule = rules[rule.toLowerCase()]; + } -/* harmony default export */ var src_lang = ({ - 'zh-CN': zh_CN, - en: en + if (typeof rule !== 'function') { + rule = rules.path; + } + + return rule.bind(this)(route); + } + } }); // CONCATENATED MODULE: ./src/components/RouterAlive.js @@ -1075,13 +1044,7 @@ function isSameComponentRoute(route1, route2) { /* harmony default export */ var RouterAlive = ({ name: 'RouterAlive', - props: { - // 缓存id,如果为函数,则参数为route - aliveId: { - type: [String, Function], - default: 'path' - } - }, + mixins: [rule], beforeCreate: function beforeCreate() { Object.assign(this, { cache: Object.create(null), @@ -1150,7 +1113,6 @@ function isSameComponentRoute(route1, route2) { return vnode || slot && slot[0]; }, methods: { - getAliveId: getAliveId, // 设置缓存项 set: function set(key, item) { var cache = this.cache; @@ -1182,120 +1144,18 @@ function isSameComponentRoute(route1, route2) { } } }); -// CONCATENATED MODULE: ./src/mixins/routerTab/iframe.js -// iframe 页签功能混入 -/* harmony default export */ var iframe = ({ - data: function data() { - return { - iframes: [], - currentIframe: null - }; - }, - methods: { - // 获取 iframe 页签路由路径 - getIframePath: function getIframePath(src) { - var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var icon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var path = "".concat(this.basePath, "/iframe/").concat(encodeURIComponent(src)); - - if (title) { - path += '/' + title; - - if (icon) { - path += '/' + icon; - } - } - - return path; - }, - // 打开 iframe 页签 - openIframeTab: function openIframeTab(src, title, icon) { - var path = this.getIframePath(src, title, icon); - this.$router.push(path); - }, - // 关闭 iframe 页签 - closeIframeTab: function closeIframeTab(src) { - var path = this.getIframePath(src); - this.close(path, false); - }, - // 刷新 iframe 页签 - refreshIframeTab: function refreshIframeTab(src) { - var path = this.getIframePath(src); - this.refresh(path, false); - } - } -}); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader??ref--13-0!./src/components/RouterTab.js?vue&type=script&lang=js& +// CONCATENATED MODULE: ./src/components/RouterTab/contextmenu.js function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + // 右键菜单 - // 方法 - - - - - // 语言配置 - - // 子组件 - - // 功能混入 - - -/* harmony default export */ var RouterTabvue_type_script_lang_js_ = ({ - name: 'RouterTab', - components: { - RouterAlive: RouterAlive - }, - mixins: [iframe], - props: { - // 缓存id,如果为函数,则参数为route - aliveId: RouterAlive.props.aliveId, - // 语言配置 - // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en' - // - 为对象时,可设置自定义的语言 - i18n: { - type: [String, Object], - default: 'zh-CN' - }, - // 初始页签数据 - tabs: { - type: Array, - default: function _default() { - return []; - } - }, - // router-view组件配置 - routerView: Object, - // 页签过渡效果 - tabTransition: { - type: [String, Object], - default: 'router-tab-zoom' - }, - // 页面过渡效果 - pageTransition: { - type: [String, Object], - default: function _default() { - return { - name: 'router-tab-swap', - mode: 'out-in' - }; - } - } - }, +/* harmony default export */ var RouterTab_contextmenu = ({ data: function data() { return { - loading: false, - // 路由页面loading - items: [], - // 页签项 - activedTab: null, - // 当前激活的页签 - isRouterAlive: true, // 右键菜单 contextmenu: { id: null, @@ -1306,21 +1166,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }; }, computed: { - // 语言内容 - lang: function lang() { - var lang = null; - var i18n = this.i18n; - - if (typeof i18n === 'string') { - lang = src_lang[i18n]; - } else if (_typeof(i18n) === 'object') { - lang = i18n; - } // 找不到语言配置,则使用英文 - - - if (!lang) lang = src_lang['en']; - return lang; - }, // 右键菜单是否当前页签 isContextTabActived: function isContextTabActived() { return this.contextmenu.id === this.activedTab; @@ -1368,25 +1213,428 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat watch: { // 路由切换更新激活的页签 $route: function $route(_$route) { - this.loading = false; this.hideContextmenu(); - this.updateActivedTab(); - this.fixCommentPage(); }, - activedTab: function () { - var _activedTab = _asyncToGenerator( + // 监听右键菜单显示关闭 + 'contextmenu.id': function contextmenuId(val, old) { + var _this = this; + + if (!old && val) { + // 显示右键菜单,绑定点击关闭事件 + document.addEventListener('click', this.onClick = function (e) { + if (e.target !== _this.$el.querySelector('.router-tab-contextmenu')) { + _this.hideContextmenu(); + } + }); + } else if (old && !val) { + // 隐藏右键菜单,移除点击关闭事件 + document.removeEventListener('click', this.onClick); + } + } + }, + methods: { + // 显示页签右键菜单 + showContextmenu: function showContextmenu(id, index, e) { + // 菜单定位 + var _ref4 = e || emptyObj, + top = _ref4.clientY, + left = _ref4.clientX; + + Object.assign(this.contextmenu, { + id: id, + index: index, + top: top, + left: left + }); + }, + // 关闭页签右键菜单 + hideContextmenu: function hideContextmenu() { + this.showContextmenu(null, -1); + }, + // 关闭多个页签 + closeMulti: function () { + var _closeMulti = _asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee() { - var $cur, $scr, cLeft, sLeft; + regenerator_default.a.mark(function _callee(tabs) { + var _this2 = this; + + var items, $router, contextmenu, nextTab, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, id; + return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - _context.next = 2; - return this.$nextTick(); - - case 2: - $cur = this.$el.querySelector('.router-tab-nav .actived'); + items = this.items, $router = this.$router, contextmenu = this.contextmenu; + nextTab = items.find(function (_ref5) { + var id = _ref5.id; + return id === contextmenu.id; + }); + _iteratorNormalCompletion = true; + _didIteratorError = false; + _iteratorError = undefined; + _context.prev = 5; + _iterator = tabs[Symbol.iterator](); + + case 7: + if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { + _context.next = 19; + break; + } + + id = _step.value.id; + _context.prev = 9; + _context.next = 12; + return this.removeTab(id); + + case 12: + _context.next = 16; + break; + + case 14: + _context.prev = 14; + _context.t0 = _context["catch"](9); + + case 16: + _iteratorNormalCompletion = true; + _context.next = 7; + break; + + case 19: + _context.next = 25; + break; + + case 21: + _context.prev = 21; + _context.t1 = _context["catch"](5); + _didIteratorError = true; + _iteratorError = _context.t1; + + case 25: + _context.prev = 25; + _context.prev = 26; + + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + + case 28: + _context.prev = 28; + + if (!_didIteratorError) { + _context.next = 31; + break; + } + + throw _iteratorError; + + case 31: + return _context.finish(28); + + case 32: + return _context.finish(25); + + case 33: + // 当前页签如已关闭,则打开右键选中页签 + if (items.findIndex(function (_ref6) { + var id = _ref6.id; + return id === _this2.activedTab; + }) === -1) { + $router.replace(nextTab.to); + } + + case 34: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[5, 21, 25, 33], [9, 14], [26,, 28, 32]]); + })); + + function closeMulti(_x) { + return _closeMulti.apply(this, arguments); + } + + return closeMulti; + }() + } +}); +// CONCATENATED MODULE: ./src/lang/zh-CN.js +/* harmony default export */ var zh_CN = ({ + tab: { + untitled: '无标题' + }, + contextmenu: { + refresh: '刷新', + refreshAll: '刷新所有', + close: '关闭', + closeLefts: '关闭左侧', + closeRights: '关闭右侧', + closeOthers: '关闭其他' + }, + msg: { + keepOneTab: '至少应保留1个页签', + i18nProp: '请提供“i18n”方法以处理国际化内容' + } +}); +// CONCATENATED MODULE: ./src/lang/en.js +/* harmony default export */ var en = ({ + tab: { + untitled: 'Untitled' + }, + contextmenu: { + refresh: 'Refresh', + refreshAll: 'Refresh All', + close: 'Close', + closeLefts: 'Close to the Left', + closeRights: 'Close to the Right', + closeOthers: 'Close Others' + }, + msg: { + keepOneTab: 'Keep at least 1 tab', + i18nProp: 'Method "i18n" is not defined on the instance' + } +}); +// CONCATENATED MODULE: ./src/lang/index.js + + +/* harmony default export */ var src_lang = ({ + 'zh-CN': zh_CN, + en: en +}); +// CONCATENATED MODULE: ./src/util/warn.js +var prefix = '[vue-router-tab]'; // 错误 + +function assert(condition, message) { + if (!condition) { + throw new Error("".concat(prefix, " ").concat(message)); + } +} // 警告 + +function warn(condition, message) { + if (false) {} +} +// CONCATENATED MODULE: ./src/components/RouterTab/i18n.js +function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + // 语言配置 + + // 国际化 + +/* harmony default export */ var i18n = ({ + props: { + // 组件语言 + // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en' + // - 为对象时,可设置自定义的语言 + language: { + type: [String, Object], + default: 'zh-CN' + }, + // 页签国际化配置 i18n (key, [args]) + i18n: Function + }, + computed: { + // 语言内容 + lang: function lang() { + var lang = this.language; + + if (typeof lang === 'string') { + lang = src_lang[lang]; + } // 找不到语言配置,则使用英文 + + + if (!lang) lang = src_lang['en']; + return lang; + } + }, + methods: { + // 获取国际化内容 + i18nText: function i18nText(text) { + var _this$ii8nParse = this.ii8nParse(text), + key = _this$ii8nParse.key, + params = _this$ii8nParse.params; + + if (key) { + var hasI18nProp = typeof this.i18n === 'function'; // 未配置 i18n 方法则警告 + + if (!this._hasI18nPropWarn) { + warn(hasI18nProp, this.lang.msg.i18nProp); + this._hasI18nPropWarn = true; + } + + if (hasI18nProp) { + return this.i18n(key, params); + } + } + + return text; + }, + // 解析国际化 + ii8nParse: function ii8nParse(text) { + var key; + var params; // 获取国际化配置 + + if (typeof text === 'string') { + // 字符串方式配置:'i18n:custom.lang.key' + var res = /^i18n:([^\s]+)$/.exec(text); + + if (res) { + key = res[1]; + params = []; + } + } else if (Array.isArray(text)) { + // 数组方式配置:['tab.i18n.key', 'param1', 'param2', ...] + var _text = _toArray(text); + + key = _text[0]; + params = _text.slice(1); + } + + return { + key: key, + params: params + }; + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/iframe.js +// iframe 页签 +/* harmony default export */ var iframe = ({ + data: function data() { + return { + iframes: [], + currentIframe: null + }; + }, + methods: { + // 获取 iframe 页签路由路径 + getIframePath: function getIframePath(src) { + var title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var icon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var path = "".concat(this.basePath, "/iframe/").concat(encodeURIComponent(src)); + + if (title) { + path += '/' + title; + + if (icon) { + path += '/' + icon; + } + } + + return path; + }, + // 打开 iframe 页签 + openIframeTab: function openIframeTab(src, title, icon) { + var path = this.getIframePath(src, title, icon); + this.$router.push(path); + }, + // 关闭 iframe 页签 + closeIframeTab: function closeIframeTab(src) { + var path = this.getIframePath(src); + this.close(path, false); + }, + // 刷新 iframe 页签 + refreshIframeTab: function refreshIframeTab(src) { + var path = this.getIframePath(src); + this.refresh(path, false); + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/pageLeave.js + + // 页面离开 + +/* harmony default export */ var pageLeave = ({ + created: function created() { + this.$router.beforeEach(this.routerPageLeaveGuard); + }, + methods: { + // 页面离开导航守卫 + routerPageLeaveGuard: function routerPageLeaveGuard(to, from, next) { + if (this._isDestroyed) { + var hooks = this.$router.beforeHooks; + var idx = hooks.indexOf(this.routerPageLeaveGuard); // 移除已销毁的RouterTab实例注册的导航守卫 + + if (idx > -1) hooks.splice(idx, 1); + next(); + } else { + var id = this.getAliveId(to); + var $alive = this.$refs.routerAlive; + + var _ref = $alive && $alive.cache[id] || emptyObj, + cacheRoute = _ref.route; // 如果不是相同路由则检查beforePageLeave + + + if (cacheRoute && !isAlikeRoute(to, cacheRoute)) { + this.pageLeavePromise(id, 'replace').then(function () { + return next(); + }).catch(function () { + return next(false); + }); + } else { + next(); + } + } + }, + // 页面离开Promise + pageLeavePromise: function pageLeavePromise(id, type) { + var _this = this; + + return new Promise(function (resolve, reject) { + var $alive = _this.$refs.routerAlive; + + var tab = _this.items.find(function (item) { + return item.id === id; + }); // 当前页签 + + + var _ref2 = $alive.cache[id] || emptyObj, + vm = _ref2.vm; // 缓存数据 + + + var beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave; + + if (typeof beforePageLeave === 'function') { + // 页签关闭前 + beforePageLeave.bind(vm)(resolve, reject, tab, type); + } else { + resolve(); + } + }); + } + } +}); +// CONCATENATED MODULE: ./src/components/RouterTab/scroll.js + + +function scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function scroll_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { scroll_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + + + // 页签滚动 + +/* harmony default export */ var RouterTab_scroll = ({ + watch: { + activedTab: function () { + var _activedTab = scroll_asyncToGenerator( + /*#__PURE__*/ + regenerator_default.a.mark(function _callee() { + var $cur, $scr, cLeft, sLeft; + return regenerator_default.a.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.$nextTick(); + + case 2: + $cur = this.$el.querySelector('.router-tab-nav .actived'); $scr = this.$el.querySelector('.router-tab-scroll'); if ($cur) { @@ -1409,26 +1657,117 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat function activedTab() { return _activedTab.apply(this, arguments); } - - return activedTab; - }(), - // 监听右键菜单显示关闭 - 'contextmenu.id': function contextmenuId(val, old) { - var _this = this; - - if (!old && val) { - // 显示右键菜单,绑定点击关闭事件 - document.addEventListener('click', this.onClick = function (e) { - if (e.target !== _this.$el.querySelector('.router-tab-contextmenu')) { - _this.hideContextmenu(); - } - }); - } else if (old && !val) { - // 隐藏右键菜单,移除点击关闭事件 - document.removeEventListener('click', this.onClick); + + return activedTab; + }() + }, + created: function created() { + this.$nextTick(this.adjust); + }, + mounted: function mounted() { + // 页面载入和浏览器窗口大小改变时调整Tab滚动显示 + window.addEventListener('resize', this.onResize = debounce(this.adjust)); + }, + destroyed: function destroyed() { + // 销毁后移除监听事件 + window.removeEventListener('resize', this.onResize); + }, + methods: { + // Tab滚动 + tabScroll: function tabScroll(direction) { + var $tab = this.$el.querySelector('.router-tab-header'); + var $scr = $tab.querySelector('.router-tab-scroll'); + var space = $tab.clientWidth - 110; + scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space)); + }, + // 调整Tab滚动显示 + adjust: function adjust() { + var $tab = this.$el.querySelector('.router-tab-header'); + var $scr = $tab.querySelector('.router-tab-scroll'); + var $nav = $scr.querySelector('.router-tab-nav'); + var $cur = $nav.querySelector('.actived'); + var isScroll = $nav.clientWidth > $scr.clientWidth; // 判断是否需要滚动 + + $tab.classList[isScroll ? 'add' : 'remove']('is-scroll'); + + if ($cur && isScroll) { + scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2); + } + } + } +}); +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader??ref--13-0!./src/components/RouterTab?vue&type=script&lang=js& + + +function RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function RouterTab_vue_type_script_lang_js_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { RouterTab_vue_type_script_lang_js_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + + // 方法 + + + // 子组件 + + // 功能模块混入 + + + + + + + // RouterTab 组件 + +/* harmony default export */ var RouterTab_vue_type_script_lang_js_ = ({ + name: 'RouterTab', + components: { + RouterAlive: RouterAlive + }, + mixins: [RouterTab_contextmenu, i18n, iframe, pageLeave, rule, RouterTab_scroll], + props: { + // 初始页签数据 + tabs: { + type: Array, + default: function _default() { + return []; + } + }, + // router-view组件配置 + routerView: Object, + // 页签过渡效果 + tabTransition: { + type: [String, Object], + default: 'router-tab-zoom' + }, + // 页面过渡效果 + pageTransition: { + type: [String, Object], + default: function _default() { + return { + name: 'router-tab-swap', + mode: 'out-in' + }; } } }, + data: function data() { + return { + loading: false, + // 路由页面loading + items: [], + // 页签项 + activedTab: null, + // 当前激活的页签 + isRouterAlive: true + }; + }, + watch: { + // 路由切换更新激活的页签 + $route: function $route(_$route) { + this.loading = false; + this.updateActivedTab(); + this.fixCommentPage(); + } + }, beforeCreate: function beforeCreate() { // 添加到原型链 external_commonjs_vue_commonjs2_vue_root_Vue_default.a.prototype.$routerTab = this; // 获取跟路径 @@ -1439,66 +1778,28 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat created: function created() { this.getTabItems(); this.updateActivedTab(); - this.$router.beforeEach(this.routerPageLeaveGuard); - this.$nextTick(this.adjust); - }, - mounted: function mounted() { - // 页面载入和浏览器窗口大小改变时调整Tab滚动显示 - window.addEventListener('resize', this.onResize = debounce(this.adjust)); - }, - destroyed: function destroyed() { - // 销毁后移除监听事件 - window.removeEventListener('resize', this.onResize); }, methods: { - getAliveId: getAliveId, - // 页面离开导航守卫 - routerPageLeaveGuard: function routerPageLeaveGuard(to, from, next) { - if (this._isDestroyed) { - var hooks = this.$router.beforeHooks; - var idx = hooks.indexOf(this.routerPageLeaveGuard); // 移除已销毁的RouterTab实例注册的导航守卫 - - if (idx > -1) hooks.splice(idx, 1); - next(); - } else { - var id = this.getAliveId(to); - var $alive = this.$refs.routerAlive; - - var _ref4 = $alive && $alive.cache[id] || emptyObj, - cacheRoute = _ref4.route; // 如果不是相同路由则检查beforePageLeave - - - if (cacheRoute && !isAlikeRoute(to, cacheRoute)) { - this.pageLeavePromise(id, 'replace').then(function () { - return next(); - }).catch(function () { - return next(false); - }); - } else { - next(); - } - } - }, // 根据初始页签数据生成页签列表 getTabItems: function getTabItems() { - var _this2 = this; + var _this = this; var tabs = this.tabs, $router = this.$router; var ids = {}; this.items = tabs.map(function (item, index) { - var _ref5 = typeof item === 'string' ? { + var _ref = typeof item === 'string' ? { to: item } : item || emptyObj, - to = _ref5.to, - closable = _ref5.closable, - title = _ref5.title, - tips = _ref5.tips; + to = _ref.to, + closable = _ref.closable, + title = _ref.title, + tips = _ref.tips; var route = to && $router.match(to); if (route) { - var tab = _this2.getRouteTab(route); + var tab = _this.getRouteTab(route); var id = tab.id; // 根据id去重 @@ -1519,12 +1820,12 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat this.activedTab = this.getAliveId(); }, // 更新tab数据 - updateTab: function updateTab(key, _ref6) { - var route = _ref6.route, - tab = _ref6.tab; + updateTab: function updateTab(key, _ref2) { + var route = _ref2.route, + tab = _ref2.tab; var items = this.items; - var matchIdx = items.findIndex(function (_ref7) { - var id = _ref7.id; + var matchIdx = items.findIndex(function (_ref3) { + var id = _ref3.id; return id === key; }); var item = Object.assign(this.getRouteTab(route), tab); @@ -1545,8 +1846,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat if (fullMatch) { var matchPath = getPathWithoutHash($route); - var matchTab = this.items.find(function (_ref8) { - var to = _ref8.to; + var matchTab = this.items.find(function (_ref4) { + var to = _ref4.to; return to.split('#')[0] === matchPath; }); @@ -1573,41 +1874,15 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat tips: tips }; }, - // 页面离开Promise - pageLeavePromise: function pageLeavePromise(id, type) { - var _this3 = this; - - return new Promise(function (resolve, reject) { - var $alive = _this3.$refs.routerAlive; - - var tab = _this3.items.find(function (item) { - return item.id === id; - }); // 当前页签 - - - var _ref9 = $alive.cache[id] || emptyObj, - vm = _ref9.vm; // 缓存数据 - - - var beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave; - - if (typeof beforePageLeave === 'function') { - // 页签关闭前 - beforePageLeave.bind(vm)(resolve, reject, tab, type); - } else { - resolve(); - } - }); - }, // 移除tab项 removeTab: function () { - var _removeTab = _asyncToGenerator( + var _removeTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee2(id) { + regenerator_default.a.mark(function _callee(id) { var items, $alive, idx; - return regenerator_default.a.wrap(function _callee2$(_context2) { + return regenerator_default.a.wrap(function _callee$(_context) { while (1) { - switch (_context2.prev = _context2.next) { + switch (_context.prev = _context.next) { case 0: items = this.items; $alive = this.$refs.routerAlive; @@ -1616,34 +1891,34 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }); if (!(items.length === 1)) { - _context2.next = 5; + _context.next = 5; break; } throw new Error(this.lang.msg.keepOneTab); case 5: - _context2.prev = 5; - _context2.next = 8; + _context.prev = 5; + _context.next = 8; return this.pageLeavePromise(id, 'close'); case 8: // 承诺关闭后移除页签和缓存 $alive.remove(id); idx > -1 && items.splice(idx, 1); - _context2.next = 14; + _context.next = 14; break; case 12: - _context2.prev = 12; - _context2.t0 = _context2["catch"](5); + _context.prev = 12; + _context.t0 = _context["catch"](5); case 14: case "end": - return _context2.stop(); + return _context.stop(); } } - }, _callee2, this, [[5, 12]]); + }, _callee, this, [[5, 12]]); })); function removeTab(_x) { @@ -1668,27 +1943,27 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }, // 通过页签id关闭页签 closeTab: function () { - var _closeTab = _asyncToGenerator( + var _closeTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee3() { + regenerator_default.a.mark(function _callee2() { var id, activedTab, items, $router, idx, nextTab, - _args3 = arguments; - return regenerator_default.a.wrap(function _callee3$(_context3) { + _args2 = arguments; + return regenerator_default.a.wrap(function _callee2$(_context2) { while (1) { - switch (_context3.prev = _context3.next) { + switch (_context2.prev = _context2.next) { case 0: - id = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : this.activedTab; + id = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : this.activedTab; activedTab = this.activedTab, items = this.items, $router = this.$router; idx = items.findIndex(function (item) { return item.id === id; }); - _context3.prev = 3; - _context3.next = 6; + _context2.prev = 3; + _context2.next = 6; return this.removeTab(id); case 6: @@ -1698,20 +1973,20 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat $router.replace(nextTab.to); } - _context3.next = 12; + _context2.next = 12; break; case 9: - _context3.prev = 9; - _context3.t0 = _context3["catch"](3); - console.warn(_context3.t0); + _context2.prev = 9; + _context2.t0 = _context2["catch"](3); + console.warn(_context2.t0); case 12: case "end": - return _context3.stop(); + return _context2.stop(); } } - }, _callee3, this, [[3, 9]]); + }, _callee2, this, [[3, 9]]); })); function closeTab() { @@ -1720,111 +1995,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat return closeTab; }(), - // 关闭多个页签 - closeMulti: function () { - var _closeMulti = _asyncToGenerator( - /*#__PURE__*/ - regenerator_default.a.mark(function _callee4(tabs) { - var _this4 = this; - - var items, $router, contextmenu, nextTab, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, id; - - return regenerator_default.a.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - items = this.items, $router = this.$router, contextmenu = this.contextmenu; - nextTab = items.find(function (_ref10) { - var id = _ref10.id; - return id === contextmenu.id; - }); - _iteratorNormalCompletion = true; - _didIteratorError = false; - _iteratorError = undefined; - _context4.prev = 5; - _iterator = tabs[Symbol.iterator](); - - case 7: - if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { - _context4.next = 19; - break; - } - - id = _step.value.id; - _context4.prev = 9; - _context4.next = 12; - return this.removeTab(id); - - case 12: - _context4.next = 16; - break; - - case 14: - _context4.prev = 14; - _context4.t0 = _context4["catch"](9); - - case 16: - _iteratorNormalCompletion = true; - _context4.next = 7; - break; - - case 19: - _context4.next = 25; - break; - - case 21: - _context4.prev = 21; - _context4.t1 = _context4["catch"](5); - _didIteratorError = true; - _iteratorError = _context4.t1; - - case 25: - _context4.prev = 25; - _context4.prev = 26; - - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - - case 28: - _context4.prev = 28; - - if (!_didIteratorError) { - _context4.next = 31; - break; - } - - throw _iteratorError; - - case 31: - return _context4.finish(28); - - case 32: - return _context4.finish(25); - - case 33: - // 当前页签如已关闭,则打开右键选中页签 - if (items.findIndex(function (_ref11) { - var id = _ref11.id; - return id === _this4.activedTab; - }) === -1) { - $router.replace(nextTab.to); - } - - case 34: - case "end": - return _context4.stop(); - } - } - }, _callee4, this, [[5, 21, 25, 33], [9, 14], [26,, 28, 32]]); - })); - - function closeMulti(_x2) { - return _closeMulti.apply(this, arguments); - } - - return closeMulti; - }(), // 通过路由地址刷新页签 refresh: function refresh(location) { var fullMatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; @@ -1841,36 +2011,36 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }, // 刷新指定页签 refreshTab: function () { - var _refreshTab = _asyncToGenerator( + var _refreshTab = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee5() { + regenerator_default.a.mark(function _callee3() { var id, - _args5 = arguments; - return regenerator_default.a.wrap(function _callee5$(_context5) { + _args3 = arguments; + return regenerator_default.a.wrap(function _callee3$(_context3) { while (1) { - switch (_context5.prev = _context5.next) { + switch (_context3.prev = _context3.next) { case 0: - id = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : this.activedTab; - _context5.prev = 1; - _context5.next = 4; + id = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : this.activedTab; + _context3.prev = 1; + _context3.next = 4; return this.pageLeavePromise(id, 'refresh'); case 4: this.$refs.routerAlive.clear(id); if (id === this.activedTab) this.reloadRouter(); - _context5.next = 10; + _context3.next = 10; break; case 8: - _context5.prev = 8; - _context5.t0 = _context5["catch"](1); + _context3.prev = 8; + _context3.t0 = _context3["catch"](1); case 10: case "end": - return _context5.stop(); + return _context3.stop(); } } - }, _callee5, this, [[1, 8]]); + }, _callee3, this, [[1, 8]]); })); function refreshTab() { @@ -1885,58 +2055,58 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave */ refreshAll: function () { - var _refreshAll = _asyncToGenerator( + var _refreshAll = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee6() { + regenerator_default.a.mark(function _callee4() { var force, $alive, cache, id, - _args6 = arguments; - return regenerator_default.a.wrap(function _callee6$(_context6) { + _args4 = arguments; + return regenerator_default.a.wrap(function _callee4$(_context4) { while (1) { - switch (_context6.prev = _context6.next) { + switch (_context4.prev = _context4.next) { case 0: - force = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : false; + force = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : false; $alive = this.$refs.routerAlive; cache = $alive.cache; - _context6.t0 = regenerator_default.a.keys(cache); + _context4.t0 = regenerator_default.a.keys(cache); case 4: - if ((_context6.t1 = _context6.t0()).done) { - _context6.next = 20; + if ((_context4.t1 = _context4.t0()).done) { + _context4.next = 20; break; } - id = _context6.t1.value; + id = _context4.t1.value; if (force) { - _context6.next = 17; + _context4.next = 17; break; } - _context6.prev = 7; - _context6.next = 10; + _context4.prev = 7; + _context4.next = 10; return this.pageLeavePromise(id, 'refresh'); case 10: $alive.clear(id); - _context6.next = 15; + _context4.next = 15; break; case 13: - _context6.prev = 13; - _context6.t2 = _context6["catch"](7); + _context4.prev = 13; + _context4.t2 = _context4["catch"](7); case 15: - _context6.next = 18; + _context4.next = 18; break; case 17: $alive.clear(id); case 18: - _context6.next = 4; + _context4.next = 4; break; case 20: @@ -1944,10 +2114,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat case 21: case "end": - return _context6.stop(); + return _context4.stop(); } } - }, _callee6, this, [[7, 13]]); + }, _callee4, this, [[7, 13]]); })); function refreshAll() { @@ -1958,25 +2128,25 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat }(), // 重载路由组件 reloadRouter: function () { - var _reloadRouter = _asyncToGenerator( + var _reloadRouter = RouterTab_vue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/ - regenerator_default.a.mark(function _callee7() { + regenerator_default.a.mark(function _callee5() { var ignoreTransition, - _args7 = arguments; - return regenerator_default.a.wrap(function _callee7$(_context7) { + _args5 = arguments; + return regenerator_default.a.wrap(function _callee5$(_context5) { while (1) { - switch (_context7.prev = _context7.next) { + switch (_context5.prev = _context5.next) { case 0: - ignoreTransition = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : false; + ignoreTransition = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false; this.isRouterAlive = false; // 默认在页面过渡结束后会设置 isRouterAlive 为 true // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改 if (!ignoreTransition) { - _context7.next = 6; + _context5.next = 6; break; } - _context7.next = 5; + _context5.next = 5; return this.$nextTick(); case 5: @@ -1984,10 +2154,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat case 6: case "end": - return _context7.stop(); + return _context5.stop(); } } - }, _callee7, this); + }, _callee5, this); })); function reloadRouter() { @@ -2004,45 +2174,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat onPageTransitionEnd: function onPageTransitionEnd() { if (!this.isRouterAlive) this.isRouterAlive = true; }, - // 显示页签右键菜单 - showContextmenu: function showContextmenu(id, index, e) { - // 菜单定位 - var _ref12 = e || emptyObj, - top = _ref12.clientY, - left = _ref12.clientX; - - Object.assign(this.contextmenu, { - id: id, - index: index, - top: top, - left: left - }); - }, - // 关闭页签右键菜单 - hideContextmenu: function hideContextmenu() { - this.showContextmenu(null, -1); - }, - // Tab滚动 - tabScroll: function tabScroll(direction) { - var $tab = this.$el.querySelector('.router-tab-header'); - var $scr = $tab.querySelector('.router-tab-scroll'); - var space = $tab.clientWidth - 110; - scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space)); - }, - // 调整Tab滚动显示 - adjust: function adjust() { - var $tab = this.$el.querySelector('.router-tab-header'); - var $scr = $tab.querySelector('.router-tab-scroll'); - var $nav = $scr.querySelector('.router-tab-nav'); - var $cur = $nav.querySelector('.actived'); - var isScroll = $nav.clientWidth > $scr.clientWidth; // 判断是否需要滚动 - - $tab.classList[isScroll ? 'add' : 'remove']('is-scroll'); - - if ($cur && isScroll) { - scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2); - } - }, // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型 fixCommentPage: function fixCommentPage() { if (this.$refs.routerAlive.$el.nodeType === 8) { @@ -2051,8 +2182,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat } } }); -// CONCATENATED MODULE: ./src/components/RouterTab.js?vue&type=script&lang=js& - /* harmony default export */ var components_RouterTabvue_type_script_lang_js_ = (RouterTabvue_type_script_lang_js_); +// CONCATENATED MODULE: ./src/components/RouterTab?vue&type=script&lang=js& + /* harmony default export */ var components_RouterTab_vue_type_script_lang_js_ = (RouterTab_vue_type_script_lang_js_); // EXTERNAL MODULE: ./src/scss/routerTab.scss?vue&type=style&index=0&lang=scss& var routerTabvue_type_style_index_0_lang_scss_ = __webpack_require__("e42d"); @@ -2154,7 +2285,7 @@ function normalizeComponent ( } } -// CONCATENATED MODULE: ./src/components/RouterTab.vue +// CONCATENATED MODULE: ./src/components/RouterTab/RouterTab.vue @@ -2165,8 +2296,8 @@ function normalizeComponent ( /* normalize component */ var component = normalizeComponent( - components_RouterTabvue_type_script_lang_js_, - RouterTabvue_type_template_id_053ff978_render, + components_RouterTab_vue_type_script_lang_js_, + RouterTabvue_type_template_id_8bd0c2cc_render, staticRenderFns, false, null, @@ -2217,18 +2348,19 @@ var component = normalizeComponent( this._ctorId = ctorId; } }); -// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=template&id=5f2f2831& -var Iframevue_type_template_id_5f2f2831_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab-iframe-fake"})} -var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] +// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"33e18d7e-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=template&id=0c8e4776& +var Iframevue_type_template_id_0c8e4776_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"router-tab-iframe-fake"})} +var Iframevue_type_template_id_0c8e4776_staticRenderFns = [] -// CONCATENATED MODULE: ./src/page/Iframe.vue?vue&type=template&id=5f2f2831& +// CONCATENATED MODULE: ./src/page/Iframe.vue?vue&type=template&id=0c8e4776& // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/page/Iframe.vue?vue&type=script&lang=js& // // // // +// iframe 页签页面 /* harmony default export */ var Iframevue_type_script_lang_js_ = ({ name: 'Iframe', props: { @@ -2264,6 +2396,7 @@ var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] deactivated: function deactivated() { this.$routerTab.currentIframe = null; }, + // 组件销毁后移除 iframe destroyed: function destroyed() { var src = this.src; var iframes = this.$routerTab.iframes; @@ -2286,8 +2419,8 @@ var Iframevue_type_template_id_5f2f2831_staticRenderFns = [] var Iframe_component = normalizeComponent( page_Iframevue_type_script_lang_js_, - Iframevue_type_template_id_5f2f2831_render, - Iframevue_type_template_id_5f2f2831_staticRenderFns, + Iframevue_type_template_id_0c8e4776_render, + Iframevue_type_template_id_0c8e4776_staticRenderFns, false, null, null, diff --git a/dist/lib/vue-router-tab.umd.js.map b/dist/lib/vue-router-tab.umd.js.map index 9d42ec92..5ab12761 100644 --- a/dist/lib/vue-router-tab.umd.js.map +++ b/dist/lib/vue-router-tab.umd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://vue-router-tab/webpack/universalModuleDefinition","webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./src/scss/transition.scss?86e9","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./src/scss/routerTab.scss?81c9","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab.vue?d199","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/rules.js","webpack://vue-router-tab/./src/util/alive.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/mixins/routerTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab.js","webpack://vue-router-tab/./src/components/RouterTab.js?39cc","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?787e","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["emptyObj","Object","create","emptyArray","isDef","v","undefined","debounce","fn","delay","timeout","context","args","arguments","clearTimeout","setTimeout","call","path","route","fullpath","fullPath","replace","hash","getAliveId","$route","rule","meta","aliveId","rules","toLowerCase","bind","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","i","length","c","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","getPathWithoutHash","isAlikeRoute","route1","route2","getRouteComponent","matched","components","default","isSameComponentRoute","tab","untitled","contextmenu","refresh","refreshAll","close","closeLefts","closeRights","closeOthers","msg","keepOneTab","zhCN","en","name","props","type","String","Function","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","tag","key","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","methods","item","$emit","remove","clear","iframes","currentIframe","getIframePath","src","title","icon","basePath","encodeURIComponent","openIframeTab","$router","push","closeIframeTab","refreshIframeTab","RouterAlive","mixins","iframe","i18n","tabs","routerView","tabTransition","pageTransition","mode","loading","items","activedTab","isRouterAlive","id","index","computed","lang","langs","isContextTabActived","isContextTabCanBeClosed","contextTab","closable","tabsLeft","slice","filter","tabsRight","tabsOther","tid","watch","hideContextmenu","updateActivedTab","fixCommentPage","$nextTick","$cur","querySelector","$scr","cLeft","offsetLeft","sLeft","clientWidth","adjust","val","old","document","addEventListener","onClick","e","target","removeEventListener","Vue","prototype","created","getTabItems","beforeEach","routerPageLeaveGuard","mounted","window","onResize","destroyed","to","from","next","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","pageLeavePromise","then","catch","ids","map","tips","match","getRouteTab","updateTab","matchIdx","findIndex","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","find","split","Promise","resolve","reject","beforePageLeave","$vnode","Ctor","options","removeTab","Error","closeTab","nextTab","console","warn","closeMulti","refreshTab","force","ignoreTransition","onTabTransitionEnd","onPageTransitionEnd","showContextmenu","clientY","clientX","tabScroll","direction","$tab","space","$nav","isScroll","classList","nodeType","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","component","Iframe","params","RouterTab","install","installed","mixin","routerPage","use","RouterTabRoutes","routes"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFA,uC;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,MAAqB;;;;;;;;;ACA9C;AAAA;AAAA;AAA0Y,CAAgB,+bAAG,EAAC,C;;;;;;;ACA9Z,mD;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;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","file":"vue-router-tab.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue-router-tab\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"vue-router-tab\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","// extracted by mini-css-extract-plugin","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":tips || title || '',\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(title || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 页签规则\r\nexport default {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n","import rules from './rules'\r\n\r\n// 获取缓存 id\r\nexport function getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","// iframe 页签功能混入\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj, emptyArray, debounce } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { scrollTo } from '../util/dom'\r\nimport { isAlikeRoute, getPathWithoutHash } from '../util/route'\r\n\r\n// 语言配置\r\nimport langs from '../lang'\r\n\r\n// 子组件\r\nimport RouterAlive from './RouterAlive'\r\n\r\n// 功能混入\r\nimport iframe from '../mixins/routerTab/iframe'\r\n\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ iframe ],\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: RouterAlive.props.aliveId,\r\n\r\n // 语言配置\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n i18n: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true,\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = null\r\n let i18n = this.i18n\r\n\r\n if (typeof i18n === 'string') {\r\n lang = langs[i18n]\r\n } else if (typeof i18n === 'object') {\r\n lang = i18n\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n },\r\n\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.hideContextmenu()\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n },\r\n\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=053ff978&\"\nimport script from \"./RouterTab.js?vue&type=script&lang=js&\"\nexport * from \"./RouterTab.js?vue&type=script&lang=js&\"\nimport style0 from \"../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=5f2f2831&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://vue-router-tab/webpack/universalModuleDefinition","webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./src/scss/transition.scss?86e9","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./src/scss/routerTab.scss?81c9","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue?9f5c","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/components/RouterTab/rule.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/components/RouterTab/contextmenu.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/util/warn.js","webpack://vue-router-tab/./src/components/RouterTab/i18n.js","webpack://vue-router-tab/./src/components/RouterTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab/pageLeave.js","webpack://vue-router-tab/./src/components/RouterTab/scroll.js","webpack://vue-router-tab/./src/components/RouterTab/index.js","webpack://vue-router-tab/./src/components/RouterTab","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?e1a2","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["emptyObj","Object","create","emptyArray","isDef","v","undefined","debounce","fn","delay","timeout","context","args","arguments","clearTimeout","setTimeout","call","getPathWithoutHash","route","hash","fullPath","replace","isAlikeRoute","route1","route2","getRouteComponent","matched","length","components","default","isSameComponentRoute","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","i","c","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","rules","path","fullpath","props","aliveId","type","String","Function","methods","getAliveId","$route","rule","meta","toLowerCase","bind","name","mixins","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","tag","key","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","item","$emit","remove","clear","contextmenu","id","index","computed","isContextTabActived","activedTab","isContextTabCanBeClosed","items","contextTab","closable","tabsLeft","slice","filter","tabsRight","tabsOther","tid","watch","hideContextmenu","val","old","document","addEventListener","onClick","e","target","querySelector","removeEventListener","showContextmenu","clientY","clientX","closeMulti","tabs","$router","nextTab","find","removeTab","findIndex","to","tab","untitled","refresh","refreshAll","close","closeLefts","closeRights","closeOthers","msg","keepOneTab","i18nProp","zhCN","en","prefix","assert","condition","message","Error","warn","process","language","i18n","lang","langs","i18nText","text","ii8nParse","params","hasI18nProp","_hasI18nPropWarn","res","exec","iframes","currentIframe","getIframePath","src","title","icon","basePath","encodeURIComponent","openIframeTab","push","closeIframeTab","refreshIframeTab","created","beforeEach","routerPageLeaveGuard","from","next","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","pageLeavePromise","then","catch","Promise","resolve","reject","beforePageLeave","$vnode","Ctor","options","$nextTick","$cur","$scr","cLeft","offsetLeft","sLeft","clientWidth","adjust","mounted","window","onResize","destroyed","tabScroll","direction","$tab","space","$nav","isScroll","classList","RouterAlive","iframe","pageLeave","scroll","routerView","tabTransition","pageTransition","mode","loading","isRouterAlive","updateActivedTab","fixCommentPage","Vue","prototype","getTabItems","ids","map","tips","match","getRouteTab","updateTab","matchIdx","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","split","closeTab","console","refreshTab","force","ignoreTransition","onTabTransitionEnd","onPageTransitionEnd","nodeType","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","component","Iframe","RouterTab","install","installed","mixin","routerPage","use","RouterTabRoutes","routes"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFA,uC;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,MAAqB;;;;;;;;;ACA9C;AAAA;AAAA;AAA0Y,CAAgB,+bAAG,EAAC,C;;;;;;;ACA9Z,mD;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;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CAqLe;AACpB,WAAK/C,MAAL;AACD,KAvLM;AAyLP;AACAgD,uBA1LO,iCA0LgB;AACrB,UAAI,CAAC,KAAK3B,aAAV,EAAyB,KAAKA,aAAL,GAAqB,IAArB;AAC1B,KA5LM;AA8LP;AACAE,kBA/LO,4BA+LW;AAChB,UAAI,KAAKzC,KAAL,CAAWnG,WAAX,CAAuB5D,GAAvB,CAA2BkO,QAA3B,KAAwC,CAA5C,EAA+C;AAC7C,aAAKzK,YAAL,CAAkB,IAAlB;AACD;AACF;AAnMM;AA9DI,CAAf,E;;AClB8S,CAAgB,oHAAG,EAAC,C;;;;;;;;ACAlU;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC5FwF;AAChC;AACL;AAC6B;AACC;;;AAGjF;AAC6F;AAC7F,gBAAgB,kBAAU;AAC1B,EAAE,6CAAM;AACR,EAAE,6CAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,+D;;ACpBf;AACe;AACb;AACA0F,SAFa,qBAEF;AAAA,QACDxH,MADC,GACkB,IADlB,CACDA,MADC;AAAA,QACO4I,MADP,GACkB,IADlB,CACOA,MADP;AAET,QAAMT,MAAM,GAAGS,MAAM,IAAIA,MAAM,CAAC7G,IAAP,CAAYE,WAArC;AAEA,QAAI,CAACkG,MAAL,EAAa,OAAO,KAAP,CAJJ,CAMT;;AACA,SAAKqE,aAAL,GAAqB,IAArB;AAEA,QAAMtL,GAAG,GAAGiH,MAAM,CAACpI,UAAP,CAAkBC,MAAlB,CAAZ,CATS,CAWT;;AACA,QAAImB,SAAS,GAAGgH,MAAM,CAACzG,GAAP,CAAWR,GAAX,EAAgB;AAC9B3D,WAAK,EAAEyC,MADuB;AAE9BqB,QAAE,EAAE;AAF0B,KAAhB,CAAhB,CAZS,CAiBT;;AACA,SAAKoL,MAAL,CAAY,UAAZ,EAAwB,UAAUjJ,GAAV,EAAeC,GAAf,EAAoB;AAC1CtC,eAAS,CAACyD,GAAV,GAAgB,OAAOpB,GAAP,KAAe,QAAf,GAA0B;AAAEwD,aAAK,EAAExD;AAAT,OAA1B,GAA2CA,GAA3D;AACA2E,YAAM,CAACzG,GAAP,CAAWR,GAAX,EAAgBC,SAAhB;AACD,KAHD,EAGG;AACDuL,UAAI,EAAE,IADL;AAEDC,eAAS,EAAE;AAFV,KAHH;AAOD,GA3BY;AA6Bb;AACAC,WA9Ba,uBA8BA;AACX,QAAI,CAAC,KAAKJ,aAAV,EAAyB,OAAO,KAAP;AAEzB,QAAIK,MAAM,GAAG,KAAKjE,MAAL,CAAY3J,gBAAZ,CAA6B4J,IAA7B,CAAkCiE,GAA/C,CAHW,CAKX;;AACA,QAAI,KAAKC,OAAL,IAAgB,KAAKA,OAAL,KAAiBF,MAArC,EAA6C;AAC3C,WAAKjL,QAAL;AACA,WAAKC,UAAL,CAAgBqK,UAAhB;AACD;;AAED,SAAKa,OAAL,GAAeF,MAAf;AACD;AA1CY,CAAf,E;;ACDA,IAAI,0CAAM,gBAAgB,aAAa,0BAA0B,wBAAwB,iBAAiB,qCAAqC;AAC/I,IAAI,mDAAe;;;;;;;;;;ACInB;AACA;AACA,gBADA;AAGA;AACA,eADA;AAEA,iBAFA;AAGA;AAHA,GAHA;AASA,MATA,kBASA;AACA;AACA;AADA;AAGA,GAbA;AAeA,SAfA,qBAeA;AAAA,QACA,GADA,GACA,IADA,CACA,GADA;AAAA,QACA,KADA,GACA,IADA,CACA,KADA;AAAA,QACA,IADA,GACA,IADA,CACA,IADA;AAAA,QACA,IADA,GACA,IADA,CACA,UADA;AAAA,QAEA,OAFA,GAEA,IAFA,CAEA,OAFA;AAIA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;;AAEA;AACA,GA1BA;AA4BA,WA5BA,uBA4BA;AACA;AACA,GA9BA;AAgCA,aAhCA,yBAgCA;AACA;AACA,GAlCA;AAoCA;AACA,WArCA,uBAqCA;AAAA,QACA,GADA,GACA,IADA,CACA,GADA;AAAA,QAEA,OAFA,GAEA,eAFA,CAEA,OAFA;AAGA;;AAEA;AACA;AACA;AACA;AA7CA,G;;ACNgU,CAAgB,sGAAG,EAAC,C;;ACA/P;AAC3B;AACL;;;AAGrD;AAC0F;AAC1F,IAAI,gBAAS,GAAG,kBAAU;AAC1B,EAAE,mCAAM;AACR,EAAE,0CAAM;AACR,EAAE,mDAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,2DAAS,Q;;CChBxB;;AACe,4CAAC;AACd;AACAtN,MAAI,EAAE,4BAFQ;AAGdyN,WAAS,EAAEC,MAHG;AAIdxN,OAAK,EAAE,IAJO;AAKdS,MAAI,EAAE;AACJR,WAAO,EAAE,iBAAAnC,KAAK;AAAA,8BAAcA,KAAK,CAACgJ,MAAN,CAAaQ,GAA3B;AAAA;AADV;AALQ,CAAD,CAAf,E;;ACHA;AACA;CAGA;;AACAmG,SAAS,CAACC,OAAV,GAAoB,SAASA,OAAT,CAAkBrC,GAAlB,EAAuBhC,OAAvB,EAAgC;AAClD,MAAIqE,OAAO,CAACC,SAAZ,EAAuB;AACvBD,SAAO,CAACC,SAAR,GAAoB,IAApB;AAEAtC,KAAG,CAACkC,SAAJ,CAAcE,SAAS,CAAC7M,IAAxB,EAA8B6M,SAA9B;AACApC,KAAG,CAACuC,KAAJ,CAAUC,UAAV;AACD,CAND,C,CAQA;;;AACA,IAAI,OAAO9D,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACsB,GAA5C,EAAiD;AAC/CtB,QAAM,CAACsB,GAAP,CAAWyC,GAAX,CAAeL,SAAf;AACD;;AAEcA,iDAAf,E,CAEA;;AACO,IAAMM,eAAe,GAAGC,MAAxB,C;;ACrBP;AAAwB;AACA;AACT,kFAAG;AACI","file":"vue-router-tab.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue-router-tab\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"vue-router-tab\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","// extracted by mini-css-extract-plugin","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":_vm.i18nText(tips || title) || _vm.lang.tab.untitled,\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(_vm.i18nText(title) || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 内置规则\r\nconst rules = {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n\r\n// 页签缓存规则\r\nexport default {\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取缓存 id\r\n getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nimport rule from './RouterTab/rule'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n mixins: [ rule ],\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","import { emptyObj, emptyArray } from '../../util'\r\n\r\n// 右键菜单\r\nexport default {\r\n data () {\r\n return {\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.hideContextmenu()\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签',\r\n i18nProp: '请提供“i18n”方法以处理国际化内容'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab',\r\n i18nProp: 'Method \"i18n\" is not defined on the instance'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","const prefix = '[vue-router-tab]'\r\n\r\n// 错误\r\nexport function assert (condition, message) {\r\n if (!condition) {\r\n throw new Error(`${prefix} ${message}`)\r\n }\r\n}\r\n\r\n// 警告\r\nexport function warn (condition, message) {\r\n if (process.env.NODE_ENV !== 'production' && !condition) {\r\n typeof console !== 'undefined' && console.warn(`${prefix} ${message}`)\r\n }\r\n}\r\n","import langs from '../../lang' // 语言配置\r\nimport { warn } from '../../util/warn'\r\n\r\n// 国际化\r\nexport default {\r\n props: {\r\n // 组件语言\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n language: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 页签国际化配置 i18n (key, [args])\r\n i18n: Function\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = this.language\r\n\r\n if (typeof lang === 'string') {\r\n lang = langs[lang]\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取国际化内容\r\n i18nText (text) {\r\n let { key, params } = this.ii8nParse(text)\r\n\r\n if (key) {\r\n const hasI18nProp = typeof this.i18n === 'function'\r\n\r\n // 未配置 i18n 方法则警告\r\n if (!this._hasI18nPropWarn) {\r\n warn(hasI18nProp, this.lang.msg.i18nProp)\r\n this._hasI18nPropWarn = true\r\n }\r\n\r\n if (hasI18nProp) {\r\n return this.i18n(key, params)\r\n }\r\n }\r\n\r\n return text\r\n },\r\n\r\n // 解析国际化\r\n ii8nParse (text) {\r\n let key\r\n let params\r\n\r\n // 获取国际化配置\r\n if (typeof text === 'string') {\r\n // 字符串方式配置:'i18n:custom.lang.key'\r\n const res = /^i18n:([^\\s]+)$/.exec(text)\r\n\r\n if (res) {\r\n key = res[1]\r\n params = []\r\n }\r\n } else if (Array.isArray(text)) {\r\n // 数组方式配置:['tab.i18n.key', 'param1', 'param2', ...]\r\n [key, ...params] = text\r\n }\r\n\r\n return { key, params }\r\n }\r\n }\r\n}\r\n","// iframe 页签\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../../util'\r\nimport { isAlikeRoute } from '../../util/route'\r\n\r\n// 页面离开\r\nexport default {\r\n created () {\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n },\r\n\r\n methods: {\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import { debounce } from '../../util'\r\nimport { scrollTo } from '../../util/dom'\r\n\r\n// 页签滚动\r\nexport default {\r\n watch: {\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n }\r\n },\r\n\r\n created () {\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj } from '../../util'\r\nimport { getPathWithoutHash } from '../../util/route'\r\n\r\n// 子组件\r\nimport RouterAlive from '../RouterAlive'\r\n\r\n// 功能模块混入\r\nimport contextmenu from './contextmenu'\r\nimport i18n from './i18n'\r\nimport iframe from './iframe'\r\nimport pageLeave from './pageLeave'\r\nimport rule from './rule'\r\nimport scroll from './scroll'\r\n\r\n// RouterTab 组件\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ contextmenu, i18n, iframe, pageLeave, rule, scroll ],\r\n props: {\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n },\r\n\r\n methods: {\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=8bd0c2cc&\"\nimport script from \"./index.js?vue&type=script&lang=js&\"\nexport * from \"./index.js?vue&type=script&lang=js&\"\nimport style0 from \"../../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=0c8e4776&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/lib/vue-router-tab.umd.min.js b/dist/lib/vue-router-tab.umd.min.js index 8604b7dc..d9f2e3c3 100644 --- a/dist/lib/vue-router-tab.umd.min.js +++ b/dist/lib/vue-router-tab.umd.min.js @@ -1,2 +1,2 @@ -(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("vue")):"function"===typeof define&&define.amd?define([],e):"object"===typeof exports?exports["vue-router-tab"]=e(require("vue")):t["vue-router-tab"]=e(t["Vue"])})("undefined"!==typeof self?self:this,function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"02eb":function(t,e,n){},4795:function(t,e,n){t.exports=n("96cf")},"4ba7":function(t,e,n){"use strict";var r=n("02eb"),i=n.n(r);i.a},"8bbf":function(e,n){e.exports=t},"96cf":function(t,e,n){var r=function(t){"use strict";var e,n=Object.prototype,r=n.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(t,e,n,r){var i=e&&e.prototype instanceof p?e:p,o=Object.create(i.prototype),a=new O(r||[]);return o._invoke=C(t,n,a),o}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}t.wrap=c;var l="suspendedStart",f="suspendedYield",h="executing",d="completed",v={};function p(){}function m(){}function b(){}var g={};g[o]=function(){return this};var y=Object.getPrototypeOf,x=y&&y(y(I([])));x&&x!==n&&r.call(x,o)&&(g=x);var w=b.prototype=p.prototype=Object.create(g);function T(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function _(t){function e(n,i,o,a){var s=u(t[n],t,i);if("throw"!==s.type){var c=s.arg,l=c.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(t){e("next",t,o,a)},function(t){e("throw",t,o,a)}):Promise.resolve(l).then(function(t){c.value=t,o(c)},function(t){return e("throw",t,o,a)})}a(s.arg)}var n;function i(t,r){function i(){return new Promise(function(n,i){e(t,r,n,i)})}return n=n?n.then(i,i):i()}this._invoke=i}function C(t,e,n){var r=l;return function(i,o){if(r===h)throw new Error("Generator is already running");if(r===d){if("throw"===i)throw o;return R()}n.method=i,n.arg=o;while(1){var a=n.delegate;if(a){var s=L(a,n);if(s){if(s===v)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===l)throw r=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var c=u(t,e,n);if("normal"===c.type){if(r=n.done?d:f,c.arg===v)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=d,n.method="throw",n.arg=c.arg)}}}function L(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator["return"]&&(n.method="return",n.arg=e,L(t,n),"throw"===n.method))return v;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var i=u(r,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,v;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function $(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function k(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach($,this),this.reset(!0)}function I(t){if(t){var n=t[o];if(n)return n.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var i=-1,a=function n(){while(++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),k(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},e42d:function(t,e,n){"use strict";var r=n("f42e"),i=n.n(r);i.a},f42e:function(t,e,n){},fb15:function(t,e,n){"use strict";var r;(n.r(e),"undefined"!==typeof window)&&((r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^\/]+\.js(\?.*)?$/))&&(n.p=r[1]));var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"router-tab"},[n("header",{staticClass:"router-tab-header"},[n("div",{staticClass:"router-tab-scroll"},[n("transition-group",t._b({staticClass:"router-tab-nav",attrs:{tag:"ul"},on:{"after-enter":t.onTabTransitionEnd,"after-leave":t.onTabTransitionEnd}},"transition-group","string"===typeof t.tabTransition?{name:t.tabTransition}:t.tabTransition,!1),t._l(t.items,function(e,r){var i=e.id,o=e.to,a=e.title,s=e.icon,c=e.tips,u=e.closable;return n("router-link",{key:i||o,staticClass:"router-tab-item",class:{actived:t.activedTab===i,contextmenu:t.contextmenu.id===i},attrs:{tag:"li",title:c||a||"",to:o},nativeOn:{contextmenu:function(e){return e.preventDefault(),function(e){return t.showContextmenu(i,r,e)}(e)}}},[t._t("default",[s?n("i",{staticClass:"tab-icon",class:s}):t._e(),n("span",{staticClass:"tab-title"},[t._v(t._s(a||t.lang.tab.untitled))]),!1!==u&&t.items.length>1?n("i",{staticClass:"tab-close",attrs:{title:t.lang.contextmenu.close},on:{click:function(e){return e.preventDefault(),t.closeTab(i)}}}):t._e()],null,{tab:t.items[r],tabs:t.items,index:r})],2)}),1)],1),n("a",{staticClass:"el-icon-caret-left nav-prev",on:{click:function(e){return t.tabScroll("left")}}}),n("a",{staticClass:"el-icon-caret-right nav-next",on:{click:function(e){return t.tabScroll("right")}}})]),n("div",{staticClass:"router-tab-container",class:{loading:t.loading}},[n("router-alive",{ref:"routerAlive",attrs:{"alive-id":t.aliveId},on:{update:t.updateTab}},[n("transition",t._b({attrs:{appear:""},on:{"after-enter":t.onPageTransitionEnd,"after-leave":t.onPageTransitionEnd}},"transition","string"===typeof t.pageTransition?{name:t.pageTransition}:t.pageTransition,!1),[t.isRouterAlive?n("router-view",t._b({ref:"routerView",staticClass:"router-tab-page"},"router-view",t.routerView,!1)):t._e()],1)],1),n("transition-group",t._b({staticClass:"router-tab-iframes",attrs:{tag:"div"}},"transition-group","string"===typeof t.pageTransition?{name:t.pageTransition}:t.pageTransition,!1),t._l(t.iframes,function(e){return n("iframe",{directives:[{name:"show",rawName:"v-show",value:e===t.currentIframe,expression:"url === currentIframe"}],key:e,staticClass:"router-tab-iframe",attrs:{src:e,frameborder:"0"}})}),0)],1),n("transition",{attrs:{name:"router-tab-zoom"}},[t.contextmenu.id?n("div",{staticClass:"router-tab-contextmenu",style:"left: "+t.contextmenu.left+"px; top: "+t.contextmenu.top+"px;"},[n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.isContextTabActived},on:{click:function(e){t.isContextTabActived&&t.refreshTab(t.contextmenu.id)}}},[t._v("\n "+t._s(t.lang.contextmenu.refresh)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:t.items.length<2},on:{click:function(e){t.items.length>1&&t.refreshAll()}}},[t._v("\n "+t._s(t.lang.contextmenu.refreshAll)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.isContextTabCanBeClosed},on:{click:function(e){t.isContextTabCanBeClosed&&t.closeTab(t.contextmenu.id)}}},[t._v("\n "+t._s(t.lang.contextmenu.close)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsLeft.length},on:{click:function(e){t.tabsLeft.length&&t.closeMulti(t.tabsLeft)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeLefts)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsRight.length},on:{click:function(e){t.tabsRight.length&&t.closeMulti(t.tabsRight)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeRights)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsOther.length},on:{click:function(e){t.tabsOther.length&&t.closeMulti(t.tabsOther)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeOthers)+"\n ")])]):t._e()])],1)},o=[],a=n("4795"),s=n.n(a),c=n("8bbf"),u=n.n(c),l=Object.create(null),f=[];function h(t){return void 0!==t&&null!==t}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=null;return function(){var r=this,i=arguments;clearTimeout(n),n=setTimeout(function(){t.call(r,i)},e)}}var v={path:function(t){return t.path},fullpath:function(t){return t.fullPath.replace(t.hash,"")}};function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.$route,e=t.meta&&t.meta.aliveId||this.aliveId;return"string"===typeof e&&(e=v[e.toLowerCase()]),"function"!==typeof e&&(e=v.path),e.bind(this)(t)}function m(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;t.scrollTo?t.scrollTo({left:e,top:n,behavior:"smooth"}):(t.scrollLeft=e,t.scrollTop=n)}function b(t){if(Array.isArray(t))for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r="".concat(this.basePath,"/iframe/").concat(encodeURIComponent(t));return e&&(r+="/"+e,n&&(r+="/"+n)),r},openIframeTab:function(t,e,n){var r=this.getIframePath(t,e,n);this.$router.push(r)},closeIframeTab:function(t){var e=this.getIframePath(t);this.close(e,!1)},refreshIframeTab:function(t){var e=this.getIframePath(t);this.refresh(e,!1)}}};function O(t,e,n,r,i,o,a){try{var s=t[o](a),c=s.value}catch(u){return void n(u)}s.done?e(c):Promise.resolve(c).then(r,i)}function I(t){return function(){var e=this,n=arguments;return new Promise(function(r,i){var o=t.apply(e,n);function a(t){O(o,r,i,a,s,"next",t)}function s(t){O(o,r,i,a,s,"throw",t)}a(void 0)})}}function R(t){return R="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},R(t)}var A={name:"RouterTab",components:{RouterAlive:$},mixins:[k],props:{aliveId:$.props.aliveId,i18n:{type:[String,Object],default:"zh-CN"},tabs:{type:Array,default:function(){return[]}},routerView:Object,tabTransition:{type:[String,Object],default:"router-tab-zoom"},pageTransition:{type:[String,Object],default:function(){return{name:"router-tab-swap",mode:"out-in"}}}},data:function(){return{loading:!1,items:[],activedTab:null,isRouterAlive:!0,contextmenu:{id:null,index:-1,left:0,top:0}}},computed:{lang:function(){var t=null,e=this.i18n;return"string"===typeof e?t=L[e]:"object"===R(e)&&(t=e),t||(t=L["en"]),t},isContextTabActived:function(){return this.contextmenu.id===this.activedTab},isContextTabCanBeClosed:function(){var t=this.items,e=this.contextmenu,n=t[e.index];return t.length>1&&n&&!1!==n.closable},tabsLeft:function(){var t=this.items,e=this.contextmenu,n=e.id,r=e.index;return n?t.slice(0,r).filter(function(t){var e=t.closable;return!1!==e}):f},tabsRight:function(){var t=this.items,e=this.contextmenu,n=e.id,r=e.index;return n?t.slice(r+1).filter(function(t){var e=t.closable;return!1!==e}):f},tabsOther:function(){var t=this.items,e=this.contextmenu.id;return e?t.filter(function(t){var n=t.closable,r=t.id;return!1!==n&&e!==r}):f}},watch:{$route:function(t){this.loading=!1,this.hideContextmenu(),this.updateActivedTab(),this.fixCommentPage()},activedTab:function(){var t=I(s.a.mark(function t(){var e,n,r,i;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.$nextTick();case 2:e=this.$el.querySelector(".router-tab-nav .actived"),n=this.$el.querySelector(".router-tab-scroll"),e&&(r=e.offsetLeft,i=n.scrollLeft,(ri+n.clientWidth)&&this.adjust());case 5:case"end":return t.stop()}},t,this)}));function e(){return t.apply(this,arguments)}return e}(),"contextmenu.id":function(t,e){var n=this;!e&&t?document.addEventListener("click",this.onClick=function(t){t.target!==n.$el.querySelector(".router-tab-contextmenu")&&n.hideContextmenu()}):e&&!t&&document.removeEventListener("click",this.onClick)}},beforeCreate:function(){u.a.prototype.$routerTab=this;var t=this.$route.matched;this.basePath=(t[t.length-2]||{}).path},created:function(){this.getTabItems(),this.updateActivedTab(),this.$router.beforeEach(this.routerPageLeaveGuard),this.$nextTick(this.adjust)},mounted:function(){window.addEventListener("resize",this.onResize=d(this.adjust))},destroyed:function(){window.removeEventListener("resize",this.onResize)},methods:{getAliveId:p,routerPageLeaveGuard:function(t,e,n){if(this._isDestroyed){var r=this.$router.beforeHooks,i=r.indexOf(this.routerPageLeaveGuard);i>-1&&r.splice(i,1),n()}else{var o=this.getAliveId(t),a=this.$refs.routerAlive,s=a&&a.cache[o]||l,c=s.route;c&&!x(t,c)?this.pageLeavePromise(o,"replace").then(function(){return n()}).catch(function(){return n(!1)}):n()}},getTabItems:function(){var t=this,e=this.tabs,n=this.$router,r={};this.items=e.map(function(e,i){var o="string"===typeof e?{to:e}:e||l,a=o.to,s=o.closable,c=o.title,u=o.tips,f=a&&n.match(a);if(f){var h=t.getRouteTab(f),d=h.id;if(!r[d])return c&&(h.title=c),u&&(h.tips=u),h.closable=!1!==s,r[d]=h}}).filter(function(t){return!!t})},updateActivedTab:function(){this.activedTab=this.getAliveId()},updateTab:function(t,e){var n=e.route,r=e.tab,i=this.items,o=i.findIndex(function(e){var n=e.id;return n===t}),a=Object.assign(this.getRouteTab(n),r);if(o>-1){var s=i[o];a.closable=!1!==s.closable,this.$set(i,o,a)}else i.push(a)},getIdByLocation:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.$router.match(t,this.$router.currentRoute);if(!e)return this.getAliveId(n);var r=y(n),i=this.items.find(function(t){var e=t.to;return e.split("#")[0]===r});return i?i.id:void 0}},getRouteTab:function(t){var e=this.getAliveId(t),n=t.fullPath,r=t.meta,i=r.title,o=r.icon,a=r.tips;return{id:e,to:n,title:i,icon:o,tips:a}},pageLeavePromise:function(t,e){var n=this;return new Promise(function(r,i){var o=n.$refs.routerAlive,a=n.items.find(function(e){return e.id===t}),s=o.cache[t]||l,c=s.vm,u=c&&c.$vnode.componentOptions.Ctor.options.beforePageLeave;"function"===typeof u?u.bind(c)(r,i,a,e):r()})},removeTab:function(){var t=I(s.a.mark(function t(e){var n,r,i;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:if(n=this.items,r=this.$refs.routerAlive,i=n.findIndex(function(t){return t.id===e}),1!==n.length){t.next=5;break}throw new Error(this.lang.msg.keepOneTab);case 5:return t.prev=5,t.next=8,this.pageLeavePromise(e,"close");case 8:r.remove(e),i>-1&&n.splice(i,1),t.next=14;break;case 12:t.prev=12,t.t0=t["catch"](5);case 14:case"end":return t.stop()}},t,this,[[5,12]])}));function e(e){return t.apply(this,arguments)}return e}(),close:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.getIdByLocation(t,e);n&&this.closeTab(n)}else this.closeTab()},closeTab:function(){var t=I(s.a.mark(function t(){var e,n,r,i,o,a,c=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return e=c.length>0&&void 0!==c[0]?c[0]:this.activedTab,n=this.activedTab,r=this.items,i=this.$router,o=r.findIndex(function(t){return t.id===e}),t.prev=3,t.next=6,this.removeTab(e);case 6:n===e&&(a=r[o]||r[o-1],i.replace(a.to)),t.next=12;break;case 9:t.prev=9,t.t0=t["catch"](3),console.warn(t.t0);case 12:case"end":return t.stop()}},t,this,[[3,9]])}));function e(){return t.apply(this,arguments)}return e}(),closeMulti:function(){var t=I(s.a.mark(function t(e){var n,r,i,o,a,c,u,l,f,h,d=this;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:n=this.items,r=this.$router,i=this.contextmenu,o=n.find(function(t){var e=t.id;return e===i.id}),a=!0,c=!1,u=void 0,t.prev=5,l=e[Symbol.iterator]();case 7:if(a=(f=l.next()).done){t.next=19;break}return h=f.value.id,t.prev=9,t.next=12,this.removeTab(h);case 12:t.next=16;break;case 14:t.prev=14,t.t0=t["catch"](9);case 16:a=!0,t.next=7;break;case 19:t.next=25;break;case 21:t.prev=21,t.t1=t["catch"](5),c=!0,u=t.t1;case 25:t.prev=25,t.prev=26,a||null==l.return||l.return();case 28:if(t.prev=28,!c){t.next=31;break}throw u;case 31:return t.finish(28);case 32:return t.finish(25);case 33:-1===n.findIndex(function(t){var e=t.id;return e===d.activedTab})&&r.replace(o.to);case 34:case"end":return t.stop()}},t,this,[[5,21,25,33],[9,14],[26,,28,32]])}));function e(e){return t.apply(this,arguments)}return e}(),refresh:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.getIdByLocation(t,e);n&&this.refreshTab(n)}else this.refreshTab()},refreshTab:function(){var t=I(s.a.mark(function t(){var e,n=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return e=n.length>0&&void 0!==n[0]?n[0]:this.activedTab,t.prev=1,t.next=4,this.pageLeavePromise(e,"refresh");case 4:this.$refs.routerAlive.clear(e),e===this.activedTab&&this.reloadRouter(),t.next=10;break;case 8:t.prev=8,t.t0=t["catch"](1);case 10:case"end":return t.stop()}},t,this,[[1,8]])}));function e(){return t.apply(this,arguments)}return e}(),refreshAll:function(){var t=I(s.a.mark(function t(){var e,n,r,i,o=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:e=o.length>0&&void 0!==o[0]&&o[0],n=this.$refs.routerAlive,r=n.cache,t.t0=s.a.keys(r);case 4:if((t.t1=t.t0()).done){t.next=20;break}if(i=t.t1.value,e){t.next=17;break}return t.prev=7,t.next=10,this.pageLeavePromise(i,"refresh");case 10:n.clear(i),t.next=15;break;case 13:t.prev=13,t.t2=t["catch"](7);case 15:t.next=18;break;case 17:n.clear(i);case 18:t.next=4;break;case 20:this.reloadRouter();case 21:case"end":return t.stop()}},t,this,[[7,13]])}));function e(){return t.apply(this,arguments)}return e}(),reloadRouter:function(){var t=I(s.a.mark(function t(){var e,n=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:if(e=n.length>0&&void 0!==n[0]&&n[0],this.isRouterAlive=!1,!e){t.next=6;break}return t.next=5,this.$nextTick();case 5:this.isRouterAlive=!0;case 6:case"end":return t.stop()}},t,this)}));function e(){return t.apply(this,arguments)}return e}(),onTabTransitionEnd:function(){this.adjust()},onPageTransitionEnd:function(){this.isRouterAlive||(this.isRouterAlive=!0)},showContextmenu:function(t,e,n){var r=n||l,i=r.clientY,o=r.clientX;Object.assign(this.contextmenu,{id:t,index:e,top:i,left:o})},hideContextmenu:function(){this.showContextmenu(null,-1)},tabScroll:function(t){var e=this.$el.querySelector(".router-tab-header"),n=e.querySelector(".router-tab-scroll"),r=e.clientWidth-110;m(n,n.scrollLeft+("left"===t?-r:r))},adjust:function(){var t=this.$el.querySelector(".router-tab-header"),e=t.querySelector(".router-tab-scroll"),n=e.querySelector(".router-tab-nav"),r=n.querySelector(".actived"),i=n.clientWidth>e.clientWidth;t.classList[i?"add":"remove"]("is-scroll"),r&&i&&m(e,r.offsetLeft+(r.clientWidth-e.clientWidth)/2)},fixCommentPage:function(){8===this.$refs.routerAlive.$el.nodeType&&this.reloadRouter(!0)}}},S=A;n("e42d"),n("4ba7");function P(t,e,n,r,i,o,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):i&&(c=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(t,e){return c.call(e),l(t,e)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return{exports:t,options:u}}var E=P(S,i,o,!1,null,null,null),j=E.exports,N={created:function(){var t=this.$route,e=this.$vnode,n=e&&e.data.routerAlive;if(!n)return!1;this._isRouterPage=!0;var r=n.getAliveId(t),i=n.set(r,{route:t,vm:this});this.$watch("routeTab",function(t,e){i.tab="string"===typeof t?{title:t}:t,n.set(r,i)},{deep:!0,immediate:!0})},activated:function(){if(!this._isRouterPage)return!1;var t=this.$vnode.componentOptions.Ctor.cid;this._ctorId&&this._ctorId!==t&&(this.$destroy(),this.$routerTab.refreshTab()),this._ctorId=t}},q=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"router-tab-iframe-fake"})},G=[],F={name:"Iframe",props:{src:String,title:String,icon:String},data:function(){return{routeTab:null}},mounted:function(){var t=this.src,e=this.title,n=this.icon,r=this.$routerTab,i=r.iframes;this.routeTab={title:e,icon:n},i.includes(t)||i.push(t),r.currentIframe=t},activated:function(){this.$routerTab.currentIframe=this.src},deactivated:function(){this.$routerTab.currentIframe=null},destroyed:function(){var t=this.src,e=this.$routerTab.iframes,n=e.indexOf(t);n>-1&&e.splice(n,1)}},z=F,M=P(z,q,G,!1,null,null,null),V=M.exports,W=[{path:"iframe/:src/:title?/:icon?",component:V,props:!0,meta:{aliveId:function(t){return"iframe-".concat(t.params.src)}}}];j.install=function t(e,n){t.installed||(t.installed=!0,e.component(j.name,j),e.mixin(N))},"undefined"!==typeof window&&window.Vue&&window.Vue.use(j);var B=j,U=W;n.d(e,"RouterTabRoutes",function(){return U});e["default"]=B}})}); +(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("vue")):"function"===typeof define&&define.amd?define([],e):"object"===typeof exports?exports["vue-router-tab"]=e(require("vue")):t["vue-router-tab"]=e(t["Vue"])})("undefined"!==typeof self?self:this,function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"02eb":function(t,e,n){},4795:function(t,e,n){t.exports=n("96cf")},"4ba7":function(t,e,n){"use strict";var r=n("02eb"),i=n.n(r);i.a},"8bbf":function(e,n){e.exports=t},"96cf":function(t,e,n){var r=function(t){"use strict";var e,n=Object.prototype,r=n.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(t,e,n,r){var i=e&&e.prototype instanceof p?e:p,o=Object.create(i.prototype),a=new P(r||[]);return o._invoke=C(t,n,a),o}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}t.wrap=c;var l="suspendedStart",f="suspendedYield",h="executing",d="completed",v={};function p(){}function m(){}function b(){}var g={};g[o]=function(){return this};var y=Object.getPrototypeOf,x=y&&y(y(O([])));x&&x!==n&&r.call(x,o)&&(g=x);var w=b.prototype=p.prototype=Object.create(g);function T(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function _(t){function e(n,i,o,a){var s=u(t[n],t,i);if("throw"!==s.type){var c=s.arg,l=c.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(t){e("next",t,o,a)},function(t){e("throw",t,o,a)}):Promise.resolve(l).then(function(t){c.value=t,o(c)},function(t){return e("throw",t,o,a)})}a(s.arg)}var n;function i(t,r){function i(){return new Promise(function(n,i){e(t,r,n,i)})}return n=n?n.then(i,i):i()}this._invoke=i}function C(t,e,n){var r=l;return function(i,o){if(r===h)throw new Error("Generator is already running");if(r===d){if("throw"===i)throw o;return A()}n.method=i,n.arg=o;while(1){var a=n.delegate;if(a){var s=L(a,n);if(s){if(s===v)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===l)throw r=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var c=u(t,e,n);if("normal"===c.type){if(r=n.done?d:f,c.arg===v)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=d,n.method="throw",n.arg=c.arg)}}}function L(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator["return"]&&(n.method="return",n.arg=e,L(t,n),"throw"===n.method))return v;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var i=u(r,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,v;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function $(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function k(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach($,this),this.reset(!0)}function O(t){if(t){var n=t[o];if(n)return n.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var i=-1,a=function n(){while(++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),k(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:O(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},e42d:function(t,e,n){"use strict";var r=n("f42e"),i=n.n(r);i.a},f42e:function(t,e,n){},fb15:function(t,e,n){"use strict";var r;(n.r(e),"undefined"!==typeof window)&&((r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^\/]+\.js(\?.*)?$/))&&(n.p=r[1]));var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"router-tab"},[n("header",{staticClass:"router-tab-header"},[n("div",{staticClass:"router-tab-scroll"},[n("transition-group",t._b({staticClass:"router-tab-nav",attrs:{tag:"ul"},on:{"after-enter":t.onTabTransitionEnd,"after-leave":t.onTabTransitionEnd}},"transition-group","string"===typeof t.tabTransition?{name:t.tabTransition}:t.tabTransition,!1),t._l(t.items,function(e,r){var i=e.id,o=e.to,a=e.title,s=e.icon,c=e.tips,u=e.closable;return n("router-link",{key:i||o,staticClass:"router-tab-item",class:{actived:t.activedTab===i,contextmenu:t.contextmenu.id===i},attrs:{tag:"li",title:t.i18nText(c||a)||t.lang.tab.untitled,to:o},nativeOn:{contextmenu:function(e){return e.preventDefault(),function(e){return t.showContextmenu(i,r,e)}(e)}}},[t._t("default",[s?n("i",{staticClass:"tab-icon",class:s}):t._e(),n("span",{staticClass:"tab-title"},[t._v(t._s(t.i18nText(a)||t.lang.tab.untitled))]),!1!==u&&t.items.length>1?n("i",{staticClass:"tab-close",attrs:{title:t.lang.contextmenu.close},on:{click:function(e){return e.preventDefault(),t.closeTab(i)}}}):t._e()],null,{tab:t.items[r],tabs:t.items,index:r})],2)}),1)],1),n("a",{staticClass:"el-icon-caret-left nav-prev",on:{click:function(e){return t.tabScroll("left")}}}),n("a",{staticClass:"el-icon-caret-right nav-next",on:{click:function(e){return t.tabScroll("right")}}})]),n("div",{staticClass:"router-tab-container",class:{loading:t.loading}},[n("router-alive",{ref:"routerAlive",attrs:{"alive-id":t.aliveId},on:{update:t.updateTab}},[n("transition",t._b({attrs:{appear:""},on:{"after-enter":t.onPageTransitionEnd,"after-leave":t.onPageTransitionEnd}},"transition","string"===typeof t.pageTransition?{name:t.pageTransition}:t.pageTransition,!1),[t.isRouterAlive?n("router-view",t._b({ref:"routerView",staticClass:"router-tab-page"},"router-view",t.routerView,!1)):t._e()],1)],1),n("transition-group",t._b({staticClass:"router-tab-iframes",attrs:{tag:"div"}},"transition-group","string"===typeof t.pageTransition?{name:t.pageTransition}:t.pageTransition,!1),t._l(t.iframes,function(e){return n("iframe",{directives:[{name:"show",rawName:"v-show",value:e===t.currentIframe,expression:"url === currentIframe"}],key:e,staticClass:"router-tab-iframe",attrs:{src:e,frameborder:"0"}})}),0)],1),n("transition",{attrs:{name:"router-tab-zoom"}},[t.contextmenu.id?n("div",{staticClass:"router-tab-contextmenu",style:"left: "+t.contextmenu.left+"px; top: "+t.contextmenu.top+"px;"},[n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.isContextTabActived},on:{click:function(e){t.isContextTabActived&&t.refreshTab(t.contextmenu.id)}}},[t._v("\n "+t._s(t.lang.contextmenu.refresh)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:t.items.length<2},on:{click:function(e){t.items.length>1&&t.refreshAll()}}},[t._v("\n "+t._s(t.lang.contextmenu.refreshAll)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.isContextTabCanBeClosed},on:{click:function(e){t.isContextTabCanBeClosed&&t.closeTab(t.contextmenu.id)}}},[t._v("\n "+t._s(t.lang.contextmenu.close)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsLeft.length},on:{click:function(e){t.tabsLeft.length&&t.closeMulti(t.tabsLeft)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeLefts)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsRight.length},on:{click:function(e){t.tabsRight.length&&t.closeMulti(t.tabsRight)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeRights)+"\n ")]),n("a",{staticClass:"contextmenu-item",attrs:{disabled:!t.tabsOther.length},on:{click:function(e){t.tabsOther.length&&t.closeMulti(t.tabsOther)}}},[t._v("\n "+t._s(t.lang.contextmenu.closeOthers)+"\n ")])]):t._e()])],1)},o=[],a=n("4795"),s=n.n(a),c=n("8bbf"),u=n.n(c),l=Object.create(null),f=[];function h(t){return void 0!==t&&null!==t}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=null;return function(){var r=this,i=arguments;clearTimeout(n),n=setTimeout(function(){t.call(r,i)},e)}}function v(t){return t.hash?t.fullPath.replace(t.hash,""):t.fullPath}function p(t,e){return v(t)===v(e)}function m(t){var e=t.matched;return e[e.length-1].components.default}function b(t,e){return m(t)===m(e)}function g(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;t.scrollTo?t.scrollTo({left:e,top:n,behavior:"smooth"}):(t.scrollLeft=e,t.scrollTop=n)}function y(t){if(Array.isArray(t))for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:this.$route,e=t.meta&&t.meta.aliveId||this.aliveId;return"string"===typeof e&&(e=w[e.toLowerCase()]),"function"!==typeof e&&(e=w.path),e.bind(this)(t)}}},_={name:"RouterAlive",mixins:[T],beforeCreate:function(){Object.assign(this,{cache:Object.create(null),lastRoute:this.$route})},render:function(){var t=this.$slots.default,e=y(t),n=e&&e.componentOptions;if(n){var r=this.cache,i=this.$route,o=this.lastRoute,a="transition"===n.tag?n.children[0]:e;if(a&&a.componentOptions){var s=this.getAliveId(),c=r[s],u=c||l,f=u.vm,h=u.route,d=!1,v=o!==i,m=v&&b(i,o);v&&(this.lastRoute=i,c||this.set(s,{route:i})),f&&(p(h,i)?a.componentInstance=f:(f.$destroy(),c.vm=null,d=!0)),m&&(d=!0),d&&this.$routerTab.reloadRouter(),a.data.keepAlive=!0,a.data.routerAlive=this}}return e||t&&t[0]},methods:{set:function(t,e){var n=this.cache;return this.$emit("update",t,e),n[t]=e},remove:function(t){var e=this.cache,n=e[t];n&&(n.vm&&n.vm.$destroy(),delete e[t]),this.$emit("remove",[t])},clear:function(t){var e=this.cache[t],n=e&&e.vm;n&&(n.$destroy(),e.vm=null)}}};function C(t,e,n,r,i,o,a){try{var s=t[o](a),c=s.value}catch(u){return void n(u)}s.done?e(c):Promise.resolve(c).then(r,i)}function L(t){return function(){var e=this,n=arguments;return new Promise(function(r,i){var o=t.apply(e,n);function a(t){C(o,r,i,a,s,"next",t)}function s(t){C(o,r,i,a,s,"throw",t)}a(void 0)})}}var $={data:function(){return{contextmenu:{id:null,index:-1,left:0,top:0}}},computed:{isContextTabActived:function(){return this.contextmenu.id===this.activedTab},isContextTabCanBeClosed:function(){var t=this.items,e=this.contextmenu,n=t[e.index];return t.length>1&&n&&!1!==n.closable},tabsLeft:function(){var t=this.items,e=this.contextmenu,n=e.id,r=e.index;return n?t.slice(0,r).filter(function(t){var e=t.closable;return!1!==e}):f},tabsRight:function(){var t=this.items,e=this.contextmenu,n=e.id,r=e.index;return n?t.slice(r+1).filter(function(t){var e=t.closable;return!1!==e}):f},tabsOther:function(){var t=this.items,e=this.contextmenu.id;return e?t.filter(function(t){var n=t.closable,r=t.id;return!1!==n&&e!==r}):f}},watch:{$route:function(t){this.hideContextmenu()},"contextmenu.id":function(t,e){var n=this;!e&&t?document.addEventListener("click",this.onClick=function(t){t.target!==n.$el.querySelector(".router-tab-contextmenu")&&n.hideContextmenu()}):e&&!t&&document.removeEventListener("click",this.onClick)}},methods:{showContextmenu:function(t,e,n){var r=n||l,i=r.clientY,o=r.clientX;Object.assign(this.contextmenu,{id:t,index:e,top:i,left:o})},hideContextmenu:function(){this.showContextmenu(null,-1)},closeMulti:function(){var t=L(s.a.mark(function t(e){var n,r,i,o,a,c,u,l,f,h,d=this;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:n=this.items,r=this.$router,i=this.contextmenu,o=n.find(function(t){var e=t.id;return e===i.id}),a=!0,c=!1,u=void 0,t.prev=5,l=e[Symbol.iterator]();case 7:if(a=(f=l.next()).done){t.next=19;break}return h=f.value.id,t.prev=9,t.next=12,this.removeTab(h);case 12:t.next=16;break;case 14:t.prev=14,t.t0=t["catch"](9);case 16:a=!0,t.next=7;break;case 19:t.next=25;break;case 21:t.prev=21,t.t1=t["catch"](5),c=!0,u=t.t1;case 25:t.prev=25,t.prev=26,a||null==l.return||l.return();case 28:if(t.prev=28,!c){t.next=31;break}throw u;case 31:return t.finish(28);case 32:return t.finish(25);case 33:-1===n.findIndex(function(t){var e=t.id;return e===d.activedTab})&&r.replace(o.to);case 34:case"end":return t.stop()}},t,this,[[5,21,25,33],[9,14],[26,,28,32]])}));function e(e){return t.apply(this,arguments)}return e}()}},k={tab:{untitled:"无标题"},contextmenu:{refresh:"刷新",refreshAll:"刷新所有",close:"关闭",closeLefts:"关闭左侧",closeRights:"关闭右侧",closeOthers:"关闭其他"},msg:{keepOneTab:"至少应保留1个页签",i18nProp:"请提供“i18n”方法以处理国际化内容"}},P={tab:{untitled:"Untitled"},contextmenu:{refresh:"Refresh",refreshAll:"Refresh All",close:"Close",closeLefts:"Close to the Left",closeRights:"Close to the Right",closeOthers:"Close Others"},msg:{keepOneTab:"Keep at least 1 tab",i18nProp:'Method "i18n" is not defined on the instance'}},O={"zh-CN":k,en:P};function A(t,e){0}function I(t){return j(t)||E(t)||R()}function R(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function E(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function j(t){if(Array.isArray(t))return t}var S={props:{language:{type:[String,Object],default:"zh-CN"},i18n:Function},computed:{lang:function(){var t=this.language;return"string"===typeof t&&(t=O[t]),t||(t=O["en"]),t}},methods:{i18nText:function(t){var e=this.ii8nParse(t),n=e.key,r=e.params;if(n){var i="function"===typeof this.i18n;if(this._hasI18nPropWarn||(A(i,this.lang.msg.i18nProp),this._hasI18nPropWarn=!0),i)return this.i18n(n,r)}return t},ii8nParse:function(t){var e,n;if("string"===typeof t){var r=/^i18n:([^\s]+)$/.exec(t);r&&(e=r[1],n=[])}else if(Array.isArray(t)){var i=I(t);e=i[0],n=i.slice(1)}return{key:e,params:n}}}},N={data:function(){return{iframes:[],currentIframe:null}},methods:{getIframePath:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r="".concat(this.basePath,"/iframe/").concat(encodeURIComponent(t));return e&&(r+="/"+e,n&&(r+="/"+n)),r},openIframeTab:function(t,e,n){var r=this.getIframePath(t,e,n);this.$router.push(r)},closeIframeTab:function(t){var e=this.getIframePath(t);this.close(e,!1)},refreshIframeTab:function(t){var e=this.getIframePath(t);this.refresh(e,!1)}}},q={created:function(){this.$router.beforeEach(this.routerPageLeaveGuard)},methods:{routerPageLeaveGuard:function(t,e,n){if(this._isDestroyed){var r=this.$router.beforeHooks,i=r.indexOf(this.routerPageLeaveGuard);i>-1&&r.splice(i,1),n()}else{var o=this.getAliveId(t),a=this.$refs.routerAlive,s=a&&a.cache[o]||l,c=s.route;c&&!p(t,c)?this.pageLeavePromise(o,"replace").then(function(){return n()}).catch(function(){return n(!1)}):n()}},pageLeavePromise:function(t,e){var n=this;return new Promise(function(r,i){var o=n.$refs.routerAlive,a=n.items.find(function(e){return e.id===t}),s=o.cache[t]||l,c=s.vm,u=c&&c.$vnode.componentOptions.Ctor.options.beforePageLeave;"function"===typeof u?u.bind(c)(r,i,a,e):r()})}}};function G(t,e,n,r,i,o,a){try{var s=t[o](a),c=s.value}catch(u){return void n(u)}s.done?e(c):Promise.resolve(c).then(r,i)}function F(t){return function(){var e=this,n=arguments;return new Promise(function(r,i){var o=t.apply(e,n);function a(t){G(o,r,i,a,s,"next",t)}function s(t){G(o,r,i,a,s,"throw",t)}a(void 0)})}}var M={watch:{activedTab:function(){var t=F(s.a.mark(function t(){var e,n,r,i;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.$nextTick();case 2:e=this.$el.querySelector(".router-tab-nav .actived"),n=this.$el.querySelector(".router-tab-scroll"),e&&(r=e.offsetLeft,i=n.scrollLeft,(ri+n.clientWidth)&&this.adjust());case 5:case"end":return t.stop()}},t,this)}));function e(){return t.apply(this,arguments)}return e}()},created:function(){this.$nextTick(this.adjust)},mounted:function(){window.addEventListener("resize",this.onResize=d(this.adjust))},destroyed:function(){window.removeEventListener("resize",this.onResize)},methods:{tabScroll:function(t){var e=this.$el.querySelector(".router-tab-header"),n=e.querySelector(".router-tab-scroll"),r=e.clientWidth-110;g(n,n.scrollLeft+("left"===t?-r:r))},adjust:function(){var t=this.$el.querySelector(".router-tab-header"),e=t.querySelector(".router-tab-scroll"),n=e.querySelector(".router-tab-nav"),r=n.querySelector(".actived"),i=n.clientWidth>e.clientWidth;t.classList[i?"add":"remove"]("is-scroll"),r&&i&&g(e,r.offsetLeft+(r.clientWidth-e.clientWidth)/2)}}};function W(t,e,n,r,i,o,a){try{var s=t[o](a),c=s.value}catch(u){return void n(u)}s.done?e(c):Promise.resolve(c).then(r,i)}function z(t){return function(){var e=this,n=arguments;return new Promise(function(r,i){var o=t.apply(e,n);function a(t){W(o,r,i,a,s,"next",t)}function s(t){W(o,r,i,a,s,"throw",t)}a(void 0)})}}var V={name:"RouterTab",components:{RouterAlive:_},mixins:[$,S,N,q,T,M],props:{tabs:{type:Array,default:function(){return[]}},routerView:Object,tabTransition:{type:[String,Object],default:"router-tab-zoom"},pageTransition:{type:[String,Object],default:function(){return{name:"router-tab-swap",mode:"out-in"}}}},data:function(){return{loading:!1,items:[],activedTab:null,isRouterAlive:!0}},watch:{$route:function(t){this.loading=!1,this.updateActivedTab(),this.fixCommentPage()}},beforeCreate:function(){u.a.prototype.$routerTab=this;var t=this.$route.matched;this.basePath=(t[t.length-2]||{}).path},created:function(){this.getTabItems(),this.updateActivedTab()},methods:{getTabItems:function(){var t=this,e=this.tabs,n=this.$router,r={};this.items=e.map(function(e,i){var o="string"===typeof e?{to:e}:e||l,a=o.to,s=o.closable,c=o.title,u=o.tips,f=a&&n.match(a);if(f){var h=t.getRouteTab(f),d=h.id;if(!r[d])return c&&(h.title=c),u&&(h.tips=u),h.closable=!1!==s,r[d]=h}}).filter(function(t){return!!t})},updateActivedTab:function(){this.activedTab=this.getAliveId()},updateTab:function(t,e){var n=e.route,r=e.tab,i=this.items,o=i.findIndex(function(e){var n=e.id;return n===t}),a=Object.assign(this.getRouteTab(n),r);if(o>-1){var s=i[o];a.closable=!1!==s.closable,this.$set(i,o,a)}else i.push(a)},getIdByLocation:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.$router.match(t,this.$router.currentRoute);if(!e)return this.getAliveId(n);var r=v(n),i=this.items.find(function(t){var e=t.to;return e.split("#")[0]===r});return i?i.id:void 0}},getRouteTab:function(t){var e=this.getAliveId(t),n=t.fullPath,r=t.meta,i=r.title,o=r.icon,a=r.tips;return{id:e,to:n,title:i,icon:o,tips:a}},removeTab:function(){var t=z(s.a.mark(function t(e){var n,r,i;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:if(n=this.items,r=this.$refs.routerAlive,i=n.findIndex(function(t){return t.id===e}),1!==n.length){t.next=5;break}throw new Error(this.lang.msg.keepOneTab);case 5:return t.prev=5,t.next=8,this.pageLeavePromise(e,"close");case 8:r.remove(e),i>-1&&n.splice(i,1),t.next=14;break;case 12:t.prev=12,t.t0=t["catch"](5);case 14:case"end":return t.stop()}},t,this,[[5,12]])}));function e(e){return t.apply(this,arguments)}return e}(),close:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.getIdByLocation(t,e);n&&this.closeTab(n)}else this.closeTab()},closeTab:function(){var t=z(s.a.mark(function t(){var e,n,r,i,o,a,c=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return e=c.length>0&&void 0!==c[0]?c[0]:this.activedTab,n=this.activedTab,r=this.items,i=this.$router,o=r.findIndex(function(t){return t.id===e}),t.prev=3,t.next=6,this.removeTab(e);case 6:n===e&&(a=r[o]||r[o-1],i.replace(a.to)),t.next=12;break;case 9:t.prev=9,t.t0=t["catch"](3),console.warn(t.t0);case 12:case"end":return t.stop()}},t,this,[[3,9]])}));function e(){return t.apply(this,arguments)}return e}(),refresh:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t){var n=this.getIdByLocation(t,e);n&&this.refreshTab(n)}else this.refreshTab()},refreshTab:function(){var t=z(s.a.mark(function t(){var e,n=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:return e=n.length>0&&void 0!==n[0]?n[0]:this.activedTab,t.prev=1,t.next=4,this.pageLeavePromise(e,"refresh");case 4:this.$refs.routerAlive.clear(e),e===this.activedTab&&this.reloadRouter(),t.next=10;break;case 8:t.prev=8,t.t0=t["catch"](1);case 10:case"end":return t.stop()}},t,this,[[1,8]])}));function e(){return t.apply(this,arguments)}return e}(),refreshAll:function(){var t=z(s.a.mark(function t(){var e,n,r,i,o=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:e=o.length>0&&void 0!==o[0]&&o[0],n=this.$refs.routerAlive,r=n.cache,t.t0=s.a.keys(r);case 4:if((t.t1=t.t0()).done){t.next=20;break}if(i=t.t1.value,e){t.next=17;break}return t.prev=7,t.next=10,this.pageLeavePromise(i,"refresh");case 10:n.clear(i),t.next=15;break;case 13:t.prev=13,t.t2=t["catch"](7);case 15:t.next=18;break;case 17:n.clear(i);case 18:t.next=4;break;case 20:this.reloadRouter();case 21:case"end":return t.stop()}},t,this,[[7,13]])}));function e(){return t.apply(this,arguments)}return e}(),reloadRouter:function(){var t=z(s.a.mark(function t(){var e,n=arguments;return s.a.wrap(function(t){while(1)switch(t.prev=t.next){case 0:if(e=n.length>0&&void 0!==n[0]&&n[0],this.isRouterAlive=!1,!e){t.next=6;break}return t.next=5,this.$nextTick();case 5:this.isRouterAlive=!0;case 6:case"end":return t.stop()}},t,this)}));function e(){return t.apply(this,arguments)}return e}(),onTabTransitionEnd:function(){this.adjust()},onPageTransitionEnd:function(){this.isRouterAlive||(this.isRouterAlive=!0)},fixCommentPage:function(){8===this.$refs.routerAlive.$el.nodeType&&this.reloadRouter(!0)}}},B=V;n("e42d"),n("4ba7");function U(t,e,n,r,i,o,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):i&&(c=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(t,e){return c.call(e),l(t,e)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return{exports:t,options:u}}var D=U(B,i,o,!1,null,null,null),X=D.exports,Y={created:function(){var t=this.$route,e=this.$vnode,n=e&&e.data.routerAlive;if(!n)return!1;this._isRouterPage=!0;var r=n.getAliveId(t),i=n.set(r,{route:t,vm:this});this.$watch("routeTab",function(t,e){i.tab="string"===typeof t?{title:t}:t,n.set(r,i)},{deep:!0,immediate:!0})},activated:function(){if(!this._isRouterPage)return!1;var t=this.$vnode.componentOptions.Ctor.cid;this._ctorId&&this._ctorId!==t&&(this.$destroy(),this.$routerTab.refreshTab()),this._ctorId=t}},H=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"router-tab-iframe-fake"})},K=[],J={name:"Iframe",props:{src:String,title:String,icon:String},data:function(){return{routeTab:null}},mounted:function(){var t=this.src,e=this.title,n=this.icon,r=this.$routerTab,i=r.iframes;this.routeTab={title:e,icon:n},i.includes(t)||i.push(t),r.currentIframe=t},activated:function(){this.$routerTab.currentIframe=this.src},deactivated:function(){this.$routerTab.currentIframe=null},destroyed:function(){var t=this.src,e=this.$routerTab.iframes,n=e.indexOf(t);n>-1&&e.splice(n,1)}},Q=J,Z=U(Q,H,K,!1,null,null,null),tt=Z.exports,et=[{path:"iframe/:src/:title?/:icon?",component:tt,props:!0,meta:{aliveId:function(t){return"iframe-".concat(t.params.src)}}}];X.install=function t(e,n){t.installed||(t.installed=!0,e.component(X.name,X),e.mixin(Y))},"undefined"!==typeof window&&window.Vue&&window.Vue.use(X);var nt=X,rt=et;n.d(e,"RouterTabRoutes",function(){return rt});e["default"]=nt}})}); //# sourceMappingURL=vue-router-tab.umd.min.js.map \ No newline at end of file diff --git a/dist/lib/vue-router-tab.umd.min.js.map b/dist/lib/vue-router-tab.umd.min.js.map index af67b647..ec5443cb 100644 --- a/dist/lib/vue-router-tab.umd.min.js.map +++ b/dist/lib/vue-router-tab.umd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://vue-router-tab/webpack/universalModuleDefinition","webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab.vue?d199","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/rules.js","webpack://vue-router-tab/./src/util/alive.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/mixins/routerTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab.js","webpack://vue-router-tab/./src/components/RouterTab.js?39cc","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?787e","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__8bbf__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_transition_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_transition_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","runtime","undefined","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","obj","arg","type","err","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","AsyncIterator","invoke","resolve","reject","record","result","Promise","__await","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","constructor","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","toString","keys","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_routerTab_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_routerTab_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","setPublicPath_i","window","document","currentScript","src","match","RouterTabvue_type_template_id_053ff978_render","_vm","_h","$createElement","_c","_self","staticClass","_b","attrs","tag","on","after-enter","onTabTransitionEnd","after-leave","tabTransition","_l","ref","index","id","to","title","icon","tips","closable","class","actived","activedTab","contextmenu","nativeOn","$event","preventDefault","e","showContextmenu","_t","_e","_v","_s","lang","tab","untitled","items","close","click","closeTab","tabs","tabScroll","loading","alive-id","aliveId","update","updateTab","appear","onPageTransitionEnd","pageTransition","routerView","url","directives","rawName","currentIframe","expression","frameborder","style","disabled","isContextTabActived","refreshTab","refresh","refreshAll","isContextTabCanBeClosed","tabsLeft","closeMulti","closeLefts","tabsRight","closeRights","tabsOther","closeOthers","staticRenderFns","emptyObj","emptyArray","isDef","v","debounce","delay","arguments","timeout","args","clearTimeout","setTimeout","rules","path","route","fullpath","fullPath","replace","hash","getAliveId","$route","rule","meta","toLowerCase","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","getPathWithoutHash","isAlikeRoute","route1","route2","getRouteComponent","_ref","matched","components","default","isSameComponentRoute","zh_CN","msg","keepOneTab","en","src_lang","zh-CN","zhCN","RouterAlive","props","String","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","methods","item","$emit","remove","clear","iframe","iframes","getIframePath","concat","basePath","encodeURIComponent","openIframeTab","$router","closeIframeTab","refreshIframeTab","RouterTabvue_type_script_lang_js_","mixins","i18n","isRouterAlive","computed","langs","_typeof","contextTab","_this$contextmenu","filter","_this$contextmenu2","_ref2","_ref3","tid","watch","hideContextmenu","updateActivedTab","fixCommentPage","_activedTab","_asyncToGenerator","regenerator_default","a","_callee","$cur","$scr","cLeft","sLeft","_context","$nextTick","querySelector","offsetLeft","clientWidth","adjust","apply","contextmenu.id","val","old","_this","addEventListener","onClick","target","removeEventListener","Vue","created","getTabItems","beforeEach","routerPageLeaveGuard","mounted","onResize","destroyed","from","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","_ref4","pageLeavePromise","_this2","ids","map","_ref5","getRouteTab","_ref6","matchIdx","findIndex","_ref7","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","find","_ref8","split","_this3","_ref9","beforePageLeave","$vnode","Ctor","options","removeTab","_removeTab","_callee2","_context2","t0","_x","_closeTab","_callee3","nextTab","_args3","_context3","console","warn","_closeMulti","_callee4","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_this4","_context4","_ref10","t1","return","_ref11","_x2","_refreshTab","_callee5","_args5","_context5","_refreshAll","_callee6","force","_args6","_context6","t2","_reloadRouter","_callee7","ignoreTransition","_args7","_context7","_ref12","clientY","clientX","direction","$tab","space","$nav","isScroll","classList","nodeType","components_RouterTabvue_type_script_lang_js_","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","component","RouterTab","routerPage","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","Iframevue_type_template_id_5f2f2831_render","Iframevue_type_template_id_5f2f2831_staticRenderFns","Iframevue_type_script_lang_js_","routeTab","includes","deactivated","page_Iframevue_type_script_lang_js_","Iframe_component","Iframe","routes","params","install","installed","mixin","use","RouterTabRoutes","__webpack_exports__"],"mappings":"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","file":"vue-router-tab.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue-router-tab\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"vue-router-tab\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":tips || title || '',\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(title || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 页签规则\r\nexport default {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n","import rules from './rules'\r\n\r\n// 获取缓存 id\r\nexport function getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","// iframe 页签功能混入\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj, emptyArray, debounce } from '../util'\r\nimport { getAliveId } from '../util/alive'\r\nimport { scrollTo } from '../util/dom'\r\nimport { isAlikeRoute, getPathWithoutHash } from '../util/route'\r\n\r\n// 语言配置\r\nimport langs from '../lang'\r\n\r\n// 子组件\r\nimport RouterAlive from './RouterAlive'\r\n\r\n// 功能混入\r\nimport iframe from '../mixins/routerTab/iframe'\r\n\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ iframe ],\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: RouterAlive.props.aliveId,\r\n\r\n // 语言配置\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n i18n: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true,\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = null\r\n let i18n = this.i18n\r\n\r\n if (typeof i18n === 'string') {\r\n lang = langs[i18n]\r\n } else if (typeof i18n === 'object') {\r\n lang = i18n\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n },\r\n\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.hideContextmenu()\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n },\r\n\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n getAliveId,\r\n\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./RouterTab.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=053ff978&\"\nimport script from \"./RouterTab.js?vue&type=script&lang=js&\"\nexport * from \"./RouterTab.js?vue&type=script&lang=js&\"\nimport style0 from \"../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=5f2f2831&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://vue-router-tab/webpack/universalModuleDefinition","webpack://vue-router-tab/webpack/bootstrap","webpack://vue-router-tab/./node_modules/@vue/babel-preset-app/node_modules/@babel/runtime/regenerator/index.js","webpack://vue-router-tab/./src/scss/transition.scss?2b65","webpack://vue-router-tab/external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}","webpack://vue-router-tab/./node_modules/regenerator-runtime/runtime.js","webpack://vue-router-tab/./src/scss/routerTab.scss?500e","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue?9f5c","webpack://vue-router-tab/./src/util/index.js","webpack://vue-router-tab/./src/util/route.js","webpack://vue-router-tab/./src/util/dom.js","webpack://vue-router-tab/./src/components/RouterTab/rule.js","webpack://vue-router-tab/./src/components/RouterAlive.js","webpack://vue-router-tab/./src/components/RouterTab/contextmenu.js","webpack://vue-router-tab/./src/lang/zh-CN.js","webpack://vue-router-tab/./src/lang/en.js","webpack://vue-router-tab/./src/lang/index.js","webpack://vue-router-tab/./src/util/warn.js","webpack://vue-router-tab/./src/components/RouterTab/i18n.js","webpack://vue-router-tab/./src/components/RouterTab/iframe.js","webpack://vue-router-tab/./src/components/RouterTab/pageLeave.js","webpack://vue-router-tab/./src/components/RouterTab/scroll.js","webpack://vue-router-tab/./src/components/RouterTab/index.js","webpack://vue-router-tab/./src/components/RouterTab","webpack://vue-router-tab/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://vue-router-tab/./src/components/RouterTab/RouterTab.vue","webpack://vue-router-tab/./src/mixins/routerPage.js","webpack://vue-router-tab/./src/page/Iframe.vue?e1a2","webpack://vue-router-tab/src/page/Iframe.vue","webpack://vue-router-tab/./src/page/Iframe.vue?440f","webpack://vue-router-tab/./src/page/Iframe.vue","webpack://vue-router-tab/./src/util/routes.js","webpack://vue-router-tab/./src/index.js","webpack://vue-router-tab/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__8bbf__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_transition_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_transition_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","runtime","undefined","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","obj","arg","type","err","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","AsyncIterator","invoke","resolve","reject","record","result","Promise","__await","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","constructor","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","toString","keys","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_routerTab_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_routerTab_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","setPublicPath_i","window","document","currentScript","src","match","RouterTabvue_type_template_id_8bd0c2cc_render","_vm","_h","$createElement","_c","_self","staticClass","_b","attrs","tag","on","after-enter","onTabTransitionEnd","after-leave","tabTransition","_l","ref","index","id","to","title","icon","tips","closable","class","actived","activedTab","contextmenu","i18nText","lang","tab","untitled","nativeOn","$event","preventDefault","e","showContextmenu","_t","_e","_v","_s","items","close","click","closeTab","tabs","tabScroll","loading","alive-id","aliveId","update","updateTab","appear","onPageTransitionEnd","pageTransition","routerView","url","directives","rawName","currentIframe","expression","frameborder","style","disabled","isContextTabActived","refreshTab","refresh","refreshAll","isContextTabCanBeClosed","tabsLeft","closeMulti","closeLefts","tabsRight","closeRights","tabsOther","closeOthers","staticRenderFns","emptyObj","emptyArray","isDef","v","debounce","delay","arguments","timeout","args","clearTimeout","setTimeout","getPathWithoutHash","route","hash","fullPath","replace","isAlikeRoute","route1","route2","getRouteComponent","_ref","matched","components","default","isSameComponentRoute","scrollTo","$el","left","top","behavior","scrollLeft","scrollTop","getFirstComponentChild","children","Array","isArray","componentOptions","isAsyncPlaceholder","node","isComment","asyncFactory","rules","path","fullpath","rule","props","String","methods","getAliveId","$route","meta","toLowerCase","RouterAlive","mixins","beforeCreate","assign","cache","lastRoute","render","slot","$slots","vnode","vmOpts","pageNode","cacheItem","cacheVm","vm","cacheRoute","needReloadRouter","isRouteChange","isSameComponent","set","componentInstance","$destroy","$routerTab","reloadRouter","data","keepAlive","routerAlive","item","$emit","remove","clear","RouterTab_contextmenu","computed","contextTab","_this$contextmenu","filter","_this$contextmenu2","_ref2","_ref3","tid","watch","hideContextmenu","contextmenu.id","val","old","_this","addEventListener","onClick","target","querySelector","removeEventListener","_ref4","clientY","clientX","_closeMulti","_asyncToGenerator","regenerator_default","a","_callee","$router","nextTab","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_this2","_context","find","_ref5","removeTab","t0","t1","return","findIndex","_ref6","_x","apply","zh_CN","msg","keepOneTab","i18nProp","en","src_lang","zh-CN","zhCN","warn","condition","message","process","i18n","language","langs","text","_this$ii8nParse","ii8nParse","params","hasI18nProp","_hasI18nPropWarn","res","exec","_text","_toArray","iframe","iframes","getIframePath","concat","basePath","encodeURIComponent","openIframeTab","closeIframeTab","refreshIframeTab","pageLeave","created","beforeEach","routerPageLeaveGuard","from","_isDestroyed","hooks","beforeHooks","idx","indexOf","splice","$alive","$refs","pageLeavePromise","beforePageLeave","$vnode","Ctor","options","RouterTab_scroll","_activedTab","scroll_asyncToGenerator","$cur","$scr","cLeft","sLeft","$nextTick","offsetLeft","clientWidth","adjust","mounted","onResize","destroyed","direction","$tab","space","$nav","isScroll","classList","RouterTab_vue_type_script_lang_js_","scroll","isRouterAlive","updateActivedTab","fixCommentPage","Vue","getTabItems","ids","map","getRouteTab","matchIdx","matchTab","$set","getIdByLocation","location","fullMatch","currentRoute","matchPath","split","_removeTab","RouterTab_vue_type_script_lang_js_asyncToGenerator","_closeTab","_callee2","_args2","_context2","console","_refreshTab","_callee3","_args3","_context3","_refreshAll","_callee4","force","_args4","_context4","t2","_reloadRouter","_callee5","ignoreTransition","_args5","_context5","nodeType","components_RouterTab_vue_type_script_lang_js_","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","component","RouterTab","routerPage","_isRouterPage","$watch","deep","immediate","activated","ctorId","cid","_ctorId","Iframevue_type_template_id_0c8e4776_render","Iframevue_type_template_id_0c8e4776_staticRenderFns","Iframevue_type_script_lang_js_","routeTab","includes","deactivated","page_Iframevue_type_script_lang_js_","Iframe_component","Iframe","routes","install","installed","mixin","use","RouterTabRoutes","__webpack_exports__"],"mappings":"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","file":"vue-router-tab.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue-router-tab\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"vue-router-tab\"] = factory(root[\"Vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","module.exports = require(\"regenerator-runtime\");\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./transition.scss?vue&type=style&index=1&lang=scss&\"","module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./routerTab.scss?vue&type=style&index=0&lang=scss&\"","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab\"},[_c('header',{staticClass:\"router-tab-header\"},[_c('div',{staticClass:\"router-tab-scroll\"},[_c('transition-group',_vm._b({staticClass:\"router-tab-nav\",attrs:{\"tag\":\"ul\"},on:{\"after-enter\":_vm.onTabTransitionEnd,\"after-leave\":_vm.onTabTransitionEnd}},'transition-group',typeof _vm.tabTransition === 'string' ? { name: _vm.tabTransition } : _vm.tabTransition,false),_vm._l((_vm.items),function(ref,index){\nvar id = ref.id;\nvar to = ref.to;\nvar title = ref.title;\nvar icon = ref.icon;\nvar tips = ref.tips;\nvar closable = ref.closable;\nreturn _c('router-link',{key:id || to,staticClass:\"router-tab-item\",class:{ actived: _vm.activedTab === id, contextmenu: _vm.contextmenu.id === id },attrs:{\"tag\":\"li\",\"title\":_vm.i18nText(tips || title) || _vm.lang.tab.untitled,\"to\":to},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return (function (e) { return _vm.showContextmenu(id, index, e); })($event)}}},[_vm._t(\"default\",[(icon)?_c('i',{staticClass:\"tab-icon\",class:icon}):_vm._e(),_c('span',{staticClass:\"tab-title\"},[_vm._v(_vm._s(_vm.i18nText(title) || _vm.lang.tab.untitled))]),(closable !== false && _vm.items.length > 1)?_c('i',{staticClass:\"tab-close\",attrs:{\"title\":_vm.lang.contextmenu.close},on:{\"click\":function($event){$event.preventDefault();return _vm.closeTab(id)}}}):_vm._e()],null,{\n tab: _vm.items[index],\n tabs: _vm.items,\n index: index\n })],2)}),1)],1),_c('a',{staticClass:\"el-icon-caret-left nav-prev\",on:{\"click\":function($event){return _vm.tabScroll('left')}}}),_c('a',{staticClass:\"el-icon-caret-right nav-next\",on:{\"click\":function($event){return _vm.tabScroll('right')}}})]),_c('div',{staticClass:\"router-tab-container\",class:{ loading: _vm.loading }},[_c('router-alive',{ref:\"routerAlive\",attrs:{\"alive-id\":_vm.aliveId},on:{\"update\":_vm.updateTab}},[_c('transition',_vm._b({attrs:{\"appear\":\"\"},on:{\"after-enter\":_vm.onPageTransitionEnd,\"after-leave\":_vm.onPageTransitionEnd}},'transition',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),[(_vm.isRouterAlive)?_c('router-view',_vm._b({ref:\"routerView\",staticClass:\"router-tab-page\"},'router-view',_vm.routerView,false)):_vm._e()],1)],1),_c('transition-group',_vm._b({staticClass:\"router-tab-iframes\",attrs:{\"tag\":\"div\"}},'transition-group',typeof _vm.pageTransition === 'string' ? { name: _vm.pageTransition } : _vm.pageTransition,false),_vm._l((_vm.iframes),function(url){return _c('iframe',{directives:[{name:\"show\",rawName:\"v-show\",value:(url === _vm.currentIframe),expression:\"url === currentIframe\"}],key:url,staticClass:\"router-tab-iframe\",attrs:{\"src\":url,\"frameborder\":\"0\"}})}),0)],1),_c('transition',{attrs:{\"name\":\"router-tab-zoom\"}},[(_vm.contextmenu.id)?_c('div',{staticClass:\"router-tab-contextmenu\",style:((\"left: \" + (_vm.contextmenu.left) + \"px; top: \" + (_vm.contextmenu.top) + \"px;\"))},[_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabActived},on:{\"click\":function($event){_vm.isContextTabActived && _vm.refreshTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refresh)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":_vm.items.length < 2},on:{\"click\":function($event){_vm.items.length > 1 && _vm.refreshAll()}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.refreshAll)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.isContextTabCanBeClosed},on:{\"click\":function($event){_vm.isContextTabCanBeClosed && _vm.closeTab(_vm.contextmenu.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.close)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsLeft.length},on:{\"click\":function($event){_vm.tabsLeft.length && _vm.closeMulti(_vm.tabsLeft)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeLefts)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsRight.length},on:{\"click\":function($event){_vm.tabsRight.length && _vm.closeMulti(_vm.tabsRight)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeRights)+\"\\n \")]),_c('a',{staticClass:\"contextmenu-item\",attrs:{\"disabled\":!_vm.tabsOther.length},on:{\"click\":function($event){_vm.tabsOther.length && _vm.closeMulti(_vm.tabsOther)}}},[_vm._v(\"\\n \"+_vm._s(_vm.lang.contextmenu.closeOthers)+\"\\n \")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// 空对象和数组\r\nexport const emptyObj = Object.create(null)\r\nexport const emptyArray = []\r\n\r\n// 是否定义\r\nexport function isDef (v) {\r\n return v !== undefined && v !== null\r\n}\r\n\r\n// 防抖\r\nexport function debounce (fn, delay = 200) {\r\n let timeout = null\r\n return function () {\r\n let context = this\r\n let args = arguments\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => {\r\n fn.call(context, args)\r\n }, delay)\r\n }\r\n}\r\n","// 获取路由不带hash的路径\r\nexport function getPathWithoutHash (route) {\r\n return route.hash\r\n ? route.fullPath.replace(route.hash, '')\r\n : route.fullPath\r\n}\r\n\r\n// 是否相似路由\r\nexport function isAlikeRoute (route1, route2) {\r\n return getPathWithoutHash(route1) === getPathWithoutHash(route2)\r\n}\r\n\r\n// 获取路由页面组件\r\nexport function getRouteComponent ({ matched }) {\r\n return matched[matched.length - 1].components.default\r\n}\r\n\r\n// 路由是否共用组件\r\nexport function isSameComponentRoute (route1, route2) {\r\n return getRouteComponent(route1) === getRouteComponent(route2)\r\n}\r\n","import { isDef } from './index'\r\n\r\n// 滚动\r\nexport function scrollTo ($el, left = 0, top = 0) {\r\n if ($el.scrollTo) {\r\n $el.scrollTo({\r\n left,\r\n top,\r\n behavior: 'smooth'\r\n })\r\n } else {\r\n $el.scrollLeft = left\r\n $el.scrollTop = top\r\n }\r\n}\r\n\r\n// 获取第一个子组件\r\nexport function getFirstComponentChild (children) {\r\n if (Array.isArray(children)) {\r\n for (let i = 0; i < children.length; i++) {\r\n const c = children[i]\r\n if (\r\n isDef(c) &&\r\n (isDef(c.componentOptions) || isAsyncPlaceholder(c))\r\n ) {\r\n return c\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 是否异步占位\r\nexport function isAsyncPlaceholder (node) {\r\n return node.isComment && node.asyncFactory\r\n}\r\n","// 内置规则\r\nconst rules = {\r\n // 地址,例如:\"/page/1?type=a#title\" 则取 \"/page/1\"\r\n path (route) {\r\n return route.path\r\n },\r\n\r\n // 完整地址 (忽略hash),例如:\"/page/1?type=a#title\" 则取 \"/page/1?type=a\"\r\n fullpath (route) {\r\n return route.fullPath.replace(route.hash, '')\r\n }\r\n}\r\n\r\n// 页签缓存规则\r\nexport default {\r\n props: {\r\n // 缓存id,如果为函数,则参数为route\r\n aliveId: {\r\n type: [ String, Function ],\r\n default: 'path'\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取缓存 id\r\n getAliveId (route = this.$route) {\r\n let rule = (route.meta && route.meta.aliveId) || this.aliveId\r\n\r\n if (typeof rule === 'string') {\r\n rule = rules[rule.toLowerCase()]\r\n }\r\n\r\n if (typeof rule !== 'function') {\r\n rule = rules.path\r\n }\r\n\r\n return rule.bind(this)(route)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../util'\r\nimport { getFirstComponentChild } from '../util/dom'\r\nimport { isAlikeRoute, isSameComponentRoute } from '../util/route'\r\n\r\nimport rule from './RouterTab/rule'\r\n\r\nexport default {\r\n name: 'RouterAlive',\r\n mixins: [ rule ],\r\n\r\n beforeCreate () {\r\n Object.assign(this, {\r\n cache: Object.create(null),\r\n lastRoute: this.$route\r\n })\r\n },\r\n\r\n render () {\r\n const slot = this.$slots.default\r\n const vnode = getFirstComponentChild(slot)\r\n const vmOpts = vnode && vnode.componentOptions\r\n\r\n if (vmOpts) {\r\n const { cache, $route, lastRoute } = this\r\n\r\n // 如果是transition组件,页面组件则为子元素\r\n const pageNode = vmOpts.tag === 'transition' ? vmOpts.children[0] : vnode\r\n\r\n if (pageNode && pageNode.componentOptions) {\r\n // 获取缓存\r\n const key = this.getAliveId()\r\n const cacheItem = cache[key]\r\n const { vm: cacheVm, route: cacheRoute } = cacheItem || emptyObj\r\n\r\n // 是否需要重载路由强制刷新页面组件\r\n let needReloadRouter = false\r\n\r\n // 路由是否改变\r\n let isRouteChange = lastRoute !== $route\r\n\r\n // 是否跟上次路由共用组件\r\n let isSameComponent = isRouteChange && isSameComponentRoute($route, lastRoute)\r\n\r\n if (isRouteChange) {\r\n // 更新上次路由\r\n this.lastRoute = $route\r\n\r\n // 添加缓存\r\n if (!cacheItem) this.set(key, { route: $route })\r\n }\r\n\r\n if (cacheVm) {\r\n // 缓存组件的路由地址除hash外一致则取缓存的组件\r\n if (isAlikeRoute(cacheRoute, $route)) {\r\n pageNode.componentInstance = cacheVm\r\n } else {\r\n // 缓存组件路由地址不匹配则销毁缓存并重载路由\r\n cacheVm.$destroy()\r\n cacheItem.vm = null\r\n needReloadRouter = true\r\n }\r\n }\r\n\r\n // 路由改变后但组件相同需重载路由\r\n if (isSameComponent) needReloadRouter = true\r\n\r\n // 重载路由以强制更新页面\r\n needReloadRouter && this.$routerTab.reloadRouter()\r\n\r\n // 标记为keepAlive和routerAlive\r\n pageNode.data.keepAlive = true\r\n pageNode.data.routerAlive = this\r\n }\r\n }\r\n\r\n return vnode || (slot && slot[0])\r\n },\r\n\r\n methods: {\r\n // 设置缓存项\r\n set (key, item) {\r\n const { cache } = this\r\n\r\n this.$emit('update', key, item)\r\n\r\n // 更新缓存数据\r\n return (cache[key] = item)\r\n },\r\n\r\n // 删除缓存项\r\n remove (key) {\r\n const { cache } = this\r\n const item = cache[key]\r\n\r\n // 销毁组件实例\r\n if (item) {\r\n item.vm && item.vm.$destroy()\r\n delete cache[key]\r\n }\r\n\r\n this.$emit('remove', [ key ])\r\n },\r\n\r\n // 清理缓存\r\n clear (key) {\r\n const item = this.cache[key]\r\n const vm = item && item.vm\r\n if (vm) {\r\n vm.$destroy()\r\n item.vm = null\r\n }\r\n }\r\n }\r\n}\r\n","import { emptyObj, emptyArray } from '../../util'\r\n\r\n// 右键菜单\r\nexport default {\r\n data () {\r\n return {\r\n // 右键菜单\r\n contextmenu: {\r\n id: null,\r\n index: -1,\r\n left: 0,\r\n top: 0\r\n }\r\n }\r\n },\r\n\r\n computed: {\r\n // 右键菜单是否当前页签\r\n isContextTabActived () {\r\n return this.contextmenu.id === this.activedTab\r\n },\r\n\r\n // 右键页签是否允许关闭\r\n isContextTabCanBeClosed () {\r\n let { items, contextmenu } = this\r\n let contextTab = items[contextmenu.index]\r\n return items.length > 1 && contextTab && contextTab.closable !== false\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsLeft () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(0, index).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 左侧可关闭的页签\r\n tabsRight () {\r\n let { items, contextmenu: { id, index } } = this\r\n return id ? items.slice(index + 1).filter(({ closable }) => closable !== false) : emptyArray\r\n },\r\n\r\n // 其他可关闭的页签\r\n tabsOther () {\r\n let { items, contextmenu: { id } } = this\r\n return id ? items.filter(({ closable, id: tid }) => closable !== false && id !== tid) : emptyArray\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.hideContextmenu()\r\n },\r\n\r\n // 监听右键菜单显示关闭\r\n 'contextmenu.id' (val, old) {\r\n if (!old && val) {\r\n // 显示右键菜单,绑定点击关闭事件\r\n document.addEventListener('click', this.onClick = (e) => {\r\n if (e.target !== this.$el.querySelector('.router-tab-contextmenu')) {\r\n this.hideContextmenu()\r\n }\r\n })\r\n } else if (old && !val) {\r\n // 隐藏右键菜单,移除点击关闭事件\r\n document.removeEventListener('click', this.onClick)\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n // 显示页签右键菜单\r\n showContextmenu (id, index, e) {\r\n // 菜单定位\r\n let { clientY: top, clientX: left } = e || emptyObj\r\n Object.assign(this.contextmenu, { id, index, top, left })\r\n },\r\n\r\n // 关闭页签右键菜单\r\n hideContextmenu () {\r\n this.showContextmenu(null, -1)\r\n },\r\n\r\n // 关闭多个页签\r\n async closeMulti (tabs) {\r\n let { items, $router, contextmenu } = this\r\n let nextTab = items.find(({ id }) => id === contextmenu.id)\r\n\r\n for (let { id } of tabs) {\r\n try {\r\n await this.removeTab(id)\r\n } catch (e) {}\r\n }\r\n\r\n // 当前页签如已关闭,则打开右键选中页签\r\n if (items.findIndex(({ id }) => id === this.activedTab) === -1) {\r\n $router.replace(nextTab.to)\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: '无标题'\r\n },\r\n contextmenu: {\r\n refresh: '刷新',\r\n refreshAll: '刷新所有',\r\n close: '关闭',\r\n closeLefts: '关闭左侧',\r\n closeRights: '关闭右侧',\r\n closeOthers: '关闭其他'\r\n },\r\n msg: {\r\n keepOneTab: '至少应保留1个页签',\r\n i18nProp: '请提供“i18n”方法以处理国际化内容'\r\n }\r\n}\r\n","export default {\r\n tab: {\r\n untitled: 'Untitled'\r\n },\r\n contextmenu: {\r\n refresh: 'Refresh',\r\n refreshAll: 'Refresh All',\r\n close: 'Close',\r\n closeLefts: 'Close to the Left',\r\n closeRights: 'Close to the Right',\r\n closeOthers: 'Close Others'\r\n },\r\n msg: {\r\n keepOneTab: 'Keep at least 1 tab',\r\n i18nProp: 'Method \"i18n\" is not defined on the instance'\r\n }\r\n}\r\n","import zhCN from './zh-CN'\r\nimport en from './en'\r\n\r\nexport default {\r\n 'zh-CN': zhCN,\r\n en\r\n}\r\n","const prefix = '[vue-router-tab]'\r\n\r\n// 错误\r\nexport function assert (condition, message) {\r\n if (!condition) {\r\n throw new Error(`${prefix} ${message}`)\r\n }\r\n}\r\n\r\n// 警告\r\nexport function warn (condition, message) {\r\n if (process.env.NODE_ENV !== 'production' && !condition) {\r\n typeof console !== 'undefined' && console.warn(`${prefix} ${message}`)\r\n }\r\n}\r\n","import langs from '../../lang' // 语言配置\r\nimport { warn } from '../../util/warn'\r\n\r\n// 国际化\r\nexport default {\r\n props: {\r\n // 组件语言\r\n // - 为字符串时,可以设置为内置的语言 'zh-CN' (默认) 和 'en'\r\n // - 为对象时,可设置自定义的语言\r\n language: {\r\n type: [ String, Object ],\r\n default: 'zh-CN'\r\n },\r\n\r\n // 页签国际化配置 i18n (key, [args])\r\n i18n: Function\r\n },\r\n\r\n computed: {\r\n // 语言内容\r\n lang () {\r\n let lang = this.language\r\n\r\n if (typeof lang === 'string') {\r\n lang = langs[lang]\r\n }\r\n\r\n // 找不到语言配置,则使用英文\r\n if (!lang) lang = langs['en']\r\n\r\n return lang\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取国际化内容\r\n i18nText (text) {\r\n let { key, params } = this.ii8nParse(text)\r\n\r\n if (key) {\r\n const hasI18nProp = typeof this.i18n === 'function'\r\n\r\n // 未配置 i18n 方法则警告\r\n if (!this._hasI18nPropWarn) {\r\n warn(hasI18nProp, this.lang.msg.i18nProp)\r\n this._hasI18nPropWarn = true\r\n }\r\n\r\n if (hasI18nProp) {\r\n return this.i18n(key, params)\r\n }\r\n }\r\n\r\n return text\r\n },\r\n\r\n // 解析国际化\r\n ii8nParse (text) {\r\n let key\r\n let params\r\n\r\n // 获取国际化配置\r\n if (typeof text === 'string') {\r\n // 字符串方式配置:'i18n:custom.lang.key'\r\n const res = /^i18n:([^\\s]+)$/.exec(text)\r\n\r\n if (res) {\r\n key = res[1]\r\n params = []\r\n }\r\n } else if (Array.isArray(text)) {\r\n // 数组方式配置:['tab.i18n.key', 'param1', 'param2', ...]\r\n [key, ...params] = text\r\n }\r\n\r\n return { key, params }\r\n }\r\n }\r\n}\r\n","// iframe 页签\r\nexport default {\r\n data () {\r\n return {\r\n iframes: [],\r\n currentIframe: null\r\n }\r\n },\r\n\r\n methods: {\r\n // 获取 iframe 页签路由路径\r\n getIframePath (src, title = null, icon = null) {\r\n let path = `${this.basePath}/iframe/${encodeURIComponent(src)}`\r\n\r\n if (title) {\r\n path += '/' + title\r\n\r\n if (icon) {\r\n path += '/' + icon\r\n }\r\n }\r\n\r\n return path\r\n },\r\n\r\n // 打开 iframe 页签\r\n openIframeTab (src, title, icon) {\r\n let path = this.getIframePath(src, title, icon)\r\n this.$router.push(path)\r\n },\r\n\r\n // 关闭 iframe 页签\r\n closeIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.close(path, false)\r\n },\r\n\r\n // 刷新 iframe 页签\r\n refreshIframeTab (src) {\r\n let path = this.getIframePath(src)\r\n this.refresh(path, false)\r\n }\r\n }\r\n}\r\n","import { emptyObj } from '../../util'\r\nimport { isAlikeRoute } from '../../util/route'\r\n\r\n// 页面离开\r\nexport default {\r\n created () {\r\n this.$router.beforeEach(this.routerPageLeaveGuard)\r\n },\r\n\r\n methods: {\r\n // 页面离开导航守卫\r\n routerPageLeaveGuard (to, from, next) {\r\n if (this._isDestroyed) {\r\n let hooks = this.$router.beforeHooks\r\n let idx = hooks.indexOf(this.routerPageLeaveGuard)\r\n\r\n // 移除已销毁的RouterTab实例注册的导航守卫\r\n if (idx > -1) hooks.splice(idx, 1)\r\n\r\n next()\r\n } else {\r\n const id = this.getAliveId(to)\r\n const $alive = this.$refs.routerAlive\r\n const { route: cacheRoute } = ($alive && $alive.cache[id]) || emptyObj\r\n\r\n // 如果不是相同路由则检查beforePageLeave\r\n if (cacheRoute && !isAlikeRoute(to, cacheRoute)) {\r\n this.pageLeavePromise(id, 'replace')\r\n .then(() => next())\r\n .catch(() => next(false))\r\n } else {\r\n next()\r\n }\r\n }\r\n },\r\n\r\n // 页面离开Promise\r\n pageLeavePromise (id, type) {\r\n return new Promise((resolve, reject) => {\r\n let $alive = this.$refs.routerAlive\r\n let tab = this.items.find(item => item.id === id) // 当前页签\r\n let { vm } = $alive.cache[id] || emptyObj // 缓存数据\r\n let beforePageLeave = vm && vm.$vnode.componentOptions.Ctor.options.beforePageLeave\r\n\r\n if (typeof beforePageLeave === 'function') {\r\n // 页签关闭前\r\n beforePageLeave.bind(vm)(resolve, reject, tab, type)\r\n } else {\r\n resolve()\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import { debounce } from '../../util'\r\nimport { scrollTo } from '../../util/dom'\r\n\r\n// 页签滚动\r\nexport default {\r\n watch: {\r\n async activedTab () {\r\n // 激活页签时,如果当前页签不在可视区域,则滚动显示页签\r\n await this.$nextTick()\r\n\r\n let $cur = this.$el.querySelector('.router-tab-nav .actived')\r\n let $scr = this.$el.querySelector('.router-tab-scroll')\r\n if ($cur) {\r\n let cLeft = $cur.offsetLeft\r\n let sLeft = $scr.scrollLeft\r\n if (cLeft < sLeft || cLeft + $cur.clientWidth > sLeft + $scr.clientWidth) {\r\n this.adjust()\r\n }\r\n }\r\n }\r\n },\r\n\r\n created () {\r\n this.$nextTick(this.adjust)\r\n },\r\n\r\n mounted () {\r\n // 页面载入和浏览器窗口大小改变时调整Tab滚动显示\r\n window.addEventListener('resize', this.onResize = debounce(this.adjust))\r\n },\r\n\r\n destroyed () {\r\n // 销毁后移除监听事件\r\n window.removeEventListener('resize', this.onResize)\r\n },\r\n\r\n methods: {\r\n // Tab滚动\r\n tabScroll (direction) {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let space = $tab.clientWidth - 110\r\n\r\n scrollTo($scr, $scr.scrollLeft + (direction === 'left' ? -space : space))\r\n },\r\n\r\n // 调整Tab滚动显示\r\n adjust () {\r\n let $tab = this.$el.querySelector('.router-tab-header')\r\n let $scr = $tab.querySelector('.router-tab-scroll')\r\n let $nav = $scr.querySelector('.router-tab-nav')\r\n let $cur = $nav.querySelector('.actived')\r\n let isScroll = $nav.clientWidth > $scr.clientWidth // 判断是否需要滚动\r\n\r\n $tab.classList[isScroll ? 'add' : 'remove']('is-scroll')\r\n\r\n if ($cur && isScroll) {\r\n scrollTo($scr, $cur.offsetLeft + ($cur.clientWidth - $scr.clientWidth) / 2)\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue'\r\n\r\n// 方法\r\nimport { emptyObj } from '../../util'\r\nimport { getPathWithoutHash } from '../../util/route'\r\n\r\n// 子组件\r\nimport RouterAlive from '../RouterAlive'\r\n\r\n// 功能模块混入\r\nimport contextmenu from './contextmenu'\r\nimport i18n from './i18n'\r\nimport iframe from './iframe'\r\nimport pageLeave from './pageLeave'\r\nimport rule from './rule'\r\nimport scroll from './scroll'\r\n\r\n// RouterTab 组件\r\nexport default {\r\n name: 'RouterTab',\r\n components: { RouterAlive },\r\n mixins: [ contextmenu, i18n, iframe, pageLeave, rule, scroll ],\r\n props: {\r\n // 初始页签数据\r\n tabs: {\r\n type: Array,\r\n default: () => []\r\n },\r\n\r\n // router-view组件配置\r\n routerView: Object,\r\n\r\n // 页签过渡效果\r\n tabTransition: {\r\n type: [ String, Object ],\r\n default: 'router-tab-zoom'\r\n },\r\n\r\n // 页面过渡效果\r\n pageTransition: {\r\n type: [ String, Object ],\r\n default: () => ({\r\n name: 'router-tab-swap',\r\n mode: 'out-in'\r\n })\r\n }\r\n },\r\n\r\n data () {\r\n return {\r\n loading: false, // 路由页面loading\r\n items: [], // 页签项\r\n activedTab: null, // 当前激活的页签\r\n isRouterAlive: true\r\n }\r\n },\r\n\r\n watch: {\r\n // 路由切换更新激活的页签\r\n $route ($route) {\r\n this.loading = false\r\n this.updateActivedTab()\r\n this.fixCommentPage()\r\n }\r\n },\r\n\r\n beforeCreate () {\r\n // 添加到原型链\r\n Vue.prototype.$routerTab = this\r\n\r\n // 获取跟路径\r\n let matched = this.$route.matched\r\n this.basePath = (matched[matched.length - 2] || {}).path\r\n },\r\n\r\n created () {\r\n this.getTabItems()\r\n this.updateActivedTab()\r\n },\r\n\r\n methods: {\r\n // 根据初始页签数据生成页签列表\r\n getTabItems () {\r\n let { tabs, $router } = this\r\n let ids = {}\r\n\r\n this.items = tabs.map((item, index) => {\r\n let { to, closable, title, tips } = typeof item === 'string'\r\n ? { to: item }\r\n : (item || emptyObj)\r\n let route = to && $router.match(to)\r\n\r\n if (route) {\r\n let tab = this.getRouteTab(route)\r\n let id = tab.id\r\n\r\n // 根据id去重\r\n if (!ids[id]) {\r\n // 初始 tab 数据\r\n if (title) tab.title = title\r\n if (tips) tab.tips = tips\r\n tab.closable = closable !== false\r\n\r\n return (ids[id] = tab)\r\n }\r\n }\r\n }).filter(item => !!item)\r\n },\r\n\r\n // 更新激活的页签\r\n updateActivedTab () {\r\n this.activedTab = this.getAliveId()\r\n },\r\n\r\n // 更新tab数据\r\n updateTab (key, { route, tab }) {\r\n let { items } = this\r\n let matchIdx = items.findIndex(({ id }) => id === key)\r\n\r\n let item = Object.assign(this.getRouteTab(route), tab)\r\n\r\n if (matchIdx > -1) {\r\n let matchTab = items[matchIdx]\r\n item.closable = matchTab.closable !== false\r\n this.$set(items, matchIdx, item)\r\n } else {\r\n items.push(item)\r\n }\r\n },\r\n\r\n // 从路由地址获取 aliveId\r\n getIdByLocation (location, fullMatch = true) {\r\n if (!location) return\r\n\r\n let $route = this.$router.match(location, this.$router.currentRoute)\r\n\r\n // 路由地址精确匹配页签\r\n if (fullMatch) {\r\n let matchPath = getPathWithoutHash($route)\r\n let matchTab = this.items.find(({ to }) => to.split('#')[0] === matchPath)\r\n\r\n if (matchTab) {\r\n return matchTab.id\r\n }\r\n } else {\r\n return this.getAliveId($route)\r\n }\r\n },\r\n\r\n // 从route中获取tab数据\r\n getRouteTab (route) {\r\n let id = this.getAliveId(route)\r\n let { fullPath: to, meta } = route\r\n let { title, icon, tips } = meta\r\n\r\n return { id, to, title, icon, tips }\r\n },\r\n\r\n // 移除tab项\r\n async removeTab (id) {\r\n let { items } = this\r\n let $alive = this.$refs.routerAlive\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n if (items.length === 1) {\r\n throw new Error(this.lang.msg.keepOneTab)\r\n }\r\n\r\n try {\r\n await this.pageLeavePromise(id, 'close')\r\n\r\n // 承诺关闭后移除页签和缓存\r\n $alive.remove(id)\r\n idx > -1 && items.splice(idx, 1)\r\n } catch (e) {}\r\n },\r\n\r\n // 通过路由地址关闭页签\r\n close (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.closeTab(id)\r\n }\r\n } else {\r\n this.closeTab()\r\n }\r\n },\r\n\r\n // 通过页签id关闭页签\r\n async closeTab (id = this.activedTab) {\r\n let { activedTab, items, $router } = this\r\n const idx = items.findIndex(item => item.id === id)\r\n\r\n try {\r\n await this.removeTab(id)\r\n\r\n // 如果关闭当前页签,则打开后一个页签\r\n if (activedTab === id) {\r\n let nextTab = items[idx] || items[idx - 1]\r\n $router.replace(nextTab.to)\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n },\r\n\r\n // 通过路由地址刷新页签\r\n refresh (location, fullMatch = true) {\r\n if (location) {\r\n let id = this.getIdByLocation(location, fullMatch)\r\n if (id) {\r\n this.refreshTab(id)\r\n }\r\n } else {\r\n this.refreshTab()\r\n }\r\n },\r\n\r\n // 刷新指定页签\r\n async refreshTab (id = this.activedTab) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n this.$refs.routerAlive.clear(id)\r\n if (id === this.activedTab) this.reloadRouter()\r\n } catch (e) {}\r\n },\r\n\r\n /**\r\n * 刷新所有页签\r\n * @param {boolean} [force=false] 是否强制刷新,如果强制则忽略页面beforePageLeave\r\n */\r\n async refreshAll (force = false) {\r\n const $alive = this.$refs.routerAlive\r\n const { cache } = $alive\r\n for (const id in cache) {\r\n if (!force) {\r\n try {\r\n await this.pageLeavePromise(id, 'refresh')\r\n $alive.clear(id)\r\n } catch (e) {}\r\n } else {\r\n $alive.clear(id)\r\n }\r\n }\r\n this.reloadRouter()\r\n },\r\n\r\n // 重载路由组件\r\n async reloadRouter (ignoreTransition = false) {\r\n this.isRouterAlive = false\r\n\r\n // 默认在页面过渡结束后会设置 isRouterAlive 为 true\r\n // 如果过渡事件失效,则需传入 ignoreTransition 为 true 手动更改\r\n if (ignoreTransition) {\r\n await this.$nextTick()\r\n this.isRouterAlive = true\r\n }\r\n },\r\n\r\n // 页签过渡结束\r\n onTabTransitionEnd () {\r\n this.adjust()\r\n },\r\n\r\n // 页面过渡结束\r\n onPageTransitionEnd () {\r\n if (!this.isRouterAlive) this.isRouterAlive = true\r\n },\r\n\r\n // 修复:当快速频繁切换页签时,旧页面离开过渡效果尚未完成,新页面内容无法正常mount,内容节点为comment类型\r\n fixCommentPage () {\r\n if (this.$refs.routerAlive.$el.nodeType === 8) {\r\n this.reloadRouter(true)\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/@vue/cli-plugin-eslint/node_modules/eslint-loader/index.js??ref--13-0!./index.js?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./RouterTab.vue?vue&type=template&id=8bd0c2cc&\"\nimport script from \"./index.js?vue&type=script&lang=js&\"\nexport * from \"./index.js?vue&type=script&lang=js&\"\nimport style0 from \"../../scss/routerTab.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"../../scss/transition.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// 路由页面混入\r\nexport default {\r\n // 创建前记录缓存\r\n created () {\r\n const { $route, $vnode } = this\r\n const $alive = $vnode && $vnode.data.routerAlive\r\n\r\n if (!$alive) return false\r\n\r\n // 标记为路由页面\r\n this._isRouterPage = true\r\n\r\n const key = $alive.getAliveId($route)\r\n\r\n // 更新缓存数据\r\n let cacheItem = $alive.set(key, {\r\n route: $route,\r\n vm: this\r\n })\r\n\r\n // 监听routerTab字段,更新页签信息\r\n this.$watch('routeTab', function (val, old) {\r\n cacheItem.tab = typeof val === 'string' ? { title: val } : val\r\n $alive.set(key, cacheItem)\r\n }, {\r\n deep: true,\r\n immediate: true\r\n })\r\n },\r\n\r\n // 解决webpack热加载后组件缓存不更新\r\n activated () {\r\n if (!this._isRouterPage) return false\r\n\r\n let ctorId = this.$vnode.componentOptions.Ctor.cid\r\n\r\n // 热加载后Ctor.cid改变\r\n if (this._ctorId && this._ctorId !== ctorId) {\r\n this.$destroy()\r\n this.$routerTab.refreshTab()\r\n }\r\n\r\n this._ctorId = ctorId\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"router-tab-iframe-fake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Iframe.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Iframe.vue?vue&type=template&id=0c8e4776&\"\nimport script from \"./Iframe.vue?vue&type=script&lang=js&\"\nexport * from \"./Iframe.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Iframe from '../page/Iframe.vue'\r\n\r\n// 注入的路由\r\nexport default [{\r\n // iframe 路由\r\n path: 'iframe/:src/:title?/:icon?',\r\n component: Iframe,\r\n props: true,\r\n meta: {\r\n aliveId: route => `iframe-${route.params.src}`\r\n }\r\n}]\r\n","import RouterTab from './components/RouterTab/RouterTab.vue'\r\nimport routerPage from './mixins/routerPage'\r\nimport routes from './util/routes'\r\n\r\n// 安装\r\nRouterTab.install = function install (Vue, options) {\r\n if (install.installed) return\r\n install.installed = true\r\n\r\n Vue.component(RouterTab.name, RouterTab)\r\n Vue.mixin(routerPage)\r\n}\r\n\r\n// 如果浏览器环境且拥有全局Vue,则自动安装组件\r\nif (typeof window !== 'undefined' && window.Vue) {\r\n window.Vue.use(RouterTab)\r\n}\r\n\r\nexport default RouterTab\r\n\r\n// 路由\r\nexport const RouterTabRoutes = routes\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index ca4a0ac0..37b9786a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-router-tab", - "version": "0.1.8", + "version": "0.1.9", "description": "Vue.js tab components, based on Vue Router", "keywords": [ "vue",