- 新增 backend/app/modules/compute_gateway(client/sync)计算网关模块 - 新增 backend/app/workers/compute_poller 计算轮询 worker - 新增 compute/agent/process_manager 进程管理器 - 新增 scripts/ 脚本目录 - 更新 Docker 部署配置(app/compute/nginx) - 更新后端平台 API、数据库 SQL、core 配置 - 更新前端多个视图组件及 API 模块 - 重构 frontend/dist 构建产物(新 hash) - 更新多项文档 Co-Authored-By: Claude <noreply@anthropic.com>
2 lines
22 KiB
JavaScript
2 lines
22 KiB
JavaScript
import{j as b,a as j,d as V,B as de,C as pe,z as Se,D as X,F as Ie,G as te,H as ze,I as E,J as K,E as De,K as Re,L as Ye,M as Y,N as xe,y as S,O as Pe,P as Ce,Q as Ze,b as Ee,i as Q,R as ee,S as Qe,T as Xe,U as We,V as je,W as B,X as ue,o as w,e as ne,w as $,h as F,Y as et,Z as tt,_ as re,$ as nt,a0 as ge,a1 as st,a2 as at,a3 as ot,a4 as lt,a5 as it,a6 as Ue,a7 as rt,a8 as Be,c as L,f as g,q as o,n as W,a9 as ut,x as ce,aa as z,l as ct,ab as we,ac as Te,v as Ve,m as dt,s as D,ad as Le,g as ke,ae as pt,af as mt,ag as ft,ah as Fe,ai as vt,r as ht}from"./index-Ds9AETjS.js";import{E as fe}from"./el-popper-D1tByNLb.js";import{E as bt}from"./el-scrollbar-CF42LNzg.js";import{E as gt}from"./el-avatar-CNBfYcqk.js";import{E as _t}from"./index-Tr1QMyk2.js";import{T as yt,E as Mt}from"./index-BNsCyG4A.js";import{f as It}from"./vnode-CBiWHFw7.js";import{C as kt}from"./index-CQlF36Lk.js";import"./el-tooltip-l0sNRNKZ.js";import{_ as St}from"./logo-CxXS7KxG.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{u as xt}from"./models-a1fp9IUS.js";import"./index-BSbCLbaz.js";import"./index-sWKLi7bH.js";import"./model-cWd9CDtT.js";const Oe="rootMenu",me="subMenu:";function qe(e,n){const l=b(()=>{let t=e.parent;const c=[n.value];for(;t.type.name!=="ElMenu";)t.props.index&&c.unshift(t.props.index),t=t.parent;return c});return{parentMenu:b(()=>{let t=e.parent;for(;t&&!["ElMenu","ElSubMenu"].includes(t.type.name);)t=t.parent;return t}),indexPath:l}}function Ct(e){return b(()=>{const n=e.backgroundColor;return n?new yt(n).shade(20).toString():""})}const Ge=(e,n)=>{const l=j("menu");return b(()=>l.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":Ct(e).value||"","active-color":e.activeTextColor||"",level:`${n}`}))},Et=Ee({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,popperStyle:{type:ee([String,Object])},disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:Q},expandOpenIcon:{type:Q},collapseCloseIcon:{type:Q},collapseOpenIcon:{type:Q}}),_e="ElSubMenu";var $e=V({name:_e,props:Et,setup(e,{slots:n,expose:l}){const t=xe(),{indexPath:c,parentMenu:T}=qe(t,b(()=>e.index)),u=j("menu"),y=j("sub-menu"),i=de(Oe);i||pe(_e,"can not inject root menu");const v=de(`${me}${T.value.uid}`);v||pe(_e,"can not inject sub menu");const M=S({}),h=S({});let p;const m=S(!1),s=S(),k=S(),N=b(()=>v.level===0),P=b(()=>U.value==="horizontal"&&N.value?"bottom-start":"right-start"),O=b(()=>U.value==="horizontal"&&N.value||U.value==="vertical"&&!i.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?R.value?e.expandOpenIcon:e.expandCloseIcon:Qe:e.collapseCloseIcon&&e.collapseOpenIcon?R.value?e.collapseOpenIcon:e.collapseCloseIcon:Xe),q=b(()=>{const d=e.teleported;return We(d)?N.value:d}),se=b(()=>i.props.collapse?`${u.namespace.value}-zoom-in-left`:`${u.namespace.value}-zoom-in-top`),ve=b(()=>U.value==="horizontal"&&N.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),R=b(()=>i.openedMenus.includes(e.index)),G=b(()=>[...Object.values(M.value),...Object.values(h.value)].some(({active:d})=>d)),U=b(()=>i.props.mode),ae=b(()=>i.props.persistent),H=Se({index:e.index,indexPath:c,active:G}),oe=Ge(i.props,v.level+1),le=b(()=>e.popperOffset??i.props.popperOffset),Z=b(()=>e.popperClass??i.props.popperClass),J=b(()=>e.popperStyle??i.props.popperStyle),ie=b(()=>e.showTimeout??i.props.showTimeout),he=b(()=>e.hideTimeout??i.props.hideTimeout),a=()=>{var d,C,_;return(_=(C=(d=k.value)==null?void 0:d.popperRef)==null?void 0:C.popperInstanceRef)==null?void 0:_.destroy()},r=d=>{d||a()},f=()=>{i.props.menuTrigger==="hover"&&i.props.mode==="horizontal"||i.props.collapse&&i.props.mode==="vertical"||e.disabled||i.handleSubMenuClick({index:e.index,indexPath:c.value,active:G.value})},x=(d,C=ie.value)=>{var _;if(d.type!=="focus"){if(i.props.menuTrigger==="click"&&i.props.mode==="horizontal"||!i.props.collapse&&i.props.mode==="vertical"||e.disabled){v.mouseInChild.value=!0;return}v.mouseInChild.value=!0,p==null||p(),{stop:p}=Pe(()=>{i.openMenu(e.index,c.value)},C),q.value&&((_=T.value.vnode.el)==null||_.dispatchEvent(new MouseEvent("mouseenter"))),d.type==="mouseenter"&&d.target&&Ce(()=>{Ze(d.target,{preventScroll:!0})})}},I=(d=!1)=>{var C;if(i.props.menuTrigger==="click"&&i.props.mode==="horizontal"||!i.props.collapse&&i.props.mode==="vertical"){v.mouseInChild.value=!1;return}p==null||p(),v.mouseInChild.value=!1,{stop:p}=Pe(()=>!m.value&&i.closeMenu(e.index,c.value),he.value),q.value&&d&&((C=v.handleMouseleave)==null||C.call(v,!0))};X(()=>i.props.collapse,d=>r(!!d));{const d=_=>{h.value[_.index]=_},C=_=>{delete h.value[_.index]};Ie(`${me}${t.uid}`,{addSubMenu:d,removeSubMenu:C,handleMouseleave:I,mouseInChild:m,level:v.level+1})}return l({opened:R}),te(()=>{i.addSubMenu(H),v.addSubMenu(H)}),ze(()=>{v.removeSubMenu(H),i.removeSubMenu(H)}),()=>{var _;const d=[(_=n.title)==null?void 0:_.call(n),E(De,{class:y.e("icon-arrow"),style:{transform:R.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&i.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>K(O.value)?E(t.appContext.components[O.value]):E(O.value)})],C=i.isMenuPopup?E(fe,{ref:k,visible:R.value,effect:"light",pure:!0,offset:le.value,showArrow:!1,persistent:ae.value,popperClass:Z.value,popperStyle:J.value,placement:P.value,teleported:q.value,fallbackPlacements:ve.value,transition:se.value,gpuAcceleration:!1},{content:()=>{var A;return E("div",{class:[u.m(U.value),u.m("popup-container"),Z.value],onMouseenter:be=>x(be,100),onMouseleave:()=>I(!0),onFocus:be=>x(be,100)},[E("ul",{class:[u.b(),u.m("popup"),u.m(`popup-${P.value}`)],style:oe.value},[(A=n.default)==null?void 0:A.call(n)])])},default:()=>E("div",{class:y.e("title"),onClick:f},d)}):E(Y,{},[E("div",{class:y.e("title"),ref:s,onClick:f},d),E(_t,{},{default:()=>{var A;return Re(E("ul",{role:"menu",class:[u.b(),u.m("inline")],style:oe.value},[(A=n.default)==null?void 0:A.call(n)]),[[Ye,R.value]])}})]);return E("li",{class:[y.b(),y.is("active",G.value),y.is("opened",R.value),y.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:R.value,onMouseenter:x,onMouseleave:()=>I(),onFocus:x},[C])}}}),wt=class{constructor(e,n){this.parent=e,this.domNode=n,this.subIndex=0,this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(e){e===this.subMenuItems.length?e=0:e<0&&(e=this.subMenuItems.length-1),this.subMenuItems[e].focus(),this.subIndex=e}addListeners(){const e=this.parent.domNode;this.subMenuItems.forEach(n=>{n.addEventListener("keydown",l=>{const t=je(l);let c=!1;switch(t){case B.down:this.gotoSubIndex(this.subIndex+1),c=!0;break;case B.up:this.gotoSubIndex(this.subIndex-1),c=!0;break;case B.tab:ue(e,"mouseleave");break;case B.enter:case B.numpadEnter:case B.space:c=!0,l.currentTarget.click();break}return c&&(l.preventDefault(),l.stopPropagation()),!1})})}},Tt=class{constructor(e,n){this.domNode=e,this.submenu=null,this.init(n)}init(e){this.domNode.setAttribute("tabindex","0");const n=this.domNode.querySelector(`.${e}-menu`);n&&(this.submenu=new wt(this,n)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",e=>{var t,c;const n=je(e);let l=!1;switch(n){case B.down:ue(e.currentTarget,"mouseenter"),(t=this.submenu)==null||t.gotoSubIndex(0),l=!0;break;case B.up:ue(e.currentTarget,"mouseenter"),(c=this.submenu)==null||c.gotoSubIndex(this.submenu.subMenuItems.length-1),l=!0;break;case B.tab:ue(e.currentTarget,"mouseleave");break;case B.enter:case B.numpadEnter:case B.space:l=!0,e.currentTarget.click();break}l&&e.preventDefault()})}},Nt=class{constructor(e,n){this.domNode=e,this.init(n)}init(e){const n=this.domNode.childNodes;Array.from(n).forEach(l=>{l.nodeType===1&&new Tt(l,e)})}},Ot=V({name:"ElMenuCollapseTransition",__name:"menu-collapse-transition",setup(e){const n=j("menu"),l={onBeforeEnter:t=>t.style.opacity="0.2",onEnter(t,c){re(t,`${n.namespace.value}-opacity-transition`),t.style.opacity="1",c()},onAfterEnter(t){ge(t,`${n.namespace.value}-opacity-transition`),t.style.opacity=""},onBeforeLeave(t){t.dataset||(t.dataset={}),nt(t,n.m("collapse"))?(ge(t,n.m("collapse")),t.dataset.oldOverflow=t.style.overflow,t.dataset.scrollWidth=t.clientWidth.toString(),re(t,n.m("collapse"))):(re(t,n.m("collapse")),t.dataset.oldOverflow=t.style.overflow,t.dataset.scrollWidth=t.clientWidth.toString(),ge(t,n.m("collapse"))),t.style.width=`${t.scrollWidth}px`,t.style.overflow="hidden"},onLeave(t){re(t,"horizontal-collapse-transition"),t.style.width=`${t.dataset.scrollWidth}px`}};return(t,c)=>(w(),ne(tt,et({mode:"out-in"},l),{default:$(()=>[F(t.$slots,"default")]),_:3},16))}}),$t=Ot;const Pt=Ee({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:ee(Array),default:()=>it([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:Q,default:()=>lt},popperEffect:{type:ee(String),default:"dark"},popperClass:String,popperStyle:{type:ee([String,Object])},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),ye=e=>Ue(e)&&e.every(n=>K(n)),Bt={close:(e,n)=>K(e)&&ye(n),open:(e,n)=>K(e)&&ye(n),select:(e,n,l,t)=>K(e)&&ye(n)&&ot(l)&&(We(t)||t instanceof Promise)},Ae=64;var Lt=V({name:"ElMenu",props:Pt,emits:Bt,setup(e,{emit:n,slots:l,expose:t}){const c=xe(),T=c.appContext.config.globalProperties.$router,u=S(),y=S(),i=j("menu"),v=j("sub-menu");let M=Ae;const h=S(-1),p=S(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),m=S(e.defaultActive),s=S({}),k=S({}),N=b(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),P=()=>{const a=m.value&&s.value[m.value];!a||e.mode==="horizontal"||e.collapse||a.indexPath.forEach(r=>{const f=k.value[r];f&&O(r,f.indexPath)})},O=(a,r)=>{p.value.includes(a)||(e.uniqueOpened&&(p.value=p.value.filter(f=>r.includes(f))),p.value.push(a),n("open",a,r))},q=a=>{const r=p.value.indexOf(a);r!==-1&&p.value.splice(r,1)},se=(a,r)=>{q(a),n("close",a,r)},ve=({index:a,indexPath:r})=>{p.value.includes(a)?se(a,r):O(a,r)},R=a=>{(e.mode==="horizontal"||e.collapse)&&(p.value=[]);const{index:r,indexPath:f}=a;if(!(Be(r)||Be(f)))if(e.router&&T){const x=a.route||r,I=T.push(x).then(d=>(d||(m.value=r),d));n("select",r,f,{index:r,indexPath:f,route:x},I)}else m.value=r,n("select",r,f,{index:r,indexPath:f})},G=a=>{var f;const r=s.value;m.value=((f=r[a]||m.value&&r[m.value]||r[e.defaultActive])==null?void 0:f.index)??a},U=a=>{const r=getComputedStyle(a),f=Number.parseInt(r.marginLeft,10),x=Number.parseInt(r.marginRight,10);return a.offsetWidth+f+x||0},ae=()=>{if(!u.value)return-1;const a=Array.from(u.value.childNodes).filter(_=>_.nodeName!=="#comment"&&(_.nodeName!=="#text"||_.nodeValue)),r=getComputedStyle(u.value),f=Number.parseInt(r.paddingLeft,10),x=Number.parseInt(r.paddingRight,10),I=u.value.clientWidth-f-x;let d=0,C=0;return a.forEach((_,A)=>{d+=U(_),d<=I-M&&(C=A+1)}),C===a.length?-1:C},H=a=>k.value[a].indexPath,oe=(a,r=33.34)=>{let f;return()=>{f&&clearTimeout(f),f=setTimeout(()=>{a()},r)}};let le=!0;const Z=()=>{const a=at(y);if(a&&(M=U(a)||Ae),h.value===ae())return;const r=()=>{h.value=-1,Ce(()=>{h.value=ae()})};le?r():oe(r)(),le=!1};X(()=>e.defaultActive,a=>{s.value[a]||(m.value=""),G(a)}),X(()=>e.collapse,a=>{a&&(p.value=[])}),X(s.value,P);let J;st(()=>{e.mode==="horizontal"&&e.ellipsis?J=rt(u,Z).stop:J==null||J()});const ie=S(!1);{const a=I=>{k.value[I.index]=I},r=I=>{delete k.value[I.index]};Ie(Oe,Se({props:e,openedMenus:p,items:s,subMenus:k,activeIndex:m,isMenuPopup:N,addMenuItem:I=>{s.value[I.index]=I},removeMenuItem:I=>{delete s.value[I.index]},addSubMenu:a,removeSubMenu:r,openMenu:O,closeMenu:se,handleMenuItemClick:R,handleSubMenuClick:ve})),Ie(`${me}${c.uid}`,{addSubMenu:a,removeSubMenu:r,mouseInChild:ie,level:0})}te(()=>{e.mode==="horizontal"&&new Nt(c.vnode.el,i.namespace.value)}),t({open:r=>{const{indexPath:f}=k.value[r];f.forEach(x=>O(x,f))},close:q,updateActiveIndex:G,handleResize:Z});const he=Ge(e,0);return()=>{var I;let a=((I=l.default)==null?void 0:I.call(l))??[];const r=[];if(e.mode==="horizontal"&&u.value){const d=It(a).filter(A=>(A==null?void 0:A.shapeFlag)!==8),C=h.value===-1?d:d.slice(0,h.value),_=h.value===-1?[]:d.slice(h.value);_!=null&&_.length&&e.ellipsis&&(a=C,r.push(E($e,{ref:y,index:"sub-menu-more",class:v.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>E(De,{class:v.e("icon-more")},{default:()=>E(e.ellipsisIcon)}),default:()=>_})))}const f=e.closeOnClickOutside?[[kt,()=>{p.value.length&&(ie.value||(p.value.forEach(d=>n("close",d,H(d))),p.value=[]))}]]:[],x=Re(E("ul",{key:String(e.collapse),role:"menubar",ref:u,style:he.value,class:{[i.b()]:!0,[i.m(e.mode)]:!0,[i.m("collapse")]:e.collapse}},[...a,...r]),f);return e.collapseTransition&&e.mode==="vertical"?E($t,()=>x):x}}});const At=Ee({index:{type:String,required:!0},route:{type:ee([String,Object])},disabled:Boolean}),zt={click:e=>K(e.index)&&Ue(e.indexPath)},Dt={title:String},Me="ElMenuItem";var Rt=V({name:Me,__name:"menu-item",props:At,emits:zt,setup(e,{expose:n,emit:l}){const t=e,c=l,T=xe(),u=de(Oe),y=j("menu"),i=j("menu-item");u||pe(Me,"can not inject root menu");const{parentMenu:v,indexPath:M}=qe(T,ut(t,"index")),h=de(`${me}${v.value.uid}`);h||pe(Me,"can not inject sub menu");const p=b(()=>t.index===u.activeIndex),m=Se({index:t.index,indexPath:M,active:p}),s=()=>{t.disabled||(u.handleMenuItemClick({index:t.index,indexPath:M.value,route:t.route}),c("click",m))};return te(()=>{h.addSubMenu(m),u.addMenuItem(m)}),ze(()=>{h.removeSubMenu(m),u.removeMenuItem(m)}),n({parentMenu:v,rootMenu:u,active:p,nsMenu:y,nsMenuItem:i,handleClick:s}),(k,N)=>(w(),L("li",{class:W([g(i).b(),g(i).is("active",p.value),g(i).is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:s},[g(v).type.name==="ElMenu"&&g(u).props.collapse&&k.$slots.title?(w(),ne(g(fe),{key:0,effect:g(u).props.popperEffect,placement:"right","fallback-placements":["left"],"popper-class":g(u).props.popperClass,"popper-style":g(u).props.popperStyle,persistent:g(u).props.persistent,"focus-on-target":""},{content:$(()=>[F(k.$slots,"title")]),default:$(()=>[o("div",{class:W(g(y).be("tooltip","trigger"))},[F(k.$slots,"default")],2)]),_:3},8,["effect","popper-class","popper-style","persistent"])):(w(),L(Y,{key:1},[F(k.$slots,"default"),F(k.$slots,"title")],64))],2))}}),He=Rt,Wt=V({name:"ElMenuItemGroup",__name:"menu-item-group",props:Dt,setup(e){const n=j("menu-item-group");return(l,t)=>(w(),L("li",{class:W(g(n).b())},[o("div",{class:W(g(n).e("title"))},[l.$slots.title?F(l.$slots,"title",{key:1}):(w(),L(Y,{key:0},[ce(z(e.title),1)],64))],2),o("ul",null,[F(l.$slots,"default")])],2))}}),Je=Wt;const jt=ct(Lt,{MenuItem:He,MenuItemGroup:Je,SubMenu:$e}),Ut=we(He);we(Je);we($e);const Vt={class:"app-sidebar"},Ft={key:0,class:"sidebar-section-title"},qt={class:"sidebar-footer"},Gt={key:0,class:"footer-user"},Ht={class:"user-info"},Jt={class:"user-name"},Kt={class:"user-role"},Yt=V({__name:"AppSidebar",setup(e){const n=Te(),l=Ve(),t=dt(),c=b(()=>{const M=n.path.split("/")[1]||"dashboard";return M==="training-log"?"fine-tune":n.path.includes("model-eval/dimension")?"model-eval":n.path.startsWith("/model-compare/chat")?"model-inference":n.path==="/model-manage/merge"||n.path.match(/^\/model-manage\/\d+\/edit/)?"model-manage":n.path.match(/^\/dataset\/(\d+)/)?"dataset":n.path.match(/^\/tools\/[^/]+\/edit/)?"tools":M}),T=[{showTitle:!1,items:[{key:"dashboard",label:"服务看板",icon:"fa-tachometer",to:"/dashboard",permission:"dashboard"}]},{title:"模型服务",items:[{key:"fine-tune",label:"模型训练",icon:"fa-cogs",to:"/fine-tune",permission:"fine-tune"},{key:"model-eval",label:"模型评测",icon:"fa-line-chart",to:"/model-eval",permission:"model-eval"},{key:"model-inference",label:"模型推理",icon:"fa-server",to:"/model-inference",permission:"model-inference"},{key:"model-manage",label:"模型管理",icon:"fa-cube",to:"/model-manage",permission:"model-manage"}]},{title:"数据治理",items:[{key:"dataset",label:"数据集管理",icon:"fa-file-text",to:"/dataset",permission:"dataset"},{key:"data-process",label:"数据处理",icon:"fa-filter",to:"/data-process",permission:"data-process"}]},{title:"其他工具",items:[{key:"data-convert",label:"数据类型转换",icon:"fa-exchange",to:"/data-convert",permission:"data-convert"}]},{title:"算力资源",items:[{key:"compute",label:"算力节点",icon:"fa-microchip",to:"/compute",permission:"compute"}]},{title:"系统设置",items:[{key:"user-settings",label:"用户设置",icon:"fa-users",to:"/user-settings",permission:"user-settings"},{key:"hardware",label:"平台性能",icon:"fa-bar-chart",to:"/hardware",permission:"hardware"},{key:"logs",label:"查看日志",icon:"fa-file-text",to:"/logs",permission:"logs"}]}],u=b(()=>T.map(M=>({...M,items:M.items.filter(h=>t.hasPermission(h.permission))})).filter(M=>M.items.length>0)),y=S(c.value);X(c,M=>{y.value=M});async function i(M){const p=u.value.flatMap(s=>s.items).find(s=>s.key===M);if(!p)return;await l.push(p.to)&&(y.value="",await Ce(),y.value=c.value)}function v(){t.logout(),l.push("/login")}return(M,h)=>{const p=Ut,m=jt,s=bt,k=gt,N=fe;return w(),L("aside",Vt,[h[1]||(h[1]=o("div",{class:"sidebar-logo"},[o("img",{src:St,alt:"Logo",class:"sidebar-logo-img"}),o("span",{class:"logo-text"},"远光软件微调平台")],-1)),D(s,{class:"sidebar-nav","wrap-class":"nav-scrollbar-wrap"},{default:$(()=>[D(m,{"default-active":y.value,class:"sidebar-menu","background-color":"transparent","text-color":"var(--sidebar-text)","active-text-color":"var(--sidebar-active-text)",onSelect:i},{default:$(()=>[(w(!0),L(Y,null,Le(u.value,P=>(w(),L(Y,{key:P.title||P.items[0].key},[P.title?(w(),L("div",Ft,z(P.title),1)):ke("",!0),(w(!0),L(Y,null,Le(P.items,O=>(w(),ne(p,{key:O.key,index:O.key},{default:$(()=>[o("i",{class:W(["fa",O.icon])},null,2),o("span",null,z(O.label),1)]),_:2},1032,["index"]))),128))],64))),128))]),_:1},8,["default-active"])]),_:1}),o("div",qt,[g(t).username?(w(),L("div",Gt,[D(k,{size:36,src:"https://picsum.photos/id/1005/36/36",class:"user-avatar"}),o("div",Ht,[o("span",Jt,z(g(t).displayName),1),o("span",Kt,z(g(t).roleLabel),1)]),D(N,{content:"退出登录",placement:"top"},{default:$(()=>[o("div",{class:"logout-btn",onClick:v},[...h[0]||(h[0]=[o("i",{class:"fa fa-sign-out"},null,-1)])])]),_:1})])):ke("",!0)])])}}}),Zt=Ne(Yt,[["__scopeId","data-v-79462f28"]]),Ke=pt("system",()=>{const e=S({});let n=null,l=!1;async function t(){if(!(l||document.hidden)){l=!0;try{e.value=await mt()}catch{}finally{l=!1}}}function c(){document.hidden||t()}function T(){n||(t(),n=setInterval(t,3e4),document.addEventListener("visibilitychange",c))}function u(){n&&(clearInterval(n),n=null),document.removeEventListener("visibilitychange",c)}return{metrics:e,fetchMetrics:t,start:T,stop:u}}),Qt={class:"app-header"},Xt={class:"header-left"},en={class:"header-right"},tn={class:"metric-badge"},nn={class:"metric-badge"},sn={class:"metric-badge"},an={class:"system-info"},on={class:"info-item"},ln={class:"info-item"},rn={class:"info-item time-item"},un=V({__name:"AppHeader",setup(e){const n=Ke(),{metrics:l}=ft(n),t=Te(),c=Ve(),T=b(()=>t.path.split("/").filter(Boolean).length>1);function u(m){return m!=null&&m>80?"is-danger":""}const y=S(""),i=S("");let v=null;function M(){const m=new Date;y.value=m.toLocaleTimeString("zh-CN",{hour12:!1}),i.value=m.toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}).replace(/\//g,"-")}function h(){const m=c.resolve({name:"guide"}).href;window.open(m,"_blank","noopener,noreferrer")}const p=S(window.location.hostname);return te(()=>{M(),v=setInterval(M,1e3)}),Fe(()=>{v&&clearInterval(v)}),(m,s)=>{const k=Mt,N=fe;return w(),L("header",Qt,[o("div",Xt,[T.value?(w(),ne(k,{key:0,class:"back-btn",link:"",onClick:s[0]||(s[0]=P=>g(c).back())},{default:$(()=>[...s[2]||(s[2]=[o("div",{class:"back-icon-wrap"},[o("i",{class:"fa fa-arrow-left"})],-1),o("span",{class:"back-text"},"返回上一页",-1)])]),_:1})):ke("",!0)]),o("div",en,[o("div",{class:"metrics-dashboard",onClick:s[1]||(s[1]=P=>g(c).push("/hardware"))},[D(N,{content:"CPU 使用率",placement:"bottom"},{default:$(()=>[o("div",tn,[s[4]||(s[4]=o("i",{class:"fa fa-microchip icon cpu"},null,-1)),o("span",{class:W(["value",u(g(l).cpu_percent)])},[ce(z(g(l).cpu_percent??"--"),1),s[3]||(s[3]=o("small",null,"%",-1))],2)])]),_:1}),D(N,{content:"内存 使用率",placement:"bottom"},{default:$(()=>[o("div",nn,[s[6]||(s[6]=o("i",{class:"fa fa-database icon mem"},null,-1)),o("span",{class:W(["value",u(g(l).memory_percent)])},[ce(z(g(l).memory_percent??"--"),1),s[5]||(s[5]=o("small",null,"%",-1))],2)])]),_:1}),D(N,{content:"磁盘 使用率",placement:"bottom"},{default:$(()=>[o("div",sn,[s[8]||(s[8]=o("i",{class:"fa fa-hdd-o icon disk"},null,-1)),o("span",{class:W(["value",u(g(l).disk_percent)])},[ce(z(g(l).disk_percent??"--"),1),s[7]||(s[7]=o("small",null,"%",-1))],2)])]),_:1})]),s[13]||(s[13]=o("div",{class:"divider"},null,-1)),o("div",an,[o("div",on,[s[9]||(s[9]=o("i",{class:"fa fa-server"},null,-1)),o("span",null,z(p.value),1)]),o("div",ln,[s[10]||(s[10]=o("i",{class:"fa fa-calendar"},null,-1)),o("span",null,z(i.value),1)]),o("div",rn,[s[11]||(s[11]=o("i",{class:"fa fa-clock-o"},null,-1)),o("span",null,z(y.value),1)])]),s[14]||(s[14]=o("div",{class:"divider document-divider"},null,-1)),D(N,{content:"使用文档",placement:"bottom"},{default:$(()=>[o("button",{type:"button",class:"documentation-btn","aria-label":"打开使用文档",onClick:h},[...s[12]||(s[12]=[o("i",{class:"fa fa-book","aria-hidden":"true"},null,-1)])])]),_:1})])])}}}),cn=Ne(un,[["__scopeId","data-v-f7c0063e"]]),dn={class:"main-layout"},pn={class:"layout-main"},mn={class:"layout-content"},fn=V({__name:"MainLayout",setup(e){const n=Ke(),l=xt(),t=Te();return te(()=>{n.start(),l.load()}),Fe(()=>{n.stop()}),(c,T)=>{const u=vt("router-view");return w(),L("div",dn,[D(Zt),o("div",pn,[D(cn),o("main",mn,[o("div",{class:W(["page-canvas",{"is-self-surface":g(t).meta.pageSurface==="self"}])},[D(u,null,{default:$(({Component:y})=>[(w(),ne(ht(y)))]),_:1})],2)])])])}}}),Nn=Ne(fn,[["__scopeId","data-v-250aaaa6"]]);export{Nn as default};
|