(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,a){e.exports=a("cd49")},"023d":function(e,t,a){"use strict";var n=a("118f"),r=a.n(n);r.a},"0528":function(e,t,a){"use strict";var n=a("84e8"),r=a.n(n);r.a},"0613":function(e,t,a){"use strict";var n=a("2b0e"),r=a("2f62");n["default"].use(r["a"]),t["a"]=new r["a"].Store({})},"07dc":function(e,t,a){"use strict";var n=a("07de"),r=a.n(n);r.a},"07de":function(e,t,a){},"0a41":function(e,t,a){},"0bed":function(e,t,a){},1131:function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dropdown",{staticClass:"international",attrs:{trigger:"click"},on:{command:e.handleSetLanguage}},[a("div",[a("svg-icon",{staticClass:"international-icon",attrs:{name:"language"}})],1),a("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[a("el-dropdown-item",{attrs:{disabled:"zh"===e.language,command:"zh"}},[e._v("\n      中文\n    ")]),a("el-dropdown-item",{attrs:{disabled:"en"===e.language,command:"en"}},[e._v("\n      English\n    ")])],1)],1)},r=[],i=a("d225"),c=a("b0b4"),o=a("308d"),s=a("6bb5"),u=a("4e2b"),l=a("9ab4"),h=a("60a3"),d=a("ac1a"),f=function(e){function t(){return Object(i["a"])(this,t),Object(o["a"])(this,Object(s["a"])(t).apply(this,arguments))}return Object(u["a"])(t,e),Object(c["a"])(t,[{key:"handleSetLanguage",value:function(e){this.$i18n.locale=e,d["a"].SetLanguage(e),this.$message({message:"Switch Language Success",type:"success"})}},{key:"language",get:function(){return d["a"].language}}]),t}(h["c"]);f=l["a"]([Object(h["a"])({name:"Login"})],f);var b=f,m=b,p=a("2877"),v=Object(p["a"])(m,n,r,!1,null,null,null);t["a"]=v.exports},"118f":function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff"}},"14b3":function(e,t,a){},"24ab":function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff",theme:"#1890ff"}},2712:function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff"}},"2e44":function(e,t,a){"use strict";var n=a("0bed"),r=a.n(n);r.a},"2fd6":function(e,t,a){"use strict";var n=a("d715"),r=a.n(n);r.a},"362f":function(e,t,a){},"44a6":function(e,t,a){},"48a0":function(e,t,a){"use strict";var n=a("44a6"),r=a.n(n);r.a},"4f32":function(e,t,a){"use strict";var n=a("c970"),r=a.n(n);r.a},5581:function(e,t,a){"use strict";a.d(t,"b",(function(){return c})),a.d(t,"g",(function(){return o})),a.d(t,"a",(function(){return u})),a.d(t,"f",(function(){return l})),a.d(t,"c",(function(){return d})),a.d(t,"h",(function(){return f})),a.d(t,"d",(function(){return m})),a.d(t,"i",(function(){return p})),a.d(t,"e",(function(){return v}));var n=a("a78e"),r=a.n(n),i="sidebar_status",c=function(){return r.a.get(i)},o=function(e){return r.a.set(i,e)},s="language",u=function(){return r.a.get(s)},l=function(e){return r.a.set(s,e)},h="size",d=function(){return r.a.get(h)},f=function(e){return r.a.set(h,e)},b="vue_typescript_admin_access_token",m=function(){return r.a.get(b)},p=function(e){return r.a.set(b,e)},v=function(){return r.a.remove(b)}},"58dd":function(e,t,a){"use strict";var n=a("d986"),r=a.n(n);r.a},"5cf3":function(e,t,a){"use strict";var n=a("75f0"),r=a.n(n);r.a},"6ebf":function(e,t,a){"use strict";a("8e6e"),a("ac6a"),a("456d");var n=a("bd86"),r=a("2b0e"),i=a("a925"),c=a("5581"),o=a("b2d6"),s=a.n(o),u=a("f0d9"),l=a.n(u),h={route:{dashboard:"Dashboard",i18n:"I18n",profile:"Profile",SchemaRoutes:"Routes",SchemaRoutesList:"Routes",SchemaRoutesEdit:"Router Edit",SchemaRoutesCreate:"Router Create",SchemaConsumers:"Consumers",SchemaConsumersList:"Consumers",SchemaConsumersEdit:"Consumer Edit",SchemaConsumersCreate:"Consumer Create",SchemaServices:"Services",SchemaServiceList:"Services",SchemaServiceCreate:"Service Create",SchemaServiceEdit:"Service Edit",SchemaSSL:"SSL",SchemaSSLList:"SSL",SchemaSSLEdit:"SSL Edit",SchemaSSLCreate:"SSL Create",SchemaUpstream:"Upstream",SchemaUpstreamList:"Upstream",SchemaUpstreamCreate:"Upstream Create",SchemaUpstreamEdit:"Upstream Edit"},table:{add:"Add",edit:"Edit",delete:"Delete",actions:"Action"},navbar:{logOut:"Log Out"},login:{title:"APISIX Login",logIn:"Login",username:"Username",password:"Password"},tagsView:{refresh:"Refresh",close:"Close",closeOthers:"Close Others",closeAll:"Close All"},button:{save:"Save",cancel:"Cancel",add_plugin:"Add Plugin",add_node:"Add Node",delete:"Delete",addValue:"Add Value"},schema:{route:{inputMultipleValues:"Input value then press return button",propertyHostsTip:"Any values are supported"}}},d={route:{dashboard:"首页",i18n:"国际化",profile:"个人中心",SchemaRoutes:"Routes",SchemaRoutesList:"Routes",SchemaRoutesEdit:"编辑 Router",SchemaRoutesCreate:"创建 Router",SchemaConsumers:"Consumers",SchemaConsumersList:"Consumers",SchemaConsumersEdit:"编辑 Consumer",SchemaConsumersCreate:"创建 Consumer",SchemaServices:"Services",SchemaServiceList:"Services",SchemaServiceCreate:"创建 Service",SchemaServiceEdit:"编辑 Service",SchemaSSL:"SSL",SchemaSSLList:"SSL",SchemaSSLEdit:"编辑 SSL",SchemaSSLCreate:"创建 SSL",SchemaUpstream:"Upstream",SchemaUpstreamList:"Upstream",SchemaUpstreamCreate:"创建 Upstream",SchemaUpstreamEdit:"编辑 Upstream"},table:{add:"添加",edit:"编辑",delete:"删除",actions:"操作"},navbar:{logOut:"退出登录"},login:{title:"系统登录",logIn:"登录",username:"账号",password:"密码"},tagsView:{refresh:"刷新",close:"关闭",closeOthers:"关闭其它",closeAll:"关闭所有"},settings:{title:"系统布局配置",theme:"主题色",showTagsView:"显示 Tags-View",showSidebarLogo:"显示侧边栏 Logo",fixedHeader:"固定 Header",sidebarTextTheme:"侧边栏文字主题色"},button:{save:"保存",cancel:"取消",add_plugin:"添加 Plugin",add_node:"添加 Node",delete:"删除",addValue:"添加值"},schema:{route:{inputMultipleValues:"输入值后并回车",propertyHostsTip:"任何值均可"}}};function f(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function b(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?f(a,!0).forEach((function(t){Object(n["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):f(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}a.d(t,"b",(function(){return p})),r["default"].use(i["a"]);var m={en:b({},h,{},s.a),zh:b({},d,{},l.a)},p=function(){var e=Object(c["a"])();if(e)return e;for(var t=navigator.language.toLowerCase(),a=Object.keys(m),n=0,r=a;n<r.length;n++){var i=r[n];if(t.indexOf(i)>-1)return i}return"en"},v=new i["a"]({locale:p(),messages:m});t["a"]=v},"75f0":function(e,t,a){},"75fb":function(e,t,a){"use strict";a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return r}));a("6b54");var n=function(e){return["admin","editor"].indexOf(e.trim())>=0},r=function(e){return/^(https?:|mailto:|tel:)/.test(e)}},"84e8":function(e,t,a){},"8ad0":function(e,t,a){"use strict";a.d(t,"a",(function(){return g}));a("8e6e"),a("456d");var n=a("d225"),r=a("b0b4"),i=a("308d"),c=a("6bb5"),o=a("4e2b"),s=a("bd86"),u=(a("ac6a"),a("6762"),a("2fdb"),a("9ab4")),l=a("6fc5"),h=a("afbc"),d=a("0613");function f(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function b(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?f(a,!0).forEach((function(t){Object(s["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):f(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var m=function(e,t){return!t.meta||!t.meta.roles||e.some((function(e){return t.meta.roles.includes(e)}))},p=function e(t,a){var n=[];return t.forEach((function(t){var r=b({},t);m(a,r)&&(r.children&&(r.children=e(r.children,a)),n.push(r))})),n},v=function(e){function t(){var e;return Object(n["a"])(this,t),e=Object(i["a"])(this,Object(c["a"])(t).apply(this,arguments)),e.routes=[],e.dynamicRoutes=[],e}return Object(o["a"])(t,e),Object(r["a"])(t,[{key:"SET_ROUTES",value:function(e){this.routes=h["b"].concat(e),this.dynamicRoutes=e}},{key:"GenerateRoutes",value:function(e){var t;t=e.includes("admin")?h["a"]:p(h["a"],e),this.SET_ROUTES(t)}}]),t}(l["d"]);u["a"]([l["c"]],v.prototype,"SET_ROUTES",null),u["a"]([l["a"]],v.prototype,"GenerateRoutes",null),v=u["a"]([Object(l["b"])({dynamic:!0,store:d["a"],name:"permission"})],v);var g=Object(l["e"])(v)},"8b99":function(e,t,a){"use strict";var n={title:"Dashboard for APISIX",showSettings:!0,showTagsView:!0,fixedHeader:!1,showSidebarLogo:!0,errorLog:["production"],sidebarTextTheme:!0,devServerPort:9527};t["a"]=n},9858:function(e,t,a){"use strict";var n=a("2712"),r=a.n(n);r.a},"9dba":function(e,t,a){"use strict";a.d(t,"a",(function(){return v}));a("7f7f"),a("96cf");var n=a("3b8d"),r=a("d225"),i=a("b0b4"),c=a("308d"),o=a("6bb5"),s=a("4e2b"),u=a("9ab4"),l=a("6fc5"),h=a("5581"),d=a("afbc"),f=a("8ad0"),b=a("e741"),m=a("0613"),p=function(e){function t(){var e;return Object(r["a"])(this,t),e=Object(c["a"])(this,Object(o["a"])(t).apply(this,arguments)),e.token=Object(h["d"])()||"",e.name="",e.avatar="",e.introduction="",e.roles=[],e.email="",e}return Object(s["a"])(t,e),Object(i["a"])(t,[{key:"SET_TOKEN",value:function(e){this.token=e}},{key:"SET_NAME",value:function(e){this.name=e}},{key:"SET_AVATAR",value:function(e){this.avatar=e}},{key:"SET_INTRODUCTION",value:function(e){this.introduction=e}},{key:"SET_ROLES",value:function(e){this.roles=e}},{key:"SET_EMAIL",value:function(e){this.email=e}},{key:"Login",value:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(t){var a,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:a=t.username,t.password,a=a.trim(),n={accessToken:a+"-token"},Object(h["i"])(n.accessToken),this.SET_TOKEN(n.accessToken);case 5:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()},{key:"ResetToken",value:function(){Object(h["e"])(),this.SET_TOKEN(""),this.SET_ROLES([])}},{key:"GetUserInfo",value:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(){var t,a,n,r,i,c,o;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(""!==this.token){e.next=2;break}throw Error("GetUserInfo: token is undefined!");case 2:if(t={user:{id:0,username:"admin",password:"any",name:"Super Admin",avatar:"https://user-images.githubusercontent.com/2106987/68087873-a0543980-fe94-11e9-8203-62958ce69ed6.png",introduction:"I am a super administrator",email:"dev@apache.org",phone:"1234567890",roles:["admin"]}},t){e.next=5;break}throw Error("Verification failed, please Login again.");case 5:if(a=t.user,n=a.roles,r=a.name,i=a.avatar,c=a.introduction,o=a.email,n&&!(n.length<=0)){e.next=8;break}throw Error("GetUserInfo: roles must be a non-null array!");case 8:this.SET_ROLES(n),this.SET_NAME(r),this.SET_AVATAR(i),this.SET_INTRODUCTION(c),this.SET_EMAIL(o);case 13:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},{key:"ChangeRoles",value:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(t){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=t+"-token",this.SET_TOKEN(a),Object(h["i"])(a),e.next=5,this.GetUserInfo();case 5:Object(d["d"])(),f["a"].GenerateRoutes(this.roles),d["c"].addRoutes(f["a"].dynamicRoutes),b["a"].delAllViews();case 9:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()},{key:"LogOut",value:function(){var e=Object(n["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(""!==this.token){e.next=2;break}throw Error("LogOut: token is undefined!");case 2:Object(h["e"])(),Object(d["d"])(),this.SET_TOKEN(""),this.SET_ROLES([]);case 6:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}]),t}(l["d"]);u["a"]([l["c"]],p.prototype,"SET_TOKEN",null),u["a"]([l["c"]],p.prototype,"SET_NAME",null),u["a"]([l["c"]],p.prototype,"SET_AVATAR",null),u["a"]([l["c"]],p.prototype,"SET_INTRODUCTION",null),u["a"]([l["c"]],p.prototype,"SET_ROLES",null),u["a"]([l["c"]],p.prototype,"SET_EMAIL",null),u["a"]([l["a"]],p.prototype,"Login",null),u["a"]([l["a"]],p.prototype,"ResetToken",null),u["a"]([l["a"]],p.prototype,"GetUserInfo",null),u["a"]([l["a"]],p.prototype,"ChangeRoles",null),u["a"]([l["a"]],p.prototype,"LogOut",null),p=u["a"]([Object(l["b"])({dynamic:!0,store:m["a"],name:"user"})],p);var v=Object(l["e"])(p)},a1de:function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff"}},a480:function(e,t,a){"use strict";var n=a("c0d4"),r=a.n(n);r.a},ac1a:function(e,t,a){"use strict";a.d(t,"b",(function(){return n})),a.d(t,"a",(function(){return m}));var n,r=a("d225"),i=a("b0b4"),c=a("308d"),o=a("6bb5"),s=a("4e2b"),u=a("9ab4"),l=a("6fc5"),h=a("5581"),d=a("6ebf"),f=a("0613");(function(e){e[e["Mobile"]=0]="Mobile",e[e["Desktop"]=1]="Desktop"})(n||(n={}));var b=function(e){function t(){var e;return Object(r["a"])(this,t),e=Object(c["a"])(this,Object(o["a"])(t).apply(this,arguments)),e.sidebar={opened:"closed"!==Object(h["b"])(),withoutAnimation:!1},e.device=n.Desktop,e.language=Object(d["b"])(),e.size=Object(h["c"])()||"medium",e}return Object(s["a"])(t,e),Object(i["a"])(t,[{key:"TOGGLE_SIDEBAR",value:function(e){this.sidebar.opened=!this.sidebar.opened,this.sidebar.withoutAnimation=e,this.sidebar.opened?Object(h["g"])("opened"):Object(h["g"])("closed")}},{key:"CLOSE_SIDEBAR",value:function(e){this.sidebar.opened=!1,this.sidebar.withoutAnimation=e,Object(h["g"])("closed")}},{key:"TOGGLE_DEVICE",value:function(e){this.device=e}},{key:"SET_LANGUAGE",value:function(e){this.language=e,Object(h["f"])(this.language)}},{key:"SET_SIZE",value:function(e){this.size=e,Object(h["h"])(this.size)}},{key:"ToggleSideBar",value:function(e){this.TOGGLE_SIDEBAR(e)}},{key:"CloseSideBar",value:function(e){this.CLOSE_SIDEBAR(e)}},{key:"ToggleDevice",value:function(e){this.TOGGLE_DEVICE(e)}},{key:"SetLanguage",value:function(e){this.SET_LANGUAGE(e)}},{key:"SetSize",value:function(e){this.SET_SIZE(e)}}]),t}(l["d"]);u["a"]([l["c"]],b.prototype,"TOGGLE_SIDEBAR",null),u["a"]([l["c"]],b.prototype,"CLOSE_SIDEBAR",null),u["a"]([l["c"]],b.prototype,"TOGGLE_DEVICE",null),u["a"]([l["c"]],b.prototype,"SET_LANGUAGE",null),u["a"]([l["c"]],b.prototype,"SET_SIZE",null),u["a"]([l["a"]],b.prototype,"ToggleSideBar",null),u["a"]([l["a"]],b.prototype,"CloseSideBar",null),u["a"]([l["a"]],b.prototype,"ToggleDevice",null),u["a"]([l["a"]],b.prototype,"SetLanguage",null),u["a"]([l["a"]],b.prototype,"SetSize",null),b=u["a"]([Object(l["b"])({dynamic:!0,store:f["a"],name:"app"})],b);var m=Object(l["e"])(b)},afbc:function(e,t,a){"use strict";var n=a("2b0e"),r=a("8c4f"),i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"app-wrapper",class:e.classObj},[e.classObj.mobile&&e.sidebar.opened?a("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),a("sidebar",{staticClass:"sidebar-container"}),a("div",{staticClass:"main-container",class:{hasTagsView:e.showTagsView}},[a("div",{class:{"fixed-header":e.fixedHeader}},[a("navbar"),e.showTagsView?a("tags-view"):e._e()],1),a("app-main")],1)],1)},c=[],o=a("d225"),s=a("b0b4"),u=a("308d"),l=a("6bb5"),h=a("4e2b"),d=a("9ab4"),f=a("60a3"),b=a("2fe1"),m=a("ac1a"),p=a("6fc5"),v=a("0613"),g=a("24ab"),y=a.n(g),O=a("8b99"),S=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.theme=y.a.theme,e.fixedHeader=O["a"].fixedHeader,e.showSettings=O["a"].showSettings,e.showTagsView=O["a"].showTagsView,e.showSidebarLogo=O["a"].showSidebarLogo,e.sidebarTextTheme=O["a"].sidebarTextTheme,e}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"CHANGE_SETTING",value:function(e){var t=e.key,a=e.value;this.hasOwnProperty(t)&&(this[t]=a)}},{key:"ChangeSetting",value:function(e){this.CHANGE_SETTING(e)}}]),t}(p["d"]);d["a"]([p["c"]],S.prototype,"CHANGE_SETTING",null),d["a"]([p["a"]],S.prototype,"ChangeSetting",null),S=d["a"]([Object(p["b"])({dynamic:!0,store:v["a"],name:"settings"})],S);var k=Object(p["e"])(S),j=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",{staticClass:"app-main"},[a("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[a("keep-alive",{attrs:{include:e.cachedViews}},[a("router-view",{key:e.key})],1)],1)],1)},w=[],E=a("e741"),_=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"cachedViews",get:function(){return E["a"].cachedViews}},{key:"key",get:function(){return this.$route.path}}]),t}(f["c"]);_=d["a"]([Object(f["a"])({name:"AppMain"})],_);var C=_,T=C,L=(a("c512"),a("2877")),V=Object(L["a"])(T,j,w,!1,null,"6f60695a",null),D=V.exports,x=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"navbar"},[a("hamburger",{staticClass:"hamburger-container",attrs:{id:"hamburger-container","is-active":e.sidebar.opened},on:{toggleClick:e.toggleSideBar}}),a("breadcrumb",{staticClass:"breadcrumb-container",attrs:{id:"breadcrumb-container"}}),a("div",{staticClass:"right-menu"},["mobile"!==e.device?[a("screenfull",{staticClass:"right-menu-item hover-effect"}),a("lang-select",{staticClass:"right-menu-item hover-effect"})]:e._e(),a("el-dropdown",{staticClass:"avatar-container right-menu-item hover-effect",attrs:{trigger:"click"}},[a("div",{staticClass:"avatar-wrapper"},[a("img",{staticClass:"user-avatar",attrs:{src:e.avatar}}),a("i",{staticClass:"el-icon-caret-bottom"})]),a("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[a("el-dropdown-item",{attrs:{divided:""}},[a("span",{staticStyle:{display:"block"},on:{click:e.logout}},[e._v(e._s(e.$t("navbar.logOut")))])])],1)],1)],2)],1)},I=[],A=(a("6b54"),a("96cf"),a("3b8d")),R=a("9dba"),P=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[a("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.breadcrumbs,(function(t,n){return a("el-breadcrumb-item",{key:t.path},["noredirect"===t.redirect||n===e.breadcrumbs.length-1?a("span",{staticClass:"no-redirect"},[e._v(e._s(e.$t("route."+t.meta.title)))]):a("a",{on:{click:function(a){return a.preventDefault(),e.handleLink(t)}}},[e._v(e._s(e.$t("route."+t.meta.title)))])])})),1)],1)},$=[],U=(a("7f7f"),a("f559"),a("bd11")),H=a.n(U),W=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.breadcrumbs=[],e}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"onRouteChange",value:function(e){e.path.startsWith("/redirect/")||this.getBreadcrumb()}},{key:"created",value:function(){this.getBreadcrumb()}},{key:"getBreadcrumb",value:function(){var e=this.$route.matched.filter((function(e){return e.meta&&e.meta.title}));e[0];this.breadcrumbs=e.filter((function(e){return e.meta&&e.meta.title&&!1!==e.meta.breadcrumb}))}},{key:"isDashboard",value:function(e){var t=e&&e.name;return!!t&&t.trim().toLocaleLowerCase()==="Dashboard".toLocaleLowerCase()}},{key:"pathCompile",value:function(e){var t=this.$route.params,a=H.a.compile(e);return a(t)}},{key:"handleLink",value:function(e){var t=e.redirect,a=e.path;t?this.$router.push(t):this.$router.push(this.pathCompile(a))}}]),t}(f["c"]);d["a"]([Object(f["d"])("$route")],W.prototype,"onRouteChange",null),W=d["a"]([Object(f["a"])({name:"Breadcrumb"})],W);var B=W,G=B,M=(a("fd8d"),Object(L["a"])(G,P,$,!1,null,"46457ace",null)),N=M.exports,z=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{class:[{"is-active":e.isActive}],on:{click:e.toggleClick}},[a("svg-icon",{attrs:{name:"hamburger",width:"20",height:"20"}})],1)},F=[],q=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"toggleClick",value:function(){this.$emit("toggleClick")}}]),t}(f["c"]);d["a"]([Object(f["b"])({default:!1})],q.prototype,"isActive",void 0),q=d["a"]([Object(f["a"])({name:"Hamburger"})],q);var K=q,X=K,Z=(a("2e44"),Object(L["a"])(X,z,F,!1,null,"4ddba192",null)),J=Z.exports,Y=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"header-search",class:{show:e.show},attrs:{id:"header-search"}},[a("svg-icon",{staticClass:"search-icon",attrs:{name:"search"},on:{click:function(t){return t.stopPropagation(),e.click(t)}}}),a("el-select",{ref:"headerSearchSelect",staticClass:"header-search-select",attrs:{"remote-method":e.querySearch,filterable:"","default-first-option":"",remote:"",placeholder:"Search"},on:{change:e.change},model:{value:e.search,callback:function(t){e.search=t},expression:"search"}},e._l(e.options,(function(e){return a("el-option",{key:e.path,attrs:{value:e,label:e.meta.title.join(" > ")}})})),1)],1)},Q=[],ee=(a("386d"),a("75fc")),te=(a("ac4d"),a("8a81"),a("ac6a"),a("df7c")),ae=a.n(te),ne=a("ffe7"),re=a.n(ne),ie=a("8ad0"),ce=a("6ebf"),oe=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.search="",e.show=!1,e.options=[],e.searchPool=[],e}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"onLangChange",value:function(){this.searchPool=this.generateRoutes(this.routes)}},{key:"onRoutesChange",value:function(){this.searchPool=this.generateRoutes(this.routes)}},{key:"onSearchPoolChange",value:function(e){this.initFuse(e)}},{key:"onShowChange",value:function(e){e?document.body.addEventListener("click",this.close):document.body.removeEventListener("click",this.close)}},{key:"mounted",value:function(){this.searchPool=this.generateRoutes(this.routes)}},{key:"click",value:function(){this.show=!this.show,this.show&&this.$refs.headerSearchSelect&&this.$refs.headerSearchSelect.focus()}},{key:"close",value:function(){this.$refs.headerSearchSelect&&this.$refs.headerSearchSelect.blur(),this.options=[],this.show=!1}},{key:"change",value:function(e){var t=this;this.$router.push(e.path),this.search="",this.options=[],this.$nextTick((function(){t.show=!1}))}},{key:"initFuse",value:function(e){this.fuse=new re.a(e,{shouldSort:!0,threshold:.4,location:0,distance:100,maxPatternLength:32,minMatchCharLength:1,keys:[{name:"title",weight:.7},{name:"path",weight:.3}]})}},{key:"generateRoutes",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=[],r=!0,i=!1,c=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var u=o.value;if(!u.meta||!u.meta.hidden){var l={path:ae.a.resolve(t,u.path),meta:{title:Object(ee["a"])(a)}};if(u.meta&&u.meta.title){var h=ce["a"].t("route.".concat(u.meta.title)).toString();l.meta.title=[].concat(Object(ee["a"])(l.meta.title),[h]),"noRedirect"!==u.redirect&&n.push(l)}if(u.children){var d=this.generateRoutes(u.children,l.path,l.meta.title);d.length>=1&&(n=[].concat(Object(ee["a"])(n),Object(ee["a"])(d)))}}}}catch(f){i=!0,c=f}finally{try{r||null==s.return||s.return()}finally{if(i)throw c}}return n}},{key:"querySearch",value:function(e){""!==e?this.fuse&&(this.options=this.fuse.search(e)):this.options=[]}},{key:"routes",get:function(){return ie["a"].routes}},{key:"lang",get:function(){return m["a"].language}}]),t}(f["c"]);d["a"]([Object(f["d"])("lang")],oe.prototype,"onLangChange",null),d["a"]([Object(f["d"])("routes")],oe.prototype,"onRoutesChange",null),d["a"]([Object(f["d"])("searchPool")],oe.prototype,"onSearchPoolChange",null),d["a"]([Object(f["d"])("show")],oe.prototype,"onShowChange",null),oe=d["a"]([Object(f["a"])({name:"HeaderSearch"})],oe);var se=oe,ue=se,le=(a("bb1b"),Object(L["a"])(ue,Y,Q,!1,null,"cc281d9e",null)),he=le.exports,de=a("1131"),fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"screenfull"}},[a("svg-icon",{attrs:{name:e.isFullscreen?"exit-fullscreen":"fullscreen"},on:{click:e.click}})],1)},be=[],me=a("93bf"),pe=a.n(me),ve=pe.a,ge=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.isFullscreen=!1,e}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"mounted",value:function(){ve&&ve.enabled&&ve.on("change",this.change)}},{key:"beforeDestory",value:function(){ve&&ve.enabled&&ve.off("change",this.change)}},{key:"change",value:function(){ve&&ve.enabled&&(this.isFullscreen=ve.isFullscreen)}},{key:"click",value:function(){if(ve){if(!ve.enabled)return this.$message({message:"you browser can not work",type:"warning"}),!1;ve.toggle()}}}]),t}(f["c"]);ge=d["a"]([Object(f["a"])({name:"Screenfull"})],ge);var ye=ge,Oe=ye,Se=Object(L["a"])(Oe,fe,be,!1,null,null,null),ke=Se.exports,je=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"toggleSideBar",value:function(){m["a"].ToggleSideBar(!1)}},{key:"logout",value:function(){var e=Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,R["a"].LogOut();case 2:this.$router.push("/login?redirect=".concat(this.$route.fullPath));case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},{key:"sidebar",get:function(){return m["a"].sidebar}},{key:"device",get:function(){return m["a"].device.toString()}},{key:"avatar",get:function(){return R["a"].avatar}}]),t}(f["c"]);je=d["a"]([Object(f["a"])({name:"Navbar",components:{Breadcrumb:N,Hamburger:J,HeaderSearch:he,LangSelect:de["a"],Screenfull:ke}})],je);var we=je,Ee=we,_e=(a("4f32"),Object(L["a"])(Ee,x,I,!1,null,"113f6570",null)),Ce=_e.exports,Te=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{class:{"has-logo":e.showLogo}},[e.showLogo?a("sidebar-logo",{attrs:{collapse:e.isCollapse}}):e._e(),a("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[a("el-menu",{attrs:{"default-active":e.activeMenu,collapse:e.isCollapse,"background-color":e.variables.menuBg,"text-color":e.variables.menuText,"active-text-color":e.menuActiveTextColor,"unique-opened":!1,"collapse-transition":!1,mode:"vertical"}},e._l(e.routes,(function(t){return a("sidebar-item",{key:t.path,attrs:{item:t,"base-path":t.path,"is-collapse":e.isCollapse}})})),1)],1)],1)},Le=[],Ve=function(){var e=this,t=e.$createElement,a=e._self._c||t;return e.item.meta&&e.item.meta.hidden?e._e():a("div",{class:["menu-wrapper",e.isCollapse?"simple-mode":"full-mode",{"first-level":e.isFirstLevel}]},[e.alwaysShowRootMenu||!e.theOnlyOneChild||e.theOnlyOneChild.children?a("el-submenu",{attrs:{index:e.resolvePath(e.item.path),"popper-append-to-body":""}},[a("template",{slot:"title"},[e.item.meta&&e.item.meta.icon?a("svg-icon",{attrs:{name:e.item.meta.icon}}):e._e(),e.item.meta&&e.item.meta.title?a("span",{attrs:{slot:"title"},slot:"title"},[e._v(e._s(e.$t("route."+e.item.meta.title)))]):e._e()],1),e.item.children?e._l(e.item.children,(function(t){return a("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{item:t,"is-collapse":e.isCollapse,"is-first-level":!1,"base-path":e.resolvePath(t.path)}})})):e._e()],2):[e.theOnlyOneChild.meta?a("sidebar-item-link",{attrs:{to:e.resolvePath(e.theOnlyOneChild.path)}},[a("el-menu-item",{class:{"submenu-title-noDropdown":e.isFirstLevel},attrs:{index:e.resolvePath(e.theOnlyOneChild.path)}},[e.theOnlyOneChild.meta.icon?a("svg-icon",{attrs:{name:e.theOnlyOneChild.meta.icon}}):e._e(),e.theOnlyOneChild.meta.title?a("span",{attrs:{slot:"title"},slot:"title"},[e._v(e._s(e.$t("route."+e.theOnlyOneChild.meta.title)))]):e._e()],1)],1):e._e()]],2)},De=[],xe=(a("8e6e"),a("456d"),a("bd86")),Ie=a("75fb"),Ae=function(){var e=this,t=e.$createElement,a=e._self._c||t;return e.isExternal(e.to)?a("a",{attrs:{href:e.to,target:"_blank",rel:"noopener"}},[e._t("default")],2):a("router-link",{attrs:{to:e.to}},[e._t("default")],2)},Re=[],Pe=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.isExternal=Ie["a"],e}return Object(h["a"])(t,e),t}(f["c"]);d["a"]([Object(f["b"])({required:!0})],Pe.prototype,"to",void 0),Pe=d["a"]([Object(f["a"])({name:"SidebarItemLink"})],Pe);var $e=Pe,Ue=$e,He=Object(L["a"])(Ue,Ae,Re,!1,null,null,null),We=He.exports;function Be(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function Ge(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Be(a,!0).forEach((function(t){Object(xe["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Be(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var Me=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"resolvePath",value:function(e){return Object(Ie["a"])(e)?e:Object(Ie["a"])(this.basePath)?this.basePath:ae.a.resolve(this.basePath,e)}},{key:"alwaysShowRootMenu",get:function(){return!(!this.item.meta||!this.item.meta.alwaysShow)}},{key:"showingChildNumber",get:function(){if(this.item.children){var e=this.item.children.filter((function(e){return!e.meta||!e.meta.hidden}));return e.length}return 0}},{key:"theOnlyOneChild",get:function(){if(this.showingChildNumber>1)return null;if(this.item.children){var e=!0,t=!1,a=void 0;try{for(var n,r=this.item.children[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value;if(!i.meta||!i.meta.hidden)return i}}catch(c){t=!0,a=c}finally{try{e||null==r.return||r.return()}finally{if(t)throw a}}}return Ge({},this.item,{path:""})}}]),t}(f["c"]);d["a"]([Object(f["b"])({required:!0})],Me.prototype,"item",void 0),d["a"]([Object(f["b"])({default:!1})],Me.prototype,"isCollapse",void 0),d["a"]([Object(f["b"])({default:!0})],Me.prototype,"isFirstLevel",void 0),d["a"]([Object(f["b"])({default:""})],Me.prototype,"basePath",void 0),Me=d["a"]([Object(f["a"])({name:"SidebarItem",components:{SidebarItemLink:We}})],Me);var Ne=Me,ze=Ne,Fe=(a("d729"),a("0528"),Object(L["a"])(ze,Ve,De,!1,null,"2712e9a1",null)),qe=Fe.exports,Ke=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"sidebar-logo-container",class:{collapse:e.collapse}},[a("transition",{attrs:{name:"sidebarLogoFade"}},[e.collapse?a("router-link",{key:"collapse",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[a("img",{staticClass:"sidebar-logo",attrs:{src:"favicon.ico"}})]):a("router-link",{key:"expand",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[a("img",{staticClass:"sidebar-logo",attrs:{src:"favicon.ico"}}),a("h1",{staticClass:"sidebar-title"},[e._v("\n        "+e._s(e.title)+"\n      ")])])],1)],1)},Xe=[],Ze=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.title="APISIX",e}return Object(h["a"])(t,e),t}(f["c"]);d["a"]([Object(f["b"])({required:!0})],Ze.prototype,"collapse",void 0),Ze=d["a"]([Object(f["a"])({name:"SidebarLogo"})],Ze);var Je=Ze,Ye=Je,Qe=(a("07dc"),Object(L["a"])(Ye,Ke,Xe,!1,null,"38484ed6",null)),et=Qe.exports,tt=a("a1de"),at=a.n(tt),nt=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"sidebar",get:function(){return m["a"].sidebar}},{key:"routes",get:function(){return ie["a"].routes}},{key:"showLogo",get:function(){return k.showSidebarLogo}},{key:"menuActiveTextColor",get:function(){return k.sidebarTextTheme?k.theme:at.a.menuActiveText}},{key:"variables",get:function(){return at.a}},{key:"activeMenu",get:function(){var e=this.$route,t=e.meta,a=e.path;return t.activeMenu?t.activeMenu:a}},{key:"isCollapse",get:function(){return!this.sidebar.opened}}]),t}(f["c"]);nt=d["a"]([Object(f["a"])({name:"SideBar",components:{SidebarItem:qe,SidebarLogo:et}})],nt);var rt=nt,it=rt,ct=(a("023d"),a("2fd6"),Object(L["a"])(it,Te,Le,!1,null,"59b65c36",null)),ot=ct.exports,st=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"tags-view-container",attrs:{id:"tags-view-container"}},[a("scroll-pane",{ref:"scrollPane",staticClass:"tags-view-wrapper"},e._l(e.visitedViews,(function(t){return a("router-link",{key:t.path,ref:"tag",refInFor:!0,staticClass:"tags-view-item",class:e.isActive(t)?"active":"",attrs:{to:{path:t.path,query:t.query,fullPath:t.fullPath},tag:"span"},nativeOn:{mouseup:function(a){return"button"in a&&1!==a.button?null:e.closeSelectedTag(t)},contextmenu:function(a){return a.preventDefault(),e.openMenu(t,a)}}},[e._v("\n      "+e._s(e.$t("route."+t.meta.title))+"\n      "),t.meta.affix?e._e():a("span",{staticClass:"el-icon-close",on:{click:function(a){return a.preventDefault(),a.stopPropagation(),e.closeSelectedTag(t)}}})])})),1),a("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"contextmenu",style:{left:e.left+"px",top:e.top+"px"}},[a("li",{on:{click:function(t){return e.refreshSelectedTag(e.selectedTag)}}},[e._v("\n      "+e._s(e.$t("tagsView.refresh"))+"\n    ")]),e.selectedTag.meta&&e.selectedTag.meta.affix?e._e():a("li",{on:{click:function(t){return e.closeSelectedTag(e.selectedTag)}}},[e._v("\n      "+e._s(e.$t("tagsView.close"))+"\n    ")]),a("li",{on:{click:e.closeOthersTags}},[e._v("\n      "+e._s(e.$t("tagsView.closeOthers"))+"\n    ")]),a("li",{on:{click:function(t){return e.closeAllTags(e.selectedTag)}}},[e._v("\n      "+e._s(e.$t("tagsView.closeAll"))+"\n    ")])])],1)},ut=[],lt=(a("a481"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-scrollbar",{ref:"scrollContainer",staticClass:"scroll-container",attrs:{vertical:!1},nativeOn:{wheel:function(t){return t.preventDefault(),e.handleScroll(t)}}},[e._t("default")],2)}),ht=[],dt=(a("20d6"),4),ft=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"handleScroll",value:function(e){var t=e.wheelDelta||40*-e.deltaY,a=this.$refs.scrollContainer,n=a.$refs.wrap;n.scrollLeft=n.scrollLeft+t/4}},{key:"moveToTarget",value:function(e){var t=this.$refs.scrollContainer,a=t.$el,n=a.offsetWidth,r=t.$refs.wrap,i=this.$parent.$refs.tag,c=null,o=null;if(i.length>0&&(c=i[0],o=i[i.length-1]),c===e)r.scrollLeft=0;else if(o===e)r.scrollLeft=r.scrollWidth-n;else{var s=i.findIndex((function(t){return t===e})),u=i[s-1],l=i[s+1],h=l.$el.offsetLeft+l.$el.offsetWidth+dt,d=u.$el.offsetLeft-dt;h>r.scrollLeft+n?r.scrollLeft=h-n:d<r.scrollLeft&&(r.scrollLeft=d)}}}]),t}(f["c"]);ft=d["a"]([Object(f["a"])({name:"ScrollPane"})],ft);var bt=ft,mt=bt,pt=(a("58dd"),a("48a0"),Object(L["a"])(mt,lt,ht,!1,null,"e4452e12",null)),vt=pt.exports;function gt(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function yt(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?gt(a,!0).forEach((function(t){Object(xe["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):gt(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var Ot=function(e){function t(){var e;return Object(o["a"])(this,t),e=Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments)),e.visible=!1,e.top=0,e.left=0,e.selectedTag={},e.affixTags=[],e}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"onRouteChange",value:function(){this.addTags(),this.moveToCurrentTag()}},{key:"onVisibleChange",value:function(e){e?document.body.addEventListener("click",this.closeMenu):document.body.removeEventListener("click",this.closeMenu)}},{key:"mounted",value:function(){this.initTags(),this.addTags()}},{key:"isActive",value:function(e){return e.path===this.$route.path}},{key:"filterAffixTags",value:function(e){var t=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",n=[];return e.forEach((function(e){if(e.meta&&e.meta.affix){var r=ae.a.resolve(a,e.path);n.push({fullPath:r,path:r,name:e.name,meta:yt({},e.meta)})}if(e.children){var i=t.filterAffixTags(e.children,e.path);i.length>=1&&(n=[].concat(Object(ee["a"])(n),Object(ee["a"])(i)))}})),n}},{key:"initTags",value:function(){this.affixTags=this.filterAffixTags(this.routes);var e=!0,t=!1,a=void 0;try{for(var n,r=this.affixTags[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value;i.name&&E["a"].addVisitedView(i)}}catch(c){t=!0,a=c}finally{try{e||null==r.return||r.return()}finally{if(t)throw a}}}},{key:"addTags",value:function(){var e=this.$route.name;return e&&E["a"].addView(this.$route),!1}},{key:"moveToCurrentTag",value:function(){var e=this,t=this.$refs.tag;this.$nextTick((function(){var a=!0,n=!1,r=void 0;try{for(var i,c=t[Symbol.iterator]();!(a=(i=c.next()).done);a=!0){var o=i.value;if(o.to.path===e.$route.path){e.$refs.scrollPane.moveToTarget(o),o.to.fullPath!==e.$route.fullPath&&E["a"].updateVisitedView(e.$route);break}}}catch(s){n=!0,r=s}finally{try{a||null==c.return||c.return()}finally{if(n)throw r}}}))}},{key:"refreshSelectedTag",value:function(e){var t=this;E["a"].delCachedView(e);var a=e.fullPath;this.$nextTick((function(){t.$router.replace({path:"/redirect"+a})}))}},{key:"closeSelectedTag",value:function(e){E["a"].delView(e),this.isActive(e)&&this.toLastView(E["a"].visitedViews,e)}},{key:"closeOthersTags",value:function(){this.$router.push(this.selectedTag),E["a"].delOthersViews(this.selectedTag),this.moveToCurrentTag()}},{key:"closeAllTags",value:function(e){var t=this;E["a"].delAllViews(),this.affixTags.some((function(e){return e.path===t.$route.path}))||this.toLastView(E["a"].visitedViews,e)}},{key:"toLastView",value:function(e,t){var a=e.slice(-1)[0];a?this.$router.push(a):"Dashboard"===t.name?this.$router.replace({path:"/redirect"+t.fullPath}):this.$router.push("/")}},{key:"openMenu",value:function(e,t){var a=105,n=this.$el.getBoundingClientRect().left,r=this.$el.offsetWidth,i=r-a,c=t.clientX-n+15;this.left=c>i?i:c,this.top=t.clientY,this.visible=!0,this.selectedTag=e}},{key:"closeMenu",value:function(){this.visible=!1}},{key:"visitedViews",get:function(){return E["a"].visitedViews}},{key:"routes",get:function(){return ie["a"].routes}}]),t}(f["c"]);d["a"]([Object(f["d"])("$route")],Ot.prototype,"onRouteChange",null),d["a"]([Object(f["d"])("visible")],Ot.prototype,"onVisibleChange",null),Ot=d["a"]([Object(f["a"])({name:"TagsView",components:{ScrollPane:vt}})],Ot);var St=Ot,kt=St,jt=(a("9858"),a("5cf3"),Object(L["a"])(kt,st,ut,!1,null,"5963d3f4",null)),wt=jt.exports,Et=992,_t=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"onRouteChange",value:function(){this.device===m["b"].Mobile&&this.sidebar.opened&&m["a"].CloseSideBar(!1)}},{key:"beforeMount",value:function(){window.addEventListener("resize",this.resizeHandler)}},{key:"mounted",value:function(){var e=this.isMobile();e&&(m["a"].ToggleDevice(m["b"].Mobile),m["a"].CloseSideBar(!0))}},{key:"beforeDestroy",value:function(){window.removeEventListener("resize",this.resizeHandler)}},{key:"isMobile",value:function(){var e=document.body.getBoundingClientRect();return e.width-1<Et}},{key:"resizeHandler",value:function(){if(!document.hidden){var e=this.isMobile();m["a"].ToggleDevice(e?m["b"].Mobile:m["b"].Desktop),e&&m["a"].CloseSideBar(!0)}}},{key:"device",get:function(){return m["a"].device}},{key:"sidebar",get:function(){return m["a"].sidebar}}]),t}(f["c"]);d["a"]([Object(f["d"])("$route")],_t.prototype,"onRouteChange",null),_t=d["a"]([Object(f["a"])({name:"ResizeMixin"})],_t);var Ct=_t,Tt=function(e){function t(){return Object(o["a"])(this,t),Object(u["a"])(this,Object(l["a"])(t).apply(this,arguments))}return Object(h["a"])(t,e),Object(s["a"])(t,[{key:"handleClickOutside",value:function(){m["a"].CloseSideBar(!1)}},{key:"classObj",get:function(){return{hideSidebar:!this.sidebar.opened,openSidebar:this.sidebar.opened,withoutAnimation:this.sidebar.withoutAnimation,mobile:this.device===m["b"].Mobile}}},{key:"showSettings",get:function(){return k.showSettings}},{key:"showTagsView",get:function(){return k.showTagsView}},{key:"fixedHeader",get:function(){return k.fixedHeader}}]),t}(Object(b["c"])(Ct));Tt=d["a"]([Object(f["a"])({name:"Layout",components:{AppMain:D,Navbar:Ce,Sidebar:ot,TagsView:wt}})],Tt);var Lt=Tt,Vt=Lt,Dt=(a("a480"),Object(L["a"])(Vt,i,c,!1,null,"33fd8691",null)),xt=Dt.exports,It={path:"/schema/routes",component:xt,name:"SchemaRoutes",meta:{title:"SchemaRoutes",icon:"table"},redirect:"/schema/routes/list",children:[{path:"list",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-0e9b6916")]).then(a.bind(null,"0e01"))},name:"SchemaRoutesList",meta:{title:"SchemaRoutesList"}},{path:"edit/:id",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-31b32716")]).then(a.bind(null,"7b78"))},name:"SchemaRoutesEdit",meta:{title:"SchemaRoutesEdit",hidden:!0}},{path:"create",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-31b32716")]).then(a.bind(null,"7b78"))},name:"SchemaRoutesCreate",meta:{title:"SchemaRoutesCreate",hidden:!0}}]},At=It,Rt={path:"/schema/consumers",component:xt,name:"SchemaConsumers",meta:{title:"SchemaConsumers",icon:"table"},redirect:"/schema/consumers/list",children:[{path:"list",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("complex-table")]).then(a.bind(null,"4eba"))},name:"SchemaConsumersList",meta:{title:"SchemaConsumersList"}},{path:"edit/:username",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-11654a8a")]).then(a.bind(null,"3fd7"))},name:"SchemaConsumersEdit",meta:{title:"SchemaConsumersEdit",hidden:!0}},{path:"create",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-11654a8a")]).then(a.bind(null,"3fd7"))},name:"SchemaConsumersCreate",meta:{title:"SchemaConsumersCreate",hidden:!0}}]},Pt=Rt,$t={path:"/schema/services",component:xt,name:"SchemaServices",meta:{title:"SchemaServices",icon:"table"},redirect:"/schema/services/list",children:[{path:"list",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-dbae6950")]).then(a.bind(null,"eb01"))},name:"SchemaServiceList",meta:{title:"SchemaServiceList"}},{path:"edit/:id",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-132ea554")]).then(a.bind(null,"ad67"))},name:"SchemaServiceEdit",meta:{title:"SchemaServiceEdit",hidden:!0}},{path:"create",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-132ea554")]).then(a.bind(null,"ad67"))},name:"SchemaServiceCreate",meta:{title:"SchemaServiceCreate",hidden:!0}}]},Ut=$t,Ht={path:"/schema/ssl",component:xt,name:"SchemaSSL",meta:{title:"SchemaSSL",icon:"table"},redirect:"/schema/ssl/list",children:[{path:"list",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-d6eeda84")]).then(a.bind(null,"56e6"))},name:"SchemaSSLList",meta:{title:"SchemaSSLList"}},{path:"edit/:id",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-dbb3d3a2")]).then(a.bind(null,"7097"))},name:"SchemaSSLEdit",meta:{title:"SchemaSSLEdit",hidden:!0}},{path:"create",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-dbb3d3a2")]).then(a.bind(null,"7097"))},name:"SchemaSSLCreate",meta:{title:"SchemaSSLCreate",hidden:!0}}]},Wt=Ht,Bt={path:"/schema/upstream",component:xt,name:"SchemaUpstream",meta:{title:"SchemaUpstream",icon:"table"},redirect:"/schema/upstream/list",children:[{path:"list",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-4a11d6e0")]).then(a.bind(null,"f6e6"))},name:"SchemaUpstreamList",meta:{title:"SchemaUpstreamList"}},{path:"edit/:id",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-ad160a6c")]).then(a.bind(null,"ea97"))},name:"SchemaUpstreamEdit",meta:{title:"SchemaUpstreamEdit",hidden:!0}},{path:"create",component:function(){return Promise.all([a.e("chunk-450dda4e"),a.e("chunk-ad160a6c")]).then(a.bind(null,"ea97"))},name:"SchemaUpstreamCreate",meta:{title:"SchemaUpstreamCreate",hidden:!0}}]},Gt=Bt;a.d(t,"b",(function(){return Mt})),a.d(t,"a",(function(){return Nt})),a.d(t,"d",(function(){return qt})),n["default"].use(r["a"]);var Mt=[{path:"/login",component:function(){return a.e("chunk-be341ddc").then(a.bind(null,"9ed6"))},meta:{hidden:!0}},{path:"/",component:xt,redirect:"/schema/routes/list"}],Nt=[At,Pt,Ut,Wt,Gt,{path:"*",redirect:"/404",meta:{hidden:!0}}],zt=function(){return new r["a"]({scrollBehavior:function(e,t,a){return a||{x:0,y:0}},base:"/apisix/dashboard/",routes:Mt})},Ft=zt();function qt(){var e=zt();Ft.matcher=e.matcher}t["c"]=Ft},b20f:function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff",theme:"#1890ff"}},bb1b:function(e,t,a){"use strict";var n=a("14b3"),r=a.n(n);r.a},c0d4:function(e,t,a){},c512:function(e,t,a){"use strict";var n=a("0a41"),r=a.n(n);r.a},c970:function(e,t,a){},cd49:function(e,t,a){"use strict";a.r(t);a("cadf"),a("551c"),a("f751"),a("097d");var n=a("2b0e"),r=(a("f5df"),a("5c96")),i=a.n(r),c=a("038a"),o=a.n(c),s=(a("b20f"),a("2fe1")),u=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"app"}},[a("router-view")],1)},l=[],h=a("d225"),d=a("308d"),f=a("6bb5"),b=a("4e2b"),m=a("9ab4"),p=a("60a3"),v=function(e){function t(){return Object(h["a"])(this,t),Object(d["a"])(this,Object(f["a"])(t).apply(this,arguments))}return Object(b["a"])(t,e),t}(p["c"]);v=m["a"]([Object(p["a"])({name:"App"})],v);var g=v,y=g,O=a("2877"),S=Object(O["a"])(y,u,l,!1,null,null,null),k=S.exports,j=a("0613"),w=a("ac1a"),E=a("afbc"),_=a("6ebf"),C=(a("8e6e"),a("ac6a"),a("456d"),a("bd86")),T=(a("96cf"),a("3b8d")),L=a("323e"),V=a.n(L),D=(a("a5d8"),a("9dba")),x=a("8ad0"),I=a("8b99");function A(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function R(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?A(a,!0).forEach((function(t){Object(C["a"])(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):A(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}V.a.configure({showSpinner:!1});var P=["/login","/auth-redirect"],$=function(e){var t=_["a"].te("route.".concat(e));if(t){var a=_["a"].t("route.".concat(e));return"".concat(a," - ").concat(I["a"].title)}return"".concat(I["a"].title)};E["c"].beforeEach(function(){var e=Object(T["a"])(regeneratorRuntime.mark((function e(t,a,n){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(V.a.start(),!D["a"].token){e.next=28;break}if("/login"!==t.path){e.next=7;break}n({path:"/"}),V.a.done(),e.next=26;break;case 7:if(0!==D["a"].roles.length){e.next=25;break}return e.prev=8,e.next=11,D["a"].GetUserInfo();case 11:i=D["a"].roles,x["a"].GenerateRoutes(i),E["c"].addRoutes(x["a"].dynamicRoutes),n(R({},t,{replace:!0})),e.next=23;break;case 17:e.prev=17,e.t0=e["catch"](8),D["a"].ResetToken(),r["Message"].error(e.t0||"Has Error"),n("/login?redirect=".concat(t.path)),V.a.done();case 23:e.next=26;break;case 25:n();case 26:e.next=29;break;case 28:-1!==P.indexOf(t.path)?n():(n("/login?redirect=".concat(t.path)),V.a.done());case 29:case"end":return e.stop()}}),e,null,[[8,17]])})));return function(t,a,n){return e.apply(this,arguments)}}()),E["c"].afterEach((function(e){V.a.done(),document.title=$(e.meta.title)})),n["default"].use(i.a,{size:w["a"].size,i18n:function(e,t){return _["a"].t(e,t)}}),n["default"].use(o.a,{tagName:"svg-icon",defaultWidth:"1em",defaultHeight:"1em"}),n["default"].config.productionTip=!1,s["b"].registerHooks(["beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate"]),new n["default"]({router:E["c"],store:j["a"],i18n:_["a"],render:function(e){return e(k)}}).$mount("#app")},d715:function(e,t,a){},d729:function(e,t,a){"use strict";var n=a("fb13"),r=a.n(n);r.a},d986:function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff"}},e741:function(e,t,a){"use strict";a.d(t,"a",(function(){return f}));var n=a("768b"),r=(a("ac4d"),a("8a81"),a("ac6a"),a("7f7f"),a("6762"),a("2fdb"),a("d225")),i=a("b0b4"),c=a("308d"),o=a("6bb5"),s=a("4e2b"),u=a("9ab4"),l=a("6fc5"),h=a("0613"),d=function(e){function t(){var e;return Object(r["a"])(this,t),e=Object(c["a"])(this,Object(o["a"])(t).apply(this,arguments)),e.visitedViews=[],e.cachedViews=[],e}return Object(s["a"])(t,e),Object(i["a"])(t,[{key:"ADD_VISITED_VIEW",value:function(e){this.visitedViews.some((function(t){return t.path===e.path}))||this.visitedViews.push(Object.assign({},e,{title:e.meta.title||"no-name"}))}},{key:"ADD_CACHED_VIEW",value:function(e){this.cachedViews.includes(e.name)||e.meta.noCache||this.cachedViews.push(e.name)}},{key:"DEL_VISITED_VIEW",value:function(e){var t=!0,a=!1,r=void 0;try{for(var i,c=this.visitedViews.entries()[Symbol.iterator]();!(t=(i=c.next()).done);t=!0){var o=Object(n["a"])(i.value,2),s=o[0],u=o[1];if(u.path===e.path){this.visitedViews.splice(s,1);break}}}catch(l){a=!0,r=l}finally{try{t||null==c.return||c.return()}finally{if(a)throw r}}}},{key:"DEL_CACHED_VIEW",value:function(e){var t=!0,a=!1,r=void 0;try{for(var i,c=this.cachedViews.entries()[Symbol.iterator]();!(t=(i=c.next()).done);t=!0){var o=Object(n["a"])(i.value,2),s=o[0],u=o[1];if(u===e.name){this.cachedViews.splice(s,1);break}}}catch(l){a=!0,r=l}finally{try{t||null==c.return||c.return()}finally{if(a)throw r}}}},{key:"DEL_OTHERS_VISITED_VIEWS",value:function(e){this.visitedViews=this.visitedViews.filter((function(t){return t.meta.affix||t.path===e.path}))}},{key:"DEL_OTHERS_CACHED_VIEWS",value:function(e){var t=!0,a=!1,r=void 0;try{for(var i,c=this.cachedViews.entries()[Symbol.iterator]();!(t=(i=c.next()).done);t=!0){var o=Object(n["a"])(i.value,2),s=o[0],u=o[1];if(u===e.name){this.cachedViews=this.cachedViews.slice(s,s+1);break}}}catch(l){a=!0,r=l}finally{try{t||null==c.return||c.return()}finally{if(a)throw r}}}},{key:"DEL_ALL_VISITED_VIEWS",value:function(){var e=this.visitedViews.filter((function(e){return e.meta.affix}));this.visitedViews=e}},{key:"DEL_ALL_CACHED_VIEWS",value:function(){this.cachedViews=[]}},{key:"UPDATE_VISITED_VIEW",value:function(e){var t=!0,a=!1,n=void 0;try{for(var r,i=this.visitedViews[Symbol.iterator]();!(t=(r=i.next()).done);t=!0){var c=r.value;if(c.path===e.path){c=Object.assign(c,e);break}}}catch(o){a=!0,n=o}finally{try{t||null==i.return||i.return()}finally{if(a)throw n}}}},{key:"addView",value:function(e){this.ADD_VISITED_VIEW(e),this.ADD_CACHED_VIEW(e)}},{key:"addVisitedView",value:function(e){this.ADD_VISITED_VIEW(e)}},{key:"delView",value:function(e){this.DEL_VISITED_VIEW(e),this.DEL_CACHED_VIEW(e)}},{key:"delCachedView",value:function(e){this.DEL_CACHED_VIEW(e)}},{key:"delOthersViews",value:function(e){this.DEL_OTHERS_VISITED_VIEWS(e),this.DEL_OTHERS_CACHED_VIEWS(e)}},{key:"delAllViews",value:function(){this.DEL_ALL_VISITED_VIEWS(),this.DEL_ALL_CACHED_VIEWS()}},{key:"delAllCachedViews",value:function(){this.DEL_ALL_CACHED_VIEWS()}},{key:"updateVisitedView",value:function(e){this.UPDATE_VISITED_VIEW(e)}}]),t}(l["d"]);u["a"]([l["c"]],d.prototype,"ADD_VISITED_VIEW",null),u["a"]([l["c"]],d.prototype,"ADD_CACHED_VIEW",null),u["a"]([l["c"]],d.prototype,"DEL_VISITED_VIEW",null),u["a"]([l["c"]],d.prototype,"DEL_CACHED_VIEW",null),u["a"]([l["c"]],d.prototype,"DEL_OTHERS_VISITED_VIEWS",null),u["a"]([l["c"]],d.prototype,"DEL_OTHERS_CACHED_VIEWS",null),u["a"]([l["c"]],d.prototype,"DEL_ALL_VISITED_VIEWS",null),u["a"]([l["c"]],d.prototype,"DEL_ALL_CACHED_VIEWS",null),u["a"]([l["c"]],d.prototype,"UPDATE_VISITED_VIEW",null),u["a"]([l["a"]],d.prototype,"addView",null),u["a"]([l["a"]],d.prototype,"addVisitedView",null),u["a"]([l["a"]],d.prototype,"delView",null),u["a"]([l["a"]],d.prototype,"delCachedView",null),u["a"]([l["a"]],d.prototype,"delOthersViews",null),u["a"]([l["a"]],d.prototype,"delAllViews",null),u["a"]([l["a"]],d.prototype,"delAllCachedViews",null),u["a"]([l["a"]],d.prototype,"updateVisitedView",null),d=u["a"]([Object(l["b"])({dynamic:!0,store:h["a"],name:"tagsView"})],d);var f=Object(l["e"])(d)},fb13:function(e,t,a){e.exports={menuBg:"#304156",menuText:"#bfcbd9",menuActiveText:"#409eff"}},fd8d:function(e,t,a){"use strict";var n=a("362f"),r=a.n(n);r.a}},[[0,"runtime","chunk-elementUI","chunk-libs"]]]);