@kotori-bot/kotori-plugin-webui 1.5.5 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico?v2"><title>kams</title><script defer="defer" src="/js/chunk-vendors.e3b8fbe7.js"></script><script defer="defer" src="/js/app.5510141a.js"></script><link href="/css/chunk-vendors.9c1b0e0b.css" rel="stylesheet"><link href="/css/app.4f7c2202.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but kams doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
1
+ <!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico?v2"><title>kams</title><script defer="defer" src="/js/chunk-vendors.e3b8fbe7.js"></script><script defer="defer" src="/js/app.8e5fd566.js"></script><link href="/css/chunk-vendors.9c1b0e0b.css" rel="stylesheet"><link href="/css/app.4f7c2202.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but kams doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
@@ -1,2 +1,2 @@
1
- "use strict";(self["webpackChunkkams"]=self["webpackChunkkams"]||[]).push([[324],{1349:function(t,e,n){n.d(e,{A:function(){return c}});var i=function(){var t=this,e=t._self._c;return e("aside",{ref:"aside",staticClass:"k-sb-aside k-aside"},[e("div",{staticClass:"k-aside-default"},[t._t("default")],2),e("div",{staticClass:"k-aside-inner"},[t._t("inner")],2)])},s=[],o={name:"k-sb-aside"},r=o,a=n(1656),l=(0,a.A)(r,i,s,!1,null,null,null),c=l.exports},4844:function(t,e,n){n.d(e,{A:function(){return u}});var i=function(){var t=this,e=t._self._c;return e("ul",{staticClass:"k-menu",style:{flexDirection:this.mode}},[t._t("default")],2)},s=[],o=(n(4114),n(6848)),r={name:"k-menu",data(){return{activeIndex:this.defaultActive}},provide(){return{root:this}},props:{activeColor:{type:String},activeShape:{type:Array,default(){return[]}},backgroundColor:{type:String},textColor:{},mode:{type:String,default(){return"column"}},defaultActive:{type:String},router:{type:Boolean}},methods:{changeRouteFn(t){this.router&&this.$router.push(t),this.activeIndex=t}},computed:{rootMenu(){return{activeColor:this.activeColor,backgroundColor:this.backgroundColor,activeIndex:this.defaultActive}}},watch:{defaultActive(t){this.activeIndex=t}},beforeCreate(){this.$bus=new o["default"]},mounted(){this.$bus.$on("changeRoute",this.changeRouteFn)},beforeDestroy(){this.$bus.$off("changeRoute",this.changeRouteFn)}},a=r,l=n(1656),c=(0,l.A)(a,i,s,!1,null,"8321ac56",null),u=c.exports},2222:function(t,e,n){n.d(e,{A:function(){return c}});var i=function(){var t=this,e=t._self._c;return e("el-tooltip",{ref:"tooltip",staticClass:"item",attrs:{disabled:!t.tips,effect:"dark",content:t.title,placement:"right",manual:""}},[e("li",{staticClass:"k-menu-item",class:[{className:t.className},{active:t.active},t.direction],style:[t.itemStyle,{height:`${t.height}px`,minHeight:`${t.height}px`},{justifyContent:t.align}],on:{mouseenter:t.onmouseenterFn,mouseleave:t.onMouseLeaveFn,click:t.handleClickFn}},[t.activeShape.includes("line")?[e("transition",{attrs:{appear:"",name:"appear"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"current-shape line",style:{background:t.root.activeColor}})])]:t._e(),t.activeShape.includes("circle")?[e("transition",{attrs:{appear:""}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"current-shape circle",style:t.circleStyle})])]:t._e(),t._t("default")],2)])},s=[],o={name:"k-menu-item",data(){return{activeColor:this.root.activeColor}},inject:["root"],methods:{onmouseenterFn(){this.$el.style.backgroundColor=this.root.backgroundColor,this.handleTooltipFn(!0)},onMouseLeaveFn(){this.activeShape.includes("background")&&this.active||(this.$el.style.backgroundColor="",this.handleTooltipFn(!1))},handleClickFn(){this.root.$bus.$emit("changeRoute",this.index),this.$emit("click",this),this.root.$emit("select",this)},handleTooltipFn(t){this.$refs.tooltip.showPopper=t}},computed:{active(){if(!this.root.router)return this.root.activeIndex===this.index;const t=this.root.activeIndex.split("/"),e=this.index.split("/");return t.includes(e[1])},itemStyle(){const t={color:this.active?this.root.activeColor:this.root.textColor,borderLeftColor:this.active?this.root.activeColor:this.root.textColor,backgroundColor:""};return this.activeShape.includes("background")&&(t.backgroundColor=this.active?this.root.backgroundColor:""),t},circleStyle(){return{border:`3px solid ${this.root.activeColor}`,filter:`drop-shadow(0 0 4px ${this.root.activeColor})`}},activeShape(){return this.root.activeShape},tips(){return!!this.title},direction(){return`k-menu-item-${this.root.mode}`}},beforeMount(){},mounted(){},props:{icon:{type:String,default(){return""}},index:{type:String},title:{type:String},width:{type:String,default(){return"70"}},height:{type:String,default(){return"70"}},className:{type:String,default(){return""}},align:{type:String,default(){return"center"}}}},r=o,a=n(1656),l=(0,a.A)(r,i,s,!1,null,"dbebb810",null),c=l.exports},3324:function(t,e,n){n.r(e),n.d(e,{default:function(){return N}});var i=function(){var t=this,e=t._self._c;return e("el-container",{directives:[{name:"resize-ob",rawName:"v-resize-ob",value:t.resizeFn,expression:"resizeFn"}],staticClass:"main-container"},[e("k-aside"),e("el-container",{staticClass:"kams-main-container",attrs:{direction:"vertical"}},[e("k-header"),e("el-main",{class:{isPadding:t.isPadding,lessPadding:t.getIsNarrowScreen}},[e("transition",{attrs:{mode:"out-in"}},[e("keep-alive",{attrs:{include:"kConsole"}},[e("router-view")],1)],1)],1),t.isFooter?e("k-footer"):t._e()],1)],1)},s=[],o=n(3518),r=function(){var t=this,e=t._self._c;return e("transition",[e("el-aside",{directives:[{name:"show",rawName:"v-show",value:!t.$store.state.layoutOption.isFoldAside,expression:"!$store.state.layoutOption.isFoldAside"}],staticClass:"k-aside"},[e("div",{staticClass:"logo"},[e("img",{attrs:{src:n(3086),alt:""}})]),e("k-menu",{attrs:{"default-active":t.$route.path,"active-color":"#752bec","active-shape":["line"],"text-color":"#061e26","background-color":"#00000017",mode:"column",tips:!0,router:""}},t._l(t.menus,(function(t,n){return e("k-menu-item",{key:n,attrs:{index:t.indexPath,title:t.content,width:"60",height:"60"}},[e("i",{class:t.icon})])})),1),e("div",{staticClass:"empty"}),e("el-tooltip",{attrs:{effect:"dark",content:"退出登录",placement:"right"}},[e("div",{staticClass:"quit"},[e("i",{staticClass:"el-icon-switch-button",attrs:{slot:"reference"},on:{click:t.quitFn},slot:"reference"})])])],1)],1)},a=[],l=(n(4114),n(1552)),c=n(1349),u=n(2222),d=n(4844),h={name:"k-aside",components:{kMenuItem:u.A,kMenu:d.A,kAside:c.A},data(){return{visible:!1,isShowDialog:!1,dialogData:{title:"提示",message:"确认退出登录?"},menus:[{icon:"el-icon-pie-chart",content:"数据中心",indexPath:"/dataCenter"},{icon:"el-icon-printer",content:"实例管理",indexPath:"/bots"},{icon:"el-icon-files",content:"模块管理",indexPath:"/modules"},{icon:"el-icon-shopping-bag-1",content:"模块中心",indexPath:"/modulesCenter"},{icon:"el-icon-set-up",content:"指令管理",indexPath:"/command"},{icon:"el-icon-setting",content:"配置查看",indexPath:"/config"},{icon:"el-icon-chat-line-square",content:"沙盒测试",indexPath:"/sandBox"},{icon:"el-icon-cpu",content:"控制台",indexPath:"/console"}]}},methods:{...(0,o.PY)("layoutOption",["updateToken"]),cancelFn(){this.isShowDialog=!1},quitFn(){this.$dialog({content:this.dialogData.message,title:this.dialogData.title}).then((()=>{(0,l.jd)()})).then((()=>{this.updateToken(""),this.$router.push("/login")})).catch((()=>{this.cancelFn()}))}},mounted(){}},p=h,m=n(1656),v=(0,m.A)(p,r,a,!1,null,"20b675e9",null),f=v.exports,g=function(){var t=this,e=t._self._c;return e("el-footer",{attrs:{height:"30px"}},[e("pps-context-menu",{attrs:{menus:t.menus,position:"top"}},[e("div",{staticClass:"version detail",attrs:{slot:"content"},slot:"content"},[e("div",{staticClass:"kotori"},[t._v("kams v"+t._s(t.version))])])]),e("pps-context-menu",{attrs:{menus:[{label:"内存",rate:t.roundedRam.rate},{label:"CPU",rate:t.roundedCpu.rate}],position:"top"},scopedSlots:t._u([{key:"item",fn:function({menu:n}){return t._l(n,(function(n,i){return e("div",{key:i,staticClass:"menu-item"},[e("div",{staticClass:"rate"},[e("span",[t._v(t._s(n.label))]),e("el-progress",{attrs:{percentage:Number(n.rate)}})],1)])}))}}])},[e("div",{staticClass:"status detail",attrs:{slot:"content"},slot:"content"},[e("span",[t._v("内存:"+t._s(t.fixedFn(t.roundedRam.rate))+" %")]),t._v("   "),e("span",[t._v("CPU:"+t._s(t.fixedFn(t.roundedCpu.rate))+" %")])])])],1)},k=[],b={rE:"1.5.0"},C={name:"k-footer",data(){return{status:"",version:b.rE}},methods:{...(0,o.PY)("webSocketOption",["updateCpu","updateRam"]),contextMenuFn(){},fixedFn(t){return Number(t).toFixed(1)}},computed:{...(0,o.L8)("webSocketOption",["roundedRam","roundedCpu"]),menus(){return[{label:`主程序版本: v${this.status.main}`},{label:`核心版本: v${this.status.core}`},{label:`加载器版本: v${this.status.loader}`}]}},created(){(0,l.P8)().then((({data:t})=>{this.status=t}))},mounted(){this.$ws.bus.$on("wsMessage",(t=>{"stats"===t.type&&(this.updateCpu(t.data.cpu),this.updateRam(t.data.ram))}))},beforeDestroy(){this.$ws.bus.$off("wsMessage")}},F=C,x=(0,m.A)(F,g,k,!1,null,"3f40d996",null),y=x.exports,w=function(){var t=this,e=t._self._c;return e("el-header",[e("span",{staticClass:"header-left"},[e("pps-button",{nativeOn:{click:function(e){return t.onFold()}}},[e("i",{class:t.arrowClass})]),e("pps-button",{on:{click:function(e){return t.toggleFullscreen()}}},[e("i",{staticClass:"el-icon-full-screen"})])],1),e("span",{staticClass:"title header-center"},[t._v(t._s(t.pathTitle))]),e("span",{staticClass:"header-right"},[e("pps-icon",{attrs:{icon:"pps-icon-github"},on:{click:t.linkGithubFn}}),e("pps-icon",{attrs:{icon:"pps-icon-qq"},on:{click:t.linkQQFn}}),e("pps-icon",{attrs:{icon:"pps-icon-help"},on:{click:t.linkDocsFn}})],1)])},$=[],S=n(9529),_={name:"kHeader",methods:{onFold(){this.$store.commit("layoutOption/updateIsFoldAside",!this.$store.state.layoutOption.isFoldAside)},clearvuexFn(){localStorage.removeItem("vuex")},linkGithubFn(){window.open("https://github.com/kotorijs","_blank")},linkQQFn(){window.open("https://qm.qq.com/q/Nb3lQPt7We","_blank")},linkDocsFn(){window.open("https://kotori.js.org/","_blank")}},computed:{...(0,o.L8)("layoutOption",["getIsFoldAside"]),pathTitle(){return this.$route.matched[1].meta.title},isPadding(){return"/console"===this.$route.fullPath},arrowClass(){return this.getIsFoldAside?"el-icon-d-arrow-right":"el-icon-d-arrow-left"}},mixins:[S.U]},A=_,P=(0,m.A)(A,w,$,!1,null,null,null),I=P.exports;const q=["/console","/sandBox"],R=(t,e)=>{if(!t||!e)return 0;const n=String(t).replace(/^[^\d]+/,""),i=String(e).replace(/^[^\d]+/,""),s=n.split("-")[0].split(".").map((t=>parseInt(t,10)||0)),o=i.split("-")[0].split(".").map((t=>parseInt(t,10)||0)),r=Math.max(s.length,o.length);for(let a=0;a<r;a++){const t=s[a]||0,e=o[a]||0;if(t>e)return 1;if(t<e)return-1}return 0};var M={name:"myLayout",components:{kAside:f,kFooter:y,kHeader:I},data(){return{hasCheckedVersion:!1}},methods:{...(0,o.i0)("modulesDetail",{getModules:"getData"}),...(0,o.i0)("command",["getCommands"]),handleAside(){q.includes(this.$route.fullPath)||this.isSmall?this.$store.commit("layoutOption/updateIsFoldAside",!0):this.$store.commit("layoutOption/updateIsFoldAside",!1)},resizeFn(t,e){Math.floor(t)<=528?this.$store.commit("layoutOption/updateIsNarrowScreen",!0):this.$store.commit("layoutOption/updateIsNarrowScreen")},async isVersionLatest(){if(!this.hasCheckedVersion){this.hasCheckedVersion=!0;try{const{data:t}=await(0,l.nI)(),e=t&&t["@kotori-bot/kotori-plugin-webui"];if(e&&R(b.rE,e)<0){const t=String(e).replace(/^[^\d]+/,"");this.$message.warning(`当前版本(v${b.rE})过低,最新版本为 v${t},请及时更新 webui 插件`)}}catch(t){console.error("获取版本信息失败",t)}}}},mounted(){},created(){this.getCommands(),this.getModules(),this.isVersionLatest().then((()=>{this.handleAside(),this.$ws.init()})).catch((()=>{}))},beforeDestroy(){console.log("layout beforeDestroy"),this.$ws.instance&&this.$ws.close()},updated(){this.handleAside()},computed:{...(0,o.L8)("layoutOption",["getIsFoldAside","getIsNarrowScreen"]),isPadding(){return!!q.includes(this.$route.fullPath)},isFooter(){return!q[0].includes(this.$route.fullPath)}}},O=M,D=(0,m.A)(O,i,s,!1,null,"ec94ce06",null),N=D.exports},9529:function(t,e,n){n.d(e,{B:function(){return s},U:function(){return i}});const i={methods:{toggleFullscreen(){this.isFullscreen()?this.exit():this.enter(document.documentElement)},isFullscreen(){return!!document.fullscreenElement||!!document.webkitFullscreenElement||!!document.mozFullScreenElement||!!document.msFullscreenElement||null},enter(t){t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},exit(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()}}},s={props:{chatTarget:{type:Object,default(){return null}},memberList:{type:Array,default(){return[]}}},methods:{tranRoleFn(t){const e={lord:"群主",admin:"管理员","super-admin":"bot",expellee:"已退群"};return e[t]||""},avatarContextMenuFn(t){const{uid:e,task:n,key:i}=t;if(n){const t=this.admin.getUserById(e);this.$emit("handleMenuAction",{targetUser:t,actionType:i,groupId:this.chatTarget.id})}}}}},3086:function(t,e,n){t.exports=n.p+"img/favicon.b107f5c1.svg"}}]);
2
- //# sourceMappingURL=324.6f74d729.js.map
1
+ "use strict";(self["webpackChunkkams"]=self["webpackChunkkams"]||[]).push([[324],{1349:function(t,e,n){n.d(e,{A:function(){return c}});var i=function(){var t=this,e=t._self._c;return e("aside",{ref:"aside",staticClass:"k-sb-aside k-aside"},[e("div",{staticClass:"k-aside-default"},[t._t("default")],2),e("div",{staticClass:"k-aside-inner"},[t._t("inner")],2)])},s=[],o={name:"k-sb-aside"},r=o,a=n(1656),l=(0,a.A)(r,i,s,!1,null,null,null),c=l.exports},4844:function(t,e,n){n.d(e,{A:function(){return u}});var i=function(){var t=this,e=t._self._c;return e("ul",{staticClass:"k-menu",style:{flexDirection:this.mode}},[t._t("default")],2)},s=[],o=(n(4114),n(6848)),r={name:"k-menu",data(){return{activeIndex:this.defaultActive}},provide(){return{root:this}},props:{activeColor:{type:String},activeShape:{type:Array,default(){return[]}},backgroundColor:{type:String},textColor:{},mode:{type:String,default(){return"column"}},defaultActive:{type:String},router:{type:Boolean}},methods:{changeRouteFn(t){this.router&&this.$router.push(t),this.activeIndex=t}},computed:{rootMenu(){return{activeColor:this.activeColor,backgroundColor:this.backgroundColor,activeIndex:this.defaultActive}}},watch:{defaultActive(t){this.activeIndex=t}},beforeCreate(){this.$bus=new o["default"]},mounted(){this.$bus.$on("changeRoute",this.changeRouteFn)},beforeDestroy(){this.$bus.$off("changeRoute",this.changeRouteFn)}},a=r,l=n(1656),c=(0,l.A)(a,i,s,!1,null,"8321ac56",null),u=c.exports},2222:function(t,e,n){n.d(e,{A:function(){return c}});var i=function(){var t=this,e=t._self._c;return e("el-tooltip",{ref:"tooltip",staticClass:"item",attrs:{disabled:!t.tips,effect:"dark",content:t.title,placement:"right",manual:""}},[e("li",{staticClass:"k-menu-item",class:[{className:t.className},{active:t.active},t.direction],style:[t.itemStyle,{height:`${t.height}px`,minHeight:`${t.height}px`},{justifyContent:t.align}],on:{mouseenter:t.onmouseenterFn,mouseleave:t.onMouseLeaveFn,click:t.handleClickFn}},[t.activeShape.includes("line")?[e("transition",{attrs:{appear:"",name:"appear"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"current-shape line",style:{background:t.root.activeColor}})])]:t._e(),t.activeShape.includes("circle")?[e("transition",{attrs:{appear:""}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"current-shape circle",style:t.circleStyle})])]:t._e(),t._t("default")],2)])},s=[],o={name:"k-menu-item",data(){return{activeColor:this.root.activeColor}},inject:["root"],methods:{onmouseenterFn(){this.$el.style.backgroundColor=this.root.backgroundColor,this.handleTooltipFn(!0)},onMouseLeaveFn(){this.activeShape.includes("background")&&this.active||(this.$el.style.backgroundColor="",this.handleTooltipFn(!1))},handleClickFn(){this.root.$bus.$emit("changeRoute",this.index),this.$emit("click",this),this.root.$emit("select",this)},handleTooltipFn(t){this.$refs.tooltip.showPopper=t}},computed:{active(){if(!this.root.router)return this.root.activeIndex===this.index;const t=this.root.activeIndex.split("/"),e=this.index.split("/");return t.includes(e[1])},itemStyle(){const t={color:this.active?this.root.activeColor:this.root.textColor,borderLeftColor:this.active?this.root.activeColor:this.root.textColor,backgroundColor:""};return this.activeShape.includes("background")&&(t.backgroundColor=this.active?this.root.backgroundColor:""),t},circleStyle(){return{border:`3px solid ${this.root.activeColor}`,filter:`drop-shadow(0 0 4px ${this.root.activeColor})`}},activeShape(){return this.root.activeShape},tips(){return!!this.title},direction(){return`k-menu-item-${this.root.mode}`}},beforeMount(){},mounted(){},props:{icon:{type:String,default(){return""}},index:{type:String},title:{type:String},width:{type:String,default(){return"70"}},height:{type:String,default(){return"70"}},className:{type:String,default(){return""}},align:{type:String,default(){return"center"}}}},r=o,a=n(1656),l=(0,a.A)(r,i,s,!1,null,"dbebb810",null),c=l.exports},3324:function(t,e,n){n.r(e),n.d(e,{default:function(){return N}});var i=function(){var t=this,e=t._self._c;return e("el-container",{directives:[{name:"resize-ob",rawName:"v-resize-ob",value:t.resizeFn,expression:"resizeFn"}],staticClass:"main-container"},[e("k-aside"),e("el-container",{staticClass:"kams-main-container",attrs:{direction:"vertical"}},[e("k-header"),e("el-main",{class:{isPadding:t.isPadding,lessPadding:t.getIsNarrowScreen}},[e("transition",{attrs:{mode:"out-in"}},[e("keep-alive",{attrs:{include:"kConsole"}},[e("router-view")],1)],1)],1),t.isFooter?e("k-footer"):t._e()],1)],1)},s=[],o=n(3518),r=function(){var t=this,e=t._self._c;return e("transition",[e("el-aside",{directives:[{name:"show",rawName:"v-show",value:!t.$store.state.layoutOption.isFoldAside,expression:"!$store.state.layoutOption.isFoldAside"}],staticClass:"k-aside"},[e("div",{staticClass:"logo"},[e("img",{attrs:{src:n(3086),alt:""}})]),e("k-menu",{attrs:{"default-active":t.$route.path,"active-color":"#752bec","active-shape":["line"],"text-color":"#061e26","background-color":"#00000017",mode:"column",tips:!0,router:""}},t._l(t.menus,(function(t,n){return e("k-menu-item",{key:n,attrs:{index:t.indexPath,title:t.content,width:"60",height:"60"}},[e("i",{class:t.icon})])})),1),e("div",{staticClass:"empty"}),e("el-tooltip",{attrs:{effect:"dark",content:"退出登录",placement:"right"}},[e("div",{staticClass:"quit"},[e("i",{staticClass:"el-icon-switch-button",attrs:{slot:"reference"},on:{click:t.quitFn},slot:"reference"})])])],1)],1)},a=[],l=(n(4114),n(1552)),c=n(1349),u=n(2222),d=n(4844),h={name:"k-aside",components:{kMenuItem:u.A,kMenu:d.A,kAside:c.A},data(){return{visible:!1,isShowDialog:!1,dialogData:{title:"提示",message:"确认退出登录?"},menus:[{icon:"el-icon-pie-chart",content:"数据中心",indexPath:"/dataCenter"},{icon:"el-icon-printer",content:"实例管理",indexPath:"/bots"},{icon:"el-icon-files",content:"模块管理",indexPath:"/modules"},{icon:"el-icon-shopping-bag-1",content:"模块中心",indexPath:"/modulesCenter"},{icon:"el-icon-set-up",content:"指令管理",indexPath:"/command"},{icon:"el-icon-setting",content:"配置查看",indexPath:"/config"},{icon:"el-icon-chat-line-square",content:"沙盒测试",indexPath:"/sandBox"},{icon:"el-icon-cpu",content:"控制台",indexPath:"/console"}]}},methods:{...(0,o.PY)("layoutOption",["updateToken"]),cancelFn(){this.isShowDialog=!1},quitFn(){this.$dialog({content:this.dialogData.message,title:this.dialogData.title}).then((()=>{(0,l.jd)()})).then((()=>{this.updateToken(""),this.$router.push("/login")})).catch((()=>{this.cancelFn()}))}},mounted(){}},p=h,m=n(1656),v=(0,m.A)(p,r,a,!1,null,"20b675e9",null),f=v.exports,g=function(){var t=this,e=t._self._c;return e("el-footer",{attrs:{height:"30px"}},[e("pps-context-menu",{attrs:{menus:t.menus,position:"top"}},[e("div",{staticClass:"version detail",attrs:{slot:"content"},slot:"content"},[e("div",{staticClass:"kotori"},[t._v("kams v"+t._s(t.version))])])]),e("pps-context-menu",{attrs:{menus:[{label:"内存",rate:t.roundedRam.rate},{label:"CPU",rate:t.roundedCpu.rate}],position:"top"},scopedSlots:t._u([{key:"item",fn:function({menu:n}){return t._l(n,(function(n,i){return e("div",{key:i,staticClass:"menu-item"},[e("div",{staticClass:"rate"},[e("span",[t._v(t._s(n.label))]),e("el-progress",{attrs:{percentage:Number(n.rate)}})],1)])}))}}])},[e("div",{staticClass:"status detail",attrs:{slot:"content"},slot:"content"},[e("span",[t._v("内存:"+t._s(t.fixedFn(t.roundedRam.rate))+" %")]),t._v("   "),e("span",[t._v("CPU:"+t._s(t.fixedFn(t.roundedCpu.rate))+" %")])])])],1)},k=[],b={rE:"1.5.6"},C={name:"k-footer",data(){return{status:"",version:b.rE}},methods:{...(0,o.PY)("webSocketOption",["updateCpu","updateRam"]),contextMenuFn(){},fixedFn(t){return Number(t).toFixed(1)}},computed:{...(0,o.L8)("webSocketOption",["roundedRam","roundedCpu"]),menus(){return[{label:`主程序版本: v${this.status.main}`},{label:`核心版本: v${this.status.core}`},{label:`加载器版本: v${this.status.loader}`}]}},created(){(0,l.P8)().then((({data:t})=>{this.status=t}))},mounted(){this.$ws.bus.$on("wsMessage",(t=>{"stats"===t.type&&(this.updateCpu(t.data.cpu),this.updateRam(t.data.ram))}))},beforeDestroy(){this.$ws.bus.$off("wsMessage")}},F=C,x=(0,m.A)(F,g,k,!1,null,"3f40d996",null),y=x.exports,w=function(){var t=this,e=t._self._c;return e("el-header",[e("span",{staticClass:"header-left"},[e("pps-button",{nativeOn:{click:function(e){return t.onFold()}}},[e("i",{class:t.arrowClass})]),e("pps-button",{on:{click:function(e){return t.toggleFullscreen()}}},[e("i",{staticClass:"el-icon-full-screen"})])],1),e("span",{staticClass:"title header-center"},[t._v(t._s(t.pathTitle))]),e("span",{staticClass:"header-right"},[e("pps-icon",{attrs:{icon:"pps-icon-github"},on:{click:t.linkGithubFn}}),e("pps-icon",{attrs:{icon:"pps-icon-qq"},on:{click:t.linkQQFn}}),e("pps-icon",{attrs:{icon:"pps-icon-help"},on:{click:t.linkDocsFn}})],1)])},$=[],S=n(9529),_={name:"kHeader",methods:{onFold(){this.$store.commit("layoutOption/updateIsFoldAside",!this.$store.state.layoutOption.isFoldAside)},clearvuexFn(){localStorage.removeItem("vuex")},linkGithubFn(){window.open("https://github.com/kotorijs","_blank")},linkQQFn(){window.open("https://qm.qq.com/q/Nb3lQPt7We","_blank")},linkDocsFn(){window.open("https://kotori.js.org/","_blank")}},computed:{...(0,o.L8)("layoutOption",["getIsFoldAside"]),pathTitle(){return this.$route.matched[1].meta.title},isPadding(){return"/console"===this.$route.fullPath},arrowClass(){return this.getIsFoldAside?"el-icon-d-arrow-right":"el-icon-d-arrow-left"}},mixins:[S.U]},A=_,P=(0,m.A)(A,w,$,!1,null,null,null),I=P.exports;const q=["/console","/sandBox"],R=(t,e)=>{if(!t||!e)return 0;const n=String(t).replace(/^[^\d]+/,""),i=String(e).replace(/^[^\d]+/,""),s=n.split("-")[0].split(".").map((t=>parseInt(t,10)||0)),o=i.split("-")[0].split(".").map((t=>parseInt(t,10)||0)),r=Math.max(s.length,o.length);for(let a=0;a<r;a++){const t=s[a]||0,e=o[a]||0;if(t>e)return 1;if(t<e)return-1}return 0};var M={name:"myLayout",components:{kAside:f,kFooter:y,kHeader:I},data(){return{hasCheckedVersion:!1}},methods:{...(0,o.i0)("modulesDetail",{getModules:"getData"}),...(0,o.i0)("command",["getCommands"]),handleAside(){q.includes(this.$route.fullPath)||this.isSmall?this.$store.commit("layoutOption/updateIsFoldAside",!0):this.$store.commit("layoutOption/updateIsFoldAside",!1)},resizeFn(t,e){Math.floor(t)<=528?this.$store.commit("layoutOption/updateIsNarrowScreen",!0):this.$store.commit("layoutOption/updateIsNarrowScreen")},async isVersionLatest(){if(!this.hasCheckedVersion){this.hasCheckedVersion=!0;try{const{data:t}=await(0,l.nI)(),e=t&&t["@kotori-bot/kotori-plugin-webui"];if(e&&R(b.rE,e)<0){const t=String(e).replace(/^[^\d]+/,"");this.$message.warning(`当前版本(v${b.rE})过低,最新版本为 v${t},请及时更新 webui 插件`)}}catch(t){console.error("获取版本信息失败",t)}}}},mounted(){},created(){this.getCommands(),this.getModules(),this.isVersionLatest().then((()=>{this.handleAside(),this.$ws.init()})).catch((()=>{}))},beforeDestroy(){console.log("layout beforeDestroy"),this.$ws.instance&&this.$ws.close()},updated(){this.handleAside()},computed:{...(0,o.L8)("layoutOption",["getIsFoldAside","getIsNarrowScreen"]),isPadding(){return!!q.includes(this.$route.fullPath)},isFooter(){return!q[0].includes(this.$route.fullPath)}}},O=M,D=(0,m.A)(O,i,s,!1,null,"ec94ce06",null),N=D.exports},9529:function(t,e,n){n.d(e,{B:function(){return s},U:function(){return i}});const i={methods:{toggleFullscreen(){this.isFullscreen()?this.exit():this.enter(document.documentElement)},isFullscreen(){return!!document.fullscreenElement||!!document.webkitFullscreenElement||!!document.mozFullScreenElement||!!document.msFullscreenElement||null},enter(t){t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},exit(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()}}},s={props:{chatTarget:{type:Object,default(){return null}},memberList:{type:Array,default(){return[]}}},methods:{tranRoleFn(t){const e={lord:"群主",admin:"管理员","super-admin":"bot",expellee:"已退群"};return e[t]||""},avatarContextMenuFn(t){const{uid:e,task:n,key:i}=t;if(n){const t=this.admin.getUserById(e);this.$emit("handleMenuAction",{targetUser:t,actionType:i,groupId:this.chatTarget.id})}}}}},3086:function(t,e,n){t.exports=n.p+"img/favicon.b107f5c1.svg"}}]);
2
+ //# sourceMappingURL=324.33866611.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"js/324.6f74d729.js","mappings":"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","sources":["webpack://kams/./src/components/layout/aside.vue","webpack://kams/src/components/layout/aside.vue","webpack://kams/./src/components/layout/aside.vue?e6ba","webpack://kams/./src/components/layout/aside.vue?55c2","webpack://kams/./src/components/menus/index.vue","webpack://kams/src/components/menus/index.vue","webpack://kams/./src/components/menus/index.vue?1108","webpack://kams/./src/components/menus/index.vue?581e","webpack://kams/./src/components/menus/menu-item.vue","webpack://kams/src/components/menus/menu-item.vue","webpack://kams/./src/components/menus/menu-item.vue?3887","webpack://kams/./src/components/menus/menu-item.vue?866e","webpack://kams/./src/views/layout/index.vue","webpack://kams/./src/views/layout/aside.vue","webpack://kams/src/views/layout/aside.vue","webpack://kams/./src/views/layout/aside.vue?1719","webpack://kams/./src/views/layout/aside.vue?0508","webpack://kams/./src/views/layout/footer.vue","webpack://kams/src/views/layout/footer.vue","webpack://kams/./src/views/layout/footer.vue?47ef","webpack://kams/./src/views/layout/footer.vue?ed93","webpack://kams/./src/views/layout/header.vue","webpack://kams/src/views/layout/header.vue","webpack://kams/./src/views/layout/header.vue?ca3e","webpack://kams/./src/views/layout/header.vue?bcb3","webpack://kams/src/views/layout/index.vue","webpack://kams/./src/views/layout/index.vue?0396","webpack://kams/./src/views/layout/index.vue?b60b","webpack://kams/./src/mixin/index.js"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('aside',{ref:\"aside\",staticClass:\"k-sb-aside k-aside\"},[_c('div',{staticClass:\"k-aside-default\"},[_vm._t(\"default\")],2),_c('div',{staticClass:\"k-aside-inner\"},[_vm._t(\"inner\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <aside ref=\"aside\" class=\"k-sb-aside k-aside\">\r\n <div class=\"k-aside-default\">\r\n <slot></slot>\r\n </div>\r\n <div class=\"k-aside-inner\">\r\n <slot name=\"inner\"></slot>\r\n </div>\r\n </aside>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'k-sb-aside'\r\n};\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.k-aside {\r\n display: flex;\r\n flex-direction: column;\r\n background: #fff;\r\n box-sizing: border-box;\r\n height: 100%;\r\n}\r\n.k-aside-inner {\r\n overflow: auto;\r\n box-sizing: border-box;\r\n\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 0px;\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -10px;\r\n // width: 0px;\r\n border-radius: 6px;\r\n background-color: #8888881a;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #88888833; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./aside.vue?vue&type=template&id=d3871a34\"\nimport script from \"./aside.vue?vue&type=script&lang=js\"\nexport * from \"./aside.vue?vue&type=script&lang=js\"\nimport style0 from \"./aside.vue?vue&type=style&index=0&id=d3871a34&prod&lang=less\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{staticClass:\"k-menu\",style:({\n flexDirection: this.mode\n })},[_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <ul\r\n class=\"k-menu\"\r\n :style=\"{\r\n flexDirection: this.mode\r\n }\"\r\n >\r\n <slot></slot>\r\n </ul>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue';\r\nexport default {\r\n name: 'k-menu',\r\n data() {\r\n return {\r\n activeIndex: this.defaultActive\r\n };\r\n },\r\n provide() {\r\n return {\r\n root: this\r\n };\r\n },\r\n props: {\r\n activeColor: {\r\n type: String\r\n },\r\n activeShape: {\r\n type: Array,\r\n default() {\r\n return [];\r\n }\r\n },\r\n backgroundColor: {\r\n type: String\r\n },\r\n textColor: {},\r\n mode: {\r\n type: String,\r\n default() {\r\n return 'column';\r\n }\r\n },\r\n defaultActive: {\r\n type: String\r\n },\r\n router: {\r\n type: Boolean\r\n }\r\n },\r\n methods: {\r\n changeRouteFn(path) {\r\n if (this.router) {\r\n this.$router.push(path);\r\n }\r\n this.activeIndex = path;\r\n }\r\n },\r\n computed: {\r\n rootMenu() {\r\n return {\r\n activeColor: this.activeColor,\r\n backgroundColor: this.backgroundColor,\r\n activeIndex: this.defaultActive\r\n };\r\n }\r\n },\r\n watch: {\r\n defaultActive(val) {\r\n this.activeIndex = val;\r\n }\r\n },\r\n beforeCreate() {\r\n this.$bus = new Vue();\r\n },\r\n mounted() {\r\n this.$bus.$on('changeRoute', this.changeRouteFn);\r\n },\r\n beforeDestroy() {\r\n this.$bus.$off('changeRoute', this.changeRouteFn);\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.k-menu {\r\n display: flex;\r\n list-style: none;\r\n // overflow-x: auto;\r\n height: auto;\r\n\r\n &::-webkit-scrollbar {\r\n width: 0px; // 设置滚动条的宽度\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 0px;\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n width: 0px;\r\n border-radius: 6px;\r\n background-color: #8888881a;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #88888829; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=8321ac56&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=8321ac56&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8321ac56\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-tooltip',{ref:\"tooltip\",staticClass:\"item\",attrs:{\"disabled\":!_vm.tips,\"effect\":\"dark\",\"content\":_vm.title,\"placement\":\"right\",\"manual\":\"\"}},[_c('li',{staticClass:\"k-menu-item\",class:[{ className: _vm.className }, { active: _vm.active }, _vm.direction],style:([\n _vm.itemStyle,\n { height: `${_vm.height}px`, minHeight: `${_vm.height}px` },\n { justifyContent: _vm.align }\n ]),on:{\"mouseenter\":_vm.onmouseenterFn,\"mouseleave\":_vm.onMouseLeaveFn,\"click\":_vm.handleClickFn}},[(_vm.activeShape.includes('line'))?[_c('transition',{attrs:{\"appear\":\"\",\"name\":\"appear\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],staticClass:\"current-shape line\",style:({ background: _vm.root.activeColor })})])]:_vm._e(),(_vm.activeShape.includes('circle'))?[_c('transition',{attrs:{\"appear\":\"\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],staticClass:\"current-shape circle\",style:(_vm.circleStyle)})])]:_vm._e(),_vm._t(\"default\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-tooltip\r\n :disabled=\"!tips\"\r\n ref=\"tooltip\"\r\n class=\"item\"\r\n effect=\"dark\"\r\n :content=\"title\"\r\n placement=\"right\"\r\n manual\r\n >\r\n <li\r\n class=\"k-menu-item\"\r\n :class=\"[{ className }, { active }, direction]\"\r\n :style=\"[\r\n itemStyle,\r\n { height: `${height}px`, minHeight: `${height}px` },\r\n { justifyContent: align }\r\n ]\"\r\n @mouseenter=\"onmouseenterFn\"\r\n @mouseleave=\"onMouseLeaveFn\"\r\n @click=\"handleClickFn\"\r\n >\r\n <template v-if=\"activeShape.includes('line')\">\r\n <transition appear name=\"appear\">\r\n <div\r\n v-show=\"active\"\r\n class=\"current-shape line\"\r\n :style=\"{ background: root.activeColor }\"\r\n ></div>\r\n </transition>\r\n </template>\r\n <template v-if=\"activeShape.includes('circle')\">\r\n <transition appear>\r\n <div v-show=\"active\" class=\"current-shape circle\" :style=\"circleStyle\"></div>\r\n </transition>\r\n </template>\r\n <slot></slot>\r\n </li>\r\n </el-tooltip>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'k-menu-item',\r\n data() {\r\n return {\r\n activeColor: this.root.activeColor\r\n };\r\n },\r\n inject: ['root'],\r\n methods: {\r\n onmouseenterFn() {\r\n this.$el.style.backgroundColor = this.root.backgroundColor;\r\n this.handleTooltipFn(true);\r\n },\r\n onMouseLeaveFn() {\r\n if (this.activeShape.includes('background') && this.active) return;\r\n this.$el.style.backgroundColor = '';\r\n this.handleTooltipFn(false);\r\n },\r\n handleClickFn() {\r\n this.root.$bus.$emit('changeRoute', this.index);\r\n this.$emit('click', this);\r\n this.root.$emit('select', this);\r\n },\r\n handleTooltipFn(isShow) {\r\n this.$refs.tooltip.showPopper = isShow;\r\n }\r\n },\r\n computed: {\r\n active() {\r\n if (!this.root.router) return this.root.activeIndex === this.index;\r\n const activeArr = this.root.activeIndex.split('/');\r\n const indexArr = this.index.split('/');\r\n return activeArr.includes(indexArr[1]);\r\n },\r\n itemStyle() {\r\n const style = {\r\n color: this.active ? this.root.activeColor : this.root.textColor,\r\n borderLeftColor: this.active ? this.root.activeColor : this.root.textColor,\r\n backgroundColor: ''\r\n };\r\n if (this.activeShape.includes('background')) {\r\n style.backgroundColor = this.active ? this.root.backgroundColor : '';\r\n }\r\n return style;\r\n },\r\n circleStyle() {\r\n return {\r\n border: `3px solid ${this.root.activeColor}`,\r\n filter: `drop-shadow(0 0 4px ${this.root.activeColor})`\r\n };\r\n },\r\n activeShape() {\r\n return this.root.activeShape;\r\n },\r\n tips() {\r\n if (this.title) return true;\r\n return false;\r\n },\r\n direction() {\r\n return `k-menu-item-${this.root.mode}`;\r\n }\r\n },\r\n beforeMount() {},\r\n mounted() {},\r\n props: {\r\n icon: {\r\n type: String,\r\n default() {\r\n return '';\r\n }\r\n },\r\n index: {\r\n type: String\r\n },\r\n title: {\r\n type: String\r\n },\r\n width: {\r\n type: String,\r\n default() {\r\n return '70';\r\n }\r\n },\r\n height: {\r\n type: String,\r\n default() {\r\n return '70';\r\n }\r\n },\r\n className: {\r\n type: String,\r\n default() {\r\n return '';\r\n }\r\n },\r\n align: {\r\n type: String,\r\n default() {\r\n return 'center';\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.k-menu-item {\r\n display: flex;\r\n position: relative;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n max-width: 500px;\r\n // text-align: center;\r\n list-style-type: none;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n user-select: none;\r\n\r\n .line {\r\n position: absolute;\r\n left: 0;\r\n height: 70%;\r\n width: 4px;\r\n border-radius: 0 8px 8px 0;\r\n }\r\n\r\n .circle {\r\n position: absolute;\r\n margin: 0 auto;\r\n height: 77%;\r\n width: 77%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n }\r\n}\r\n.k-menu-item-row + .k-menu-item-row {\r\n margin-inline-start: 10px;\r\n}\r\n\r\n.k-menu-item-column + .k-menu-item-column {\r\n margin-block-start: 10px;\r\n}\r\n\r\n.current-shape {\r\n pointer-events: none;\r\n}\r\n\r\n/* 进入的起点、离开的终点 */\r\n.appear-enter,\r\n.appear-leave-to {\r\n // transform: scaleY(0);\r\n transform: translateX(-100%);\r\n}\r\n.appear-enter-active,\r\n.appear-leave-active {\r\n transition: 0.2s ease;\r\n}\r\n/* 进入的终点、离开的起点 */\r\n.appear-enter-to,\r\n.appear-leave {\r\n // transform: scaleY(1);\r\n transform: translateX(0);\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./menu-item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./menu-item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./menu-item.vue?vue&type=template&id=dbebb810&scoped=true\"\nimport script from \"./menu-item.vue?vue&type=script&lang=js\"\nexport * from \"./menu-item.vue?vue&type=script&lang=js\"\nimport style0 from \"./menu-item.vue?vue&type=style&index=0&id=dbebb810&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dbebb810\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-container',{directives:[{name:\"resize-ob\",rawName:\"v-resize-ob\",value:(_vm.resizeFn),expression:\"resizeFn\"}],staticClass:\"main-container\"},[_c('k-aside'),_c('el-container',{staticClass:\"kams-main-container\",attrs:{\"direction\":\"vertical\"}},[_c('k-header'),_c('el-main',{class:{ isPadding: _vm.isPadding, lessPadding: _vm.getIsNarrowScreen }},[_c('transition',{attrs:{\"mode\":\"out-in\"}},[_c('keep-alive',{attrs:{\"include\":\"kConsole\"}},[_c('router-view')],1)],1)],1),(_vm.isFooter)?_c('k-footer'):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',[_c('el-aside',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.$store.state.layoutOption.isFoldAside),expression:\"!$store.state.layoutOption.isFoldAside\"}],staticClass:\"k-aside\"},[_c('div',{staticClass:\"logo\"},[_c('img',{attrs:{\"src\":require(\"@/assets/favicon.svg\"),\"alt\":\"\"}})]),_c('k-menu',{attrs:{\"default-active\":_vm.$route.path,\"active-color\":\"#752bec\",\"active-shape\":['line'],\"text-color\":\"#061e26\",\"background-color\":\"#00000017\",\"mode\":\"column\",\"tips\":true,\"router\":\"\"}},_vm._l((_vm.menus),function(menuItem,index){return _c('k-menu-item',{key:index,attrs:{\"index\":menuItem.indexPath,\"title\":menuItem.content,\"width\":\"60\",\"height\":\"60\"}},[_c('i',{class:menuItem.icon})])}),1),_c('div',{staticClass:\"empty\"}),_c('el-tooltip',{attrs:{\"effect\":\"dark\",\"content\":\"退出登录\",\"placement\":\"right\"}},[_c('div',{staticClass:\"quit\"},[_c('i',{staticClass:\"el-icon-switch-button\",attrs:{\"slot\":\"reference\"},on:{\"click\":_vm.quitFn},slot:\"reference\"})])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <transition>\r\n <el-aside class=\"k-aside\" v-show=\"!$store.state.layoutOption.isFoldAside\">\r\n <div class=\"logo\">\r\n <img src=\"@/assets/favicon.svg\" alt=\"\" />\r\n </div>\r\n <k-menu\r\n :default-active=\"$route.path\"\r\n active-color=\"#752bec\"\r\n :active-shape=\"['line']\"\r\n text-color=\"#061e26\"\r\n background-color=\"#00000017\"\r\n mode=\"column\"\r\n :tips=\"true\"\r\n router\r\n >\r\n <k-menu-item\r\n v-for=\"(menuItem, index) in menus\"\r\n :key=\"index\"\r\n :index=\"menuItem.indexPath\"\r\n :title=\"menuItem.content\"\r\n width=\"60\"\r\n height=\"60\"\r\n >\r\n <i :class=\"menuItem.icon\" />\r\n <!-- <p>{{ menuItem.content }}</p> -->\r\n </k-menu-item>\r\n </k-menu>\r\n <div class=\"empty\"></div>\r\n <el-tooltip effect=\"dark\" content=\"退出登录\" placement=\"right\">\r\n <div class=\"quit\">\r\n <i @click=\"quitFn\" class=\"el-icon-switch-button\" slot=\"reference\"></i>\r\n </div>\r\n </el-tooltip>\r\n </el-aside>\r\n </transition>\r\n</template>\r\n\r\n<script>\r\nimport { logoutAPI } from '@/api';\r\nimport { mapMutations } from 'vuex';\r\nimport kAside from '@/components/layout/aside.vue';\r\nimport kMenuItem from '@/components/menus/menu-item.vue';\r\nimport kMenu from '@/components/menus/';\r\n\r\nexport default {\r\n name: 'k-aside',\r\n // eslint-disable-next-line vue/no-unused-components\r\n components: { kMenuItem, kMenu, kAside },\r\n data() {\r\n return {\r\n visible: false,\r\n isShowDialog: false,\r\n dialogData: { title: '提示', message: '确认退出登录?' },\r\n menus: [\r\n { icon: 'el-icon-pie-chart', content: '数据中心', indexPath: '/dataCenter' },\r\n { icon: 'el-icon-printer', content: '实例管理', indexPath: '/bots' },\r\n { icon: 'el-icon-files', content: '模块管理', indexPath: '/modules' },\r\n {\r\n icon: 'el-icon-shopping-bag-1',\r\n content: '模块中心',\r\n indexPath: '/modulesCenter'\r\n },\r\n { icon: 'el-icon-set-up', content: '指令管理', indexPath: '/command' },\r\n { icon: 'el-icon-setting', content: '配置查看', indexPath: '/config' },\r\n { icon: 'el-icon-chat-line-square', content: '沙盒测试', indexPath: '/sandBox' },\r\n { icon: 'el-icon-cpu', content: '控制台', indexPath: '/console' }\r\n ]\r\n };\r\n },\r\n methods: {\r\n ...mapMutations('layoutOption', ['updateToken']),\r\n cancelFn() {\r\n this.isShowDialog = false;\r\n },\r\n quitFn() {\r\n this.$dialog({ content: this.dialogData.message, title: this.dialogData.title })\r\n .then(() => {\r\n logoutAPI();\r\n })\r\n .then(() => {\r\n this.updateToken('');\r\n this.$router.push('/login');\r\n })\r\n .catch(() => {\r\n this.cancelFn();\r\n });\r\n }\r\n },\r\n mounted() {}\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.el-aside {\r\n display: flex;\r\n flex-direction: column;\r\n width: 60px !important;\r\n background: var(--bg-normal);\r\n user-select: none;\r\n box-shadow: 0 0 8px 0 var(--normal-shadow);\r\n overflow-x: hidden;\r\n z-index: 1;\r\n .logo {\r\n position: sticky;\r\n background: #fff;\r\n top: 0;\r\n width: 60px;\r\n height: 60px;\r\n line-height: 60px;\r\n text-align: center;\r\n z-index: 1;\r\n }\r\n img {\r\n max-width: 30px;\r\n cursor: pointer;\r\n transition: 0.1s linear;\r\n }\r\n .k-menu {\r\n margin-top: 10px;\r\n p {\r\n font-size: 13px;\r\n }\r\n i {\r\n font-size: 23px;\r\n }\r\n }\r\n .empty {\r\n height: 0;\r\n flex-grow: 1;\r\n }\r\n .quit {\r\n position: sticky;\r\n bottom: 0;\r\n background: #fff;\r\n width: 60px;\r\n height: 60px;\r\n line-height: 60px;\r\n font-size: 25px;\r\n text-align: center;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n color: var(--theme-color);\r\n }\r\n }\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 5px;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -5px;\r\n width: 5px;\r\n background: #88888870;\r\n border-radius: 6px;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #888888; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n.v-enter,\r\n.v-leave-to {\r\n width: 0 !important;\r\n}\r\n.v-enter-active,\r\n.v-leave-active {\r\n transition: 0.2s ease-in-out;\r\n}\r\n.v-enter-to,\r\n.v-leave {\r\n width: 60px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./aside.vue?vue&type=template&id=20b675e9&scoped=true\"\nimport script from \"./aside.vue?vue&type=script&lang=js\"\nexport * from \"./aside.vue?vue&type=script&lang=js\"\nimport style0 from \"./aside.vue?vue&type=style&index=0&id=20b675e9&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20b675e9\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-footer',{attrs:{\"height\":\"30px\"}},[_c('pps-context-menu',{attrs:{\"menus\":_vm.menus,\"position\":\"top\"}},[_c('div',{staticClass:\"version detail\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"kotori\"},[_vm._v(\"kams v\"+_vm._s(_vm.version))])])]),_c('pps-context-menu',{attrs:{\"menus\":[\n { label: '内存', rate: _vm.roundedRam.rate },\n { label: 'CPU', rate: _vm.roundedCpu.rate }\n ],\"position\":\"top\"},scopedSlots:_vm._u([{key:\"item\",fn:function({ menu }){return _vm._l((menu),function(item,index){return _c('div',{key:index,staticClass:\"menu-item\"},[_c('div',{staticClass:\"rate\"},[_c('span',[_vm._v(_vm._s(item.label))]),_c('el-progress',{attrs:{\"percentage\":Number(item.rate)}})],1)])})}}])},[_c('div',{staticClass:\"status detail\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('span',[_vm._v(\"内存:\"+_vm._s(_vm.fixedFn(_vm.roundedRam.rate))+\" %\")]),_vm._v(\"   \"),_c('span',[_vm._v(\"CPU:\"+_vm._s(_vm.fixedFn(_vm.roundedCpu.rate))+\" %\")])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-footer height=\"30px\">\r\n <pps-context-menu :menus=\"menus\" position=\"top\">\r\n <div slot=\"content\" class=\"version detail\">\r\n <div class=\"kotori\">kams v{{ version }}</div>\r\n </div>\r\n </pps-context-menu>\r\n <pps-context-menu\r\n :menus=\"[\r\n { label: '内存', rate: roundedRam.rate },\r\n { label: 'CPU', rate: roundedCpu.rate }\r\n ]\"\r\n position=\"top\"\r\n >\r\n <div slot=\"content\" class=\"status detail\">\r\n <span>内存:{{ fixedFn(roundedRam.rate) }} %</span>\r\n &nbsp;\r\n <span>CPU:{{ fixedFn(roundedCpu.rate) }} %</span>\r\n </div>\r\n <template v-slot:item=\"{ menu }\">\r\n <div class=\"menu-item\" v-for=\"(item, index) in menu\" :key=\"index\">\r\n <div class=\"rate\">\r\n <span>{{ item.label }}</span>\r\n <el-progress :percentage=\"Number(item.rate)\"></el-progress>\r\n </div>\r\n </div>\r\n </template>\r\n </pps-context-menu>\r\n </el-footer>\r\n</template>\r\n\r\n<script>\r\nimport { getStatusAPI } from '@/api/index';\r\nimport { mapGetters, mapMutations } from 'vuex';\r\nimport { version } from '@/../package.json';\r\nexport default {\r\n name: 'k-footer',\r\n data() {\r\n return {\r\n status: '',\r\n version\r\n };\r\n },\r\n methods: {\r\n ...mapMutations('webSocketOption', ['updateCpu', 'updateRam']),\r\n contextMenuFn() {},\r\n fixedFn(num) {\r\n return Number(num).toFixed(1);\r\n }\r\n },\r\n computed: {\r\n ...mapGetters('webSocketOption', ['roundedRam', 'roundedCpu']),\r\n menus() {\r\n return [\r\n { label: `主程序版本: v${this.status.main}` },\r\n { label: `核心版本: v${this.status.core}` },\r\n { label: `加载器版本: v${this.status.loader}` }\r\n ];\r\n }\r\n },\r\n created() {\r\n getStatusAPI().then(({ data: res }) => {\r\n this.status = res;\r\n });\r\n },\r\n mounted() {\r\n this.$ws.bus.$on('wsMessage', (msg) => {\r\n if (msg.type === 'stats') {\r\n this.updateCpu(msg.data.cpu);\r\n this.updateRam(msg.data.ram);\r\n }\r\n });\r\n },\r\n beforeDestroy() {\r\n this.$ws.bus.$off('wsMessage');\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.el-footer {\r\n height: var(--k-footer-height) !important;\r\n display: flex;\r\n justify-content: space-between !important;\r\n align-items: center;\r\n font-size: 12px;\r\n background-color: #eee;\r\n z-index: 5;\r\n\r\n .detail {\r\n height: 100%;\r\n display: inline-flex;\r\n align-items: center;\r\n user-select: none;\r\n &:hover {\r\n cursor: pointer;\r\n background: #ffffff;\r\n }\r\n }\r\n\r\n .menu-item {\r\n padding: 5px 10px;\r\n cursor: pointer;\r\n &:hover {\r\n background: #f5f5f5;\r\n }\r\n }\r\n\r\n & ::v-deep .rate {\r\n display: inline-flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 160px;\r\n .el-progress {\r\n width: 80%;\r\n & ::v-deep .el-progress-bar {\r\n width: 90% !important;\r\n }\r\n }\r\n }\r\n\r\n .pps-context-menu-area {\r\n height: 100%;\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=3f40d996&scoped=true\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\nimport style0 from \"./footer.vue?vue&type=style&index=0&id=3f40d996&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f40d996\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-header',[_c('span',{staticClass:\"header-left\"},[_c('pps-button',{nativeOn:{\"click\":function($event){return _vm.onFold()}}},[_c('i',{class:_vm.arrowClass})]),_c('pps-button',{on:{\"click\":function($event){return _vm.toggleFullscreen()}}},[_c('i',{staticClass:\"el-icon-full-screen\"})])],1),_c('span',{staticClass:\"title header-center\"},[_vm._v(_vm._s(_vm.pathTitle))]),_c('span',{staticClass:\"header-right\"},[_c('pps-icon',{attrs:{\"icon\":\"pps-icon-github\"},on:{\"click\":_vm.linkGithubFn}}),_c('pps-icon',{attrs:{\"icon\":\"pps-icon-qq\"},on:{\"click\":_vm.linkQQFn}}),_c('pps-icon',{attrs:{\"icon\":\"pps-icon-help\"},on:{\"click\":_vm.linkDocsFn}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-header>\r\n <span class=\"header-left\">\r\n <pps-button @click.native=\"onFold()\">\r\n <i :class=\"arrowClass\"></i>\r\n </pps-button>\r\n <pps-button @click=\"toggleFullscreen()\">\r\n <i class=\"el-icon-full-screen\"></i>\r\n </pps-button>\r\n </span>\r\n <span class=\"title header-center\">{{ pathTitle }}</span>\r\n <span class=\"header-right\">\r\n <pps-icon icon=\"pps-icon-github\" @click=\"linkGithubFn\" />\r\n <pps-icon icon=\"pps-icon-qq\" @click=\"linkQQFn\" />\r\n <pps-icon icon=\"pps-icon-help\" @click=\"linkDocsFn\" />\r\n </span>\r\n </el-header>\r\n</template>\r\n\r\n<script>\r\nimport { userFullScreen } from '@/mixin/index';\r\nimport { mapGetters } from 'vuex';\r\nexport default {\r\n name: 'kHeader',\r\n methods: {\r\n onFold() {\r\n this.$store.commit(\r\n 'layoutOption/updateIsFoldAside',\r\n !this.$store.state.layoutOption.isFoldAside\r\n );\r\n },\r\n clearvuexFn() {\r\n localStorage.removeItem('vuex');\r\n },\r\n linkGithubFn() {\r\n window.open('https://github.com/kotorijs', '_blank');\r\n },\r\n linkQQFn() {\r\n window.open('https://qm.qq.com/q/Nb3lQPt7We', '_blank');\r\n },\r\n linkDocsFn() {\r\n window.open('https://kotori.js.org/', '_blank');\r\n }\r\n },\r\n computed: {\r\n ...mapGetters('layoutOption', ['getIsFoldAside']),\r\n pathTitle() {\r\n return this.$route.matched[1].meta.title;\r\n },\r\n isPadding() {\r\n if (this.$route.fullPath === '/console') {\r\n return true;\r\n }\r\n return false;\r\n },\r\n arrowClass() {\r\n if (this.getIsFoldAside) return 'el-icon-d-arrow-right';\r\n return 'el-icon-d-arrow-left';\r\n }\r\n },\r\n mixins: [userFullScreen]\r\n};\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.el-header {\r\n display: flex;\r\n position: relative;\r\n padding: 0;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-size: 13px;\r\n border-bottom: 2px solid #e1e2e8;\r\n background-color: var(--bg-main);\r\n height: var(--k-header-height) !important;\r\n\r\n .title {\r\n color: var(--font-gray-color);\r\n font-size: 1.17em;\r\n font-weight: 600;\r\n letter-spacing: 1px;\r\n }\r\n\r\n .header-left {\r\n flex: 1;\r\n }\r\n .header-center {\r\n position: absolute;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n .header-right {\r\n flex: 1;\r\n text-align: right;\r\n\r\n .pps-icon {\r\n float: right;\r\n cursor: pointer;\r\n &:hover {\r\n transform: scale(1.1);\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=4d4493e4\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&id=4d4493e4&prod&lang=less\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/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","<template>\r\n <el-container class=\"main-container\" v-resize-ob=\"resizeFn\">\r\n <k-aside></k-aside>\r\n <el-container class=\"kams-main-container\" direction=\"vertical\">\r\n <k-header></k-header>\r\n <el-main :class=\"{ isPadding, lessPadding: getIsNarrowScreen }\">\r\n <transition mode=\"out-in\">\r\n <keep-alive include=\"kConsole\">\r\n <router-view></router-view>\r\n </keep-alive>\r\n </transition>\r\n </el-main>\r\n <k-footer v-if=\"isFooter\"></k-footer>\r\n </el-container>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters, mapActions } from 'vuex';\r\nimport kAside from './aside.vue';\r\nimport kFooter from './footer.vue';\r\nimport kHeader from './header.vue';\r\nimport { version } from '@/../package.json';\r\nimport { getVersionAPI } from '@/api';\r\nconst uniqueRoutes = ['/console', '/sandBox'];\r\n\r\nconst compareVersions = (v1, v2) => {\r\n if (!v1 || !v2) return 0;\r\n const clean1 = String(v1).replace(/^[^\\d]+/, '');\r\n const clean2 = String(v2).replace(/^[^\\d]+/, '');\r\n const parts1 = clean1.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);\r\n const parts2 = clean2.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);\r\n const maxLen = Math.max(parts1.length, parts2.length);\r\n\r\n for (let i = 0; i < maxLen; i++) {\r\n const num1 = parts1[i] || 0;\r\n const num2 = parts2[i] || 0;\r\n if (num1 > num2) return 1;\r\n if (num1 < num2) return -1;\r\n }\r\n return 0;\r\n};\r\n\r\nexport default {\r\n name: 'myLayout',\r\n components: { kAside, kFooter, kHeader },\r\n data() {\r\n return {\r\n hasCheckedVersion: false\r\n };\r\n },\r\n methods: {\r\n ...mapActions('modulesDetail', { getModules: 'getData' }),\r\n ...mapActions('command', ['getCommands']),\r\n handleAside() {\r\n if (uniqueRoutes.includes(this.$route.fullPath) || this.isSmall) {\r\n this.$store.commit('layoutOption/updateIsFoldAside', true);\r\n } else {\r\n this.$store.commit('layoutOption/updateIsFoldAside', false);\r\n }\r\n },\r\n resizeFn(w, h) {\r\n if (Math.floor(w) <= 528) {\r\n this.$store.commit('layoutOption/updateIsNarrowScreen', true);\r\n } else {\r\n this.$store.commit('layoutOption/updateIsNarrowScreen');\r\n }\r\n },\r\n async isVersionLatest() {\r\n // 避免重复检测和重复弹窗\r\n if (this.hasCheckedVersion) return;\r\n this.hasCheckedVersion = true;\r\n\r\n try {\r\n const { data: res } = await getVersionAPI();\r\n const remoteVersion = res && res['@kotori-bot/kotori-plugin-webui'];\r\n // 仅在当前版本严格低于最新发布版本时弹窗警告;若当前版本大于或等于最新发布版本则不处理\r\n if (remoteVersion && compareVersions(version, remoteVersion) < 0) {\r\n const cleanRemote = String(remoteVersion).replace(/^[^\\d]+/, '');\r\n this.$message.warning(`当前版本(v${version})过低,最新版本为 v${cleanRemote},请及时更新 webui 插件`);\r\n }\r\n } catch (err) {\r\n console.error('获取版本信息失败', err);\r\n }\r\n }\r\n },\r\n mounted() {},\r\n created() {\r\n this.getCommands();\r\n this.getModules();\r\n this.isVersionLatest()\r\n .then(() => {\r\n this.handleAside();\r\n this.$ws.init();\r\n })\r\n .catch(() => {});\r\n },\r\n beforeDestroy() {\r\n console.log('layout beforeDestroy');\r\n if (this.$ws.instance) {\r\n this.$ws.close();\r\n }\r\n },\r\n updated() {\r\n this.handleAside();\r\n },\r\n computed: {\r\n ...mapGetters('layoutOption', ['getIsFoldAside', 'getIsNarrowScreen']),\r\n isPadding() {\r\n if (uniqueRoutes.includes(this.$route.fullPath)) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n isFooter() {\r\n if (uniqueRoutes[0].includes(this.$route.fullPath)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.isPadding {\r\n // padding-left: 0 !important;\r\n // padding-right: 0 !important\r\n padding: 0 !important;\r\n}\r\n.lessPadding {\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n}\r\n.main-container {\r\n height: 100%;\r\n max-width: 100vw;\r\n\r\n .kams-main-container {\r\n flex-basis: 0;\r\n flex: 1;\r\n }\r\n\r\n .el-main {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n overflow-x: hidden;\r\n height: var(--k-main-height);\r\n background-color: var(--normal-color);\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n height: 5px;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 5px;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -5px;\r\n width: 5px;\r\n background: #88888870;\r\n border-radius: 6px;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #888888; // 鼠标悬停时滚动条的颜色\r\n }\r\n }\r\n}\r\n.v-enter {\r\n opacity: 0;\r\n transform: translateX(-30px);\r\n}\r\n.v-leave-to {\r\n opacity: 0;\r\n transform: translateX(30px);\r\n}\r\n.v-enter-active,\r\n.v-leave-active {\r\n transition: all 0.5s;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=ec94ce06&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=ec94ce06&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec94ce06\",\n null\n \n)\n\nexport default component.exports","export const userFullScreen = {\r\n methods: {\r\n toggleFullscreen() {\r\n this.isFullscreen() ? this.exit() : this.enter(document.documentElement);\r\n },\r\n isFullscreen() {\r\n return (\r\n !!document.fullscreenElement ||\r\n !!document.webkitFullscreenElement ||\r\n !!document.mozFullScreenElement ||\r\n !!document.msFullscreenElement ||\r\n null\r\n );\r\n },\r\n enter(element) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n // Safari\r\n element.webkitRequestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n // Firefox\r\n element.mozRequestFullScreen();\r\n } else if (element.msRequestFullscreen) {\r\n // IE/Edge\r\n element.msRequestFullscreen();\r\n }\r\n },\r\n exit() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document.webkitExitFullscreen) {\r\n // Safari\r\n document.webkitExitFullscreen();\r\n } else if (document.mozCancelFullScreen) {\r\n // Firefox\r\n document.mozCancelFullScreen();\r\n } else if (document.msExitFullscreen) {\r\n // IE/Edge\r\n document.msExitFullscreen();\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const tranRoleMixin = {\r\n props: {\r\n chatTarget: {\r\n type: Object,\r\n default() {\r\n return null;\r\n }\r\n },\r\n memberList: {\r\n type: Array,\r\n default() {\r\n return [];\r\n }\r\n }\r\n },\r\n methods: {\r\n tranRoleFn(role) {\r\n const roleMap = {\r\n lord: '群主',\r\n admin: '管理员',\r\n 'super-admin': 'bot',\r\n expellee: '已退群'\r\n };\r\n return roleMap[role] || '';\r\n },\r\n avatarContextMenuFn(menu) {\r\n const { uid, task, key } = menu;\r\n if (task) {\r\n const user = this.admin.getUserById(uid);\r\n this.$emit('handleMenuAction', {\r\n targetUser: user,\r\n actionType: key,\r\n groupId: this.chatTarget.id\r\n });\r\n }\r\n }\r\n }\r\n};\r\n\r\n// const permissionList = {}\r\n"],"names":["render","_vm","this","_c","_self","ref","staticClass","_t","staticRenderFns","name","component","style","flexDirection","mode","data","activeIndex","defaultActive","provide","root","props","activeColor","type","String","activeShape","Array","default","backgroundColor","textColor","router","Boolean","methods","changeRouteFn","path","$router","push","computed","rootMenu","watch","val","beforeCreate","$bus","Vue","mounted","$on","beforeDestroy","$off","attrs","tips","title","class","className","active","direction","itemStyle","height","minHeight","justifyContent","align","on","onmouseenterFn","onMouseLeaveFn","handleClickFn","includes","directives","rawName","value","expression","background","_e","circleStyle","inject","$el","handleTooltipFn","$emit","index","isShow","$refs","tooltip","showPopper","activeArr","split","indexArr","color","borderLeftColor","border","filter","beforeMount","icon","width","resizeFn","isPadding","lessPadding","getIsNarrowScreen","isFooter","$store","state","layoutOption","isFoldAside","require","$route","_l","menus","menuItem","key","indexPath","content","quitFn","slot","components","kMenuItem","kMenu","kAside","visible","isShowDialog","dialogData","message","mapMutations","cancelFn","$dialog","then","logoutAPI","updateToken","catch","_v","_s","version","label","rate","roundedRam","roundedCpu","scopedSlots","_u","fn","menu","item","Number","fixedFn","status","contextMenuFn","num","toFixed","mapGetters","main","core","loader","created","getStatusAPI","res","$ws","bus","msg","updateCpu","cpu","updateRam","ram","nativeOn","$event","onFold","arrowClass","toggleFullscreen","pathTitle","linkGithubFn","linkQQFn","linkDocsFn","commit","clearvuexFn","localStorage","removeItem","window","open","matched","meta","fullPath","getIsFoldAside","mixins","userFullScreen","uniqueRoutes","compareVersions","v1","v2","clean1","replace","clean2","parts1","map","n","parseInt","parts2","maxLen","Math","max","length","i","num1","num2","kFooter","kHeader","hasCheckedVersion","mapActions","getModules","handleAside","isSmall","w","h","floor","isVersionLatest","getVersionAPI","remoteVersion","cleanRemote","$message","warning","err","console","error","getCommands","init","log","instance","close","updated","isFullscreen","exit","enter","document","documentElement","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","element","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","tranRoleMixin","chatTarget","Object","memberList","tranRoleFn","role","roleMap","lord","admin","expellee","avatarContextMenuFn","uid","task","user","getUserById","targetUser","actionType","groupId","id"],"sourceRoot":""}
1
+ {"version":3,"file":"js/324.33866611.js","mappings":"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","sources":["webpack://kams/./src/components/layout/aside.vue","webpack://kams/src/components/layout/aside.vue","webpack://kams/./src/components/layout/aside.vue?e6ba","webpack://kams/./src/components/layout/aside.vue?55c2","webpack://kams/./src/components/menus/index.vue","webpack://kams/src/components/menus/index.vue","webpack://kams/./src/components/menus/index.vue?1108","webpack://kams/./src/components/menus/index.vue?581e","webpack://kams/./src/components/menus/menu-item.vue","webpack://kams/src/components/menus/menu-item.vue","webpack://kams/./src/components/menus/menu-item.vue?3887","webpack://kams/./src/components/menus/menu-item.vue?866e","webpack://kams/./src/views/layout/index.vue","webpack://kams/./src/views/layout/aside.vue","webpack://kams/src/views/layout/aside.vue","webpack://kams/./src/views/layout/aside.vue?1719","webpack://kams/./src/views/layout/aside.vue?0508","webpack://kams/./src/views/layout/footer.vue","webpack://kams/src/views/layout/footer.vue","webpack://kams/./src/views/layout/footer.vue?47ef","webpack://kams/./src/views/layout/footer.vue?ed93","webpack://kams/./src/views/layout/header.vue","webpack://kams/src/views/layout/header.vue","webpack://kams/./src/views/layout/header.vue?ca3e","webpack://kams/./src/views/layout/header.vue?bcb3","webpack://kams/src/views/layout/index.vue","webpack://kams/./src/views/layout/index.vue?0396","webpack://kams/./src/views/layout/index.vue?b60b","webpack://kams/./src/mixin/index.js"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('aside',{ref:\"aside\",staticClass:\"k-sb-aside k-aside\"},[_c('div',{staticClass:\"k-aside-default\"},[_vm._t(\"default\")],2),_c('div',{staticClass:\"k-aside-inner\"},[_vm._t(\"inner\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <aside ref=\"aside\" class=\"k-sb-aside k-aside\">\r\n <div class=\"k-aside-default\">\r\n <slot></slot>\r\n </div>\r\n <div class=\"k-aside-inner\">\r\n <slot name=\"inner\"></slot>\r\n </div>\r\n </aside>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'k-sb-aside'\r\n};\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.k-aside {\r\n display: flex;\r\n flex-direction: column;\r\n background: #fff;\r\n box-sizing: border-box;\r\n height: 100%;\r\n}\r\n.k-aside-inner {\r\n overflow: auto;\r\n box-sizing: border-box;\r\n\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 0px;\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -10px;\r\n // width: 0px;\r\n border-radius: 6px;\r\n background-color: #8888881a;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #88888833; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./aside.vue?vue&type=template&id=d3871a34\"\nimport script from \"./aside.vue?vue&type=script&lang=js\"\nexport * from \"./aside.vue?vue&type=script&lang=js\"\nimport style0 from \"./aside.vue?vue&type=style&index=0&id=d3871a34&prod&lang=less\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{staticClass:\"k-menu\",style:({\n flexDirection: this.mode\n })},[_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <ul\r\n class=\"k-menu\"\r\n :style=\"{\r\n flexDirection: this.mode\r\n }\"\r\n >\r\n <slot></slot>\r\n </ul>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue';\r\nexport default {\r\n name: 'k-menu',\r\n data() {\r\n return {\r\n activeIndex: this.defaultActive\r\n };\r\n },\r\n provide() {\r\n return {\r\n root: this\r\n };\r\n },\r\n props: {\r\n activeColor: {\r\n type: String\r\n },\r\n activeShape: {\r\n type: Array,\r\n default() {\r\n return [];\r\n }\r\n },\r\n backgroundColor: {\r\n type: String\r\n },\r\n textColor: {},\r\n mode: {\r\n type: String,\r\n default() {\r\n return 'column';\r\n }\r\n },\r\n defaultActive: {\r\n type: String\r\n },\r\n router: {\r\n type: Boolean\r\n }\r\n },\r\n methods: {\r\n changeRouteFn(path) {\r\n if (this.router) {\r\n this.$router.push(path);\r\n }\r\n this.activeIndex = path;\r\n }\r\n },\r\n computed: {\r\n rootMenu() {\r\n return {\r\n activeColor: this.activeColor,\r\n backgroundColor: this.backgroundColor,\r\n activeIndex: this.defaultActive\r\n };\r\n }\r\n },\r\n watch: {\r\n defaultActive(val) {\r\n this.activeIndex = val;\r\n }\r\n },\r\n beforeCreate() {\r\n this.$bus = new Vue();\r\n },\r\n mounted() {\r\n this.$bus.$on('changeRoute', this.changeRouteFn);\r\n },\r\n beforeDestroy() {\r\n this.$bus.$off('changeRoute', this.changeRouteFn);\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.k-menu {\r\n display: flex;\r\n list-style: none;\r\n // overflow-x: auto;\r\n height: auto;\r\n\r\n &::-webkit-scrollbar {\r\n width: 0px; // 设置滚动条的宽度\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 0px;\r\n height: 0;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n width: 0px;\r\n border-radius: 6px;\r\n background-color: #8888881a;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #88888829; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=8321ac56&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=8321ac56&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8321ac56\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-tooltip',{ref:\"tooltip\",staticClass:\"item\",attrs:{\"disabled\":!_vm.tips,\"effect\":\"dark\",\"content\":_vm.title,\"placement\":\"right\",\"manual\":\"\"}},[_c('li',{staticClass:\"k-menu-item\",class:[{ className: _vm.className }, { active: _vm.active }, _vm.direction],style:([\n _vm.itemStyle,\n { height: `${_vm.height}px`, minHeight: `${_vm.height}px` },\n { justifyContent: _vm.align }\n ]),on:{\"mouseenter\":_vm.onmouseenterFn,\"mouseleave\":_vm.onMouseLeaveFn,\"click\":_vm.handleClickFn}},[(_vm.activeShape.includes('line'))?[_c('transition',{attrs:{\"appear\":\"\",\"name\":\"appear\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],staticClass:\"current-shape line\",style:({ background: _vm.root.activeColor })})])]:_vm._e(),(_vm.activeShape.includes('circle'))?[_c('transition',{attrs:{\"appear\":\"\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],staticClass:\"current-shape circle\",style:(_vm.circleStyle)})])]:_vm._e(),_vm._t(\"default\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-tooltip\r\n :disabled=\"!tips\"\r\n ref=\"tooltip\"\r\n class=\"item\"\r\n effect=\"dark\"\r\n :content=\"title\"\r\n placement=\"right\"\r\n manual\r\n >\r\n <li\r\n class=\"k-menu-item\"\r\n :class=\"[{ className }, { active }, direction]\"\r\n :style=\"[\r\n itemStyle,\r\n { height: `${height}px`, minHeight: `${height}px` },\r\n { justifyContent: align }\r\n ]\"\r\n @mouseenter=\"onmouseenterFn\"\r\n @mouseleave=\"onMouseLeaveFn\"\r\n @click=\"handleClickFn\"\r\n >\r\n <template v-if=\"activeShape.includes('line')\">\r\n <transition appear name=\"appear\">\r\n <div\r\n v-show=\"active\"\r\n class=\"current-shape line\"\r\n :style=\"{ background: root.activeColor }\"\r\n ></div>\r\n </transition>\r\n </template>\r\n <template v-if=\"activeShape.includes('circle')\">\r\n <transition appear>\r\n <div v-show=\"active\" class=\"current-shape circle\" :style=\"circleStyle\"></div>\r\n </transition>\r\n </template>\r\n <slot></slot>\r\n </li>\r\n </el-tooltip>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'k-menu-item',\r\n data() {\r\n return {\r\n activeColor: this.root.activeColor\r\n };\r\n },\r\n inject: ['root'],\r\n methods: {\r\n onmouseenterFn() {\r\n this.$el.style.backgroundColor = this.root.backgroundColor;\r\n this.handleTooltipFn(true);\r\n },\r\n onMouseLeaveFn() {\r\n if (this.activeShape.includes('background') && this.active) return;\r\n this.$el.style.backgroundColor = '';\r\n this.handleTooltipFn(false);\r\n },\r\n handleClickFn() {\r\n this.root.$bus.$emit('changeRoute', this.index);\r\n this.$emit('click', this);\r\n this.root.$emit('select', this);\r\n },\r\n handleTooltipFn(isShow) {\r\n this.$refs.tooltip.showPopper = isShow;\r\n }\r\n },\r\n computed: {\r\n active() {\r\n if (!this.root.router) return this.root.activeIndex === this.index;\r\n const activeArr = this.root.activeIndex.split('/');\r\n const indexArr = this.index.split('/');\r\n return activeArr.includes(indexArr[1]);\r\n },\r\n itemStyle() {\r\n const style = {\r\n color: this.active ? this.root.activeColor : this.root.textColor,\r\n borderLeftColor: this.active ? this.root.activeColor : this.root.textColor,\r\n backgroundColor: ''\r\n };\r\n if (this.activeShape.includes('background')) {\r\n style.backgroundColor = this.active ? this.root.backgroundColor : '';\r\n }\r\n return style;\r\n },\r\n circleStyle() {\r\n return {\r\n border: `3px solid ${this.root.activeColor}`,\r\n filter: `drop-shadow(0 0 4px ${this.root.activeColor})`\r\n };\r\n },\r\n activeShape() {\r\n return this.root.activeShape;\r\n },\r\n tips() {\r\n if (this.title) return true;\r\n return false;\r\n },\r\n direction() {\r\n return `k-menu-item-${this.root.mode}`;\r\n }\r\n },\r\n beforeMount() {},\r\n mounted() {},\r\n props: {\r\n icon: {\r\n type: String,\r\n default() {\r\n return '';\r\n }\r\n },\r\n index: {\r\n type: String\r\n },\r\n title: {\r\n type: String\r\n },\r\n width: {\r\n type: String,\r\n default() {\r\n return '70';\r\n }\r\n },\r\n height: {\r\n type: String,\r\n default() {\r\n return '70';\r\n }\r\n },\r\n className: {\r\n type: String,\r\n default() {\r\n return '';\r\n }\r\n },\r\n align: {\r\n type: String,\r\n default() {\r\n return 'center';\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.k-menu-item {\r\n display: flex;\r\n position: relative;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n max-width: 500px;\r\n // text-align: center;\r\n list-style-type: none;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n user-select: none;\r\n\r\n .line {\r\n position: absolute;\r\n left: 0;\r\n height: 70%;\r\n width: 4px;\r\n border-radius: 0 8px 8px 0;\r\n }\r\n\r\n .circle {\r\n position: absolute;\r\n margin: 0 auto;\r\n height: 77%;\r\n width: 77%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n }\r\n}\r\n.k-menu-item-row + .k-menu-item-row {\r\n margin-inline-start: 10px;\r\n}\r\n\r\n.k-menu-item-column + .k-menu-item-column {\r\n margin-block-start: 10px;\r\n}\r\n\r\n.current-shape {\r\n pointer-events: none;\r\n}\r\n\r\n/* 进入的起点、离开的终点 */\r\n.appear-enter,\r\n.appear-leave-to {\r\n // transform: scaleY(0);\r\n transform: translateX(-100%);\r\n}\r\n.appear-enter-active,\r\n.appear-leave-active {\r\n transition: 0.2s ease;\r\n}\r\n/* 进入的终点、离开的起点 */\r\n.appear-enter-to,\r\n.appear-leave {\r\n // transform: scaleY(1);\r\n transform: translateX(0);\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./menu-item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./menu-item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./menu-item.vue?vue&type=template&id=dbebb810&scoped=true\"\nimport script from \"./menu-item.vue?vue&type=script&lang=js\"\nexport * from \"./menu-item.vue?vue&type=script&lang=js\"\nimport style0 from \"./menu-item.vue?vue&type=style&index=0&id=dbebb810&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dbebb810\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-container',{directives:[{name:\"resize-ob\",rawName:\"v-resize-ob\",value:(_vm.resizeFn),expression:\"resizeFn\"}],staticClass:\"main-container\"},[_c('k-aside'),_c('el-container',{staticClass:\"kams-main-container\",attrs:{\"direction\":\"vertical\"}},[_c('k-header'),_c('el-main',{class:{ isPadding: _vm.isPadding, lessPadding: _vm.getIsNarrowScreen }},[_c('transition',{attrs:{\"mode\":\"out-in\"}},[_c('keep-alive',{attrs:{\"include\":\"kConsole\"}},[_c('router-view')],1)],1)],1),(_vm.isFooter)?_c('k-footer'):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',[_c('el-aside',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.$store.state.layoutOption.isFoldAside),expression:\"!$store.state.layoutOption.isFoldAside\"}],staticClass:\"k-aside\"},[_c('div',{staticClass:\"logo\"},[_c('img',{attrs:{\"src\":require(\"@/assets/favicon.svg\"),\"alt\":\"\"}})]),_c('k-menu',{attrs:{\"default-active\":_vm.$route.path,\"active-color\":\"#752bec\",\"active-shape\":['line'],\"text-color\":\"#061e26\",\"background-color\":\"#00000017\",\"mode\":\"column\",\"tips\":true,\"router\":\"\"}},_vm._l((_vm.menus),function(menuItem,index){return _c('k-menu-item',{key:index,attrs:{\"index\":menuItem.indexPath,\"title\":menuItem.content,\"width\":\"60\",\"height\":\"60\"}},[_c('i',{class:menuItem.icon})])}),1),_c('div',{staticClass:\"empty\"}),_c('el-tooltip',{attrs:{\"effect\":\"dark\",\"content\":\"退出登录\",\"placement\":\"right\"}},[_c('div',{staticClass:\"quit\"},[_c('i',{staticClass:\"el-icon-switch-button\",attrs:{\"slot\":\"reference\"},on:{\"click\":_vm.quitFn},slot:\"reference\"})])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <transition>\r\n <el-aside class=\"k-aside\" v-show=\"!$store.state.layoutOption.isFoldAside\">\r\n <div class=\"logo\">\r\n <img src=\"@/assets/favicon.svg\" alt=\"\" />\r\n </div>\r\n <k-menu\r\n :default-active=\"$route.path\"\r\n active-color=\"#752bec\"\r\n :active-shape=\"['line']\"\r\n text-color=\"#061e26\"\r\n background-color=\"#00000017\"\r\n mode=\"column\"\r\n :tips=\"true\"\r\n router\r\n >\r\n <k-menu-item\r\n v-for=\"(menuItem, index) in menus\"\r\n :key=\"index\"\r\n :index=\"menuItem.indexPath\"\r\n :title=\"menuItem.content\"\r\n width=\"60\"\r\n height=\"60\"\r\n >\r\n <i :class=\"menuItem.icon\" />\r\n <!-- <p>{{ menuItem.content }}</p> -->\r\n </k-menu-item>\r\n </k-menu>\r\n <div class=\"empty\"></div>\r\n <el-tooltip effect=\"dark\" content=\"退出登录\" placement=\"right\">\r\n <div class=\"quit\">\r\n <i @click=\"quitFn\" class=\"el-icon-switch-button\" slot=\"reference\"></i>\r\n </div>\r\n </el-tooltip>\r\n </el-aside>\r\n </transition>\r\n</template>\r\n\r\n<script>\r\nimport { logoutAPI } from '@/api';\r\nimport { mapMutations } from 'vuex';\r\nimport kAside from '@/components/layout/aside.vue';\r\nimport kMenuItem from '@/components/menus/menu-item.vue';\r\nimport kMenu from '@/components/menus/';\r\n\r\nexport default {\r\n name: 'k-aside',\r\n // eslint-disable-next-line vue/no-unused-components\r\n components: { kMenuItem, kMenu, kAside },\r\n data() {\r\n return {\r\n visible: false,\r\n isShowDialog: false,\r\n dialogData: { title: '提示', message: '确认退出登录?' },\r\n menus: [\r\n { icon: 'el-icon-pie-chart', content: '数据中心', indexPath: '/dataCenter' },\r\n { icon: 'el-icon-printer', content: '实例管理', indexPath: '/bots' },\r\n { icon: 'el-icon-files', content: '模块管理', indexPath: '/modules' },\r\n {\r\n icon: 'el-icon-shopping-bag-1',\r\n content: '模块中心',\r\n indexPath: '/modulesCenter'\r\n },\r\n { icon: 'el-icon-set-up', content: '指令管理', indexPath: '/command' },\r\n { icon: 'el-icon-setting', content: '配置查看', indexPath: '/config' },\r\n { icon: 'el-icon-chat-line-square', content: '沙盒测试', indexPath: '/sandBox' },\r\n { icon: 'el-icon-cpu', content: '控制台', indexPath: '/console' }\r\n ]\r\n };\r\n },\r\n methods: {\r\n ...mapMutations('layoutOption', ['updateToken']),\r\n cancelFn() {\r\n this.isShowDialog = false;\r\n },\r\n quitFn() {\r\n this.$dialog({ content: this.dialogData.message, title: this.dialogData.title })\r\n .then(() => {\r\n logoutAPI();\r\n })\r\n .then(() => {\r\n this.updateToken('');\r\n this.$router.push('/login');\r\n })\r\n .catch(() => {\r\n this.cancelFn();\r\n });\r\n }\r\n },\r\n mounted() {}\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.el-aside {\r\n display: flex;\r\n flex-direction: column;\r\n width: 60px !important;\r\n background: var(--bg-normal);\r\n user-select: none;\r\n box-shadow: 0 0 8px 0 var(--normal-shadow);\r\n overflow-x: hidden;\r\n z-index: 1;\r\n .logo {\r\n position: sticky;\r\n background: #fff;\r\n top: 0;\r\n width: 60px;\r\n height: 60px;\r\n line-height: 60px;\r\n text-align: center;\r\n z-index: 1;\r\n }\r\n img {\r\n max-width: 30px;\r\n cursor: pointer;\r\n transition: 0.1s linear;\r\n }\r\n .k-menu {\r\n margin-top: 10px;\r\n p {\r\n font-size: 13px;\r\n }\r\n i {\r\n font-size: 23px;\r\n }\r\n }\r\n .empty {\r\n height: 0;\r\n flex-grow: 1;\r\n }\r\n .quit {\r\n position: sticky;\r\n bottom: 0;\r\n background: #fff;\r\n width: 60px;\r\n height: 60px;\r\n line-height: 60px;\r\n font-size: 25px;\r\n text-align: center;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n color: var(--theme-color);\r\n }\r\n }\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 5px;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -5px;\r\n width: 5px;\r\n background: #88888870;\r\n border-radius: 6px;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #888888; // 鼠标悬停时滚动条的颜色\r\n }\r\n}\r\n.v-enter,\r\n.v-leave-to {\r\n width: 0 !important;\r\n}\r\n.v-enter-active,\r\n.v-leave-active {\r\n transition: 0.2s ease-in-out;\r\n}\r\n.v-enter-to,\r\n.v-leave {\r\n width: 60px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./aside.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./aside.vue?vue&type=template&id=20b675e9&scoped=true\"\nimport script from \"./aside.vue?vue&type=script&lang=js\"\nexport * from \"./aside.vue?vue&type=script&lang=js\"\nimport style0 from \"./aside.vue?vue&type=style&index=0&id=20b675e9&prod&lang=less&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20b675e9\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-footer',{attrs:{\"height\":\"30px\"}},[_c('pps-context-menu',{attrs:{\"menus\":_vm.menus,\"position\":\"top\"}},[_c('div',{staticClass:\"version detail\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('div',{staticClass:\"kotori\"},[_vm._v(\"kams v\"+_vm._s(_vm.version))])])]),_c('pps-context-menu',{attrs:{\"menus\":[\n { label: '内存', rate: _vm.roundedRam.rate },\n { label: 'CPU', rate: _vm.roundedCpu.rate }\n ],\"position\":\"top\"},scopedSlots:_vm._u([{key:\"item\",fn:function({ menu }){return _vm._l((menu),function(item,index){return _c('div',{key:index,staticClass:\"menu-item\"},[_c('div',{staticClass:\"rate\"},[_c('span',[_vm._v(_vm._s(item.label))]),_c('el-progress',{attrs:{\"percentage\":Number(item.rate)}})],1)])})}}])},[_c('div',{staticClass:\"status detail\",attrs:{\"slot\":\"content\"},slot:\"content\"},[_c('span',[_vm._v(\"内存:\"+_vm._s(_vm.fixedFn(_vm.roundedRam.rate))+\" %\")]),_vm._v(\"   \"),_c('span',[_vm._v(\"CPU:\"+_vm._s(_vm.fixedFn(_vm.roundedCpu.rate))+\" %\")])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-footer height=\"30px\">\r\n <pps-context-menu :menus=\"menus\" position=\"top\">\r\n <div slot=\"content\" class=\"version detail\">\r\n <div class=\"kotori\">kams v{{ version }}</div>\r\n </div>\r\n </pps-context-menu>\r\n <pps-context-menu\r\n :menus=\"[\r\n { label: '内存', rate: roundedRam.rate },\r\n { label: 'CPU', rate: roundedCpu.rate }\r\n ]\"\r\n position=\"top\"\r\n >\r\n <div slot=\"content\" class=\"status detail\">\r\n <span>内存:{{ fixedFn(roundedRam.rate) }} %</span>\r\n &nbsp;\r\n <span>CPU:{{ fixedFn(roundedCpu.rate) }} %</span>\r\n </div>\r\n <template v-slot:item=\"{ menu }\">\r\n <div class=\"menu-item\" v-for=\"(item, index) in menu\" :key=\"index\">\r\n <div class=\"rate\">\r\n <span>{{ item.label }}</span>\r\n <el-progress :percentage=\"Number(item.rate)\"></el-progress>\r\n </div>\r\n </div>\r\n </template>\r\n </pps-context-menu>\r\n </el-footer>\r\n</template>\r\n\r\n<script>\r\nimport { getStatusAPI } from '@/api/index';\r\nimport { mapGetters, mapMutations } from 'vuex';\r\nimport { version } from '@/../package.json';\r\nexport default {\r\n name: 'k-footer',\r\n data() {\r\n return {\r\n status: '',\r\n version\r\n };\r\n },\r\n methods: {\r\n ...mapMutations('webSocketOption', ['updateCpu', 'updateRam']),\r\n contextMenuFn() {},\r\n fixedFn(num) {\r\n return Number(num).toFixed(1);\r\n }\r\n },\r\n computed: {\r\n ...mapGetters('webSocketOption', ['roundedRam', 'roundedCpu']),\r\n menus() {\r\n return [\r\n { label: `主程序版本: v${this.status.main}` },\r\n { label: `核心版本: v${this.status.core}` },\r\n { label: `加载器版本: v${this.status.loader}` }\r\n ];\r\n }\r\n },\r\n created() {\r\n getStatusAPI().then(({ data: res }) => {\r\n this.status = res;\r\n });\r\n },\r\n mounted() {\r\n this.$ws.bus.$on('wsMessage', (msg) => {\r\n if (msg.type === 'stats') {\r\n this.updateCpu(msg.data.cpu);\r\n this.updateRam(msg.data.ram);\r\n }\r\n });\r\n },\r\n beforeDestroy() {\r\n this.$ws.bus.$off('wsMessage');\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.el-footer {\r\n height: var(--k-footer-height) !important;\r\n display: flex;\r\n justify-content: space-between !important;\r\n align-items: center;\r\n font-size: 12px;\r\n background-color: #eee;\r\n z-index: 5;\r\n\r\n .detail {\r\n height: 100%;\r\n display: inline-flex;\r\n align-items: center;\r\n user-select: none;\r\n &:hover {\r\n cursor: pointer;\r\n background: #ffffff;\r\n }\r\n }\r\n\r\n .menu-item {\r\n padding: 5px 10px;\r\n cursor: pointer;\r\n &:hover {\r\n background: #f5f5f5;\r\n }\r\n }\r\n\r\n & ::v-deep .rate {\r\n display: inline-flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 160px;\r\n .el-progress {\r\n width: 80%;\r\n & ::v-deep .el-progress-bar {\r\n width: 90% !important;\r\n }\r\n }\r\n }\r\n\r\n .pps-context-menu-area {\r\n height: 100%;\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=3f40d996&scoped=true\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\nimport style0 from \"./footer.vue?vue&type=style&index=0&id=3f40d996&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f40d996\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-header',[_c('span',{staticClass:\"header-left\"},[_c('pps-button',{nativeOn:{\"click\":function($event){return _vm.onFold()}}},[_c('i',{class:_vm.arrowClass})]),_c('pps-button',{on:{\"click\":function($event){return _vm.toggleFullscreen()}}},[_c('i',{staticClass:\"el-icon-full-screen\"})])],1),_c('span',{staticClass:\"title header-center\"},[_vm._v(_vm._s(_vm.pathTitle))]),_c('span',{staticClass:\"header-right\"},[_c('pps-icon',{attrs:{\"icon\":\"pps-icon-github\"},on:{\"click\":_vm.linkGithubFn}}),_c('pps-icon',{attrs:{\"icon\":\"pps-icon-qq\"},on:{\"click\":_vm.linkQQFn}}),_c('pps-icon',{attrs:{\"icon\":\"pps-icon-help\"},on:{\"click\":_vm.linkDocsFn}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-header>\r\n <span class=\"header-left\">\r\n <pps-button @click.native=\"onFold()\">\r\n <i :class=\"arrowClass\"></i>\r\n </pps-button>\r\n <pps-button @click=\"toggleFullscreen()\">\r\n <i class=\"el-icon-full-screen\"></i>\r\n </pps-button>\r\n </span>\r\n <span class=\"title header-center\">{{ pathTitle }}</span>\r\n <span class=\"header-right\">\r\n <pps-icon icon=\"pps-icon-github\" @click=\"linkGithubFn\" />\r\n <pps-icon icon=\"pps-icon-qq\" @click=\"linkQQFn\" />\r\n <pps-icon icon=\"pps-icon-help\" @click=\"linkDocsFn\" />\r\n </span>\r\n </el-header>\r\n</template>\r\n\r\n<script>\r\nimport { userFullScreen } from '@/mixin/index';\r\nimport { mapGetters } from 'vuex';\r\nexport default {\r\n name: 'kHeader',\r\n methods: {\r\n onFold() {\r\n this.$store.commit(\r\n 'layoutOption/updateIsFoldAside',\r\n !this.$store.state.layoutOption.isFoldAside\r\n );\r\n },\r\n clearvuexFn() {\r\n localStorage.removeItem('vuex');\r\n },\r\n linkGithubFn() {\r\n window.open('https://github.com/kotorijs', '_blank');\r\n },\r\n linkQQFn() {\r\n window.open('https://qm.qq.com/q/Nb3lQPt7We', '_blank');\r\n },\r\n linkDocsFn() {\r\n window.open('https://kotori.js.org/', '_blank');\r\n }\r\n },\r\n computed: {\r\n ...mapGetters('layoutOption', ['getIsFoldAside']),\r\n pathTitle() {\r\n return this.$route.matched[1].meta.title;\r\n },\r\n isPadding() {\r\n if (this.$route.fullPath === '/console') {\r\n return true;\r\n }\r\n return false;\r\n },\r\n arrowClass() {\r\n if (this.getIsFoldAside) return 'el-icon-d-arrow-right';\r\n return 'el-icon-d-arrow-left';\r\n }\r\n },\r\n mixins: [userFullScreen]\r\n};\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.el-header {\r\n display: flex;\r\n position: relative;\r\n padding: 0;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-size: 13px;\r\n border-bottom: 2px solid #e1e2e8;\r\n background-color: var(--bg-main);\r\n height: var(--k-header-height) !important;\r\n\r\n .title {\r\n color: var(--font-gray-color);\r\n font-size: 1.17em;\r\n font-weight: 600;\r\n letter-spacing: 1px;\r\n }\r\n\r\n .header-left {\r\n flex: 1;\r\n }\r\n .header-center {\r\n position: absolute;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n .header-right {\r\n flex: 1;\r\n text-align: right;\r\n\r\n .pps-icon {\r\n float: right;\r\n cursor: pointer;\r\n &:hover {\r\n transform: scale(1.1);\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=4d4493e4\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&id=4d4493e4&prod&lang=less\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/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","<template>\r\n <el-container class=\"main-container\" v-resize-ob=\"resizeFn\">\r\n <k-aside></k-aside>\r\n <el-container class=\"kams-main-container\" direction=\"vertical\">\r\n <k-header></k-header>\r\n <el-main :class=\"{ isPadding, lessPadding: getIsNarrowScreen }\">\r\n <transition mode=\"out-in\">\r\n <keep-alive include=\"kConsole\">\r\n <router-view></router-view>\r\n </keep-alive>\r\n </transition>\r\n </el-main>\r\n <k-footer v-if=\"isFooter\"></k-footer>\r\n </el-container>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters, mapActions } from 'vuex';\r\nimport kAside from './aside.vue';\r\nimport kFooter from './footer.vue';\r\nimport kHeader from './header.vue';\r\nimport { version } from '@/../package.json';\r\nimport { getVersionAPI } from '@/api';\r\nconst uniqueRoutes = ['/console', '/sandBox'];\r\n\r\nconst compareVersions = (v1, v2) => {\r\n if (!v1 || !v2) return 0;\r\n const clean1 = String(v1).replace(/^[^\\d]+/, '');\r\n const clean2 = String(v2).replace(/^[^\\d]+/, '');\r\n const parts1 = clean1.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);\r\n const parts2 = clean2.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);\r\n const maxLen = Math.max(parts1.length, parts2.length);\r\n\r\n for (let i = 0; i < maxLen; i++) {\r\n const num1 = parts1[i] || 0;\r\n const num2 = parts2[i] || 0;\r\n if (num1 > num2) return 1;\r\n if (num1 < num2) return -1;\r\n }\r\n return 0;\r\n};\r\n\r\nexport default {\r\n name: 'myLayout',\r\n components: { kAside, kFooter, kHeader },\r\n data() {\r\n return {\r\n hasCheckedVersion: false\r\n };\r\n },\r\n methods: {\r\n ...mapActions('modulesDetail', { getModules: 'getData' }),\r\n ...mapActions('command', ['getCommands']),\r\n handleAside() {\r\n if (uniqueRoutes.includes(this.$route.fullPath) || this.isSmall) {\r\n this.$store.commit('layoutOption/updateIsFoldAside', true);\r\n } else {\r\n this.$store.commit('layoutOption/updateIsFoldAside', false);\r\n }\r\n },\r\n resizeFn(w, h) {\r\n if (Math.floor(w) <= 528) {\r\n this.$store.commit('layoutOption/updateIsNarrowScreen', true);\r\n } else {\r\n this.$store.commit('layoutOption/updateIsNarrowScreen');\r\n }\r\n },\r\n async isVersionLatest() {\r\n // 避免重复检测和重复弹窗\r\n if (this.hasCheckedVersion) return;\r\n this.hasCheckedVersion = true;\r\n\r\n try {\r\n const { data: res } = await getVersionAPI();\r\n const remoteVersion = res && res['@kotori-bot/kotori-plugin-webui'];\r\n // 仅在当前版本严格低于最新发布版本时弹窗警告;若当前版本大于或等于最新发布版本则不处理\r\n if (remoteVersion && compareVersions(version, remoteVersion) < 0) {\r\n const cleanRemote = String(remoteVersion).replace(/^[^\\d]+/, '');\r\n this.$message.warning(`当前版本(v${version})过低,最新版本为 v${cleanRemote},请及时更新 webui 插件`);\r\n }\r\n } catch (err) {\r\n console.error('获取版本信息失败', err);\r\n }\r\n }\r\n },\r\n mounted() {},\r\n created() {\r\n this.getCommands();\r\n this.getModules();\r\n this.isVersionLatest()\r\n .then(() => {\r\n this.handleAside();\r\n this.$ws.init();\r\n })\r\n .catch(() => {});\r\n },\r\n beforeDestroy() {\r\n console.log('layout beforeDestroy');\r\n if (this.$ws.instance) {\r\n this.$ws.close();\r\n }\r\n },\r\n updated() {\r\n this.handleAside();\r\n },\r\n computed: {\r\n ...mapGetters('layoutOption', ['getIsFoldAside', 'getIsNarrowScreen']),\r\n isPadding() {\r\n if (uniqueRoutes.includes(this.$route.fullPath)) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n isFooter() {\r\n if (uniqueRoutes[0].includes(this.$route.fullPath)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.isPadding {\r\n // padding-left: 0 !important;\r\n // padding-right: 0 !important\r\n padding: 0 !important;\r\n}\r\n.lessPadding {\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n}\r\n.main-container {\r\n height: 100%;\r\n max-width: 100vw;\r\n\r\n .kams-main-container {\r\n flex-basis: 0;\r\n flex: 1;\r\n }\r\n\r\n .el-main {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n overflow-x: hidden;\r\n height: var(--k-main-height);\r\n background-color: var(--normal-color);\r\n &::-webkit-scrollbar {\r\n width: 5px; // 设置滚动条的宽度\r\n height: 5px;\r\n }\r\n &::-webkit-scrollbar-track {\r\n background: transparent;\r\n width: 5px;\r\n }\r\n &::-webkit-scrollbar-thumb {\r\n position: absolute;\r\n right: -5px;\r\n width: 5px;\r\n background: #88888870;\r\n border-radius: 6px;\r\n }\r\n &::-webkit-scrollbar-thumb:hover {\r\n background: #888888; // 鼠标悬停时滚动条的颜色\r\n }\r\n }\r\n}\r\n.v-enter {\r\n opacity: 0;\r\n transform: translateX(-30px);\r\n}\r\n.v-leave-to {\r\n opacity: 0;\r\n transform: translateX(30px);\r\n}\r\n.v-enter-active,\r\n.v-leave-active {\r\n transition: all 0.5s;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=ec94ce06&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=ec94ce06&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec94ce06\",\n null\n \n)\n\nexport default component.exports","export const userFullScreen = {\r\n methods: {\r\n toggleFullscreen() {\r\n this.isFullscreen() ? this.exit() : this.enter(document.documentElement);\r\n },\r\n isFullscreen() {\r\n return (\r\n !!document.fullscreenElement ||\r\n !!document.webkitFullscreenElement ||\r\n !!document.mozFullScreenElement ||\r\n !!document.msFullscreenElement ||\r\n null\r\n );\r\n },\r\n enter(element) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n // Safari\r\n element.webkitRequestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n // Firefox\r\n element.mozRequestFullScreen();\r\n } else if (element.msRequestFullscreen) {\r\n // IE/Edge\r\n element.msRequestFullscreen();\r\n }\r\n },\r\n exit() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document.webkitExitFullscreen) {\r\n // Safari\r\n document.webkitExitFullscreen();\r\n } else if (document.mozCancelFullScreen) {\r\n // Firefox\r\n document.mozCancelFullScreen();\r\n } else if (document.msExitFullscreen) {\r\n // IE/Edge\r\n document.msExitFullscreen();\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const tranRoleMixin = {\r\n props: {\r\n chatTarget: {\r\n type: Object,\r\n default() {\r\n return null;\r\n }\r\n },\r\n memberList: {\r\n type: Array,\r\n default() {\r\n return [];\r\n }\r\n }\r\n },\r\n methods: {\r\n tranRoleFn(role) {\r\n const roleMap = {\r\n lord: '群主',\r\n admin: '管理员',\r\n 'super-admin': 'bot',\r\n expellee: '已退群'\r\n };\r\n return roleMap[role] || '';\r\n },\r\n avatarContextMenuFn(menu) {\r\n const { uid, task, key } = menu;\r\n if (task) {\r\n const user = this.admin.getUserById(uid);\r\n this.$emit('handleMenuAction', {\r\n targetUser: user,\r\n actionType: key,\r\n groupId: this.chatTarget.id\r\n });\r\n }\r\n }\r\n }\r\n};\r\n\r\n// const permissionList = {}\r\n"],"names":["render","_vm","this","_c","_self","ref","staticClass","_t","staticRenderFns","name","component","style","flexDirection","mode","data","activeIndex","defaultActive","provide","root","props","activeColor","type","String","activeShape","Array","default","backgroundColor","textColor","router","Boolean","methods","changeRouteFn","path","$router","push","computed","rootMenu","watch","val","beforeCreate","$bus","Vue","mounted","$on","beforeDestroy","$off","attrs","tips","title","class","className","active","direction","itemStyle","height","minHeight","justifyContent","align","on","onmouseenterFn","onMouseLeaveFn","handleClickFn","includes","directives","rawName","value","expression","background","_e","circleStyle","inject","$el","handleTooltipFn","$emit","index","isShow","$refs","tooltip","showPopper","activeArr","split","indexArr","color","borderLeftColor","border","filter","beforeMount","icon","width","resizeFn","isPadding","lessPadding","getIsNarrowScreen","isFooter","$store","state","layoutOption","isFoldAside","require","$route","_l","menus","menuItem","key","indexPath","content","quitFn","slot","components","kMenuItem","kMenu","kAside","visible","isShowDialog","dialogData","message","mapMutations","cancelFn","$dialog","then","logoutAPI","updateToken","catch","_v","_s","version","label","rate","roundedRam","roundedCpu","scopedSlots","_u","fn","menu","item","Number","fixedFn","status","contextMenuFn","num","toFixed","mapGetters","main","core","loader","created","getStatusAPI","res","$ws","bus","msg","updateCpu","cpu","updateRam","ram","nativeOn","$event","onFold","arrowClass","toggleFullscreen","pathTitle","linkGithubFn","linkQQFn","linkDocsFn","commit","clearvuexFn","localStorage","removeItem","window","open","matched","meta","fullPath","getIsFoldAside","mixins","userFullScreen","uniqueRoutes","compareVersions","v1","v2","clean1","replace","clean2","parts1","map","n","parseInt","parts2","maxLen","Math","max","length","i","num1","num2","kFooter","kHeader","hasCheckedVersion","mapActions","getModules","handleAside","isSmall","w","h","floor","isVersionLatest","getVersionAPI","remoteVersion","cleanRemote","$message","warning","err","console","error","getCommands","init","log","instance","close","updated","isFullscreen","exit","enter","document","documentElement","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","element","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","tranRoleMixin","chatTarget","Object","memberList","tranRoleFn","role","roleMap","lord","admin","expellee","avatarContextMenuFn","uid","task","user","getUserById","targetUser","actionType","groupId","id"],"sourceRoot":""}