diff --git a/MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js b/MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js new file mode 100644 index 0000000..d03dd2b --- /dev/null +++ b/MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js @@ -0,0 +1 @@ +import{aG as S,bt as N,aA as f,bH as a,t as z,b7 as p,aF as e,N as A,bK as B,O,R as T,a3 as F,aC as M,ah as U,bh as D,Z as G,r as H,br as b,aE as d,H as I,a9 as L,aa as K,ac as R,bo as X,az as c,be as Z,bf as $,X as g}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const j={style:{display:"flex","align-items":"center",gap:"8px"}},pe=S({__name:"AnnotationView",setup(q){const s=N(),l=Z({title:"",target:"",level:"info",content:""}),m=$([{id:"N001",ts:"2026-05-19 10:25",author:"ops",target:"C05",level:"warn",title:"AGV-005 故障观察",content:"出库点附近频繁停顿,怀疑激光被遮挡"}]);function w(r){return r==="error"?"danger":r==="warn"?"warning":"info"}function v(){if(!l.title){g.warning("请填写标题");return}const r=`N${String(m.value.length+1).padStart(3,"0")}`;m.value.unshift({id:r,ts:new Date().toLocaleString("zh-CN"),author:s.user?.username??"mock",target:l.target,level:l.level,title:l.title,content:l.content}),g.success("已记录(Mock,未写入数据库)"),l.title="",l.content="",l.target=""}return(r,t)=>{const u=R,_=T,i=O,V=G,y=F,E=H,h=A,x=I,n=K,k=L,C=z;return p(),f(C,{shadow:"never"},{header:a(()=>[c("div",j,[t[7]||(t[7]=c("span",null,"运营备注(monitor.note.write · 写 platform.db.Annotations)",-1)),b(s).hasOp("monitor.note.write")?(p(),f(u,{key:0,size:"small",type:"success"},{default:a(()=>[...t[5]||(t[5]=[d("可写",-1)])]),_:1})):(p(),f(u,{key:1,size:"small",type:"danger"},{default:a(()=>[...t[6]||(t[6]=[d("只读",-1)])]),_:1}))])]),default:a(()=>[e(h,{inline:"",onSubmit:t[3]||(t[3]=B(()=>{},["prevent"]))},{default:a(()=>[e(i,{label:"标题"},{default:a(()=>[e(_,{modelValue:l.title,"onUpdate:modelValue":t[0]||(t[0]=o=>l.title=o),style:{width:"240px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"关联目标"},{default:a(()=>[e(_,{modelValue:l.target,"onUpdate:modelValue":t[1]||(t[1]=o=>l.target=o),placeholder:"例如 C01 / M02 / S006",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"层级"},{default:a(()=>[e(y,{modelValue:l.level,"onUpdate:modelValue":t[2]||(t[2]=o=>l.level=o),style:{width:"120px"}},{default:a(()=>[(p(),M(U,null,D(["info","warn","error"],o=>e(V,{key:o,label:o,value:o},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),e(i,null,{default:a(()=>[e(E,{type:"primary",disabled:!b(s).hasOp("monitor.note.write"),onClick:v},{default:a(()=>[...t[8]||(t[8]=[d("提交",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1}),e(_,{modelValue:l.content,"onUpdate:modelValue":t[4]||(t[4]=o=>l.content=o),type:"textarea",rows:4,placeholder:"描述备注内容...",disabled:!b(s).hasOp("monitor.note.write")},null,8,["modelValue","disabled"]),e(x),e(k,{data:m.value,size:"small","max-height":"400"},{default:a(()=>[e(n,{prop:"ts",label:"时间",width:"180"}),e(n,{prop:"author",label:"作者",width:"100"}),e(n,{prop:"target",label:"目标",width:"100"}),e(n,{prop:"level",label:"层级",width:"80"},{default:a(o=>[e(u,{size:"small",type:w(o.row.level)},{default:a(()=>[d(X(o.row.level),1)]),_:2},1032,["type"])]),_:1}),e(n,{prop:"title",label:"标题"}),e(n,{prop:"content",label:"内容"})]),_:1},8,["data"])]),_:1})}}});export{pe as default}; diff --git a/MiGu.Server/wwwroot/assets/AnnotationView-YwpSTL8W.js b/MiGu.Server/wwwroot/assets/AnnotationView-YwpSTL8W.js deleted file mode 100644 index 6949f19..0000000 --- a/MiGu.Server/wwwroot/assets/AnnotationView-YwpSTL8W.js +++ /dev/null @@ -1 +0,0 @@ -import{aE as S,bp as N,ay as f,bD as a,t as z,b4 as p,aD as e,N as A,bG as B,O as D,R as O,a3 as T,aA as M,ah as U,be as F,Z as G,r as I,bn as b,aC as d,H as L,a9 as H,aa as R,ac as X,bk as Z,ax as c,bb as $,bc as j,X as g}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const q={style:{display:"flex","align-items":"center",gap:"8px"}},pe=S({__name:"AnnotationView",setup(J){const s=N(),l=$({title:"",target:"",level:"info",content:""}),m=j([{id:"N001",ts:"2026-05-19 10:25",author:"ops",target:"C05",level:"warn",title:"AGV-005 故障观察",content:"出库点附近频繁停顿,怀疑激光被遮挡"}]);function w(r){return r==="error"?"danger":r==="warn"?"warning":"info"}function v(){if(!l.title){g.warning("请填写标题");return}const r=`N${String(m.value.length+1).padStart(3,"0")}`;m.value.unshift({id:r,ts:new Date().toLocaleString("zh-CN"),author:s.user?.username??"mock",target:l.target,level:l.level,title:l.title,content:l.content}),g.success("已记录(Mock,未写入数据库)"),l.title="",l.content="",l.target=""}return(r,t)=>{const u=X,_=O,i=D,y=G,V=T,E=I,x=A,h=L,n=R,k=H,C=z;return p(),f(C,{shadow:"never"},{header:a(()=>[c("div",q,[t[7]||(t[7]=c("span",null,"运营备注(monitor.note.write · 写 platform.db.Annotations)",-1)),b(s).hasOp("monitor.note.write")?(p(),f(u,{key:0,size:"small",type:"success"},{default:a(()=>[...t[5]||(t[5]=[d("可写",-1)])]),_:1})):(p(),f(u,{key:1,size:"small",type:"danger"},{default:a(()=>[...t[6]||(t[6]=[d("只读",-1)])]),_:1}))])]),default:a(()=>[e(x,{inline:"",onSubmit:t[3]||(t[3]=B(()=>{},["prevent"]))},{default:a(()=>[e(i,{label:"标题"},{default:a(()=>[e(_,{modelValue:l.title,"onUpdate:modelValue":t[0]||(t[0]=o=>l.title=o),style:{width:"240px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"关联目标"},{default:a(()=>[e(_,{modelValue:l.target,"onUpdate:modelValue":t[1]||(t[1]=o=>l.target=o),placeholder:"例如 C01 / M02 / S006",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"层级"},{default:a(()=>[e(V,{modelValue:l.level,"onUpdate:modelValue":t[2]||(t[2]=o=>l.level=o),style:{width:"120px"}},{default:a(()=>[(p(),M(U,null,F(["info","warn","error"],o=>e(y,{key:o,label:o,value:o},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),e(i,null,{default:a(()=>[e(E,{type:"primary",disabled:!b(s).hasOp("monitor.note.write"),onClick:v},{default:a(()=>[...t[8]||(t[8]=[d("提交",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1}),e(_,{modelValue:l.content,"onUpdate:modelValue":t[4]||(t[4]=o=>l.content=o),type:"textarea",rows:4,placeholder:"描述备注内容...",disabled:!b(s).hasOp("monitor.note.write")},null,8,["modelValue","disabled"]),e(h),e(k,{data:m.value,size:"small","max-height":"400"},{default:a(()=>[e(n,{prop:"ts",label:"时间",width:"180"}),e(n,{prop:"author",label:"作者",width:"100"}),e(n,{prop:"target",label:"目标",width:"100"}),e(n,{prop:"level",label:"层级",width:"80"},{default:a(o=>[e(u,{size:"small",type:w(o.row.level)},{default:a(()=>[d(Z(o.row.level),1)]),_:2},1032,["type"])]),_:1}),e(n,{prop:"title",label:"标题"}),e(n,{prop:"content",label:"内容"})]),_:1},8,["data"])]),_:1})}}});export{pe as default}; diff --git a/MiGu.Server/wwwroot/assets/AppShell-BE7Z2zMC.js b/MiGu.Server/wwwroot/assets/AppShell-BE7Z2zMC.js new file mode 100644 index 0000000..cb61f20 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/AppShell-BE7Z2zMC.js @@ -0,0 +1 @@ +import{aG as R,bt as O,bv as G,b7 as o,aA as p,bH as e,aF as t,$ as me,aE as u,av as f,a0 as ue,X as pe,bw as q,az as a,b2 as V,bo as s,br as l,Q as H,aq as J,K,aC as y,ah as S,bh as T,J as Q,b1 as A,ar as _e,aB as D,I as X,aj as Z,aD as be,A as fe,bu as he,bj as ge,m as ve,V as ke,a6 as ye,W as we,bk as I,P as Ee,aP as Ce,aL as Me,p as Se,q as xe,n as Pe,U as $e,M as De,aR as Ie,aZ as W,bp as Te,b3 as j,bm as Ae,a_ as Re,bA as Ne,bc as Be}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css */const Le="/FRLD-logo-white-no_title.png",ze="/FRLD-logo-white.png",Fe=R({__name:"ScopeSwitcher",setup(N){const i=O(),E=G(),r=f(()=>i.scope??"Platform");let c=!1;async function g(_){if(!c){c=!0;try{await w(_)}finally{c=!1}}}async function w(_){try{await i.switchScope(_),E.push(_==="Platform"?"/admin/map-monitor":"/monitor/map")}catch(b){pe.error(b?.message??`切换到 ${_} 失败`)}}return(_,b)=>{const C=me,x=ue;return o(),p(x,{"model-value":r.value,size:"small",onChange:g},{default:e(()=>[t(C,{value:"Platform"},{default:e(()=>[...b[0]||(b[0]=[u("管理员",-1)])]),_:1}),t(C,{value:"RCSMonitor"},{default:e(()=>[...b[1]||(b[1]=[u("运营",-1)])]),_:1})]),_:1},8,["model-value"])}}}),Ue=["title"],Ve={class:"theme-label"},We={class:"option-text"},je={class:"option-name"},Oe={class:"option-desc"},Ge=R({__name:"ThemeSwitcher",setup(N){const i=q(),E=f(()=>({background:`linear-gradient(135deg, ${i.activeTheme.preview} 0%, ${i.activeTheme.previewAccent} 100%)`}));function r(g){const w=i.getMergedTheme(g);return{background:`linear-gradient(135deg, ${w.preview} 0%, ${w.previewAccent} 100%)`}}function c(g){i.setThemeId(g)}return(g,w)=>{const _=H,b=Q,C=K,x=X;return o(),p(x,{trigger:"click",onCommand:c},{dropdown:e(()=>[t(C,{class:"theme-menu"},{default:e(()=>[(o(!0),y(S,null,T(l(i).availableThemes,h=>(o(),p(b,{key:h.id,command:h.id,class:A({"is-active":h.id===l(i).themeId})},{default:e(()=>[a("span",{class:"option-swatch",style:V(r(h))},null,4),a("span",We,[a("span",je,s(h.name),1),a("span",Oe,s(h.description),1)]),h.id===l(i).themeId?(o(),p(_,{key:0,class:"check"},{default:e(()=>[t(l(_e))]),_:1})):D("",!0)]),_:2},1032,["command","class"]))),128))]),_:1})]),default:e(()=>[a("button",{class:"theme-trigger",type:"button",title:`当前主题:${l(i).activeTheme.name}`},[a("span",{class:"swatch",style:V(E.value)},null,4),a("span",Ve,s(l(i).activeTheme.name),1),t(_,{class:"caret"},{default:e(()=>[t(l(J))]),_:1})],8,Ue)]),_:1})}}}),qe=Z(Ge,[["__scopeId","data-v-28ea4aeb"]]),He={class:"app-shell"},Je={class:"aside-footer"},Ke={key:0},Qe={class:"header-left"},Xe={class:"header-right"},Ze={class:"user-link"},Ye={class:"user-name"},ea=R({__name:"AppShell",setup(N){const i=he(),E=G(),r=O(),c=q(),g=f(()=>"localhost:8223".split(":")[1]??"8223"),w=f(()=>"/api"),_=f(()=>(r.user?.displayName??r.user?.username??"?").slice(0,1).toUpperCase()),b=f(()=>r.scope==="Platform"?"管理员 (Platform)":"运营 (RCSMonitor)"),C=f(()=>{switch(r.runMode){case"WebOnly":return"Web-Only";case"WebEnabled":return"Web + Desktop";case"Detached":return"SimpleLite 未连接";default:return String(r.runMode??"Unknown")}}),x=[{path:"/admin/dashboard",label:"总览",icon:Ie,key:"admin-dashboard"},{path:"/admin/map-monitor",label:"地图监控",icon:W,key:"admin-map-monitor"},{path:"/admin/design",label:"设计与编排",icon:Te,children:[{path:"/admin/map-editor",label:"地图编辑",key:"admin-map-editor"},{path:"/admin/project-properties",label:"项目属性",key:"admin-project-properties"},{path:"/admin/tracks",label:"场景管理",key:"admin-tracks"},{path:"/admin/cars",label:"车辆管理",key:"admin-cars"},{path:"/admin/vehicle-hub",label:"车辆运维",key:"admin-vehicle-hub"},{path:"/admin/processes",label:"进程管理",key:"admin-processes"},{path:"/admin/scripts",label:"脚本管理",key:"admin-scripts"},{path:"/admin/missions",label:"任务编排",key:"admin-missions"}]},{path:"/admin/playback",label:"调度回放",icon:j,key:"admin-playback"},{path:"/admin/config",label:"平台配置中心",icon:Ae,children:[{path:"/admin/config/system",label:"系统级配置",key:"admin-config-system"},{path:"/admin/config/integrations",label:"外部系统对接",key:"admin-config-integrations"},{path:"/admin/config/routing",label:"路径规划",key:"admin-config-routing"},{path:"/admin/config/vehicle",label:"车辆维护策略",key:"admin-config-vehicle"},{path:"/admin/config/charge",label:"充电策略",key:"admin-config-charge"},{path:"/admin/config/task",label:"任务分配",key:"admin-config-task"},{path:"/admin/config/traffic",label:"交通管制",key:"admin-config-traffic"},{path:"/admin/config/auth",label:"权限与角色",key:"admin-config-auth"},{path:"/admin/config/device",label:"设备接入",key:"admin-config-device"},{path:"/admin/config/fleet",label:"车队生命周期",key:"admin-config-fleet"},{path:"/admin/config/scenario",label:"场景模板",key:"admin-config-scenario"},{path:"/admin/config/location",label:"库位管理",key:"admin-config-location"},{path:"/admin/config/ops",label:"运营维护",key:"admin-config-ops"},{path:"/admin/config/widget",label:"自定义控件",key:"admin-config-widget"}]}],h=[{path:"/monitor/dashboard",label:"运营总览",icon:Re,key:"monitor-dashboard"},{path:"/monitor/vehicle-hub",label:"车辆运维",icon:Ne,key:"monitor-vehicle-hub"},{path:"/monitor/map",label:"地图监控",icon:W,key:"monitor-map"},{path:"/monitor/ops",label:"运维操作",icon:Be,key:"monitor-ops"},{path:"/monitor/notes",label:"运营备注",icon:j,key:"monitor-notes"}];function Y(v){const n=[];for(const d of v)if(d.children){const M=d.children.filter(k=>!k.key||r.hasPage(k.key));M.length&&n.push({...d,children:M})}else(!d.key||r.hasPage(d.key))&&n.push(d);return n}const B=f(()=>Y(r.scope==="Platform"?x:h)),ee=f(()=>{const v=i.path,n=[],d=k=>{k.forEach(P=>{n.push(P),P.children&&d(P.children)})};return d(B.value),n.find(k=>k.path===v)?.path??v}),L=f(()=>i.meta.title??"");function ae(v){v==="logout"?(r.logout(),E.push("/login")):v==="status"&&E.push("/status")}return(v,n)=>{const d=H,M=we,k=ye,P=ke,te=ve,z=xe,ne=Se,oe=Pe,F=Q,le=K,se=X,ie=Ee,re=ge("router-view"),ce=$e,de=De,U=fe;return o(),y("div",He,[n[8]||(n[8]=be('
',1)),t(U,{class:"app-container"},{default:e(()=>[t(te,{width:l(c).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:A(["logo",{collapsed:l(c).sidebarCollapsed}])},[l(c).sidebarCollapsed?(o(),y(S,{key:0},[n[1]||(n[1]=a("img",{src:Le,alt:"FRLD",class:"logo-img-small"},null,-1)),n[2]||(n[2]=a("span",{class:"logo-abbr"},"迷毂",-1))],64)):(o(),y(S,{key:1},[n[3]||(n[3]=a("img",{src:ze,alt:"FRLD",class:"logo-img-full"},null,-1)),n[4]||(n[4]=a("div",{class:"logo-titles"},[a("span",{class:"logo-title-zh"},"迷 毂 · 智能调度平台"),a("span",{class:"logo-title-en"},[a("b",null,"M"),u("i "),a("b",null,"G"),u("u · "),a("b",null,"I"),u("ntelligent "),a("b",null,"D"),u("ispatch "),a("b",null,"P"),u("latform ")])],-1))],64))],2),t(P,{"default-active":ee.value,collapse:l(c).sidebarCollapsed,"collapse-transition":!1,"background-color":"transparent","text-color":"rgba(255, 255, 255, 0.72)","active-text-color":"#fff",router:"",class:"menu"},{default:e(()=>[(o(!0),y(S,null,T(B.value,m=>(o(),y(S,{key:m.path},[m.children?(o(),p(k,{key:0,index:m.path},{title:e(()=>[t(d,null,{default:e(()=>[(o(),p(I(m.icon)))]),_:2},1024),a("span",null,s(m.label),1)]),default:e(()=>[(o(!0),y(S,null,T(m.children,$=>(o(),p(M,{key:$.path,index:$.path},{default:e(()=>[a("span",null,s($.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(o(),p(M,{key:1,index:m.path},{title:e(()=>[u(s(m.label),1)]),default:e(()=>[t(d,null,{default:e(()=>[(o(),p(I(m.icon)))]),_:2},1024)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse"]),a("div",Je,[n[5]||(n[5]=a("span",{class:"aside-footer-badge"},"v1.6",-1)),l(c).sidebarCollapsed?D("",!0):(o(),y("span",Ke,s(l(c).activeTheme.name)+" · "+s(l(c).activeTheme.preview),1))])]),_:1},8,["width"]),t(U,{class:"container-right"},{default:e(()=>[t(ie,{class:"header"},{default:e(()=>[a("div",Qe,[a("button",{class:"icon-btn",onClick:n[0]||(n[0]=m=>l(c).toggleSidebar()),title:"切换侧栏"},[t(d,{size:"18"},{default:e(()=>[l(c).sidebarCollapsed?(o(),p(l(Me),{key:1})):(o(),p(l(Ce),{key:0}))]),_:1})]),t(ne,{separator:"/"},{default:e(()=>[t(z,null,{default:e(()=>[u(s(b.value),1)]),_:1}),L.value?(o(),p(z,{key:0},{default:e(()=>[u(s(L.value),1)]),_:1})):D("",!0)]),_:1})]),a("div",Xe,[t(qe),t(Fe),a("span",{class:A(["runmode-tag",l(r).runMode])},s(C.value),3),t(se,{trigger:"click",onCommand:ae},{dropdown:e(()=>[t(le,null,{default:e(()=>[t(F,{command:"status"},{default:e(()=>[...n[6]||(n[6]=[u("服务状态",-1)])]),_:1}),t(F,{command:"logout",divided:""},{default:e(()=>[...n[7]||(n[7]=[u("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Ze,[t(oe,{size:"small"},{default:e(()=>[u(s(_.value),1)]),_:1}),a("span",Ye,s(l(r).user?.displayName??"未登录"),1),t(d,null,{default:e(()=>[t(l(J))]),_:1})])]),_:1})])]),_:1}),t(ce,{class:"main mg-content"},{default:e(()=>[t(re,null,{default:e(({Component:m,route:$})=>[m?(o(),p(I(m),{key:$.fullPath,class:"route-page"})):D("",!0)]),_:1})]),_:1}),t(de,{class:"footer"},{default:e(()=>[a("span",null,s(b.value)+" · webVRender :"+s(g.value)+" · API "+s(w.value),1)]),_:1})]),_:1})]),_:1})])}}}),da=Z(ea,[["__scopeId","data-v-7400086b"]]);export{da as default}; diff --git a/MiGu.Server/wwwroot/assets/AppShell-DXCOBttv.css b/MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css similarity index 83% rename from MiGu.Server/wwwroot/assets/AppShell-DXCOBttv.css rename to MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css index 5efce89..1abe7b0 100644 --- a/MiGu.Server/wwwroot/assets/AppShell-DXCOBttv.css +++ b/MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css @@ -1 +1 @@ -.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;height:var(--el-footer-height);flex-shrink:0}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;height:var(--el-header-height);flex-shrink:0}.el-main{--el-main-padding:20px;box-sizing:border-box;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size:40px;--el-avatar-size-small:24px;box-sizing:border-box;text-align:center;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size);outline:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.el-avatar>img{width:100%;height:100%;display:block}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:before,.el-breadcrumb:after{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);margin:0 9px;font-weight:700}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;align-items:center;display:inline-flex}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{transition:var(--el-transition-color);color:var(--el-text-color-primary);font-weight:700;text-decoration:none}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);background-color:var(--el-menu-bg-color);box-sizing:border-box;margin:0;padding-left:0;list-style:none;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{height:var(--el-menu-horizontal-height);border-right:none;flex-wrap:nowrap;display:flex}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:solid 1px var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000;justify-content:center;align-items:center;margin:0;display:inline-flex}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);color:var(--el-menu-text-color);align-items:center;padding:0 10px;display:flex}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal .el-menu-item:not(.is-disabled):focus{color:var(--el-menu-active-color,var(--el-menu-hover-text-color));background-color:var(--el-menu-hover-bg-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin:0}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span{visibility:hidden;width:0;height:0;display:inline-block;overflow:hidden}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{z-index:100;border-radius:var(--el-border-radius-small);min-width:200px;box-shadow:var(--el-box-shadow-light);border:none;padding:5px 0}.el-menu .el-icon{flex-shrink:0}.el-menu-item{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:hover,.el-menu-item:focus{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{width:var(--el-menu-icon-width);text-align:center;vertical-align:middle;margin-right:5px;font-size:18px}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{box-sizing:border-box;width:100%;height:100%;padding:0 var(--el-menu-base-level-padding);align-items:center;display:inline-flex;position:absolute;top:0;left:0}.el-sub-menu{margin:0;padding-left:0;list-style:none}.el-sub-menu__title{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:hover,.el-sub-menu__title:focus{outline:none}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-sub-menu__title,.el-sub-menu.is-disabled .el-menu-item{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin-right:5px;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{top:50%;right:var(--el-menu-base-level-padding);transition:transform var(--el-transition-duration);width:inherit;margin-top:-6px;margin-right:0;font-size:12px;position:absolute}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);color:var(--el-text-color-secondary);font-size:12px;line-height:normal}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-popper,.el-menu--popup-container,.el-menu{outline:none}.theme-trigger[data-v-28ea4aeb]{appearance:none;display:inline-flex;align-items:center;gap:8px;padding:4px 12px 4px 8px;border-radius:999px;border:1px solid var(--mg-glass-border, rgba(255, 255, 255, .18));background:var(--mg-glass-bg, rgba(255, 255, 255, .05));color:var(--mg-text-light, rgba(255, 255, 255, .9));cursor:pointer;transition:var(--mg-transition, all .25s ease);font-size:12.5px}.theme-trigger[data-v-28ea4aeb]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.45);color:var(--mg-text-light, #fff)}.swatch[data-v-28ea4aeb]{width:18px;height:18px;border-radius:50%;box-shadow:0 0 0 2px var(--mg-glass-border-hi, rgba(255, 255, 255, .25));flex-shrink:0}.theme-label[data-v-28ea4aeb]{font-weight:600;letter-spacing:.3px;white-space:nowrap}.caret[data-v-28ea4aeb]{font-size:12px;opacity:.7}.theme-menu .el-dropdown-menu__item{display:flex!important;align-items:center;gap:12px;min-width:240px;padding:10px 16px!important}.theme-menu .el-dropdown-menu__item.is-active{background:rgba(var(--mg-accent-rgb),.22)!important}.theme-menu .option-swatch{width:28px;height:28px;border-radius:8px;flex-shrink:0;box-shadow:0 2px 8px #00000059}.theme-menu .option-text{flex:1;display:flex;flex-direction:column;gap:2px;line-height:1.3}.theme-menu .option-name{font-weight:600;font-size:13px}.theme-menu .option-desc{font-size:11px;opacity:.65}.theme-menu .check{color:var(--mg-accent);font-size:16px}.app-shell[data-v-800dedbc]{position:relative;height:100vh;overflow:hidden}.bg-orbs[data-v-800dedbc]{position:absolute;inset:0;pointer-events:none;z-index:0}.bg-orb[data-v-800dedbc]{position:absolute;border-radius:50%;filter:blur(120px);animation:drift-800dedbc 24s ease-in-out infinite;will-change:transform}.bg-orb-a[data-v-800dedbc]{width:520px;height:520px;top:-240px;left:-220px;background:radial-gradient(circle,var(--mg-primary-hover) 0%,var(--mg-primary) 55%,transparent 85%);opacity:var(--mg-orb-a-opacity, .55)}.bg-orb-b[data-v-800dedbc]{width:640px;height:640px;bottom:-280px;right:-260px;background:radial-gradient(circle,var(--mg-primary) 0%,var(--mg-primary-active) 55%,transparent 90%);opacity:var(--mg-orb-b-opacity, .5);animation-delay:-7s}.bg-orb-c[data-v-800dedbc]{width:320px;height:320px;top:58%;right:-140px;background:radial-gradient(circle,var(--mg-accent) 0%,var(--mg-primary-hover) 55%,transparent 95%);opacity:var(--mg-orb-c-opacity, .4);animation-delay:-14s}.bg-orb-d[data-v-800dedbc]{width:380px;height:380px;top:12%;right:28%;background:radial-gradient(circle,rgba(99,102,241,.85) 0%,var(--mg-primary) 60%,transparent 92%);opacity:.3;animation-delay:-18s;filter:blur(140px)}@keyframes drift-800dedbc{0%,to{transform:translate(0) scale(1)}50%{transform:translate(36px,-42px) scale(1.08)}}.app-container[data-v-800dedbc]{position:relative;z-index:1;height:100vh}.aside[data-v-800dedbc]{position:relative;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.78),rgba(var(--mg-bg-app-deep-rgb),.85));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-right:1px solid rgba(var(--mg-accent-rgb),.18);display:flex;flex-direction:column;transition:width .28s cubic-bezier(.25,.8,.25,1);overflow:hidden;flex-shrink:0;box-shadow:inset -1px 0 #ffffff0a,4px 0 32px #00000073}.aside[data-v-800dedbc]:before{content:"";position:absolute;top:0;right:0;width:1px;height:100%;background:linear-gradient(180deg,transparent 0%,rgba(var(--mg-accent-rgb),.6) 50%,transparent 100%);pointer-events:none;opacity:.4}.logo[data-v-800dedbc]{flex-shrink:0;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:22px 14px 18px;border-bottom:1px solid rgba(var(--mg-accent-rgb),.16);background:radial-gradient(ellipse at center top,rgba(var(--mg-primary-hover-rgb),.3) 0%,transparent 70%),linear-gradient(180deg,rgba(var(--mg-primary-rgb),.16) 0%,transparent 100%)}.logo.collapsed[data-v-800dedbc]{padding:18px 4px 14px}.logo-img-full[data-v-800dedbc]{height:36px;margin-bottom:12px;filter:drop-shadow(0 2px 10px rgba(var(--mg-accent-rgb),.5))}.logo-img-small[data-v-800dedbc]{height:26px;margin-bottom:4px;filter:drop-shadow(0 2px 8px rgba(var(--mg-accent-rgb),.5))}.logo-titles[data-v-800dedbc]{display:flex;flex-direction:column;align-items:center;gap:3px}.logo-title-zh[data-v-800dedbc]{font-size:13px;font-weight:700;letter-spacing:2.5px;background:linear-gradient(90deg,#ffffff 0%,var(--mg-accent) 60%,#ffffff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap;text-shadow:0 0 18px rgba(var(--mg-accent-rgb),.3)}.logo-title-en[data-v-800dedbc]{color:#e8d7f573;font-size:7.5px;letter-spacing:.3px;white-space:nowrap;text-align:center}.logo-title-en b[data-v-800dedbc]{color:#ffffffe6;font-weight:700;font-size:8.5px}.logo-abbr[data-v-800dedbc]{color:#ffffffd9;font-size:10.5px;font-weight:700;letter-spacing:1.5px}.menu[data-v-800dedbc]{flex:1;overflow-y:auto;overflow-x:hidden;border-right:none!important;padding:8px 0;scrollbar-width:thin;scrollbar-color:rgba(var(--mg-accent-rgb),.3) transparent}.menu[data-v-800dedbc]::-webkit-scrollbar{width:4px}.menu[data-v-800dedbc]::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.25);border-radius:2px}.menu[data-v-800dedbc]::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.55)}[data-v-800dedbc] .el-menu{border-right:none;background:transparent!important}[data-v-800dedbc] .el-menu-item,[data-v-800dedbc] .el-sub-menu__title{background:transparent!important;margin:2px 10px;border-radius:10px;height:42px;line-height:42px;transition:background .2s ease,color .2s ease,box-shadow .2s ease}[data-v-800dedbc] .el-menu--collapse .el-menu-item,[data-v-800dedbc] .el-menu--collapse .el-sub-menu__title{margin:2px 8px;padding:0!important;justify-content:center}[data-v-800dedbc] .el-menu-item:hover,[data-v-800dedbc] .el-sub-menu__title:hover{background:rgba(var(--mg-primary-rgb),.2)!important;color:#fff!important;box-shadow:inset 0 0 0 1px rgba(var(--mg-accent-rgb),.18)}[data-v-800dedbc] .el-menu-item.is-active{background:linear-gradient(90deg,rgba(var(--mg-primary-rgb),.55) 0%,rgba(var(--mg-primary-hover-rgb),.2) 70%,transparent 100%)!important;color:#fff!important;font-weight:600;box-shadow:inset 3px 0 0 var(--mg-accent),0 4px 14px rgba(var(--mg-primary-rgb),.25)}[data-v-800dedbc] .el-sub-menu.is-active>.el-sub-menu__title{color:#fff!important;font-weight:600}[data-v-800dedbc] .el-sub-menu .el-menu{background:#0000002e!important;border-radius:8px;margin:0 12px;padding:4px 0}[data-v-800dedbc] .el-sub-menu .el-menu .el-menu-item{margin:1px 4px;border-radius:6px;font-size:13px;height:36px;line-height:36px}[data-v-800dedbc] .el-sub-menu .el-menu .el-menu-item.is-active{background:rgba(var(--mg-accent-rgb),.18)!important;box-shadow:inset 2px 0 0 var(--mg-primary-hover);color:#fff!important}.aside-footer[data-v-800dedbc]{flex-shrink:0;padding:12px 16px;border-top:1px solid rgba(var(--mg-accent-rgb),.14);display:flex;align-items:center;gap:8px;font-size:10.5px;color:#ffffff8c;letter-spacing:.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aside-footer-badge[data-v-800dedbc]{padding:2px 7px;border-radius:8px;background:linear-gradient(135deg,rgba(var(--mg-primary-rgb),.35),rgba(var(--mg-accent-rgb),.2));border:1px solid rgba(var(--mg-accent-rgb),.36);color:#fff;font-weight:600;font-size:10px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:0;box-shadow:0 0 12px rgba(var(--mg-primary-hover-rgb),.35)}.container-right[data-v-800dedbc]{background:transparent;flex:1;min-height:0;display:flex;flex-direction:column}.header[data-v-800dedbc]{position:relative;display:flex;justify-content:space-between;align-items:center;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.72),rgba(var(--mg-bg-aside-rgb),.55));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-bottom:1px solid rgba(var(--mg-accent-rgb),.18);padding:0 20px}.header[data-v-800dedbc]:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.45) 30%,rgba(var(--mg-primary-hover-rgb),.6) 50%,rgba(var(--mg-accent-rgb),.45) 70%,transparent 100%);opacity:.55}.header-left[data-v-800dedbc],.header-right[data-v-800dedbc]{display:flex;align-items:center;gap:14px}.icon-btn[data-v-800dedbc]{appearance:none;background:transparent;border:1px solid rgba(255,255,255,.18);color:#ffffffbf;border-radius:8px;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.icon-btn[data-v-800dedbc]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}[data-v-800dedbc] .el-breadcrumb__inner{color:#ffffffc7;font-weight:500}[data-v-800dedbc] .el-breadcrumb__separator{color:#ffffff59}[data-v-800dedbc] .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#fff;font-weight:600}.runmode-tag[data-v-800dedbc]{padding:4px 10px;border-radius:999px;font-size:11.5px;letter-spacing:.5px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;border:1px solid rgba(255,255,255,.18);background:#ffffff0d;color:#ffffffd9}.runmode-tag.WebEnabled[data-v-800dedbc]{background:rgba(var(--mg-status-success-rgb),.18);border-color:rgba(var(--mg-status-success-rgb),.45);color:var(--mg-status-success)}.runmode-tag.WebOnly[data-v-800dedbc]{background:rgba(var(--mg-primary-hover-rgb),.18);border-color:rgba(var(--mg-primary-hover-rgb),.45);color:var(--mg-accent)}.runmode-tag.Detached[data-v-800dedbc]{background:rgba(var(--mg-status-warning-rgb),.18);border-color:rgba(var(--mg-status-warning-rgb),.45);color:var(--mg-status-warning)}.user-link[data-v-800dedbc]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:#ffffffd9;padding:4px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#ffffff0a;transition:all .2s}.user-link[data-v-800dedbc]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.4)}.user-name[data-v-800dedbc]{font-size:13px;color:#fff;font-weight:500}[data-v-800dedbc] .el-avatar{background:linear-gradient(135deg,var(--mg-accent) 0%,var(--mg-primary) 60%,var(--mg-primary-active) 100%);color:#fff;font-weight:700;box-shadow:0 0 0 1px #fff3}.main[data-v-800dedbc]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;padding:24px;background:transparent;color:#fff}.footer[data-v-800dedbc]{background:rgba(var(--mg-bg-aside-rgb),.25);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;color:#ffffff8c;font-size:12px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:.3px;height:32px!important;line-height:32px}.route-page[data-v-800dedbc]{min-height:0;flex:1;display:flex;flex-direction:column} +.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;height:var(--el-footer-height);flex-shrink:0}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;height:var(--el-header-height);flex-shrink:0}.el-main{--el-main-padding:20px;box-sizing:border-box;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size:40px;--el-avatar-size-small:24px;box-sizing:border-box;text-align:center;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size);outline:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.el-avatar>img{width:100%;height:100%;display:block}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:before,.el-breadcrumb:after{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);margin:0 9px;font-weight:700}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;align-items:center;display:inline-flex}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{transition:var(--el-transition-color);color:var(--el-text-color-primary);font-weight:700;text-decoration:none}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);background-color:var(--el-menu-bg-color);box-sizing:border-box;margin:0;padding-left:0;list-style:none;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{height:var(--el-menu-horizontal-height);border-right:none;flex-wrap:nowrap;display:flex}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:solid 1px var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000;justify-content:center;align-items:center;margin:0;display:inline-flex}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);color:var(--el-menu-text-color);align-items:center;padding:0 10px;display:flex}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal .el-menu-item:not(.is-disabled):focus{color:var(--el-menu-active-color,var(--el-menu-hover-text-color));background-color:var(--el-menu-hover-bg-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin:0}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span{visibility:hidden;width:0;height:0;display:inline-block;overflow:hidden}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{z-index:100;border-radius:var(--el-border-radius-small);min-width:200px;box-shadow:var(--el-box-shadow-light);border:none;padding:5px 0}.el-menu .el-icon{flex-shrink:0}.el-menu-item{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:hover,.el-menu-item:focus{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{width:var(--el-menu-icon-width);text-align:center;vertical-align:middle;margin-right:5px;font-size:18px}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{box-sizing:border-box;width:100%;height:100%;padding:0 var(--el-menu-base-level-padding);align-items:center;display:inline-flex;position:absolute;top:0;left:0}.el-sub-menu{margin:0;padding-left:0;list-style:none}.el-sub-menu__title{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:hover,.el-sub-menu__title:focus{outline:none}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-sub-menu__title,.el-sub-menu.is-disabled .el-menu-item{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin-right:5px;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{top:50%;right:var(--el-menu-base-level-padding);transition:transform var(--el-transition-duration);width:inherit;margin-top:-6px;margin-right:0;font-size:12px;position:absolute}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);color:var(--el-text-color-secondary);font-size:12px;line-height:normal}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-popper,.el-menu--popup-container,.el-menu{outline:none}.theme-trigger[data-v-28ea4aeb]{appearance:none;display:inline-flex;align-items:center;gap:8px;padding:4px 12px 4px 8px;border-radius:999px;border:1px solid var(--mg-glass-border, rgba(255, 255, 255, .18));background:var(--mg-glass-bg, rgba(255, 255, 255, .05));color:var(--mg-text-light, rgba(255, 255, 255, .9));cursor:pointer;transition:var(--mg-transition, all .25s ease);font-size:12.5px}.theme-trigger[data-v-28ea4aeb]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.45);color:var(--mg-text-light, #fff)}.swatch[data-v-28ea4aeb]{width:18px;height:18px;border-radius:50%;box-shadow:0 0 0 2px var(--mg-glass-border-hi, rgba(255, 255, 255, .25));flex-shrink:0}.theme-label[data-v-28ea4aeb]{font-weight:600;letter-spacing:.3px;white-space:nowrap}.caret[data-v-28ea4aeb]{font-size:12px;opacity:.7}.theme-menu .el-dropdown-menu__item{display:flex!important;align-items:center;gap:12px;min-width:240px;padding:10px 16px!important}.theme-menu .el-dropdown-menu__item.is-active{background:rgba(var(--mg-accent-rgb),.22)!important}.theme-menu .option-swatch{width:28px;height:28px;border-radius:8px;flex-shrink:0;box-shadow:0 2px 8px #00000059}.theme-menu .option-text{flex:1;display:flex;flex-direction:column;gap:2px;line-height:1.3}.theme-menu .option-name{font-weight:600;font-size:13px}.theme-menu .option-desc{font-size:11px;opacity:.65}.theme-menu .check{color:var(--mg-accent);font-size:16px}.app-shell[data-v-7400086b]{position:relative;height:100vh;overflow:hidden}.bg-orbs[data-v-7400086b]{position:absolute;inset:0;pointer-events:none;z-index:0}.bg-orb[data-v-7400086b]{position:absolute;border-radius:50%;filter:blur(120px);animation:drift-7400086b 24s ease-in-out infinite;will-change:transform}.bg-orb-a[data-v-7400086b]{width:520px;height:520px;top:-240px;left:-220px;background:radial-gradient(circle,var(--mg-primary-hover) 0%,var(--mg-primary) 55%,transparent 85%);opacity:var(--mg-orb-a-opacity, .55)}.bg-orb-b[data-v-7400086b]{width:640px;height:640px;bottom:-280px;right:-260px;background:radial-gradient(circle,var(--mg-primary) 0%,var(--mg-primary-active) 55%,transparent 90%);opacity:var(--mg-orb-b-opacity, .5);animation-delay:-7s}.bg-orb-c[data-v-7400086b]{width:320px;height:320px;top:58%;right:-140px;background:radial-gradient(circle,var(--mg-accent) 0%,var(--mg-primary-hover) 55%,transparent 95%);opacity:var(--mg-orb-c-opacity, .4);animation-delay:-14s}.bg-orb-d[data-v-7400086b]{width:380px;height:380px;top:12%;right:28%;background:radial-gradient(circle,rgba(99,102,241,.85) 0%,var(--mg-primary) 60%,transparent 92%);opacity:.3;animation-delay:-18s;filter:blur(140px)}@keyframes drift-7400086b{0%,to{transform:translate(0) scale(1)}50%{transform:translate(36px,-42px) scale(1.08)}}.app-container[data-v-7400086b]{position:relative;z-index:1;height:100vh}.aside[data-v-7400086b]{position:relative;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.78),rgba(var(--mg-bg-app-deep-rgb),.85));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-right:1px solid rgba(var(--mg-accent-rgb),.18);display:flex;flex-direction:column;transition:width .28s cubic-bezier(.25,.8,.25,1);overflow:hidden;flex-shrink:0;box-shadow:inset -1px 0 #ffffff0a,4px 0 32px #00000073}.aside[data-v-7400086b]:before{content:"";position:absolute;top:0;right:0;width:1px;height:100%;background:linear-gradient(180deg,transparent 0%,rgba(var(--mg-accent-rgb),.6) 50%,transparent 100%);pointer-events:none;opacity:.4}.logo[data-v-7400086b]{flex-shrink:0;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:22px 14px 18px;border-bottom:1px solid rgba(var(--mg-accent-rgb),.16);background:radial-gradient(ellipse at center top,rgba(var(--mg-primary-hover-rgb),.3) 0%,transparent 70%),linear-gradient(180deg,rgba(var(--mg-primary-rgb),.16) 0%,transparent 100%)}.logo.collapsed[data-v-7400086b]{padding:18px 4px 14px}.logo-img-full[data-v-7400086b]{height:36px;margin-bottom:12px;filter:drop-shadow(0 2px 10px rgba(var(--mg-accent-rgb),.5))}.logo-img-small[data-v-7400086b]{height:26px;margin-bottom:4px;filter:drop-shadow(0 2px 8px rgba(var(--mg-accent-rgb),.5))}.logo-titles[data-v-7400086b]{display:flex;flex-direction:column;align-items:center;gap:3px}.logo-title-zh[data-v-7400086b]{font-size:13px;font-weight:700;letter-spacing:2.5px;background:linear-gradient(90deg,#ffffff 0%,var(--mg-accent) 60%,#ffffff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap;text-shadow:0 0 18px rgba(var(--mg-accent-rgb),.3)}.logo-title-en[data-v-7400086b]{color:#e8d7f573;font-size:7.5px;letter-spacing:.3px;white-space:nowrap;text-align:center}.logo-title-en b[data-v-7400086b]{color:#ffffffe6;font-weight:700;font-size:8.5px}.logo-abbr[data-v-7400086b]{color:#ffffffd9;font-size:10.5px;font-weight:700;letter-spacing:1.5px}.menu[data-v-7400086b]{flex:1;overflow-y:auto;overflow-x:hidden;border-right:none!important;padding:8px 0;scrollbar-width:thin;scrollbar-color:rgba(var(--mg-accent-rgb),.3) transparent}.menu[data-v-7400086b]::-webkit-scrollbar{width:4px}.menu[data-v-7400086b]::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.25);border-radius:2px}.menu[data-v-7400086b]::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.55)}[data-v-7400086b] .el-menu{border-right:none;background:transparent!important}[data-v-7400086b] .el-menu-item,[data-v-7400086b] .el-sub-menu__title{background:transparent!important;margin:2px 10px;border-radius:10px;height:42px;line-height:42px;transition:background .2s ease,color .2s ease,box-shadow .2s ease}[data-v-7400086b] .el-menu--collapse .el-menu-item,[data-v-7400086b] .el-menu--collapse .el-sub-menu__title{margin:2px 8px;padding:0!important;justify-content:center}[data-v-7400086b] .el-menu-item:hover,[data-v-7400086b] .el-sub-menu__title:hover{background:rgba(var(--mg-primary-rgb),.2)!important;color:#fff!important;box-shadow:inset 0 0 0 1px rgba(var(--mg-accent-rgb),.18)}[data-v-7400086b] .el-menu-item.is-active{background:linear-gradient(90deg,rgba(var(--mg-primary-rgb),.55) 0%,rgba(var(--mg-primary-hover-rgb),.2) 70%,transparent 100%)!important;color:#fff!important;font-weight:600;box-shadow:inset 3px 0 0 var(--mg-accent),0 4px 14px rgba(var(--mg-primary-rgb),.25)}[data-v-7400086b] .el-sub-menu.is-active>.el-sub-menu__title{color:#fff!important;font-weight:600}[data-v-7400086b] .el-sub-menu .el-menu{background:#0000002e!important;border-radius:8px;margin:0 12px;padding:4px 0}[data-v-7400086b] .el-sub-menu .el-menu .el-menu-item{margin:1px 4px;border-radius:6px;font-size:13px;height:36px;line-height:36px}[data-v-7400086b] .el-sub-menu .el-menu .el-menu-item.is-active{background:rgba(var(--mg-accent-rgb),.18)!important;box-shadow:inset 2px 0 0 var(--mg-primary-hover);color:#fff!important}.aside-footer[data-v-7400086b]{flex-shrink:0;padding:12px 16px;border-top:1px solid rgba(var(--mg-accent-rgb),.14);display:flex;align-items:center;gap:8px;font-size:10.5px;color:#ffffff8c;letter-spacing:.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aside-footer-badge[data-v-7400086b]{padding:2px 7px;border-radius:8px;background:linear-gradient(135deg,rgba(var(--mg-primary-rgb),.35),rgba(var(--mg-accent-rgb),.2));border:1px solid rgba(var(--mg-accent-rgb),.36);color:#fff;font-weight:600;font-size:10px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:0;box-shadow:0 0 12px rgba(var(--mg-primary-hover-rgb),.35)}.container-right[data-v-7400086b]{background:transparent;flex:1;min-height:0;display:flex;flex-direction:column}.header[data-v-7400086b]{position:relative;display:flex;justify-content:space-between;align-items:center;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.72),rgba(var(--mg-bg-aside-rgb),.55));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-bottom:1px solid rgba(var(--mg-accent-rgb),.18);padding:0 20px}.header[data-v-7400086b]:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.45) 30%,rgba(var(--mg-primary-hover-rgb),.6) 50%,rgba(var(--mg-accent-rgb),.45) 70%,transparent 100%);opacity:.55}.header-left[data-v-7400086b],.header-right[data-v-7400086b]{display:flex;align-items:center;gap:14px}.icon-btn[data-v-7400086b]{appearance:none;background:transparent;border:1px solid rgba(255,255,255,.18);color:#ffffffbf;border-radius:8px;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.icon-btn[data-v-7400086b]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}[data-v-7400086b] .el-breadcrumb__inner{color:#ffffffc7;font-weight:500}[data-v-7400086b] .el-breadcrumb__separator{color:#ffffff59}[data-v-7400086b] .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#fff;font-weight:600}.runmode-tag[data-v-7400086b]{padding:4px 10px;border-radius:999px;font-size:11.5px;letter-spacing:.5px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;border:1px solid rgba(255,255,255,.18);background:#ffffff0d;color:#ffffffd9}.runmode-tag.WebEnabled[data-v-7400086b]{background:rgba(var(--mg-status-success-rgb),.18);border-color:rgba(var(--mg-status-success-rgb),.45);color:var(--mg-status-success)}.runmode-tag.WebOnly[data-v-7400086b]{background:rgba(var(--mg-primary-hover-rgb),.18);border-color:rgba(var(--mg-primary-hover-rgb),.45);color:var(--mg-accent)}.runmode-tag.Detached[data-v-7400086b]{background:rgba(var(--mg-status-warning-rgb),.18);border-color:rgba(var(--mg-status-warning-rgb),.45);color:var(--mg-status-warning)}.user-link[data-v-7400086b]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:#ffffffd9;padding:4px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#ffffff0a;transition:all .2s}.user-link[data-v-7400086b]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.4)}.user-name[data-v-7400086b]{font-size:13px;color:#fff;font-weight:500}[data-v-7400086b] .el-avatar{background:linear-gradient(135deg,var(--mg-accent) 0%,var(--mg-primary) 60%,var(--mg-primary-active) 100%);color:#fff;font-weight:700;box-shadow:0 0 0 1px #fff3}.main[data-v-7400086b]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;padding:24px;background:transparent;color:#fff}.footer[data-v-7400086b]{background:rgba(var(--mg-bg-aside-rgb),.25);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;color:#ffffff8c;font-size:12px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:.3px;height:32px!important;line-height:32px}.route-page[data-v-7400086b]{min-height:0;flex:1;display:flex;flex-direction:column} diff --git a/MiGu.Server/wwwroot/assets/AppShell-Ca-gt8yg.js b/MiGu.Server/wwwroot/assets/AppShell-Ca-gt8yg.js deleted file mode 100644 index 2c8082d..0000000 --- a/MiGu.Server/wwwroot/assets/AppShell-Ca-gt8yg.js +++ /dev/null @@ -1 +0,0 @@ -import{aE as A,bp as O,br as q,b4 as o,ay as u,bD as e,aD as t,$ as pe,aC as m,at as b,a0 as me,X as ue,bs as G,ax as a,a$ as F,bk as l,bn as s,Q as J,ap as X,K as H,aA as y,ah as S,be as T,J as K,a_ as N,aq as _e,az as P,I as Q,aj as Y,aB as fe,A as be,bq as he,bg as ge,m as ve,V as ke,a6 as ye,W as we,bh as I,P as Ee,aN as Ce,aJ as Me,p as Se,q as xe,n as $e,U as De,M as Pe,aP as Ie,aX as W,bl as Te,b0 as j,bj as Ne,aY as Ae,b9 as Re}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css */const Be="/FRLD-logo-white-no_title.png",Le="/FRLD-logo-white.png",ze=A({__name:"ScopeSwitcher",setup(R){const i=O(),E=q(),r=b(()=>i.scope??"Platform");let c=!1;async function g(_){if(!c){c=!0;try{await w(_)}finally{c=!1}}}async function w(_){try{await i.switchScope(_),E.push(_==="Platform"?"/admin/map-monitor":"/monitor/map")}catch(f){ue.error(f?.message??`切换到 ${_} 失败`)}}return(_,f)=>{const C=pe,x=me;return o(),u(x,{"model-value":r.value,size:"small",onChange:g},{default:e(()=>[t(C,{value:"Platform"},{default:e(()=>[...f[0]||(f[0]=[m("管理员",-1)])]),_:1}),t(C,{value:"RCSMonitor"},{default:e(()=>[...f[1]||(f[1]=[m("运营",-1)])]),_:1})]),_:1},8,["model-value"])}}}),Ue=["title"],Ve={class:"theme-label"},Fe={class:"option-text"},We={class:"option-name"},je={class:"option-desc"},Oe=A({__name:"ThemeSwitcher",setup(R){const i=G(),E=b(()=>({background:`linear-gradient(135deg, ${i.activeTheme.preview} 0%, ${i.activeTheme.previewAccent} 100%)`}));function r(g){const w=i.getMergedTheme(g);return{background:`linear-gradient(135deg, ${w.preview} 0%, ${w.previewAccent} 100%)`}}function c(g){i.setThemeId(g)}return(g,w)=>{const _=J,f=K,C=H,x=Q;return o(),u(x,{trigger:"click",onCommand:c},{dropdown:e(()=>[t(C,{class:"theme-menu"},{default:e(()=>[(o(!0),y(S,null,T(s(i).availableThemes,h=>(o(),u(f,{key:h.id,command:h.id,class:N({"is-active":h.id===s(i).themeId})},{default:e(()=>[a("span",{class:"option-swatch",style:F(r(h))},null,4),a("span",Fe,[a("span",We,l(h.name),1),a("span",je,l(h.description),1)]),h.id===s(i).themeId?(o(),u(_,{key:0,class:"check"},{default:e(()=>[t(s(_e))]),_:1})):P("",!0)]),_:2},1032,["command","class"]))),128))]),_:1})]),default:e(()=>[a("button",{class:"theme-trigger",type:"button",title:`当前主题:${s(i).activeTheme.name}`},[a("span",{class:"swatch",style:F(E.value)},null,4),a("span",Ve,l(s(i).activeTheme.name),1),t(_,{class:"caret"},{default:e(()=>[t(s(X))]),_:1})],8,Ue)]),_:1})}}}),qe=Y(Oe,[["__scopeId","data-v-28ea4aeb"]]),Ge={class:"app-shell"},Je={class:"aside-footer"},Xe={key:0},He={class:"header-left"},Ke={class:"header-right"},Qe={class:"user-link"},Ye={class:"user-name"},Ze=A({__name:"AppShell",setup(R){const i=he(),E=q(),r=O(),c=G(),g=b(()=>"localhost:8223".split(":")[1]??"8223"),w=b(()=>"/api"),_=b(()=>(r.user?.displayName??r.user?.username??"?").slice(0,1).toUpperCase()),f=b(()=>r.scope==="Platform"?"管理员 (Platform)":"运营 (RCSMonitor)"),C=b(()=>{switch(r.runMode){case"WebOnly":return"Web-Only";case"WebEnabled":return"Web + Desktop";case"Detached":return"SimpleLite 未连接";default:return String(r.runMode??"Unknown")}}),x=[{path:"/admin/dashboard",label:"总览",icon:Ie,key:"admin-dashboard"},{path:"/admin/map-monitor",label:"地图监控",icon:W,key:"admin-map-monitor"},{path:"/admin/design",label:"设计与编排",icon:Te,children:[{path:"/admin/map-editor",label:"地图编辑",key:"admin-map-editor"},{path:"/admin/project-properties",label:"项目属性",key:"admin-project-properties"},{path:"/admin/tracks",label:"场景管理",key:"admin-tracks"},{path:"/admin/cars",label:"车辆管理",key:"admin-cars"},{path:"/admin/processes",label:"进程管理",key:"admin-processes"},{path:"/admin/scripts",label:"脚本管理",key:"admin-scripts"},{path:"/admin/missions",label:"任务编排",key:"admin-missions"}]},{path:"/admin/playback",label:"调度回放",icon:j,key:"admin-playback"},{path:"/admin/config",label:"平台配置中心",icon:Ne,children:[{path:"/admin/config/system",label:"系统级配置",key:"admin-config-system"},{path:"/admin/config/integrations",label:"外部系统对接",key:"admin-config-integrations"},{path:"/admin/config/routing",label:"路径规划",key:"admin-config-routing"},{path:"/admin/config/vehicle",label:"车辆维护",key:"admin-config-vehicle"},{path:"/admin/config/charge",label:"充电策略",key:"admin-config-charge"},{path:"/admin/config/task",label:"任务分配",key:"admin-config-task"},{path:"/admin/config/traffic",label:"交通管制",key:"admin-config-traffic"},{path:"/admin/config/auth",label:"权限与角色",key:"admin-config-auth"},{path:"/admin/config/device",label:"设备接入",key:"admin-config-device"},{path:"/admin/config/fleet",label:"车队生命周期",key:"admin-config-fleet"},{path:"/admin/config/scenario",label:"场景模板",key:"admin-config-scenario"},{path:"/admin/config/location",label:"库位管理",key:"admin-config-location"},{path:"/admin/config/ops",label:"运营维护",key:"admin-config-ops"},{path:"/admin/config/widget",label:"自定义控件",key:"admin-config-widget"}]}],h=[{path:"/monitor/dashboard",label:"运营总览",icon:Ae,key:"monitor-dashboard"},{path:"/monitor/map",label:"地图监控",icon:W,key:"monitor-map"},{path:"/monitor/ops",label:"运维操作",icon:Re,key:"monitor-ops"},{path:"/monitor/notes",label:"运营备注",icon:j,key:"monitor-notes"}];function Z(v){const n=[];for(const d of v)if(d.children){const M=d.children.filter(k=>!k.key||r.hasPage(k.key));M.length&&n.push({...d,children:M})}else(!d.key||r.hasPage(d.key))&&n.push(d);return n}const B=b(()=>Z(r.scope==="Platform"?x:h)),ee=b(()=>{const v=i.path,n=[],d=k=>{k.forEach($=>{n.push($),$.children&&d($.children)})};return d(B.value),n.find(k=>k.path===v)?.path??v}),L=b(()=>i.meta.title??"");function ae(v){v==="logout"?(r.logout(),E.push("/login")):v==="status"&&E.push("/status")}return(v,n)=>{const d=J,M=we,k=ye,$=ke,te=ve,z=xe,ne=Se,oe=$e,U=K,se=H,le=Q,ie=Ee,re=ge("router-view"),ce=De,de=Pe,V=be;return o(),y("div",Ge,[n[8]||(n[8]=fe('',1)),t(V,{class:"app-container"},{default:e(()=>[t(te,{width:s(c).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:N(["logo",{collapsed:s(c).sidebarCollapsed}])},[s(c).sidebarCollapsed?(o(),y(S,{key:0},[n[1]||(n[1]=a("img",{src:Be,alt:"FRLD",class:"logo-img-small"},null,-1)),n[2]||(n[2]=a("span",{class:"logo-abbr"},"迷毂",-1))],64)):(o(),y(S,{key:1},[n[3]||(n[3]=a("img",{src:Le,alt:"FRLD",class:"logo-img-full"},null,-1)),n[4]||(n[4]=a("div",{class:"logo-titles"},[a("span",{class:"logo-title-zh"},"迷 毂 · 智能调度平台"),a("span",{class:"logo-title-en"},[a("b",null,"M"),m("i "),a("b",null,"G"),m("u · "),a("b",null,"I"),m("ntelligent "),a("b",null,"D"),m("ispatch "),a("b",null,"P"),m("latform ")])],-1))],64))],2),t($,{"default-active":ee.value,collapse:s(c).sidebarCollapsed,"collapse-transition":!1,"background-color":"transparent","text-color":"rgba(255, 255, 255, 0.72)","active-text-color":"#fff",router:"",class:"menu"},{default:e(()=>[(o(!0),y(S,null,T(B.value,p=>(o(),y(S,{key:p.path},[p.children?(o(),u(k,{key:0,index:p.path},{title:e(()=>[t(d,null,{default:e(()=>[(o(),u(I(p.icon)))]),_:2},1024),a("span",null,l(p.label),1)]),default:e(()=>[(o(!0),y(S,null,T(p.children,D=>(o(),u(M,{key:D.path,index:D.path},{default:e(()=>[a("span",null,l(D.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(o(),u(M,{key:1,index:p.path},{title:e(()=>[m(l(p.label),1)]),default:e(()=>[t(d,null,{default:e(()=>[(o(),u(I(p.icon)))]),_:2},1024)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse"]),a("div",Je,[n[5]||(n[5]=a("span",{class:"aside-footer-badge"},"v1.6",-1)),s(c).sidebarCollapsed?P("",!0):(o(),y("span",Xe,l(s(c).activeTheme.name)+" · "+l(s(c).activeTheme.preview),1))])]),_:1},8,["width"]),t(V,{class:"container-right"},{default:e(()=>[t(ie,{class:"header"},{default:e(()=>[a("div",He,[a("button",{class:"icon-btn",onClick:n[0]||(n[0]=p=>s(c).toggleSidebar()),title:"切换侧栏"},[t(d,{size:"18"},{default:e(()=>[s(c).sidebarCollapsed?(o(),u(s(Me),{key:1})):(o(),u(s(Ce),{key:0}))]),_:1})]),t(ne,{separator:"/"},{default:e(()=>[t(z,null,{default:e(()=>[m(l(f.value),1)]),_:1}),L.value?(o(),u(z,{key:0},{default:e(()=>[m(l(L.value),1)]),_:1})):P("",!0)]),_:1})]),a("div",Ke,[t(qe),t(ze),a("span",{class:N(["runmode-tag",s(r).runMode])},l(C.value),3),t(le,{trigger:"click",onCommand:ae},{dropdown:e(()=>[t(se,null,{default:e(()=>[t(U,{command:"status"},{default:e(()=>[...n[6]||(n[6]=[m("服务状态",-1)])]),_:1}),t(U,{command:"logout",divided:""},{default:e(()=>[...n[7]||(n[7]=[m("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Qe,[t(oe,{size:"small"},{default:e(()=>[m(l(_.value),1)]),_:1}),a("span",Ye,l(s(r).user?.displayName??"未登录"),1),t(d,null,{default:e(()=>[t(s(X))]),_:1})])]),_:1})])]),_:1}),t(ce,{class:"main mg-content"},{default:e(()=>[t(re,null,{default:e(({Component:p,route:D})=>[p?(o(),u(I(p),{key:D.fullPath,class:"route-page"})):P("",!0)]),_:1})]),_:1}),t(de,{class:"footer"},{default:e(()=>[a("span",null,l(f.value)+" · webVRender :"+l(g.value)+" · API "+l(w.value),1)]),_:1})]),_:1})]),_:1})])}}}),ca=Y(Ze,[["__scopeId","data-v-800dedbc"]]);export{ca as default}; diff --git a/MiGu.Server/wwwroot/assets/AuthRoleView-BSUZTQqc.js b/MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js similarity index 71% rename from MiGu.Server/wwwroot/assets/AuthRoleView-BSUZTQqc.js rename to MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js index 4afc6d6..93c5a6a 100644 --- a/MiGu.Server/wwwroot/assets/AuthRoleView-BSUZTQqc.js +++ b/MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js @@ -1 +1 @@ -import{aQ as k,aE as Se,bp as De,b2 as Te,aA as b,aD as t,bD as s,ah as x,X as c,bc as f,bb as oe,t as Be,G as Oe,b4 as u,ab as Ae,a8 as Ge,ax as v,bk as g,r as je,bn as E,b7 as ue,aC as i,bE as ie,ay as w,a9 as qe,aa as Fe,be as R,ac as Me,az as j,a7 as Le,aI as de,aS as He,aG as re,bu as Qe,bd as We,N as Xe,O as Ye,R as Ze,a3 as Je,Z as Ke,a1 as el,w as ll,H as al,v as tl,u as sl,L as nl,at as X,Y as pe,aj as ol}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */async function ul(){const{data:d}=await k.get("/rbac/catalog");return d}async function il(){const{data:d}=await k.get("/rbac/roles");return d}async function dl(d){if(d.id){const{data:z}=await k.put(`/rbac/roles/${d.id}`,d);return z}const{data:V}=await k.post("/rbac/roles",d);return V}async function rl(d){await k.delete(`/rbac/roles/${d}`)}async function pl(){const{data:d}=await k.get("/rbac/users");return d}async function cl(d){const{data:V}=await k.post("/rbac/users",d);return V}async function ce(d,V){const{data:z}=await k.put(`/rbac/users/${d}`,V);return z}async function ml(d,V){await k.put(`/rbac/users/${d}/password`,{password:V})}async function fl(d){await k.delete(`/rbac/users/${d}`)}const vl={class:"rbac-header"},bl={class:"tab-toolbar"},gl={class:"toolbar-hint"},yl={key:0,class:"muted"},_l={class:"tab-toolbar"},wl={class:"toolbar-hint"},kl={key:1},Vl={key:0,class:"page-picker"},Cl={class:"page-group-head"},El={class:"page-group-title"},Ul={class:"page-group-actions"},$l={key:1,class:"wildcard-hint"},xl=Se({__name:"AuthRoleView",setup(d){const V=De(),z=X(()=>V.user?.id??""),Y=f("users"),S=f(!1),C=f(!1),q=f(null),D=f([]),F=f([]);function me(a){return D.value.find(e=>e.id===a)?.name??a}function G(a){return a==="*"?"通用":a==="Platform"?"管理端":a==="RCSMonitor"?"运营端":a}function fe(a){return a==="*"?"danger":a==="Platform"?"warning":"success"}async function N(){S.value=!0;try{const[a,e,o]=await Promise.all([ul(),il(),pl()]);q.value=a,D.value=e,F.value=o}catch(a){c.error(`加载失败:${$(a)}`)}finally{S.value=!1}}const h=f(!1),n=oe({id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0});function ve(){Object.assign(n,{id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0}),h.value=!0}function be(a){Object.assign(n,{id:a.id,username:a.username,displayName:a.displayName,password:"",roleIds:[...a.roleIds],enabled:a.enabled}),h.value=!0}async function ge(){C.value=!0;try{n.id?(await ce(n.id,{displayName:n.displayName,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已更新")):(await cl({username:n.username,displayName:n.displayName,password:n.password,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已创建")),h.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function ye(a,e){a._busy=!0;try{await ce(a.id,{enabled:e}),a.enabled=e,c.success(e?"已启用":"已停用")}catch(o){c.error($(o))}finally{a._busy=!1}}async function _e(a){try{await pe.confirm(`确定删除用户「${a.username}」?此操作不可恢复。`,"删除确认",{type:"warning"})}catch{return}try{await fl(a.id),c.success("用户已删除"),await N()}catch(e){c.error($(e))}}const T=f(!1),B=f(null),O=f("");function we(a){B.value=a,O.value="",T.value=!0}async function ke(){if(B.value){if(!O.value){c.warning("请输入新密码");return}C.value=!0;try{await ml(B.value.id,O.value),c.success("密码已重置"),T.value=!1}catch(a){c.error($(a))}finally{C.value=!1}}}const I=f(!1),p=oe({id:null,name:"",description:"",scope:"Platform"}),y=f([]),U=f(!1),M=f([]),L=f([]),Z=X(()=>(q.value?.pages??[]).filter(a=>p.scope==="*"||a.scope===p.scope)),J=X(()=>{const a=new Map;for(const e of Z.value)a.has(e.group)||a.set(e.group,[]),a.get(e.group).push(e);return[...a.entries()].map(([e,o])=>({group:e,pages:o}))});function Ve(){Object.assign(p,{id:null,name:"",description:"",scope:"Platform"}),y.value=[],U.value=!1,M.value=[],L.value=[],I.value=!0}function Ce(a){Object.assign(p,{id:a.id,name:a.name,description:a.description,scope:a.scope}),U.value=a.pages.includes("*"),y.value=U.value?[]:[...a.pages],M.value=[...a.ops],L.value=a.widgetGrants.map(e=>({...e})),I.value=!0}function Ee(){const a=new Set(Z.value.map(e=>e.key));y.value=y.value.filter(e=>a.has(e))}function K(a,e){const o=a.map(m=>m.key);e?y.value=[...new Set([...y.value,...o])]:y.value=y.value.filter(m=>!o.includes(m))}async function Ue(){if(!p.name.trim()){c.warning("请填写角色名称");return}C.value=!0;try{await dl({id:p.id??void 0,name:p.name,description:p.description,scope:p.scope,pages:U.value?["*"]:y.value,ops:M.value,widgetGrants:L.value}),c.success(p.id?"角色已更新":"角色已创建"),I.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function $e(a){try{await pe.confirm(`确定删除角色「${a.name}」?`,"删除确认",{type:"warning"})}catch{return}try{await rl(a.id),c.success("角色已删除"),await N()}catch(e){c.error($(e))}}function $(a){return a instanceof Error?a.message:String(a)}return Te(N),(a,e)=>{const o=je,m=Fe,A=Me,H=Le,ee=qe,le=Ge,xe=Ae,Ne=Be,P=Ze,_=Ye,ae=Ke,te=Je,Q=Xe,W=Oe,se=ll,he=el,Ie=al,Pe=sl,Re=tl,ze=nl,ne=Qe;return u(),b(x,null,[t(Ne,{shadow:"never",class:"rbac-card"},{header:s(()=>[v("div",vl,[e[19]||(e[19]=v("div",{class:"rbac-title-wrap"},[v("span",{class:"rbac-title"},"权限与角色管理"),v("span",{class:"rbac-desc"},"为角色分配可访问页面、操作与控件,并为用户指派角色(标准 RBAC)。")],-1)),t(o,{icon:E(We),loading:S.value,onClick:N},{default:s(()=>[...e[18]||(e[18]=[i("刷新",-1)])]),_:1},8,["icon","loading"])])]),default:s(()=>[t(xe,{modelValue:Y.value,"onUpdate:modelValue":e[0]||(e[0]=l=>Y.value=l),class:"rbac-tabs"},{default:s(()=>[t(le,{label:"用户管理",name:"users"},{default:s(()=>[v("div",bl,[v("span",gl,"共 "+g(F.value.length)+" 个用户",1),t(o,{type:"primary",icon:E(ue),onClick:ve},{default:s(()=>[...e[20]||(e[20]=[i("新增用户",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:F.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"用户名",prop:"username",width:"140"}),t(m,{label:"显示名",prop:"displayName",width:"150"}),t(m,{label:"角色","min-width":"200"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.roleIds,r=>(u(),w(A,{key:r,size:"small",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(me(r)),1)]),_:2},1024))),128)),l.roleIds.length?j("",!0):(u(),b("span",yl,"—"))]),_:1}),t(m,{label:"可用域",width:"180"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.scopes,r=>(u(),w(A,{key:r,size:"small",type:"info",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(G(r)),1)]),_:2},1024))),128))]),_:1}),t(m,{label:"启用",width:"90",align:"center"},{default:s(({row:l})=>[t(H,{"model-value":l.enabled,loading:l._busy,onChange:r=>ye(l,!!r)},null,8,["model-value","loading","onChange"])]),_:1}),t(m,{label:"操作",width:"220",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>be(l)},{default:s(()=>[...e[21]||(e[21]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"warning",icon:E(He),onClick:r=>we(l)},{default:s(()=>[...e[22]||(e[22]=[i("改密",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.id===z.value,onClick:r=>_e(l)},{default:s(()=>[...e[23]||(e[23]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,S.value]])]),_:1}),t(le,{label:"角色与页面权限",name:"roles"},{default:s(()=>[v("div",_l,[v("span",wl,"共 "+g(D.value.length)+" 个角色",1),t(o,{type:"primary",icon:E(ue),onClick:Ve},{default:s(()=>[...e[24]||(e[24]=[i("新增角色",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:D.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"角色名称",width:"160"},{default:s(({row:l})=>[v("span",null,g(l.name),1),l.system?(u(),w(A,{key:0,size:"small",type:"success",effect:"plain",class:"mg-tag"},{default:s(()=>[...e[25]||(e[25]=[i("内置",-1)])]),_:1})):j("",!0)]),_:1}),t(m,{label:"描述",prop:"description","min-width":"180","show-overflow-tooltip":""}),t(m,{label:"归属域",width:"120"},{default:s(({row:l})=>[t(A,{size:"small",type:fe(l.scope),effect:"plain"},{default:s(()=>[i(g(G(l.scope)),1)]),_:2},1032,["type"])]),_:1}),t(m,{label:"可访问页面",width:"130",align:"center"},{default:s(({row:l})=>[l.pages.includes("*")?(u(),w(A,{key:0,size:"small",type:"danger",effect:"plain"},{default:s(()=>[...e[26]||(e[26]=[i("全部页面",-1)])]),_:1})):(u(),b("span",kl,g(l.pages.length)+" 个",1))]),_:1}),t(m,{label:"操作",width:"160",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>Ce(l)},{default:s(()=>[...e[27]||(e[27]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.system,onClick:r=>$e(l)},{default:s(()=>[...e[28]||(e[28]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,S.value]])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(W,{modelValue:h.value,"onUpdate:modelValue":e[7]||(e[7]=l=>h.value=l),title:n.id?"编辑用户":"新增用户",width:"480px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[6]||(e[6]=l=>h.value=!1)},{default:s(()=>[...e[29]||(e[29]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ge},{default:s(()=>[...e[30]||(e[30]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(Q,{"label-width":"84px","label-position":"right"},{default:s(()=>[t(_,{label:"用户名",required:""},{default:s(()=>[t(P,{modelValue:n.username,"onUpdate:modelValue":e[1]||(e[1]=l=>n.username=l),disabled:!!n.id,placeholder:"登录用户名"},null,8,["modelValue","disabled"])]),_:1}),t(_,{label:"显示名"},{default:s(()=>[t(P,{modelValue:n.displayName,"onUpdate:modelValue":e[2]||(e[2]=l=>n.displayName=l),placeholder:"界面展示名称(留空则同用户名)"},null,8,["modelValue"])]),_:1}),n.id?j("",!0):(u(),w(_,{key:0,label:"初始密码",required:""},{default:s(()=>[t(P,{modelValue:n.password,"onUpdate:modelValue":e[3]||(e[3]=l=>n.password=l),type:"password","show-password":"",placeholder:"设置初始登录密码"},null,8,["modelValue"])]),_:1})),t(_,{label:"角色"},{default:s(()=>[t(te,{modelValue:n.roleIds,"onUpdate:modelValue":e[4]||(e[4]=l=>n.roleIds=l),multiple:"",filterable:"",placeholder:"选择一个或多个角色",style:{width:"100%"}},{default:s(()=>[(u(!0),b(x,null,R(D.value,l=>(u(),w(ae,{key:l.id,label:`${l.name}(${G(l.scope)})`,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(_,{label:"启用"},{default:s(()=>[t(H,{modelValue:n.enabled,"onUpdate:modelValue":e[5]||(e[5]=l=>n.enabled=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"]),t(W,{modelValue:T.value,"onUpdate:modelValue":e[10]||(e[10]=l=>T.value=l),title:"重置密码",width:"420px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[9]||(e[9]=l=>T.value=!1)},{default:s(()=>[...e[31]||(e[31]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ke},{default:s(()=>[...e[32]||(e[32]=[i("确定",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(Q,{"label-width":"84px"},{default:s(()=>[t(_,{label:"用户"},{default:s(()=>[v("span",null,g(B.value?.displayName)+"("+g(B.value?.username)+")",1)]),_:1}),t(_,{label:"新密码",required:""},{default:s(()=>[t(P,{modelValue:O.value,"onUpdate:modelValue":e[8]||(e[8]=l=>O.value=l),type:"password","show-password":"",placeholder:"输入新密码"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(W,{modelValue:I.value,"onUpdate:modelValue":e[17]||(e[17]=l=>I.value=l),title:p.id?"编辑角色":"新增角色",width:"760px",top:"6vh","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[16]||(e[16]=l=>I.value=!1)},{default:s(()=>[...e[36]||(e[36]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:Ue},{default:s(()=>[...e[37]||(e[37]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(Q,{"label-width":"92px","label-position":"right"},{default:s(()=>[t(he,{gutter:12},{default:s(()=>[t(se,{span:12},{default:s(()=>[t(_,{label:"角色名称",required:""},{default:s(()=>[t(P,{modelValue:p.name,"onUpdate:modelValue":e[11]||(e[11]=l=>p.name=l),placeholder:"如:场景设计员"},null,8,["modelValue"])]),_:1})]),_:1}),t(se,{span:12},{default:s(()=>[t(_,{label:"归属域",required:""},{default:s(()=>[t(te,{modelValue:p.scope,"onUpdate:modelValue":e[12]||(e[12]=l=>p.scope=l),style:{width:"100%"},onChange:Ee},{default:s(()=>[(u(!0),b(x,null,R(q.value?.scopes??[],l=>(u(),w(ae,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),t(_,{label:"描述"},{default:s(()=>[t(P,{modelValue:p.description,"onUpdate:modelValue":e[13]||(e[13]=l=>p.description=l),placeholder:"角色用途说明"},null,8,["modelValue"])]),_:1}),t(Ie,{"content-position":"left"},{default:s(()=>[...e[33]||(e[33]=[i("可访问页面",-1)])]),_:1}),t(_,{label:"授权方式"},{default:s(()=>[t(H,{modelValue:U.value,"onUpdate:modelValue":e[14]||(e[14]=l=>U.value=l),"active-text":"该域全部页面(含未来新增)","inactive-text":"按页面精确勾选","inline-prompt":"",style:{"--el-switch-on-color":"var(--mg-primary, #6366f1)"}},null,8,["modelValue"])]),_:1}),U.value?(u(),b("div",$l,"已授予「"+g(G(p.scope))+"」下的全部页面(包括未来新增的页面)。",1)):(u(),b("div",Vl,[(u(!0),b(x,null,R(J.value,l=>(u(),b("div",{key:l.group,class:"page-group"},[v("div",Cl,[v("span",El,g(l.group),1),v("span",Ul,[t(o,{link:"",type:"primary",size:"small",onClick:r=>K(l.pages,!0)},{default:s(()=>[...e[34]||(e[34]=[i("全选",-1)])]),_:1},8,["onClick"]),t(o,{link:"",type:"info",size:"small",onClick:r=>K(l.pages,!1)},{default:s(()=>[...e[35]||(e[35]=[i("清空",-1)])]),_:1},8,["onClick"])])]),t(Re,{modelValue:y.value,"onUpdate:modelValue":e[15]||(e[15]=r=>y.value=r),class:"page-checks"},{default:s(()=>[(u(!0),b(x,null,R(l.pages,r=>(u(),w(Pe,{key:r.key,value:r.key,label:r.key},{default:s(()=>[i(g(r.label),1)]),_:2},1032,["value","label"]))),128))]),_:2},1032,["modelValue"])]))),128)),J.value.length?j("",!0):(u(),w(ze,{key:0,description:"该域暂无可分配页面","image-size":60}))]))]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Xl=ol(xl,[["__scopeId","data-v-2392979d"]]);export{Xl as default}; +import{aS as k,aG as Se,bt as Be,b5 as Te,aC as b,aF as t,bH as s,ah as h,X as c,bf as f,be as oe,t as De,G as Oe,b7 as u,ab as Ae,a8 as Fe,az as v,bo as g,r as Ge,br as E,ba as ue,aE as i,bI as ie,aA as w,a9 as je,aa as qe,bh as R,ac as Me,aB as G,a7 as Le,aK as de,aU as He,aI as re,by as Ke,bg as We,N as Xe,O as Ye,R as Ze,a3 as Je,Z as Qe,a1 as el,w as ll,H as al,v as tl,u as sl,L as nl,av as X,Y as pe,aj as ol}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */async function ul(){const{data:d}=await k.get("/rbac/catalog");return d}async function il(){const{data:d}=await k.get("/rbac/roles");return d}async function dl(d){if(d.id){const{data:z}=await k.put(`/rbac/roles/${d.id}`,d);return z}const{data:V}=await k.post("/rbac/roles",d);return V}async function rl(d){await k.delete(`/rbac/roles/${d}`)}async function pl(){const{data:d}=await k.get("/rbac/users");return d}async function cl(d){const{data:V}=await k.post("/rbac/users",d);return V}async function ce(d,V){const{data:z}=await k.put(`/rbac/users/${d}`,V);return z}async function ml(d,V){await k.put(`/rbac/users/${d}/password`,{password:V})}async function fl(d){await k.delete(`/rbac/users/${d}`)}const vl={class:"rbac-header"},bl={class:"tab-toolbar"},gl={class:"toolbar-hint"},yl={key:0,class:"muted"},_l={class:"tab-toolbar"},wl={class:"toolbar-hint"},kl={key:1},Vl={key:0,class:"page-picker"},Cl={class:"page-group-head"},El={class:"page-group-title"},Ul={class:"page-group-actions"},$l={key:1,class:"wildcard-hint"},hl=Se({__name:"AuthRoleView",setup(d){const V=Be(),z=X(()=>V.user?.id??""),Y=f("users"),S=f(!1),C=f(!1),j=f(null),B=f([]),q=f([]);function me(a){return B.value.find(e=>e.id===a)?.name??a}function F(a){return a==="*"?"通用":a==="Platform"?"管理端":a==="RCSMonitor"?"运营端":a}function fe(a){return a==="*"?"danger":a==="Platform"?"warning":"success"}async function x(){S.value=!0;try{const[a,e,o]=await Promise.all([ul(),il(),pl()]);j.value=a,B.value=e,q.value=o}catch(a){c.error(`加载失败:${$(a)}`)}finally{S.value=!1}}const I=f(!1),n=oe({id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0});function ve(){Object.assign(n,{id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0}),I.value=!0}function be(a){Object.assign(n,{id:a.id,username:a.username,displayName:a.displayName,password:"",roleIds:[...a.roleIds],enabled:a.enabled}),I.value=!0}async function ge(){C.value=!0;try{n.id?(await ce(n.id,{displayName:n.displayName,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已更新")):(await cl({username:n.username,displayName:n.displayName,password:n.password,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已创建")),I.value=!1,await x()}catch(a){c.error($(a))}finally{C.value=!1}}async function ye(a,e){a._busy=!0;try{await ce(a.id,{enabled:e}),a.enabled=e,c.success(e?"已启用":"已停用")}catch(o){c.error($(o))}finally{a._busy=!1}}async function _e(a){try{await pe.confirm(`确定删除用户「${a.username}」?此操作不可恢复。`,"删除确认",{type:"warning"})}catch{return}try{await fl(a.id),c.success("用户已删除"),await x()}catch(e){c.error($(e))}}const T=f(!1),D=f(null),O=f("");function we(a){D.value=a,O.value="",T.value=!0}async function ke(){if(D.value){if(!O.value){c.warning("请输入新密码");return}C.value=!0;try{await ml(D.value.id,O.value),c.success("密码已重置"),T.value=!1}catch(a){c.error($(a))}finally{C.value=!1}}}const N=f(!1),p=oe({id:null,name:"",description:"",scope:"Platform"}),y=f([]),U=f(!1),M=f([]),L=f([]),Z=X(()=>(j.value?.pages??[]).filter(a=>p.scope==="*"||a.scope===p.scope)),J=X(()=>{const a=new Map;for(const e of Z.value)a.has(e.group)||a.set(e.group,[]),a.get(e.group).push(e);return[...a.entries()].map(([e,o])=>({group:e,pages:o}))});function Ve(){Object.assign(p,{id:null,name:"",description:"",scope:"Platform"}),y.value=[],U.value=!1,M.value=[],L.value=[],N.value=!0}function Ce(a){Object.assign(p,{id:a.id,name:a.name,description:a.description,scope:a.scope}),U.value=a.pages.includes("*"),y.value=U.value?[]:[...a.pages],M.value=[...a.ops],L.value=a.widgetGrants.map(e=>({...e})),N.value=!0}function Ee(){const a=new Set(Z.value.map(e=>e.key));y.value=y.value.filter(e=>a.has(e))}function Q(a,e){const o=a.map(m=>m.key);e?y.value=[...new Set([...y.value,...o])]:y.value=y.value.filter(m=>!o.includes(m))}async function Ue(){if(!p.name.trim()){c.warning("请填写角色名称");return}C.value=!0;try{await dl({id:p.id??void 0,name:p.name,description:p.description,scope:p.scope,pages:U.value?["*"]:y.value,ops:M.value,widgetGrants:L.value}),c.success(p.id?"角色已更新":"角色已创建"),N.value=!1,await x()}catch(a){c.error($(a))}finally{C.value=!1}}async function $e(a){try{await pe.confirm(`确定删除角色「${a.name}」?`,"删除确认",{type:"warning"})}catch{return}try{await rl(a.id),c.success("角色已删除"),await x()}catch(e){c.error($(e))}}function $(a){return a instanceof Error?a.message:String(a)}return Te(x),(a,e)=>{const o=Ge,m=qe,A=Me,H=Le,ee=je,le=Fe,he=Ae,xe=De,P=Ze,_=Ye,ae=Qe,te=Je,K=Xe,W=Oe,se=ll,Ie=el,Ne=al,Pe=sl,Re=tl,ze=nl,ne=Ke;return u(),b(h,null,[t(xe,{shadow:"never",class:"rbac-card"},{header:s(()=>[v("div",vl,[e[19]||(e[19]=v("div",{class:"rbac-title-wrap"},[v("span",{class:"rbac-title"},"权限与角色管理"),v("span",{class:"rbac-desc"},"为角色分配可访问页面、操作与控件,并为用户指派角色(标准 RBAC)。")],-1)),t(o,{icon:E(We),loading:S.value,onClick:x},{default:s(()=>[...e[18]||(e[18]=[i("刷新",-1)])]),_:1},8,["icon","loading"])])]),default:s(()=>[t(he,{modelValue:Y.value,"onUpdate:modelValue":e[0]||(e[0]=l=>Y.value=l),class:"rbac-tabs"},{default:s(()=>[t(le,{label:"用户管理",name:"users"},{default:s(()=>[v("div",bl,[v("span",gl,"共 "+g(q.value.length)+" 个用户",1),t(o,{type:"primary",icon:E(ue),onClick:ve},{default:s(()=>[...e[20]||(e[20]=[i("新增用户",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:q.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"用户名",prop:"username",width:"140"}),t(m,{label:"显示名",prop:"displayName",width:"150"}),t(m,{label:"角色","min-width":"200"},{default:s(({row:l})=>[(u(!0),b(h,null,R(l.roleIds,r=>(u(),w(A,{key:r,size:"small",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(me(r)),1)]),_:2},1024))),128)),l.roleIds.length?G("",!0):(u(),b("span",yl,"—"))]),_:1}),t(m,{label:"可用域",width:"180"},{default:s(({row:l})=>[(u(!0),b(h,null,R(l.scopes,r=>(u(),w(A,{key:r,size:"small",type:"info",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(F(r)),1)]),_:2},1024))),128))]),_:1}),t(m,{label:"启用",width:"90",align:"center"},{default:s(({row:l})=>[t(H,{"model-value":l.enabled,loading:l._busy,onChange:r=>ye(l,!!r)},null,8,["model-value","loading","onChange"])]),_:1}),t(m,{label:"操作",width:"220",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>be(l)},{default:s(()=>[...e[21]||(e[21]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"warning",icon:E(He),onClick:r=>we(l)},{default:s(()=>[...e[22]||(e[22]=[i("改密",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.id===z.value,onClick:r=>_e(l)},{default:s(()=>[...e[23]||(e[23]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,S.value]])]),_:1}),t(le,{label:"角色与页面权限",name:"roles"},{default:s(()=>[v("div",_l,[v("span",wl,"共 "+g(B.value.length)+" 个角色",1),t(o,{type:"primary",icon:E(ue),onClick:Ve},{default:s(()=>[...e[24]||(e[24]=[i("新增角色",-1)])]),_:1},8,["icon"])]),ie((u(),w(ee,{data:B.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"角色名称",width:"160"},{default:s(({row:l})=>[v("span",null,g(l.name),1),l.system?(u(),w(A,{key:0,size:"small",type:"success",effect:"plain",class:"mg-tag"},{default:s(()=>[...e[25]||(e[25]=[i("内置",-1)])]),_:1})):G("",!0)]),_:1}),t(m,{label:"描述",prop:"description","min-width":"180","show-overflow-tooltip":""}),t(m,{label:"归属域",width:"120"},{default:s(({row:l})=>[t(A,{size:"small",type:fe(l.scope),effect:"plain"},{default:s(()=>[i(g(F(l.scope)),1)]),_:2},1032,["type"])]),_:1}),t(m,{label:"可访问页面",width:"130",align:"center"},{default:s(({row:l})=>[l.pages.includes("*")?(u(),w(A,{key:0,size:"small",type:"danger",effect:"plain"},{default:s(()=>[...e[26]||(e[26]=[i("全部页面",-1)])]),_:1})):(u(),b("span",kl,g(l.pages.length)+" 个",1))]),_:1}),t(m,{label:"操作",width:"160",align:"center"},{default:s(({row:l})=>[t(o,{link:"",type:"primary",icon:E(de),onClick:r=>Ce(l)},{default:s(()=>[...e[27]||(e[27]=[i("编辑",-1)])]),_:1},8,["icon","onClick"]),t(o,{link:"",type:"danger",icon:E(re),disabled:l.system,onClick:r=>$e(l)},{default:s(()=>[...e[28]||(e[28]=[i("删除",-1)])]),_:1},8,["icon","disabled","onClick"])]),_:1})]),_:1},8,["data"])),[[ne,S.value]])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(W,{modelValue:I.value,"onUpdate:modelValue":e[7]||(e[7]=l=>I.value=l),title:n.id?"编辑用户":"新增用户",width:"480px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[6]||(e[6]=l=>I.value=!1)},{default:s(()=>[...e[29]||(e[29]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ge},{default:s(()=>[...e[30]||(e[30]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"84px","label-position":"right"},{default:s(()=>[t(_,{label:"用户名",required:""},{default:s(()=>[t(P,{modelValue:n.username,"onUpdate:modelValue":e[1]||(e[1]=l=>n.username=l),disabled:!!n.id,placeholder:"登录用户名"},null,8,["modelValue","disabled"])]),_:1}),t(_,{label:"显示名"},{default:s(()=>[t(P,{modelValue:n.displayName,"onUpdate:modelValue":e[2]||(e[2]=l=>n.displayName=l),placeholder:"界面展示名称(留空则同用户名)"},null,8,["modelValue"])]),_:1}),n.id?G("",!0):(u(),w(_,{key:0,label:"初始密码",required:""},{default:s(()=>[t(P,{modelValue:n.password,"onUpdate:modelValue":e[3]||(e[3]=l=>n.password=l),type:"password","show-password":"",placeholder:"设置初始登录密码"},null,8,["modelValue"])]),_:1})),t(_,{label:"角色"},{default:s(()=>[t(te,{modelValue:n.roleIds,"onUpdate:modelValue":e[4]||(e[4]=l=>n.roleIds=l),multiple:"",filterable:"",placeholder:"选择一个或多个角色",style:{width:"100%"}},{default:s(()=>[(u(!0),b(h,null,R(B.value,l=>(u(),w(ae,{key:l.id,label:`${l.name}(${F(l.scope)})`,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(_,{label:"启用"},{default:s(()=>[t(H,{modelValue:n.enabled,"onUpdate:modelValue":e[5]||(e[5]=l=>n.enabled=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"]),t(W,{modelValue:T.value,"onUpdate:modelValue":e[10]||(e[10]=l=>T.value=l),title:"重置密码",width:"420px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[9]||(e[9]=l=>T.value=!1)},{default:s(()=>[...e[31]||(e[31]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ke},{default:s(()=>[...e[32]||(e[32]=[i("确定",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"84px"},{default:s(()=>[t(_,{label:"用户"},{default:s(()=>[v("span",null,g(D.value?.displayName)+"("+g(D.value?.username)+")",1)]),_:1}),t(_,{label:"新密码",required:""},{default:s(()=>[t(P,{modelValue:O.value,"onUpdate:modelValue":e[8]||(e[8]=l=>O.value=l),type:"password","show-password":"",placeholder:"输入新密码"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(W,{modelValue:N.value,"onUpdate:modelValue":e[17]||(e[17]=l=>N.value=l),title:p.id?"编辑角色":"新增角色",width:"760px",top:"6vh","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[16]||(e[16]=l=>N.value=!1)},{default:s(()=>[...e[36]||(e[36]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:Ue},{default:s(()=>[...e[37]||(e[37]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"92px","label-position":"right"},{default:s(()=>[t(Ie,{gutter:12},{default:s(()=>[t(se,{span:12},{default:s(()=>[t(_,{label:"角色名称",required:""},{default:s(()=>[t(P,{modelValue:p.name,"onUpdate:modelValue":e[11]||(e[11]=l=>p.name=l),placeholder:"如:场景设计员"},null,8,["modelValue"])]),_:1})]),_:1}),t(se,{span:12},{default:s(()=>[t(_,{label:"归属域",required:""},{default:s(()=>[t(te,{modelValue:p.scope,"onUpdate:modelValue":e[12]||(e[12]=l=>p.scope=l),style:{width:"100%"},onChange:Ee},{default:s(()=>[(u(!0),b(h,null,R(j.value?.scopes??[],l=>(u(),w(ae,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),t(_,{label:"描述"},{default:s(()=>[t(P,{modelValue:p.description,"onUpdate:modelValue":e[13]||(e[13]=l=>p.description=l),placeholder:"角色用途说明"},null,8,["modelValue"])]),_:1}),t(Ne,{"content-position":"left"},{default:s(()=>[...e[33]||(e[33]=[i("可访问页面",-1)])]),_:1}),t(_,{label:"授权方式"},{default:s(()=>[t(H,{modelValue:U.value,"onUpdate:modelValue":e[14]||(e[14]=l=>U.value=l),"active-text":"该域全部页面(含未来新增)","inactive-text":"按页面精确勾选","inline-prompt":"",style:{"--el-switch-on-color":"var(--mg-primary, #6366f1)"}},null,8,["modelValue"])]),_:1}),U.value?(u(),b("div",$l,"已授予「"+g(F(p.scope))+"」下的全部页面(包括未来新增的页面)。",1)):(u(),b("div",Vl,[(u(!0),b(h,null,R(J.value,l=>(u(),b("div",{key:l.group,class:"page-group"},[v("div",Cl,[v("span",El,g(l.group),1),v("span",Ul,[t(o,{link:"",type:"primary",size:"small",onClick:r=>Q(l.pages,!0)},{default:s(()=>[...e[34]||(e[34]=[i("全选",-1)])]),_:1},8,["onClick"]),t(o,{link:"",type:"info",size:"small",onClick:r=>Q(l.pages,!1)},{default:s(()=>[...e[35]||(e[35]=[i("清空",-1)])]),_:1},8,["onClick"])])]),t(Re,{modelValue:y.value,"onUpdate:modelValue":e[15]||(e[15]=r=>y.value=r),class:"page-checks"},{default:s(()=>[(u(!0),b(h,null,R(l.pages,r=>(u(),w(Pe,{key:r.key,value:r.key,label:r.key},{default:s(()=>[i(g(r.label),1)]),_:2},1032,["value","label"]))),128))]),_:2},1032,["modelValue"])]))),128)),J.value.length?G("",!0):(u(),w(ze,{key:0,description:"该域暂无可分配页面","image-size":60}))]))]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Xl=ol(hl,[["__scopeId","data-v-2392979d"]]);export{Xl as default}; diff --git a/MiGu.Server/wwwroot/assets/CarPanelView-Cd4CJJOn.js b/MiGu.Server/wwwroot/assets/CarPanelView-BBup3icl.js similarity index 71% rename from MiGu.Server/wwwroot/assets/CarPanelView-Cd4CJJOn.js rename to MiGu.Server/wwwroot/assets/CarPanelView-BBup3icl.js index b54d31e..1454275 100644 --- a/MiGu.Server/wwwroot/assets/CarPanelView-Cd4CJJOn.js +++ b/MiGu.Server/wwwroot/assets/CarPanelView-BBup3icl.js @@ -1 +1 @@ -import{aE as W,b4 as y,ay as $,N as ae,bD as l,aD as a,a1 as se,w as oe,O as ne,S as re,a7 as ie,z as Q,ax as r,bk as w,R as de,r as X,aC as f,az as P,at as Y,bc as N,aj as H,b2 as J,bE as ue,bu as ce,aA as j,t as pe,ac as me,ah as q,be as G,x as fe,Q as ye,bn as ve,bd as _e,bb as K,X as V,Y as be,y as ge,L as ke,ab as Ce,a8 as Ee}from"./index-C6ULY2Si.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-BCWRRPd3.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as B}from"./reflection-CKXyOCM_.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./useMapEditStream-CS7BmW9Q.js";import"./useProjectionStream-BoSdoSNC.js";const $e={class:"cse-color-code"},Ie={class:"cse-color-code"},Se={class:"cse-color-code"},Ae={class:"cse-model-row"},Ve=W({__name:"CarStyleEditorForm",props:{typeFullName:{},modelValue:{},hasOverride:{type:Boolean},saving:{type:Boolean}},emits:["update:modelValue","save","reset"],setup(D,{emit:C}){const x=D,b=C,c=Y(()=>x.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const I=N(null);function g(){I.value?.click()}function M(n){const t=n.target,v=t.files?.[0];v&&(m({modelPath:v.name}),t.value="")}function T(n){const t=n>>>24&255,v=n>>>16&255,p=n>>>8&255,_=n&255,E=z=>z.toString(16).padStart(2,"0");return`${E(v)}${E(p)}${E(_)}${E(t)}`}function h(n){const t=n.replace(/^#/,"");if(t.length===6){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(255<<24|v<<16|p<<8|_)>>>0}if(t.length===8){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(parseInt(t.slice(6,8),16)<<24|v<<16|p<<8|_)>>>0}return 0}return(n,t)=>{const v=re,p=ne,_=oe,E=ie,z=se,S=Q,O=X,R=de,F=ae;return y(),$(F,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.bodyColorArgb),"show-alpha":"","onUpdate:modelValue":t[3]||(t[3]=u=>m({bodyColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",$e,"#"+w(T(c.value.bodyColorArgb).toUpperCase()),1),t[9]||(t[9]=r("span",{class:"cse-color-hint"},"无报警/上线时生效",-1))]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"描边颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.outlineColorArgb),"show-alpha":"","onUpdate:modelValue":t[4]||(t[4]=u=>m({outlineColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ie,"#"+w(T(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.labelColorArgb),"show-alpha":"","onUpdate:modelValue":t[5]||(t[5]=u=>m({labelColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Se,"#"+w(T(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Ae,[a(R,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(O,{onClick:g},{default:l(()=>[...t[10]||(t[10]=[f("浏览…",-1)])]),_:1})]),_:1},8,["model-value"]),r("input",{ref_key:"fileInput",ref:I,type:"file",accept:".glb,.gltf,.obj,.fbx",style:{display:"none"},onChange:M},null,544)]),t[11]||(t[11]=r("p",{class:"cse-model-hint"}," 现版本仅记录文件路径作为元信息。3D 渲染替代矩形将在后续阶段实现(CycleGUI Workspace LoadModel)。 如需上传文件到服务器请先用其它方式将模型放到 SimpleLite 可访问的相对路径。 ",-1))]),_:1}),a(p,null,{default:l(()=>[a(O,{type:"primary",loading:D.saving,onClick:t[7]||(t[7]=u=>n.$emit("save"))},{default:l(()=>[...t[12]||(t[12]=[f("保存此车型",-1)])]),_:1},8,["loading"]),D.hasOverride?(y(),$(O,{key:0,type:"warning",plain:"",onClick:t[8]||(t[8]=u=>n.$emit("reset"))},{default:l(()=>[...t[13]||(t[13]=[f("恢复为默认",-1)])]),_:1})):P("",!0)]),_:1})]),_:1},8,["model"])}}}),xe=H(Ve,[["__scopeId","data-v-3cdad944"]]),Te={class:"cse-root"},Ue={class:"cse-card-header"},we={class:"cse-desc"},he={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},De={class:"cse-palette-pickers"},Oe={class:"cse-color-code"},Le={class:"cse-card-header"},Be={class:"cse-row-title"},je={class:"cse-row-name"},Me={class:"cse-row-fqn"},Re=W({__name:"CarStyleEditor",setup(D,{expose:C}){const x=N(!1),b=N(!1),c=N(!1),m=N(null),I=N([]),g=K({}),M=N(void 0),T=N([]),h=N([]),n=K({}),t=K({}),v=Y(()=>{const s=new Set([...Object.keys(n),...Object.keys(t)]);for(const e of s)if(n[e]!==t[e])return!0;return!1});function p(s){return n[s]??0}function _(s,e){n[s]=e?z(e):0}function E(s){const e=s>>>24&255,i=s>>>16&255,k=s>>>8&255,A=s&255,o=U=>U.toString(16).padStart(2,"0");return`${o(i)}${o(k)}${o(A)}${o(e)}`}function z(s){const e=s.replace(/^#/,"");if(e.length===6){const i=parseInt(e.slice(0,2),16),k=parseInt(e.slice(2,4),16),A=parseInt(e.slice(4,6),16);return(255<<24|i<<16|k<<8|A)>>>0}if(e.length===8){const i=parseInt(e.slice(0,2),16),k=parseInt(e.slice(2,4),16),A=parseInt(e.slice(4,6),16);return(parseInt(e.slice(6,8),16)<<24|i<<16|k<<8|A)>>>0}return 0}async function S(){x.value=!0;try{const s=await B.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await B.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];I.value=i;for(const o of i)g[o.typeName]={...o.style};for(const o of Object.keys(g))i.find(U=>U.typeName===o)||delete g[o];const k=Array.isArray(e?.entries)?e.entries:[],A=Array.isArray(e?.defaultKeys)?e.defaultKeys:[];T.value=A,h.value=k;for(const o of Object.keys(n))delete n[o];for(const o of Object.keys(t))delete t[o];for(const o of k){if(!o?.key)continue;const U=Number(o.colorArgb)>>>0;n[o.key]=U,t[o.key]=U}(!s||!e)&&V.warning("车型样式 / 报警颜色加载部分失败,请确认 SimpleLite 已启动(端口 8222)。")}catch(s){V.error(`加载车型样式失败:${s.message}`)}finally{x.value=!1}}async function O(){if(v.value){b.value=!0;try{await B.putAlarmColors({...n}),V.success("调色板已写入并生效"),await S()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function R(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function F(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await B.putCarStyle(s.typeName,e);g[s.typeName]={...i},s.hasOverride=!0,V.success(`已保存 ${s.label} 车型样式`)}catch(i){V.error(`保存 ${s.label} 失败:${i.message}`)}finally{m.value=null}}}async function u(s){try{await be.confirm(`把 ${s.label} (${s.typeName}) 的样式恢复为全局默认?删除条目后将与未覆盖车型一致。`,"恢复默认",{confirmButtonText:"恢复",cancelButtonText:"取消",type:"warning"})}catch{return}try{await B.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await S()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return J(S),C({refresh:S}),(s,e)=>{const i=me,k=X,A=Q,o=pe,U=ye,Z=ge,ee=fe,te=ke,le=ce;return ue((y(),j("div",Te,[a(o,{shadow:"never",class:"cse-card"},{header:l(()=>[r("div",Ue,[e[4]||(e[4]=r("span",{class:"cse-card-title"},"报警 / 状态调色板",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[1]||(e[1]=[f("7 种默认状态",-1)])]),_:1}),e[5]||(e[5]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",loading:c.value,onClick:R},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(k,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:O},{default:l(()=>[...e[3]||(e[3]=[f(" 保存调色板(写入 simple.json) ",-1)])]),_:1},8,["disabled","loading"])])]),default:l(()=>[r("p",we,[e[9]||(e[9]=f(" 车体颜色的判定优先级: ",-1)),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[6]||(e[6]=[f("1. AlarmInfo 非空 → 「报警」",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[7]||(e[7]=[f("2. lstatus 包含关键字 → 对应键",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[8]||(e[8]=[f("3. 兜底 → 上下线默认色",-1)])]),_:1}),e[10]||(e[10]=f(" 修改下方颜色 + 「保存调色板」即时生效。 ",-1))]),r("div",he,[(y(!0),j(q,null,G(h.value,d=>(y(),j("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,w(d.key),1),d.isDefault?P("",!0):(y(),$(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",De,[a(A,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":L=>_(d.key,L)},null,8,["model-value","onUpdate:modelValue"]),r("code",Oe,"#"+w(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",Le,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(w(I.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",onClick:S},{default:l(()=>[a(U,null,{default:l(()=>[a(ve(_e))]),_:1}),e[12]||(e[12]=r("span",{class:"cse-btn-text"},"刷新",-1))]),_:1})])]),default:l(()=>[e[17]||(e[17]=r("p",{class:"cse-desc"}," 点击车型行展开编辑:尺寸(米)、车体 / 描边 / 标签颜色、是否显示名称、3D 模型文件路径。 每辆车按 .NET 类型 (`assemblyName::shortName`) 索引样式。修改后点行内「保存」即时写入并生效。 ",-1)),a(ee,{modelValue:M.value,"onUpdate:modelValue":e[0]||(e[0]=d=>M.value=d),accordion:""},{default:l(()=>[(y(!0),j(q,null,G(I.value,d=>(y(),$(Z,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",Be,[r("span",je,w(d.label),1),r("code",Me,w(d.typeName),1),d.hasOverride?(y(),$(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),$(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),$(xe,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":L=>g[d.typeName]=L,onSave:L=>F(d),onReset:L=>u(d)},null,8,["type-full-name","model-value","has-override","saving","onUpdate:modelValue","onSave","onReset"])):P("",!0)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),!x.value&&I.value.length===0?(y(),$(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,x.value]])}}}),Fe=H(Re,[["__scopeId","data-v-3af8f925"]]),Ke={class:"car-page"},We=W({__name:"CarPanelView",setup(D){const C=N("list");function x(b){C.value=b,sessionStorage.setItem("admin.cars.tab",C.value)}return J(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(C.value=b)}),(b,c)=>{const m=Ee,I=Ce;return y(),j("div",Ke,[a(I,{modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=g=>C.value=g),type:"border-card",class:"car-tabs admin-tabs",onTabChange:x},{default:l(()=>[a(m,{label:"车辆列表",name:"list"},{default:l(()=>[C.value==="list"?(y(),$(Ne,{key:0,kind:"car","kind-label":"车辆",title:"车辆管理(Car / AbstractCar,含模拟车、插件车型 reflectionApi 实例化)","empty-text":"当前没有车辆;点击右上角「新建车辆」从已加载的 CarType 中选一个实例化。"})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[C.value==="style"?(y(),$(Fe,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ct=H(We,[["__scopeId","data-v-c3733824"]]);export{Ct as default}; +import{aG as H,b7 as y,aA as $,N as ae,bH as l,aF as a,a1 as se,w as oe,O as ne,S as re,a7 as ie,z as Q,az as r,bo as h,R as de,r as X,aE as f,aB as P,av as Y,bf as N,aj as W,b5 as J,bI as ue,by as ce,aC as j,t as pe,ac as me,ah as G,bh as q,x as fe,Q as ye,br as ve,bg as _e,be as K,X as V,Y as be,y as ge,L as ke,ab as Ce,a8 as Ee}from"./index-D5OuyicD.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-Hhb-p5RK.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as D}from"./reflection-BmVSriDn.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const $e={class:"cse-color-code"},Ie={class:"cse-color-code"},Se={class:"cse-color-code"},Ae={class:"cse-model-row"},Ve=H({__name:"CarStyleEditorForm",props:{typeFullName:{},modelValue:{},hasOverride:{type:Boolean},saving:{type:Boolean}},emits:["update:modelValue","save","reset"],setup(O,{emit:C}){const x=O,b=C,c=Y(()=>x.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const I=N(null);function g(){I.value?.click()}function M(n){const t=n.target,v=t.files?.[0];v&&(m({modelPath:v.name}),t.value="")}function T(n){const t=n>>>24&255,v=n>>>16&255,p=n>>>8&255,_=n&255,E=z=>z.toString(16).padStart(2,"0");return`${E(v)}${E(p)}${E(_)}${E(t)}`}function w(n){const t=n.replace(/^#/,"");if(t.length===6){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(255<<24|v<<16|p<<8|_)>>>0}if(t.length===8){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(parseInt(t.slice(6,8),16)<<24|v<<16|p<<8|_)>>>0}return 0}return(n,t)=>{const v=re,p=ne,_=oe,E=ie,z=se,S=Q,B=X,F=de,R=ae;return y(),$(R,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.bodyColorArgb),"show-alpha":"","onUpdate:modelValue":t[3]||(t[3]=u=>m({bodyColorArgb:u?w(u):0}))},null,8,["model-value"]),r("code",$e,"#"+h(T(c.value.bodyColorArgb).toUpperCase()),1),t[9]||(t[9]=r("span",{class:"cse-color-hint"},"无报警/上线时生效",-1))]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"描边颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.outlineColorArgb),"show-alpha":"","onUpdate:modelValue":t[4]||(t[4]=u=>m({outlineColorArgb:u?w(u):0}))},null,8,["model-value"]),r("code",Ie,"#"+h(T(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.labelColorArgb),"show-alpha":"","onUpdate:modelValue":t[5]||(t[5]=u=>m({labelColorArgb:u?w(u):0}))},null,8,["model-value"]),r("code",Se,"#"+h(T(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Ae,[a(F,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(B,{onClick:g},{default:l(()=>[...t[10]||(t[10]=[f("浏览…",-1)])]),_:1})]),_:1},8,["model-value"]),r("input",{ref_key:"fileInput",ref:I,type:"file",accept:".glb,.gltf,.obj,.fbx",style:{display:"none"},onChange:M},null,544)]),t[11]||(t[11]=r("p",{class:"cse-model-hint"}," 现版本仅记录文件路径作为元信息。3D 渲染替代矩形将在后续阶段实现(CycleGUI Workspace LoadModel)。 如需上传文件到服务器请先用其它方式将模型放到 SimpleLite 可访问的相对路径。 ",-1))]),_:1}),a(p,null,{default:l(()=>[a(B,{type:"primary",loading:O.saving,onClick:t[7]||(t[7]=u=>n.$emit("save"))},{default:l(()=>[...t[12]||(t[12]=[f("保存此车型",-1)])]),_:1},8,["loading"]),O.hasOverride?(y(),$(B,{key:0,type:"warning",plain:"",onClick:t[8]||(t[8]=u=>n.$emit("reset"))},{default:l(()=>[...t[13]||(t[13]=[f("恢复为默认",-1)])]),_:1})):P("",!0)]),_:1})]),_:1},8,["model"])}}}),xe=W(Ve,[["__scopeId","data-v-3cdad944"]]),Te={class:"cse-root"},Ue={class:"cse-card-header"},he={class:"cse-desc"},we={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},Oe={class:"cse-palette-pickers"},Be={class:"cse-color-code"},Le={class:"cse-card-header"},De={class:"cse-row-title"},je={class:"cse-row-name"},Me={class:"cse-row-fqn"},Fe=H({__name:"CarStyleEditor",setup(O,{expose:C}){const x=N(!1),b=N(!1),c=N(!1),m=N(null),I=N([]),g=K({}),M=N(void 0),T=N([]),w=N([]),n=K({}),t=K({}),v=Y(()=>{const s=new Set([...Object.keys(n),...Object.keys(t)]);for(const e of s)if(n[e]!==t[e])return!0;return!1});function p(s){return n[s]??0}function _(s,e){n[s]=e?z(e):0}function E(s){const e=s>>>24&255,i=s>>>16&255,k=s>>>8&255,A=s&255,o=U=>U.toString(16).padStart(2,"0");return`${o(i)}${o(k)}${o(A)}${o(e)}`}function z(s){const e=s.replace(/^#/,"");if(e.length===6){const i=parseInt(e.slice(0,2),16),k=parseInt(e.slice(2,4),16),A=parseInt(e.slice(4,6),16);return(255<<24|i<<16|k<<8|A)>>>0}if(e.length===8){const i=parseInt(e.slice(0,2),16),k=parseInt(e.slice(2,4),16),A=parseInt(e.slice(4,6),16);return(parseInt(e.slice(6,8),16)<<24|i<<16|k<<8|A)>>>0}return 0}async function S(){x.value=!0;try{const s=await D.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await D.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];I.value=i;for(const o of i)g[o.typeName]={...o.style};for(const o of Object.keys(g))i.find(U=>U.typeName===o)||delete g[o];const k=Array.isArray(e?.entries)?e.entries:[],A=Array.isArray(e?.defaultKeys)?e.defaultKeys:[];T.value=A,w.value=k;for(const o of Object.keys(n))delete n[o];for(const o of Object.keys(t))delete t[o];for(const o of k){if(!o?.key)continue;const U=Number(o.colorArgb)>>>0;n[o.key]=U,t[o.key]=U}(!s||!e)&&V.warning("车型样式 / 报警颜色加载部分失败,请确认 SimpleLite 已启动(端口 8222)。")}catch(s){V.error(`加载车型样式失败:${s.message}`)}finally{x.value=!1}}async function B(){if(v.value){b.value=!0;try{await D.putAlarmColors({...n}),V.success("调色板已写入并生效"),await S()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function F(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function R(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await D.putCarStyle(s.typeName,e);g[s.typeName]={...i},s.hasOverride=!0,V.success(`已保存 ${s.label} 车型样式`)}catch(i){V.error(`保存 ${s.label} 失败:${i.message}`)}finally{m.value=null}}}async function u(s){try{await be.confirm(`把 ${s.label} (${s.typeName}) 的样式恢复为全局默认?删除条目后将与未覆盖车型一致。`,"恢复默认",{confirmButtonText:"恢复",cancelButtonText:"取消",type:"warning"})}catch{return}try{await D.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await S()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return J(S),C({refresh:S}),(s,e)=>{const i=me,k=X,A=Q,o=pe,U=ye,Z=ge,ee=fe,te=ke,le=ce;return ue((y(),j("div",Te,[a(o,{shadow:"never",class:"cse-card"},{header:l(()=>[r("div",Ue,[e[4]||(e[4]=r("span",{class:"cse-card-title"},"报警 / 状态调色板",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[1]||(e[1]=[f("7 种默认状态",-1)])]),_:1}),e[5]||(e[5]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",loading:c.value,onClick:F},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(k,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:B},{default:l(()=>[...e[3]||(e[3]=[f(" 保存调色板(写入 simple.json) ",-1)])]),_:1},8,["disabled","loading"])])]),default:l(()=>[r("p",he,[e[9]||(e[9]=f(" 车体颜色的判定优先级: ",-1)),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[6]||(e[6]=[f("1. AlarmInfo 非空 → 「报警」",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[7]||(e[7]=[f("2. lstatus 包含关键字 → 对应键",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[8]||(e[8]=[f("3. 兜底 → 上下线默认色",-1)])]),_:1}),e[10]||(e[10]=f(" 修改下方颜色 + 「保存调色板」即时生效。 ",-1))]),r("div",we,[(y(!0),j(G,null,q(w.value,d=>(y(),j("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,h(d.key),1),d.isDefault?P("",!0):(y(),$(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",Oe,[a(A,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":L=>_(d.key,L)},null,8,["model-value","onUpdate:modelValue"]),r("code",Be,"#"+h(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",Le,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(h(I.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",onClick:S},{default:l(()=>[a(U,null,{default:l(()=>[a(ve(_e))]),_:1}),e[12]||(e[12]=r("span",{class:"cse-btn-text"},"刷新",-1))]),_:1})])]),default:l(()=>[e[17]||(e[17]=r("p",{class:"cse-desc"}," 点击车型行展开编辑:尺寸(米)、车体 / 描边 / 标签颜色、是否显示名称、3D 模型文件路径。 每辆车按 .NET 类型 (`assemblyName::shortName`) 索引样式。修改后点行内「保存」即时写入并生效。 ",-1)),a(ee,{modelValue:M.value,"onUpdate:modelValue":e[0]||(e[0]=d=>M.value=d),accordion:""},{default:l(()=>[(y(!0),j(G,null,q(I.value,d=>(y(),$(Z,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",De,[r("span",je,h(d.label),1),r("code",Me,h(d.typeName),1),d.hasOverride?(y(),$(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),$(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),$(xe,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":L=>g[d.typeName]=L,onSave:L=>R(d),onReset:L=>u(d)},null,8,["type-full-name","model-value","has-override","saving","onUpdate:modelValue","onSave","onReset"])):P("",!0)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),!x.value&&I.value.length===0?(y(),$(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,x.value]])}}}),Re=W(Fe,[["__scopeId","data-v-3af8f925"]]),Ke={class:"car-page"},He=H({__name:"CarPanelView",setup(O){const C=N("list");function x(b){C.value=b,sessionStorage.setItem("admin.cars.tab",C.value)}return J(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(C.value=b)}),(b,c)=>{const m=Ee,I=Ce;return y(),j("div",Ke,[a(I,{modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=g=>C.value=g),type:"border-card",class:"car-tabs admin-tabs",onTabChange:x},{default:l(()=>[a(m,{label:"车辆列表",name:"list"},{default:l(()=>[C.value==="list"?(y(),$(Ne,{key:0,kind:"car","kind-label":"车辆",title:"车辆管理(Car / AbstractCar,含模拟车、插件车型 reflectionApi 实例化)","empty-text":"当前没有车辆;点击右上角「新建车辆」从已加载的 CarType 中选一个实例化。"})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[C.value==="style"?(y(),$(Re,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ct=W(He,[["__scopeId","data-v-c3733824"]]);export{Ct as default}; diff --git a/MiGu.Server/wwwroot/assets/ChargePolicyView-Ce8wh2Wp.js b/MiGu.Server/wwwroot/assets/ChargePolicyView-Ce8wh2Wp.js new file mode 100644 index 0000000..705fc79 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/ChargePolicyView-Ce8wh2Wp.js @@ -0,0 +1 @@ +import{aG as s,aA as c,bH as t,br as d,b7 as u,aF as e,N as f,O as b,a7 as h,S as C,a9 as g,aa as w,D as E}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as V}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const K=s({__name:"ChargePolicyView",setup(x){return(A,T)=>{const i=h,l=b,n=C,a=w,p=g,_=f;return u(),c(V,{section:"charge",title:"充电逻辑",description:"充电优先级、空闲充电、任务中断充电(ChargePolicy)",defaults:d(E)},{default:t(({payload:o,update:r})=>[e(_,{"label-width":"180px",model:o},{default:t(()=>[e(l,{label:"允许任务中断充电"},{default:t(()=>[e(i,{"model-value":o.allowMidTaskCharge,"onUpdate:modelValue":m=>r({...o,allowMidTaskCharge:!!m})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(l,{label:"空闲多少秒后充电"},{default:t(()=>[e(n,{"model-value":o.idleChargeAfterSec,min:0,max:86400,"onUpdate:modelValue":m=>r({...o,idleChargeAfterSec:m??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(l,{label:"充电优先级规则"},{default:t(()=>[e(p,{data:o.priority,size:"small"},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"条件",prop:"condition"}),e(a,{label:"权重",prop:"weight",width:"100"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{K as default}; diff --git a/MiGu.Server/wwwroot/assets/ChargePolicyView-DdHAu5KF.js b/MiGu.Server/wwwroot/assets/ChargePolicyView-DdHAu5KF.js deleted file mode 100644 index 6965629..0000000 --- a/MiGu.Server/wwwroot/assets/ChargePolicyView-DdHAu5KF.js +++ /dev/null @@ -1 +0,0 @@ -import{aE as s,ay as c,bD as t,bn as d,b4 as u,aD as e,N as f,O as b,a7 as h,S as C,a9 as g,aa as w,D as E}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as V}from"./ConfigPageBase-DmCcZeia.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DIZkcwyW.js";/* empty css */import"./reflection-CKXyOCM_.js";const J=s({__name:"ChargePolicyView",setup(x){return(D,T)=>{const i=h,l=b,n=C,a=w,p=g,_=f;return u(),c(V,{section:"charge",title:"充电逻辑",description:"充电优先级、空闲充电、任务中断充电(ChargePolicy)",defaults:d(E)},{default:t(({payload:o,update:r})=>[e(_,{"label-width":"180px",model:o},{default:t(()=>[e(l,{label:"允许任务中断充电"},{default:t(()=>[e(i,{"model-value":o.allowMidTaskCharge,"onUpdate:modelValue":m=>r({...o,allowMidTaskCharge:!!m})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(l,{label:"空闲多少秒后充电"},{default:t(()=>[e(n,{"model-value":o.idleChargeAfterSec,min:0,max:86400,"onUpdate:modelValue":m=>r({...o,idleChargeAfterSec:m??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(l,{label:"充电优先级规则"},{default:t(()=>[e(p,{data:o.priority,size:"small"},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"条件",prop:"condition"}),e(a,{label:"权重",prop:"weight",width:"100"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{J as default}; diff --git a/MiGu.Server/wwwroot/assets/ConfigPageBase-DYlmkUIy.js b/MiGu.Server/wwwroot/assets/ConfigPageBase-DYlmkUIy.js new file mode 100644 index 0000000..de6c754 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/ConfigPageBase-DYlmkUIy.js @@ -0,0 +1 @@ +import{aS as E,e as J,aH as L,aG as R,bf as S,bG as V,b5 as j,aA as O,bH as r,b7 as k,aF as l,aC as D,bo as y,aB as w,az as p,a1 as G,w as H,t as I,bi as U,aE as u,ac as W,r as X,br as T,bg as q,ar as Q,av as z,X as m,aj as Y}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Z}from"./PermissionGuard-DhAzkl-X.js";import{b as tt,r as C}from"./reflection-BmVSriDn.js";import{i as et}from"./monitorConfigCache-deAxNrzx.js";async function at(t){const{data:e}=await E.get(`/config/${t}`);return e}async function ot(t,e){const{data:a}=await E.put(`/config/${t}`,e);return a}function h(){return JSON.parse(JSON.stringify(J.monitor))}function b(t){const e=JSON.parse(JSON.stringify(J));if(!t)return e;const a={...h(),...t.monitor??{},car:{...h().car,...t.monitor?.car??{}},site:{...h().site,...t.monitor?.site??{}},track:{...h().track,...t.monitor?.track??{}},carActionByType:{...t.monitor?.carActionByType??{}}};return{...e,...t,playback:{...e.playback,...t.playback??{}},logRetention:{...e.logRetention,...t.logRetention??{}},version:{...e.version,...t.version??{}},monitor:a}}function M(t){const e={};if(!t)return e;for(const[a,o]of Object.entries(t))!a||!Array.isArray(o)||(e[a]=[...o]);return e}function nt(t){return{carActionByType:M(t.carActionByType),siteActionKeys:[...t.site?.methods??[]],trackActionKeys:[...t.track?.methods??[]]}}async function kt(t,e){const a=b(t);let o=null;try{o=(e??await C.getMonitorConfig()).config;const d=nt(o);a.monitor.carActionByType=d.carActionByType,a.monitor.site.actionKeys=d.siteActionKeys,a.monitor.track.actionKeys=d.trackActionKeys}catch{}return{config:a,cache:o}}async function Ct(t,e){const a=b(t).monitor;let o=e?.cachedRoot??tt();if(!e?.cachedRoot)try{o=(await C.getMonitorConfig()).config}catch{}const c=await C.saveMonitorConfig({car:{fields:[...o.car?.fields??[]],status:[...o.car?.status??[]],methods:[...o.car?.methods??[]]},site:{fields:[...o.site?.fields??[]],status:[...o.site?.status??[]],methods:[...a.site.actionKeys]},track:{fields:[...o.track?.fields??[]],status:[...o.track?.status??[]],methods:[...a.track.actionKeys]},carActionByType:M(a.carActionByType)});return et(),c}const st=L("config",{state:()=>({cache:{},loading:{}}),actions:{async load(t,e=!1){if(!e&&this.cache[t])return this.cache[t];this.loading[t]=!0;try{const a=await at(t);return t==="ops"&&a.payload&&(a.payload=b(a.payload)),this.cache[t]=a,a}finally{this.loading[t]=!1}},async save(t,e){this.loading[t]=!0;try{const a=t==="ops"?b(e):e,o=await ot(t,a);return this.cache[t]=o,o}finally{this.loading[t]=!1}}}}),it={class:"cpb-header"},rt={class:"cpb-title"},ct={key:0,class:"cpb-desc"},lt={class:"cpb-body"},dt={class:"cpb-json"},ft=R({__name:"ConfigPageBase",props:{section:{},title:{},description:{},defaults:{},normalizePayload:{type:Function},afterLoad:{type:Function},beforeSave:{type:Function},afterSave:{type:Function}},setup(t){const e=t,a=st(),o=S(null),c=S(JSON.parse(JSON.stringify(e.defaults))),d=S(!1),v=S(!1),P=z(()=>JSON.stringify(c.value,null,2)),$=z(()=>o.value?.updatedAt?new Date(o.value.updatedAt).toLocaleString("zh-CN"):"—");function A(i){c.value=i}function x(i){let n=JSON.parse(JSON.stringify(i||e.defaults));e.normalizePayload&&(n=e.normalizePayload(n)),c.value=n}async function B(i,n){d.value=!0;try{const s=await a.load(e.section,i);o.value=s,x(s.payload),e.afterLoad&&await e.afterLoad(c.value,A),n&&m.success("已重载")}catch(s){m.error(`加载失败:${s instanceof Error?s.message:String(s)}`)}finally{d.value=!1}}async function _(i=!1){await B(i,i)}async function F(){v.value=!0;let i=c.value;if(e.normalizePayload&&(i=e.normalizePayload(i)),e.beforeSave)try{await e.beforeSave(i)}catch(s){m.error(`地图监控配置保存失败:${s instanceof Error?s.message:String(s)}`),v.value=!1;return}let n="";try{const s=await a.save(e.section,i);if(o.value=s,c.value=i,e.afterSave)try{await e.afterSave(i)}catch(f){n=`(平台配置已保存,但 SimpleLite 同步失败:${f instanceof Error?f.message:String(f)})`}await B(!0,!1);const g=e.beforeSave||e.afterSave?",地图监控配置已写入 SimpleLite":"";m.success(`已保存 v${s.version}${g}${n}`)}catch(s){m.error(`保存失败:${s instanceof Error?s.message:String(s)}`)}finally{v.value=!1}}return V(()=>e.section,()=>_()),j(()=>_()),(i,n)=>{const s=W,g=X,f=I,N=H,K=G;return k(),O(Z,{"widget-id":"ConfigCenter"},{default:r(()=>[l(f,{shadow:"never"},{header:r(()=>[p("div",it,[p("span",rt,y(t.title),1),l(s,{size:"small",effect:"plain"},{default:r(()=>[u("section="+y(t.section),1)]),_:1}),l(s,{size:"small",type:"info",effect:"plain"},{default:r(()=>[u("v"+y(o.value?.version??"-"),1)]),_:1}),o.value?.updatedAt?(k(),O(s,{key:0,size:"small",type:"success",effect:"plain"},{default:r(()=>[u(y($.value),1)]),_:1})):w("",!0),n[3]||(n[3]=p("div",{class:"spacer"},null,-1)),l(g,{size:"small",icon:T(q),loading:d.value,onClick:n[0]||(n[0]=ut=>_(!0))},{default:r(()=>[...n[1]||(n[1]=[u("重载",-1)])]),_:1},8,["icon","loading"]),l(g,{size:"small",type:"primary",icon:T(Q),loading:v.value,onClick:F},{default:r(()=>[...n[2]||(n[2]=[u("保存",-1)])]),_:1},8,["icon","loading"])])]),default:r(()=>[t.description?(k(),D("p",ct,y(t.description),1)):w("",!0),p("div",lt,[l(K,{gutter:12},{default:r(()=>[l(N,{span:14},{default:r(()=>[l(f,{shadow:"never","body-style":"padding: 12px"},{header:r(()=>[...n[4]||(n[4]=[u("表单",-1)])]),default:r(()=>[U(i.$slots,"default",{payload:c.value,update:A},void 0,!0)]),_:3})]),_:3}),l(N,{span:10},{default:r(()=>[l(f,{shadow:"never","body-style":"padding: 0"},{header:r(()=>[...n[5]||(n[5]=[u("JSON 预览(保存即下发占位)",-1)])]),default:r(()=>[p("pre",dt,y(P.value),1)]),_:1})]),_:1})]),_:3})])]),_:3})]),_:3})}}}),At=Y(ft,[["__scopeId","data-v-1d51a575"]]);export{At as C,M as c,h as d,kt as l,b as n,Ct as s}; diff --git a/MiGu.Server/wwwroot/assets/ConfigPageBase-DmCcZeia.js b/MiGu.Server/wwwroot/assets/ConfigPageBase-DmCcZeia.js deleted file mode 100644 index d373a14..0000000 --- a/MiGu.Server/wwwroot/assets/ConfigPageBase-DmCcZeia.js +++ /dev/null @@ -1 +0,0 @@ -import{aQ as T,e as J,aF as K,aE as L,bc as g,bC as D,b2 as R,ay as B,bD as i,b4 as k,aD as c,aA as V,bk as u,az as w,ax as y,a1 as j,w as I,t as q,bf as G,aC as f,ac as Q,r as U,bn as z,bd as W,aq as X,at as E,X as p,aj as H}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Y}from"./PermissionGuard-DIZkcwyW.js";import{r as C,a as Z}from"./reflection-CKXyOCM_.js";async function tt(t){const{data:e}=await T.get(`/config/${t}`);return e}async function et(t,e){const{data:a}=await T.put(`/config/${t}`,e);return a}function S(){return JSON.parse(JSON.stringify(J.monitor))}function h(t){const e=JSON.parse(JSON.stringify(J));if(!t)return e;const a={...S(),...t.monitor??{},car:{...S().car,...t.monitor?.car??{}},site:{...S().site,...t.monitor?.site??{}},track:{...S().track,...t.monitor?.track??{}},carActionByType:{...t.monitor?.carActionByType??{}}};return{...e,...t,playback:{...e.playback,...t.playback??{}},logRetention:{...e.logRetention,...t.logRetention??{}},version:{...e.version,...t.version??{}},monitor:a}}function at(t){return{carActionByType:{...t.carActionByType??{}},siteActionKeys:[...t.site?.methods??[]],trackActionKeys:[...t.track?.methods??[]]}}async function ht(t){const e=h(t);try{const a=await C.getMonitorConfig(),r=at(a.config);e.monitor.carActionByType=r.carActionByType,e.monitor.site.actionKeys=r.siteActionKeys,e.monitor.track.actionKeys=r.trackActionKeys}catch{}return e}async function bt(t){const e=h(t).monitor;let a=Z();try{a=(await C.getMonitorConfig()).config}catch{}await C.saveMonitorConfig({car:{fields:[...a.car?.fields??[]],status:[...a.car?.status??[]],methods:[...a.car?.methods??[]]},site:{fields:[...a.site?.fields??[]],status:[...a.site?.status??[]],methods:[...e.site.actionKeys]},track:{fields:[...a.track?.fields??[]],status:[...a.track?.status??[]],methods:[...e.track.actionKeys]},carActionByType:{...e.carActionByType}})}const ot=K("config",{state:()=>({cache:{},loading:{}}),actions:{async load(t,e=!1){if(!e&&this.cache[t])return this.cache[t];this.loading[t]=!0;try{const a=await tt(t);return t==="ops"&&a.payload&&(a.payload=h(a.payload)),this.cache[t]=a,a}finally{this.loading[t]=!1}},async save(t,e){this.loading[t]=!0;try{const a=t==="ops"?h(e):e,r=await et(t,a);return this.cache[t]=r,r}finally{this.loading[t]=!1}}}}),nt={class:"cpb-header"},st={class:"cpb-title"},it={key:0,class:"cpb-desc"},rt={class:"cpb-body"},ct={class:"cpb-json"},lt=L({__name:"ConfigPageBase",props:{section:{},title:{},description:{},defaults:{},normalizePayload:{type:Function},afterLoad:{type:Function},beforeSave:{type:Function},afterSave:{type:Function}},setup(t){const e=t,a=ot(),r=g(null),l=g(JSON.parse(JSON.stringify(e.defaults))),b=g(!1),m=g(!1),P=E(()=>JSON.stringify(l.value,null,2)),M=E(()=>r.value?.updatedAt?new Date(r.value.updatedAt).toLocaleString("zh-CN"):"—");function A(s){l.value=s}function $(s){let o=JSON.parse(JSON.stringify(s||e.defaults));e.normalizePayload&&(o=e.normalizePayload(o)),l.value=o}async function N(s,o){b.value=!0;try{const n=await a.load(e.section,s);r.value=n,$(n.payload),e.afterLoad&&await e.afterLoad(l.value,A),o&&p.success("已重载")}catch(n){p.error(`加载失败:${n instanceof Error?n.message:String(n)}`)}finally{b.value=!1}}async function _(s=!1){await N(s,s)}async function x(){m.value=!0;let s=l.value;if(e.normalizePayload&&(s=e.normalizePayload(s)),e.beforeSave)try{await e.beforeSave(s)}catch(n){p.error(`地图监控配置保存失败:${n instanceof Error?n.message:String(n)}`),m.value=!1;return}let o="";try{const n=await a.save(e.section,s);if(r.value=n,l.value=s,e.afterSave)try{await e.afterSave(s)}catch(d){o=`(平台配置已保存,但 SimpleLite 同步失败:${d instanceof Error?d.message:String(d)})`}await N(!0,!1);const v=e.beforeSave||e.afterSave?",地图监控配置已写入 SimpleLite":"";p.success(`已保存 v${n.version}${v}${o}`)}catch(n){p.error(`保存失败:${n instanceof Error?n.message:String(n)}`)}finally{m.value=!1}}return D(()=>e.section,()=>_()),R(()=>_()),(s,o)=>{const n=Q,v=U,d=q,O=I,F=j;return k(),B(Y,{"widget-id":"ConfigCenter"},{default:i(()=>[c(d,{shadow:"never"},{header:i(()=>[y("div",nt,[y("span",st,u(t.title),1),c(n,{size:"small",effect:"plain"},{default:i(()=>[f("section="+u(t.section),1)]),_:1}),c(n,{size:"small",type:"info",effect:"plain"},{default:i(()=>[f("v"+u(r.value?.version??"-"),1)]),_:1}),r.value?.updatedAt?(k(),B(n,{key:0,size:"small",type:"success",effect:"plain"},{default:i(()=>[f(u(M.value),1)]),_:1})):w("",!0),o[3]||(o[3]=y("div",{class:"spacer"},null,-1)),c(v,{size:"small",icon:z(W),loading:b.value,onClick:o[0]||(o[0]=dt=>_(!0))},{default:i(()=>[...o[1]||(o[1]=[f("重载",-1)])]),_:1},8,["icon","loading"]),c(v,{size:"small",type:"primary",icon:z(X),loading:m.value,onClick:x},{default:i(()=>[...o[2]||(o[2]=[f("保存",-1)])]),_:1},8,["icon","loading"])])]),default:i(()=>[t.description?(k(),V("p",it,u(t.description),1)):w("",!0),y("div",rt,[c(F,{gutter:12},{default:i(()=>[c(O,{span:14},{default:i(()=>[c(d,{shadow:"never","body-style":"padding: 12px"},{header:i(()=>[...o[4]||(o[4]=[f("表单",-1)])]),default:i(()=>[G(s.$slots,"default",{payload:l.value,update:A},void 0,!0)]),_:3})]),_:3}),c(O,{span:10},{default:i(()=>[c(d,{shadow:"never","body-style":"padding: 0"},{header:i(()=>[...o[5]||(o[5]=[f("JSON 预览(保存即下发占位)",-1)])]),default:i(()=>[y("pre",ct,u(P.value),1)]),_:1})]),_:1})]),_:3})])]),_:3})]),_:3})}}}),_t=H(lt,[["__scopeId","data-v-1d51a575"]]);export{_t as C,ht as l,h as n,bt as s}; diff --git a/MiGu.Server/wwwroot/assets/CustomWidgetView-BfTj_5GQ.js b/MiGu.Server/wwwroot/assets/CustomWidgetView-BfTj_5GQ.js deleted file mode 100644 index 8239ef5..0000000 --- a/MiGu.Server/wwwroot/assets/CustomWidgetView-BfTj_5GQ.js +++ /dev/null @@ -1 +0,0 @@ -import{aE as _,ay as i,bD as e,bn as d,b4 as s,aD as a,a9 as u,aa as f,ax as n,bk as r,aA as b,ah as g,be as h,ac as w,aC as C,l as y,aj as E}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as T}from"./ConfigPageBase-DmCcZeia.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DIZkcwyW.js";/* empty css */import"./reflection-CKXyOCM_.js";const x={class:"js-mini"},D={class:"js-mini"},k=_({__name:"CustomWidgetView",setup(B){return(S,V)=>{const t=f,p=w,m=u;return s(),i(T,{section:"widget",title:"自定义控件",description:"呼叫/展示界面可自由定义(platform-vue + rcsmonitor-vue 双渲染器)",defaults:d(y)},{default:e(({payload:c})=>[a(m,{data:c.items,size:"small",border:""},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"180"}),a(t,{label:"名称",prop:"name",width:"140"}),a(t,{label:"Schema",prop:"schemaJson"},{default:e(o=>[n("pre",x,r(o.row.schemaJson),1)]),_:1}),a(t,{label:"Layout",prop:"layoutJson"},{default:e(o=>[n("pre",D,r(o.row.layoutJson),1)]),_:1}),a(t,{label:"绑定 Scope"},{default:e(o=>[(s(!0),b(g,null,h(o.row.bindToScopes,l=>(s(),i(p,{key:l,size:"small",effect:"plain",style:{"margin-right":"4px"}},{default:e(()=>[C(r(l),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:1},8,["defaults"])}}}),K=E(k,[["__scopeId","data-v-96b90481"]]);export{K as default}; diff --git a/MiGu.Server/wwwroot/assets/CustomWidgetView-D9yWpJST.js b/MiGu.Server/wwwroot/assets/CustomWidgetView-D9yWpJST.js new file mode 100644 index 0000000..743cbd3 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/CustomWidgetView-D9yWpJST.js @@ -0,0 +1 @@ +import{aG as _,aA as i,bH as e,br as d,b7 as s,aF as t,a9 as u,aa as f,az as n,bo as r,aC as b,ah as h,bh as g,ac as w,aE as C,l as E,aj as T}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as y}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const x={class:"js-mini"},B={class:"js-mini"},S=_({__name:"CustomWidgetView",setup(V){return(k,D)=>{const a=f,p=w,m=u;return s(),i(y,{section:"widget",title:"自定义控件",description:"呼叫/展示界面可自由定义(platform-vue + rcsmonitor-vue 双渲染器)",defaults:d(E)},{default:e(({payload:c})=>[t(m,{data:c.items,size:"small",border:""},{default:e(()=>[t(a,{label:"ID",prop:"id",width:"180"}),t(a,{label:"名称",prop:"name",width:"140"}),t(a,{label:"Schema",prop:"schemaJson"},{default:e(o=>[n("pre",x,r(o.row.schemaJson),1)]),_:1}),t(a,{label:"Layout",prop:"layoutJson"},{default:e(o=>[n("pre",B,r(o.row.layoutJson),1)]),_:1}),t(a,{label:"绑定 Scope"},{default:e(o=>[(s(!0),b(h,null,g(o.row.bindToScopes,l=>(s(),i(p,{key:l,size:"small",effect:"plain",style:{"margin-right":"4px"}},{default:e(()=>[C(r(l),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:1},8,["defaults"])}}}),M=T(S,[["__scopeId","data-v-96b90481"]]);export{M as default}; diff --git a/MiGu.Server/wwwroot/assets/DashboardView-C22mCfRB.css b/MiGu.Server/wwwroot/assets/DashboardView-C22mCfRB.css new file mode 100644 index 0000000..6922061 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/DashboardView-C22mCfRB.css @@ -0,0 +1 @@ +.dashboard[data-v-7b6c88b6]{padding:0;display:flex;flex-direction:column;gap:18px}.dashboard[data-v-7b6c88b6]>*{flex-shrink:0}.hero-banner[data-v-7b6c88b6]{position:relative;display:grid;grid-template-columns:1fr 480px;gap:24px;padding:28px 32px 22px;overflow:hidden;border-radius:18px;background:radial-gradient(ellipse at 0% 0%,rgba(var(--mg-primary-hover-rgb),.5) 0%,transparent 55%),radial-gradient(ellipse at 100% 100%,rgba(var(--mg-accent-rgb),.45) 0%,transparent 55%),linear-gradient(135deg,var(--mg-bg-aside-1) 0%,var(--mg-bg-aside-2) 100%);border:1px solid rgba(var(--mg-accent-rgb),.3);box-shadow:0 18px 44px #0006,0 0 0 1px #ffffff0f inset,0 1px #ffffff2e inset;color:#fff}.hero-banner[data-v-7b6c88b6]:before{content:"";position:absolute;top:0;left:12%;right:12%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.8) 50%,transparent 100%);pointer-events:none;z-index:2}.hero-bg[data-v-7b6c88b6]{position:absolute;inset:0;pointer-events:none;overflow:hidden;border-radius:18px}.hero-orb[data-v-7b6c88b6]{position:absolute;border-radius:50%;filter:blur(80px);opacity:.55;animation:hero-drift-7b6c88b6 18s ease-in-out infinite}.hero-orb-a[data-v-7b6c88b6]{width:360px;height:360px;top:-120px;left:10%;background:radial-gradient(circle,rgba(var(--mg-accent-rgb),.85) 0%,rgba(var(--mg-primary-rgb),.85) 55%,transparent 85%)}.hero-orb-b[data-v-7b6c88b6]{width:320px;height:320px;bottom:-120px;right:22%;background:radial-gradient(circle,rgba(var(--mg-primary-hover-rgb),.8) 0%,rgba(var(--mg-primary-rgb),.55) 55%,transparent 85%);animation-delay:-7s;opacity:.5}.hero-grid[data-v-7b6c88b6]{position:absolute;inset:0;background-image:linear-gradient(rgba(var(--mg-accent-rgb),.07) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--mg-accent-rgb),.07) 1px,transparent 1px);background-size:36px 36px;mask-image:radial-gradient(ellipse at center,rgba(0,0,0,.85) 0%,transparent 75%);-webkit-mask-image:radial-gradient(ellipse at center,rgba(0,0,0,.85) 0%,transparent 75%);opacity:.55}@keyframes hero-drift-7b6c88b6{0%,to{transform:translate(0) scale(1)}50%{transform:translate(24px,-28px) scale(1.06)}}.hero-left[data-v-7b6c88b6],.hero-right[data-v-7b6c88b6]{position:relative;z-index:1}.hero-tag[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:8px;padding:5px 14px;background:#ffffff1f;border:1px solid rgba(var(--mg-accent-rgb),.55);border-radius:999px;color:#fff;font-size:12px;letter-spacing:1.5px;width:max-content;box-shadow:0 0 12px rgba(var(--mg-primary-rgb),.3)}.tag-dot[data-v-7b6c88b6]{width:6px;height:6px;border-radius:50%;background:var(--mg-accent);box-shadow:0 0 10px var(--mg-accent);animation:tag-pulse-7b6c88b6 1.6s ease-in-out infinite}@keyframes tag-pulse-7b6c88b6{0%,to{opacity:.6;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}.hero-title[data-v-7b6c88b6]{margin:14px 0 8px;font-size:40px;font-weight:700;letter-spacing:5px;line-height:1.1;color:#fff;background:linear-gradient(135deg,#ffffff 0%,var(--mg-accent) 50%,#ffffff 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 4px 20px rgba(var(--mg-primary-rgb),.6);filter:drop-shadow(0 2px 8px rgba(0,0,0,.5))}.hero-desc[data-v-7b6c88b6]{margin:0 0 22px;color:#ffffffd9;font-size:13px;letter-spacing:.8px}.quick-grid[data-v-7b6c88b6]{display:grid;grid-template-columns:repeat(4,1fr);gap:14px 18px;max-width:540px}.quick-item[data-v-7b6c88b6]{appearance:none;background:#ffffff14;border:1px solid rgba(var(--mg-accent-rgb),.35);border-radius:14px;padding:14px 10px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;color:#fff;transition:all .25s cubic-bezier(.25,.8,.25,1);position:relative;overflow:hidden;animation:quick-in-7b6c88b6 .5s ease-out backwards;box-shadow:0 4px 12px #00000040,0 0 0 1px #ffffff0f inset}@keyframes quick-in-7b6c88b6{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.quick-item[data-v-7b6c88b6]:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,transparent 30%,rgba(var(--mg-accent-rgb),.15) 100%);opacity:0;transition:opacity .25s}.quick-item[data-v-7b6c88b6]:hover{border-color:rgba(var(--mg-accent-rgb),.75);background:#ffffff24;color:#fff;transform:translateY(-3px);box-shadow:0 12px 28px rgba(var(--mg-primary-rgb),.45),0 0 22px rgba(var(--mg-accent-rgb),.4)}.quick-item[data-v-7b6c88b6]:hover:before{opacity:1}.quick-icon[data-v-7b6c88b6]{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,rgba(var(--mg-primary-hover-rgb),.6),rgba(var(--mg-primary-rgb),.45));border:1px solid rgba(var(--mg-accent-rgb),.55);display:inline-flex;align-items:center;justify-content:center;color:#fff;box-shadow:0 6px 16px rgba(var(--mg-primary-rgb),.4),0 0 0 1px #ffffff2e inset;transition:all .25s}.quick-item:hover .quick-icon[data-v-7b6c88b6]{background:linear-gradient(135deg,var(--mg-primary-hover) 0%,var(--mg-primary) 100%);box-shadow:0 10px 24px rgba(var(--mg-primary-rgb),.6),0 0 24px rgba(var(--mg-accent-rgb),.6),0 0 0 1px #ffffff59 inset}.quick-label[data-v-7b6c88b6]{font-size:13px;font-weight:500;letter-spacing:1.2px;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.4)}.quick-item.primary[data-v-7b6c88b6]{border-color:rgba(var(--mg-accent-rgb),.75);background:linear-gradient(135deg,rgba(var(--mg-primary-hover-rgb),.45),rgba(var(--mg-primary-rgb),.25));box-shadow:0 8px 22px rgba(var(--mg-primary-rgb),.45),0 0 0 1px rgba(var(--mg-accent-rgb),.45) inset}.quick-item.primary .quick-icon[data-v-7b6c88b6]{background:linear-gradient(135deg,var(--mg-accent) 0%,var(--mg-primary-hover) 60%,var(--mg-primary) 100%);box-shadow:0 8px 20px rgba(var(--mg-primary-rgb),.55),0 0 28px rgba(var(--mg-accent-rgb),.55),0 0 0 1px #ffffff4d inset;animation:mg-pulse-glow 3.6s ease-in-out infinite}.hero-right[data-v-7b6c88b6]{position:relative;align-self:stretch;min-height:280px;display:flex;align-items:center;justify-content:center}.hero-glow[data-v-7b6c88b6]{position:absolute;inset:10% 5%;background:radial-gradient(ellipse at 30% 40%,rgba(var(--mg-primary-hover-rgb),.55) 0%,transparent 60%),radial-gradient(ellipse at 70% 60%,rgba(var(--mg-accent-rgb),.3) 0%,transparent 65%);filter:blur(36px);pointer-events:none}.hero-scene[data-v-7b6c88b6]{position:relative;width:100%;height:auto;max-height:320px;filter:drop-shadow(0 12px 32px rgba(var(--mg-primary-rgb),.45))}.hero-scene .agv-1[data-v-7b6c88b6]{animation:agv-roll-7b6c88b6 6s ease-in-out infinite}.hero-scene .agv-2[data-v-7b6c88b6]{animation:agv-roll-7b6c88b6 8s ease-in-out infinite reverse}.hero-scene .float-data[data-v-7b6c88b6]{animation:float-bob-7b6c88b6 4.5s ease-in-out infinite}.hero-scene .float-data[data-v-7b6c88b6]:nth-child(odd){animation-delay:-2.2s}@keyframes agv-roll-7b6c88b6{0%,to{transform:translate(0)}50%{transform:translate(-20px)}}@keyframes float-bob-7b6c88b6{0%,to{transform:translate(360px,110px)}50%{transform:translate(360px,100px)}}.status-bar[data-v-7b6c88b6]{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 20px;border-radius:12px;background:linear-gradient(135deg,#fff,#fbf9ff);border:1px solid #ddd5ec;border-left:3px solid #7c3aed;box-shadow:0 1px 2px #2d1b690d,0 8px 22px #6c47c81a;color:#1a0f3d;font-size:13px}.status-left[data-v-7b6c88b6],.status-right[data-v-7b6c88b6]{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.status-conn[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:8px;padding:5px 12px;border-radius:999px;background:#c4b5fd;border:1px solid #8b6ff0;font-weight:600;letter-spacing:.4px;font-size:12px;box-shadow:inset 0 1px #ffffff8c,0 1px 3px #7c3aed26}.status-conn.success[data-v-7b6c88b6]{color:var(--mg-status-success);background:rgba(var(--mg-status-success-rgb),.32);border-color:rgba(var(--mg-status-success-rgb),.7);box-shadow:inset 0 1px #ffffff8c,0 1px 3px rgba(var(--mg-status-success-rgb),.25)}.status-conn.warning[data-v-7b6c88b6]{color:var(--mg-status-warning);background:rgba(var(--mg-status-warning-rgb),.32);border-color:rgba(var(--mg-status-warning-rgb),.7);box-shadow:inset 0 1px #ffffff8c,0 1px 3px rgba(var(--mg-status-warning-rgb),.25)}.status-conn.danger[data-v-7b6c88b6]{color:var(--mg-status-danger);background:rgba(var(--mg-status-danger-rgb),.32);border-color:rgba(var(--mg-status-danger-rgb),.7);box-shadow:inset 0 1px #ffffff8c,0 1px 3px rgba(var(--mg-status-danger-rgb),.25)}.status-divider[data-v-7b6c88b6]{width:1px;height:14px;background:#a78bfa}.status-stat[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:8px;padding:4px 10px;border-radius:999px;background:#c8b8f5;border:1px solid #9d86e6;letter-spacing:.4px;box-shadow:inset 0 1px #ffffff8c,0 1px 3px #7c3aed1f}.status-stat-label[data-v-7b6c88b6]{color:#4a3a6d;font-size:12px;font-weight:600}.status-stat-value[data-v-7b6c88b6]{color:#1f0d54;font-weight:700;font-size:14px}.status-stat-value.is-danger[data-v-7b6c88b6]{color:var(--mg-status-danger)}.status-stat-total[data-v-7b6c88b6]{font-size:12px;color:#9b8eb8;font-weight:500}.bento-grid[data-v-7b6c88b6]{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:minmax(0,auto);gap:16px}.bento[data-v-7b6c88b6]{position:relative;border-radius:14px;background:#fff;border:1px solid #e2dbf0;box-shadow:0 1px 2px #2d1b690d,0 10px 26px #6c47c81a;color:#2d1b69;transition:transform .25s cubic-bezier(.25,.8,.25,1),box-shadow .25s,border-color .25s;overflow:hidden}.bento[data-v-7b6c88b6]:hover{transform:translateY(-2px);border-color:#c4b5fd;box-shadow:0 4px 14px #2d1b691a,0 18px 40px #6c47c829}.bento[data-v-7b6c88b6] .el-card{background:transparent!important;border:none!important;box-shadow:none!important;color:inherit;height:100%}.bento[data-v-7b6c88b6] .el-card__header{background:transparent!important;border-bottom:1px solid #f0eaf6!important;padding:14px 18px}.bento[data-v-7b6c88b6] .el-card__body{padding:16px 18px}.card-head[data-v-7b6c88b6]{display:flex;align-items:center;justify-content:space-between}.card-title[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:8px;color:#2d1b69;font-size:14px;font-weight:600;letter-spacing:.4px}.card-title .el-icon[data-v-7b6c88b6]{color:#7c3aed}.card-tip[data-v-7b6c88b6]{font-size:12px;color:#6b5b8e;letter-spacing:.3px;font-weight:500}.more-link[data-v-7b6c88b6]{color:#6b5b8e!important;font-size:12.5px}.more-link[data-v-7b6c88b6]:hover{color:#7c3aed!important}.bento-kpi[data-v-7b6c88b6]{grid-column:span 2;padding:16px 18px 14px;display:flex;flex-direction:column;justify-content:space-between;min-height:116px}.kpi-accent[data-v-7b6c88b6]{position:absolute;top:0;left:0;width:100%;height:3px;background:linear-gradient(90deg,var(--mg-primary-hover),var(--mg-accent) 50%,transparent);opacity:.85}.kpi-accent.tone-info[data-v-7b6c88b6]{background:linear-gradient(90deg,var(--mg-status-info),rgba(var(--mg-status-info-rgb),.2) 80%,transparent)}.kpi-accent.tone-success[data-v-7b6c88b6]{background:linear-gradient(90deg,var(--mg-status-success),rgba(var(--mg-status-success-rgb),.2) 80%,transparent)}.kpi-accent.tone-warning[data-v-7b6c88b6]{background:linear-gradient(90deg,var(--mg-status-warning),rgba(var(--mg-status-warning-rgb),.2) 80%,transparent)}.kpi-accent.tone-danger[data-v-7b6c88b6]{background:linear-gradient(90deg,var(--mg-status-danger),rgba(var(--mg-status-danger-rgb),.2) 80%,transparent)}.kpi-accent.tone-idle[data-v-7b6c88b6]{background:linear-gradient(90deg,var(--mg-status-idle),rgba(var(--mg-status-idle-rgb),.2) 80%,transparent)}.kpi-body[data-v-7b6c88b6]{display:flex;flex-direction:column;gap:6px;z-index:1}.kpi-row1[data-v-7b6c88b6]{display:flex;align-items:center;gap:8px}.kpi-icon-sm[data-v-7b6c88b6]{color:var(--mg-text-muted)}.kpi-icon-sm.tone-info[data-v-7b6c88b6]{color:var(--mg-status-info)}.kpi-icon-sm.tone-success[data-v-7b6c88b6]{color:var(--mg-status-success)}.kpi-icon-sm.tone-warning[data-v-7b6c88b6]{color:var(--mg-status-warning)}.kpi-icon-sm.tone-danger[data-v-7b6c88b6]{color:var(--mg-status-danger)}.kpi-icon-sm.tone-idle[data-v-7b6c88b6]{color:var(--mg-status-idle)}.kpi-label[data-v-7b6c88b6]{font-size:12px;color:#6b5b8e;letter-spacing:.5px;font-weight:500}.kpi-row2[data-v-7b6c88b6]{display:flex;align-items:baseline;gap:8px}.kpi-value[data-v-7b6c88b6]{font-size:30px;font-weight:700;color:#1a0f3d;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;line-height:1.05;letter-spacing:-.5px}.kpi-trend[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:2px;font-size:11px;font-weight:600;padding:2px 6px;border-radius:999px}.kpi-trend.trend-up[data-v-7b6c88b6]{background:rgba(var(--mg-status-success-rgb),.16);color:var(--mg-status-success)}.kpi-trend.trend-down[data-v-7b6c88b6]{background:rgba(var(--mg-status-danger-rgb),.16);color:var(--mg-status-danger)}.kpi-trend.trend-flat[data-v-7b6c88b6]{background:rgba(var(--mg-status-idle-rgb),.16);color:var(--mg-status-idle)}.kpi-trend-text[data-v-7b6c88b6]{font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums}.kpi-spark[data-v-7b6c88b6]{position:absolute;left:0;right:0;bottom:0;height:32px;width:100%;pointer-events:none;opacity:.65}.bento-trend[data-v-7b6c88b6]{grid-column:span 8;min-height:280px;display:flex;flex-direction:column}.bento-trend[data-v-7b6c88b6] .el-card{display:flex;flex-direction:column}.bento-trend[data-v-7b6c88b6] .el-card__body{flex:1;display:flex;padding:14px 18px 18px}.trend-chart[data-v-7b6c88b6]{flex:1;width:100%;height:100%;min-height:220px}.bento-agv[data-v-7b6c88b6]{grid-column:span 4;min-height:280px}.bento-agv[data-v-7b6c88b6] .el-card__body{padding:14px 16px 18px}.mock-tag[data-v-7b6c88b6]{display:inline-block;margin-left:6px;padding:1px 6px;background:#f0eaf6;color:#7c3aed;border-radius:4px;font-size:10.5px;font-weight:600;letter-spacing:.3px;vertical-align:1px}.agv-row[data-v-7b6c88b6]{display:flex;align-items:center;gap:8px;min-height:220px}.agv-chart-wrap[data-v-7b6c88b6]{position:relative;width:170px;height:200px;flex-shrink:0}.agv-chart[data-v-7b6c88b6]{width:100%;height:100%}.agv-center[data-v-7b6c88b6]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;pointer-events:none}.agv-center-value[data-v-7b6c88b6]{font-size:28px;font-weight:700;color:#1a0f3d;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;line-height:1.05;letter-spacing:-.5px}.agv-center-label[data-v-7b6c88b6]{font-size:11px;color:#6b5b8e;font-weight:500;letter-spacing:.5px;margin-top:2px}.agv-legend[data-v-7b6c88b6]{flex:1;list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}.agv-legend li[data-v-7b6c88b6]{display:grid;grid-template-columns:12px 1fr auto auto;align-items:center;gap:8px;font-size:12.5px;color:#3d2b6e;padding:5px 8px;border-radius:6px;transition:background .2s}.agv-legend li[data-v-7b6c88b6]:hover{background:#f5f3ff}.agv-legend .legend-name[data-v-7b6c88b6]{color:#4a3d6e;font-weight:500}.agv-legend .legend-value[data-v-7b6c88b6]{font-weight:700;color:#1a0f3d;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;text-align:right;min-width:18px}.agv-legend .legend-pct[data-v-7b6c88b6]{font-size:11px;color:#9b8eb8;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;text-align:right;min-width:32px}.agv-legend .dot[data-v-7b6c88b6]{width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 2px #fff,0 0 0 3px #0000000d}.bento-ratio[data-v-7b6c88b6]{grid-column:span 7}.ratio-track[data-v-7b6c88b6]{display:flex;width:100%;height:32px;border-radius:999px;overflow:hidden;background:#f0eaf6;border:1px solid #e8e1f0;margin-bottom:14px;box-shadow:inset 0 1px 2px #2d1b690a}.ratio-seg[data-v-7b6c88b6]{display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;letter-spacing:.4px;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35);cursor:default;position:relative;transition:filter .2s}.ratio-seg[data-v-7b6c88b6]:hover{filter:brightness(1.1)}.ratio-seg.tone-info[data-v-7b6c88b6]{background:linear-gradient(180deg,var(--mg-status-info),rgba(var(--mg-status-info-rgb),.92))}.ratio-seg.tone-success[data-v-7b6c88b6]{background:linear-gradient(180deg,var(--mg-status-success),rgba(var(--mg-status-success-rgb),.92))}.ratio-seg.tone-warning[data-v-7b6c88b6]{background:linear-gradient(180deg,var(--mg-status-warning),rgba(var(--mg-status-warning-rgb),.92))}.ratio-seg.tone-idle[data-v-7b6c88b6]{background:linear-gradient(180deg,var(--mg-status-idle),rgba(var(--mg-status-idle-rgb),.92))}.ratio-seg-pct[data-v-7b6c88b6]{font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums}.ratio-legend[data-v-7b6c88b6]{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px 18px}.ratio-legend li[data-v-7b6c88b6]{display:flex;align-items:center;gap:8px;font-size:13px;color:#3d2b6e}.ratio-legend .dot[data-v-7b6c88b6]{width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 2px #fffffff2}.ratio-legend .dot.tone-info[data-v-7b6c88b6]{background:var(--mg-status-info)}.ratio-legend .dot.tone-success[data-v-7b6c88b6]{background:var(--mg-status-success)}.ratio-legend .dot.tone-warning[data-v-7b6c88b6]{background:var(--mg-status-warning)}.ratio-legend .dot.tone-idle[data-v-7b6c88b6]{background:var(--mg-status-idle)}.ratio-legend .legend-name[data-v-7b6c88b6]{flex:1;color:#6b5b8e;font-weight:500}.ratio-legend .legend-value[data-v-7b6c88b6]{font-weight:700;color:#1a0f3d;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums}.bento-todo[data-v-7b6c88b6]{grid-column:span 5}.bento-todo[data-v-7b6c88b6] .el-card__body{padding-top:8px}.todo-tabs[data-v-7b6c88b6] .el-tabs__header{margin-bottom:8px}.todo-tabs[data-v-7b6c88b6] .el-tabs__nav-wrap:after{display:none}.todo-tabs[data-v-7b6c88b6] .el-tabs__item{color:#6b5b8e!important;font-weight:500}.todo-tabs[data-v-7b6c88b6] .el-tabs__item:hover{color:#7c3aed!important}.todo-tabs[data-v-7b6c88b6] .el-tabs__item.is-active{color:#7c3aed!important;font-weight:700}.todo-tabs[data-v-7b6c88b6] .el-tabs__active-bar{background-color:#7c3aed!important;height:3px!important;border-radius:2px}.tab-label[data-v-7b6c88b6]{display:inline-flex;align-items:center;gap:6px;font-size:13px}.tab-count[data-v-7b6c88b6]{display:inline-flex;align-items:center;justify-content:center;font-style:normal;min-width:20px;height:18px;padding:0 6px;border-radius:999px;font-size:11px;font-weight:700;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums}.tab-count.danger[data-v-7b6c88b6]{background:rgba(var(--mg-status-danger-rgb),.18);color:var(--mg-status-danger);border:1px solid rgba(var(--mg-status-danger-rgb),.4)}.tab-count.warning[data-v-7b6c88b6]{background:rgba(var(--mg-status-warning-rgb),.18);color:var(--mg-status-warning);border:1px solid rgba(var(--mg-status-warning-rgb),.4)}.tab-count.info[data-v-7b6c88b6]{background:rgba(var(--mg-status-info-rgb),.18);color:var(--mg-status-info);border:1px solid rgba(var(--mg-status-info-rgb),.4)}.tab-count.success[data-v-7b6c88b6]{background:rgba(var(--mg-status-success-rgb),.18);color:var(--mg-status-success);border:1px solid rgba(var(--mg-status-success-rgb),.4)}.empty-pane[data-v-7b6c88b6]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 0 12px;color:#6b5b8e;font-size:13px}.empty-pane p[data-v-7b6c88b6]{margin:6px 0 0;font-weight:500}.todo-list[data-v-7b6c88b6]{list-style:none;padding:0 4px 0 0;margin:0;display:flex;flex-direction:column;gap:8px;max-height:220px;overflow-y:auto}.todo-list li[data-v-7b6c88b6]{display:grid;grid-template-columns:90px 1fr auto;gap:12px;align-items:center;padding:10px 12px;background:#faf7fd;border:1px solid #f0eaf6;border-radius:10px;font-size:13px;color:#2d1b69;transition:background .2s,border-color .2s,transform .2s,box-shadow .2s}.todo-list li[data-v-7b6c88b6]:hover{background:#f5f3ff;border-color:#c4b5fd;transform:translate(2px);box-shadow:0 2px 6px #7c3aed14}.todo-text[data-v-7b6c88b6]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.todo-pill[data-v-7b6c88b6]{text-align:center;font-size:11px;padding:3px 8px;border-radius:999px;letter-spacing:.4px;font-weight:700}.todo-pill.danger[data-v-7b6c88b6]{background:rgba(var(--mg-status-danger-rgb),.1);color:var(--mg-status-danger);border:1px solid rgba(var(--mg-status-danger-rgb),.32)}.todo-pill.warning[data-v-7b6c88b6]{background:rgba(var(--mg-status-warning-rgb),.1);color:var(--mg-status-warning);border:1px solid rgba(var(--mg-status-warning-rgb),.32)}.todo-pill.info[data-v-7b6c88b6]{background:rgba(var(--mg-status-info-rgb),.1);color:var(--mg-status-info);border:1px solid rgba(var(--mg-status-info-rgb),.32)}.todo-pill.success[data-v-7b6c88b6]{background:rgba(var(--mg-status-success-rgb),.1);color:var(--mg-status-success);border:1px solid rgba(var(--mg-status-success-rgb),.32)}.todo-time[data-v-7b6c88b6]{color:#9b8eb8;font-size:11.5px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;font-weight:500}@media (max-width: 1440px){.bento-kpi[data-v-7b6c88b6]{grid-column:span 3}.bento-trend[data-v-7b6c88b6]{grid-column:span 8}.bento-agv[data-v-7b6c88b6]{grid-column:span 4}.bento-ratio[data-v-7b6c88b6]{grid-column:span 7}.bento-todo[data-v-7b6c88b6]{grid-column:span 5}}@media (max-width: 1280px){.hero-banner[data-v-7b6c88b6]{grid-template-columns:1fr 380px}.hero-right[data-v-7b6c88b6]{min-height:240px}.bento-kpi[data-v-7b6c88b6]{grid-column:span 4}.bento-trend[data-v-7b6c88b6]{grid-column:span 12}.bento-agv[data-v-7b6c88b6],.bento-ratio[data-v-7b6c88b6]{grid-column:span 6}.bento-todo[data-v-7b6c88b6]{grid-column:span 12}}@media (max-width: 1024px){.status-bar[data-v-7b6c88b6]{flex-wrap:wrap}.hero-banner[data-v-7b6c88b6]{grid-template-columns:1fr}.hero-right[data-v-7b6c88b6]{display:none}.bento-kpi[data-v-7b6c88b6]{grid-column:span 6}.bento-agv[data-v-7b6c88b6],.bento-ratio[data-v-7b6c88b6]{grid-column:span 12}}@media (max-width: 720px){.quick-grid[data-v-7b6c88b6]{grid-template-columns:repeat(2,1fr)}.bento-kpi[data-v-7b6c88b6]{grid-column:span 12}.agv-row[data-v-7b6c88b6]{flex-direction:column;align-items:stretch}.agv-chart[data-v-7b6c88b6]{width:100%;height:220px}}:root[data-theme=industrial-purple] .status-bar[data-v-7b6c88b6]{background:linear-gradient(135deg,#26184ef0,#140c30f7);border-color:rgba(var(--mg-accent-rgb),.38);border-left-color:var(--mg-accent);box-shadow:0 4px 16px #00000061,0 0 0 1px #ffffff0f inset,0 1px #ffffff14 inset;backdrop-filter:blur(12px) saturate(140%);-webkit-backdrop-filter:blur(12px) saturate(140%);color:#f4eeff}:root[data-theme=industrial-purple] .status-conn[data-v-7b6c88b6]{background:rgba(var(--mg-primary-hover-rgb),.42);border-color:rgba(var(--mg-accent-rgb),.45);color:#f4eeff;box-shadow:inset 0 1px #ffffff1a,0 1px 4px #00000047}:root[data-theme=industrial-purple] .status-conn.success[data-v-7b6c88b6]{color:#86efac;background:rgba(var(--mg-status-success-rgb),.28);border-color:rgba(var(--mg-status-success-rgb),.58);box-shadow:inset 0 1px #ffffff1f,0 1px 4px rgba(var(--mg-status-success-rgb),.3)}:root[data-theme=industrial-purple] .status-conn.warning[data-v-7b6c88b6]{color:#fcd34d;background:rgba(var(--mg-status-warning-rgb),.28);border-color:rgba(var(--mg-status-warning-rgb),.58)}:root[data-theme=industrial-purple] .status-conn.danger[data-v-7b6c88b6]{color:#fca5a5;background:rgba(var(--mg-status-danger-rgb),.28);border-color:rgba(var(--mg-status-danger-rgb),.58)}:root[data-theme=industrial-purple] .status-stat[data-v-7b6c88b6]{background:rgba(var(--mg-primary-hover-rgb),.35);border-color:rgba(var(--mg-accent-rgb),.38);box-shadow:inset 0 1px #ffffff14,0 1px 3px #00000038}:root[data-theme=industrial-purple] .status-divider[data-v-7b6c88b6]{background:rgba(var(--mg-accent-rgb),.48)}:root[data-theme=industrial-purple] .status-stat-label[data-v-7b6c88b6]{color:#ffffffd1}:root[data-theme=industrial-purple] .status-stat-value[data-v-7b6c88b6]{color:#fff}:root[data-theme=industrial-purple] .status-stat-total[data-v-7b6c88b6]{color:#ffffff9e}:root[data-theme=industrial-purple] .status-stat-value.is-danger[data-v-7b6c88b6]{color:#fca5a5}:root[data-theme=industrial-purple] .bento[data-v-7b6c88b6]{background:linear-gradient(135deg,#26184ec7,#140c30db);border-color:rgba(var(--mg-accent-rgb),.16);box-shadow:0 10px 28px #00000073,0 0 22px rgba(var(--mg-primary-rgb),.16),0 0 0 1px #ffffff0a inset,0 1px #ffffff1f inset;backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);color:#fff}:root[data-theme=industrial-purple] .bento[data-v-7b6c88b6]:hover{border-color:rgba(var(--mg-accent-rgb),.45);box-shadow:0 18px 40px #0000008c,0 0 38px rgba(var(--mg-primary-hover-rgb),.32),0 0 0 1px rgba(var(--mg-accent-rgb),.25) inset,0 1px #ffffff2e inset}:root[data-theme=industrial-purple] .bento[data-v-7b6c88b6] .el-card__header{border-bottom-color:rgba(var(--mg-accent-rgb),.14)!important}:root[data-theme=industrial-purple] .card-title[data-v-7b6c88b6]{color:#fff}:root[data-theme=industrial-purple] .card-title .el-icon[data-v-7b6c88b6]{color:var(--mg-accent)}:root[data-theme=industrial-purple] .card-tip[data-v-7b6c88b6]{color:#ffffffb3}:root[data-theme=industrial-purple] .more-link[data-v-7b6c88b6]{color:#ffffffb3!important}:root[data-theme=industrial-purple] .more-link[data-v-7b6c88b6]:hover{color:var(--mg-accent)!important}:root[data-theme=industrial-purple] .kpi-label[data-v-7b6c88b6]{color:#ffffffb8}:root[data-theme=industrial-purple] .kpi-value[data-v-7b6c88b6]{color:#fff;text-shadow:0 0 18px rgba(var(--mg-primary-hover-rgb),.35)}:root[data-theme=industrial-purple] .agv-center-value[data-v-7b6c88b6]{color:#fff;text-shadow:0 0 18px rgba(var(--mg-primary-hover-rgb),.45)}:root[data-theme=industrial-purple] .agv-center-label[data-v-7b6c88b6]{color:#ffffffb8}:root[data-theme=industrial-purple] .agv-legend li[data-v-7b6c88b6]{color:#f4eeff}:root[data-theme=industrial-purple] .agv-legend li[data-v-7b6c88b6]:hover{background:rgba(var(--mg-accent-rgb),.1)}:root[data-theme=industrial-purple] .agv-legend .legend-name[data-v-7b6c88b6]{color:#ffffffc7}:root[data-theme=industrial-purple] .agv-legend .legend-value[data-v-7b6c88b6]{color:#fff}:root[data-theme=industrial-purple] .agv-legend .legend-pct[data-v-7b6c88b6]{color:#ffffff8c}:root[data-theme=industrial-purple] .agv-legend .dot[data-v-7b6c88b6]{box-shadow:0 0 8px currentColor}:root[data-theme=industrial-purple] .mock-tag[data-v-7b6c88b6]{background:rgba(var(--mg-accent-rgb),.18);color:var(--mg-accent)}:root[data-theme=industrial-purple] .ratio-track[data-v-7b6c88b6]{background:#ffffff0a;border-color:#ffffff14}:root[data-theme=industrial-purple] .ratio-legend li[data-v-7b6c88b6]{color:#f4eeff}:root[data-theme=industrial-purple] .ratio-legend .legend-name[data-v-7b6c88b6]{color:#ffffffb8}:root[data-theme=industrial-purple] .ratio-legend .legend-value[data-v-7b6c88b6]{color:#fff}:root[data-theme=industrial-purple] .ratio-legend .dot[data-v-7b6c88b6]{box-shadow:0 0 8px currentColor}:root[data-theme=industrial-purple] .todo-tabs[data-v-7b6c88b6] .el-tabs__item{color:#ffffffa6!important}:root[data-theme=industrial-purple] .todo-tabs[data-v-7b6c88b6] .el-tabs__item:hover,:root[data-theme=industrial-purple] .todo-tabs[data-v-7b6c88b6] .el-tabs__item.is-active{color:#fff!important}:root[data-theme=industrial-purple] .todo-tabs[data-v-7b6c88b6] .el-tabs__active-bar{background-color:var(--mg-accent)!important}:root[data-theme=industrial-purple] .empty-pane[data-v-7b6c88b6]{color:#ffffffb3}:root[data-theme=industrial-purple] .todo-list li[data-v-7b6c88b6]{background:#ffffff08;border-color:#ffffff0f;color:#f4eeff}:root[data-theme=industrial-purple] .todo-list li[data-v-7b6c88b6]:hover{background:rgba(var(--mg-accent-rgb),.08);border-color:rgba(var(--mg-accent-rgb),.3)}:root[data-theme=industrial-purple] .todo-time[data-v-7b6c88b6]{color:#ffffff8c} diff --git a/MiGu.Server/wwwroot/assets/DashboardView-Djx6JpAP.js b/MiGu.Server/wwwroot/assets/DashboardView-CKzq29Wm.js similarity index 94% rename from MiGu.Server/wwwroot/assets/DashboardView-Djx6JpAP.js rename to MiGu.Server/wwwroot/assets/DashboardView-CKzq29Wm.js index 86d150f..05503cc 100644 --- a/MiGu.Server/wwwroot/assets/DashboardView-Djx6JpAP.js +++ b/MiGu.Server/wwwroot/assets/DashboardView-CKzq29Wm.js @@ -1,4 +1,4 @@ -import{aE as iL,bc as yr,b2 as oL,aZ as sL,b3 as lL,aA as Kt,ax as $,a_ as mr,bk as Wt,aC as Da,ah as Ma,be as La,aB as pm,aD as me,bD as fe,at as _e,t as uL,br as fL,b4 as $t,a$ as Yh,ay as $h,bh as gm,Q as hL,bn as Vl,bm as vL,bw as ym,az as mm,b6 as cL,ab as dL,a8 as pL,an as gL,T as yL,bj as mL,b5 as Zh,am as _L,bl as SL,bB as xL,aU as bL,b7 as wL,X as TL,aw as AL,av as CL,ao as DL,aT as ML,aj as LL}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as IL,c as PL,l as RL,a as EL}from"./projection-b1x6abrR.js";import"./reflection-CKXyOCM_.js";/*! ***************************************************************************** +import{aG as iL,bf as yr,b5 as oL,b0 as sL,b6 as lL,aC as Kt,az as $,b1 as mr,bo as Wt,aE as Da,ah as Ma,bh as La,aD as pm,aF as me,bH as fe,av as _e,t as uL,bv as fL,b7 as $t,b2 as Yh,aA as $h,bk as gm,Q as hL,br as Vl,bq as vL,bA as ym,aB as mm,b9 as cL,ab as dL,a8 as pL,ao as gL,T as yL,bm as mL,b8 as Xh,an as _L,bp as SL,bF as xL,aW as bL,ba as wL,X as TL,ay as AL,ax as CL,ap as DL,aV as ML,aj as LL}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as IL,c as PL,l as RL,a as EL}from"./projection-BVk2tEkj.js";import"./reflection-BmVSriDn.js";/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -11,8 +11,8 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var yd=function(r,e){return yd=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,a){t.__proto__=a}||function(t,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])},yd(r,e)};function k(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");yd(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var kL=function(){function r(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return r}(),OL=function(){function r(){this.browser=new kL,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return r}(),xt=new OL;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(xt.wxa=!0,xt.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?xt.worker=!0:!xt.hasGlobalWindow||"Deno"in window?(xt.node=!0,xt.svgSupported=!0):NL(navigator.userAgent,xt);function NL(r,e){var t=e.browser,a=r.match(/Firefox\/([\d.]+)/),n=r.match(/MSIE\s([\d.]+)/)||r.match(/Trident\/.+?rv:(([\d.]+))/),i=r.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(r);a&&(t.firefox=!0,t.version=a[1]),n&&(t.ie=!0,t.version=n[1]),i&&(t.edge=!0,t.version=i[1],t.newEdge=+i[1].split(".")[0]>18),o&&(t.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!t.ie&&!t.edge,e.pointerEventsSupported="onpointerdown"in window&&(t.edge||t.ie&&+t.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(t.ie&&"transition"in s||t.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||t.ie&&+t.version>=9}var og=12,Tw="sans-serif",rn=og+"px "+Tw,BL=20,VL=100,zL="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function GL(r){var e={};if(typeof JSON>"u")return e;for(var t=0;td&&(d=m,c=f+g)}var _=this.getRawIndex(h),S=this.getRawIndex(c);h d&&(d=m,c=f+g)}var _=this.getRawIndex(h),S=this.getRawIndex(c);hg[1]&&(g[1]=p)}return this._rawCount=this._count=l,{start:s,end:l}},r.prototype._initDataFromProvider=function(e,t,a){for(var n=this._provider,i=this._chunks,o=this._dimensions,s=o.length,l=this._rawExtent,u=H(o,function(m){return m.property}),f=0;fy[1]&&(y[1]=g)}}!n.persistent&&n.clean&&n.clean(),this._rawCount=this._count=t,this._extent=[]},r.prototype.count=function(){return this._count},r.prototype.get=function(e,t){if(!(t>=0&&t