diff --git a/MiGu.Server/Auth/PageCatalog.cs b/MiGu.Server/Auth/PageCatalog.cs index 06ba9c7..bc807ab 100644 --- a/MiGu.Server/Auth/PageCatalog.cs +++ b/MiGu.Server/Auth/PageCatalog.cs @@ -45,14 +45,12 @@ public static class PageCatalog new("admin-config-system", "系统级配置", "平台配置中心", ScopePlatform), new("admin-config-integrations", "外部系统对接", "平台配置中心", ScopePlatform), new("admin-config-routing", "路径规划", "平台配置中心", ScopePlatform), - new("admin-config-vehicle", "车辆维护策略", "平台配置中心", ScopePlatform), new("admin-vehicle-hub", "车辆运维", "平台配置中心", ScopePlatform), new("admin-config-charge", "充电策略", "平台配置中心", ScopePlatform), new("admin-config-task", "任务分配", "平台配置中心", ScopePlatform), new("admin-config-traffic", "交通管制", "平台配置中心", ScopePlatform), new("admin-config-auth", "权限与角色", "平台配置中心", ScopePlatform), new("admin-config-device", "设备接入", "平台配置中心", ScopePlatform), - new("admin-config-fleet", "车队生命周期", "平台配置中心", ScopePlatform), new("admin-config-scenario", "场景模板", "平台配置中心", ScopePlatform), new("admin-config-location", "库位管理", "平台配置中心", ScopePlatform), new("admin-config-ops", "运营维护", "平台配置中心", ScopePlatform), @@ -70,9 +68,21 @@ public static class PageCatalog private static readonly HashSet _keys = All.Select(p => p.Key).ToHashSet(StringComparer.OrdinalIgnoreCase); + /// 已下线页面 Key → 合并后的新 Key(角色数据迁移用)。 + private static readonly IReadOnlyDictionary LegacyKeyAliases = + new Dictionary(StringComparer.OrdinalIgnoreCase) + { + ["admin-config-vehicle"] = "admin-vehicle-hub", + ["admin-config-fleet"] = "admin-vehicle-hub", + }; + /// 判断页面 Key 是否合法(用于角色保存时过滤掉脏数据 / 已下线页面)。 public static bool IsValidKey(string key) => _keys.Contains(key); + /// 将旧页面 Key 映射为当前有效 Key;未知 Key 原样返回。 + public static string NormalizeKey(string key) => + LegacyKeyAliases.TryGetValue(key, out var mapped) ? mapped : key; + /// 列出某 scope 下的全部页面 Key(用于把角色的 "*" 通配展开成具体页面集合)。 public static IReadOnlyList KeysForScope(string scope) => All.Where(p => string.Equals(p.Scope, scope, StringComparison.OrdinalIgnoreCase)) diff --git a/MiGu.Server/Auth/RbacStore.cs b/MiGu.Server/Auth/RbacStore.cs index a06dd0c..1f6ce27 100644 --- a/MiGu.Server/Auth/RbacStore.cs +++ b/MiGu.Server/Auth/RbacStore.cs @@ -82,7 +82,11 @@ public sealed class RbacStore snap.Users ??= new(); foreach (var r in snap.Roles) { - r.Pages = (r.Pages ?? new()).Where(p => p == PageCatalog.Wildcard || PageCatalog.IsValidKey(p)).Distinct().ToList(); + r.Pages = (r.Pages ?? new()) + .Select(p => p == PageCatalog.Wildcard ? p : PageCatalog.NormalizeKey(p)) + .Where(p => p == PageCatalog.Wildcard || PageCatalog.IsValidKey(p)) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); r.Ops = (r.Ops ?? new()).Distinct().ToList(); r.WidgetGrants ??= new(); if (string.IsNullOrWhiteSpace(r.Scope)) r.Scope = PageCatalog.ScopePlatform; diff --git a/MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js b/MiGu.Server/wwwroot/assets/AnnotationView-DCFcPZNR.js similarity index 98% rename from MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js rename to MiGu.Server/wwwroot/assets/AnnotationView-DCFcPZNR.js index d03dd2b..66844fa 100644 --- a/MiGu.Server/wwwroot/assets/AnnotationView-D9RHWYI7.js +++ b/MiGu.Server/wwwroot/assets/AnnotationView-DCFcPZNR.js @@ -1 +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}; +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-CC_hCGHZ.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/AppShell-BE7Z2zMC.js b/MiGu.Server/wwwroot/assets/AppShell-BE7Z2zMC.js deleted file mode 100644 index cb61f20..0000000 --- a/MiGu.Server/wwwroot/assets/AppShell-BE7Z2zMC.js +++ /dev/null @@ -1 +0,0 @@ -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-DSc4T3s8.js b/MiGu.Server/wwwroot/assets/AppShell-DSc4T3s8.js new file mode 100644 index 0000000..fa162ff --- /dev/null +++ b/MiGu.Server/wwwroot/assets/AppShell-DSc4T3s8.js @@ -0,0 +1 @@ +import{aG as R,bt as O,bv as G,b7 as o,aA as m,bH as e,aF as t,$ as ue,aE as p,av as f,a0 as pe,X as me,bw as q,az as a,b2 as V,bo as l,br as s,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 he,A as fe,bu as be,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-CC_hCGHZ.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(h){me.error(h?.message??`切换到 ${_} 失败`)}}return(_,h)=>{const C=ue,x=pe;return o(),m(x,{"model-value":r.value,size:"small",onChange:g},{default:e(()=>[t(C,{value:"Platform"},{default:e(()=>[...h[0]||(h[0]=[p("管理员",-1)])]),_:1}),t(C,{value:"RCSMonitor"},{default:e(()=>[...h[1]||(h[1]=[p("运营",-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,h=Q,C=K,x=X;return o(),m(x,{trigger:"click",onCommand:c},{dropdown:e(()=>[t(C,{class:"theme-menu"},{default:e(()=>[(o(!0),y(S,null,T(s(i).availableThemes,b=>(o(),m(h,{key:b.id,command:b.id,class:A({"is-active":b.id===s(i).themeId})},{default:e(()=>[a("span",{class:"option-swatch",style:V(r(b))},null,4),a("span",We,[a("span",je,l(b.name),1),a("span",Oe,l(b.description),1)]),b.id===s(i).themeId?(o(),m(_,{key:0,class:"check"},{default:e(()=>[t(s(_e))]),_:1})):D("",!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:V(E.value)},null,4),a("span",Ve,l(s(i).activeTheme.name),1),t(_,{class:"caret"},{default:e(()=>[t(s(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=be(),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()),h=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/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-hub",label:"车辆运维",key:"admin-vehicle-hub"},{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/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"}]}],b=[{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:b)),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,se=K,le=X,ie=Ee,re=ge("router-view"),ce=$e,de=De,U=fe;return o(),y("div",He,[n[8]||(n[8]=he('',1)),t(U,{class:"app-container"},{default:e(()=>[t(te,{width:s(c).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:A(["logo",{collapsed:s(c).sidebarCollapsed}])},[s(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"),p("i "),a("b",null,"G"),p("u · "),a("b",null,"I"),p("ntelligent "),a("b",null,"D"),p("ispatch "),a("b",null,"P"),p("latform ")])],-1))],64))],2),t(P,{"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,u=>(o(),y(S,{key:u.path},[u.children?(o(),m(k,{key:0,index:u.path},{title:e(()=>[t(d,null,{default:e(()=>[(o(),m(I(u.icon)))]),_:2},1024),a("span",null,l(u.label),1)]),default:e(()=>[(o(!0),y(S,null,T(u.children,$=>(o(),m(M,{key:$.path,index:$.path},{default:e(()=>[a("span",null,l($.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(o(),m(M,{key:1,index:u.path},{title:e(()=>[p(l(u.label),1)]),default:e(()=>[t(d,null,{default:e(()=>[(o(),m(I(u.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?D("",!0):(o(),y("span",Ke,l(s(c).activeTheme.name)+" · "+l(s(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]=u=>s(c).toggleSidebar()),title:"切换侧栏"},[t(d,{size:"18"},{default:e(()=>[s(c).sidebarCollapsed?(o(),m(s(Me),{key:1})):(o(),m(s(Ce),{key:0}))]),_:1})]),t(ne,{separator:"/"},{default:e(()=>[t(z,null,{default:e(()=>[p(l(h.value),1)]),_:1}),L.value?(o(),m(z,{key:0},{default:e(()=>[p(l(L.value),1)]),_:1})):D("",!0)]),_:1})]),a("div",Xe,[t(qe),t(Fe),a("span",{class:A(["runmode-tag",s(r).runMode])},l(C.value),3),t(le,{trigger:"click",onCommand:ae},{dropdown:e(()=>[t(se,null,{default:e(()=>[t(F,{command:"status"},{default:e(()=>[...n[6]||(n[6]=[p("服务状态",-1)])]),_:1}),t(F,{command:"logout",divided:""},{default:e(()=>[...n[7]||(n[7]=[p("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Ze,[t(oe,{size:"small"},{default:e(()=>[p(l(_.value),1)]),_:1}),a("span",Ye,l(s(r).user?.displayName??"未登录"),1),t(d,null,{default:e(()=>[t(s(J))]),_:1})])]),_:1})])]),_:1}),t(ce,{class:"main mg-content"},{default:e(()=>[t(re,null,{default:e(({Component:u,route:$})=>[u?(o(),m(I(u),{key:$.fullPath,class:"route-page"})):D("",!0)]),_:1})]),_:1}),t(de,{class:"footer"},{default:e(()=>[a("span",null,l(h.value)+" · webVRender :"+l(g.value)+" · API "+l(w.value),1)]),_:1})]),_:1})]),_:1})])}}}),da=Z(ea,[["__scopeId","data-v-97d773e8"]]);export{da as default}; diff --git a/MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css b/MiGu.Server/wwwroot/assets/AppShell-kSXr3TmZ.css similarity index 83% rename from MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css rename to MiGu.Server/wwwroot/assets/AppShell-kSXr3TmZ.css index 1abe7b0..9093510 100644 --- a/MiGu.Server/wwwroot/assets/AppShell-CWFWq1yp.css +++ b/MiGu.Server/wwwroot/assets/AppShell-kSXr3TmZ.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-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} +.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-97d773e8]{position:relative;height:100vh;overflow:hidden}.bg-orbs[data-v-97d773e8]{position:absolute;inset:0;pointer-events:none;z-index:0}.bg-orb[data-v-97d773e8]{position:absolute;border-radius:50%;filter:blur(120px);animation:drift-97d773e8 24s ease-in-out infinite;will-change:transform}.bg-orb-a[data-v-97d773e8]{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-97d773e8]{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-97d773e8]{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-97d773e8]{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-97d773e8{0%,to{transform:translate(0) scale(1)}50%{transform:translate(36px,-42px) scale(1.08)}}.app-container[data-v-97d773e8]{position:relative;z-index:1;height:100vh}.aside[data-v-97d773e8]{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-97d773e8]: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-97d773e8]{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-97d773e8]{padding:18px 4px 14px}.logo-img-full[data-v-97d773e8]{height:36px;margin-bottom:12px;filter:drop-shadow(0 2px 10px rgba(var(--mg-accent-rgb),.5))}.logo-img-small[data-v-97d773e8]{height:26px;margin-bottom:4px;filter:drop-shadow(0 2px 8px rgba(var(--mg-accent-rgb),.5))}.logo-titles[data-v-97d773e8]{display:flex;flex-direction:column;align-items:center;gap:3px}.logo-title-zh[data-v-97d773e8]{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-97d773e8]{color:#e8d7f573;font-size:7.5px;letter-spacing:.3px;white-space:nowrap;text-align:center}.logo-title-en b[data-v-97d773e8]{color:#ffffffe6;font-weight:700;font-size:8.5px}.logo-abbr[data-v-97d773e8]{color:#ffffffd9;font-size:10.5px;font-weight:700;letter-spacing:1.5px}.menu[data-v-97d773e8]{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-97d773e8]::-webkit-scrollbar{width:4px}.menu[data-v-97d773e8]::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.25);border-radius:2px}.menu[data-v-97d773e8]::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.55)}[data-v-97d773e8] .el-menu{border-right:none;background:transparent!important}[data-v-97d773e8] .el-menu-item,[data-v-97d773e8] .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-97d773e8] .el-menu--collapse .el-menu-item,[data-v-97d773e8] .el-menu--collapse .el-sub-menu__title{margin:2px 8px;padding:0!important;justify-content:center}[data-v-97d773e8] .el-menu-item:hover,[data-v-97d773e8] .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-97d773e8] .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-97d773e8] .el-sub-menu.is-active>.el-sub-menu__title{color:#fff!important;font-weight:600}[data-v-97d773e8] .el-sub-menu .el-menu{background:#0000002e!important;border-radius:8px;margin:0 12px;padding:4px 0}[data-v-97d773e8] .el-sub-menu .el-menu .el-menu-item{margin:1px 4px;border-radius:6px;font-size:13px;height:36px;line-height:36px}[data-v-97d773e8] .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-97d773e8]{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-97d773e8]{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-97d773e8]{background:transparent;flex:1;min-height:0;display:flex;flex-direction:column}.header[data-v-97d773e8]{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-97d773e8]: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-97d773e8],.header-right[data-v-97d773e8]{display:flex;align-items:center;gap:14px}.icon-btn[data-v-97d773e8]{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-97d773e8]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}[data-v-97d773e8] .el-breadcrumb__inner{color:#ffffffc7;font-weight:500}[data-v-97d773e8] .el-breadcrumb__separator{color:#ffffff59}[data-v-97d773e8] .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#fff;font-weight:600}.runmode-tag[data-v-97d773e8]{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-97d773e8]{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-97d773e8]{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-97d773e8]{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-97d773e8]{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-97d773e8]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.4)}.user-name[data-v-97d773e8]{font-size:13px;color:#fff;font-weight:500}[data-v-97d773e8] .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-97d773e8]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;padding:24px;background:transparent;color:#fff}.footer[data-v-97d773e8]{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-97d773e8]{min-height:0;flex:1;display:flex;flex-direction:column} diff --git a/MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js b/MiGu.Server/wwwroot/assets/AuthRoleView-CbH2OR6X.js similarity index 99% rename from MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js rename to MiGu.Server/wwwroot/assets/AuthRoleView-CbH2OR6X.js index 93c5a6a..2c041f3 100644 --- a/MiGu.Server/wwwroot/assets/AuthRoleView-BdMtSzyV.js +++ b/MiGu.Server/wwwroot/assets/AuthRoleView-CbH2OR6X.js @@ -1 +1 @@ -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}; +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-CC_hCGHZ.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-BBup3icl.js b/MiGu.Server/wwwroot/assets/CarPanelView-PMCxnAq3.js similarity index 97% rename from MiGu.Server/wwwroot/assets/CarPanelView-BBup3icl.js rename to MiGu.Server/wwwroot/assets/CarPanelView-PMCxnAq3.js index 1454275..c151e3f 100644 --- a/MiGu.Server/wwwroot/assets/CarPanelView-BBup3icl.js +++ b/MiGu.Server/wwwroot/assets/CarPanelView-PMCxnAq3.js @@ -1 +1 @@ -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}; +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-CC_hCGHZ.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-CpDwI_uG.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-CTDOoTn5.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-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.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-BJa18gVS.js similarity index 83% rename from MiGu.Server/wwwroot/assets/ChargePolicyView-Ce8wh2Wp.js rename to MiGu.Server/wwwroot/assets/ChargePolicyView-BJa18gVS.js index 705fc79..a4e93b7 100644 --- a/MiGu.Server/wwwroot/assets/ChargePolicyView-Ce8wh2Wp.js +++ b/MiGu.Server/wwwroot/assets/ChargePolicyView-BJa18gVS.js @@ -1 +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}; +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-CC_hCGHZ.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-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.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/ConfigPageBase-DYlmkUIy.js b/MiGu.Server/wwwroot/assets/ConfigPageBase-B4fOVsSK.js similarity index 95% rename from MiGu.Server/wwwroot/assets/ConfigPageBase-DYlmkUIy.js rename to MiGu.Server/wwwroot/assets/ConfigPageBase-B4fOVsSK.js index de6c754..0e4d34b 100644 --- a/MiGu.Server/wwwroot/assets/ConfigPageBase-DYlmkUIy.js +++ b/MiGu.Server/wwwroot/assets/ConfigPageBase-B4fOVsSK.js @@ -1 +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}; +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-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Z}from"./PermissionGuard-DxbOGfWF.js";import{b as tt,r as C}from"./reflection-CTDOoTn5.js";import{i as et}from"./monitorConfigCache-B5CZXjjB.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/CustomWidgetView-D9yWpJST.js b/MiGu.Server/wwwroot/assets/CustomWidgetView-D54ImLde.js similarity index 80% rename from MiGu.Server/wwwroot/assets/CustomWidgetView-D9yWpJST.js rename to MiGu.Server/wwwroot/assets/CustomWidgetView-D54ImLde.js index 743cbd3..8e742a8 100644 --- a/MiGu.Server/wwwroot/assets/CustomWidgetView-D9yWpJST.js +++ b/MiGu.Server/wwwroot/assets/CustomWidgetView-D54ImLde.js @@ -1 +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}; +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-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as y}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.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-CKzq29Wm.js b/MiGu.Server/wwwroot/assets/DashboardView-CrqZ1yEu.js similarity index 99% rename from MiGu.Server/wwwroot/assets/DashboardView-CKzq29Wm.js rename to MiGu.Server/wwwroot/assets/DashboardView-CrqZ1yEu.js index 05503cc..7ffe1e7 100644 --- a/MiGu.Server/wwwroot/assets/DashboardView-CKzq29Wm.js +++ b/MiGu.Server/wwwroot/assets/DashboardView-CrqZ1yEu.js @@ -1,4 +1,4 @@ -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";/*! ***************************************************************************** +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-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as IL,c as PL,l as RL,a as EL}from"./projection-D6ulMg5U.js";import"./reflection-CTDOoTn5.js";/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any diff --git a/MiGu.Server/wwwroot/assets/DeviceHubView-BdHihSd2.js b/MiGu.Server/wwwroot/assets/DeviceHubView-COkUK8gp.js similarity index 90% rename from MiGu.Server/wwwroot/assets/DeviceHubView-BdHihSd2.js rename to MiGu.Server/wwwroot/assets/DeviceHubView-COkUK8gp.js index 30c3a03..2e62a53 100644 --- a/MiGu.Server/wwwroot/assets/DeviceHubView-BdHihSd2.js +++ b/MiGu.Server/wwwroot/assets/DeviceHubView-COkUK8gp.js @@ -1 +1 @@ -import{aG as b,aA as u,bH as a,br as f,b7 as h,aF as e,ab as w,a8 as v,a9 as E,aa as C,a7 as D,C as P,F as T,aE as i,bo as r,a as V}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as g}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 W=b({__name:"DeviceHubView",setup(x){return(I,S)=>{const l=C,s=E,n=v,d=D,o=T,m=P,c=w;return h(),u(g,{section:"device",title:"第三方设备统一接入",description:"电梯/卷帘门/安全门/充电桩/AP/交换机/摄像头/读码器/PLC(DeviceManagementConfig)",defaults:f(V)},{default:a(({payload:t})=>[e(c,{"model-value":"drivers"},{default:a(()=>[e(n,{name:"drivers",label:"驱动绑定"},{default:a(()=>[e(s,{data:t.drivers,size:"small",border:""},{default:a(()=>[e(l,{label:"ID",prop:"id",width:"120"}),e(l,{label:"设备类型",prop:"deviceType",width:"120"}),e(l,{label:"驱动名",prop:"driverName"}),e(l,{label:"版本",prop:"version",width:"100"})]),_:1},8,["data"])]),_:2},1024),e(n,{name:"devices",label:"设备实例"},{default:a(()=>[e(s,{data:t.devices,size:"small",border:""},{default:a(()=>[e(l,{label:"ID",prop:"id",width:"120"}),e(l,{label:"名称",prop:"name",width:"140"}),e(l,{label:"类型",prop:"deviceType",width:"100"}),e(l,{label:"协议",prop:"protocol",width:"120"}),e(l,{label:"地址",prop:"address"}),e(l,{label:"启用",width:"80"},{default:a(p=>[e(d,{modelValue:p.row.enabled,"onUpdate:modelValue":_=>p.row.enabled=_},null,8,["modelValue","onUpdate:modelValue"])]),_:1})]),_:1},8,["data"])]),_:2},1024),e(n,{name:"policy",label:"健康 / 告警"},{default:a(()=>[e(m,{column:2,border:""},{default:a(()=>[e(o,{label:"心跳周期 (s)"},{default:a(()=>[i(r(t.healthPolicy.heartbeatSec),1)]),_:2},1024),e(o,{label:"离线判定 (s)"},{default:a(()=>[i(r(t.healthPolicy.offlineSec),1)]),_:2},1024),e(o,{label:"告警启用"},{default:a(()=>[i(r(t.alarmPolicy.enabled?"是":"否"),1)]),_:2},1024),e(o,{label:"规则数"},{default:a(()=>[i(r(t.alarmPolicy.rules.length),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{W as default}; +import{aG as b,aA as u,bH as a,br as f,b7 as h,aF as e,ab as w,a8 as v,a9 as E,aa as C,a7 as D,C as P,F as T,aE as i,bo as r,a as V}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as g}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const W=b({__name:"DeviceHubView",setup(x){return(I,S)=>{const l=C,s=E,n=v,d=D,o=T,m=P,c=w;return h(),u(g,{section:"device",title:"第三方设备统一接入",description:"电梯/卷帘门/安全门/充电桩/AP/交换机/摄像头/读码器/PLC(DeviceManagementConfig)",defaults:f(V)},{default:a(({payload:t})=>[e(c,{"model-value":"drivers"},{default:a(()=>[e(n,{name:"drivers",label:"驱动绑定"},{default:a(()=>[e(s,{data:t.drivers,size:"small",border:""},{default:a(()=>[e(l,{label:"ID",prop:"id",width:"120"}),e(l,{label:"设备类型",prop:"deviceType",width:"120"}),e(l,{label:"驱动名",prop:"driverName"}),e(l,{label:"版本",prop:"version",width:"100"})]),_:1},8,["data"])]),_:2},1024),e(n,{name:"devices",label:"设备实例"},{default:a(()=>[e(s,{data:t.devices,size:"small",border:""},{default:a(()=>[e(l,{label:"ID",prop:"id",width:"120"}),e(l,{label:"名称",prop:"name",width:"140"}),e(l,{label:"类型",prop:"deviceType",width:"100"}),e(l,{label:"协议",prop:"protocol",width:"120"}),e(l,{label:"地址",prop:"address"}),e(l,{label:"启用",width:"80"},{default:a(p=>[e(d,{modelValue:p.row.enabled,"onUpdate:modelValue":_=>p.row.enabled=_},null,8,["modelValue","onUpdate:modelValue"])]),_:1})]),_:1},8,["data"])]),_:2},1024),e(n,{name:"policy",label:"健康 / 告警"},{default:a(()=>[e(m,{column:2,border:""},{default:a(()=>[e(o,{label:"心跳周期 (s)"},{default:a(()=>[i(r(t.healthPolicy.heartbeatSec),1)]),_:2},1024),e(o,{label:"离线判定 (s)"},{default:a(()=>[i(r(t.healthPolicy.offlineSec),1)]),_:2},1024),e(o,{label:"告警启用"},{default:a(()=>[i(r(t.alarmPolicy.enabled?"是":"否"),1)]),_:2},1024),e(o,{label:"规则数"},{default:a(()=>[i(r(t.alarmPolicy.rules.length),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{W as default}; diff --git a/MiGu.Server/wwwroot/assets/ExternalIntegrationView-hLQNf3xD.js b/MiGu.Server/wwwroot/assets/ExternalIntegrationView-CpHHAMpz.js similarity index 87% rename from MiGu.Server/wwwroot/assets/ExternalIntegrationView-hLQNf3xD.js rename to MiGu.Server/wwwroot/assets/ExternalIntegrationView-CpHHAMpz.js index 10ef766..728598e 100644 --- a/MiGu.Server/wwwroot/assets/ExternalIntegrationView-hLQNf3xD.js +++ b/MiGu.Server/wwwroot/assets/ExternalIntegrationView-CpHHAMpz.js @@ -1 +1 @@ -import{aG as U,aA as x,bH as a,br as c,b7 as b,aF as t,ab as h,aC as g,ah as T,bh as I,a8 as S,a9 as B,aa as $,R as v,a7 as D,r as N,aE as f,ba as R,bo as z,c as A}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 F}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const le=U({__name:"ExternalIntegrationView",setup(L){function w(r,s,l){const o=`${l}-${Date.now()}`,i={...r,[l]:[...r[l],{id:o,name:"新端点",url:"http://",enabled:!1}]};s(i)}function V(r,s,l,o){const i={...r,[l]:r[l].filter((u,d)=>d!==o)};s(i)}return(r,s)=>{const l=v,o=$,i=D,u=N,d=B,E=S,C=h;return b(),x(F,{section:"integrations",title:"外部系统对接",description:"MES / WMS / RCS 等标准接口配置(ExternalIntegrations)",defaults:c(A)},{default:a(({payload:p,update:_})=>[t(C,{"model-value":"mes"},{default:a(()=>[(b(),g(T,null,I(["mes","wms","rcs"],m=>t(E,{key:m,name:m,label:m.toUpperCase()},{default:a(()=>[t(d,{data:p[m],size:"small",border:""},{default:a(()=>[t(o,{label:"ID",width:"120"},{default:a(e=>[t(l,{modelValue:e.row.id,"onUpdate:modelValue":n=>e.row.id=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"名称","min-width":"160"},{default:a(e=>[t(l,{modelValue:e.row.name,"onUpdate:modelValue":n=>e.row.name=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"URL","min-width":"260"},{default:a(e=>[t(l,{modelValue:e.row.url,"onUpdate:modelValue":n=>e.row.url=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"启用",width:"80"},{default:a(e=>[t(i,{modelValue:e.row.enabled,"onUpdate:modelValue":n=>e.row.enabled=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"操作",width:"80"},{default:a(e=>[t(u,{text:"",type:"danger",size:"small",onClick:n=>V(p,_,m,e.$index)},{default:a(()=>[...s[0]||(s[0]=[f("删除",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1032,["data"]),t(u,{size:"small",icon:c(R),style:{"margin-top":"8px"},onClick:e=>w(p,_,m)},{default:a(()=>[f("新增 "+z(m.toUpperCase())+" 端点",1)]),_:2},1032,["icon","onClick"])]),_:2},1032,["name","label"])),64))]),_:2},1024)]),_:1},8,["defaults"])}}});export{le as default}; +import{aG as U,aA as x,bH as a,br as c,b7 as b,aF as t,ab as h,aC as g,ah as T,bh as I,a8 as S,a9 as B,aa as $,R as v,a7 as D,r as N,aE as f,ba as R,bo as z,c as A}from"./index-CC_hCGHZ.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 F}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const le=U({__name:"ExternalIntegrationView",setup(L){function w(r,s,l){const o=`${l}-${Date.now()}`,i={...r,[l]:[...r[l],{id:o,name:"新端点",url:"http://",enabled:!1}]};s(i)}function V(r,s,l,o){const i={...r,[l]:r[l].filter((u,d)=>d!==o)};s(i)}return(r,s)=>{const l=v,o=$,i=D,u=N,d=B,E=S,C=h;return b(),x(F,{section:"integrations",title:"外部系统对接",description:"MES / WMS / RCS 等标准接口配置(ExternalIntegrations)",defaults:c(A)},{default:a(({payload:p,update:_})=>[t(C,{"model-value":"mes"},{default:a(()=>[(b(),g(T,null,I(["mes","wms","rcs"],m=>t(E,{key:m,name:m,label:m.toUpperCase()},{default:a(()=>[t(d,{data:p[m],size:"small",border:""},{default:a(()=>[t(o,{label:"ID",width:"120"},{default:a(e=>[t(l,{modelValue:e.row.id,"onUpdate:modelValue":n=>e.row.id=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"名称","min-width":"160"},{default:a(e=>[t(l,{modelValue:e.row.name,"onUpdate:modelValue":n=>e.row.name=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"URL","min-width":"260"},{default:a(e=>[t(l,{modelValue:e.row.url,"onUpdate:modelValue":n=>e.row.url=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"启用",width:"80"},{default:a(e=>[t(i,{modelValue:e.row.enabled,"onUpdate:modelValue":n=>e.row.enabled=n},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),t(o,{label:"操作",width:"80"},{default:a(e=>[t(u,{text:"",type:"danger",size:"small",onClick:n=>V(p,_,m,e.$index)},{default:a(()=>[...s[0]||(s[0]=[f("删除",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1032,["data"]),t(u,{size:"small",icon:c(R),style:{"margin-top":"8px"},onClick:e=>w(p,_,m)},{default:a(()=>[f("新增 "+z(m.toUpperCase())+" 端点",1)]),_:2},1032,["icon","onClick"])]),_:2},1032,["name","label"])),64))]),_:2},1024)]),_:1},8,["defaults"])}}});export{le as default}; diff --git a/MiGu.Server/wwwroot/assets/FleetLifecycleView-Dyw9UG3W.js b/MiGu.Server/wwwroot/assets/FleetLifecycleView-Dyw9UG3W.js deleted file mode 100644 index 93a16de..0000000 --- a/MiGu.Server/wwwroot/assets/FleetLifecycleView-Dyw9UG3W.js +++ /dev/null @@ -1 +0,0 @@ -import{aG as f,aA as c,bH as t,br as h,b7 as _,aF as e,ab as g,a8 as T,a9 as E,aa as w,aC as k,ah as C,bh as F,ac as D,aE as l,bo as o,C as x,F as L,b as B}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as O}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 Z=f({__name:"FleetLifecycleView",setup(A){return(z,I)=>{const s=w,p=D,b=E,n=T,r=L,i=x,d=g;return _(),c(O,{section:"fleet",title:"车队全生命周期",description:"分区域/跨楼层/多车协作;OTA、批量操作、网络诊断(FleetLifecycleConfig)",defaults:h(B)},{default:t(({payload:a})=>[e(d,{"model-value":"groups"},{default:t(()=>[e(n,{name:"groups",label:"车队分组"},{default:t(()=>[e(b,{data:a.groups,size:"small",border:""},{default:t(()=>[e(s,{label:"ID",prop:"id",width:"100"}),e(s,{label:"名称",prop:"name",width:"140"}),e(s,{label:"楼层",prop:"floor",width:"80"}),e(s,{label:"区域",prop:"region",width:"80"}),e(s,{label:"车辆"},{default:t(u=>[(_(!0),k(C,null,F(u.row.carIds,m=>(_(),c(p,{key:m,size:"small",style:{margin:"2px"}},{default:t(()=>[l(o(m),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:2},1024),e(n,{name:"ota",label:"OTA 升级"},{default:t(()=>[e(i,{column:2,border:""},{default:t(()=>[e(r,{label:"启用"},{default:t(()=>[l(o(a.ota.enabled?"是":"否"),1)]),_:2},1024),e(r,{label:"批次大小"},{default:t(()=>[l(o(a.ota.batchSize),1)]),_:2},1024),e(r,{label:"失败回滚"},{default:t(()=>[l(o(a.ota.rollbackOnFail?"是":"否"),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),e(n,{name:"batch",label:"批量操作"},{default:t(()=>[e(i,{column:2,border:""},{default:t(()=>[e(r,{label:"需确认"},{default:t(()=>[l(o(a.batchOps.confirmationRequired?"是":"否"),1)]),_:2},1024),e(r,{label:"最大批量"},{default:t(()=>[l(o(a.batchOps.maxBatch),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),e(n,{name:"diag",label:"网络诊断"},{default:t(()=>[e(i,{column:2,border:""},{default:t(()=>[e(r,{label:"RTT 阈值 (ms)"},{default:t(()=>[l(o(a.networkDiag.rttThresholdMs),1)]),_:2},1024),e(r,{label:"丢包阈值"},{default:t(()=>[l(o(a.networkDiag.packetLossThreshold),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{Z as default}; diff --git a/MiGu.Server/wwwroot/assets/LocationView-BGR6UzZX.js b/MiGu.Server/wwwroot/assets/LocationView-DLR_9_m5.js similarity index 86% rename from MiGu.Server/wwwroot/assets/LocationView-BGR6UzZX.js rename to MiGu.Server/wwwroot/assets/LocationView-DLR_9_m5.js index e6bccfd..23be524 100644 --- a/MiGu.Server/wwwroot/assets/LocationView-BGR6UzZX.js +++ b/MiGu.Server/wwwroot/assets/LocationView-DLR_9_m5.js @@ -1 +1 @@ -import{aG as s,aA as m,bH as t,br as c,b7 as d,aF as e,ab as _,a8 as b,a9 as u,aa as f,_ as w,d as h}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 */import{C as g}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 H=s({__name:"LocationView",setup(T){return(C,E)=>{const a=f,i=w,o=u,l=b,n=_;return d(),m(g,{section:"location",title:"库位管理",description:"出入库、库存、库位可视化(LocationManagement)",defaults:c(h)},{default:t(({payload:r})=>[e(n,{"model-value":"locs"},{default:t(()=>[e(l,{name:"locs",label:"库位"},{default:t(()=>[e(o,{data:r.locations,size:"small",border:""},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"编码",prop:"code",width:"120"}),e(a,{label:"名称",prop:"name"}),e(a,{label:"站点",prop:"siteId",width:"100"}),e(a,{label:"容量",prop:"capacity",width:"100"}),e(a,{label:"占用"},{default:t(p=>[e(i,{percentage:Math.round(p.row.occupied/p.row.capacity*100),"stroke-width":10},null,8,["percentage"])]),_:1})]),_:1},8,["data"])]),_:2},1024),e(l,{name:"rules",label:"库存规则"},{default:t(()=>[e(o,{data:r.inventoryRules,size:"small",border:""},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"物料类型",prop:"itemType"}),e(a,{label:"下限",prop:"minQty",width:"100"}),e(a,{label:"上限",prop:"maxQty",width:"100"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{H as default}; +import{aG as s,aA as m,bH as t,br as c,b7 as d,aF as e,ab as _,a8 as b,a9 as u,aa as f,_ as w,d as h}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import{C as g}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const H=s({__name:"LocationView",setup(T){return(C,E)=>{const a=f,i=w,o=u,l=b,n=_;return d(),m(g,{section:"location",title:"库位管理",description:"出入库、库存、库位可视化(LocationManagement)",defaults:c(h)},{default:t(({payload:r})=>[e(n,{"model-value":"locs"},{default:t(()=>[e(l,{name:"locs",label:"库位"},{default:t(()=>[e(o,{data:r.locations,size:"small",border:""},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"编码",prop:"code",width:"120"}),e(a,{label:"名称",prop:"name"}),e(a,{label:"站点",prop:"siteId",width:"100"}),e(a,{label:"容量",prop:"capacity",width:"100"}),e(a,{label:"占用"},{default:t(p=>[e(i,{percentage:Math.round(p.row.occupied/p.row.capacity*100),"stroke-width":10},null,8,["percentage"])]),_:1})]),_:1},8,["data"])]),_:2},1024),e(l,{name:"rules",label:"库存规则"},{default:t(()=>[e(o,{data:r.inventoryRules,size:"small",border:""},{default:t(()=>[e(a,{label:"ID",prop:"id",width:"100"}),e(a,{label:"物料类型",prop:"itemType"}),e(a,{label:"下限",prop:"minQty",width:"100"}),e(a,{label:"上限",prop:"maxQty",width:"100"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{H as default}; diff --git a/MiGu.Server/wwwroot/assets/LoginView-Clx-477K.js b/MiGu.Server/wwwroot/assets/LoginView-BoWUwdFm.js similarity index 99% rename from MiGu.Server/wwwroot/assets/LoginView-Clx-477K.js rename to MiGu.Server/wwwroot/assets/LoginView-BoWUwdFm.js index 03982d1..a9db05a 100644 --- a/MiGu.Server/wwwroot/assets/LoginView-Clx-477K.js +++ b/MiGu.Server/wwwroot/assets/LoginView-BoWUwdFm.js @@ -1 +1 @@ -import{aG as N,bu as q,bv as F,bt as B,bw as H,b7 as C,aC as M,aD as P,az as a,ah as O,bh as G,b2 as Y,br as r,bo as y,aF as s,bH as o,O as j,R as Q,Q as X,bx as J,aY as K,b1 as c,bm as Z,a_ as ee,af as ae,bd as se,aE as p,ay as oe,aw as te,u as le,T as ne,x as de,y as re,S as ie,r as ue,N as pe,bf as h,be as x,av as me,X as f,aj as ce}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";const fe={class:"login-page"},ve={class:"bg-stars","aria-hidden":"true"},be={class:"login-card mg-glass-lg"},ge={class:"hero"},_e={class:"hero-footnote"},we={class:"panel"},Ve={class:"scope-wrap"},ye={class:"launch-mode-head"},he={class:"scope-wrap launch-wrap"},ke={class:"row row-between"},Ee={class:"adv-grid"},Ce={class:"footer-stamp"},Me=N({__name:"LoginView",setup(Pe){const R=q(),S=F(),k=B(),E=H(),v=h(),b=h(!1),m=h([]),l=x({username:"admin",password:"admin",scope:"Platform",launchMode:"DesktopAndWeb",remember:!0}),i=x({host:"0.0.0.0",apiPort:7001,platformPort:8080,vrPort:8223}),W={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],scope:[{required:!0,message:"请选择 scope",trigger:"change"}],launchMode:[{required:!0,message:"请选择启动模式",trigger:"change"}]},T=me(()=>new Date().getFullYear()),I=Array.from({length:18},(g,e)=>{const n=Math.random()*100,u=Math.random()*100,d=2+Math.random()*3,_=-Math.random()*6,w=.35+Math.random()*.45;return{top:`${n}%`,left:`${u}%`,width:`${d}px`,height:`${d}px`,opacity:`${w}`,animationDelay:`${_}s`}});async function $(){v.value&&await v.value.validate(async g=>{if(g){b.value=!0;try{const e=await k.login({username:l.username,password:l.password,scope:l.scope,launchMode:l.launchMode});f.success(`欢迎,${k.user?.displayName??l.username}`),e.launchWarning?f({message:e.launchWarning,type:"warning",duration:6e3,showClose:!0}):e.runMode==="Detached"&&f({message:"SimpleLite 未启动(Platform.Server 单独运行),/api/sl/* 相关功能将不可用。",type:"warning",duration:6e3,showClose:!0});const n=R.query.redirect??(l.scope==="Platform"?"/admin/dashboard":"/monitor/map");S.push(n)}catch(e){const n=e instanceof Error?e.message:String(e);f.error(`登录失败:${n}`)}finally{b.value=!1}}})}return(g,e)=>{const n=X,u=Q,d=j,_=ae,w=le,z=ne,V=ie,L=re,U=de,A=ue,D=pe;return C(),M("div",fe,[e[27]||(e[27]=P('
',5)),a("div",ve,[(C(),M(O,null,G(18,t=>a("span",{key:t,style:Y(r(I)[t-1])},null,4)),64))]),a("div",be,[a("div",ge,[e[14]||(e[14]=P('
迷毂
智 能 调 度 平 台
INTELLIGENT · DISPATCH · PLATFORM
  • 复刻 ARCHITECTURE.md §3.2 启动登录窗
  • Web-Enabled · 管理员 / 运营 双视图
  • 嵌入 webVRender 真实 3D 场景
',5)),a("div",_e,[e[13]||(e[13]=a("span",{class:"badge"},"v1.7",-1)),a("span",null,y(r(E).activeTheme.name)+" · "+y(r(E).activeTheme.preview),1)])]),a("div",we,[e[26]||(e[26]=a("div",{class:"panel-head"},[a("div",{class:"panel-title"},"登 录"),a("div",{class:"panel-sub"},"访问 SimpleLite 的 Vue 外壳")],-1)),s(D,{ref_key:"formRef",ref:v,model:l,rules:W,class:"glass-form","hide-required-asterisk":""},{default:o(()=>[s(d,{prop:"username"},{default:o(()=>[s(u,{modelValue:l.username,"onUpdate:modelValue":e[0]||(e[0]=t=>l.username=t),size:"large",placeholder:"用户名",autocomplete:"username",clearable:""},{prefix:o(()=>[s(n,null,{default:o(()=>[s(r(J))]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(d,{prop:"password"},{default:o(()=>[s(u,{modelValue:l.password,"onUpdate:modelValue":e[1]||(e[1]=t=>l.password=t),type:"password",size:"large","show-password":"",placeholder:"密码(Mock,任意非空)",autocomplete:"current-password"},{prefix:o(()=>[s(n,null,{default:o(()=>[s(r(K))]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(d,{prop:"scope",class:"scope-item"},{default:o(()=>[a("div",Ve,[a("button",{type:"button",class:c(["scope-tab",{active:l.scope==="Platform"}]),onClick:e[2]||(e[2]=t=>l.scope="Platform")},[s(n,null,{default:o(()=>[s(r(Z))]),_:1}),e[15]||(e[15]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"管理员"),a("div",{class:"scope-desc"},"platform-vue · 全功能")],-1))],2),a("button",{type:"button",class:c(["scope-tab",{active:l.scope==="RCSMonitor"}]),onClick:e[3]||(e[3]=t=>l.scope="RCSMonitor")},[s(n,null,{default:o(()=>[s(r(ee))]),_:1}),e[16]||(e[16]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"运营"),a("div",{class:"scope-desc"},"rcsmonitor-vue · 受限")],-1))],2)])]),_:1}),s(d,{prop:"launchMode",class:"scope-item launch-mode-item"},{default:o(()=>[a("div",ye,[e[18]||(e[18]=a("span",{class:"launch-mode-title"},"SimpleLite 启动模式",-1)),s(_,{placement:"top"},{content:o(()=>[...e[17]||(e[17]=[a("div",{class:"launch-tip"},[a("div",null,[a("b",null,"本地+Web"),p(":登录后由 Platform 后端拉起 SimpleLite,同时打开桌面端 ImGui 窗口与浏览器端 webVRender。")]),a("div",null,[a("b",null,"仅 Web"),p(":只起 WebTerminal,不弹本地桌面窗口,适合远程办公 / 服务器部署。")])],-1)])]),default:o(()=>[s(n,{class:"launch-mode-help"},{default:o(()=>[s(r(se))]),_:1})]),_:1})]),a("div",he,[a("button",{type:"button",class:c(["scope-tab",{active:l.launchMode==="DesktopAndWeb"}]),onClick:e[4]||(e[4]=t=>l.launchMode="DesktopAndWeb")},[s(n,null,{default:o(()=>[s(r(oe))]),_:1}),e[19]||(e[19]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"本地 + Web"),a("div",{class:"scope-desc"},"桌面窗口 & 浏览器同时启动")],-1))],2),a("button",{type:"button",class:c(["scope-tab",{active:l.launchMode==="WebOnly"}]),onClick:e[5]||(e[5]=t=>l.launchMode="WebOnly")},[s(n,null,{default:o(()=>[s(r(te))]),_:1}),e[20]||(e[20]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"仅 Web"),a("div",{class:"scope-desc"},"不启桌面窗口 · 浏览器使用")],-1))],2)])]),_:1}),a("div",ke,[s(w,{modelValue:l.remember,"onUpdate:modelValue":e[6]||(e[6]=t=>l.remember=t),size:"default",class:"remember"},{default:o(()=>[...e[21]||(e[21]=[p("下次自动按当前 scope 进入",-1)])]),_:1},8,["modelValue"]),s(z,{underline:"never",class:"adv-link",onClick:e[7]||(e[7]=t=>m.value=m.value.length?[]:["adv"])},{default:o(()=>[...e[22]||(e[22]=[p("高级 ›",-1)])]),_:1})]),s(U,{modelValue:m.value,"onUpdate:modelValue":e[12]||(e[12]=t=>m.value=t),class:"adv-collapse"},{default:o(()=>[s(L,{name:"adv"},{title:o(()=>[...e[23]||(e[23]=[a("span",{class:"adv-title"},"Web-Enabled · 端口与监听",-1)])]),default:o(()=>[a("div",Ee,[s(d,{label:"监听地址"},{default:o(()=>[s(u,{modelValue:i.host,"onUpdate:modelValue":e[8]||(e[8]=t=>i.host=t),size:"default"},null,8,["modelValue"])]),_:1}),s(d,{label:"WebAPI"},{default:o(()=>[s(V,{modelValue:i.apiPort,"onUpdate:modelValue":e[9]||(e[9]=t=>i.apiPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1}),s(d,{label:"Platform"},{default:o(()=>[s(V,{modelValue:i.platformPort,"onUpdate:modelValue":e[10]||(e[10]=t=>i.platformPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1}),s(d,{label:"webVRender"},{default:o(()=>[s(V,{modelValue:i.vrPort,"onUpdate:modelValue":e[11]||(e[11]=t=>i.vrPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1})])]),_:1})]),_:1},8,["modelValue"]),s(A,{type:"primary",loading:b.value,class:"btn-login",size:"large",onClick:$},{default:o(()=>[...e[24]||(e[24]=[p(" 登 录 ",-1)])]),_:1},8,["loading"]),e[25]||(e[25]=a("div",{class:"bottom-note"}," 任意非空用户名 + 任意密码即可登录;scope 决定进入 admin / monitor 视图;权限按 Mock 表生成。 ",-1))]),_:1},8,["model"])])]),a("div",Ce," 迷毂 · "+y(T.value)+" · ARCHITECTURE v1.6 · powered by webVRender ",1)])}}}),De=ce(Me,[["__scopeId","data-v-a5f3efd2"]]);export{De as default}; +import{aG as N,bu as q,bv as F,bt as B,bw as H,b7 as C,aC as M,aD as P,az as a,ah as O,bh as G,b2 as Y,br as r,bo as y,aF as s,bH as o,O as j,R as Q,Q as X,bx as J,aY as K,b1 as c,bm as Z,a_ as ee,af as ae,bd as se,aE as p,ay as oe,aw as te,u as le,T as ne,x as de,y as re,S as ie,r as ue,N as pe,bf as h,be as x,av as me,X as f,aj as ce}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";const fe={class:"login-page"},ve={class:"bg-stars","aria-hidden":"true"},be={class:"login-card mg-glass-lg"},ge={class:"hero"},_e={class:"hero-footnote"},we={class:"panel"},Ve={class:"scope-wrap"},ye={class:"launch-mode-head"},he={class:"scope-wrap launch-wrap"},ke={class:"row row-between"},Ee={class:"adv-grid"},Ce={class:"footer-stamp"},Me=N({__name:"LoginView",setup(Pe){const R=q(),S=F(),k=B(),E=H(),v=h(),b=h(!1),m=h([]),l=x({username:"admin",password:"admin",scope:"Platform",launchMode:"DesktopAndWeb",remember:!0}),i=x({host:"0.0.0.0",apiPort:7001,platformPort:8080,vrPort:8223}),W={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],scope:[{required:!0,message:"请选择 scope",trigger:"change"}],launchMode:[{required:!0,message:"请选择启动模式",trigger:"change"}]},T=me(()=>new Date().getFullYear()),I=Array.from({length:18},(g,e)=>{const n=Math.random()*100,u=Math.random()*100,d=2+Math.random()*3,_=-Math.random()*6,w=.35+Math.random()*.45;return{top:`${n}%`,left:`${u}%`,width:`${d}px`,height:`${d}px`,opacity:`${w}`,animationDelay:`${_}s`}});async function $(){v.value&&await v.value.validate(async g=>{if(g){b.value=!0;try{const e=await k.login({username:l.username,password:l.password,scope:l.scope,launchMode:l.launchMode});f.success(`欢迎,${k.user?.displayName??l.username}`),e.launchWarning?f({message:e.launchWarning,type:"warning",duration:6e3,showClose:!0}):e.runMode==="Detached"&&f({message:"SimpleLite 未启动(Platform.Server 单独运行),/api/sl/* 相关功能将不可用。",type:"warning",duration:6e3,showClose:!0});const n=R.query.redirect??(l.scope==="Platform"?"/admin/dashboard":"/monitor/map");S.push(n)}catch(e){const n=e instanceof Error?e.message:String(e);f.error(`登录失败:${n}`)}finally{b.value=!1}}})}return(g,e)=>{const n=X,u=Q,d=j,_=ae,w=le,z=ne,V=ie,L=re,U=de,A=ue,D=pe;return C(),M("div",fe,[e[27]||(e[27]=P('
',5)),a("div",ve,[(C(),M(O,null,G(18,t=>a("span",{key:t,style:Y(r(I)[t-1])},null,4)),64))]),a("div",be,[a("div",ge,[e[14]||(e[14]=P('
迷毂
智 能 调 度 平 台
INTELLIGENT · DISPATCH · PLATFORM
  • 复刻 ARCHITECTURE.md §3.2 启动登录窗
  • Web-Enabled · 管理员 / 运营 双视图
  • 嵌入 webVRender 真实 3D 场景
',5)),a("div",_e,[e[13]||(e[13]=a("span",{class:"badge"},"v1.7",-1)),a("span",null,y(r(E).activeTheme.name)+" · "+y(r(E).activeTheme.preview),1)])]),a("div",we,[e[26]||(e[26]=a("div",{class:"panel-head"},[a("div",{class:"panel-title"},"登 录"),a("div",{class:"panel-sub"},"访问 SimpleLite 的 Vue 外壳")],-1)),s(D,{ref_key:"formRef",ref:v,model:l,rules:W,class:"glass-form","hide-required-asterisk":""},{default:o(()=>[s(d,{prop:"username"},{default:o(()=>[s(u,{modelValue:l.username,"onUpdate:modelValue":e[0]||(e[0]=t=>l.username=t),size:"large",placeholder:"用户名",autocomplete:"username",clearable:""},{prefix:o(()=>[s(n,null,{default:o(()=>[s(r(J))]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(d,{prop:"password"},{default:o(()=>[s(u,{modelValue:l.password,"onUpdate:modelValue":e[1]||(e[1]=t=>l.password=t),type:"password",size:"large","show-password":"",placeholder:"密码(Mock,任意非空)",autocomplete:"current-password"},{prefix:o(()=>[s(n,null,{default:o(()=>[s(r(K))]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(d,{prop:"scope",class:"scope-item"},{default:o(()=>[a("div",Ve,[a("button",{type:"button",class:c(["scope-tab",{active:l.scope==="Platform"}]),onClick:e[2]||(e[2]=t=>l.scope="Platform")},[s(n,null,{default:o(()=>[s(r(Z))]),_:1}),e[15]||(e[15]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"管理员"),a("div",{class:"scope-desc"},"platform-vue · 全功能")],-1))],2),a("button",{type:"button",class:c(["scope-tab",{active:l.scope==="RCSMonitor"}]),onClick:e[3]||(e[3]=t=>l.scope="RCSMonitor")},[s(n,null,{default:o(()=>[s(r(ee))]),_:1}),e[16]||(e[16]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"运营"),a("div",{class:"scope-desc"},"rcsmonitor-vue · 受限")],-1))],2)])]),_:1}),s(d,{prop:"launchMode",class:"scope-item launch-mode-item"},{default:o(()=>[a("div",ye,[e[18]||(e[18]=a("span",{class:"launch-mode-title"},"SimpleLite 启动模式",-1)),s(_,{placement:"top"},{content:o(()=>[...e[17]||(e[17]=[a("div",{class:"launch-tip"},[a("div",null,[a("b",null,"本地+Web"),p(":登录后由 Platform 后端拉起 SimpleLite,同时打开桌面端 ImGui 窗口与浏览器端 webVRender。")]),a("div",null,[a("b",null,"仅 Web"),p(":只起 WebTerminal,不弹本地桌面窗口,适合远程办公 / 服务器部署。")])],-1)])]),default:o(()=>[s(n,{class:"launch-mode-help"},{default:o(()=>[s(r(se))]),_:1})]),_:1})]),a("div",he,[a("button",{type:"button",class:c(["scope-tab",{active:l.launchMode==="DesktopAndWeb"}]),onClick:e[4]||(e[4]=t=>l.launchMode="DesktopAndWeb")},[s(n,null,{default:o(()=>[s(r(oe))]),_:1}),e[19]||(e[19]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"本地 + Web"),a("div",{class:"scope-desc"},"桌面窗口 & 浏览器同时启动")],-1))],2),a("button",{type:"button",class:c(["scope-tab",{active:l.launchMode==="WebOnly"}]),onClick:e[5]||(e[5]=t=>l.launchMode="WebOnly")},[s(n,null,{default:o(()=>[s(r(te))]),_:1}),e[20]||(e[20]=a("div",{class:"scope-meta"},[a("div",{class:"scope-name"},"仅 Web"),a("div",{class:"scope-desc"},"不启桌面窗口 · 浏览器使用")],-1))],2)])]),_:1}),a("div",ke,[s(w,{modelValue:l.remember,"onUpdate:modelValue":e[6]||(e[6]=t=>l.remember=t),size:"default",class:"remember"},{default:o(()=>[...e[21]||(e[21]=[p("下次自动按当前 scope 进入",-1)])]),_:1},8,["modelValue"]),s(z,{underline:"never",class:"adv-link",onClick:e[7]||(e[7]=t=>m.value=m.value.length?[]:["adv"])},{default:o(()=>[...e[22]||(e[22]=[p("高级 ›",-1)])]),_:1})]),s(U,{modelValue:m.value,"onUpdate:modelValue":e[12]||(e[12]=t=>m.value=t),class:"adv-collapse"},{default:o(()=>[s(L,{name:"adv"},{title:o(()=>[...e[23]||(e[23]=[a("span",{class:"adv-title"},"Web-Enabled · 端口与监听",-1)])]),default:o(()=>[a("div",Ee,[s(d,{label:"监听地址"},{default:o(()=>[s(u,{modelValue:i.host,"onUpdate:modelValue":e[8]||(e[8]=t=>i.host=t),size:"default"},null,8,["modelValue"])]),_:1}),s(d,{label:"WebAPI"},{default:o(()=>[s(V,{modelValue:i.apiPort,"onUpdate:modelValue":e[9]||(e[9]=t=>i.apiPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1}),s(d,{label:"Platform"},{default:o(()=>[s(V,{modelValue:i.platformPort,"onUpdate:modelValue":e[10]||(e[10]=t=>i.platformPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1}),s(d,{label:"webVRender"},{default:o(()=>[s(V,{modelValue:i.vrPort,"onUpdate:modelValue":e[11]||(e[11]=t=>i.vrPort=t),min:1,max:65535,size:"default","controls-position":"right"},null,8,["modelValue"])]),_:1})])]),_:1})]),_:1},8,["modelValue"]),s(A,{type:"primary",loading:b.value,class:"btn-login",size:"large",onClick:$},{default:o(()=>[...e[24]||(e[24]=[p(" 登 录 ",-1)])]),_:1},8,["loading"]),e[25]||(e[25]=a("div",{class:"bottom-note"}," 任意非空用户名 + 任意密码即可登录;scope 决定进入 admin / monitor 视图;权限按 Mock 表生成。 ",-1))]),_:1},8,["model"])])]),a("div",Ce," 迷毂 · "+y(T.value)+" · ARCHITECTURE v1.6 · powered by webVRender ",1)])}}}),De=ce(Me,[["__scopeId","data-v-a5f3efd2"]]);export{De as default}; diff --git a/MiGu.Server/wwwroot/assets/MapEditorView-Blj6CGw0.js b/MiGu.Server/wwwroot/assets/MapEditorView-Blj6CGw0.js new file mode 100644 index 0000000..e3acf4b --- /dev/null +++ b/MiGu.Server/wwwroot/assets/MapEditorView-Blj6CGw0.js @@ -0,0 +1 @@ +import{aG as Ae,aC as U,aF as a,I as na,bH as l,az as s,af as rt,aA as J,aB as Z,ac as ut,b7 as V,r as Xe,aE as y,K as oa,J as sa,bo as j,aj as Ne,a2 as xt,ah as ce,bh as we,b1 as Be,bG as he,ab as ia,bf as $,a8 as ra,Q as Vt,br as O,aT as kt,aX as _t,Z as ua,R as dt,E as ct,N as $t,O as Ct,S as At,z as Nt,a7 as jt,a9 as qe,aa as Qe,av as Q,a3 as da,be as Ze,G as pt,ag as ca,bs as pa,a0 as ma,$ as fa,x as va,T as ya,y as ba,bv as ga,X as C,bJ as wa,bI as ha,by as ka,b5 as Ft,b4 as _a,bt as Sa,b6 as xa,Y as H}from"./index-CC_hCGHZ.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 */import{W as Va}from"./Workspace3D-CE3B9LLc.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{h as ze,a as Ie,r as q,n as $a}from"./reflection-CTDOoTn5.js";/* empty css *//* empty css *//* empty css *//* empty css */import{m as R,a as St}from"./mapEdit-Z_uHqZwy.js";/* empty css */import{u as Ca}from"./useMapEditStream-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.js";const Aa={class:"edit-top-bar"},Na=Ae({__name:"EditTopBar",props:{canUndo:{type:Boolean},canRedo:{type:Boolean},saving:{type:Boolean},viewFilter:{}},emits:["cmd"],setup(o,{emit:A}){const g=A;function p(x){g("cmd",x)}function h(x){return x?"☑":"☐"}return(x,r)=>{const m=Xe,n=sa,_=oa,F=na,f=rt,b=ut;return V(),U("div",Aa,[a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"project.open"},{default:l(()=>[...r[3]||(r[3]=[y("加载文件…",-1)])]),_:1}),a(n,{command:"project.save"},{default:l(()=>[...r[4]||(r[4]=[y("保存文件",-1)])]),_:1}),a(n,{command:"project.saveAs"},{default:l(()=>[...r[5]||(r[5]=[y("另存为…",-1)])]),_:1}),a(n,{command:"project.props",divided:""},{default:l(()=>[...r[6]||(r[6]=[y("项目属性",-1)])]),_:1}),a(n,{command:"project.close"},{default:l(()=>[...r[7]||(r[7]=[y("关闭",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[2]||(r[2]=[y("项目加载和保存",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"file.import.dwg"},{default:l(()=>[...r[9]||(r[9]=[y("导入 .dwg/.dxf",-1)])]),_:1}),a(n,{command:"file.import.geojson"},{default:l(()=>[...r[10]||(r[10]=[y("导入 .geojson",-1)])]),_:1}),a(n,{command:"file.upload.image",divided:""},{default:l(()=>[...r[11]||(r[11]=[y("导入图片",-1)])]),_:1}),a(n,{command:"file.upload.model"},{default:l(()=>[...r[12]||(r[12]=[y("导入 CycleGUI 模型",-1)])]),_:1}),a(n,{command:"file.export.png",divided:""},{default:l(()=>[...r[13]||(r[13]=[y("导出 PNG",-1)])]),_:1}),a(n,{command:"file.export.svg"},{default:l(()=>[...r[14]||(r[14]=[y("导出 SVG",-1)])]),_:1}),a(n,{command:"file.export.json"},{default:l(()=>[...r[15]||(r[15]=[y("导出 JSON",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[8]||(r[8]=[y("导入",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"edit.cut"},{default:l(()=>[...r[17]||(r[17]=[y("剪切 (Ctrl+X)",-1)])]),_:1}),a(n,{command:"edit.copy"},{default:l(()=>[...r[18]||(r[18]=[y("复制 (Ctrl+C)",-1)])]),_:1}),a(n,{command:"edit.paste"},{default:l(()=>[...r[19]||(r[19]=[y("粘贴 (Ctrl+V)",-1)])]),_:1}),a(n,{command:"edit.delete"},{default:l(()=>[...r[20]||(r[20]=[y("删除 (Del)",-1)])]),_:1}),a(n,{command:"edit.selectAll",divided:""},{default:l(()=>[...r[21]||(r[21]=[y("全选",-1)])]),_:1}),a(n,{command:"edit.invert"},{default:l(()=>[...r[22]||(r[22]=[y("反选",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[16]||(r[16]=[y("编辑",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"edit.undo",disabled:!o.canUndo},{default:l(()=>[...r[24]||(r[24]=[y("撤销 (Ctrl+Z)",-1)])]),_:1},8,["disabled"]),a(n,{command:"edit.redo",disabled:!o.canRedo},{default:l(()=>[...r[25]||(r[25]=[y("重做 (Ctrl+Y)",-1)])]),_:1},8,["disabled"])]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[23]||(r[23]=[y("撤销",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"view.fitAll"},{default:l(()=>[...r[27]||(r[27]=[y("缩放至全屏",-1)])]),_:1}),a(n,{command:"view.fitSelection"},{default:l(()=>[...r[28]||(r[28]=[y("缩放至选中",-1)])]),_:1}),a(n,{command:"view.toggleGrid",divided:""},{default:l(()=>[...r[29]||(r[29]=[y("显示网格",-1)])]),_:1}),a(n,{command:"view.toggleScale"},{default:l(()=>[...r[30]||(r[30]=[y("显示比例尺",-1)])]),_:1}),a(n,{command:"view.toggle2D"},{default:l(()=>[...r[31]||(r[31]=[y("切换 2D / 3D",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[26]||(r[26]=[y("视图",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"layer.new"},{default:l(()=>[...r[33]||(r[33]=[y("新建图层…",-1)])]),_:1}),a(n,{command:"layer.toggleVisibility"},{default:l(()=>[...r[34]||(r[34]=[y("切换显示图层…",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[32]||(r[32]=[y("图层",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,{class:"topbar-filter-menu"},{default:l(()=>[a(n,{disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[36]||(r[36]=[y("选择(可拾取)",-1)])]),_:1}),a(n,{command:"view.select.sites"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.sites))+" 站点",1)]),_:1}),a(n,{command:"view.select.tracks"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.tracks))+" 路径",1)]),_:1}),a(n,{command:"view.select.cars"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.cars))+" AGV",1)]),_:1}),a(n,{command:"view.select.decor"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.decor))+" 区域 / 装饰",1)]),_:1}),a(n,{divided:"",disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[37]||(r[37]=[y("对齐(鼠标吸附)",-1)])]),_:1}),a(n,{command:"view.snap.sites"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.sites))+" 吸附站点",1)]),_:1}),a(n,{command:"view.snap.cars"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.cars))+" 吸附 AGV",1)]),_:1}),a(n,{command:"view.snap.tracks"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.tracks))+" 吸附路径",1)]),_:1}),a(n,{divided:"",disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[38]||(r[38]=[y("显示内容",-1)])]),_:1}),a(n,{command:"view.show.sceneLabels"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.sceneLabels))+" 场景图元标记",1)]),_:1}),a(n,{command:"view.show.scenePrimitives"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.scenePrimitives))+" 场景图元",1)]),_:1}),a(n,{command:"view.show.cars"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.cars))+" 车辆",1)]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[35]||(r[35]=[y("过滤",-1)])]),_:1})]),_:1}),r[42]||(r[42]=s("div",{class:"spacer"},null,-1)),a(f,{content:"撤销 (Ctrl+Z)",placement:"bottom"},{default:l(()=>[a(m,{size:"small",disabled:!o.canUndo,class:"topbar-icon-btn",onClick:r[0]||(r[0]=B=>p("edit.undo"))},{default:l(()=>[...r[39]||(r[39]=[y("↶",-1)])]),_:1},8,["disabled"])]),_:1}),a(f,{content:"重做 (Ctrl+Y)",placement:"bottom"},{default:l(()=>[a(m,{size:"small",disabled:!o.canRedo,class:"topbar-icon-btn",onClick:r[1]||(r[1]=B=>p("edit.redo"))},{default:l(()=>[...r[40]||(r[40]=[y("↷",-1)])]),_:1},8,["disabled"])]),_:1}),o.saving?(V(),J(b,{key:0,type:"warning",effect:"dark",class:"topbar-saving-tag",size:"small"},{default:l(()=>[...r[41]||(r[41]=[y(" 保存中… ",-1)])]),_:1})):Z("",!0)])}}}),ja=Ne(Na,[["__scopeId","data-v-11791a50"]]),Fa={class:"edit-tool-rail"},Pa={class:"rail-group-title"},Ta={class:"rail-group-text"},Ea={class:"rail-group-list"},za=["onClick"],Ia={class:"rail-btn-glyph"},Ba={class:"rail-btn-label"},Ua={key:0,class:"rail-divider"},La={class:"rail-group rail-group-ai"},Ma=Ae({__name:"EditToolRail",props:{activeTool:{}},emits:["select-tool","open-ai"],setup(o,{emit:A}){const g=o,p=A,h=[{id:"select",title:"选择",tools:[{id:"select.single",label:"单选",glyph:"⌖",tip:"点击拾取单个对象"},{id:"select.rect",label:"矩形框选",glyph:"▱"},{id:"select.lasso",label:"套索圈选",glyph:"◯"},{id:"select.byType.site",label:"仅站点",glyph:"·"},{id:"select.byType.polyline",label:"仅折线",glyph:"╱",tip:"仅 UITrack(直线/折线)"},{id:"select.byType.bezier",label:"仅贝塞尔",glyph:"∽",tip:"仅 UIBezierTrack"},{id:"select.byType.arc",label:"仅弧形",glyph:"◜",tip:"仅 UICircularArcTrack"},{id:"select.byType.decor",label:"仅装饰",glyph:"★"},{id:"select.byType.currentLayer",label:"当前图层",glyph:"▤",tip:"保留当前图层对象"},{id:"select.invert",label:"反选",glyph:"⇄"},{id:"select.clear",label:"清空选中",glyph:"⊘"}]},{id:"draw",title:"绘制",tools:[{id:"draw.site",label:"添加站点",glyph:"+",tip:"点击工具后在画布单击放置"},{id:"draw.sites.continuous",label:"连续站点",glyph:"⁂",tip:"切换工具或 Esc 退出"},{id:"draw.track.polyline",label:"折线路径",glyph:"─",tip:"依序点击两端站点"},{id:"draw.track.bezier",label:"贝塞尔路径",glyph:"∼",tip:"点两端站点 → 弹框输入中间控制点个数 → 连续点选每个控制点"},{id:"draw.track.arc",label:"弧形路径",glyph:"◜",tip:"点两端站点 → 输入半径(≥ |AB|/2,等于即半圆)"},{id:"draw.decor.line",label:"装饰线段",glyph:"╱"},{id:"draw.decor.rect",label:"装饰矩形",glyph:"▭"},{id:"draw.decor.circle",label:"装饰圆",glyph:"◯"},{id:"draw.decor.text",label:"装饰文本",glyph:"T"},{id:"draw.image",label:"插入图片",glyph:"🖼"},{id:"draw.model",label:"插入模型",glyph:"◎",tip:"CycleGUI 3D 模型 (obj/glb/gltf)"}]},{id:"transform",title:"变换",tools:[{id:"transform.move",label:"移动",glyph:"✥"},{id:"transform.rotate",label:"旋转",glyph:"⟳"},{id:"transform.scale",label:"缩放",glyph:"⤡"},{id:"transform.duplicate",label:"复制副本",glyph:"⎘",tip:"Ctrl+D"},{id:"transform.copy",label:"复制",glyph:"📋",tip:"Ctrl+C"},{id:"transform.paste",label:"粘贴",glyph:"📥",tip:"Ctrl+V"},{id:"transform.delete",label:"删除",glyph:"🗑",tip:"Delete"},{id:"transform.copyFields",label:"复制字段",glyph:"⇉",tip:"多选时第 1 个为源,其余为目标"}]},{id:"align",title:"对齐",tools:[{id:"align.left",label:"左对齐",glyph:"⫷"},{id:"align.right",label:"右对齐",glyph:"⫸"},{id:"align.top",label:"上对齐",glyph:"⫵"},{id:"align.bottom",label:"下对齐",glyph:"⫶"},{id:"align.centerH",label:"水平居中",glyph:"⇔"},{id:"align.centerV",label:"垂直居中",glyph:"⇕"},{id:"align.center",label:"整体居中",glyph:"⊕"},{id:"align.distributeH",label:"水平等距",glyph:"⇿"},{id:"align.distributeV",label:"垂直等距",glyph:"⇳"},{id:"align.toFirst",label:"对齐到首",glyph:"⏮"},{id:"align.toLast",label:"对齐到尾",glyph:"⏭"}]},{id:"batch",title:"批量生成",tools:[{id:"batch.linearH",label:"横向间距",glyph:"⇢"},{id:"batch.linearV",label:"纵向间距",glyph:"⇣"},{id:"batch.matrix",label:"矩阵生成",glyph:"#"},{id:"batch.alongPath",label:"沿路径采样",glyph:"⤳",tip:"先选 1+ 条路径,再点本工具"},{id:"batch.circular",label:"环形阵列",glyph:"◌"}]},{id:"show",title:"显示",tools:[{id:"show.controlPoints",label:"控制点",glyph:"⊙"},{id:"show.controlHandles",label:"控制柄",glyph:"⊝"}]}];function x(m){return m===g.activeTool}function r(m){p("select-tool",m)}return(m,n)=>{const _=rt,F=xt;return V(),U("div",Fa,[a(F,{class:"rail-scroll"},{default:l(()=>[(V(),U(ce,null,we(h,(f,b)=>s("div",{key:f.id,class:"rail-group"},[s("div",Pa,[n[1]||(n[1]=s("span",{class:"rail-group-bar"},null,-1)),s("span",Ta,j(f.title),1),n[2]||(n[2]=s("span",{class:"rail-group-bar"},null,-1))]),s("div",Ea,[(V(!0),U(ce,null,we(f.tools,B=>(V(),J(_,{key:B.id,content:B.tip??B.label,placement:"right","show-after":280},{default:l(()=>[s("button",{class:Be(["rail-btn",{"rail-btn--active":x(B.id)}]),onClick:T=>r(B.id)},[s("span",Ia,j(B.glyph),1),s("span",Ba,j(B.label),1)],10,za)]),_:2},1032,["content"]))),128))]),bp("open-ai"))},[...n[3]||(n[3]=[s("span",{class:"rail-btn-glyph"},"✦",-1),s("span",{class:"rail-btn-label"},"AI 生图",-1)])])])]),_:1})])}}}),Da=Ne(Ma,[["__scopeId","data-v-6b284dea"]]),Ra={class:"edit-property-panel"},Oa={key:0,class:"empty-hint"},Ya={key:1,class:"loading-hint"},Ka={key:2,class:"object-pane"},Ha={class:"prop-card prop-card--header"},Xa={class:"prop-card-row"},Wa={class:"prop-id-block"},Ga={class:"prop-id-tag"},Ja={class:"prop-type-tag"},Za={class:"prop-header-actions"},qa=["disabled"],Qa={class:"prop-delete-icon"},el={class:"prop-card-row prop-name-row"},tl={class:"prop-card-row prop-layer-row"},al={key:0,class:"prop-card prop-card--geom"},ll={class:"prop-card-header"},nl=["title"],ol={class:"prop-card-flag-text"},sl={class:"prop-card-meta"},il={class:"prop-grid"},rl={class:"prop-field-label"},ul={key:0,class:"prop-field-unit"},dl={key:1,class:"prop-card prop-card--style"},cl={class:"prop-card-header"},pl={class:"prop-card-meta"},ml={class:"prop-grid"},fl={class:"prop-field-label"},vl={class:"prop-card prop-card--custom"},yl={class:"prop-card-header"},bl={class:"prop-card-meta"},gl={key:0,class:"prop-grid"},wl=["title"],hl={class:"prop-field-row"},kl=["onClick"],_l={key:1,class:"prop-empty-row"},Sl={key:2,class:"prop-card prop-card--status"},xl={class:"prop-card-header"},Vl={class:"prop-card-meta"},$l={class:"prop-status-list"},Cl={class:"prop-status-key"},Al=["title"],Nl={key:3,class:"prop-card prop-card--actions"},jl={class:"prop-card-header"},Fl={class:"prop-card-meta"},Pl={class:"prop-actions"},Tl=["disabled","onClick"],El={key:0,class:"prop-action-spinner"},zl={class:"prop-action-label"},Il={class:"defaults-pane"},Bl={key:0,class:"empty-hint defaults-empty"},Ul={class:"prop-card prop-card--style"},Ll={class:"prop-card-header"},Ml={class:"prop-card-flag-text"},Dl={class:"prop-card"},Rl={class:"prop-card prop-card--style"},Ol={class:"prop-card-header"},Yl={class:"prop-card-flag-text"},Kl={class:"prop-card"},Hl={key:3,class:"loading-hint"},Xl=Ae({__name:"EditPropertyPanel",props:{selectionCount:{},primary:{},fields:{},status:{},methods:{},loading:{type:Boolean},layers:{},defaults:{},layerRows:{},selectionKind:{},viewportStyle:{},viewportStyleLoading:{type:Boolean},viewportSyncing:{type:Boolean}},emits:["rename","change-layer","set-field","add-field","exec-action","save-defaults","layer-toggle","add-layer","delete","patch-viewport"],setup(o,{emit:A}){const g=o,p=A,h=$("object"),x=$(!1);let r=null;const m=$(null),n=$(null);he(()=>g.viewportStyle,v=>{if(!v){m.value=null,n.value=null;return}m.value={...v.site},n.value={...v.track}},{immediate:!0,deep:!0}),he(()=>g.selectionKind,v=>{(v==="site"||v==="track")&&(h.value="defaults")});function _(){x.value=!0,r&&clearTimeout(r),r=setTimeout(()=>{x.value=!1},1400)}he(()=>g.viewportSyncing,(v,d)=>{d&&!v&&_()});function F(v){m.value&&(m.value={...m.value,...v},p("patch-viewport",{site:{...m.value}}))}function f(v){n.value&&(n.value={...n.value,...v},p("patch-viewport",{track:{...n.value}}))}const b=$(null),B=$(""),T=$(!1),k=$(!1);let W=null;function te(){k.value=!0,W&&clearTimeout(W),W=setTimeout(()=>{k.value=!1},1200)}const oe=new Set(["id","name","layerName"]),M=new Set(["x","y","z","cx","cy","cz","dx","dy","dz","sx","sy","ex","ey","startX","startY","endX","endY","size","width","height","depth","angle","rotation","theta","scale","radius","r","siteA","siteB"]),pe=new Set(["color","displaySetting","direction","typeInfo","mustFree","imagePath","modelPath","fontFamily","fontSize","textColor","lineWidth","opacity"]),ge={x:"X",y:"Y",z:"Z",size:"大小",width:"宽",height:"高",depth:"厚",angle:"角度",rotation:"旋转",theta:"θ",scale:"缩放",radius:"半径",siteA:"起点站",siteB:"终点站",startX:"起点 X",startY:"起点 Y",endX:"终点 X",endY:"终点 Y",cx:"中心 X",cy:"中心 Y",color:"颜色",displaySetting:"显示设置",direction:"方向",typeInfo:"类型信息",mustFree:"必须互斥",imagePath:"图片路径",modelPath:"模型路径",fontSize:"字号",textColor:"文字色",lineWidth:"线宽",opacity:"透明度"},le={x:"mm",y:"mm",z:"mm",cx:"mm",cy:"mm",cz:"mm",dx:"mm",dy:"mm",dz:"mm",startX:"mm",startY:"mm",endX:"mm",endY:"mm",width:"mm",height:"mm",depth:"mm",size:"mm",radius:"mm",angle:"°",rotation:"°",theta:"°",fontSize:"px",lineWidth:"px"},D=Q(()=>g.fields.filter(v=>!oe.has(v.key))),X=Q(()=>D.value.filter(v=>M.has(v.key))),se=Q(()=>D.value.filter(v=>pe.has(v.key))),P=Q(()=>D.value.filter(v=>!M.has(v.key)&&!pe.has(v.key)));function N(v){return ge[v]??v}function ie(v){return le[v]??""}function me(v){if(v==null||v==="")return;const d=Number(v);return Number.isFinite(d)?d:void 0}function Se(v){return v.toLowerCase().includes("angle")||v.toLowerCase().includes("rotation")||v==="theta"?1:v==="scale"||v==="opacity"?.1:10}function ae(v){return M.has(v)}function re(v,d){return v==="color"||v==="textColor"?!0:/^#[0-9a-fA-F]{3,8}$/.test(d)}function L(v,d){return d==="true"||d==="false"||d==="True"||d==="False"}function xe(v){return v==="true"||v==="True"||v==="1"}const Ue=Q(()=>{const v=(g.primary?.status??"").toLowerCase();return v?v.includes("error")||v.includes("alarm")||v.includes("failed")?"danger":v.includes("warn")||v.includes("idle")?"warning":v.includes("online")||v.includes("running")||v.includes("ready")||v.includes("ok")?"success":"info":"info"}),Y=$("");he(()=>g.primary?.name??"",v=>{Y.value=v},{immediate:!0});function ke(){fe()}function fe(){if(!g.primary)return;const v=Y.value;v!==(g.primary.name??"")&&p("rename",v)}function Le(v){p("change-layer",v)}function ve(v,d){p("set-field",v,d),M.has(v)&&te()}function Me(){p("add-field")}async function We(v){try{b.value=v,p("exec-action",v)}finally{b.value=null}}function ye(){p("save-defaults")}function _e(v){p("layer-toggle",v)}function et(){const v=B.value.trim();v&&(p("add-layer",v),B.value="")}function tt(){g.selectionCount===0||T.value||(T.value=!0,p("delete"),setTimeout(()=>{T.value=!1},600))}return(v,d)=>{const Ve=Vt,at=ut,De=rt,ne=dt,Re=ua,lt=da,be=At,ue=Nt,je=jt,Oe=ra,Ge=ct,G=Ct,$e=$t,Fe=Xe,Pe=Qe,Ye=qe,Te=ia;return V(),U("div",Ra,[a(Te,{modelValue:h.value,"onUpdate:modelValue":d[20]||(d[20]=c=>h.value=c),class:"prop-tabs"},{default:l(()=>[a(Oe,{label:"对象",name:"object"},{default:l(()=>[o.selectionCount===0?(V(),U("div",Oa,[a(Ve,{class:"empty-icon"},{default:l(()=>[a(O(kt))]),_:1}),d[21]||(d[21]=s("span",{class:"empty-title"},"未选中对象",-1)),d[22]||(d[22]=s("span",{class:"empty-desc"},"在画布上点击或框选以编辑属性。",-1))])):o.loading?(V(),U("div",Ya,[a(Ve,{class:"is-loading"},{default:l(()=>[a(O(_t))]),_:1}),d[23]||(d[23]=s("span",null,"加载属性…",-1))])):(V(),U("div",Ka,[s("section",Ha,[s("div",Xa,[s("div",Wa,[s("span",Ga,j(o.selectionCount>1?`多选 ${o.selectionCount}`:`#${o.primary?.id??"-"}`),1),s("span",Ja,j(o.primary?.typeName??"-"),1)]),s("div",Za,[o.primary?.status?(V(),J(at,{key:0,type:Ue.value,size:"small",effect:"dark",class:"prop-status-tag"},{default:l(()=>[y(j(o.primary.status),1)]),_:1},8,["type"])):Z("",!0),a(De,{content:o.selectionCount>1?`删除选中的 ${o.selectionCount} 个对象(可 Ctrl+Z 撤销)`:"删除该对象(可 Ctrl+Z 撤销)",placement:"top","show-after":220},{default:l(()=>[s("button",{type:"button",class:"prop-delete-btn",disabled:T.value,onClick:tt},[s("span",Qa,j(T.value?"⟳":"🗑"),1),d[24]||(d[24]=s("span",null,"删除",-1))],8,qa)]),_:1},8,["content"])])]),s("div",el,[d[25]||(d[25]=s("label",{class:"prop-name-label"},"名称",-1)),o.primary?(V(),J(ne,{key:0,"model-value":Y.value,size:"small",placeholder:"对象名","onUpdate:modelValue":d[0]||(d[0]=c=>Y.value=c),onBlur:ke,onChange:fe},null,8,["model-value"])):Z("",!0)]),s("div",tl,[d[26]||(d[26]=s("label",{class:"prop-name-label"},"图层",-1)),o.primary?(V(),J(lt,{key:0,"model-value":o.primary.layer??"",size:"small",placeholder:"—",class:"prop-layer-select","onUpdate:modelValue":d[1]||(d[1]=c=>Le(c))},{default:l(()=>[a(Re,{label:"(无)",value:""}),(V(!0),U(ce,null,we(o.layers,c=>(V(),J(Re,{key:c,label:c,value:c},null,8,["label","value"]))),128))]),_:1},8,["model-value"])):Z("",!0)])]),X.value.length>0?(V(),U("section",al,[s("header",ll,[d[28]||(d[28]=s("span",{class:"prop-card-title"},"位置 / 几何",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":k.value}]),title:k.value?"已同步到画布":"改动会立即同步到 SimpleLite 画布"},[d[27]||(d[27]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",ol,j(k.value?"已同步":"同步到画布"),1)],10,nl),s("span",sl,j(X.value.length)+" 项",1)]),s("div",il,[(V(!0),U(ce,null,we(X.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item"},[s("label",rl,[y(j(N(c.key))+" ",1),ie(c.key)?(V(),U("span",ul,j(ie(c.key)),1)):Z("",!0)]),ae(c.key)?(V(),J(be,{key:0,"model-value":me(c.value),controls:!1,step:Se(c.key),size:"small",class:"prop-field-num",onChange:K=>ve(c.key,K==null?"":String(K))},null,8,["model-value","step","onChange"])):(V(),J(ne,{key:1,"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]))]))),128))])])):Z("",!0),se.value.length>0?(V(),U("section",dl,[s("header",cl,[d[29]||(d[29]=s("span",{class:"prop-card-title"},"样式 / 外观",-1)),s("span",pl,j(se.value.length)+" 项",1)]),s("div",ml,[(V(!0),U(ce,null,we(se.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item"},[s("label",fl,j(N(c.key)),1),re(c.key,c.value)?(V(),J(ue,{key:0,"model-value":c.value||"#ffffff","show-alpha":"",size:"small",onChange:K=>ve(c.key,K??"")},null,8,["model-value","onChange"])):L(c.key,c.value)?(V(),J(je,{key:1,"model-value":xe(c.value),size:"small",onChange:K=>ve(c.key,K?"true":"false")},null,8,["model-value","onChange"])):(V(),J(ne,{key:2,"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]))]))),128))])])):Z("",!0),s("section",vl,[s("header",yl,[d[30]||(d[30]=s("span",{class:"prop-card-title"},"其它字段 / 自定义",-1)),s("span",bl,j(P.value.length)+" 项",1)]),P.value.length>0?(V(),U("div",gl,[(V(!0),U(ce,null,we(P.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item prop-grid-item--wide"},[s("label",{class:"prop-field-label",title:c.key},j(c.key),9,wl),s("div",hl,[a(ne,{"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]),a(De,{content:"删除该字段",placement:"top"},{default:l(()=>[s("button",{class:"prop-field-icon-btn",onClick:K=>ve(c.key,"")},"×",8,kl)]),_:2},1024)])]))),128))])):(V(),U("div",_l,"无其它字段")),s("button",{class:"prop-add-field-btn",onClick:Me},"+ 添加字段")]),o.status.length>0?(V(),U("section",Sl,[s("header",xl,[d[31]||(d[31]=s("span",{class:"prop-card-title"},"运行状态",-1)),s("span",Vl,j(o.status.length)+" 项",1)]),s("div",$l,[(V(!0),U(ce,null,we(o.status,c=>(V(),U("div",{key:c.key,class:"prop-status-item"},[s("span",Cl,j(c.key),1),s("span",{class:"prop-status-value",title:c.value},j(c.value),9,Al)]))),128))])])):Z("",!0),o.methods.length>0?(V(),U("section",Nl,[s("header",jl,[d[32]||(d[32]=s("span",{class:"prop-card-title"},"操作",-1)),s("span",Fl,j(o.methods.length)+" 项",1)]),s("div",Pl,[(V(!0),U(ce,null,we(o.methods,c=>(V(),J(De,{key:c.methodName,content:c.description||c.label||c.methodName,placement:"top","show-after":220},{default:l(()=>[s("button",{class:"prop-action-btn",disabled:b.value===c.methodName,onClick:K=>We(c.methodName)},[b.value===c.methodName?(V(),U("span",El,"⟳")):Z("",!0),d[33]||(d[33]=s("span",{class:"prop-action-icon"},"▶",-1)),s("span",zl,j(c.label||c.methodName),1)],8,Tl)]),_:2},1032,["content"]))),128))])])):Z("",!0)]))]),_:1}),a(Oe,{label:"类型默认",name:"defaults"},{default:l(()=>[s("div",Il,[a(Ge,{type:"info",closable:!1,class:"defaults-alert"},{default:l(()=>[...d[34]||(d[34]=[y(" 视口样式与 SimpleLite「视口样式」对话框同步,修改后即时重绘画布;下方「新建默认」仅影响下次创建对象。 ",-1)])]),_:1}),o.selectionKind?o.selectionKind==="site"&&m.value?(V(),U(ce,{key:1},[s("section",Ul,[s("header",Ll,[d[38]||(d[38]=s("span",{class:"prop-card-title"},"站点视口样式",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":x.value}])},[d[37]||(d[37]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",Ml,j(o.viewportSyncing?"同步中…":x.value?"已同步":"实时同步"),1)],2)]),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"整体大小倍率"},{default:l(()=>[a(be,{"model-value":m.value.drawScale,min:.25,max:12,step:.1,controls:!0,"onUpdate:modelValue":d[2]||(d[2]=c=>F({drawScale:c??m.value.drawScale}))},null,8,["model-value"])]),_:1}),a(G,{label:"未选中圆点半径"},{default:l(()=>[a(be,{"model-value":m.value.dotRadiusNormal,min:1,max:24,step:.5,"onUpdate:modelValue":d[3]||(d[3]=c=>F({dotRadiusNormal:c??m.value.dotRadiusNormal}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中圆点半径"},{default:l(()=>[a(be,{"model-value":m.value.dotRadiusSelected,min:1,max:32,step:.5,"onUpdate:modelValue":d[4]||(d[4]=c=>F({dotRadiusSelected:c??m.value.dotRadiusSelected}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中环半径 (m)"},{default:l(()=>[a(be,{"model-value":m.value.selectionRingM,min:.02,max:.8,step:.01,"onUpdate:modelValue":d[5]||(d[5]=c=>F({selectionRingM:c??m.value.selectionRingM}))},null,8,["model-value"])]),_:1}),a(G,{label:"站点颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.colorNormalArgb),"onUpdate:modelValue":d[6]||(d[6]=c=>F({colorNormalArgb:O(ze)(c??"#ffffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"站点颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.colorSelectedArgb),"onUpdate:modelValue":d[7]||(d[7]=c=>F({colorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1}),a(G,{label:"标签颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.labelColorNormalArgb),"onUpdate:modelValue":d[8]||(d[8]=c=>F({labelColorNormalArgb:O(ze)(c??"#ffffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"标签颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.labelColorSelectedArgb),"onUpdate:modelValue":d[9]||(d[9]=c=>F({labelColorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1})]),_:1})]),s("section",Dl,[d[40]||(d[40]=s("header",{class:"prop-card-header"},[s("span",{class:"prop-card-title"},"新建站点默认")],-1)),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"默认图层"},{default:l(()=>[a(ne,{modelValue:o.defaults.site.layer,"onUpdate:modelValue":d[10]||(d[10]=c=>o.defaults.site.layer=c)},null,8,["modelValue"])]),_:1}),a(G,{label:"名字前缀"},{default:l(()=>[a(ne,{modelValue:o.defaults.site.namePrefix,"onUpdate:modelValue":d[11]||(d[11]=c=>o.defaults.site.namePrefix=c)},null,8,["modelValue"])]),_:1}),a(Fe,{size:"small",type:"primary",plain:"",onClick:ye},{default:l(()=>[...d[39]||(d[39]=[y("保存新建默认",-1)])]),_:1})]),_:1})])],64)):o.selectionKind==="track"&&n.value?(V(),U(ce,{key:2},[s("section",Rl,[s("header",Ol,[d[42]||(d[42]=s("span",{class:"prop-card-title"},"路径视口样式",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":x.value}])},[d[41]||(d[41]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",Yl,j(o.viewportSyncing?"同步中…":x.value?"已同步":"实时同步"),1)],2)]),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"线宽倍率"},{default:l(()=>[a(be,{"model-value":n.value.drawScale,min:.25,max:12,step:.1,"onUpdate:modelValue":d[12]||(d[12]=c=>f({drawScale:c??n.value.drawScale}))},null,8,["model-value"])]),_:1}),a(G,{label:"未选中线宽"},{default:l(()=>[a(be,{"model-value":n.value.widthNormal,min:.4,max:8,step:.1,"onUpdate:modelValue":d[13]||(d[13]=c=>f({widthNormal:c??n.value.widthNormal}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中线宽"},{default:l(()=>[a(be,{"model-value":n.value.widthSelected,min:.4,max:12,step:.1,"onUpdate:modelValue":d[14]||(d[14]=c=>f({widthSelected:c??n.value.widthSelected}))},null,8,["model-value"])]),_:1}),a(G,{label:"显示方向箭头"},{default:l(()=>[a(je,{"model-value":n.value.showDirectionArrows,"onUpdate:modelValue":d[15]||(d[15]=c=>f({showDirectionArrows:!!c}))},null,8,["model-value"])]),_:1}),a(G,{label:"路径颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(n.value.colorNormalArgb),"onUpdate:modelValue":d[16]||(d[16]=c=>f({colorNormalArgb:O(ze)(c??"#00ffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"路径颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(n.value.colorSelectedArgb),"onUpdate:modelValue":d[17]||(d[17]=c=>f({colorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1})]),_:1})]),s("section",Kl,[d[44]||(d[44]=s("header",{class:"prop-card-header"},[s("span",{class:"prop-card-title"},"新建路径默认")],-1)),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"默认图层"},{default:l(()=>[a(ne,{modelValue:o.defaults.track.layer,"onUpdate:modelValue":d[18]||(d[18]=c=>o.defaults.track.layer=c)},null,8,["modelValue"])]),_:1}),a(Fe,{size:"small",type:"primary",plain:"",onClick:ye},{default:l(()=>[...d[43]||(d[43]=[y("保存新建默认",-1)])]),_:1})]),_:1})])],64)):o.viewportStyleLoading?(V(),U("div",Hl,[a(Ve,{class:"is-loading"},{default:l(()=>[a(O(_t))]),_:1}),d[45]||(d[45]=s("span",null,"加载视口样式…",-1))])):Z("",!0):(V(),U("div",Bl,[a(Ve,{class:"empty-icon"},{default:l(()=>[a(O(kt))]),_:1}),d[35]||(d[35]=s("span",{class:"empty-title"},"请选中站点或路径",-1)),d[36]||(d[36]=s("span",{class:"empty-desc"},"在画布上选中一个站点或路径后,可在此调整对应视口样式。",-1))]))])]),_:1}),a(Oe,{label:"图层",name:"layers"},{default:l(()=>[a(Ye,{data:o.layerRows,size:"small",class:"layer-table"},{default:l(()=>[a(Pe,{prop:"name",label:"图层",width:"120"}),a(Pe,{label:"可见",width:"60"},{default:l(({row:c})=>[a(je,{modelValue:c.visible,"onUpdate:modelValue":K=>c.visible=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),a(Pe,{label:"可选",width:"60"},{default:l(({row:c})=>[a(je,{modelValue:c.selectable,"onUpdate:modelValue":K=>c.selectable=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),a(Pe,{label:"颜色"},{default:l(({row:c})=>[a(ue,{modelValue:c.color,"onUpdate:modelValue":K=>c.color=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1})]),_:1},8,["data"]),a(ne,{modelValue:B.value,"onUpdate:modelValue":d[19]||(d[19]=c=>B.value=c),size:"small",placeholder:"新图层名",class:"new-layer"},{append:l(()=>[a(Fe,{onClick:et},{default:l(()=>[...d[46]||(d[46]=[y("添加",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["modelValue"])])}}}),Wl=Ne(Xl,[["__scopeId","data-v-781515fe"]]),Gl={class:"edit-status-bar"},Jl={class:"seg"},Zl={class:"seg"},ql={class:"seg"},Ql={class:"seg"},en={class:"seg"},tn={key:0,class:"seg ok"},an={key:1,class:"seg warn"},ln=Ae({__name:"EditStatusBar",props:{selectedCount:{},mouseX:{},mouseY:{},toolLabel:{},snapOn:{type:Boolean},undoSize:{},redoSize:{},connected:{type:Boolean}},setup(o){function A(g){return Number.isFinite(g)?g.toFixed(0):"--"}return(g,p)=>(V(),U("div",Gl,[s("span",Jl,[p[0]||(p[0]=y(" 选中 ",-1)),s("b",null,j(o.selectedCount),1),p[1]||(p[1]=y(" 个 ",-1))]),s("span",Zl," 鼠标 ("+j(A(o.mouseX))+", "+j(A(o.mouseY))+") mm ",1),s("span",ql,[p[2]||(p[2]=y(" 当前工具:",-1)),s("b",null,j(o.toolLabel),1)]),s("span",Ql,[p[3]||(p[3]=y(" 吸附:",-1)),s("b",{class:Be({on:o.snapOn,off:!o.snapOn})},j(o.snapOn?"开":"关"),3)]),p[4]||(p[4]=s("span",{class:"spacer"},null,-1)),s("span",en,"历史 "+j(o.undoSize)+" / "+j(o.redoSize),1),o.connected?(V(),U("span",tn,"● 实时通道在线")):(V(),U("span",an,"● 实时通道断开"))]))}}),nn=Ne(ln,[["__scopeId","data-v-6254b10f"]]),on={class:"upload-hint"},sn={key:0,class:"ai-text"},rn={class:"ai-stat"},un=Ae({__name:"AiGenerateDialog",props:{modelValue:{type:Boolean},configured:{type:Boolean},defaultBounds:{},defaultLayer:{}},emits:["update:modelValue","generated"],setup(o,{emit:A}){const g=o,p=A,h=ga(),x=$(!1),r=$(null),m=$(["r"]),n=Ze({prompt:"",mode:"sites+tracks",referenceImageBase64:void 0,layer:g.defaultLayer??"ai-generated",constraints:""}),_=$(g.defaultBounds??[-1e4,-1e4,1e4,1e4]);he(()=>g.defaultBounds,T=>{T&&(_.value=T)}),he(()=>g.defaultLayer,T=>{T&&(n.layer=T)});function F(){p("update:modelValue",!1)}function f(){p("update:modelValue",!1),h.push("/admin/config/system")}async function b(T){if(!T.raw)return;const k=new FileReader;k.onload=()=>{const W=String(k.result||""),te=W.includes(",")?W.split(",",2)[1]:W;n.referenceImageBase64=te},k.readAsDataURL(T.raw)}async function B(){try{x.value=!0,n.bounds=_.value;const T=await R.aiMapGenerate(n);r.value=T,C.success(`AI 已生成 ${T.created?.length??0} 个对象`),p("generated",T)}catch(T){C.error(`AI 生图失败:${T.message}`)}finally{x.value=!1}}return(T,k)=>{const W=ya,te=ct,oe=dt,M=Ct,pe=Vt,ge=ca,le=fa,D=ma,X=At,se=$t,P=Qe,N=ut,ie=qe,me=ba,Se=va,ae=Xe,re=pt;return V(),J(re,{"model-value":o.modelValue,title:"AI 生图",width:"640px","onUpdate:modelValue":k[9]||(k[9]=L=>p("update:modelValue",L)),onClose:F},{footer:l(()=>[a(ae,{onClick:F},{default:l(()=>[...k[20]||(k[20]=[y("关闭",-1)])]),_:1}),a(ae,{type:"primary",loading:x.value,disabled:!n.prompt.trim()||!o.configured,onClick:B},{default:l(()=>[...k[21]||(k[21]=[y(" 生成并落地 ",-1)])]),_:1},8,["loading","disabled"])]),default:l(()=>[o.configured?Z("",!0):(V(),J(te,{key:0,type:"warning",closable:!1,class:"cfg-alert"},{default:l(()=>[k[11]||(k[11]=y(" 尚未配置 AI 服务(apiKey / endpoint)。请先到 ",-1)),a(W,{type:"primary",onClick:f},{default:l(()=>[...k[10]||(k[10]=[y("系统级配置 → AI 服务",-1)])]),_:1}),k[12]||(k[12]=y(" 完成配置。 ",-1))]),_:1})),a(se,{"label-width":"100px",size:"default"},{default:l(()=>[a(M,{label:"提示词",required:""},{default:l(()=>[a(oe,{modelValue:n.prompt,"onUpdate:modelValue":k[0]||(k[0]=L=>n.prompt=L),type:"textarea",rows:4,placeholder:"一条 U 型生产线,含 5 个工站,间距 2m,方向单向通行..."},null,8,["modelValue"])]),_:1}),a(M,{label:"参考图片"},{default:l(()=>[a(ge,{drag:"","auto-upload":!1,"show-file-list":!1,accept:"image/*",onChange:b},{default:l(()=>[s("div",on,[a(pe,null,{default:l(()=>[a(O(pa))]),_:1}),s("span",null,j(n.referenceImageBase64?"已选择图片 (点击替换)":"拖入或点击上传参考图(可选,多模态)"),1)])]),_:1})]),_:1}),a(M,{label:"生成模式"},{default:l(()=>[a(D,{modelValue:n.mode,"onUpdate:modelValue":k[1]||(k[1]=L=>n.mode=L)},{default:l(()=>[a(le,{value:"sites"},{default:l(()=>[...k[13]||(k[13]=[y("仅站点",-1)])]),_:1}),a(le,{value:"tracks"},{default:l(()=>[...k[14]||(k[14]=[y("仅路径",-1)])]),_:1}),a(le,{value:"sites+tracks"},{default:l(()=>[...k[15]||(k[15]=[y("站点+路径",-1)])]),_:1}),a(le,{value:"full"},{default:l(()=>[...k[16]||(k[16]=[y("完整地图",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(M,{label:"范围 (mm)"},{default:l(()=>[a(X,{modelValue:_.value[0],"onUpdate:modelValue":k[2]||(k[2]=L=>_.value[0]=L),placeholder:"x1",step:500},null,8,["modelValue"]),a(X,{modelValue:_.value[1],"onUpdate:modelValue":k[3]||(k[3]=L=>_.value[1]=L),placeholder:"y1",step:500,class:"ml"},null,8,["modelValue"]),a(X,{modelValue:_.value[2],"onUpdate:modelValue":k[4]||(k[4]=L=>_.value[2]=L),placeholder:"x2",step:500,class:"ml"},null,8,["modelValue"]),a(X,{modelValue:_.value[3],"onUpdate:modelValue":k[5]||(k[5]=L=>_.value[3]=L),placeholder:"y2",step:500,class:"ml"},null,8,["modelValue"])]),_:1}),a(M,{label:"图层"},{default:l(()=>[a(oe,{modelValue:n.layer,"onUpdate:modelValue":k[6]||(k[6]=L=>n.layer=L),placeholder:"ai-generated(默认)"},null,8,["modelValue"])]),_:1}),a(M,{label:"附加约束"},{default:l(()=>[a(oe,{modelValue:n.constraints,"onUpdate:modelValue":k[7]||(k[7]=L=>n.constraints=L),placeholder:"例如:单向通行、最小转弯半径 1500mm"},null,8,["modelValue"])]),_:1})]),_:1}),r.value?(V(),J(Se,{key:1,modelValue:m.value,"onUpdate:modelValue":k[8]||(k[8]=L=>m.value=L),class:"result-panel"},{default:l(()=>[a(me,{title:"AI 返回 / 落地结果",name:"r"},{default:l(()=>[r.value.assistantText?(V(),U("div",sn,j(r.value.assistantText),1)):Z("",!0),s("div",rn,[k[17]||(k[17]=y(" 落地对象 ",-1)),s("b",null,j(r.value.created?.length??0),1),k[18]||(k[18]=y(",工具调用次数 ",-1)),s("b",null,j(r.value.usedTools),1),k[19]||(k[19]=y("。 ",-1))]),a(ie,{data:r.value.created??[],size:"small","max-height":"220"},{default:l(()=>[a(P,{label:"工具",prop:"tool",width:"160"}),a(P,{label:"kind",prop:"kind",width:"80"}),a(P,{label:"id",prop:"id",width:"80"}),a(P,{label:"typeName",prop:"typeName"}),a(P,{label:"错误"},{default:l(({row:L})=>[L.error?(V(),J(N,{key:0,type:"danger",size:"small"},{default:l(()=>[y(j(L.error),1)]),_:2},1024)):Z("",!0)]),_:1})]),_:1},8,["data"])]),_:1})]),_:1},8,["modelValue"])):Z("",!0)]),_:1},8,["model-value"])}}}),dn=Ne(un,[["__scopeId","data-v-7b1912b1"]]),cn={class:"proj-browse"},pn={class:"proj-browse-toolbar"},mn=["disabled"],fn={class:"proj-browse-body"},vn={class:"proj-browse-side"},yn={key:0,class:"proj-side-section"},bn={class:"proj-side-section"},gn=["onDblclick","onClick"],wn=["title"],hn={key:0,class:"proj-side-empty"},kn={class:"proj-browse-main"},_n={class:"proj-file-name"},Sn={class:"proj-mute"},xn={class:"proj-mute"},Vn={class:"proj-browse-footer"},$n={class:"proj-footer-label"},Cn={class:"proj-footer-bar"},An={class:"proj-footer-tip"},Nn={class:"proj-footer-actions"},jn=Ae({__name:"ProjectBrowseDialog",props:{modelValue:{type:Boolean},mode:{},initialPath:{}},emits:["update:modelValue","confirm"],setup(o,{emit:A}){const g=o,p=A,h=$(""),x=$(null),r=$([]),m=$([]),n=$(!1),_=$(null),F=$(null),f=$(""),b=$(""),B=Q(()=>g.mode==="load"?"加载项目(服务端目录)":"保存项目(服务端目录)"),T=Q(()=>!!(f.value.trim()||F.value?.kind==="file"||g.mode==="save"&&h.value)),k=Q(()=>g.mode==="save"?f.value?`将保存到:${le()}`:`当前目录:${h.value}`:F.value?`已选:${F.value.fullPath}`:"请在右侧选中一个 JSON 文件,或输入绝对路径");async function W(){n.value=!0,_.value=null;try{const P=await R.projectBrowse(h.value||void 0);h.value=P.dir,x.value=P.parent,r.value=P.subdirs.map(N=>({kind:"dir",name:N.name,fullPath:N.fullPath})),m.value=P.jsons.map(N=>({kind:"file",name:N.name,fullPath:N.fullPath,sizeBytes:N.sizeBytes,modified:N.modified})),b.value||(b.value=P.dir),F.value=null}catch(P){_.value=P.message}finally{n.value=!1}}function te(){x.value&&(h.value=x.value,W())}function oe(){h.value="",W()}function M(P){h.value=P,W()}function pe(P){F.value=P,P?.kind==="file"&&(f.value=P.fullPath)}function ge(P){P.kind==="file"&&D()}function le(){const P=f.value.trim();return P?/^([A-Za-z]:[\\/]|\\\\|\/)/.test(P)?P:`${h.value.replace(/[\\/]+$/,"")}/${P.endsWith(".json")?P:P+".json"}`:`${h.value}/project.current.json`}function D(){if(g.mode==="save"){const N=le();if(!N){C.warning("请输入文件名或选中目标");return}p("confirm",N),p("update:modelValue",!1);return}const P=f.value.trim()||(F.value?.kind==="file"?F.value.fullPath:"");if(!P){C.warning("请先选中一个 .json 文件,或直接输入路径");return}p("confirm",P),p("update:modelValue",!1)}function X(){F.value=null,f.value="",h.value=g.initialPath??"",W()}function se(P){return P==null?"—":P<1024?`${P} B`:P<1024*1024?`${(P/1024).toFixed(1)} KB`:`${(P/1024/1024).toFixed(1)} MB`}return he(()=>g.modelValue,P=>{P&&X()}),(P,N)=>{const ie=dt,me=ct,Se=xt,ae=Qe,re=qe,L=Xe,xe=pt,Ue=ka;return V(),J(xe,{"model-value":o.modelValue,title:B.value,width:"780px","align-center":"","destroy-on-close":"",class:"proj-browse-dialog","onUpdate:modelValue":N[3]||(N[3]=Y=>p("update:modelValue",Y)),onOpen:X},{footer:l(()=>[s("div",Cn,[s("span",An,j(k.value),1),s("span",Nn,[a(L,{onClick:N[2]||(N[2]=Y=>p("update:modelValue",!1))},{default:l(()=>[...N[15]||(N[15]=[y("取消",-1)])]),_:1}),a(L,{type:"primary",loading:n.value,disabled:!T.value,onClick:D},{default:l(()=>[y(j(o.mode==="load"?"加载此文件":"保存到此文件"),1)]),_:1},8,["loading","disabled"])])])]),default:l(()=>[s("div",cn,[s("div",pn,[s("button",{class:"proj-icon-btn",disabled:!x.value,title:"返回上级",onClick:te},[...N[4]||(N[4]=[s("span",{class:"proj-icon"},"←",-1)])],8,mn),s("button",{class:"proj-icon-btn",title:"刷新",onClick:W},[...N[5]||(N[5]=[s("span",{class:"proj-icon"},"⟳",-1)])]),s("button",{class:"proj-icon-btn",title:"SimpleLite 主目录",onClick:oe},[...N[6]||(N[6]=[s("span",{class:"proj-icon"},"⌂",-1)])]),a(ie,{modelValue:h.value,"onUpdate:modelValue":N[0]||(N[0]=Y=>h.value=Y),size:"small",spellcheck:"false",class:"proj-path-input",placeholder:"输入或粘贴目录路径,回车跳转",onKeyup:wa(W,["enter"])},{prefix:l(()=>[...N[7]||(N[7]=[s("span",{class:"proj-path-prefix"},"📁",-1)])]),_:1},8,["modelValue"])]),_.value?(V(),J(me,{key:0,type:"error",title:_.value,closable:!1,"show-icon":"",class:"proj-error"},null,8,["title"])):Z("",!0),s("div",fn,[s("div",vn,[N[12]||(N[12]=s("div",{class:"proj-side-title"},"服务端目录",-1)),a(Se,{class:"proj-side-scroll"},{default:l(()=>[s("button",{class:"proj-side-btn proj-side-cwd",onClick:oe},[...N[8]||(N[8]=[s("span",{class:"proj-side-icon"},"🏠",-1),s("span",{class:"proj-side-text"},"SimpleLite 主目录",-1)])]),x.value?(V(),U("div",yn,[s("button",{class:"proj-side-btn",onClick:te},[...N[9]||(N[9]=[s("span",{class:"proj-side-icon"},"↑",-1),s("span",{class:"proj-side-text"},"返回上级",-1)])])])):Z("",!0),s("div",bn,[N[11]||(N[11]=s("div",{class:"proj-side-section-title"},"子文件夹",-1)),(V(!0),U(ce,null,we(r.value,Y=>(V(),U("button",{key:Y.fullPath,class:Be(["proj-side-btn",{"proj-side-btn--active":!1}]),onDblclick:ke=>M(Y.fullPath),onClick:ke=>M(Y.fullPath)},[N[10]||(N[10]=s("span",{class:"proj-side-icon"},"📁",-1)),s("span",{class:"proj-side-text",title:Y.name},j(Y.name),9,wn)],40,gn))),128)),r.value.length===0?(V(),U("div",hn,"无子文件夹")):Z("",!0)])]),_:1})]),s("div",kn,[ha((V(),J(re,{data:m.value,size:"small",height:"380","highlight-current-row":"",class:"proj-browse-table","empty-text":"该目录下没有 JSON 项目文件",onCurrentChange:pe,onRowDblclick:ge},{default:l(()=>[a(ae,{width:"36"},{default:l(()=>[...N[13]||(N[13]=[s("span",{class:"proj-file-icon"},"📄",-1)])]),_:1}),a(ae,{prop:"name",label:"名称","min-width":"220"},{default:l(({row:Y})=>[s("span",_n,j(Y.name),1)]),_:1}),a(ae,{label:"大小",width:"100"},{default:l(({row:Y})=>[s("span",Sn,j(se(Y.sizeBytes)),1)]),_:1}),a(ae,{prop:"modified",label:"修改时间",width:"160"},{default:l(({row:Y})=>[s("span",xn,j(Y.modified),1)]),_:1})]),_:1},8,["data"])),[[Ue,n.value]])])]),s("div",Vn,[s("span",$n,j(o.mode==="load"?"选中文件":"保存为"),1),a(ie,{modelValue:f.value,"onUpdate:modelValue":N[1]||(N[1]=Y=>f.value=Y),size:"small",placeholder:o.mode==="load"?"在右侧选择 JSON 文件,或直接输入绝对路径":"输入文件名(不写绝对路径则保存到当前目录)",spellcheck:"false",class:"proj-manual-input"},null,8,["modelValue","placeholder"]),N[14]||(N[14]=s("span",{class:"proj-footer-type"},"JSON (*.json)",-1))])])]),_:1},8,["model-value","title"])}}}),Fn=Ne(jn,[["__scopeId","data-v-411e65f0"]]);function Pn(){const o=$("transform.move"),A=$({grid:!1,gridSizeMm:100,object:!0,endpoint:!0,midpoint:!1,toAngleDeg:void 0}),g=$(!0),p=$(!0),h=Q(()=>{const n=o.value;return n.startsWith("select.")?"select":n.startsWith("draw.")?"draw":n.startsWith("transform.")?"transform":n.startsWith("align.")?"align":n.startsWith("batch.")?"batch":n.startsWith("snap.")?"snap":"show"}),x=Q(()=>({"select.single":"单选","select.rect":"矩形框选","select.lasso":"圈选","select.byType.site":"按类型选 - 站点","select.byType.bezier":"按类型选 - 贝塞尔","select.byType.polyline":"按类型选 - 折线","select.byType.arc":"按类型选 - 弧","select.byType.decor":"按类型选 - 装饰物","select.byType.currentLayer":"按类型选 - 当前图层","select.invert":"反选","select.clear":"清空选中","draw.site":"添加站点","draw.sites.continuous":"连续添加站点","draw.track.polyline":"添加折线路径","draw.track.bezier":"添加贝塞尔路径","draw.track.arc":"添加弧形路径","draw.track.nurbs":"添加 NURBS 路径","draw.decor.line":"添加线段","draw.decor.rect":"添加矩形","draw.decor.circle":"添加圆","draw.decor.text":"添加文本","draw.image":"插入图片","draw.model":"插入 3D 模型","transform.move":"移动","transform.rotate":"旋转","transform.scale":"缩放","transform.duplicate":"复制副本","transform.copy":"复制","transform.paste":"粘贴","transform.delete":"删除","transform.copyFields":"复制字段","align.left":"左对齐","align.right":"右对齐","align.top":"上对齐","align.bottom":"下对齐","align.centerH":"水平居中","align.centerV":"垂直居中","align.center":"整体居中","align.distributeH":"水平等距","align.distributeV":"垂直等距","align.toFirst":"对齐到第一个","align.toLast":"对齐到最后一个","batch.linearH":"横向间隔生成","batch.linearV":"纵向间隔生成","batch.matrix":"矩阵生成","batch.alongPath":"沿路径采样生成","batch.circular":"环形阵列","snap.grid":"网格吸附","snap.object":"对象吸附","snap.endpoint":"端点吸附","snap.midpoint":"中点吸附","show.controlPoints":"显示控制点","show.controlHandles":"显示控制柄"})[o.value]??o.value);function r(n){o.value=n}function m(n){A.value={...A.value,[n]:!A.value[n]}}return{activeTool:o,snap:A,showControlPoints:g,showControlHandles:p,toolCategory:h,toolLabel:x,setTool:r,toggleSnap:m}}function Ce(o,A){return`${o}:${A}`}function Tn(){const o=$([]),A=$(null),g=Q(()=>o.value.map(b=>b.id)),p=Q(()=>o.value.length);function h(b,B){const T=Ce(b,B);return o.value.some(k=>Ce(k.kind,k.id)===T)}function x(b){h(b.kind,b.id)||(o.value=[...o.value,b],A.value=Ce(b.kind,b.id))}function r(b,B){const T=Ce(b,B);o.value=o.value.filter(k=>Ce(k.kind,k.id)!==T),A.value===T&&(A.value=null)}function m(b){h(b.kind,b.id)?r(b.kind,b.id):x(b)}function n(b){o.value=b,A.value=b.length>0?Ce(b[b.length-1].kind,b[b.length-1].id):null}function _(){o.value=[],A.value=null}function F(b){o.value=o.value.filter(B=>B.kind===b)}function f(b){o.value=[b],A.value=Ce(b.kind,b.id)}return{items:o,ids:g,count:p,lastClickedKey:A,has:h,add:x,remove:r,toggle:m,set:n,clear:_,filterByKind:F,selectSingle:f}}function En(o={}){const A=o.maxDepth??20,g=$([]),p=$([]),h=$(!1),x=Q(()=>g.value.length>0&&!h.value),r=Q(()=>p.value.length>0&&!h.value);async function m(b){if(!h.value){h.value=!0;try{await b.apply(),g.value=[...g.value,b].slice(-A),p.value=[],o.onChange?.()}finally{h.value=!1}}}async function n(){if(!x.value)return;const b=g.value[g.value.length-1];h.value=!0;try{await b.revert(),g.value=g.value.slice(0,-1),p.value=[...p.value,b].slice(-A),o.onChange?.()}finally{h.value=!1}}async function _(){if(!r.value)return;const b=p.value[p.value.length-1];h.value=!0;try{await b.apply(),p.value=p.value.slice(0,-1),g.value=[...g.value,b].slice(-A),o.onChange?.()}finally{h.value=!1}}function F(){g.value=[],p.value=[],o.onChange?.()}function f(b,B){return{label:b,apply:async()=>{for(const T of B)await T.apply()},revert:async()=>{for(let T=B.length-1;T>=0;T--)await B[T].revert()}}}return{undoStack:g,redoStack:p,busy:h,canUndo:x,canRedo:r,run:m,undo:n,redo:_,clear:F,composite:f}}function zn(o={}){function A(g){const p=g?.data;if(!p||typeof p!="object"||typeof p.type!="string")return;const h=p.type,x=p.payload;if(h==="workspace.pick"&&o.onPick&&x&&typeof x=="object"&&"x"in x&&"y"in x){const r=x;o.onPick({x:Number(r.x),y:Number(r.y),siteId:typeof r.siteId=="number"?r.siteId:void 0})}else if(h==="workspace.select"&&o.onSelect&&Array.isArray(x))o.onSelect({names:x});else if(h==="workspace.mouse"&&o.onMouse&&x&&typeof x=="object"&&"x"in x&&"y"in x){const r=x;o.onMouse({x:Number(r.x),y:Number(r.y)})}}Ft(()=>window.addEventListener("message",A)),_a(()=>window.removeEventListener("message",A))}function In(o,A){if(o.length<2)return[];const g=[],p=o.map(f=>f.x),h=o.map(f=>f.y),x=Math.min(...p),r=Math.max(...p),m=Math.min(...h),n=Math.max(...h),_=p.reduce((f,b)=>f+b,0)/p.length,F=h.reduce((f,b)=>f+b,0)/h.length;switch(A){case"left":for(const f of o)g.push(de(f,{x}));break;case"right":for(const f of o)g.push(de(f,{x:r}));break;case"top":for(const f of o)g.push(de(f,{y:n}));break;case"bottom":for(const f of o)g.push(de(f,{y:m}));break;case"centerH":for(const f of o)g.push(de(f,{x:_}));break;case"centerV":for(const f of o)g.push(de(f,{y:F}));break;case"center":for(const f of o)g.push(de(f,{x:_,y:F}));break;case"distributeH":{const f=[...o].sort((B,T)=>B.x-T.x),b=(f[f.length-1].x-f[0].x)/(f.length-1);f.forEach((B,T)=>{const k=f[0].x+b*T;Math.abs(k-B.x)>.5&&g.push(de(B,{x:k}))});break}case"distributeV":{const f=[...o].sort((B,T)=>B.y-T.y),b=(f[f.length-1].y-f[0].y)/(f.length-1);f.forEach((B,T)=>{const k=f[0].y+b*T;Math.abs(k-B.y)>.5&&g.push(de(B,{y:k}))});break}case"toFirst":{const f=o[0];for(const b of o.slice(1))g.push(de(b,{x:f.x,y:f.y}));break}case"toLast":{const f=o[o.length-1];for(const b of o.slice(0,-1))g.push(de(b,{x:f.x,y:f.y}));break}}return g}function de(o,A){return{action:"patch",kind:o.kind,id:o.id,data:A}}function Bn(o,A,g,p){return Pt(o,g,A,g,p)}function Un(o,A,g,p){return Pt(o,A,o,g,p)}function Pt(o,A,g,p,h){const x=[],r=Math.max(2,Math.floor(h.count));for(let m=0;m{const e=n.items.value;if(e.length!==1)return null;const t=e[0].kind;return t==="site"||t==="track"?t:null}),ae=$(["g"]),re=$([{name:"g",visible:!0,selectable:!0,color:"#cccccc"}]),L=Ze({selectFilter:{sites:!0,tracks:!0,cars:!0,decor:!0},alignSnap:{sites:!0,cars:!0,tracks:!0},showViewport:{sceneLabels:!0,scenePrimitives:!0,cars:!0}});function xe(){try{localStorage.setItem("mapEditor.viewFilter",JSON.stringify(L))}catch{}}function Ue(){try{const e=localStorage.getItem("mapEditor.viewFilter");if(!e)return;const t=JSON.parse(e);t.selectFilter&&Object.assign(L.selectFilter,t.selectFilter),t.alignSnap&&Object.assign(L.alignSnap,t.alignSnap),t.showViewport&&Object.assign(L.showViewport,t.showViewport)}catch{}}function Y(){const e=L.selectFilter,t=n.items.value.filter(i=>i.kind==="site"?e.sites:i.kind==="track"?e.tracks:i.kind==="car"?e.cars:i.kind==="special"?e.decor:!0);t.length!==n.items.value.length&&n.set(t)}const ke=$(!1),fe=$({siteA:null}),Le=$(!1),ve=$(!1),Me=$("");function We(e){return e.map(t=>`${t.kind}:${t.id}`).sort().join(",")}const ye=$(!1),_e=["draw.site","draw.sites.continuous","draw.track.polyline","draw.track.bezier","draw.track.arc","draw.track.nurbs"];async function et(){if(!ye.value){for(ye.value=!0;ye.value;){let e=null;try{e=await R.pick()}catch{break}if(!ye.value)break;const t=m.activeTool.value;if(!_e.includes(t))break;if(t==="draw.site"){await Ye(e.x,e.y),C.success(`已添加站点 (${e.x.toFixed(0)}, ${e.y.toFixed(0)})`);break}else if(t==="draw.sites.continuous")await Ye(e.x,e.y);else if(t==="draw.track.polyline"||t==="draw.track.bezier"||t==="draw.track.arc"||t==="draw.track.nurbs"){const i=fe.value.siteA;if(await Fe(e.siteId),i!=null&&fe.value.siteA==null){const u=t==="draw.track.bezier"?"贝塞尔路径":t==="draw.track.arc"?"弧形路径":t==="draw.track.nurbs"?"NURBS 路径":"直线路径";C.success(`已添加${u}`);break}}else break}ye.value=!1,_e.includes(m.activeTool.value)&&m.setTool("transform.move")}}const tt=Q(()=>m.snap.value.grid||m.snap.value.object||m.snap.value.endpoint||m.snap.value.midpoint);async function v(e){switch(e){case"edit.undo":await _.undo();break;case"edit.redo":await _.redo();break;case"edit.delete":await Te();break;case"edit.selectAll":C.info("全选:请使用工具栏「按类型选」批量选中");break;case"edit.invert":C.info("反选功能后续实现");break;case"project.save":await bt(!1);break;case"project.open":await Xt();break;case"project.saveAs":await bt(!0);break;case"project.close":C.info("关闭项目:使用 SimpleLite 主菜单");break;case"ai.open":await yt();break;case"file.upload.image":Je("image");break;case"file.upload.model":Je("model");break;case"view.fitAll":C.info("请在 3D 视口右键菜单使用「适配全部」");break;case"view.fitSelection":C.info("请在 3D 视口右键菜单使用「适配选中」");break;case"snap.toGrid":m.toggleSnap("grid");break;case"snap.toObject":m.toggleSnap("object");break;case"layer.new":await ue();break;case"layer.toggleVisibility":ke.value=!0;break;case"view.select.sites":d("selectFilter","sites");break;case"view.select.tracks":d("selectFilter","tracks");break;case"view.select.cars":d("selectFilter","cars");break;case"view.select.decor":d("selectFilter","decor");break;case"view.snap.sites":d("alignSnap","sites");break;case"view.snap.cars":d("alignSnap","cars");break;case"view.snap.tracks":d("alignSnap","tracks");break;case"view.show.sceneLabels":d("showViewport","sceneLabels");break;case"view.show.scenePrimitives":d("showViewport","scenePrimitives");break;case"view.show.cars":d("showViewport","cars");break;default:C.info(`暂未实现的命令:${e}`)}}async function d(e,t){const i=L[e],u=t,w=i[u];i[u]=!i[u],xe(),e==="selectFilter"&&Y();const S={};S[e]={[u]:i[u]};try{await R.setViewFilter(S)}catch(E){console.warn("[MapEditor] 写后端 viewFilter 失败:",E),i[u]=w,xe(),e==="selectFilter"&&Y(),C({message:"过滤设置写入后端失败,已回滚本地状态;请检查 SimpleLite 是否连通后重试。",type:"warning",duration:5e3,showClose:!0})}}function Ve(e){return e==="bezier"?"贝塞尔路径":e==="nurbs"?"NURBS 路径":e==="arc"?"弧形路径":"直线路径"}async function at(e,t){const i=await ne(e),u=await ne(t);if(!i||!u)return C.warning(`无法拉到 site #${e} / #${t} 的 x,y,将不带 typeInfo 创建 track(圆心需手动设置)`),null;const S=Math.hypot(i.x-u.x,i.y-u.y)/2;let E;try{const I=await H.prompt(`请输入半径 (mm),必须 ≥ ${S.toFixed(1)}(等于即半圆)`,"添加弧形路径",{inputValue:String(Math.ceil(S))});E=Number(I.value)}catch{return"cancelled"}return!Number.isFinite(E)||E0?-S/E:0,ta=E>0?w/E:0,ht=u==="left"?1:-1,st=(e.x+t.x)/2+ht*ee*ea,it=(e.y+t.y)/2+ht*ee*ta,aa=Math.atan2(e.y-it,e.x-st)*180/Math.PI,la=Math.atan2(t.y-it,t.x-st)*180/Math.PI;return["1",st.toFixed(3),it.toFixed(3),i.toFixed(3),aa.toFixed(3),la.toFixed(3)].join(",")}function be(e){e&&(D.site.layer=e,D.track.layer=e,C.success(`默认图层已切到 "${e}"`))}async function ue(){try{const t=((await H.prompt("请输入新图层名(同名会被忽略)","新建图层",{inputValue:""})).value??"").trim();if(!t)return;if(ae.value.includes(t)){D.site.layer=t,D.track.layer=t,C.info(`图层 "${t}" 已存在,已切到该层`);return}vt(t),D.site.layer=t,D.track.layer=t,C.success(`已创建图层 "${t}",下次创建对象会落到该层`)}catch{}}async function je(e){if(m.setTool(e),fe.value.siteA=null,ye.value=!1,e==="select.clear"){n.clear(),await q.clearSelection().catch(()=>{});return}if(_e.includes(e)&&et(),e.startsWith("align.")){await K(e.replace("align.",""));return}if(e.startsWith("batch.")){await Tt(e);return}if(e==="transform.delete"){await Te();return}if(e.startsWith("select.byType.")){const t=e.replace("select.byType.","");Oe(t);return}if(e==="show.controlPoints"&&(m.showControlPoints.value=!m.showControlPoints.value),e==="show.controlHandles"&&(m.showControlHandles.value=!m.showControlHandles.value),e==="draw.image"&&Je("image"),e==="draw.model"&&Je("model"),e==="transform.copyFields"){await zt();return}}function Oe(e){e==="site"?n.filterByKind("site"):e==="polyline"||e==="bezier"||e==="arc"?n.items.value=n.items.value.filter(t=>{if(t.kind!=="track")return!1;const i=t.typeName.toLowerCase();return e==="polyline"?i==="uitrack":e==="bezier"?i.includes("bezier"):e==="arc"?i.includes("arc"):!1}):e==="decor"?n.filterByKind("special"):e==="currentLayer"&&M.value?.layer&&(n.items.value=n.items.value.filter(t=>t.layer===M.value.layer))}async function Ge(e){F.x=e.x,F.y=e.y;const t=m.activeTool.value;if(!(ye.value&&_e.includes(t))&&!Le.value){if(t==="draw.site"||t==="draw.sites.continuous"){await Ye(e.x,e.y);return}if(t==="draw.track.polyline"||t==="draw.track.bezier"||t==="draw.track.arc"||t==="draw.track.nurbs"){try{const i=await R.pick();await Fe(i.siteId)}catch{}return}}}function G(e){n.set($e(e))}function $e(e){const t=[],i=L.selectFilter;for(const u of e){const w=/^UI([A-Za-z]+)-(\d+)$/.exec(u)??/^([A-Za-z]+)-(\d+)$/.exec(u);if(!w)continue;const S=w[1],E=Number(w[2]),I=S.toLowerCase();let z;I==="site"?z="site":I==="car"||I==="vehicle"?z="car":I.includes("track")?z="track":z="special",!(z==="site"&&!i.sites)&&(z==="track"&&!i.tracks||z==="car"&&!i.cars||z==="special"&&!i.decor||t.push({kind:z,id:E,name:u,typeName:u.startsWith("UI")?`UI${S}`:S}))}return t}async function Fe(e){if(e<=0){C.warning("请先拾取一个站点");return}if(fe.value.siteA==null){fe.value.siteA=e,C.success(`已选起点站 #${e},请再拾取终点站`);return}const t=fe.value.siteA,i=e;if(fe.value.siteA=null,t===i){C.warning("起止站点不能相同");return}const u=m.activeTool.value==="draw.track.bezier"?"bezier":m.activeTool.value==="draw.track.arc"?"arc":m.activeTool.value==="draw.track.nurbs"?"nurbs":"track";let w,S="";if(u==="bezier"||u==="nurbs"){const I=await Pe(t,i,u);if(I==="cancelled")return;I!=null&&(w=I.typeInfo,S=`(控制点 ${I.midCount})`)}else if(u==="arc"){const I=await at(t,i);if(I==="cancelled")return;I!=null&&(w=I.typeInfo,S=`(半径 ${I.radius.toFixed(0)})`)}let E=-1;await _.run({label:`新建${Ve(u)} (${t}→${i})${S}`,apply:async()=>{const I={siteA:t,siteB:i,layer:D.track.layer};w&&(I.typeInfo=w),E=(await R.createTrack(u,I)).id},revert:async()=>{E>0&&await R.deleteObject("track",E)}}),De(u)}async function Pe(e,t,i){const u=await ne(e),w=await ne(t);if(!u||!w)return C.warning(`无法拉到 site #${e} / #${t} 的 x,y,将不带 typeInfo 创建 track(控制点会用兜底直线)`),null;const S=Ve(i);let E;try{const z=await H.prompt("请输入中间控制点个数(不含起止站点;默认 2,输入 0 则不带控制点直接连接两站点)",`创建${S}`,{inputValue:"2",inputPattern:/^\d+$/,inputErrorMessage:"请输入非负整数"});E=Math.max(0,Math.floor(Number(z.value)))}catch{return"cancelled"}if(E===0)return{typeInfo:Re([u,w],i==="bezier"?2:3),midCount:0};C.info(`请在画布上依次点选 ${E} 个中间控制点(任意位置;右键取消创建)`),Le.value=!0;const I=[];try{for(let z=0;z{i=(await R.createSite({x:e,y:t,layer:D.site.layer,name:`${D.site.namePrefix}-${Date.now()%1e5}`})).id},revert:async()=>{i>0&&await R.deleteObject("site",i)}})}async function Te(){const e=[...n.items.value];if(e.length===0)return;const t=[];for(const i of e)try{const u=await q.getBundle(i.kind,i.id);t.push({kind:i.kind,typeName:u.typeName,data:{...u.fields??{}}})}catch{}await _.run({label:`删除 ${e.length} 个对象`,apply:async()=>{const i=e.map(u=>({action:"delete",kind:u.kind,id:u.id}));await R.batch(i),n.clear()},revert:async()=>{const i=t.map(u=>({action:"create",kind:c(u.kind,u.typeName),data:u.data}));i.length&&(await R.batch(i),C.success(`已恢复 ${i.length} 个对象(注意:id 已重排)`))}})}function c(e,t){const i=(t??"").toLowerCase();if(e==="track")return i.includes("bezier")?"bezier":i.includes("arc")?"arc":i.includes("nurbs")?"nurbs":"track";if(e==="special"){if(i.includes("image"))return"image";if(i.includes("text"))return"text";if(i.includes("model"))return"model"}return e}async function K(e){const t=[];for(const u of n.items.value)if(u.kind!=="track")try{const w=await q.getBundle(u.kind,u.id),S=Number(w.fields?.x??0),E=Number(w.fields?.y??0);t.push({kind:u.kind,id:u.id,x:S,y:E})}catch{}if(t.length<2){C.warning("对齐需要选中至少 2 个对象");return}const i=In(t,e);if(i.length===0){C.info("对齐无变化");return}await _.run({label:`对齐 (${e})`,apply:async()=>{await R.batch(i)},revert:async()=>{const u=t.map(w=>({action:"patch",kind:w.kind,id:w.id,data:{x:w.x,y:w.y}}));await R.batch(u)}})}async function Tt(e){if(e==="batch.linearH"||e==="batch.linearV"){const t=e==="batch.linearH"?"横向":"纵向";try{const{value:i}=await H.prompt(`输入 ${t}站点数量`,"批量生成",{inputValue:"5",inputType:"number"}),u=Math.max(2,Math.floor(Number(i))),w=await H.prompt("起点 X","批量生成",{inputValue:"0"}),S=await H.prompt("起点 Y","批量生成",{inputValue:"0"}),E=await H.prompt("终点 X","批量生成",{inputValue:"5000"}),I=await H.prompt("终点 Y","批量生成",{inputValue:"0"}),z=e==="batch.linearH"?Bn(Number(w.value),Number(E.value),Number(S.value),{count:u,layer:D.site.layer}):Un(Number(w.value),Number(S.value),Number(I.value),{count:u,layer:D.site.layer});await nt(`${t}间隔生成 ${u}`,z)}catch{}return}if(e==="batch.matrix"){try{const t=Number((await H.prompt("行数","矩阵生成",{inputValue:"3"})).value),i=Number((await H.prompt("列数","矩阵生成",{inputValue:"3"})).value),u=Number((await H.prompt("x1","矩阵生成",{inputValue:"0"})).value),w=Number((await H.prompt("y1","矩阵生成",{inputValue:"0"})).value),S=Number((await H.prompt("x2","矩阵生成",{inputValue:"5000"})).value),E=Number((await H.prompt("y2","矩阵生成",{inputValue:"5000"})).value),I=Ln(u,w,S,E,{rows:t,cols:i,layer:D.site.layer});await nt(`矩阵生成 ${t}×${i}`,I)}catch{}return}if(e==="batch.circular"){try{const t=Number((await H.prompt("圆心 X","环形阵列",{inputValue:"0"})).value),i=Number((await H.prompt("圆心 Y","环形阵列",{inputValue:"0"})).value),u=Number((await H.prompt("半径 (mm)","环形阵列",{inputValue:"2000"})).value),w=Number((await H.prompt("站点数量","环形阵列",{inputValue:"8"})).value),S=Mn(t,i,u,{count:w,layer:D.site.layer});await nt(`环形阵列 r=${u} n=${w}`,S)}catch{}return}if(e==="batch.alongPath"){await Et();return}}async function Et(){const e=n.items.value.filter(w=>w.kind==="track");if(e.length===0){C.warning("请先选中至少 1 条路径");return}let t=500,i=!1;try{const{value:w}=await H.prompt("输入采样间距 (mm)","沿路径采样",{inputValue:"500",inputType:"number"});t=Math.max(10,Math.floor(Number(w)));const{value:S}=await H.prompt("是否包含端点?输入 1 包含,0 不包含","沿路径采样",{inputValue:"0"});i=Number(S)===1}catch{return}const u=[];await _.run({label:`沿 ${e.length} 条路径间距 ${t}mm 采样`,apply:async()=>{for(const w of e){const S=await R.sampleSitesAlongTrack(w.id,{spacingMm:t,includeEndpoints:i,layer:D.site.layer});u.push(...S.ids)}C.success(`已采样生成 ${u.length} 个站点`)},revert:async()=>{if(!u.length)return;const w=u.map(S=>({action:"delete",kind:"site",id:S}));await R.batch(w)}})}async function zt(){if(n.items.value.length<2){C.warning("字段复制需要 ≥ 2 个选中对象(第 1 个为源,其余为目标)");return}const[e,...t]=n.items.value;try{const{value:i}=await H.prompt("输入要复制的字段名(逗号分隔),例如:x,y,layerName","字段复制",{inputValue:"x,y"}),u=i.split(",").map(S=>S.trim()).filter(Boolean);if(!u.length)return;const w=new Map;for(const S of t)try{const E=await q.getBundle(S.kind,S.id),I={};for(const z of u)I[z]=String(E.fields?.[z]??"");w.set(`${S.kind}:${S.id}`,I)}catch{}await _.run({label:`字段复制 ${u.join(",")} → ${t.length} 个`,apply:async()=>{const S=await R.copyFieldsTo(e.kind,e.id,u,t.map(E=>({kind:E.kind,id:E.id})));C.success(`已复制 ${S.copied} 项字段`)},revert:async()=>{const S=t.flatMap(E=>{const I=w.get(`${E.kind}:${E.id}`);return I?[{action:"patch",kind:E.kind,id:E.id,data:I}]:[]});S.length&&await R.batch(S)}})}catch{}}async function nt(e,t){if(t.length===0)return;let i=[];await _.run({label:e,apply:async()=>{i=(await R.batch(t)).results.filter(w=>w.ok&&w.action==="create"&&w.result?.id).map(w=>({kind:w.result.kind,id:w.result.id}))},revert:async()=>{const u=i.map(w=>({action:"delete",kind:w.kind,id:w.id}));u.length&&await R.batch(u)}}),C.success(`${e} 完成`)}async function Ke(){if(n.items.value.length===0){M.value=null,pe.value=[],ge.value=[],le.value=[];return}const e=n.items.value[0];It();try{const t=await q.getBundle(e.kind,e.id);M.value=t.summary,pe.value=Object.entries(t.fields).map(([i,u])=>({key:i,value:String(u)})),ge.value=t.methods,le.value=(t.status??[]).map(i=>({key:i.key,value:i.value}))}catch(t){C.error(`加载属性失败:${t.message}`)}finally{Bt()}}function It(){oe.value=!0}function Bt(){oe.value=!1}async function Ut(e){if(!M.value||n.items.value.length===0)return;const t=n.items.value[0],i=M.value.id,u=M.value.name??"";u!==e&&(await _.run({label:`重命名 ${u||"(无)"} → ${e}`,apply:async()=>{await q.setField(t.kind,i,"name",e)},revert:async()=>{try{await q.setField(t.kind,i,"name",u)}catch(w){C.warning(`回滚名称失败:${w.message}`)}}}),C.success("名称已更新"))}async function Lt(e){if(!M.value||n.items.value.length===0)return;const t=n.items.value[0],i=M.value.id,u=M.value.layer??"";u!==e&&(await _.run({label:`修改图层 ${u||"(无)"} → ${e}`,apply:async()=>{await q.setField(t.kind,i,"layerName",e)},revert:async()=>{try{await q.setField(t.kind,i,"layerName",u)}catch(w){C.warning(`回滚图层失败:${w.message}`)}}}),await Ke())}async function mt(e,t){if(!M.value)return;const i=n.items.value[0];let u;try{const w=await q.getBundle(i.kind,M.value.id);u=w.fields?.[e]!=null?String(w.fields[e]):void 0}catch{}await _.run({label:`修改 ${e}`,apply:async()=>{await q.setField(i.kind,M.value.id,e,t)},revert:async()=>{if(u!==void 0)try{await q.setField(i.kind,M.value.id,e,u)}catch(w){C.warning(`回滚 ${e} 失败:${w.message}`)}else C.warning(`回滚 ${e}:没拿到原值快照,仅本地撤销`)}}),await Ke()}async function Mt(){try{const e=(await H.prompt("字段名","新增字段",{inputPattern:/^[A-Za-z0-9_]+$/})).value,t=(await H.prompt("字段值","新增字段",{inputValue:""})).value;await mt(e,t)}catch{}}async function Dt(e){if(M.value)try{await q.execute(n.items.value[0].kind,M.value.id,e),C.success(`已执行 ${e}`),await Ke()}catch(t){C.error(`执行失败:${t.message}`)}}function Rt(){localStorage.setItem("mapEditor.defaults",JSON.stringify(D)),C.success("新建默认已保存(下次创建对象时生效)")}function ft(e){const t=e.site??e.Site,i=e.track??e.Track,u=(S,E,I)=>Number(S?.[E]??S?.[I]??0),w=(S,E,I)=>!!(S?.[E]??S?.[I]);return $a({site:{drawScale:u(t,"drawScale","DrawScale"),dotRadiusNormal:u(t,"dotRadiusNormal","DotRadiusNormal"),dotRadiusSelected:u(t,"dotRadiusSelected","DotRadiusSelected"),selectionRingM:u(t,"selectionRingM","SelectionRingM"),colorNormalArgb:u(t,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:u(t,"colorSelectedArgb","ColorSelectedArgb"),labelColorNormalArgb:u(t,"labelColorNormalArgb","LabelColorNormalArgb"),labelColorSelectedArgb:u(t,"labelColorSelectedArgb","LabelColorSelectedArgb")},track:{drawScale:u(i,"drawScale","DrawScale"),widthNormal:u(i,"widthNormal","WidthNormal"),widthSelected:u(i,"widthSelected","WidthSelected"),showDirectionArrows:w(i,"showDirectionArrows","ShowDirectionArrows"),colorNormalArgb:u(i,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:u(i,"colorSelectedArgb","ColorSelectedArgb")}})}async function ot(){se.value=!0;try{const e=await q.getViewportStyle();X.value=ft(e)}catch(e){console.warn("[MapEditor] 加载视口样式失败:",e)}finally{se.value=!1}}function Ot(e){e.site&&(me.site=e.site,X.value&&(X.value={...X.value,site:{...e.site}})),e.track&&(me.track=e.track,X.value&&(X.value={...X.value,track:{...e.track}})),N&&clearTimeout(N),N=setTimeout(()=>{const t={...me};me={},Yt(t)},350)}async function Yt(e){const t=++ie;P.value=!0;try{const i={};e.site&&(i.site=e.site),e.track&&(i.track=e.track);const u=await q.patchViewportStyle(i);if(t!==ie)return;X.value=ft(u)}catch(i){C.error(`视口样式更新失败:${i.message}`),await ot()}finally{t===ie&&(P.value=!1)}}function Kt(e){C.info("图层可见 / 可选切换暂时仅本地生效,后续接入反射 API")}function vt(e){re.value.find(t=>t.name===e)||(re.value=[...re.value,{name:e,visible:!0,selectable:!0,color:"#cccccc"}],ae.value=[...ae.value,e])}async function yt(){try{const e=await St.get();b.value=!!e.configured}catch{b.value=!1}f.value=!0}async function Ht(e){Ee();const t=(e.created??[]).filter(u=>typeof u=="object"&&u!=null&&typeof u.id=="number"&&!u.error);if(t.length===0)return;const i={label:`AI 生图:落地 ${t.length} 个对象`,apply:async()=>{},revert:async()=>{const u=t.map(w=>({action:"delete",kind:w.kind,id:w.id}));await R.batch(u),C.success(`已撤销 AI 生图(删除 ${u.length} 个对象)`)}};await _.run(i)}async function bt(e){const t=localStorage.getItem("mapEditor.lastProjectPath")??"";if(!e&&t){te.value=!0;try{const i=await R.projectSave(t);localStorage.setItem("mapEditor.lastProjectPath",i.path),C.success(`已保存:${i.path}`)}catch(i){C.error(`保存失败:${i.message}`)}finally{te.value=!1}return}k.value="save",W.value=t?t.replace(/[\\/][^\\/]*$/,""):"",T.value=!0}async function Xt(){const e=localStorage.getItem("mapEditor.lastProjectPath")??"";k.value="load",W.value=e?e.replace(/[\\/][^\\/]*$/,""):"",T.value=!0}async function Wt(e){if(e){if(k.value==="save"){te.value=!0;try{const t=await R.projectSave(e);localStorage.setItem("mapEditor.lastProjectPath",t.path),C.success(`已保存:${t.path}`)}catch(t){C.error(`保存失败:${t.message}`)}finally{te.value=!1}return}try{const t=await R.projectLoad(e);localStorage.setItem("mapEditor.lastProjectPath",t.path),C.success(`已加载:${t.sites} 站点 / ${t.tracks} 路径 / ${t.specials} 装饰 / ${t.missions} 任务`),n.clear(),M.value=null}catch(t){C.error(`加载失败:${t.message}`)}}}function Je(e){r.value=e,x.value=e==="image"?"image/*":".obj,.glb,.gltf,.fbx,.cyclemodel",h.value?.click()}async function Gt(e){const t=e.target,i=t.files?.[0];if(i)try{const u=await i.arrayBuffer(),w=Jt(u),S=await R.uploadAsset(i.name,w);C.success(`已上传:${S.fileName}`),r.value==="image"?await R.createImage({x:0,y:0,imagePath:S.savedPath,size:1e3}):await R.createModel({x:0,y:0,modelPath:S.savedPath,scale:1}),Ee()}catch(u){C.error(`上传失败:${u.message}`)}finally{t.value=""}}function Jt(e){let t="";const i=new Uint8Array(e);for(let u=0;u{F.x=e.x,F.y=e.y},onPick:e=>{Ge(e)},onSelect:e=>G(e.names)});const Zt=Ca({onWorkspaceShortcut:e=>{He(e.action)},onAlarm:()=>{},onObjectCreated:()=>Ee(),onObjectDeleted:()=>Ee(),onObjectPatched:()=>Ee(),onObjectBatchChanged:()=>Ee(),onViewportStyleUpdated:()=>{ot()},onSelectionDetail:e=>{if(!Array.isArray(e.names))return;const t=$e(e.names),i=We(t);i!==Me.value&&(Me.value=i,n.set(t))}});function Ee(){Ke()}he(()=>Zt.connected.value,e=>ve.value=e,{immediate:!0}),he(()=>We(n.items.value),e=>{Ke(),Me.value=e,n.items.value.length===1&&q.setSelection(n.items.value[0].kind,n.items.value[0].id).catch(()=>{})});function qt(e){if(!(e instanceof HTMLElement))return!1;const t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||e.isContentEditable?!0:!!e.closest('.el-input, .el-textarea, .el-select, [contenteditable="true"]')}async function He(e){if(e==="undo"){if(!_.canUndo.value)return;await _.undo()}else if(e==="redo"){if(!_.canRedo.value)return;await _.redo()}else await Te()}function gt(e){if(qt(e.target))return;const t=e.ctrlKey||e.metaKey;t&&e.key.toLowerCase()==="z"&&!e.shiftKey?(e.preventDefault(),He("undo")):t&&(e.key.toLowerCase()==="y"||e.key.toLowerCase()==="z"&&e.shiftKey)?(e.preventDefault(),He("redo")):e.key==="Delete"&&(e.preventDefault(),He("delete"))}function wt(e){const t=e.detail?.action;(t==="undo"||t==="redo"||t==="delete")&&He(t)}async function Qt(){try{const e=await R.getViewFilter();Object.assign(L.selectFilter,e.selectFilter),Object.assign(L.alignSnap,e.alignSnap),Object.assign(L.showViewport,e.showViewport),xe()}catch(e){console.warn("[MapEditor] 拉后端 viewFilter 失败,沿用本地缓存:",e)}}return Ft(async()=>{document.addEventListener("keydown",gt,!0),window.addEventListener("workspace-shortcut",wt);try{const t=await St.get();b.value=!!t.configured}catch{}const e=localStorage.getItem("mapEditor.defaults");if(e)try{Object.assign(D,JSON.parse(e))}catch{}Ue(),await Qt(),await ot()}),xa(()=>{document.removeEventListener("keydown",gt,!0),window.removeEventListener("workspace-shortcut",wt)}),(e,t)=>{const i=Qe,u=jt,w=Nt,S=Xe,E=qe,I=pt;return V(),U("div",Dn,[a(ja,{"can-undo":O(_).canUndo.value,"can-redo":O(_).canRedo.value,saving:te.value,"view-filter":L,onCmd:v},null,8,["can-undo","can-redo","saving","view-filter"]),s("div",Rn,[a(Da,{"active-tool":O(m).activeTool.value,onSelectTool:je,onOpenAi:yt},null,8,["active-tool"]),s("div",On,[a(Va,{ref_key:"workspaceRef",ref:p,host:O(g),scope:O(A).scope??"Platform",token:O(A).token??"","read-only":!1,"embed-ui":!1,"canvas-only":!0,"hide-toolbar":!0,onPick:Ge,onSelect:G},null,8,["host","scope","token"])]),a(Wl,{"selection-count":O(n).count.value,primary:M.value,fields:pe.value,status:le.value,methods:ge.value,loading:oe.value,layers:ae.value,defaults:D,"layer-rows":re.value,"selection-kind":Se.value,"viewport-style":X.value,"viewport-style-loading":se.value,"viewport-syncing":P.value,onRename:Ut,onChangeLayer:Lt,onSetField:mt,onAddField:Mt,onExecAction:Dt,onSaveDefaults:Rt,onLayerToggle:Kt,onAddLayer:vt,onDelete:Te,onPatchViewport:Ot},null,8,["selection-count","primary","fields","status","methods","loading","layers","defaults","layer-rows","selection-kind","viewport-style","viewport-style-loading","viewport-syncing"])]),a(nn,{"selected-count":O(n).count.value,"mouse-x":F.x,"mouse-y":F.y,"tool-label":O(m).toolLabel.value,"snap-on":tt.value,"undo-size":O(_).undoStack.value.length,"redo-size":O(_).redoStack.value.length,connected:ve.value},null,8,["selected-count","mouse-x","mouse-y","tool-label","snap-on","undo-size","redo-size","connected"]),a(dn,{modelValue:f.value,"onUpdate:modelValue":t[0]||(t[0]=z=>f.value=z),configured:b.value,"default-bounds":B.value,"default-layer":D.site.layer,onGenerated:Ht},null,8,["modelValue","configured","default-bounds","default-layer"]),a(Fn,{modelValue:T.value,"onUpdate:modelValue":t[1]||(t[1]=z=>T.value=z),mode:k.value,"initial-path":W.value,onConfirm:Wt},null,8,["modelValue","mode","initial-path"]),a(I,{modelValue:ke.value,"onUpdate:modelValue":t[3]||(t[3]=z=>ke.value=z),title:"切换显示图层",width:"520px"},{footer:l(()=>[a(S,{onClick:t[2]||(t[2]=z=>ke.value=!1)},{default:l(()=>[...t[4]||(t[4]=[y("关闭",-1)])]),_:1}),a(S,{type:"primary",onClick:ue},{default:l(()=>[...t[5]||(t[5]=[y("新建图层…",-1)])]),_:1})]),default:l(()=>[a(E,{data:re.value,size:"small",style:{width:"100%"}},{default:l(()=>[a(i,{prop:"name",label:"图层","min-width":"120"}),a(i,{label:"可见",width:"80"},{default:l(({row:z})=>[a(u,{modelValue:z.visible,"onUpdate:modelValue":ee=>z.visible=ee},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"可选",width:"80"},{default:l(({row:z})=>[a(u,{modelValue:z.selectable,"onUpdate:modelValue":ee=>z.selectable=ee},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"颜色",width:"100"},{default:l(({row:z})=>[a(w,{modelValue:z.color,"onUpdate:modelValue":ee=>z.color=ee,size:"small"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"默认层",width:"110"},{default:l(({row:z})=>[a(S,{size:"small",type:D.site.layer===z.name?"primary":"default",onClick:ee=>be(z.name)},{default:l(()=>[y(j(D.site.layer===z.name?"当前默认":"设为默认"),1)]),_:2},1032,["type","onClick"])]),_:1})]),_:1},8,["data"])]),_:1},8,["modelValue"]),s("input",{ref_key:"fileInputRef",ref:h,type:"file",style:{display:"none"},accept:x.value,onChange:Gt},null,40,Yn)])}}}),So=Ne(Kn,[["__scopeId","data-v-cadf4150"]]);export{So as default}; diff --git a/MiGu.Server/wwwroot/assets/MapEditorView-CBiHCGTE.js b/MiGu.Server/wwwroot/assets/MapEditorView-CBiHCGTE.js deleted file mode 100644 index ab28aaa..0000000 --- a/MiGu.Server/wwwroot/assets/MapEditorView-CBiHCGTE.js +++ /dev/null @@ -1 +0,0 @@ -import{aG as Ae,aC as U,aF as a,I as na,bH as l,az as s,af as rt,aA as J,aB as Z,ac as ut,b7 as V,r as Xe,aE as y,K as oa,J as sa,bo as j,aj as Ne,a2 as xt,ah as ce,bh as we,b1 as Be,bG as he,ab as ia,bf as $,a8 as ra,Q as Vt,br as O,aT as kt,aX as _t,Z as ua,R as dt,E as ct,N as $t,O as Ct,S as At,z as Nt,a7 as jt,a9 as qe,aa as Qe,av as Q,a3 as da,be as Ze,G as pt,ag as ca,bs as pa,a0 as ma,$ as fa,x as va,T as ya,y as ba,bv as ga,X as C,bJ as wa,bI as ha,by as ka,b5 as Ft,b4 as _a,bt as Sa,b6 as xa,Y as H}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 */import{W as Va}from"./Workspace3D-PfDes8bN.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{h as ze,a as Ie,r as q}from"./reflection-BmVSriDn.js";/* empty css *//* empty css *//* empty css *//* empty css */import{m as R,a as St}from"./mapEdit-Di5ggA7K.js";/* empty css */import{u as $a}from"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const Ca={class:"edit-top-bar"},Aa=Ae({__name:"EditTopBar",props:{canUndo:{type:Boolean},canRedo:{type:Boolean},saving:{type:Boolean},viewFilter:{}},emits:["cmd"],setup(o,{emit:A}){const g=A;function p(x){g("cmd",x)}function h(x){return x?"☑":"☐"}return(x,r)=>{const m=Xe,n=sa,_=oa,F=na,f=rt,b=ut;return V(),U("div",Ca,[a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"project.open"},{default:l(()=>[...r[3]||(r[3]=[y("加载文件…",-1)])]),_:1}),a(n,{command:"project.save"},{default:l(()=>[...r[4]||(r[4]=[y("保存文件",-1)])]),_:1}),a(n,{command:"project.saveAs"},{default:l(()=>[...r[5]||(r[5]=[y("另存为…",-1)])]),_:1}),a(n,{command:"project.props",divided:""},{default:l(()=>[...r[6]||(r[6]=[y("项目属性",-1)])]),_:1}),a(n,{command:"project.close"},{default:l(()=>[...r[7]||(r[7]=[y("关闭",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[2]||(r[2]=[y("项目加载和保存",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"file.import.dwg"},{default:l(()=>[...r[9]||(r[9]=[y("导入 .dwg/.dxf",-1)])]),_:1}),a(n,{command:"file.import.geojson"},{default:l(()=>[...r[10]||(r[10]=[y("导入 .geojson",-1)])]),_:1}),a(n,{command:"file.upload.image",divided:""},{default:l(()=>[...r[11]||(r[11]=[y("导入图片",-1)])]),_:1}),a(n,{command:"file.upload.model"},{default:l(()=>[...r[12]||(r[12]=[y("导入 CycleGUI 模型",-1)])]),_:1}),a(n,{command:"file.export.png",divided:""},{default:l(()=>[...r[13]||(r[13]=[y("导出 PNG",-1)])]),_:1}),a(n,{command:"file.export.svg"},{default:l(()=>[...r[14]||(r[14]=[y("导出 SVG",-1)])]),_:1}),a(n,{command:"file.export.json"},{default:l(()=>[...r[15]||(r[15]=[y("导出 JSON",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[8]||(r[8]=[y("导入",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"edit.cut"},{default:l(()=>[...r[17]||(r[17]=[y("剪切 (Ctrl+X)",-1)])]),_:1}),a(n,{command:"edit.copy"},{default:l(()=>[...r[18]||(r[18]=[y("复制 (Ctrl+C)",-1)])]),_:1}),a(n,{command:"edit.paste"},{default:l(()=>[...r[19]||(r[19]=[y("粘贴 (Ctrl+V)",-1)])]),_:1}),a(n,{command:"edit.delete"},{default:l(()=>[...r[20]||(r[20]=[y("删除 (Del)",-1)])]),_:1}),a(n,{command:"edit.selectAll",divided:""},{default:l(()=>[...r[21]||(r[21]=[y("全选",-1)])]),_:1}),a(n,{command:"edit.invert"},{default:l(()=>[...r[22]||(r[22]=[y("反选",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[16]||(r[16]=[y("编辑",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"edit.undo",disabled:!o.canUndo},{default:l(()=>[...r[24]||(r[24]=[y("撤销 (Ctrl+Z)",-1)])]),_:1},8,["disabled"]),a(n,{command:"edit.redo",disabled:!o.canRedo},{default:l(()=>[...r[25]||(r[25]=[y("重做 (Ctrl+Y)",-1)])]),_:1},8,["disabled"])]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[23]||(r[23]=[y("撤销",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"view.fitAll"},{default:l(()=>[...r[27]||(r[27]=[y("缩放至全屏",-1)])]),_:1}),a(n,{command:"view.fitSelection"},{default:l(()=>[...r[28]||(r[28]=[y("缩放至选中",-1)])]),_:1}),a(n,{command:"view.toggleGrid",divided:""},{default:l(()=>[...r[29]||(r[29]=[y("显示网格",-1)])]),_:1}),a(n,{command:"view.toggleScale"},{default:l(()=>[...r[30]||(r[30]=[y("显示比例尺",-1)])]),_:1}),a(n,{command:"view.toggle2D"},{default:l(()=>[...r[31]||(r[31]=[y("切换 2D / 3D",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[26]||(r[26]=[y("视图",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,null,{default:l(()=>[a(n,{command:"layer.new"},{default:l(()=>[...r[33]||(r[33]=[y("新建图层…",-1)])]),_:1}),a(n,{command:"layer.toggleVisibility"},{default:l(()=>[...r[34]||(r[34]=[y("切换显示图层…",-1)])]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[32]||(r[32]=[y("图层",-1)])]),_:1})]),_:1}),a(F,{trigger:"click",onCommand:p},{dropdown:l(()=>[a(_,{class:"topbar-filter-menu"},{default:l(()=>[a(n,{disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[36]||(r[36]=[y("选择(可拾取)",-1)])]),_:1}),a(n,{command:"view.select.sites"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.sites))+" 站点",1)]),_:1}),a(n,{command:"view.select.tracks"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.tracks))+" 路径",1)]),_:1}),a(n,{command:"view.select.cars"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.cars))+" AGV",1)]),_:1}),a(n,{command:"view.select.decor"},{default:l(()=>[y(j(h(o.viewFilter.selectFilter.decor))+" 区域 / 装饰",1)]),_:1}),a(n,{divided:"",disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[37]||(r[37]=[y("对齐(鼠标吸附)",-1)])]),_:1}),a(n,{command:"view.snap.sites"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.sites))+" 吸附站点",1)]),_:1}),a(n,{command:"view.snap.cars"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.cars))+" 吸附 AGV",1)]),_:1}),a(n,{command:"view.snap.tracks"},{default:l(()=>[y(j(h(o.viewFilter.alignSnap.tracks))+" 吸附路径",1)]),_:1}),a(n,{divided:"",disabled:"",class:"topbar-filter-header"},{default:l(()=>[...r[38]||(r[38]=[y("显示内容",-1)])]),_:1}),a(n,{command:"view.show.sceneLabels"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.sceneLabels))+" 场景图元标记",1)]),_:1}),a(n,{command:"view.show.scenePrimitives"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.scenePrimitives))+" 场景图元",1)]),_:1}),a(n,{command:"view.show.cars"},{default:l(()=>[y(j(h(o.viewFilter.showViewport.cars))+" 车辆",1)]),_:1})]),_:1})]),default:l(()=>[a(m,{text:"",class:"topbar-btn"},{default:l(()=>[...r[35]||(r[35]=[y("过滤",-1)])]),_:1})]),_:1}),r[42]||(r[42]=s("div",{class:"spacer"},null,-1)),a(f,{content:"撤销 (Ctrl+Z)",placement:"bottom"},{default:l(()=>[a(m,{size:"small",disabled:!o.canUndo,class:"topbar-icon-btn",onClick:r[0]||(r[0]=B=>p("edit.undo"))},{default:l(()=>[...r[39]||(r[39]=[y("↶",-1)])]),_:1},8,["disabled"])]),_:1}),a(f,{content:"重做 (Ctrl+Y)",placement:"bottom"},{default:l(()=>[a(m,{size:"small",disabled:!o.canRedo,class:"topbar-icon-btn",onClick:r[1]||(r[1]=B=>p("edit.redo"))},{default:l(()=>[...r[40]||(r[40]=[y("↷",-1)])]),_:1},8,["disabled"])]),_:1}),o.saving?(V(),J(b,{key:0,type:"warning",effect:"dark",class:"topbar-saving-tag",size:"small"},{default:l(()=>[...r[41]||(r[41]=[y(" 保存中… ",-1)])]),_:1})):Z("",!0)])}}}),Na=Ne(Aa,[["__scopeId","data-v-11791a50"]]),ja={class:"edit-tool-rail"},Fa={class:"rail-group-title"},Pa={class:"rail-group-text"},Ta={class:"rail-group-list"},Ea=["onClick"],za={class:"rail-btn-glyph"},Ia={class:"rail-btn-label"},Ba={key:0,class:"rail-divider"},Ua={class:"rail-group rail-group-ai"},La=Ae({__name:"EditToolRail",props:{activeTool:{}},emits:["select-tool","open-ai"],setup(o,{emit:A}){const g=o,p=A,h=[{id:"select",title:"选择",tools:[{id:"select.single",label:"单选",glyph:"⌖",tip:"点击拾取单个对象"},{id:"select.rect",label:"矩形框选",glyph:"▱"},{id:"select.lasso",label:"套索圈选",glyph:"◯"},{id:"select.byType.site",label:"仅站点",glyph:"·"},{id:"select.byType.polyline",label:"仅折线",glyph:"╱",tip:"仅 UITrack(直线/折线)"},{id:"select.byType.bezier",label:"仅贝塞尔",glyph:"∽",tip:"仅 UIBezierTrack"},{id:"select.byType.arc",label:"仅弧形",glyph:"◜",tip:"仅 UICircularArcTrack"},{id:"select.byType.decor",label:"仅装饰",glyph:"★"},{id:"select.byType.currentLayer",label:"当前图层",glyph:"▤",tip:"保留当前图层对象"},{id:"select.invert",label:"反选",glyph:"⇄"},{id:"select.clear",label:"清空选中",glyph:"⊘"}]},{id:"draw",title:"绘制",tools:[{id:"draw.site",label:"添加站点",glyph:"+",tip:"点击工具后在画布单击放置"},{id:"draw.sites.continuous",label:"连续站点",glyph:"⁂",tip:"切换工具或 Esc 退出"},{id:"draw.track.polyline",label:"折线路径",glyph:"─",tip:"依序点击两端站点"},{id:"draw.track.bezier",label:"贝塞尔路径",glyph:"∼",tip:"点两端站点 → 弹框输入中间控制点个数 → 连续点选每个控制点"},{id:"draw.track.arc",label:"弧形路径",glyph:"◜",tip:"点两端站点 → 输入半径(≥ |AB|/2,等于即半圆)"},{id:"draw.decor.line",label:"装饰线段",glyph:"╱"},{id:"draw.decor.rect",label:"装饰矩形",glyph:"▭"},{id:"draw.decor.circle",label:"装饰圆",glyph:"◯"},{id:"draw.decor.text",label:"装饰文本",glyph:"T"},{id:"draw.image",label:"插入图片",glyph:"🖼"},{id:"draw.model",label:"插入模型",glyph:"◎",tip:"CycleGUI 3D 模型 (obj/glb/gltf)"}]},{id:"transform",title:"变换",tools:[{id:"transform.move",label:"移动",glyph:"✥"},{id:"transform.rotate",label:"旋转",glyph:"⟳"},{id:"transform.scale",label:"缩放",glyph:"⤡"},{id:"transform.duplicate",label:"复制副本",glyph:"⎘",tip:"Ctrl+D"},{id:"transform.copy",label:"复制",glyph:"📋",tip:"Ctrl+C"},{id:"transform.paste",label:"粘贴",glyph:"📥",tip:"Ctrl+V"},{id:"transform.delete",label:"删除",glyph:"🗑",tip:"Delete"},{id:"transform.copyFields",label:"复制字段",glyph:"⇉",tip:"多选时第 1 个为源,其余为目标"}]},{id:"align",title:"对齐",tools:[{id:"align.left",label:"左对齐",glyph:"⫷"},{id:"align.right",label:"右对齐",glyph:"⫸"},{id:"align.top",label:"上对齐",glyph:"⫵"},{id:"align.bottom",label:"下对齐",glyph:"⫶"},{id:"align.centerH",label:"水平居中",glyph:"⇔"},{id:"align.centerV",label:"垂直居中",glyph:"⇕"},{id:"align.center",label:"整体居中",glyph:"⊕"},{id:"align.distributeH",label:"水平等距",glyph:"⇿"},{id:"align.distributeV",label:"垂直等距",glyph:"⇳"},{id:"align.toFirst",label:"对齐到首",glyph:"⏮"},{id:"align.toLast",label:"对齐到尾",glyph:"⏭"}]},{id:"batch",title:"批量生成",tools:[{id:"batch.linearH",label:"横向间距",glyph:"⇢"},{id:"batch.linearV",label:"纵向间距",glyph:"⇣"},{id:"batch.matrix",label:"矩阵生成",glyph:"#"},{id:"batch.alongPath",label:"沿路径采样",glyph:"⤳",tip:"先选 1+ 条路径,再点本工具"},{id:"batch.circular",label:"环形阵列",glyph:"◌"}]},{id:"show",title:"显示",tools:[{id:"show.controlPoints",label:"控制点",glyph:"⊙"},{id:"show.controlHandles",label:"控制柄",glyph:"⊝"}]}];function x(m){return m===g.activeTool}function r(m){p("select-tool",m)}return(m,n)=>{const _=rt,F=xt;return V(),U("div",ja,[a(F,{class:"rail-scroll"},{default:l(()=>[(V(),U(ce,null,we(h,(f,b)=>s("div",{key:f.id,class:"rail-group"},[s("div",Fa,[n[1]||(n[1]=s("span",{class:"rail-group-bar"},null,-1)),s("span",Pa,j(f.title),1),n[2]||(n[2]=s("span",{class:"rail-group-bar"},null,-1))]),s("div",Ta,[(V(!0),U(ce,null,we(f.tools,B=>(V(),J(_,{key:B.id,content:B.tip??B.label,placement:"right","show-after":280},{default:l(()=>[s("button",{class:Be(["rail-btn",{"rail-btn--active":x(B.id)}]),onClick:T=>r(B.id)},[s("span",za,j(B.glyph),1),s("span",Ia,j(B.label),1)],10,Ea)]),_:2},1032,["content"]))),128))]),bp("open-ai"))},[...n[3]||(n[3]=[s("span",{class:"rail-btn-glyph"},"✦",-1),s("span",{class:"rail-btn-label"},"AI 生图",-1)])])])]),_:1})])}}}),Ma=Ne(La,[["__scopeId","data-v-6b284dea"]]),Da={class:"edit-property-panel"},Ra={key:0,class:"empty-hint"},Oa={key:1,class:"loading-hint"},Ya={key:2,class:"object-pane"},Ka={class:"prop-card prop-card--header"},Ha={class:"prop-card-row"},Xa={class:"prop-id-block"},Wa={class:"prop-id-tag"},Ga={class:"prop-type-tag"},Ja={class:"prop-header-actions"},Za=["disabled"],qa={class:"prop-delete-icon"},Qa={class:"prop-card-row prop-name-row"},el={class:"prop-card-row prop-layer-row"},tl={key:0,class:"prop-card prop-card--geom"},al={class:"prop-card-header"},ll=["title"],nl={class:"prop-card-flag-text"},ol={class:"prop-card-meta"},sl={class:"prop-grid"},il={class:"prop-field-label"},rl={key:0,class:"prop-field-unit"},ul={key:1,class:"prop-card prop-card--style"},dl={class:"prop-card-header"},cl={class:"prop-card-meta"},pl={class:"prop-grid"},ml={class:"prop-field-label"},fl={class:"prop-card prop-card--custom"},vl={class:"prop-card-header"},yl={class:"prop-card-meta"},bl={key:0,class:"prop-grid"},gl=["title"],wl={class:"prop-field-row"},hl=["onClick"],kl={key:1,class:"prop-empty-row"},_l={key:2,class:"prop-card prop-card--status"},Sl={class:"prop-card-header"},xl={class:"prop-card-meta"},Vl={class:"prop-status-list"},$l={class:"prop-status-key"},Cl=["title"],Al={key:3,class:"prop-card prop-card--actions"},Nl={class:"prop-card-header"},jl={class:"prop-card-meta"},Fl={class:"prop-actions"},Pl=["disabled","onClick"],Tl={key:0,class:"prop-action-spinner"},El={class:"prop-action-label"},zl={class:"defaults-pane"},Il={key:0,class:"empty-hint defaults-empty"},Bl={class:"prop-card prop-card--style"},Ul={class:"prop-card-header"},Ll={class:"prop-card-flag-text"},Ml={class:"prop-card"},Dl={class:"prop-card prop-card--style"},Rl={class:"prop-card-header"},Ol={class:"prop-card-flag-text"},Yl={class:"prop-card"},Kl={key:3,class:"loading-hint"},Hl=Ae({__name:"EditPropertyPanel",props:{selectionCount:{},primary:{},fields:{},status:{},methods:{},loading:{type:Boolean},layers:{},defaults:{},layerRows:{},selectionKind:{},viewportStyle:{},viewportStyleLoading:{type:Boolean},viewportSyncing:{type:Boolean}},emits:["rename","change-layer","set-field","add-field","exec-action","save-defaults","layer-toggle","add-layer","delete","patch-viewport"],setup(o,{emit:A}){const g=o,p=A,h=$("object"),x=$(!1);let r=null;const m=$(null),n=$(null);he(()=>g.viewportStyle,v=>{if(!v){m.value=null,n.value=null;return}m.value={...v.site},n.value={...v.track}},{immediate:!0,deep:!0}),he(()=>g.selectionKind,v=>{(v==="site"||v==="track")&&(h.value="defaults")});function _(){x.value=!0,r&&clearTimeout(r),r=setTimeout(()=>{x.value=!1},1400)}he(()=>g.viewportSyncing,(v,d)=>{d&&!v&&_()});function F(v){m.value&&(m.value={...m.value,...v},p("patch-viewport",{site:{...m.value}}))}function f(v){n.value&&(n.value={...n.value,...v},p("patch-viewport",{track:{...n.value}}))}const b=$(null),B=$(""),T=$(!1),k=$(!1);let W=null;function te(){k.value=!0,W&&clearTimeout(W),W=setTimeout(()=>{k.value=!1},1200)}const oe=new Set(["id","name","layerName"]),M=new Set(["x","y","z","cx","cy","cz","dx","dy","dz","sx","sy","ex","ey","startX","startY","endX","endY","size","width","height","depth","angle","rotation","theta","scale","radius","r","siteA","siteB"]),pe=new Set(["color","displaySetting","direction","typeInfo","mustFree","imagePath","modelPath","fontFamily","fontSize","textColor","lineWidth","opacity"]),ge={x:"X",y:"Y",z:"Z",size:"大小",width:"宽",height:"高",depth:"厚",angle:"角度",rotation:"旋转",theta:"θ",scale:"缩放",radius:"半径",siteA:"起点站",siteB:"终点站",startX:"起点 X",startY:"起点 Y",endX:"终点 X",endY:"终点 Y",cx:"中心 X",cy:"中心 Y",color:"颜色",displaySetting:"显示设置",direction:"方向",typeInfo:"类型信息",mustFree:"必须互斥",imagePath:"图片路径",modelPath:"模型路径",fontSize:"字号",textColor:"文字色",lineWidth:"线宽",opacity:"透明度"},le={x:"mm",y:"mm",z:"mm",cx:"mm",cy:"mm",cz:"mm",dx:"mm",dy:"mm",dz:"mm",startX:"mm",startY:"mm",endX:"mm",endY:"mm",width:"mm",height:"mm",depth:"mm",size:"mm",radius:"mm",angle:"°",rotation:"°",theta:"°",fontSize:"px",lineWidth:"px"},D=Q(()=>g.fields.filter(v=>!oe.has(v.key))),X=Q(()=>D.value.filter(v=>M.has(v.key))),se=Q(()=>D.value.filter(v=>pe.has(v.key))),P=Q(()=>D.value.filter(v=>!M.has(v.key)&&!pe.has(v.key)));function N(v){return ge[v]??v}function ie(v){return le[v]??""}function me(v){if(v==null||v==="")return;const d=Number(v);return Number.isFinite(d)?d:void 0}function Se(v){return v.toLowerCase().includes("angle")||v.toLowerCase().includes("rotation")||v==="theta"?1:v==="scale"||v==="opacity"?.1:10}function ae(v){return M.has(v)}function re(v,d){return v==="color"||v==="textColor"?!0:/^#[0-9a-fA-F]{3,8}$/.test(d)}function L(v,d){return d==="true"||d==="false"||d==="True"||d==="False"}function xe(v){return v==="true"||v==="True"||v==="1"}const Ue=Q(()=>{const v=(g.primary?.status??"").toLowerCase();return v?v.includes("error")||v.includes("alarm")||v.includes("failed")?"danger":v.includes("warn")||v.includes("idle")?"warning":v.includes("online")||v.includes("running")||v.includes("ready")||v.includes("ok")?"success":"info":"info"}),Y=$("");he(()=>g.primary?.name??"",v=>{Y.value=v},{immediate:!0});function ke(){fe()}function fe(){if(!g.primary)return;const v=Y.value;v!==(g.primary.name??"")&&p("rename",v)}function Le(v){p("change-layer",v)}function ve(v,d){p("set-field",v,d),M.has(v)&&te()}function Me(){p("add-field")}async function We(v){try{b.value=v,p("exec-action",v)}finally{b.value=null}}function ye(){p("save-defaults")}function _e(v){p("layer-toggle",v)}function et(){const v=B.value.trim();v&&(p("add-layer",v),B.value="")}function tt(){g.selectionCount===0||T.value||(T.value=!0,p("delete"),setTimeout(()=>{T.value=!1},600))}return(v,d)=>{const Ve=Vt,at=ut,De=rt,ne=dt,Re=ua,lt=da,be=At,ue=Nt,je=jt,Oe=ra,Ge=ct,G=Ct,$e=$t,Fe=Xe,Pe=Qe,Ye=qe,Te=ia;return V(),U("div",Da,[a(Te,{modelValue:h.value,"onUpdate:modelValue":d[20]||(d[20]=c=>h.value=c),class:"prop-tabs"},{default:l(()=>[a(Oe,{label:"对象",name:"object"},{default:l(()=>[o.selectionCount===0?(V(),U("div",Ra,[a(Ve,{class:"empty-icon"},{default:l(()=>[a(O(kt))]),_:1}),d[21]||(d[21]=s("span",{class:"empty-title"},"未选中对象",-1)),d[22]||(d[22]=s("span",{class:"empty-desc"},"在画布上点击或框选以编辑属性。",-1))])):o.loading?(V(),U("div",Oa,[a(Ve,{class:"is-loading"},{default:l(()=>[a(O(_t))]),_:1}),d[23]||(d[23]=s("span",null,"加载属性…",-1))])):(V(),U("div",Ya,[s("section",Ka,[s("div",Ha,[s("div",Xa,[s("span",Wa,j(o.selectionCount>1?`多选 ${o.selectionCount}`:`#${o.primary?.id??"-"}`),1),s("span",Ga,j(o.primary?.typeName??"-"),1)]),s("div",Ja,[o.primary?.status?(V(),J(at,{key:0,type:Ue.value,size:"small",effect:"dark",class:"prop-status-tag"},{default:l(()=>[y(j(o.primary.status),1)]),_:1},8,["type"])):Z("",!0),a(De,{content:o.selectionCount>1?`删除选中的 ${o.selectionCount} 个对象(可 Ctrl+Z 撤销)`:"删除该对象(可 Ctrl+Z 撤销)",placement:"top","show-after":220},{default:l(()=>[s("button",{type:"button",class:"prop-delete-btn",disabled:T.value,onClick:tt},[s("span",qa,j(T.value?"⟳":"🗑"),1),d[24]||(d[24]=s("span",null,"删除",-1))],8,Za)]),_:1},8,["content"])])]),s("div",Qa,[d[25]||(d[25]=s("label",{class:"prop-name-label"},"名称",-1)),o.primary?(V(),J(ne,{key:0,"model-value":Y.value,size:"small",placeholder:"对象名","onUpdate:modelValue":d[0]||(d[0]=c=>Y.value=c),onBlur:ke,onChange:fe},null,8,["model-value"])):Z("",!0)]),s("div",el,[d[26]||(d[26]=s("label",{class:"prop-name-label"},"图层",-1)),o.primary?(V(),J(lt,{key:0,"model-value":o.primary.layer??"",size:"small",placeholder:"—",class:"prop-layer-select","onUpdate:modelValue":d[1]||(d[1]=c=>Le(c))},{default:l(()=>[a(Re,{label:"(无)",value:""}),(V(!0),U(ce,null,we(o.layers,c=>(V(),J(Re,{key:c,label:c,value:c},null,8,["label","value"]))),128))]),_:1},8,["model-value"])):Z("",!0)])]),X.value.length>0?(V(),U("section",tl,[s("header",al,[d[28]||(d[28]=s("span",{class:"prop-card-title"},"位置 / 几何",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":k.value}]),title:k.value?"已同步到画布":"改动会立即同步到 SimpleLite 画布"},[d[27]||(d[27]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",nl,j(k.value?"已同步":"同步到画布"),1)],10,ll),s("span",ol,j(X.value.length)+" 项",1)]),s("div",sl,[(V(!0),U(ce,null,we(X.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item"},[s("label",il,[y(j(N(c.key))+" ",1),ie(c.key)?(V(),U("span",rl,j(ie(c.key)),1)):Z("",!0)]),ae(c.key)?(V(),J(be,{key:0,"model-value":me(c.value),controls:!1,step:Se(c.key),size:"small",class:"prop-field-num",onChange:K=>ve(c.key,K==null?"":String(K))},null,8,["model-value","step","onChange"])):(V(),J(ne,{key:1,"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]))]))),128))])])):Z("",!0),se.value.length>0?(V(),U("section",ul,[s("header",dl,[d[29]||(d[29]=s("span",{class:"prop-card-title"},"样式 / 外观",-1)),s("span",cl,j(se.value.length)+" 项",1)]),s("div",pl,[(V(!0),U(ce,null,we(se.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item"},[s("label",ml,j(N(c.key)),1),re(c.key,c.value)?(V(),J(ue,{key:0,"model-value":c.value||"#ffffff","show-alpha":"",size:"small",onChange:K=>ve(c.key,K??"")},null,8,["model-value","onChange"])):L(c.key,c.value)?(V(),J(je,{key:1,"model-value":xe(c.value),size:"small",onChange:K=>ve(c.key,K?"true":"false")},null,8,["model-value","onChange"])):(V(),J(ne,{key:2,"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]))]))),128))])])):Z("",!0),s("section",fl,[s("header",vl,[d[30]||(d[30]=s("span",{class:"prop-card-title"},"其它字段 / 自定义",-1)),s("span",yl,j(P.value.length)+" 项",1)]),P.value.length>0?(V(),U("div",bl,[(V(!0),U(ce,null,we(P.value,c=>(V(),U("div",{key:c.key,class:"prop-grid-item prop-grid-item--wide"},[s("label",{class:"prop-field-label",title:c.key},j(c.key),9,gl),s("div",wl,[a(ne,{"model-value":c.value,size:"small",spellcheck:"false",onChange:K=>ve(c.key,K)},null,8,["model-value","onChange"]),a(De,{content:"删除该字段",placement:"top"},{default:l(()=>[s("button",{class:"prop-field-icon-btn",onClick:K=>ve(c.key,"")},"×",8,hl)]),_:2},1024)])]))),128))])):(V(),U("div",kl,"无其它字段")),s("button",{class:"prop-add-field-btn",onClick:Me},"+ 添加字段")]),o.status.length>0?(V(),U("section",_l,[s("header",Sl,[d[31]||(d[31]=s("span",{class:"prop-card-title"},"运行状态",-1)),s("span",xl,j(o.status.length)+" 项",1)]),s("div",Vl,[(V(!0),U(ce,null,we(o.status,c=>(V(),U("div",{key:c.key,class:"prop-status-item"},[s("span",$l,j(c.key),1),s("span",{class:"prop-status-value",title:c.value},j(c.value),9,Cl)]))),128))])])):Z("",!0),o.methods.length>0?(V(),U("section",Al,[s("header",Nl,[d[32]||(d[32]=s("span",{class:"prop-card-title"},"操作",-1)),s("span",jl,j(o.methods.length)+" 项",1)]),s("div",Fl,[(V(!0),U(ce,null,we(o.methods,c=>(V(),J(De,{key:c.methodName,content:c.description||c.label||c.methodName,placement:"top","show-after":220},{default:l(()=>[s("button",{class:"prop-action-btn",disabled:b.value===c.methodName,onClick:K=>We(c.methodName)},[b.value===c.methodName?(V(),U("span",Tl,"⟳")):Z("",!0),d[33]||(d[33]=s("span",{class:"prop-action-icon"},"▶",-1)),s("span",El,j(c.label||c.methodName),1)],8,Pl)]),_:2},1032,["content"]))),128))])])):Z("",!0)]))]),_:1}),a(Oe,{label:"类型默认",name:"defaults"},{default:l(()=>[s("div",zl,[a(Ge,{type:"info",closable:!1,class:"defaults-alert"},{default:l(()=>[...d[34]||(d[34]=[y(" 视口样式与 SimpleLite「视口样式」对话框同步,修改后即时重绘画布;下方「新建默认」仅影响下次创建对象。 ",-1)])]),_:1}),o.selectionKind?o.selectionKind==="site"&&m.value?(V(),U(ce,{key:1},[s("section",Bl,[s("header",Ul,[d[38]||(d[38]=s("span",{class:"prop-card-title"},"站点视口样式",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":x.value}])},[d[37]||(d[37]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",Ll,j(o.viewportSyncing?"同步中…":x.value?"已同步":"实时同步"),1)],2)]),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"整体大小倍率"},{default:l(()=>[a(be,{"model-value":m.value.drawScale,min:.25,max:12,step:.1,controls:!0,"onUpdate:modelValue":d[2]||(d[2]=c=>F({drawScale:c??m.value.drawScale}))},null,8,["model-value"])]),_:1}),a(G,{label:"未选中圆点半径"},{default:l(()=>[a(be,{"model-value":m.value.dotRadiusNormal,min:1,max:24,step:.5,"onUpdate:modelValue":d[3]||(d[3]=c=>F({dotRadiusNormal:c??m.value.dotRadiusNormal}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中圆点半径"},{default:l(()=>[a(be,{"model-value":m.value.dotRadiusSelected,min:1,max:32,step:.5,"onUpdate:modelValue":d[4]||(d[4]=c=>F({dotRadiusSelected:c??m.value.dotRadiusSelected}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中环半径 (m)"},{default:l(()=>[a(be,{"model-value":m.value.selectionRingM,min:.02,max:.8,step:.01,"onUpdate:modelValue":d[5]||(d[5]=c=>F({selectionRingM:c??m.value.selectionRingM}))},null,8,["model-value"])]),_:1}),a(G,{label:"站点颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.colorNormalArgb),"onUpdate:modelValue":d[6]||(d[6]=c=>F({colorNormalArgb:O(ze)(c??"#ffffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"站点颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.colorSelectedArgb),"onUpdate:modelValue":d[7]||(d[7]=c=>F({colorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1}),a(G,{label:"标签颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.labelColorNormalArgb),"onUpdate:modelValue":d[8]||(d[8]=c=>F({labelColorNormalArgb:O(ze)(c??"#ffffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"标签颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(m.value.labelColorSelectedArgb),"onUpdate:modelValue":d[9]||(d[9]=c=>F({labelColorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1})]),_:1})]),s("section",Ml,[d[40]||(d[40]=s("header",{class:"prop-card-header"},[s("span",{class:"prop-card-title"},"新建站点默认")],-1)),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"默认图层"},{default:l(()=>[a(ne,{modelValue:o.defaults.site.layer,"onUpdate:modelValue":d[10]||(d[10]=c=>o.defaults.site.layer=c)},null,8,["modelValue"])]),_:1}),a(G,{label:"名字前缀"},{default:l(()=>[a(ne,{modelValue:o.defaults.site.namePrefix,"onUpdate:modelValue":d[11]||(d[11]=c=>o.defaults.site.namePrefix=c)},null,8,["modelValue"])]),_:1}),a(Fe,{size:"small",type:"primary",plain:"",onClick:ye},{default:l(()=>[...d[39]||(d[39]=[y("保存新建默认",-1)])]),_:1})]),_:1})])],64)):o.selectionKind==="track"&&n.value?(V(),U(ce,{key:2},[s("section",Dl,[s("header",Rl,[d[42]||(d[42]=s("span",{class:"prop-card-title"},"路径视口样式",-1)),s("span",{class:Be(["prop-card-flag",{"is-synced":x.value}])},[d[41]||(d[41]=s("span",{class:"prop-card-flag-dot"},null,-1)),s("span",Ol,j(o.viewportSyncing?"同步中…":x.value?"已同步":"实时同步"),1)],2)]),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"线宽倍率"},{default:l(()=>[a(be,{"model-value":n.value.drawScale,min:.25,max:12,step:.1,"onUpdate:modelValue":d[12]||(d[12]=c=>f({drawScale:c??n.value.drawScale}))},null,8,["model-value"])]),_:1}),a(G,{label:"未选中线宽"},{default:l(()=>[a(be,{"model-value":n.value.widthNormal,min:.4,max:8,step:.1,"onUpdate:modelValue":d[13]||(d[13]=c=>f({widthNormal:c??n.value.widthNormal}))},null,8,["model-value"])]),_:1}),a(G,{label:"选中线宽"},{default:l(()=>[a(be,{"model-value":n.value.widthSelected,min:.4,max:12,step:.1,"onUpdate:modelValue":d[14]||(d[14]=c=>f({widthSelected:c??n.value.widthSelected}))},null,8,["model-value"])]),_:1}),a(G,{label:"显示方向箭头"},{default:l(()=>[a(je,{"model-value":n.value.showDirectionArrows,"onUpdate:modelValue":d[15]||(d[15]=c=>f({showDirectionArrows:!!c}))},null,8,["model-value"])]),_:1}),a(G,{label:"路径颜色(未选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(n.value.colorNormalArgb),"onUpdate:modelValue":d[16]||(d[16]=c=>f({colorNormalArgb:O(ze)(c??"#00ffff")}))},null,8,["model-value"])]),_:1}),a(G,{label:"路径颜色(选中)"},{default:l(()=>[a(ue,{"model-value":O(Ie)(n.value.colorSelectedArgb),"onUpdate:modelValue":d[17]||(d[17]=c=>f({colorSelectedArgb:O(ze)(c??"#ff0000")}))},null,8,["model-value"])]),_:1})]),_:1})]),s("section",Yl,[d[44]||(d[44]=s("header",{class:"prop-card-header"},[s("span",{class:"prop-card-title"},"新建路径默认")],-1)),a($e,{"label-width":"132px",size:"small",class:"defaults-form"},{default:l(()=>[a(G,{label:"默认图层"},{default:l(()=>[a(ne,{modelValue:o.defaults.track.layer,"onUpdate:modelValue":d[18]||(d[18]=c=>o.defaults.track.layer=c)},null,8,["modelValue"])]),_:1}),a(Fe,{size:"small",type:"primary",plain:"",onClick:ye},{default:l(()=>[...d[43]||(d[43]=[y("保存新建默认",-1)])]),_:1})]),_:1})])],64)):o.viewportStyleLoading?(V(),U("div",Kl,[a(Ve,{class:"is-loading"},{default:l(()=>[a(O(_t))]),_:1}),d[45]||(d[45]=s("span",null,"加载视口样式…",-1))])):Z("",!0):(V(),U("div",Il,[a(Ve,{class:"empty-icon"},{default:l(()=>[a(O(kt))]),_:1}),d[35]||(d[35]=s("span",{class:"empty-title"},"请选中站点或路径",-1)),d[36]||(d[36]=s("span",{class:"empty-desc"},"在画布上选中一个站点或路径后,可在此调整对应视口样式。",-1))]))])]),_:1}),a(Oe,{label:"图层",name:"layers"},{default:l(()=>[a(Ye,{data:o.layerRows,size:"small",class:"layer-table"},{default:l(()=>[a(Pe,{prop:"name",label:"图层",width:"120"}),a(Pe,{label:"可见",width:"60"},{default:l(({row:c})=>[a(je,{modelValue:c.visible,"onUpdate:modelValue":K=>c.visible=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),a(Pe,{label:"可选",width:"60"},{default:l(({row:c})=>[a(je,{modelValue:c.selectable,"onUpdate:modelValue":K=>c.selectable=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),a(Pe,{label:"颜色"},{default:l(({row:c})=>[a(ue,{modelValue:c.color,"onUpdate:modelValue":K=>c.color=K,onChange:K=>_e(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1})]),_:1},8,["data"]),a(ne,{modelValue:B.value,"onUpdate:modelValue":d[19]||(d[19]=c=>B.value=c),size:"small",placeholder:"新图层名",class:"new-layer"},{append:l(()=>[a(Fe,{onClick:et},{default:l(()=>[...d[46]||(d[46]=[y("添加",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["modelValue"])])}}}),Xl=Ne(Hl,[["__scopeId","data-v-a135c9ef"]]),Wl={class:"edit-status-bar"},Gl={class:"seg"},Jl={class:"seg"},Zl={class:"seg"},ql={class:"seg"},Ql={class:"seg"},en={key:0,class:"seg ok"},tn={key:1,class:"seg warn"},an=Ae({__name:"EditStatusBar",props:{selectedCount:{},mouseX:{},mouseY:{},toolLabel:{},snapOn:{type:Boolean},undoSize:{},redoSize:{},connected:{type:Boolean}},setup(o){function A(g){return Number.isFinite(g)?g.toFixed(0):"--"}return(g,p)=>(V(),U("div",Wl,[s("span",Gl,[p[0]||(p[0]=y(" 选中 ",-1)),s("b",null,j(o.selectedCount),1),p[1]||(p[1]=y(" 个 ",-1))]),s("span",Jl," 鼠标 ("+j(A(o.mouseX))+", "+j(A(o.mouseY))+") mm ",1),s("span",Zl,[p[2]||(p[2]=y(" 当前工具:",-1)),s("b",null,j(o.toolLabel),1)]),s("span",ql,[p[3]||(p[3]=y(" 吸附:",-1)),s("b",{class:Be({on:o.snapOn,off:!o.snapOn})},j(o.snapOn?"开":"关"),3)]),p[4]||(p[4]=s("span",{class:"spacer"},null,-1)),s("span",Ql,"历史 "+j(o.undoSize)+" / "+j(o.redoSize),1),o.connected?(V(),U("span",en,"● 实时通道在线")):(V(),U("span",tn,"● 实时通道断开"))]))}}),ln=Ne(an,[["__scopeId","data-v-6254b10f"]]),nn={class:"upload-hint"},on={key:0,class:"ai-text"},sn={class:"ai-stat"},rn=Ae({__name:"AiGenerateDialog",props:{modelValue:{type:Boolean},configured:{type:Boolean},defaultBounds:{},defaultLayer:{}},emits:["update:modelValue","generated"],setup(o,{emit:A}){const g=o,p=A,h=ga(),x=$(!1),r=$(null),m=$(["r"]),n=Ze({prompt:"",mode:"sites+tracks",referenceImageBase64:void 0,layer:g.defaultLayer??"ai-generated",constraints:""}),_=$(g.defaultBounds??[-1e4,-1e4,1e4,1e4]);he(()=>g.defaultBounds,T=>{T&&(_.value=T)}),he(()=>g.defaultLayer,T=>{T&&(n.layer=T)});function F(){p("update:modelValue",!1)}function f(){p("update:modelValue",!1),h.push("/admin/config/system")}async function b(T){if(!T.raw)return;const k=new FileReader;k.onload=()=>{const W=String(k.result||""),te=W.includes(",")?W.split(",",2)[1]:W;n.referenceImageBase64=te},k.readAsDataURL(T.raw)}async function B(){try{x.value=!0,n.bounds=_.value;const T=await R.aiMapGenerate(n);r.value=T,C.success(`AI 已生成 ${T.created?.length??0} 个对象`),p("generated",T)}catch(T){C.error(`AI 生图失败:${T.message}`)}finally{x.value=!1}}return(T,k)=>{const W=ya,te=ct,oe=dt,M=Ct,pe=Vt,ge=ca,le=fa,D=ma,X=At,se=$t,P=Qe,N=ut,ie=qe,me=ba,Se=va,ae=Xe,re=pt;return V(),J(re,{"model-value":o.modelValue,title:"AI 生图",width:"640px","onUpdate:modelValue":k[9]||(k[9]=L=>p("update:modelValue",L)),onClose:F},{footer:l(()=>[a(ae,{onClick:F},{default:l(()=>[...k[20]||(k[20]=[y("关闭",-1)])]),_:1}),a(ae,{type:"primary",loading:x.value,disabled:!n.prompt.trim()||!o.configured,onClick:B},{default:l(()=>[...k[21]||(k[21]=[y(" 生成并落地 ",-1)])]),_:1},8,["loading","disabled"])]),default:l(()=>[o.configured?Z("",!0):(V(),J(te,{key:0,type:"warning",closable:!1,class:"cfg-alert"},{default:l(()=>[k[11]||(k[11]=y(" 尚未配置 AI 服务(apiKey / endpoint)。请先到 ",-1)),a(W,{type:"primary",onClick:f},{default:l(()=>[...k[10]||(k[10]=[y("系统级配置 → AI 服务",-1)])]),_:1}),k[12]||(k[12]=y(" 完成配置。 ",-1))]),_:1})),a(se,{"label-width":"100px",size:"default"},{default:l(()=>[a(M,{label:"提示词",required:""},{default:l(()=>[a(oe,{modelValue:n.prompt,"onUpdate:modelValue":k[0]||(k[0]=L=>n.prompt=L),type:"textarea",rows:4,placeholder:"一条 U 型生产线,含 5 个工站,间距 2m,方向单向通行..."},null,8,["modelValue"])]),_:1}),a(M,{label:"参考图片"},{default:l(()=>[a(ge,{drag:"","auto-upload":!1,"show-file-list":!1,accept:"image/*",onChange:b},{default:l(()=>[s("div",nn,[a(pe,null,{default:l(()=>[a(O(pa))]),_:1}),s("span",null,j(n.referenceImageBase64?"已选择图片 (点击替换)":"拖入或点击上传参考图(可选,多模态)"),1)])]),_:1})]),_:1}),a(M,{label:"生成模式"},{default:l(()=>[a(D,{modelValue:n.mode,"onUpdate:modelValue":k[1]||(k[1]=L=>n.mode=L)},{default:l(()=>[a(le,{value:"sites"},{default:l(()=>[...k[13]||(k[13]=[y("仅站点",-1)])]),_:1}),a(le,{value:"tracks"},{default:l(()=>[...k[14]||(k[14]=[y("仅路径",-1)])]),_:1}),a(le,{value:"sites+tracks"},{default:l(()=>[...k[15]||(k[15]=[y("站点+路径",-1)])]),_:1}),a(le,{value:"full"},{default:l(()=>[...k[16]||(k[16]=[y("完整地图",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(M,{label:"范围 (mm)"},{default:l(()=>[a(X,{modelValue:_.value[0],"onUpdate:modelValue":k[2]||(k[2]=L=>_.value[0]=L),placeholder:"x1",step:500},null,8,["modelValue"]),a(X,{modelValue:_.value[1],"onUpdate:modelValue":k[3]||(k[3]=L=>_.value[1]=L),placeholder:"y1",step:500,class:"ml"},null,8,["modelValue"]),a(X,{modelValue:_.value[2],"onUpdate:modelValue":k[4]||(k[4]=L=>_.value[2]=L),placeholder:"x2",step:500,class:"ml"},null,8,["modelValue"]),a(X,{modelValue:_.value[3],"onUpdate:modelValue":k[5]||(k[5]=L=>_.value[3]=L),placeholder:"y2",step:500,class:"ml"},null,8,["modelValue"])]),_:1}),a(M,{label:"图层"},{default:l(()=>[a(oe,{modelValue:n.layer,"onUpdate:modelValue":k[6]||(k[6]=L=>n.layer=L),placeholder:"ai-generated(默认)"},null,8,["modelValue"])]),_:1}),a(M,{label:"附加约束"},{default:l(()=>[a(oe,{modelValue:n.constraints,"onUpdate:modelValue":k[7]||(k[7]=L=>n.constraints=L),placeholder:"例如:单向通行、最小转弯半径 1500mm"},null,8,["modelValue"])]),_:1})]),_:1}),r.value?(V(),J(Se,{key:1,modelValue:m.value,"onUpdate:modelValue":k[8]||(k[8]=L=>m.value=L),class:"result-panel"},{default:l(()=>[a(me,{title:"AI 返回 / 落地结果",name:"r"},{default:l(()=>[r.value.assistantText?(V(),U("div",on,j(r.value.assistantText),1)):Z("",!0),s("div",sn,[k[17]||(k[17]=y(" 落地对象 ",-1)),s("b",null,j(r.value.created?.length??0),1),k[18]||(k[18]=y(",工具调用次数 ",-1)),s("b",null,j(r.value.usedTools),1),k[19]||(k[19]=y("。 ",-1))]),a(ie,{data:r.value.created??[],size:"small","max-height":"220"},{default:l(()=>[a(P,{label:"工具",prop:"tool",width:"160"}),a(P,{label:"kind",prop:"kind",width:"80"}),a(P,{label:"id",prop:"id",width:"80"}),a(P,{label:"typeName",prop:"typeName"}),a(P,{label:"错误"},{default:l(({row:L})=>[L.error?(V(),J(N,{key:0,type:"danger",size:"small"},{default:l(()=>[y(j(L.error),1)]),_:2},1024)):Z("",!0)]),_:1})]),_:1},8,["data"])]),_:1})]),_:1},8,["modelValue"])):Z("",!0)]),_:1},8,["model-value"])}}}),un=Ne(rn,[["__scopeId","data-v-7b1912b1"]]),dn={class:"proj-browse"},cn={class:"proj-browse-toolbar"},pn=["disabled"],mn={class:"proj-browse-body"},fn={class:"proj-browse-side"},vn={key:0,class:"proj-side-section"},yn={class:"proj-side-section"},bn=["onDblclick","onClick"],gn=["title"],wn={key:0,class:"proj-side-empty"},hn={class:"proj-browse-main"},kn={class:"proj-file-name"},_n={class:"proj-mute"},Sn={class:"proj-mute"},xn={class:"proj-browse-footer"},Vn={class:"proj-footer-label"},$n={class:"proj-footer-bar"},Cn={class:"proj-footer-tip"},An={class:"proj-footer-actions"},Nn=Ae({__name:"ProjectBrowseDialog",props:{modelValue:{type:Boolean},mode:{},initialPath:{}},emits:["update:modelValue","confirm"],setup(o,{emit:A}){const g=o,p=A,h=$(""),x=$(null),r=$([]),m=$([]),n=$(!1),_=$(null),F=$(null),f=$(""),b=$(""),B=Q(()=>g.mode==="load"?"加载项目(服务端目录)":"保存项目(服务端目录)"),T=Q(()=>!!(f.value.trim()||F.value?.kind==="file"||g.mode==="save"&&h.value)),k=Q(()=>g.mode==="save"?f.value?`将保存到:${le()}`:`当前目录:${h.value}`:F.value?`已选:${F.value.fullPath}`:"请在右侧选中一个 JSON 文件,或输入绝对路径");async function W(){n.value=!0,_.value=null;try{const P=await R.projectBrowse(h.value||void 0);h.value=P.dir,x.value=P.parent,r.value=P.subdirs.map(N=>({kind:"dir",name:N.name,fullPath:N.fullPath})),m.value=P.jsons.map(N=>({kind:"file",name:N.name,fullPath:N.fullPath,sizeBytes:N.sizeBytes,modified:N.modified})),b.value||(b.value=P.dir),F.value=null}catch(P){_.value=P.message}finally{n.value=!1}}function te(){x.value&&(h.value=x.value,W())}function oe(){h.value="",W()}function M(P){h.value=P,W()}function pe(P){F.value=P,P?.kind==="file"&&(f.value=P.fullPath)}function ge(P){P.kind==="file"&&D()}function le(){const P=f.value.trim();return P?/^([A-Za-z]:[\\/]|\\\\|\/)/.test(P)?P:`${h.value.replace(/[\\/]+$/,"")}/${P.endsWith(".json")?P:P+".json"}`:`${h.value}/project.current.json`}function D(){if(g.mode==="save"){const N=le();if(!N){C.warning("请输入文件名或选中目标");return}p("confirm",N),p("update:modelValue",!1);return}const P=f.value.trim()||(F.value?.kind==="file"?F.value.fullPath:"");if(!P){C.warning("请先选中一个 .json 文件,或直接输入路径");return}p("confirm",P),p("update:modelValue",!1)}function X(){F.value=null,f.value="",h.value=g.initialPath??"",W()}function se(P){return P==null?"—":P<1024?`${P} B`:P<1024*1024?`${(P/1024).toFixed(1)} KB`:`${(P/1024/1024).toFixed(1)} MB`}return he(()=>g.modelValue,P=>{P&&X()}),(P,N)=>{const ie=dt,me=ct,Se=xt,ae=Qe,re=qe,L=Xe,xe=pt,Ue=ka;return V(),J(xe,{"model-value":o.modelValue,title:B.value,width:"780px","align-center":"","destroy-on-close":"",class:"proj-browse-dialog","onUpdate:modelValue":N[3]||(N[3]=Y=>p("update:modelValue",Y)),onOpen:X},{footer:l(()=>[s("div",$n,[s("span",Cn,j(k.value),1),s("span",An,[a(L,{onClick:N[2]||(N[2]=Y=>p("update:modelValue",!1))},{default:l(()=>[...N[15]||(N[15]=[y("取消",-1)])]),_:1}),a(L,{type:"primary",loading:n.value,disabled:!T.value,onClick:D},{default:l(()=>[y(j(o.mode==="load"?"加载此文件":"保存到此文件"),1)]),_:1},8,["loading","disabled"])])])]),default:l(()=>[s("div",dn,[s("div",cn,[s("button",{class:"proj-icon-btn",disabled:!x.value,title:"返回上级",onClick:te},[...N[4]||(N[4]=[s("span",{class:"proj-icon"},"←",-1)])],8,pn),s("button",{class:"proj-icon-btn",title:"刷新",onClick:W},[...N[5]||(N[5]=[s("span",{class:"proj-icon"},"⟳",-1)])]),s("button",{class:"proj-icon-btn",title:"SimpleLite 主目录",onClick:oe},[...N[6]||(N[6]=[s("span",{class:"proj-icon"},"⌂",-1)])]),a(ie,{modelValue:h.value,"onUpdate:modelValue":N[0]||(N[0]=Y=>h.value=Y),size:"small",spellcheck:"false",class:"proj-path-input",placeholder:"输入或粘贴目录路径,回车跳转",onKeyup:wa(W,["enter"])},{prefix:l(()=>[...N[7]||(N[7]=[s("span",{class:"proj-path-prefix"},"📁",-1)])]),_:1},8,["modelValue"])]),_.value?(V(),J(me,{key:0,type:"error",title:_.value,closable:!1,"show-icon":"",class:"proj-error"},null,8,["title"])):Z("",!0),s("div",mn,[s("div",fn,[N[12]||(N[12]=s("div",{class:"proj-side-title"},"服务端目录",-1)),a(Se,{class:"proj-side-scroll"},{default:l(()=>[s("button",{class:"proj-side-btn proj-side-cwd",onClick:oe},[...N[8]||(N[8]=[s("span",{class:"proj-side-icon"},"🏠",-1),s("span",{class:"proj-side-text"},"SimpleLite 主目录",-1)])]),x.value?(V(),U("div",vn,[s("button",{class:"proj-side-btn",onClick:te},[...N[9]||(N[9]=[s("span",{class:"proj-side-icon"},"↑",-1),s("span",{class:"proj-side-text"},"返回上级",-1)])])])):Z("",!0),s("div",yn,[N[11]||(N[11]=s("div",{class:"proj-side-section-title"},"子文件夹",-1)),(V(!0),U(ce,null,we(r.value,Y=>(V(),U("button",{key:Y.fullPath,class:Be(["proj-side-btn",{"proj-side-btn--active":!1}]),onDblclick:ke=>M(Y.fullPath),onClick:ke=>M(Y.fullPath)},[N[10]||(N[10]=s("span",{class:"proj-side-icon"},"📁",-1)),s("span",{class:"proj-side-text",title:Y.name},j(Y.name),9,gn)],40,bn))),128)),r.value.length===0?(V(),U("div",wn,"无子文件夹")):Z("",!0)])]),_:1})]),s("div",hn,[ha((V(),J(re,{data:m.value,size:"small",height:"380","highlight-current-row":"",class:"proj-browse-table","empty-text":"该目录下没有 JSON 项目文件",onCurrentChange:pe,onRowDblclick:ge},{default:l(()=>[a(ae,{width:"36"},{default:l(()=>[...N[13]||(N[13]=[s("span",{class:"proj-file-icon"},"📄",-1)])]),_:1}),a(ae,{prop:"name",label:"名称","min-width":"220"},{default:l(({row:Y})=>[s("span",kn,j(Y.name),1)]),_:1}),a(ae,{label:"大小",width:"100"},{default:l(({row:Y})=>[s("span",_n,j(se(Y.sizeBytes)),1)]),_:1}),a(ae,{prop:"modified",label:"修改时间",width:"160"},{default:l(({row:Y})=>[s("span",Sn,j(Y.modified),1)]),_:1})]),_:1},8,["data"])),[[Ue,n.value]])])]),s("div",xn,[s("span",Vn,j(o.mode==="load"?"选中文件":"保存为"),1),a(ie,{modelValue:f.value,"onUpdate:modelValue":N[1]||(N[1]=Y=>f.value=Y),size:"small",placeholder:o.mode==="load"?"在右侧选择 JSON 文件,或直接输入绝对路径":"输入文件名(不写绝对路径则保存到当前目录)",spellcheck:"false",class:"proj-manual-input"},null,8,["modelValue","placeholder"]),N[14]||(N[14]=s("span",{class:"proj-footer-type"},"JSON (*.json)",-1))])])]),_:1},8,["model-value","title"])}}}),jn=Ne(Nn,[["__scopeId","data-v-411e65f0"]]);function Fn(){const o=$("transform.move"),A=$({grid:!1,gridSizeMm:100,object:!0,endpoint:!0,midpoint:!1,toAngleDeg:void 0}),g=$(!0),p=$(!0),h=Q(()=>{const n=o.value;return n.startsWith("select.")?"select":n.startsWith("draw.")?"draw":n.startsWith("transform.")?"transform":n.startsWith("align.")?"align":n.startsWith("batch.")?"batch":n.startsWith("snap.")?"snap":"show"}),x=Q(()=>({"select.single":"单选","select.rect":"矩形框选","select.lasso":"圈选","select.byType.site":"按类型选 - 站点","select.byType.bezier":"按类型选 - 贝塞尔","select.byType.polyline":"按类型选 - 折线","select.byType.arc":"按类型选 - 弧","select.byType.decor":"按类型选 - 装饰物","select.byType.currentLayer":"按类型选 - 当前图层","select.invert":"反选","select.clear":"清空选中","draw.site":"添加站点","draw.sites.continuous":"连续添加站点","draw.track.polyline":"添加折线路径","draw.track.bezier":"添加贝塞尔路径","draw.track.arc":"添加弧形路径","draw.track.nurbs":"添加 NURBS 路径","draw.decor.line":"添加线段","draw.decor.rect":"添加矩形","draw.decor.circle":"添加圆","draw.decor.text":"添加文本","draw.image":"插入图片","draw.model":"插入 3D 模型","transform.move":"移动","transform.rotate":"旋转","transform.scale":"缩放","transform.duplicate":"复制副本","transform.copy":"复制","transform.paste":"粘贴","transform.delete":"删除","transform.copyFields":"复制字段","align.left":"左对齐","align.right":"右对齐","align.top":"上对齐","align.bottom":"下对齐","align.centerH":"水平居中","align.centerV":"垂直居中","align.center":"整体居中","align.distributeH":"水平等距","align.distributeV":"垂直等距","align.toFirst":"对齐到第一个","align.toLast":"对齐到最后一个","batch.linearH":"横向间隔生成","batch.linearV":"纵向间隔生成","batch.matrix":"矩阵生成","batch.alongPath":"沿路径采样生成","batch.circular":"环形阵列","snap.grid":"网格吸附","snap.object":"对象吸附","snap.endpoint":"端点吸附","snap.midpoint":"中点吸附","show.controlPoints":"显示控制点","show.controlHandles":"显示控制柄"})[o.value]??o.value);function r(n){o.value=n}function m(n){A.value={...A.value,[n]:!A.value[n]}}return{activeTool:o,snap:A,showControlPoints:g,showControlHandles:p,toolCategory:h,toolLabel:x,setTool:r,toggleSnap:m}}function Ce(o,A){return`${o}:${A}`}function Pn(){const o=$([]),A=$(null),g=Q(()=>o.value.map(b=>b.id)),p=Q(()=>o.value.length);function h(b,B){const T=Ce(b,B);return o.value.some(k=>Ce(k.kind,k.id)===T)}function x(b){h(b.kind,b.id)||(o.value=[...o.value,b],A.value=Ce(b.kind,b.id))}function r(b,B){const T=Ce(b,B);o.value=o.value.filter(k=>Ce(k.kind,k.id)!==T),A.value===T&&(A.value=null)}function m(b){h(b.kind,b.id)?r(b.kind,b.id):x(b)}function n(b){o.value=b,A.value=b.length>0?Ce(b[b.length-1].kind,b[b.length-1].id):null}function _(){o.value=[],A.value=null}function F(b){o.value=o.value.filter(B=>B.kind===b)}function f(b){o.value=[b],A.value=Ce(b.kind,b.id)}return{items:o,ids:g,count:p,lastClickedKey:A,has:h,add:x,remove:r,toggle:m,set:n,clear:_,filterByKind:F,selectSingle:f}}function Tn(o={}){const A=o.maxDepth??20,g=$([]),p=$([]),h=$(!1),x=Q(()=>g.value.length>0&&!h.value),r=Q(()=>p.value.length>0&&!h.value);async function m(b){if(!h.value){h.value=!0;try{await b.apply(),g.value=[...g.value,b].slice(-A),p.value=[],o.onChange?.()}finally{h.value=!1}}}async function n(){if(!x.value)return;const b=g.value[g.value.length-1];h.value=!0;try{await b.revert(),g.value=g.value.slice(0,-1),p.value=[...p.value,b].slice(-A),o.onChange?.()}finally{h.value=!1}}async function _(){if(!r.value)return;const b=p.value[p.value.length-1];h.value=!0;try{await b.apply(),p.value=p.value.slice(0,-1),g.value=[...g.value,b].slice(-A),o.onChange?.()}finally{h.value=!1}}function F(){g.value=[],p.value=[],o.onChange?.()}function f(b,B){return{label:b,apply:async()=>{for(const T of B)await T.apply()},revert:async()=>{for(let T=B.length-1;T>=0;T--)await B[T].revert()}}}return{undoStack:g,redoStack:p,busy:h,canUndo:x,canRedo:r,run:m,undo:n,redo:_,clear:F,composite:f}}function En(o={}){function A(g){const p=g?.data;if(!p||typeof p!="object"||typeof p.type!="string")return;const h=p.type,x=p.payload;if(h==="workspace.pick"&&o.onPick&&x&&typeof x=="object"&&"x"in x&&"y"in x){const r=x;o.onPick({x:Number(r.x),y:Number(r.y),siteId:typeof r.siteId=="number"?r.siteId:void 0})}else if(h==="workspace.select"&&o.onSelect&&Array.isArray(x))o.onSelect({names:x});else if(h==="workspace.mouse"&&o.onMouse&&x&&typeof x=="object"&&"x"in x&&"y"in x){const r=x;o.onMouse({x:Number(r.x),y:Number(r.y)})}}Ft(()=>window.addEventListener("message",A)),_a(()=>window.removeEventListener("message",A))}function zn(o,A){if(o.length<2)return[];const g=[],p=o.map(f=>f.x),h=o.map(f=>f.y),x=Math.min(...p),r=Math.max(...p),m=Math.min(...h),n=Math.max(...h),_=p.reduce((f,b)=>f+b,0)/p.length,F=h.reduce((f,b)=>f+b,0)/h.length;switch(A){case"left":for(const f of o)g.push(de(f,{x}));break;case"right":for(const f of o)g.push(de(f,{x:r}));break;case"top":for(const f of o)g.push(de(f,{y:n}));break;case"bottom":for(const f of o)g.push(de(f,{y:m}));break;case"centerH":for(const f of o)g.push(de(f,{x:_}));break;case"centerV":for(const f of o)g.push(de(f,{y:F}));break;case"center":for(const f of o)g.push(de(f,{x:_,y:F}));break;case"distributeH":{const f=[...o].sort((B,T)=>B.x-T.x),b=(f[f.length-1].x-f[0].x)/(f.length-1);f.forEach((B,T)=>{const k=f[0].x+b*T;Math.abs(k-B.x)>.5&&g.push(de(B,{x:k}))});break}case"distributeV":{const f=[...o].sort((B,T)=>B.y-T.y),b=(f[f.length-1].y-f[0].y)/(f.length-1);f.forEach((B,T)=>{const k=f[0].y+b*T;Math.abs(k-B.y)>.5&&g.push(de(B,{y:k}))});break}case"toFirst":{const f=o[0];for(const b of o.slice(1))g.push(de(b,{x:f.x,y:f.y}));break}case"toLast":{const f=o[o.length-1];for(const b of o.slice(0,-1))g.push(de(b,{x:f.x,y:f.y}));break}}return g}function de(o,A){return{action:"patch",kind:o.kind,id:o.id,data:A}}function In(o,A,g,p){return Pt(o,g,A,g,p)}function Bn(o,A,g,p){return Pt(o,A,o,g,p)}function Pt(o,A,g,p,h){const x=[],r=Math.max(2,Math.floor(h.count));for(let m=0;m{const e=n.items.value;if(e.length!==1)return null;const t=e[0].kind;return t==="site"||t==="track"?t:null}),ae=$(["g"]),re=$([{name:"g",visible:!0,selectable:!0,color:"#cccccc"}]),L=Ze({selectFilter:{sites:!0,tracks:!0,cars:!0,decor:!0},alignSnap:{sites:!0,cars:!0,tracks:!0},showViewport:{sceneLabels:!0,scenePrimitives:!0,cars:!0}});function xe(){try{localStorage.setItem("mapEditor.viewFilter",JSON.stringify(L))}catch{}}function Ue(){try{const e=localStorage.getItem("mapEditor.viewFilter");if(!e)return;const t=JSON.parse(e);t.selectFilter&&Object.assign(L.selectFilter,t.selectFilter),t.alignSnap&&Object.assign(L.alignSnap,t.alignSnap),t.showViewport&&Object.assign(L.showViewport,t.showViewport)}catch{}}function Y(){const e=L.selectFilter,t=n.items.value.filter(i=>i.kind==="site"?e.sites:i.kind==="track"?e.tracks:i.kind==="car"?e.cars:i.kind==="special"?e.decor:!0);t.length!==n.items.value.length&&n.set(t)}const ke=$(!1),fe=$({siteA:null}),Le=$(!1),ve=$(!1),Me=$("");function We(e){return e.map(t=>`${t.kind}:${t.id}`).sort().join(",")}const ye=$(!1),_e=["draw.site","draw.sites.continuous","draw.track.polyline","draw.track.bezier","draw.track.arc","draw.track.nurbs"];async function et(){if(!ye.value){for(ye.value=!0;ye.value;){let e=null;try{e=await R.pick()}catch{break}if(!ye.value)break;const t=m.activeTool.value;if(!_e.includes(t))break;if(t==="draw.site"){await Ye(e.x,e.y),C.success(`已添加站点 (${e.x.toFixed(0)}, ${e.y.toFixed(0)})`);break}else if(t==="draw.sites.continuous")await Ye(e.x,e.y);else if(t==="draw.track.polyline"||t==="draw.track.bezier"||t==="draw.track.arc"||t==="draw.track.nurbs"){const i=fe.value.siteA;if(await Fe(e.siteId),i!=null&&fe.value.siteA==null){const u=t==="draw.track.bezier"?"贝塞尔路径":t==="draw.track.arc"?"弧形路径":t==="draw.track.nurbs"?"NURBS 路径":"直线路径";C.success(`已添加${u}`);break}}else break}ye.value=!1,_e.includes(m.activeTool.value)&&m.setTool("transform.move")}}const tt=Q(()=>m.snap.value.grid||m.snap.value.object||m.snap.value.endpoint||m.snap.value.midpoint);async function v(e){switch(e){case"edit.undo":await _.undo();break;case"edit.redo":await _.redo();break;case"edit.delete":await Te();break;case"edit.selectAll":C.info("全选:请使用工具栏「按类型选」批量选中");break;case"edit.invert":C.info("反选功能后续实现");break;case"project.save":await bt(!1);break;case"project.open":await Xt();break;case"project.saveAs":await bt(!0);break;case"project.close":C.info("关闭项目:使用 SimpleLite 主菜单");break;case"ai.open":await yt();break;case"file.upload.image":Je("image");break;case"file.upload.model":Je("model");break;case"view.fitAll":C.info("请在 3D 视口右键菜单使用「适配全部」");break;case"view.fitSelection":C.info("请在 3D 视口右键菜单使用「适配选中」");break;case"snap.toGrid":m.toggleSnap("grid");break;case"snap.toObject":m.toggleSnap("object");break;case"layer.new":await ue();break;case"layer.toggleVisibility":ke.value=!0;break;case"view.select.sites":d("selectFilter","sites");break;case"view.select.tracks":d("selectFilter","tracks");break;case"view.select.cars":d("selectFilter","cars");break;case"view.select.decor":d("selectFilter","decor");break;case"view.snap.sites":d("alignSnap","sites");break;case"view.snap.cars":d("alignSnap","cars");break;case"view.snap.tracks":d("alignSnap","tracks");break;case"view.show.sceneLabels":d("showViewport","sceneLabels");break;case"view.show.scenePrimitives":d("showViewport","scenePrimitives");break;case"view.show.cars":d("showViewport","cars");break;default:C.info(`暂未实现的命令:${e}`)}}async function d(e,t){const i=L[e],u=t,w=i[u];i[u]=!i[u],xe(),e==="selectFilter"&&Y();const S={};S[e]={[u]:i[u]};try{await R.setViewFilter(S)}catch(E){console.warn("[MapEditor] 写后端 viewFilter 失败:",E),i[u]=w,xe(),e==="selectFilter"&&Y(),C({message:"过滤设置写入后端失败,已回滚本地状态;请检查 SimpleLite 是否连通后重试。",type:"warning",duration:5e3,showClose:!0})}}function Ve(e){return e==="bezier"?"贝塞尔路径":e==="nurbs"?"NURBS 路径":e==="arc"?"弧形路径":"直线路径"}async function at(e,t){const i=await ne(e),u=await ne(t);if(!i||!u)return C.warning(`无法拉到 site #${e} / #${t} 的 x,y,将不带 typeInfo 创建 track(圆心需手动设置)`),null;const S=Math.hypot(i.x-u.x,i.y-u.y)/2;let E;try{const I=await H.prompt(`请输入半径 (mm),必须 ≥ ${S.toFixed(1)}(等于即半圆)`,"添加弧形路径",{inputValue:String(Math.ceil(S))});E=Number(I.value)}catch{return"cancelled"}return!Number.isFinite(E)||E0?-S/E:0,ta=E>0?w/E:0,ht=u==="left"?1:-1,st=(e.x+t.x)/2+ht*ee*ea,it=(e.y+t.y)/2+ht*ee*ta,aa=Math.atan2(e.y-it,e.x-st)*180/Math.PI,la=Math.atan2(t.y-it,t.x-st)*180/Math.PI;return["1",st.toFixed(3),it.toFixed(3),i.toFixed(3),aa.toFixed(3),la.toFixed(3)].join(",")}function be(e){e&&(D.site.layer=e,D.track.layer=e,C.success(`默认图层已切到 "${e}"`))}async function ue(){try{const t=((await H.prompt("请输入新图层名(同名会被忽略)","新建图层",{inputValue:""})).value??"").trim();if(!t)return;if(ae.value.includes(t)){D.site.layer=t,D.track.layer=t,C.info(`图层 "${t}" 已存在,已切到该层`);return}vt(t),D.site.layer=t,D.track.layer=t,C.success(`已创建图层 "${t}",下次创建对象会落到该层`)}catch{}}async function je(e){if(m.setTool(e),fe.value.siteA=null,ye.value=!1,e==="select.clear"){n.clear(),await q.clearSelection().catch(()=>{});return}if(_e.includes(e)&&et(),e.startsWith("align.")){await K(e.replace("align.",""));return}if(e.startsWith("batch.")){await Tt(e);return}if(e==="transform.delete"){await Te();return}if(e.startsWith("select.byType.")){const t=e.replace("select.byType.","");Oe(t);return}if(e==="show.controlPoints"&&(m.showControlPoints.value=!m.showControlPoints.value),e==="show.controlHandles"&&(m.showControlHandles.value=!m.showControlHandles.value),e==="draw.image"&&Je("image"),e==="draw.model"&&Je("model"),e==="transform.copyFields"){await zt();return}}function Oe(e){e==="site"?n.filterByKind("site"):e==="polyline"||e==="bezier"||e==="arc"?n.items.value=n.items.value.filter(t=>{if(t.kind!=="track")return!1;const i=t.typeName.toLowerCase();return e==="polyline"?i==="uitrack":e==="bezier"?i.includes("bezier"):e==="arc"?i.includes("arc"):!1}):e==="decor"?n.filterByKind("special"):e==="currentLayer"&&M.value?.layer&&(n.items.value=n.items.value.filter(t=>t.layer===M.value.layer))}async function Ge(e){F.x=e.x,F.y=e.y;const t=m.activeTool.value;if(!(ye.value&&_e.includes(t))&&!Le.value){if(t==="draw.site"||t==="draw.sites.continuous"){await Ye(e.x,e.y);return}if(t==="draw.track.polyline"||t==="draw.track.bezier"||t==="draw.track.arc"||t==="draw.track.nurbs"){try{const i=await R.pick();await Fe(i.siteId)}catch{}return}}}function G(e){n.set($e(e))}function $e(e){const t=[],i=L.selectFilter;for(const u of e){const w=/^UI([A-Za-z]+)-(\d+)$/.exec(u)??/^([A-Za-z]+)-(\d+)$/.exec(u);if(!w)continue;const S=w[1],E=Number(w[2]),I=S.toLowerCase();let z;I==="site"?z="site":I==="car"||I==="vehicle"?z="car":I.includes("track")?z="track":z="special",!(z==="site"&&!i.sites)&&(z==="track"&&!i.tracks||z==="car"&&!i.cars||z==="special"&&!i.decor||t.push({kind:z,id:E,name:u,typeName:u.startsWith("UI")?`UI${S}`:S}))}return t}async function Fe(e){if(e<=0){C.warning("请先拾取一个站点");return}if(fe.value.siteA==null){fe.value.siteA=e,C.success(`已选起点站 #${e},请再拾取终点站`);return}const t=fe.value.siteA,i=e;if(fe.value.siteA=null,t===i){C.warning("起止站点不能相同");return}const u=m.activeTool.value==="draw.track.bezier"?"bezier":m.activeTool.value==="draw.track.arc"?"arc":m.activeTool.value==="draw.track.nurbs"?"nurbs":"track";let w,S="";if(u==="bezier"||u==="nurbs"){const I=await Pe(t,i,u);if(I==="cancelled")return;I!=null&&(w=I.typeInfo,S=`(控制点 ${I.midCount})`)}else if(u==="arc"){const I=await at(t,i);if(I==="cancelled")return;I!=null&&(w=I.typeInfo,S=`(半径 ${I.radius.toFixed(0)})`)}let E=-1;await _.run({label:`新建${Ve(u)} (${t}→${i})${S}`,apply:async()=>{const I={siteA:t,siteB:i,layer:D.track.layer};w&&(I.typeInfo=w),E=(await R.createTrack(u,I)).id},revert:async()=>{E>0&&await R.deleteObject("track",E)}}),De(u)}async function Pe(e,t,i){const u=await ne(e),w=await ne(t);if(!u||!w)return C.warning(`无法拉到 site #${e} / #${t} 的 x,y,将不带 typeInfo 创建 track(控制点会用兜底直线)`),null;const S=Ve(i);let E;try{const z=await H.prompt("请输入中间控制点个数(不含起止站点;默认 2,输入 0 则不带控制点直接连接两站点)",`创建${S}`,{inputValue:"2",inputPattern:/^\d+$/,inputErrorMessage:"请输入非负整数"});E=Math.max(0,Math.floor(Number(z.value)))}catch{return"cancelled"}if(E===0)return{typeInfo:Re([u,w],i==="bezier"?2:3),midCount:0};C.info(`请在画布上依次点选 ${E} 个中间控制点(任意位置;右键取消创建)`),Le.value=!0;const I=[];try{for(let z=0;z{i=(await R.createSite({x:e,y:t,layer:D.site.layer,name:`${D.site.namePrefix}-${Date.now()%1e5}`})).id},revert:async()=>{i>0&&await R.deleteObject("site",i)}})}async function Te(){const e=[...n.items.value];if(e.length===0)return;const t=[];for(const i of e)try{const u=await q.getBundle(i.kind,i.id);t.push({kind:i.kind,typeName:u.typeName,data:{...u.fields??{}}})}catch{}await _.run({label:`删除 ${e.length} 个对象`,apply:async()=>{const i=e.map(u=>({action:"delete",kind:u.kind,id:u.id}));await R.batch(i),n.clear()},revert:async()=>{const i=t.map(u=>({action:"create",kind:c(u.kind,u.typeName),data:u.data}));i.length&&(await R.batch(i),C.success(`已恢复 ${i.length} 个对象(注意:id 已重排)`))}})}function c(e,t){const i=(t??"").toLowerCase();if(e==="track")return i.includes("bezier")?"bezier":i.includes("arc")?"arc":i.includes("nurbs")?"nurbs":"track";if(e==="special"){if(i.includes("image"))return"image";if(i.includes("text"))return"text";if(i.includes("model"))return"model"}return e}async function K(e){const t=[];for(const u of n.items.value)if(u.kind!=="track")try{const w=await q.getBundle(u.kind,u.id),S=Number(w.fields?.x??0),E=Number(w.fields?.y??0);t.push({kind:u.kind,id:u.id,x:S,y:E})}catch{}if(t.length<2){C.warning("对齐需要选中至少 2 个对象");return}const i=zn(t,e);if(i.length===0){C.info("对齐无变化");return}await _.run({label:`对齐 (${e})`,apply:async()=>{await R.batch(i)},revert:async()=>{const u=t.map(w=>({action:"patch",kind:w.kind,id:w.id,data:{x:w.x,y:w.y}}));await R.batch(u)}})}async function Tt(e){if(e==="batch.linearH"||e==="batch.linearV"){const t=e==="batch.linearH"?"横向":"纵向";try{const{value:i}=await H.prompt(`输入 ${t}站点数量`,"批量生成",{inputValue:"5",inputType:"number"}),u=Math.max(2,Math.floor(Number(i))),w=await H.prompt("起点 X","批量生成",{inputValue:"0"}),S=await H.prompt("起点 Y","批量生成",{inputValue:"0"}),E=await H.prompt("终点 X","批量生成",{inputValue:"5000"}),I=await H.prompt("终点 Y","批量生成",{inputValue:"0"}),z=e==="batch.linearH"?In(Number(w.value),Number(E.value),Number(S.value),{count:u,layer:D.site.layer}):Bn(Number(w.value),Number(S.value),Number(I.value),{count:u,layer:D.site.layer});await nt(`${t}间隔生成 ${u}`,z)}catch{}return}if(e==="batch.matrix"){try{const t=Number((await H.prompt("行数","矩阵生成",{inputValue:"3"})).value),i=Number((await H.prompt("列数","矩阵生成",{inputValue:"3"})).value),u=Number((await H.prompt("x1","矩阵生成",{inputValue:"0"})).value),w=Number((await H.prompt("y1","矩阵生成",{inputValue:"0"})).value),S=Number((await H.prompt("x2","矩阵生成",{inputValue:"5000"})).value),E=Number((await H.prompt("y2","矩阵生成",{inputValue:"5000"})).value),I=Un(u,w,S,E,{rows:t,cols:i,layer:D.site.layer});await nt(`矩阵生成 ${t}×${i}`,I)}catch{}return}if(e==="batch.circular"){try{const t=Number((await H.prompt("圆心 X","环形阵列",{inputValue:"0"})).value),i=Number((await H.prompt("圆心 Y","环形阵列",{inputValue:"0"})).value),u=Number((await H.prompt("半径 (mm)","环形阵列",{inputValue:"2000"})).value),w=Number((await H.prompt("站点数量","环形阵列",{inputValue:"8"})).value),S=Ln(t,i,u,{count:w,layer:D.site.layer});await nt(`环形阵列 r=${u} n=${w}`,S)}catch{}return}if(e==="batch.alongPath"){await Et();return}}async function Et(){const e=n.items.value.filter(w=>w.kind==="track");if(e.length===0){C.warning("请先选中至少 1 条路径");return}let t=500,i=!1;try{const{value:w}=await H.prompt("输入采样间距 (mm)","沿路径采样",{inputValue:"500",inputType:"number"});t=Math.max(10,Math.floor(Number(w)));const{value:S}=await H.prompt("是否包含端点?输入 1 包含,0 不包含","沿路径采样",{inputValue:"0"});i=Number(S)===1}catch{return}const u=[];await _.run({label:`沿 ${e.length} 条路径间距 ${t}mm 采样`,apply:async()=>{for(const w of e){const S=await R.sampleSitesAlongTrack(w.id,{spacingMm:t,includeEndpoints:i,layer:D.site.layer});u.push(...S.ids)}C.success(`已采样生成 ${u.length} 个站点`)},revert:async()=>{if(!u.length)return;const w=u.map(S=>({action:"delete",kind:"site",id:S}));await R.batch(w)}})}async function zt(){if(n.items.value.length<2){C.warning("字段复制需要 ≥ 2 个选中对象(第 1 个为源,其余为目标)");return}const[e,...t]=n.items.value;try{const{value:i}=await H.prompt("输入要复制的字段名(逗号分隔),例如:x,y,layerName","字段复制",{inputValue:"x,y"}),u=i.split(",").map(S=>S.trim()).filter(Boolean);if(!u.length)return;const w=new Map;for(const S of t)try{const E=await q.getBundle(S.kind,S.id),I={};for(const z of u)I[z]=String(E.fields?.[z]??"");w.set(`${S.kind}:${S.id}`,I)}catch{}await _.run({label:`字段复制 ${u.join(",")} → ${t.length} 个`,apply:async()=>{const S=await R.copyFieldsTo(e.kind,e.id,u,t.map(E=>({kind:E.kind,id:E.id})));C.success(`已复制 ${S.copied} 项字段`)},revert:async()=>{const S=t.flatMap(E=>{const I=w.get(`${E.kind}:${E.id}`);return I?[{action:"patch",kind:E.kind,id:E.id,data:I}]:[]});S.length&&await R.batch(S)}})}catch{}}async function nt(e,t){if(t.length===0)return;let i=[];await _.run({label:e,apply:async()=>{i=(await R.batch(t)).results.filter(w=>w.ok&&w.action==="create"&&w.result?.id).map(w=>({kind:w.result.kind,id:w.result.id}))},revert:async()=>{const u=i.map(w=>({action:"delete",kind:w.kind,id:w.id}));u.length&&await R.batch(u)}}),C.success(`${e} 完成`)}async function Ke(){if(n.items.value.length===0){M.value=null,pe.value=[],ge.value=[],le.value=[];return}const e=n.items.value[0];It();try{const t=await q.getBundle(e.kind,e.id);M.value=t.summary,pe.value=Object.entries(t.fields).map(([i,u])=>({key:i,value:String(u)})),ge.value=t.methods,le.value=(t.status??[]).map(i=>({key:i.key,value:i.value}))}catch(t){C.error(`加载属性失败:${t.message}`)}finally{Bt()}}function It(){oe.value=!0}function Bt(){oe.value=!1}async function Ut(e){if(!M.value||n.items.value.length===0)return;const t=n.items.value[0],i=M.value.id,u=M.value.name??"";u!==e&&(await _.run({label:`重命名 ${u||"(无)"} → ${e}`,apply:async()=>{await q.setField(t.kind,i,"name",e)},revert:async()=>{try{await q.setField(t.kind,i,"name",u)}catch(w){C.warning(`回滚名称失败:${w.message}`)}}}),C.success("名称已更新"))}async function Lt(e){if(!M.value||n.items.value.length===0)return;const t=n.items.value[0],i=M.value.id,u=M.value.layer??"";u!==e&&(await _.run({label:`修改图层 ${u||"(无)"} → ${e}`,apply:async()=>{await q.setField(t.kind,i,"layerName",e)},revert:async()=>{try{await q.setField(t.kind,i,"layerName",u)}catch(w){C.warning(`回滚图层失败:${w.message}`)}}}),await Ke())}async function mt(e,t){if(!M.value)return;const i=n.items.value[0];let u;try{const w=await q.getBundle(i.kind,M.value.id);u=w.fields?.[e]!=null?String(w.fields[e]):void 0}catch{}await _.run({label:`修改 ${e}`,apply:async()=>{await q.setField(i.kind,M.value.id,e,t)},revert:async()=>{if(u!==void 0)try{await q.setField(i.kind,M.value.id,e,u)}catch(w){C.warning(`回滚 ${e} 失败:${w.message}`)}else C.warning(`回滚 ${e}:没拿到原值快照,仅本地撤销`)}}),await Ke()}async function Mt(){try{const e=(await H.prompt("字段名","新增字段",{inputPattern:/^[A-Za-z0-9_]+$/})).value,t=(await H.prompt("字段值","新增字段",{inputValue:""})).value;await mt(e,t)}catch{}}async function Dt(e){if(M.value)try{await q.execute(n.items.value[0].kind,M.value.id,e),C.success(`已执行 ${e}`),await Ke()}catch(t){C.error(`执行失败:${t.message}`)}}function Rt(){localStorage.setItem("mapEditor.defaults",JSON.stringify(D)),C.success("新建默认已保存(下次创建对象时生效)")}function ft(e){const t=e.site??e.Site,i=e.track??e.Track,u=(S,E,I)=>Number(S?.[E]??S?.[I]??0),w=(S,E,I)=>!!(S?.[E]??S?.[I]);return{site:{drawScale:u(t,"drawScale","DrawScale"),dotRadiusNormal:u(t,"dotRadiusNormal","DotRadiusNormal"),dotRadiusSelected:u(t,"dotRadiusSelected","DotRadiusSelected"),selectionRingM:u(t,"selectionRingM","SelectionRingM"),colorNormalArgb:u(t,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:u(t,"colorSelectedArgb","ColorSelectedArgb"),labelColorNormalArgb:u(t,"labelColorNormalArgb","LabelColorNormalArgb"),labelColorSelectedArgb:u(t,"labelColorSelectedArgb","LabelColorSelectedArgb")},track:{drawScale:u(i,"drawScale","DrawScale"),widthNormal:u(i,"widthNormal","WidthNormal"),widthSelected:u(i,"widthSelected","WidthSelected"),showDirectionArrows:w(i,"showDirectionArrows","ShowDirectionArrows"),colorNormalArgb:u(i,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:u(i,"colorSelectedArgb","ColorSelectedArgb")}}}async function ot(){se.value=!0;try{const e=await q.getViewportStyle();X.value=ft(e)}catch(e){console.warn("[MapEditor] 加载视口样式失败:",e)}finally{se.value=!1}}function Ot(e){e.site&&(me.site=e.site,X.value&&(X.value={...X.value,site:{...e.site}})),e.track&&(me.track=e.track,X.value&&(X.value={...X.value,track:{...e.track}})),N&&clearTimeout(N),N=setTimeout(()=>{const t={...me};me={},Yt(t)},350)}async function Yt(e){const t=++ie;P.value=!0;try{const i={};e.site&&(i.site=e.site),e.track&&(i.track=e.track);const u=await q.patchViewportStyle(i);if(t!==ie)return;X.value=ft(u)}catch(i){C.error(`视口样式更新失败:${i.message}`),await ot()}finally{t===ie&&(P.value=!1)}}function Kt(e){C.info("图层可见 / 可选切换暂时仅本地生效,后续接入反射 API")}function vt(e){re.value.find(t=>t.name===e)||(re.value=[...re.value,{name:e,visible:!0,selectable:!0,color:"#cccccc"}],ae.value=[...ae.value,e])}async function yt(){try{const e=await St.get();b.value=!!e.configured}catch{b.value=!1}f.value=!0}async function Ht(e){Ee();const t=(e.created??[]).filter(u=>typeof u=="object"&&u!=null&&typeof u.id=="number"&&!u.error);if(t.length===0)return;const i={label:`AI 生图:落地 ${t.length} 个对象`,apply:async()=>{},revert:async()=>{const u=t.map(w=>({action:"delete",kind:w.kind,id:w.id}));await R.batch(u),C.success(`已撤销 AI 生图(删除 ${u.length} 个对象)`)}};await _.run(i)}async function bt(e){const t=localStorage.getItem("mapEditor.lastProjectPath")??"";if(!e&&t){te.value=!0;try{const i=await R.projectSave(t);localStorage.setItem("mapEditor.lastProjectPath",i.path),C.success(`已保存:${i.path}`)}catch(i){C.error(`保存失败:${i.message}`)}finally{te.value=!1}return}k.value="save",W.value=t?t.replace(/[\\/][^\\/]*$/,""):"",T.value=!0}async function Xt(){const e=localStorage.getItem("mapEditor.lastProjectPath")??"";k.value="load",W.value=e?e.replace(/[\\/][^\\/]*$/,""):"",T.value=!0}async function Wt(e){if(e){if(k.value==="save"){te.value=!0;try{const t=await R.projectSave(e);localStorage.setItem("mapEditor.lastProjectPath",t.path),C.success(`已保存:${t.path}`)}catch(t){C.error(`保存失败:${t.message}`)}finally{te.value=!1}return}try{const t=await R.projectLoad(e);localStorage.setItem("mapEditor.lastProjectPath",t.path),C.success(`已加载:${t.sites} 站点 / ${t.tracks} 路径 / ${t.specials} 装饰 / ${t.missions} 任务`),n.clear(),M.value=null}catch(t){C.error(`加载失败:${t.message}`)}}}function Je(e){r.value=e,x.value=e==="image"?"image/*":".obj,.glb,.gltf,.fbx,.cyclemodel",h.value?.click()}async function Gt(e){const t=e.target,i=t.files?.[0];if(i)try{const u=await i.arrayBuffer(),w=Jt(u),S=await R.uploadAsset(i.name,w);C.success(`已上传:${S.fileName}`),r.value==="image"?await R.createImage({x:0,y:0,imagePath:S.savedPath,size:1e3}):await R.createModel({x:0,y:0,modelPath:S.savedPath,scale:1}),Ee()}catch(u){C.error(`上传失败:${u.message}`)}finally{t.value=""}}function Jt(e){let t="";const i=new Uint8Array(e);for(let u=0;u{F.x=e.x,F.y=e.y},onPick:e=>{Ge(e)},onSelect:e=>G(e.names)});const Zt=$a({onWorkspaceShortcut:e=>{He(e.action)},onAlarm:()=>{},onObjectCreated:()=>Ee(),onObjectDeleted:()=>Ee(),onObjectPatched:()=>Ee(),onObjectBatchChanged:()=>Ee(),onViewportStyleUpdated:()=>{ot()},onSelectionDetail:e=>{if(!Array.isArray(e.names))return;const t=$e(e.names),i=We(t);i!==Me.value&&(Me.value=i,n.set(t))}});function Ee(){Ke()}he(()=>Zt.connected.value,e=>ve.value=e,{immediate:!0}),he(()=>We(n.items.value),e=>{Ke(),Me.value=e,n.items.value.length===1&&q.setSelection(n.items.value[0].kind,n.items.value[0].id).catch(()=>{})});function qt(e){if(!(e instanceof HTMLElement))return!1;const t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||e.isContentEditable?!0:!!e.closest('.el-input, .el-textarea, .el-select, [contenteditable="true"]')}async function He(e){if(e==="undo"){if(!_.canUndo.value)return;await _.undo()}else if(e==="redo"){if(!_.canRedo.value)return;await _.redo()}else await Te()}function gt(e){if(qt(e.target))return;const t=e.ctrlKey||e.metaKey;t&&e.key.toLowerCase()==="z"&&!e.shiftKey?(e.preventDefault(),He("undo")):t&&(e.key.toLowerCase()==="y"||e.key.toLowerCase()==="z"&&e.shiftKey)?(e.preventDefault(),He("redo")):e.key==="Delete"&&(e.preventDefault(),He("delete"))}function wt(e){const t=e.detail?.action;(t==="undo"||t==="redo"||t==="delete")&&He(t)}async function Qt(){try{const e=await R.getViewFilter();Object.assign(L.selectFilter,e.selectFilter),Object.assign(L.alignSnap,e.alignSnap),Object.assign(L.showViewport,e.showViewport),xe()}catch(e){console.warn("[MapEditor] 拉后端 viewFilter 失败,沿用本地缓存:",e)}}return Ft(async()=>{document.addEventListener("keydown",gt,!0),window.addEventListener("workspace-shortcut",wt);try{const t=await St.get();b.value=!!t.configured}catch{}const e=localStorage.getItem("mapEditor.defaults");if(e)try{Object.assign(D,JSON.parse(e))}catch{}Ue(),await Qt(),await ot()}),xa(()=>{document.removeEventListener("keydown",gt,!0),window.removeEventListener("workspace-shortcut",wt)}),(e,t)=>{const i=Qe,u=jt,w=Nt,S=Xe,E=qe,I=pt;return V(),U("div",Mn,[a(Na,{"can-undo":O(_).canUndo.value,"can-redo":O(_).canRedo.value,saving:te.value,"view-filter":L,onCmd:v},null,8,["can-undo","can-redo","saving","view-filter"]),s("div",Dn,[a(Ma,{"active-tool":O(m).activeTool.value,onSelectTool:je,onOpenAi:yt},null,8,["active-tool"]),s("div",Rn,[a(Va,{ref_key:"workspaceRef",ref:p,host:O(g),scope:O(A).scope??"Platform",token:O(A).token??"","read-only":!1,"embed-ui":!1,"canvas-only":!0,"hide-toolbar":!0,onPick:Ge,onSelect:G},null,8,["host","scope","token"])]),a(Xl,{"selection-count":O(n).count.value,primary:M.value,fields:pe.value,status:le.value,methods:ge.value,loading:oe.value,layers:ae.value,defaults:D,"layer-rows":re.value,"selection-kind":Se.value,"viewport-style":X.value,"viewport-style-loading":se.value,"viewport-syncing":P.value,onRename:Ut,onChangeLayer:Lt,onSetField:mt,onAddField:Mt,onExecAction:Dt,onSaveDefaults:Rt,onLayerToggle:Kt,onAddLayer:vt,onDelete:Te,onPatchViewport:Ot},null,8,["selection-count","primary","fields","status","methods","loading","layers","defaults","layer-rows","selection-kind","viewport-style","viewport-style-loading","viewport-syncing"])]),a(ln,{"selected-count":O(n).count.value,"mouse-x":F.x,"mouse-y":F.y,"tool-label":O(m).toolLabel.value,"snap-on":tt.value,"undo-size":O(_).undoStack.value.length,"redo-size":O(_).redoStack.value.length,connected:ve.value},null,8,["selected-count","mouse-x","mouse-y","tool-label","snap-on","undo-size","redo-size","connected"]),a(un,{modelValue:f.value,"onUpdate:modelValue":t[0]||(t[0]=z=>f.value=z),configured:b.value,"default-bounds":B.value,"default-layer":D.site.layer,onGenerated:Ht},null,8,["modelValue","configured","default-bounds","default-layer"]),a(jn,{modelValue:T.value,"onUpdate:modelValue":t[1]||(t[1]=z=>T.value=z),mode:k.value,"initial-path":W.value,onConfirm:Wt},null,8,["modelValue","mode","initial-path"]),a(I,{modelValue:ke.value,"onUpdate:modelValue":t[3]||(t[3]=z=>ke.value=z),title:"切换显示图层",width:"520px"},{footer:l(()=>[a(S,{onClick:t[2]||(t[2]=z=>ke.value=!1)},{default:l(()=>[...t[4]||(t[4]=[y("关闭",-1)])]),_:1}),a(S,{type:"primary",onClick:ue},{default:l(()=>[...t[5]||(t[5]=[y("新建图层…",-1)])]),_:1})]),default:l(()=>[a(E,{data:re.value,size:"small",style:{width:"100%"}},{default:l(()=>[a(i,{prop:"name",label:"图层","min-width":"120"}),a(i,{label:"可见",width:"80"},{default:l(({row:z})=>[a(u,{modelValue:z.visible,"onUpdate:modelValue":ee=>z.visible=ee},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"可选",width:"80"},{default:l(({row:z})=>[a(u,{modelValue:z.selectable,"onUpdate:modelValue":ee=>z.selectable=ee},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"颜色",width:"100"},{default:l(({row:z})=>[a(w,{modelValue:z.color,"onUpdate:modelValue":ee=>z.color=ee,size:"small"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),a(i,{label:"默认层",width:"110"},{default:l(({row:z})=>[a(S,{size:"small",type:D.site.layer===z.name?"primary":"default",onClick:ee=>be(z.name)},{default:l(()=>[y(j(D.site.layer===z.name?"当前默认":"设为默认"),1)]),_:2},1032,["type","onClick"])]),_:1})]),_:1},8,["data"])]),_:1},8,["modelValue"]),s("input",{ref_key:"fileInputRef",ref:h,type:"file",style:{display:"none"},accept:x.value,onChange:Gt},null,40,On)])}}}),_o=Ne(Yn,[["__scopeId","data-v-a161d7d3"]]);export{_o as default}; diff --git a/MiGu.Server/wwwroot/assets/MapEditorView-Cnbi0NJ-.css b/MiGu.Server/wwwroot/assets/MapEditorView-Cnbi0NJ-.css new file mode 100644 index 0000000..a669e63 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/MapEditorView-Cnbi0NJ-.css @@ -0,0 +1 @@ +.edit-top-bar[data-v-11791a50]{display:flex;align-items:center;gap:4px;padding:8px 14px;background:linear-gradient(180deg,#321658f2,#220e40f2);border-bottom:1px solid rgba(255,255,255,.12);backdrop-filter:blur(10px);box-shadow:0 2px 8px #00000040}.spacer[data-v-11791a50]{flex:1}.el-divider--vertical[data-v-11791a50]{margin:0 6px;background:#ffffff26}.topbar-btn[data-v-11791a50]{color:#fdf6ff!important;font-weight:600;font-size:13.5px;padding:6px 12px;height:auto;border-radius:6px;transition:background .15s ease,color .15s ease}.topbar-btn[data-v-11791a50]:hover{color:#fff!important;background:#aa6efa47!important}.topbar-btn[data-v-11791a50]:focus{background:#aa6efa4d!important}.topbar-icon-btn[data-v-11791a50]{color:#fdf6ffeb!important;background:#ffffff0d!important;border:1px solid rgba(255,255,255,.15)!important;font-size:15px}.topbar-icon-btn[data-v-11791a50]:hover:not(.is-disabled){background:#aa6efa4d!important;border-color:#aa6efa8c!important}.topbar-icon-btn.is-disabled[data-v-11791a50]{opacity:.4}.topbar-saving-tag[data-v-11791a50]{margin-left:8px}.topbar-filter-menu[data-v-11791a50] .topbar-filter-header{font-size:11px;color:#e8d7f58c;cursor:default;pointer-events:none;padding-top:6px;padding-bottom:2px;text-transform:none;letter-spacing:.4px}.edit-tool-rail[data-v-6b284dea]{height:100%;width:170px;background:linear-gradient(180deg,#1c0c38d9,#120624f2);border-right:1px solid rgba(255,255,255,.1);padding:4px 0 12px;backdrop-filter:blur(10px);display:flex;flex-direction:column;box-shadow:inset -1px 0 #ffffff0a}.rail-scroll[data-v-6b284dea]{height:100%}.rail-group[data-v-6b284dea]{display:flex;flex-direction:column;padding:4px 8px 2px}.rail-group-title[data-v-6b284dea]{display:flex;align-items:center;gap:6px;font-size:10px;letter-spacing:2px;color:#bea0e6b3;text-transform:uppercase;margin:4px 0 6px;font-weight:600}.rail-group-bar[data-v-6b284dea]{flex:1;height:1px;background:#bea0e633}.rail-group-list[data-v-6b284dea]{display:flex;flex-direction:column;gap:2px}.rail-divider[data-v-6b284dea]{width:100%;height:1px;background:linear-gradient(90deg,#fff0,#ffffff14,#fff0);margin:6px 0 2px}.rail-btn[data-v-6b284dea]{appearance:none;border:0;cursor:pointer;width:100%;min-height:32px;padding:0 8px;border-radius:6px;background:#ffffff0a;color:#e8d7f5eb;display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;text-align:left;transition:background .14s ease,color .14s ease,box-shadow .14s ease,transform .12s ease}.rail-btn[data-v-6b284dea]:hover{background:#965ae633;color:#fff}.rail-btn[data-v-6b284dea]:active{transform:scale(.985)}.rail-btn.rail-btn--active[data-v-6b284dea]{background:linear-gradient(120deg,#aa6efaeb,#7846dceb);color:#fff;box-shadow:0 3px 10px #8c50e673,inset 0 0 0 1px #ffffff2e}.rail-btn-glyph[data-v-6b284dea]{width:20px;display:inline-flex;justify-content:center;align-items:center;font-size:15px;line-height:1;flex:none}.rail-btn-label[data-v-6b284dea]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rail-group-ai[data-v-6b284dea]{margin-top:14px;padding-bottom:10px;position:relative}.rail-group-ai[data-v-6b284dea]:before{content:"";position:absolute;left:8px;right:8px;top:0;height:1px;background:linear-gradient(90deg,#fff0,#dc8ce659,#fff0)}.rail-btn--ai[data-v-6b284dea]{background:linear-gradient(135deg,#7846dc8c,#ff5ac88c);color:#fff;font-weight:600;box-shadow:0 2px 10px #dc5adc4d,inset 0 0 0 1px #fff3}.rail-btn--ai[data-v-6b284dea]:hover{background:linear-gradient(135deg,#965af0d9,#ff6edcd9);color:#fff;box-shadow:0 4px 14px #e66ee68c,inset 0 0 0 1px #ffffff4d}.rail-btn--ai .rail-btn-glyph[data-v-6b284dea]{font-size:16px;text-shadow:0 0 8px rgba(255,200,250,.6)}.edit-property-panel[data-v-781515fe]{height:100%;width:360px;background:linear-gradient(180deg,#1c0c38d9,#120624f2);border-left:1px solid rgba(255,255,255,.1);padding:0;backdrop-filter:blur(10px);overflow:hidden;display:flex;flex-direction:column;color:#e8d7f5eb}.prop-tabs[data-v-781515fe]{height:100%;display:flex;flex-direction:column}.prop-tabs[data-v-781515fe] .el-tabs__header{margin:0;padding:0 8px;border-bottom:1px solid rgba(255,255,255,.08)}.prop-tabs[data-v-781515fe] .el-tabs__nav-wrap:after{background:transparent}.prop-tabs[data-v-781515fe] .el-tabs__item{color:#dcc8f0b3;font-weight:500;font-size:13px;height:36px;line-height:36px}.prop-tabs[data-v-781515fe] .el-tabs__item.is-active{color:#fff}.prop-tabs[data-v-781515fe] .el-tabs__active-bar{background:linear-gradient(90deg,#aa6efa,#ff6edc);height:2px}.prop-tabs[data-v-781515fe] .el-tabs__content{flex:1;overflow:auto;padding:10px 12px 14px}.empty-hint[data-v-781515fe]{display:flex;align-items:center;gap:6px;padding:56px 16px;text-align:center;color:#dcc8f08c;flex-direction:column}.empty-icon[data-v-781515fe]{font-size:28px;color:#b482dc73}.empty-title[data-v-781515fe]{font-size:13px;color:#e8d7f5bf;font-weight:500}.empty-desc[data-v-781515fe]{font-size:11.5px;color:#dcc8f080}.loading-hint[data-v-781515fe]{display:flex;align-items:center;gap:8px;padding:32px 16px;text-align:center;color:#e8d7f5a6;font-size:12.5px;justify-content:center}.object-pane[data-v-781515fe]{display:flex;flex-direction:column;gap:10px}.prop-card[data-v-781515fe]{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:10px 12px;box-shadow:0 1px 4px #0003}.prop-card--header[data-v-781515fe]{background:linear-gradient(140deg,#aa6efa2e,#461e6e1a);border-color:#aa6efa47}.prop-card--geom[data-v-781515fe]{background:linear-gradient(140deg,#508cdc1a,#2846820f);border-color:#78aae638}.prop-card--style[data-v-781515fe]{background:linear-gradient(140deg,#dc6ec81a,#9646820f);border-color:#e682c838}.prop-card--custom[data-v-781515fe]{background:#ffffff08;border-color:#aa6efa2e}.prop-card--status[data-v-781515fe]{background:#508cdc0f;border-color:#78aae62e}.prop-card--actions[data-v-781515fe]{background:#8c50c80f;border-color:#aa6efa2e}.prop-card-header[data-v-781515fe]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.prop-card-title[data-v-781515fe]{font-size:11.5px;font-weight:600;letter-spacing:1px;color:#dcb4fad9;text-transform:uppercase}.prop-card-meta[data-v-781515fe]{font-size:10.5px;color:#c8b4dc80}.prop-card-flag[data-v-781515fe]{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:#b4c8f099;padding:2px 7px;border-radius:10px;background:#78a0dc1a;transition:background .25s ease,color .25s ease,box-shadow .25s ease;margin-left:auto}.prop-card-flag.is-synced[data-v-781515fe]{background:linear-gradient(120deg,#50c88252,#78dcc852);color:#dcffe6f2;box-shadow:0 0 8px #50c88273}.prop-card-flag-dot[data-v-781515fe]{width:6px;height:6px;border-radius:50%;background:#b4c8f099;transition:background .25s ease,box-shadow .25s ease}.prop-card-flag.is-synced .prop-card-flag-dot[data-v-781515fe]{background:#6ce7a8;box-shadow:0 0 6px #6ce7a8d9}.prop-card-row[data-v-781515fe]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.prop-card-row[data-v-781515fe]:last-child{margin-bottom:0}.prop-id-block[data-v-781515fe]{display:flex;align-items:center;gap:6px}.prop-id-tag[data-v-781515fe]{background:#aa6efa4d;color:#fff;padding:2px 8px;font-size:11.5px;font-weight:600;border-radius:4px;letter-spacing:.5px}.prop-type-tag[data-v-781515fe]{color:#e8d7f5bf;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.prop-status-tag[data-v-781515fe]{font-weight:500}.prop-header-actions[data-v-781515fe]{display:flex;align-items:center;gap:6px}.prop-delete-btn[data-v-781515fe]{appearance:none;cursor:pointer;display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:5px;font-size:11.5px;font-weight:500;letter-spacing:.4px;color:#ffc8d2f2;background:linear-gradient(135deg,#ff5a782e,#dc3c6e38);border:1px solid rgba(255,110,140,.45);transition:background .14s ease,border-color .14s ease,color .14s ease,box-shadow .14s ease,transform .12s ease}.prop-delete-btn[data-v-781515fe]:hover:not(:disabled){background:linear-gradient(135deg,#ff5a788c,#dc3c6ea6);border-color:#ff8caad9;color:#fff;box-shadow:0 3px 10px #dc466e73}.prop-delete-btn[data-v-781515fe]:active:not(:disabled){transform:scale(.96)}.prop-delete-btn[data-v-781515fe]:disabled{opacity:.55;cursor:progress}.prop-delete-icon[data-v-781515fe]{font-size:12px;line-height:1}.prop-name-row[data-v-781515fe],.prop-layer-row[data-v-781515fe]{gap:8px}.prop-name-label[data-v-781515fe]{width:36px;font-size:11.5px;color:#c8b4dcb3;flex:none}.prop-layer-select[data-v-781515fe]{flex:1}.prop-grid[data-v-781515fe]{display:grid;grid-template-columns:1fr 1fr;column-gap:8px;row-gap:8px}.prop-grid-item[data-v-781515fe]{display:flex;flex-direction:column;gap:3px;min-width:0}.prop-grid-item--wide[data-v-781515fe]{grid-column:1 / -1}.prop-field-label[data-v-781515fe]{font-size:11px;color:#c8b4e6c7;letter-spacing:.3px;display:flex;justify-content:space-between;align-items:baseline;gap:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prop-field-unit[data-v-781515fe]{font-size:10px;color:#aa96c88c;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;flex:none}.prop-field-num[data-v-781515fe] .el-input-number{width:100%}.prop-field-num[data-v-781515fe] .el-input__wrapper{background:#ffffff0f;box-shadow:inset 0 0 0 1px #aa6efa2e}.prop-field-row[data-v-781515fe]{display:flex;align-items:center;gap:4px}.prop-field-icon-btn[data-v-781515fe]{appearance:none;border:0;cursor:pointer;width:22px;height:22px;border-radius:4px;background:#ff64821f;color:#ffb4c8d9;font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center;flex:none;transition:background .14s,color .14s}.prop-field-icon-btn[data-v-781515fe]:hover{background:#ff648252;color:#fff}.prop-empty-row[data-v-781515fe]{font-size:11.5px;color:#c8b4dc66;text-align:center;padding:8px 0}.prop-add-field-btn[data-v-781515fe]{appearance:none;border:0;cursor:pointer;width:100%;margin-top:8px;padding:6px 10px;border-radius:6px;background:#aa6efa24;border:1px dashed rgba(170,110,250,.4);color:#dcb4faeb;font-size:12px;font-weight:500;transition:background .14s ease,border-color .14s ease,color .14s ease}.prop-add-field-btn[data-v-781515fe]:hover{background:#aa6efa42;border-color:#aa6efaa6;color:#fff}.prop-status-list[data-v-781515fe]{display:flex;flex-direction:column;gap:4px}.prop-status-item[data-v-781515fe]{display:flex;justify-content:space-between;align-items:center;padding:5px 8px;border-radius:4px;background:#ffffff08;font-size:11.5px}.prop-status-key[data-v-781515fe]{color:#aac8f0d9;font-weight:500}.prop-status-value[data-v-781515fe]{color:#e8f5fff2;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prop-actions[data-v-781515fe]{display:grid;grid-template-columns:1fr 1fr;gap:6px}.prop-action-btn[data-v-781515fe]{appearance:none;border:0;cursor:pointer;padding:7px 10px;border-radius:7px;background:linear-gradient(135deg,#aa6efa33,#7846dc33);border:1px solid rgba(170,110,250,.35);color:#e8d7f5f2;font-size:12px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;gap:6px;transition:background .14s ease,border-color .14s ease,transform .12s ease,box-shadow .14s ease;text-align:left}.prop-action-btn[data-v-781515fe]:hover:not(:disabled){background:linear-gradient(135deg,#aa6efa9e,#ff6edc8c);border-color:#ff82dcb3;color:#fff;box-shadow:0 4px 12px #b45adc66}.prop-action-btn[data-v-781515fe]:active:not(:disabled){transform:scale(.985)}.prop-action-btn[data-v-781515fe]:disabled{opacity:.6;cursor:progress}.prop-action-icon[data-v-781515fe]{font-size:9px;color:#ffc8fad9;flex:none}.prop-action-spinner[data-v-781515fe]{display:inline-block;animation:prop-spin-781515fe .8s linear infinite;font-size:13px}.prop-action-label[data-v-781515fe]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes prop-spin-781515fe{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.defaults-pane[data-v-781515fe]{display:flex;flex-direction:column;gap:10px}.defaults-alert[data-v-781515fe]{margin-bottom:4px}.defaults-empty[data-v-781515fe]{padding:40px 12px}.defaults-form .el-button[data-v-781515fe]{margin-top:8px}.defaults-form[data-v-781515fe] .el-form-item{margin-bottom:10px}.layer-table[data-v-781515fe]{margin:6px 0;border-radius:8px;overflow:hidden;background:#fff;box-shadow:0 0 0 1px #7c3aed24}.layer-table[data-v-781515fe] .el-table__inner-wrapper{background:#fff}.layer-table[data-v-781515fe] th.el-table__cell{background:#f5f3ff!important;color:#2d1b69!important;font-weight:600}.layer-table[data-v-781515fe] td.el-table__cell{background:#fff!important;color:#1a0f3d!important;font-weight:500}.layer-table[data-v-781515fe] .cell{color:#1a0f3d!important}.layer-table[data-v-781515fe] tr:hover>td.el-table__cell{background:#ede9fe!important}.new-layer[data-v-781515fe]{margin-top:8px}.new-layer[data-v-781515fe] .el-input__inner{color:#1a0f3d;font-weight:500}.new-layer[data-v-781515fe] .el-input__inner::placeholder{color:#7a6b9a}.new-layer[data-v-781515fe] .el-input-group__append .el-button{color:#5b21b6;font-weight:600}.edit-status-bar[data-v-6254b10f]{display:flex;align-items:center;gap:16px;padding:4px 14px;background:#140828d9;border-top:1px solid rgba(255,255,255,.08);color:#e8d7f5d9;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace;height:28px}.spacer[data-v-6254b10f]{flex:1}.seg b[data-v-6254b10f]{color:var(--mg-accent, #c4a4ff)}.seg .on[data-v-6254b10f]{color:#67c23a}.seg .off[data-v-6254b10f]{color:#a0a0a0}.seg.ok[data-v-6254b10f]{color:#67c23a}.seg.warn[data-v-6254b10f]{color:#f56c6c}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;cursor:pointer;outline:none;justify-content:center;align-items:center;display:inline-flex}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{border-color:var(--el-border-color-darker);color:inherit}.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);margin-top:7px;font-size:12px}.el-upload iframe{z-index:-1;opacity:0;filter:alpha(opacity=0);position:absolute;top:0;left:0}.el-upload--picture-card{background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);box-sizing:border-box;text-align:center;cursor:pointer;border-radius:6px;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);margin-bottom:16px;font-size:67px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);text-align:center;font-size:14px}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{color:var(--el-text-color-regular);box-sizing:border-box;border-radius:4px;width:100%;margin-bottom:5px;font-size:14px;transition:all .5s cubic-bezier(.55,0,.1,1);position:relative}.el-upload-list__item .el-progress{width:100%;position:absolute;top:20px}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);display:none;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{cursor:pointer;opacity:1;color:var(--el-color-primary);font-size:12px;font-style:normal;display:none;position:absolute;top:1px;right:5px}.el-upload-list__item:hover,.el-upload-list__item:focus-within{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close,.el-upload-list__item:focus-within .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-icon--close-tip,.el-upload-list__item:focus-within .el-icon--close-tip{right:24px}.el-upload-list__item:hover .el-progress__text,.el-upload-list__item:focus-within .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{flex-direction:column;justify-content:center;width:calc(100% - 30px);margin-left:4px;display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0}.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip,.el-upload-list__item.is-success:active .el-icon--close-tip{display:none}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus-within .el-upload-list__item-status-label{opacity:0;display:none}.el-upload-list__item-name{color:var(--el-text-color-regular);text-align:center;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base);align-items:center;padding:0 4px;display:inline-flex}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-upload-list__item-status-label{line-height:inherit;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;display:none;position:absolute;top:0;right:5px}.el-upload-list__item-delete{color:var(--el-text-color-regular);font-size:12px;display:none;position:absolute;top:0;right:10px}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{flex-wrap:wrap;margin:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);border-radius:6px;margin:0 8px 8px 0;padding:0;display:inline-flex;overflow:hidden}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{object-fit:contain;width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{cursor:default;color:#fff;opacity:0;background-color:var(--el-overlay-color-lighter);width:100%;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;font-size:20px;display:inline-flex;position:absolute;top:0;left:0}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{font-size:inherit;color:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{width:126px;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%)}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;border-radius:6px;align-items:center;margin-top:10px;padding:10px;display:flex;overflow:hidden}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{object-fit:contain;z-index:1;background-color:var(--el-color-white);justify-content:center;align-items:center;width:70px;height:70px;display:inline-flex;position:relative}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:46px;height:26px;position:absolute;top:-7px;right:-17px;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{margin-top:12px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{z-index:10;cursor:default;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.el-upload-cover:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-upload-cover img{width:100%;height:100%;display:block}.el-upload-cover__label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-cover__label i{color:#fff;margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-cover__progress{vertical-align:middle;width:243px;display:inline-block;position:static}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{width:100%;height:100%;position:absolute;top:0;left:0}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);text-align:center;width:100%;height:100%;position:absolute;bottom:0;left:0}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px;font-size:14px;display:inline-block}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;font-size:24px;line-height:inherit;margin:0 auto 5px;display:block}.el-upload-cover__title{text-overflow:ellipsis;white-space:nowrap;text-align:left;width:100%;height:36px;color:var(--el-text-color-primary);background-color:#fff;margin:0;padding:0 10px;font-size:14px;font-weight:400;line-height:36px;position:absolute;bottom:0;left:0;overflow:hidden}.el-upload-cover+.el-upload__inner{opacity:0;z-index:1;position:relative}.cfg-alert[data-v-7b1912b1]{margin-bottom:12px}.ml[data-v-7b1912b1]{margin-left:6px}.upload-hint[data-v-7b1912b1]{display:flex;align-items:center;gap:8px;padding:12px;color:var(--el-text-color-regular, rgba(232,215,245,.7))}.result-panel[data-v-7b1912b1]{margin-top:8px}.ai-text[data-v-7b1912b1]{color:var(--el-text-color-primary, rgba(232,215,245,.85));padding:6px 0;white-space:pre-wrap}.ai-stat[data-v-7b1912b1]{padding:6px 0;color:var(--el-text-color-primary, rgba(232,215,245,.85))}.ai-stat b[data-v-7b1912b1]{color:var(--mg-accent, #c4a4ff)}.proj-browse-dialog[data-v-411e65f0] .el-dialog__header{padding:14px 20px;margin-right:0;border-bottom:1px solid rgba(170,110,250,.15)}.proj-browse-dialog[data-v-411e65f0] .el-dialog__title{font-weight:600;font-size:14px;color:#3c1e6ef2}.proj-browse-dialog[data-v-411e65f0] .el-dialog__body{padding:12px 16px 8px}.proj-browse[data-v-411e65f0]{display:flex;flex-direction:column;gap:10px}.proj-browse-toolbar[data-v-411e65f0]{display:flex;gap:6px;align-items:center}.proj-icon-btn[data-v-411e65f0]{appearance:none;border:1px solid rgba(170,110,250,.25);background:#f5ebffa6;color:#502882d9;width:30px;height:30px;border-radius:6px;cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;transition:background .14s,border-color .14s,color .14s}.proj-icon-btn[data-v-411e65f0]:hover:not(:disabled){background:#aa6efa33;border-color:#aa6efa8c;color:#280a5af2}.proj-icon-btn[data-v-411e65f0]:disabled{opacity:.4;cursor:not-allowed}.proj-icon[data-v-411e65f0]{font-size:14px;line-height:1}.proj-path-input[data-v-411e65f0]{flex:1}.proj-path-prefix[data-v-411e65f0]{font-size:12px;color:#7850b4b3}.proj-error[data-v-411e65f0]{margin:0}.proj-browse-body[data-v-411e65f0]{display:grid;grid-template-columns:220px 1fr;gap:10px;height:400px;border:1px solid rgba(170,110,250,.18);border-radius:8px;overflow:hidden;background:#faf5ff80}.proj-browse-side[data-v-411e65f0]{display:flex;flex-direction:column;border-right:1px solid rgba(170,110,250,.15);background:#f5eeffa6}.proj-side-title[data-v-411e65f0]{font-size:11px;letter-spacing:1px;color:#7850b4d9;font-weight:600;text-transform:uppercase;padding:8px 10px;border-bottom:1px solid rgba(170,110,250,.1);background:#ffffff73}.proj-side-scroll[data-v-411e65f0]{flex:1}.proj-side-section[data-v-411e65f0]{margin-top:10px;padding:0 6px}.proj-side-section[data-v-411e65f0]:first-child{margin-top:0}.proj-side-section-title[data-v-411e65f0]{font-size:10.5px;color:#7850b4b3;padding:6px 6px 2px;letter-spacing:.5px}.proj-side-btn[data-v-411e65f0]{appearance:none;border:0;background:transparent;width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:5px;font-size:12.5px;color:#3c1e6eeb;cursor:pointer;text-align:left;transition:background .12s}.proj-side-btn[data-v-411e65f0]:hover{background:#aa6efa2e}.proj-side-btn--active[data-v-411e65f0]{background:#aa6efa52;color:#fff}.proj-side-cwd[data-v-411e65f0]{margin:6px;background:#aa6efa24;border:1px solid rgba(170,110,250,.3)}.proj-side-cwd[data-v-411e65f0]:hover{background:#aa6efa47}.proj-side-icon[data-v-411e65f0]{width:16px;flex:none;text-align:center}.proj-side-text[data-v-411e65f0]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-side-empty[data-v-411e65f0]{font-size:11.5px;color:#785aa08c;padding:8px 12px;text-align:center}.proj-browse-main[data-v-411e65f0]{padding:0;overflow:hidden}.proj-browse-table[data-v-411e65f0]{width:100%}.proj-file-icon[data-v-411e65f0]{font-size:14px}.proj-file-name[data-v-411e65f0]{color:#280a5af2;font-weight:500;font-size:12.5px}.proj-mute[data-v-411e65f0]{color:#785aa0b3;font-size:11.5px}.proj-browse-footer[data-v-411e65f0]{display:flex;align-items:center;gap:8px;padding:4px 0}.proj-footer-label[data-v-411e65f0]{font-size:12px;color:#502882d9;font-weight:500;flex:none;min-width:64px}.proj-manual-input[data-v-411e65f0]{flex:1}.proj-footer-type[data-v-411e65f0]{font-size:11.5px;color:#785aa0b3;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.proj-footer-bar[data-v-411e65f0]{display:flex;align-items:center;justify-content:space-between}.proj-footer-tip[data-v-411e65f0]{font-size:11.5px;color:#785aa0b3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:460px}.map-editor-page[data-v-cadf4150]{height:calc(100vh - 56px);display:flex;flex-direction:column;background:radial-gradient(ellipse at 50% 40%,#2d1456,#1a0930,#0f0420);color:#e8d7f5e6}.me-body[data-v-cadf4150]{flex:1;display:flex;min-height:0}.me-center[data-v-cadf4150]{flex:1;min-width:0;display:flex}.me-center[data-v-cadf4150] .workspace-3d-wrap{flex:1;height:100%;border:0;border-radius:0;min-height:0} diff --git a/MiGu.Server/wwwroot/assets/MapEditorView-DbYZjgvw.css b/MiGu.Server/wwwroot/assets/MapEditorView-DbYZjgvw.css deleted file mode 100644 index bd4ddbb..0000000 --- a/MiGu.Server/wwwroot/assets/MapEditorView-DbYZjgvw.css +++ /dev/null @@ -1 +0,0 @@ -.edit-top-bar[data-v-11791a50]{display:flex;align-items:center;gap:4px;padding:8px 14px;background:linear-gradient(180deg,#321658f2,#220e40f2);border-bottom:1px solid rgba(255,255,255,.12);backdrop-filter:blur(10px);box-shadow:0 2px 8px #00000040}.spacer[data-v-11791a50]{flex:1}.el-divider--vertical[data-v-11791a50]{margin:0 6px;background:#ffffff26}.topbar-btn[data-v-11791a50]{color:#fdf6ff!important;font-weight:600;font-size:13.5px;padding:6px 12px;height:auto;border-radius:6px;transition:background .15s ease,color .15s ease}.topbar-btn[data-v-11791a50]:hover{color:#fff!important;background:#aa6efa47!important}.topbar-btn[data-v-11791a50]:focus{background:#aa6efa4d!important}.topbar-icon-btn[data-v-11791a50]{color:#fdf6ffeb!important;background:#ffffff0d!important;border:1px solid rgba(255,255,255,.15)!important;font-size:15px}.topbar-icon-btn[data-v-11791a50]:hover:not(.is-disabled){background:#aa6efa4d!important;border-color:#aa6efa8c!important}.topbar-icon-btn.is-disabled[data-v-11791a50]{opacity:.4}.topbar-saving-tag[data-v-11791a50]{margin-left:8px}.topbar-filter-menu[data-v-11791a50] .topbar-filter-header{font-size:11px;color:#e8d7f58c;cursor:default;pointer-events:none;padding-top:6px;padding-bottom:2px;text-transform:none;letter-spacing:.4px}.edit-tool-rail[data-v-6b284dea]{height:100%;width:170px;background:linear-gradient(180deg,#1c0c38d9,#120624f2);border-right:1px solid rgba(255,255,255,.1);padding:4px 0 12px;backdrop-filter:blur(10px);display:flex;flex-direction:column;box-shadow:inset -1px 0 #ffffff0a}.rail-scroll[data-v-6b284dea]{height:100%}.rail-group[data-v-6b284dea]{display:flex;flex-direction:column;padding:4px 8px 2px}.rail-group-title[data-v-6b284dea]{display:flex;align-items:center;gap:6px;font-size:10px;letter-spacing:2px;color:#bea0e6b3;text-transform:uppercase;margin:4px 0 6px;font-weight:600}.rail-group-bar[data-v-6b284dea]{flex:1;height:1px;background:#bea0e633}.rail-group-list[data-v-6b284dea]{display:flex;flex-direction:column;gap:2px}.rail-divider[data-v-6b284dea]{width:100%;height:1px;background:linear-gradient(90deg,#fff0,#ffffff14,#fff0);margin:6px 0 2px}.rail-btn[data-v-6b284dea]{appearance:none;border:0;cursor:pointer;width:100%;min-height:32px;padding:0 8px;border-radius:6px;background:#ffffff0a;color:#e8d7f5eb;display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;text-align:left;transition:background .14s ease,color .14s ease,box-shadow .14s ease,transform .12s ease}.rail-btn[data-v-6b284dea]:hover{background:#965ae633;color:#fff}.rail-btn[data-v-6b284dea]:active{transform:scale(.985)}.rail-btn.rail-btn--active[data-v-6b284dea]{background:linear-gradient(120deg,#aa6efaeb,#7846dceb);color:#fff;box-shadow:0 3px 10px #8c50e673,inset 0 0 0 1px #ffffff2e}.rail-btn-glyph[data-v-6b284dea]{width:20px;display:inline-flex;justify-content:center;align-items:center;font-size:15px;line-height:1;flex:none}.rail-btn-label[data-v-6b284dea]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rail-group-ai[data-v-6b284dea]{margin-top:14px;padding-bottom:10px;position:relative}.rail-group-ai[data-v-6b284dea]:before{content:"";position:absolute;left:8px;right:8px;top:0;height:1px;background:linear-gradient(90deg,#fff0,#dc8ce659,#fff0)}.rail-btn--ai[data-v-6b284dea]{background:linear-gradient(135deg,#7846dc8c,#ff5ac88c);color:#fff;font-weight:600;box-shadow:0 2px 10px #dc5adc4d,inset 0 0 0 1px #fff3}.rail-btn--ai[data-v-6b284dea]:hover{background:linear-gradient(135deg,#965af0d9,#ff6edcd9);color:#fff;box-shadow:0 4px 14px #e66ee68c,inset 0 0 0 1px #ffffff4d}.rail-btn--ai .rail-btn-glyph[data-v-6b284dea]{font-size:16px;text-shadow:0 0 8px rgba(255,200,250,.6)}.edit-property-panel[data-v-a135c9ef]{height:100%;width:360px;background:linear-gradient(180deg,#1c0c38d9,#120624f2);border-left:1px solid rgba(255,255,255,.1);padding:0;backdrop-filter:blur(10px);overflow:hidden;display:flex;flex-direction:column;color:#e8d7f5eb}.prop-tabs[data-v-a135c9ef]{height:100%;display:flex;flex-direction:column}.prop-tabs[data-v-a135c9ef] .el-tabs__header{margin:0;padding:0 8px;border-bottom:1px solid rgba(255,255,255,.08)}.prop-tabs[data-v-a135c9ef] .el-tabs__nav-wrap:after{background:transparent}.prop-tabs[data-v-a135c9ef] .el-tabs__item{color:#dcc8f0b3;font-weight:500;font-size:13px;height:36px;line-height:36px}.prop-tabs[data-v-a135c9ef] .el-tabs__item.is-active{color:#fff}.prop-tabs[data-v-a135c9ef] .el-tabs__active-bar{background:linear-gradient(90deg,#aa6efa,#ff6edc);height:2px}.prop-tabs[data-v-a135c9ef] .el-tabs__content{flex:1;overflow:auto;padding:10px 12px 14px}.empty-hint[data-v-a135c9ef]{display:flex;align-items:center;gap:6px;padding:56px 16px;text-align:center;color:#dcc8f08c;flex-direction:column}.empty-icon[data-v-a135c9ef]{font-size:28px;color:#b482dc73}.empty-title[data-v-a135c9ef]{font-size:13px;color:#e8d7f5bf;font-weight:500}.empty-desc[data-v-a135c9ef]{font-size:11.5px;color:#dcc8f080}.loading-hint[data-v-a135c9ef]{display:flex;align-items:center;gap:8px;padding:32px 16px;text-align:center;color:#e8d7f5a6;font-size:12.5px;justify-content:center}.object-pane[data-v-a135c9ef]{display:flex;flex-direction:column;gap:10px}.prop-card[data-v-a135c9ef]{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:10px 12px;box-shadow:0 1px 4px #0003}.prop-card--header[data-v-a135c9ef]{background:linear-gradient(140deg,#aa6efa2e,#461e6e1a);border-color:#aa6efa47}.prop-card--geom[data-v-a135c9ef]{background:linear-gradient(140deg,#508cdc1a,#2846820f);border-color:#78aae638}.prop-card--style[data-v-a135c9ef]{background:linear-gradient(140deg,#dc6ec81a,#9646820f);border-color:#e682c838}.prop-card--custom[data-v-a135c9ef]{background:#ffffff08;border-color:#aa6efa2e}.prop-card--status[data-v-a135c9ef]{background:#508cdc0f;border-color:#78aae62e}.prop-card--actions[data-v-a135c9ef]{background:#8c50c80f;border-color:#aa6efa2e}.prop-card-header[data-v-a135c9ef]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.prop-card-title[data-v-a135c9ef]{font-size:11.5px;font-weight:600;letter-spacing:1px;color:#dcb4fad9;text-transform:uppercase}.prop-card-meta[data-v-a135c9ef]{font-size:10.5px;color:#c8b4dc80}.prop-card-flag[data-v-a135c9ef]{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:#b4c8f099;padding:2px 7px;border-radius:10px;background:#78a0dc1a;transition:background .25s ease,color .25s ease,box-shadow .25s ease;margin-left:auto}.prop-card-flag.is-synced[data-v-a135c9ef]{background:linear-gradient(120deg,#50c88252,#78dcc852);color:#dcffe6f2;box-shadow:0 0 8px #50c88273}.prop-card-flag-dot[data-v-a135c9ef]{width:6px;height:6px;border-radius:50%;background:#b4c8f099;transition:background .25s ease,box-shadow .25s ease}.prop-card-flag.is-synced .prop-card-flag-dot[data-v-a135c9ef]{background:#6ce7a8;box-shadow:0 0 6px #6ce7a8d9}.prop-card-row[data-v-a135c9ef]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.prop-card-row[data-v-a135c9ef]:last-child{margin-bottom:0}.prop-id-block[data-v-a135c9ef]{display:flex;align-items:center;gap:6px}.prop-id-tag[data-v-a135c9ef]{background:#aa6efa4d;color:#fff;padding:2px 8px;font-size:11.5px;font-weight:600;border-radius:4px;letter-spacing:.5px}.prop-type-tag[data-v-a135c9ef]{color:#e8d7f5bf;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.prop-status-tag[data-v-a135c9ef]{font-weight:500}.prop-header-actions[data-v-a135c9ef]{display:flex;align-items:center;gap:6px}.prop-delete-btn[data-v-a135c9ef]{appearance:none;cursor:pointer;display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:5px;font-size:11.5px;font-weight:500;letter-spacing:.4px;color:#ffc8d2f2;background:linear-gradient(135deg,#ff5a782e,#dc3c6e38);border:1px solid rgba(255,110,140,.45);transition:background .14s ease,border-color .14s ease,color .14s ease,box-shadow .14s ease,transform .12s ease}.prop-delete-btn[data-v-a135c9ef]:hover:not(:disabled){background:linear-gradient(135deg,#ff5a788c,#dc3c6ea6);border-color:#ff8caad9;color:#fff;box-shadow:0 3px 10px #dc466e73}.prop-delete-btn[data-v-a135c9ef]:active:not(:disabled){transform:scale(.96)}.prop-delete-btn[data-v-a135c9ef]:disabled{opacity:.55;cursor:progress}.prop-delete-icon[data-v-a135c9ef]{font-size:12px;line-height:1}.prop-name-row[data-v-a135c9ef],.prop-layer-row[data-v-a135c9ef]{gap:8px}.prop-name-label[data-v-a135c9ef]{width:36px;font-size:11.5px;color:#c8b4dcb3;flex:none}.prop-layer-select[data-v-a135c9ef]{flex:1}.prop-grid[data-v-a135c9ef]{display:grid;grid-template-columns:1fr 1fr;column-gap:8px;row-gap:8px}.prop-grid-item[data-v-a135c9ef]{display:flex;flex-direction:column;gap:3px;min-width:0}.prop-grid-item--wide[data-v-a135c9ef]{grid-column:1 / -1}.prop-field-label[data-v-a135c9ef]{font-size:11px;color:#c8b4e6c7;letter-spacing:.3px;display:flex;justify-content:space-between;align-items:baseline;gap:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prop-field-unit[data-v-a135c9ef]{font-size:10px;color:#aa96c88c;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;flex:none}.prop-field-num[data-v-a135c9ef] .el-input-number{width:100%}.prop-field-num[data-v-a135c9ef] .el-input__wrapper{background:#ffffff0f;box-shadow:inset 0 0 0 1px #aa6efa2e}.prop-field-row[data-v-a135c9ef]{display:flex;align-items:center;gap:4px}.prop-field-icon-btn[data-v-a135c9ef]{appearance:none;border:0;cursor:pointer;width:22px;height:22px;border-radius:4px;background:#ff64821f;color:#ffb4c8d9;font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center;flex:none;transition:background .14s,color .14s}.prop-field-icon-btn[data-v-a135c9ef]:hover{background:#ff648252;color:#fff}.prop-empty-row[data-v-a135c9ef]{font-size:11.5px;color:#c8b4dc66;text-align:center;padding:8px 0}.prop-add-field-btn[data-v-a135c9ef]{appearance:none;border:0;cursor:pointer;width:100%;margin-top:8px;padding:6px 10px;border-radius:6px;background:#aa6efa24;border:1px dashed rgba(170,110,250,.4);color:#dcb4faeb;font-size:12px;font-weight:500;transition:background .14s ease,border-color .14s ease,color .14s ease}.prop-add-field-btn[data-v-a135c9ef]:hover{background:#aa6efa42;border-color:#aa6efaa6;color:#fff}.prop-status-list[data-v-a135c9ef]{display:flex;flex-direction:column;gap:4px}.prop-status-item[data-v-a135c9ef]{display:flex;justify-content:space-between;align-items:center;padding:5px 8px;border-radius:4px;background:#ffffff08;font-size:11.5px}.prop-status-key[data-v-a135c9ef]{color:#aac8f0d9;font-weight:500}.prop-status-value[data-v-a135c9ef]{color:#e8f5fff2;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prop-actions[data-v-a135c9ef]{display:grid;grid-template-columns:1fr 1fr;gap:6px}.prop-action-btn[data-v-a135c9ef]{appearance:none;border:0;cursor:pointer;padding:7px 10px;border-radius:7px;background:linear-gradient(135deg,#aa6efa33,#7846dc33);border:1px solid rgba(170,110,250,.35);color:#e8d7f5f2;font-size:12px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;gap:6px;transition:background .14s ease,border-color .14s ease,transform .12s ease,box-shadow .14s ease;text-align:left}.prop-action-btn[data-v-a135c9ef]:hover:not(:disabled){background:linear-gradient(135deg,#aa6efa9e,#ff6edc8c);border-color:#ff82dcb3;color:#fff;box-shadow:0 4px 12px #b45adc66}.prop-action-btn[data-v-a135c9ef]:active:not(:disabled){transform:scale(.985)}.prop-action-btn[data-v-a135c9ef]:disabled{opacity:.6;cursor:progress}.prop-action-icon[data-v-a135c9ef]{font-size:9px;color:#ffc8fad9;flex:none}.prop-action-spinner[data-v-a135c9ef]{display:inline-block;animation:prop-spin-a135c9ef .8s linear infinite;font-size:13px}.prop-action-label[data-v-a135c9ef]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes prop-spin-a135c9ef{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.defaults-pane[data-v-a135c9ef]{display:flex;flex-direction:column;gap:10px}.defaults-alert[data-v-a135c9ef]{margin-bottom:4px}.defaults-empty[data-v-a135c9ef]{padding:40px 12px}.defaults-form .el-button[data-v-a135c9ef]{margin-top:8px}.defaults-form[data-v-a135c9ef] .el-form-item{margin-bottom:10px}.layer-table[data-v-a135c9ef]{margin:6px 0}.new-layer[data-v-a135c9ef]{margin-top:8px}.edit-status-bar[data-v-6254b10f]{display:flex;align-items:center;gap:16px;padding:4px 14px;background:#140828d9;border-top:1px solid rgba(255,255,255,.08);color:#e8d7f5d9;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace;height:28px}.spacer[data-v-6254b10f]{flex:1}.seg b[data-v-6254b10f]{color:var(--mg-accent, #c4a4ff)}.seg .on[data-v-6254b10f]{color:#67c23a}.seg .off[data-v-6254b10f]{color:#a0a0a0}.seg.ok[data-v-6254b10f]{color:#67c23a}.seg.warn[data-v-6254b10f]{color:#f56c6c}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;cursor:pointer;outline:none;justify-content:center;align-items:center;display:inline-flex}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{border-color:var(--el-border-color-darker);color:inherit}.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);margin-top:7px;font-size:12px}.el-upload iframe{z-index:-1;opacity:0;filter:alpha(opacity=0);position:absolute;top:0;left:0}.el-upload--picture-card{background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);box-sizing:border-box;text-align:center;cursor:pointer;border-radius:6px;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);margin-bottom:16px;font-size:67px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);text-align:center;font-size:14px}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{color:var(--el-text-color-regular);box-sizing:border-box;border-radius:4px;width:100%;margin-bottom:5px;font-size:14px;transition:all .5s cubic-bezier(.55,0,.1,1);position:relative}.el-upload-list__item .el-progress{width:100%;position:absolute;top:20px}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);display:none;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{cursor:pointer;opacity:1;color:var(--el-color-primary);font-size:12px;font-style:normal;display:none;position:absolute;top:1px;right:5px}.el-upload-list__item:hover,.el-upload-list__item:focus-within{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close,.el-upload-list__item:focus-within .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-icon--close-tip,.el-upload-list__item:focus-within .el-icon--close-tip{right:24px}.el-upload-list__item:hover .el-progress__text,.el-upload-list__item:focus-within .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{flex-direction:column;justify-content:center;width:calc(100% - 30px);margin-left:4px;display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0}.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip,.el-upload-list__item.is-success:active .el-icon--close-tip{display:none}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus-within .el-upload-list__item-status-label{opacity:0;display:none}.el-upload-list__item-name{color:var(--el-text-color-regular);text-align:center;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base);align-items:center;padding:0 4px;display:inline-flex}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-upload-list__item-status-label{line-height:inherit;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;display:none;position:absolute;top:0;right:5px}.el-upload-list__item-delete{color:var(--el-text-color-regular);font-size:12px;display:none;position:absolute;top:0;right:10px}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{flex-wrap:wrap;margin:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);border-radius:6px;margin:0 8px 8px 0;padding:0;display:inline-flex;overflow:hidden}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{object-fit:contain;width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{cursor:default;color:#fff;opacity:0;background-color:var(--el-overlay-color-lighter);width:100%;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;font-size:20px;display:inline-flex;position:absolute;top:0;left:0}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{font-size:inherit;color:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{width:126px;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%)}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;border-radius:6px;align-items:center;margin-top:10px;padding:10px;display:flex;overflow:hidden}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{object-fit:contain;z-index:1;background-color:var(--el-color-white);justify-content:center;align-items:center;width:70px;height:70px;display:inline-flex;position:relative}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:46px;height:26px;position:absolute;top:-7px;right:-17px;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{margin-top:12px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{z-index:10;cursor:default;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.el-upload-cover:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-upload-cover img{width:100%;height:100%;display:block}.el-upload-cover__label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-cover__label i{color:#fff;margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-cover__progress{vertical-align:middle;width:243px;display:inline-block;position:static}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{width:100%;height:100%;position:absolute;top:0;left:0}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);text-align:center;width:100%;height:100%;position:absolute;bottom:0;left:0}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px;font-size:14px;display:inline-block}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;font-size:24px;line-height:inherit;margin:0 auto 5px;display:block}.el-upload-cover__title{text-overflow:ellipsis;white-space:nowrap;text-align:left;width:100%;height:36px;color:var(--el-text-color-primary);background-color:#fff;margin:0;padding:0 10px;font-size:14px;font-weight:400;line-height:36px;position:absolute;bottom:0;left:0;overflow:hidden}.el-upload-cover+.el-upload__inner{opacity:0;z-index:1;position:relative}.cfg-alert[data-v-7b1912b1]{margin-bottom:12px}.ml[data-v-7b1912b1]{margin-left:6px}.upload-hint[data-v-7b1912b1]{display:flex;align-items:center;gap:8px;padding:12px;color:var(--el-text-color-regular, rgba(232,215,245,.7))}.result-panel[data-v-7b1912b1]{margin-top:8px}.ai-text[data-v-7b1912b1]{color:var(--el-text-color-primary, rgba(232,215,245,.85));padding:6px 0;white-space:pre-wrap}.ai-stat[data-v-7b1912b1]{padding:6px 0;color:var(--el-text-color-primary, rgba(232,215,245,.85))}.ai-stat b[data-v-7b1912b1]{color:var(--mg-accent, #c4a4ff)}.proj-browse-dialog[data-v-411e65f0] .el-dialog__header{padding:14px 20px;margin-right:0;border-bottom:1px solid rgba(170,110,250,.15)}.proj-browse-dialog[data-v-411e65f0] .el-dialog__title{font-weight:600;font-size:14px;color:#3c1e6ef2}.proj-browse-dialog[data-v-411e65f0] .el-dialog__body{padding:12px 16px 8px}.proj-browse[data-v-411e65f0]{display:flex;flex-direction:column;gap:10px}.proj-browse-toolbar[data-v-411e65f0]{display:flex;gap:6px;align-items:center}.proj-icon-btn[data-v-411e65f0]{appearance:none;border:1px solid rgba(170,110,250,.25);background:#f5ebffa6;color:#502882d9;width:30px;height:30px;border-radius:6px;cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;transition:background .14s,border-color .14s,color .14s}.proj-icon-btn[data-v-411e65f0]:hover:not(:disabled){background:#aa6efa33;border-color:#aa6efa8c;color:#280a5af2}.proj-icon-btn[data-v-411e65f0]:disabled{opacity:.4;cursor:not-allowed}.proj-icon[data-v-411e65f0]{font-size:14px;line-height:1}.proj-path-input[data-v-411e65f0]{flex:1}.proj-path-prefix[data-v-411e65f0]{font-size:12px;color:#7850b4b3}.proj-error[data-v-411e65f0]{margin:0}.proj-browse-body[data-v-411e65f0]{display:grid;grid-template-columns:220px 1fr;gap:10px;height:400px;border:1px solid rgba(170,110,250,.18);border-radius:8px;overflow:hidden;background:#faf5ff80}.proj-browse-side[data-v-411e65f0]{display:flex;flex-direction:column;border-right:1px solid rgba(170,110,250,.15);background:#f5eeffa6}.proj-side-title[data-v-411e65f0]{font-size:11px;letter-spacing:1px;color:#7850b4d9;font-weight:600;text-transform:uppercase;padding:8px 10px;border-bottom:1px solid rgba(170,110,250,.1);background:#ffffff73}.proj-side-scroll[data-v-411e65f0]{flex:1}.proj-side-section[data-v-411e65f0]{margin-top:10px;padding:0 6px}.proj-side-section[data-v-411e65f0]:first-child{margin-top:0}.proj-side-section-title[data-v-411e65f0]{font-size:10.5px;color:#7850b4b3;padding:6px 6px 2px;letter-spacing:.5px}.proj-side-btn[data-v-411e65f0]{appearance:none;border:0;background:transparent;width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:5px;font-size:12.5px;color:#3c1e6eeb;cursor:pointer;text-align:left;transition:background .12s}.proj-side-btn[data-v-411e65f0]:hover{background:#aa6efa2e}.proj-side-btn--active[data-v-411e65f0]{background:#aa6efa52;color:#fff}.proj-side-cwd[data-v-411e65f0]{margin:6px;background:#aa6efa24;border:1px solid rgba(170,110,250,.3)}.proj-side-cwd[data-v-411e65f0]:hover{background:#aa6efa47}.proj-side-icon[data-v-411e65f0]{width:16px;flex:none;text-align:center}.proj-side-text[data-v-411e65f0]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-side-empty[data-v-411e65f0]{font-size:11.5px;color:#785aa08c;padding:8px 12px;text-align:center}.proj-browse-main[data-v-411e65f0]{padding:0;overflow:hidden}.proj-browse-table[data-v-411e65f0]{width:100%}.proj-file-icon[data-v-411e65f0]{font-size:14px}.proj-file-name[data-v-411e65f0]{color:#280a5af2;font-weight:500;font-size:12.5px}.proj-mute[data-v-411e65f0]{color:#785aa0b3;font-size:11.5px}.proj-browse-footer[data-v-411e65f0]{display:flex;align-items:center;gap:8px;padding:4px 0}.proj-footer-label[data-v-411e65f0]{font-size:12px;color:#502882d9;font-weight:500;flex:none;min-width:64px}.proj-manual-input[data-v-411e65f0]{flex:1}.proj-footer-type[data-v-411e65f0]{font-size:11.5px;color:#785aa0b3;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.proj-footer-bar[data-v-411e65f0]{display:flex;align-items:center;justify-content:space-between}.proj-footer-tip[data-v-411e65f0]{font-size:11.5px;color:#785aa0b3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:460px}.map-editor-page[data-v-a161d7d3]{height:calc(100vh - 56px);display:flex;flex-direction:column;background:radial-gradient(ellipse at 50% 40%,#2d1456,#1a0930,#0f0420);color:#e8d7f5e6}.me-body[data-v-a161d7d3]{flex:1;display:flex;min-height:0}.me-center[data-v-a161d7d3]{flex:1;min-width:0;display:flex}.me-center[data-v-a161d7d3] .workspace-3d-wrap{flex:1;height:100%;border:0;border-radius:0;min-height:0} diff --git a/MiGu.Server/wwwroot/assets/MapMonitorConfigView-lSEClylU.js b/MiGu.Server/wwwroot/assets/MapMonitorConfigView-CRLVKr09.js similarity index 96% rename from MiGu.Server/wwwroot/assets/MapMonitorConfigView-lSEClylU.js rename to MiGu.Server/wwwroot/assets/MapMonitorConfigView-CRLVKr09.js index cdae72b..7dd5dd2 100644 --- a/MiGu.Server/wwwroot/assets/MapMonitorConfigView-lSEClylU.js +++ b/MiGu.Server/wwwroot/assets/MapMonitorConfigView-CRLVKr09.js @@ -1 +1 @@ -import{aG as P,b7 as d,aC as f,az as r,bo as S,aF as c,bH as s,aE as i,ac as D,aA as g,s as H,r as F,aB as B,v as X,ah as G,bh as O,u as q,E as Q,av as $,aj as K,bf as V,b5 as R,X as k,be as j,t as W,ab as Y,a8 as Z,bI as ee,by as te,br as I,bg as ae,ar as le}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as se}from"./PermissionGuard-DhAzkl-X.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as J,r as L,e as ne}from"./reflection-BmVSriDn.js";/* empty css */const oe={class:"mmcg"},ie={class:"mmcg-head"},ce={class:"mmcg-title"},de={key:0,class:"mmcg-empty muted"},re={key:2,class:"mmcg-orphans"},ue={class:"orphan-list"},me=P({__name:"MapMonitorConfigGroup",props:{title:{},available:{},selected:{},emptyTip:{}},emits:["update:selected"],setup(p,{emit:M}){const n=p,m=M,_=$(()=>n.available.length?n.selected.length?`${n.selected.length} / ${n.available.length}`:`白名单空 = 显示全部 (${n.available.length})`:"空"),a=$(()=>n.selected.filter(u=>!n.available.includes(u))),b=$(()=>n.available.length>n.selected.length);function y(u){const e=[...u.filter(l=>typeof l=="string"),...a.value];m("update:selected",e)}function E(){m("update:selected",[...n.available,...a.value])}function h(){m("update:selected",[...a.value])}function w(u){m("update:selected",n.selected.filter(t=>t!==u))}function z(){m("update:selected",n.selected.filter(u=>n.available.includes(u)))}return(u,t)=>{const e=D,l=F,x=H,N=q,T=X,U=Q;return d(),f("section",oe,[r("header",ie,[r("span",ce,S(p.title),1),c(e,{size:"small",effect:"plain",type:"info"},{default:s(()=>[i(S(_.value),1)]),_:1}),t[2]||(t[2]=r("div",{class:"spacer"},null,-1)),p.available.length?(d(),g(x,{key:0},{default:s(()=>[c(l,{size:"small",disabled:!b.value,onClick:E},{default:s(()=>[...t[0]||(t[0]=[i("全选",-1)])]),_:1},8,["disabled"]),c(l,{size:"small",disabled:!p.selected.length,onClick:h},{default:s(()=>[...t[1]||(t[1]=[i("清空",-1)])]),_:1},8,["disabled"])]),_:1})):B("",!0)]),p.available.length?(d(),g(T,{key:1,"model-value":p.selected,class:"mmcg-grid","onUpdate:modelValue":y},{default:s(()=>[(d(!0),f(G,null,O(p.available,v=>(d(),g(N,{key:v,value:v,label:v,class:"mmcg-cb"},null,8,["value","label"]))),128))]),_:1},8,["model-value"])):(d(),f("p",de,S(p.emptyTip),1)),a.value.length?(d(),f("div",re,[c(U,{type:"warning",closable:!1,"show-icon":"",title:`检测到 ${a.value.length} 个残留键(后端已经不再暴露,但仍在白名单中)`},{default:s(()=>[r("div",ue,[(d(!0),f(G,null,O(a.value,v=>(d(),g(e,{key:v,type:"warning",size:"small",closable:"",onClose:o=>w(v)},{default:s(()=>[i(S(v),1)]),_:2},1032,["onClose"]))),128)),c(l,{link:"",type:"warning",size:"small",onClick:z},{default:s(()=>[...t[3]||(t[3]=[i("一键清理全部残留",-1)])]),_:1})])]),_:1},8,["title"])])):B("",!0)])}}}),A=K(me,[["__scopeId","data-v-242bdaa0"]]),pe={class:"mmc-header"},ve={class:"mmc-tab-body"},fe=P({__name:"MapMonitorConfigView",setup(p){const M=[{value:"car",label:"车辆 (Car)"},{value:"site",label:"站点 (Site)"},{value:"track",label:"路径 (Track)"}],n=V("car"),m=V(!1),_=V(!1),a=j(J()),b=j(ne()),y=V(JSON.stringify(J())),E=$(()=>y.value!==JSON.stringify(a));function h(t,e){for(const l of M)t[l.value].fields=[...e[l.value]?.fields??[]],t[l.value].status=[...e[l.value]?.status??[]],t[l.value].methods=[...e[l.value]?.methods??[]]}async function w(t=!1){m.value=!0;try{const e=await L.getMonitorConfig();h(a,e.config),h(b,e.available),y.value=JSON.stringify(a),t&&k.success("已重载")}catch(e){k.error(`加载失败:${e instanceof Error?e.message:String(e)}`)}finally{m.value=!1}}async function z(){_.value=!0;try{const t=await L.saveMonitorConfig({car:{...a.car},site:{...a.site},track:{...a.track}});h(a,t),y.value=JSON.stringify(a),k.success("已保存(已写入 simple.json)")}catch(t){k.error(`保存失败:${t instanceof Error?t.message:String(t)}`)}finally{_.value=!1}}function u(t,e,l){a[t][e]=[...l]}return R(()=>w()),(t,e)=>{const l=D,x=F,N=Z,T=Y,U=W,v=te;return d(),g(se,{"widget-id":"ConfigCenter"},{default:s(()=>[c(U,{shadow:"never",class:"mmc-card"},{header:s(()=>[r("div",pe,[e[6]||(e[6]=r("span",{class:"mmc-title"},"地图监控配置",-1)),c(l,{size:"small",effect:"plain"},{default:s(()=>[...e[2]||(e[2]=[i("section=map-monitor",-1)])]),_:1}),E.value?(d(),g(l,{key:0,size:"small",type:"warning",effect:"dark"},{default:s(()=>[...e[3]||(e[3]=[i("未保存",-1)])]),_:1})):B("",!0),e[7]||(e[7]=r("div",{class:"spacer"},null,-1)),c(x,{size:"small",icon:I(ae),loading:m.value,onClick:e[0]||(e[0]=o=>w(!0))},{default:s(()=>[...e[4]||(e[4]=[i("重载",-1)])]),_:1},8,["icon","loading"]),c(x,{size:"small",type:"primary",icon:I(le),loading:_.value,disabled:!E.value,onClick:z},{default:s(()=>[...e[5]||(e[5]=[i(" 保存 ",-1)])]),_:1},8,["icon","loading","disabled"])])]),default:s(()=>[e[8]||(e[8]=r("p",{class:"mmc-desc"},[i(" 勾选「地图监控」右侧选中信息面板要展示的内容白名单(按对象类型 - 车辆 / 站点 / 路径 分组)。 三组分别控制 "),r("b",null,"属性"),i("、"),r("b",null,"状态"),i("、"),r("b",null,"动作"),i(" Tab 里可见的字段 / 状态项 / 可执行方法。 每组留空 = 显示全部;勾选任何一项即进入白名单模式(仅显示已勾选)。保存后直接写入 SimpleLite 的 "),r("code",null,"simple.json"),i(" ("),r("code",null,"Configuration.conf.monitorVisibility"),i(")。 ")],-1)),c(T,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=o=>n.value=o),class:"mmc-tabs"},{default:s(()=>[(d(),f(G,null,O(M,o=>c(N,{key:o.value,label:o.label,name:o.value},{default:s(()=>[ee((d(),f("div",ve,[c(A,{title:"属性字段(Properties)",available:b[o.value].fields,selected:a[o.value].fields,"empty-tip":"该类型暂未发现任何 [FieldMember]。在 SimpleLite 端添加字段后点重载会刷新。","onUpdate:selected":C=>u(o.value,"fields",C)},null,8,["available","selected","onUpdate:selected"]),c(A,{title:"状态项(Status)",available:b[o.value].status,selected:a[o.value].status,"empty-tip":"该类型暂未发现任何 status 字段(来自 obj.status 反射)。","onUpdate:selected":C=>u(o.value,"status",C)},null,8,["available","selected","onUpdate:selected"]),c(A,{title:"可执行动作(Methods)",available:b[o.value].methods,selected:a[o.value].methods,"empty-tip":"该类型暂未发现任何 [MethodMember] 方法。","onUpdate:selected":C=>u(o.value,"methods",C)},null,8,["available","selected","onUpdate:selected"])])),[[v,m.value]])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1})}}}),ze=K(fe,[["__scopeId","data-v-4d3be43b"]]);export{ze as default}; +import{aG as P,b7 as d,aC as f,az as r,bo as S,aF as c,bH as s,aE as i,ac as D,aA as g,s as H,r as F,aB as B,v as X,ah as G,bh as O,u as q,E as Q,av as $,aj as K,bf as V,b5 as R,X as k,be as j,t as W,ab as Y,a8 as Z,bI as ee,by as te,br as I,bg as ae,ar as le}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as se}from"./PermissionGuard-DxbOGfWF.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as J,r as L,e as ne}from"./reflection-CTDOoTn5.js";/* empty css */const oe={class:"mmcg"},ie={class:"mmcg-head"},ce={class:"mmcg-title"},de={key:0,class:"mmcg-empty muted"},re={key:2,class:"mmcg-orphans"},ue={class:"orphan-list"},me=P({__name:"MapMonitorConfigGroup",props:{title:{},available:{},selected:{},emptyTip:{}},emits:["update:selected"],setup(p,{emit:M}){const n=p,m=M,_=$(()=>n.available.length?n.selected.length?`${n.selected.length} / ${n.available.length}`:`白名单空 = 显示全部 (${n.available.length})`:"空"),a=$(()=>n.selected.filter(u=>!n.available.includes(u))),b=$(()=>n.available.length>n.selected.length);function y(u){const e=[...u.filter(l=>typeof l=="string"),...a.value];m("update:selected",e)}function E(){m("update:selected",[...n.available,...a.value])}function h(){m("update:selected",[...a.value])}function w(u){m("update:selected",n.selected.filter(t=>t!==u))}function z(){m("update:selected",n.selected.filter(u=>n.available.includes(u)))}return(u,t)=>{const e=D,l=F,x=H,N=q,T=X,U=Q;return d(),f("section",oe,[r("header",ie,[r("span",ce,S(p.title),1),c(e,{size:"small",effect:"plain",type:"info"},{default:s(()=>[i(S(_.value),1)]),_:1}),t[2]||(t[2]=r("div",{class:"spacer"},null,-1)),p.available.length?(d(),g(x,{key:0},{default:s(()=>[c(l,{size:"small",disabled:!b.value,onClick:E},{default:s(()=>[...t[0]||(t[0]=[i("全选",-1)])]),_:1},8,["disabled"]),c(l,{size:"small",disabled:!p.selected.length,onClick:h},{default:s(()=>[...t[1]||(t[1]=[i("清空",-1)])]),_:1},8,["disabled"])]),_:1})):B("",!0)]),p.available.length?(d(),g(T,{key:1,"model-value":p.selected,class:"mmcg-grid","onUpdate:modelValue":y},{default:s(()=>[(d(!0),f(G,null,O(p.available,v=>(d(),g(N,{key:v,value:v,label:v,class:"mmcg-cb"},null,8,["value","label"]))),128))]),_:1},8,["model-value"])):(d(),f("p",de,S(p.emptyTip),1)),a.value.length?(d(),f("div",re,[c(U,{type:"warning",closable:!1,"show-icon":"",title:`检测到 ${a.value.length} 个残留键(后端已经不再暴露,但仍在白名单中)`},{default:s(()=>[r("div",ue,[(d(!0),f(G,null,O(a.value,v=>(d(),g(e,{key:v,type:"warning",size:"small",closable:"",onClose:o=>w(v)},{default:s(()=>[i(S(v),1)]),_:2},1032,["onClose"]))),128)),c(l,{link:"",type:"warning",size:"small",onClick:z},{default:s(()=>[...t[3]||(t[3]=[i("一键清理全部残留",-1)])]),_:1})])]),_:1},8,["title"])])):B("",!0)])}}}),A=K(me,[["__scopeId","data-v-242bdaa0"]]),pe={class:"mmc-header"},ve={class:"mmc-tab-body"},fe=P({__name:"MapMonitorConfigView",setup(p){const M=[{value:"car",label:"车辆 (Car)"},{value:"site",label:"站点 (Site)"},{value:"track",label:"路径 (Track)"}],n=V("car"),m=V(!1),_=V(!1),a=j(J()),b=j(ne()),y=V(JSON.stringify(J())),E=$(()=>y.value!==JSON.stringify(a));function h(t,e){for(const l of M)t[l.value].fields=[...e[l.value]?.fields??[]],t[l.value].status=[...e[l.value]?.status??[]],t[l.value].methods=[...e[l.value]?.methods??[]]}async function w(t=!1){m.value=!0;try{const e=await L.getMonitorConfig();h(a,e.config),h(b,e.available),y.value=JSON.stringify(a),t&&k.success("已重载")}catch(e){k.error(`加载失败:${e instanceof Error?e.message:String(e)}`)}finally{m.value=!1}}async function z(){_.value=!0;try{const t=await L.saveMonitorConfig({car:{...a.car},site:{...a.site},track:{...a.track}});h(a,t),y.value=JSON.stringify(a),k.success("已保存(已写入 simple.json)")}catch(t){k.error(`保存失败:${t instanceof Error?t.message:String(t)}`)}finally{_.value=!1}}function u(t,e,l){a[t][e]=[...l]}return R(()=>w()),(t,e)=>{const l=D,x=F,N=Z,T=Y,U=W,v=te;return d(),g(se,{"widget-id":"ConfigCenter"},{default:s(()=>[c(U,{shadow:"never",class:"mmc-card"},{header:s(()=>[r("div",pe,[e[6]||(e[6]=r("span",{class:"mmc-title"},"地图监控配置",-1)),c(l,{size:"small",effect:"plain"},{default:s(()=>[...e[2]||(e[2]=[i("section=map-monitor",-1)])]),_:1}),E.value?(d(),g(l,{key:0,size:"small",type:"warning",effect:"dark"},{default:s(()=>[...e[3]||(e[3]=[i("未保存",-1)])]),_:1})):B("",!0),e[7]||(e[7]=r("div",{class:"spacer"},null,-1)),c(x,{size:"small",icon:I(ae),loading:m.value,onClick:e[0]||(e[0]=o=>w(!0))},{default:s(()=>[...e[4]||(e[4]=[i("重载",-1)])]),_:1},8,["icon","loading"]),c(x,{size:"small",type:"primary",icon:I(le),loading:_.value,disabled:!E.value,onClick:z},{default:s(()=>[...e[5]||(e[5]=[i(" 保存 ",-1)])]),_:1},8,["icon","loading","disabled"])])]),default:s(()=>[e[8]||(e[8]=r("p",{class:"mmc-desc"},[i(" 勾选「地图监控」右侧选中信息面板要展示的内容白名单(按对象类型 - 车辆 / 站点 / 路径 分组)。 三组分别控制 "),r("b",null,"属性"),i("、"),r("b",null,"状态"),i("、"),r("b",null,"动作"),i(" Tab 里可见的字段 / 状态项 / 可执行方法。 每组留空 = 显示全部;勾选任何一项即进入白名单模式(仅显示已勾选)。保存后直接写入 SimpleLite 的 "),r("code",null,"simple.json"),i(" ("),r("code",null,"Configuration.conf.monitorVisibility"),i(")。 ")],-1)),c(T,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=o=>n.value=o),class:"mmc-tabs"},{default:s(()=>[(d(),f(G,null,O(M,o=>c(N,{key:o.value,label:o.label,name:o.value},{default:s(()=>[ee((d(),f("div",ve,[c(A,{title:"属性字段(Properties)",available:b[o.value].fields,selected:a[o.value].fields,"empty-tip":"该类型暂未发现任何 [FieldMember]。在 SimpleLite 端添加字段后点重载会刷新。","onUpdate:selected":C=>u(o.value,"fields",C)},null,8,["available","selected","onUpdate:selected"]),c(A,{title:"状态项(Status)",available:b[o.value].status,selected:a[o.value].status,"empty-tip":"该类型暂未发现任何 status 字段(来自 obj.status 反射)。","onUpdate:selected":C=>u(o.value,"status",C)},null,8,["available","selected","onUpdate:selected"]),c(A,{title:"可执行动作(Methods)",available:b[o.value].methods,selected:a[o.value].methods,"empty-tip":"该类型暂未发现任何 [MethodMember] 方法。","onUpdate:selected":C=>u(o.value,"methods",C)},null,8,["available","selected","onUpdate:selected"])])),[[v,m.value]])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1})}}}),ze=K(fe,[["__scopeId","data-v-4d3be43b"]]);export{ze as default}; diff --git a/MiGu.Server/wwwroot/assets/MapMonitorView-C1g906ic.css b/MiGu.Server/wwwroot/assets/MapMonitorView-_OYIzKiz.css similarity index 91% rename from MiGu.Server/wwwroot/assets/MapMonitorView-C1g906ic.css rename to MiGu.Server/wwwroot/assets/MapMonitorView-_OYIzKiz.css index 18a485b..fcedc30 100644 --- a/MiGu.Server/wwwroot/assets/MapMonitorView-C1g906ic.css +++ b/MiGu.Server/wwwroot/assets/MapMonitorView-_OYIzKiz.css @@ -1 +1 @@ -.vehicle-monitor[data-v-c1cc74ad]{display:flex;flex-direction:column;gap:6px;min-height:0;height:100%;overflow:hidden}.overview-row[data-v-c1cc74ad]{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;flex:none}.overview-item[data-v-c1cc74ad]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:6px;padding:4px 2px;text-align:center;transition:var(--mg-transition, all .2s ease)}.overview-item[data-v-c1cc74ad]:hover{background:rgba(var(--mg-accent-rgb, 142, 200, 252),.14);border-color:rgba(var(--mg-accent-rgb, 142, 200, 252),.4)}.overview-num[data-v-c1cc74ad]{font-size:15px;font-weight:600;color:var(--mg-text-light);line-height:1.2}.overview-num.online[data-v-c1cc74ad]{color:var(--mg-accent);text-shadow:0 0 12px rgba(var(--mg-accent-rgb),.55)}.overview-num.running[data-v-c1cc74ad]{color:var(--mg-status-success);text-shadow:0 0 12px rgba(var(--mg-status-success-rgb),.45)}.overview-num.charging[data-v-c1cc74ad]{color:var(--mg-primary-hover);text-shadow:0 0 12px rgba(var(--mg-primary-hover-rgb),.55)}.overview-num.fault[data-v-c1cc74ad]{color:var(--mg-status-danger);text-shadow:0 0 12px rgba(var(--mg-status-danger-rgb),.5)}.overview-label[data-v-c1cc74ad]{font-size:11px;color:var(--mg-text-muted);margin-top:2px}.toolbar[data-v-c1cc74ad]{display:flex;gap:6px;flex:none}.toolbar .search[data-v-c1cc74ad]{flex:1;min-width:0}.toolbar .filter[data-v-c1cc74ad]{width:100px;flex:none}.vehicle-list[data-v-c1cc74ad]{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding-right:2px}.vehicle-row[data-v-c1cc74ad]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:4px;padding:4px 6px;cursor:pointer;display:flex;flex-direction:column;gap:2px;flex:none;transition:all .18s ease}.vehicle-row[data-v-c1cc74ad]:hover{background:rgba(var(--mg-accent-rgb, 142, 200, 252),.12);border-color:rgba(var(--mg-accent-rgb, 142, 200, 252),.35)}.vehicle-row.is-selected[data-v-c1cc74ad]{background:#6d28d952;border-color:#a78bfabf;box-shadow:inset 3px 0 #c4b5fdf2}.vehicle-head[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px}.vid[data-v-c1cc74ad]{font-size:10.5px;color:var(--mg-text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;flex:none}.vname[data-v-c1cc74ad]{flex:1;min-width:0;color:var(--mg-text-light);font-weight:600;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.state-tag[data-v-c1cc74ad]{display:inline-flex;align-items:center;gap:4px;flex:none}.dot[data-v-c1cc74ad]{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor}.dot-running[data-v-c1cc74ad]{color:#6fcd45;box-shadow:0 0 8px #6fcd45;animation:pulse-c1cc74ad 1.5s infinite}.dot-charging[data-v-c1cc74ad]{color:var(--mg-primary-hover);box-shadow:0 0 8px var(--mg-primary-hover)}.dot-paused[data-v-c1cc74ad]{color:#e6a23c;box-shadow:0 0 6px #e6a23c}.dot-fault[data-v-c1cc74ad]{color:#ff7396;box-shadow:0 0 8px #ff7396;animation:pulse-c1cc74ad .9s infinite}.dot-offline[data-v-c1cc74ad]{color:var(--mg-text-faint)}.dot-idle[data-v-c1cc74ad]{color:var(--mg-accent);box-shadow:0 0 6px rgba(var(--mg-accent-rgb),.6)}@keyframes pulse-c1cc74ad{0%,to{opacity:1}50%{opacity:.35}}.vehicle-sub[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;font-size:10.5px}.battery-mini[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;flex:0 0 44%;min-width:0}.mission-mini[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.battery-bar[data-v-c1cc74ad]{flex:1;min-width:0}.battery-bar[data-v-c1cc74ad] .el-progress-bar__outer{background:var(--mg-veil-3)}.battery-text[data-v-c1cc74ad]{width:34px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;font-size:11.5px;flex:none}.battery-text.low[data-v-c1cc74ad]{color:var(--mg-status-danger)}.battery-text.mid[data-v-c1cc74ad]{color:var(--mg-status-warning)}.battery-text.high[data-v-c1cc74ad]{color:var(--mg-status-success)}.mission-name[data-v-c1cc74ad]{flex:1;min-width:0;color:var(--mg-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mission-name.muted[data-v-c1cc74ad]{color:var(--mg-text-dim)}.mission-tag[data-v-c1cc74ad]{flex:none}.empty[data-v-c1cc74ad]{text-align:center;padding:24px 0;font-size:12px}.muted[data-v-c1cc74ad]{color:var(--mg-text-muted)}.mission-list-panel[data-v-38e00e9c]{display:flex;flex-direction:column;gap:8px;min-height:0;height:100%;position:relative}.toolbar[data-v-38e00e9c]{display:flex;align-items:center;gap:8px;flex:none;flex-wrap:wrap}.toolbar .search[data-v-38e00e9c]{flex:1;min-width:120px}.delivery-table[data-v-38e00e9c]{flex:1;min-height:0;width:100%;overflow:hidden}.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__inner-wrapper,.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__header-wrapper,.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__body-wrapper{overflow-x:hidden!important}.mission-list-panel[data-v-38e00e9c] .delivery-table table{table-layout:fixed;width:100%!important}.mission-list-panel[data-v-38e00e9c] .delivery-table th.el-table__cell,.mission-list-panel[data-v-38e00e9c] .delivery-table td.el-table__cell{padding:3px 2px}.mission-list-panel[data-v-38e00e9c] .delivery-table .cell{padding:0 2px;font-size:11px;line-height:1.35}.mission-list-panel[data-v-38e00e9c] .delivery-table th .cell{font-size:11px;font-weight:600;white-space:nowrap}.cell-ellipsis[data-v-38e00e9c]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-pill[data-v-38e00e9c]{display:inline-block;max-width:100%;padding:0 3px;border-radius:3px;font-size:10px;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-pill--success[data-v-38e00e9c]{color:var(--mg-status-success)}.status-pill--primary[data-v-38e00e9c]{color:var(--mg-status-info)}.status-pill--warning[data-v-38e00e9c]{color:var(--mg-status-warning)}.status-pill--danger[data-v-38e00e9c]{color:var(--mg-status-danger)}.status-pill--info[data-v-38e00e9c]{color:var(--mg-text-muted)}.mission-list-panel[data-v-38e00e9c] .el-table,.mission-list-panel[data-v-38e00e9c] .el-table th.el-table__cell,.mission-list-panel[data-v-38e00e9c] .el-table .cell{color:var(--mg-text-light);background:transparent}.mission-list-panel[data-v-38e00e9c] .el-table tr{background:#ffffff08}.mission-list-panel[data-v-38e00e9c] .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#ffffff0f}.mission-list-panel[data-v-38e00e9c] .is-selected-row td{background:#6d28d959!important}.mission-list-panel[data-v-38e00e9c] .is-overdue-row td{color:var(--mg-status-danger)!important}.empty[data-v-38e00e9c]{text-align:center;padding:16px 0;font-size:12px}.muted[data-v-38e00e9c]{color:var(--mg-text-dim)}.ctx-menu[data-v-38e00e9c]{position:fixed;z-index:9000;min-width:128px;padding:4px 0;background:#1e1e2e;border:1px solid rgba(255,255,255,.15);border-radius:8px;box-shadow:0 8px 24px #00000073}.ctx-item[data-v-38e00e9c]{display:block;width:100%;padding:8px 14px;border:none;background:transparent;color:#fff;font-size:13px;text-align:left;cursor:pointer}.ctx-item[data-v-38e00e9c]:hover:not(:disabled){background:rgba(var(--mg-accent-rgb, 142, 200, 252),.2)}.ctx-item[data-v-38e00e9c]:disabled{color:#ffffff59;cursor:not-allowed}.hint[data-v-1e1b7025]{margin:0 0 10px;font-size:13px;color:#3c1e6ebf}.filter-input[data-v-1e1b7025]{margin-bottom:8px}.site-scroll[data-v-1e1b7025]{border:1px solid rgba(170,110,250,.18);border-radius:8px}.site-row[data-v-1e1b7025]{display:flex;gap:8px;width:100%;padding:8px 10px;border:none;border-bottom:1px solid rgba(170,110,250,.1);background:transparent;color:#3c1e6eeb;text-align:left;cursor:pointer;transition:background .12s ease}.site-row[data-v-1e1b7025]:hover{background:#a78bfa26}.site-row.active[data-v-1e1b7025]{background:#7c3aed29;color:#5b21b6;font-weight:600;box-shadow:inset 3px 0 #7c3aed}.sid[data-v-1e1b7025]{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:#7c3aed;flex:none}.sname[data-v-1e1b7025]{flex:1;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty[data-v-1e1b7025]{padding:20px;text-align:center;color:#785aa0b3;font-size:12px}.monitor-selection[data-v-c9236d99]{display:flex;flex-direction:column;min-height:0;height:100%}.pane[data-v-c9236d99]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px;padding-right:2px}.pane-loading[data-v-c9236d99]{display:flex;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--mg-text-muted);font-size:13px}.empty-hint[data-v-c9236d99]{display:flex;flex-direction:column;gap:4px;padding:24px 8px;text-align:center}.empty-title[data-v-c9236d99]{font-size:13px;color:var(--mg-text-light);font-weight:500}.empty-desc[data-v-c9236d99]{font-size:11.5px;color:var(--mg-text-dim)}.card[data-v-c9236d99]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:8px;padding:8px 10px;flex:none}.card--header[data-v-c9236d99]{background:linear-gradient(140deg,#aa6efa33,#461e6e14);border-color:#aa6efa47}.card--actions[data-v-c9236d99]{background:#8c50c814;border-color:#aa6efa38}.card-hd[data-v-c9236d99]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-size:11px;font-weight:600;letter-spacing:.8px;color:var(--mg-text-muted);text-transform:uppercase}.card-hd .meta[data-v-c9236d99]{font-size:10px;font-weight:400;color:var(--mg-text-dim);text-transform:none;letter-spacing:0}.title-row[data-v-c9236d99]{display:flex;align-items:center;gap:6px;margin-bottom:4px}.id-tag[data-v-c9236d99]{font-size:11px;font-weight:600;padding:1px 7px;border-radius:4px;background:var(--mg-primary);color:#fff}.type-tag[data-v-c9236d99]{font-size:11px;color:var(--mg-text-muted)}.name-line[data-v-c9236d99]{font-size:14px;font-weight:600;color:var(--mg-text-light);line-height:1.3;word-break:break-all}.sub-line[data-v-c9236d99]{margin-top:2px;font-size:11px;color:var(--mg-text-muted);font-family:ui-monospace,Consolas,monospace}.kv-grid[data-v-c9236d99]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.kv-list[data-v-c9236d99]{display:flex;flex-direction:column;gap:2px}.kv-row[data-v-c9236d99]{display:grid;grid-template-columns:minmax(72px,38%) 1fr;gap:8px;align-items:start;font-size:12px;line-height:1.35;padding:4px 0;border-bottom:1px solid var(--mg-divider)}.kv-row[data-v-c9236d99]:last-child{border-bottom:none}.kv-row.is-warn .v[data-v-c9236d99],.kv-row .v.is-low-battery[data-v-c9236d99]{color:var(--mg-status-danger)}.kv[data-v-c9236d99]{display:flex;flex-direction:column;gap:2px;min-width:0}.k[data-v-c9236d99],.kv-row .k[data-v-c9236d99]{color:var(--mg-text-muted);font-size:11px;word-break:break-word}.v[data-v-c9236d99],.kv-row .v[data-v-c9236d99]{color:var(--mg-text-light);word-break:break-word;font-size:12px}.mono[data-v-c9236d99]{font-family:ui-monospace,Consolas,monospace;font-size:11.5px}.action-grid[data-v-c9236d99]{display:grid;grid-template-columns:1fr 1fr;gap:6px}.action-grid--vehicle[data-v-c9236d99]{grid-template-columns:repeat(auto-fill,minmax(118px,1fr))}.action-btn[data-v-c9236d99]{appearance:none;cursor:pointer;border:1px solid var(--mg-action-border);background:var(--mg-action-bg);color:#fff;font-size:12px;font-weight:600;padding:7px 8px;border-radius:6px;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease;text-align:center;line-height:1.25}.action-btn--goto[data-v-c9236d99]{border-color:#fac878a6;background:#78461473}.action-btn[data-v-c9236d99]:hover:not(:disabled){background:var(--mg-action-bg-hover);border-color:var(--mg-action-border-hi);box-shadow:0 2px 8px #00000040}.action-btn--goto[data-v-c9236d99]:hover:not(:disabled){background:#a0641ebf;border-color:#ffdc96e6}.action-btn[data-v-c9236d99]:disabled{opacity:.55;cursor:progress}:root[data-theme=fame-lavender] .action-btn--goto[data-v-c9236d99]{border-color:#b45309;background:#b45309}:root[data-theme=fame-lavender] .action-btn--goto[data-v-c9236d99]:hover:not(:disabled){border-color:#92400e;background:#92400e}.muted-line[data-v-c9236d99]{font-size:11.5px;color:var(--mg-text-dim);line-height:1.4;padding:2px 0}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.floating-alarm-card[data-v-0b6ee97c]{position:absolute;width:320px;padding:10px 12px;border-radius:10px;background:#140828eb;backdrop-filter:blur(10px);box-shadow:0 10px 32px #0a02108c,0 0 0 1px #ffffff14 inset;color:#e8d7f5f2;font-size:13px;cursor:grab;user-select:none;z-index:1000;transition:box-shadow .2s,transform .2s}.floating-alarm-card.dragging[data-v-0b6ee97c]{cursor:grabbing;box-shadow:0 14px 40px #0a0210b3}.fac-header[data-v-0b6ee97c]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.fac-dot[data-v-0b6ee97c]{width:10px;height:10px;border-radius:999px;background:var(--lvl-color, #67c23a);box-shadow:0 0 8px var(--lvl-color, #67c23a)}.fac-title[data-v-0b6ee97c]{flex:1;font-weight:600}.fac-time[data-v-0b6ee97c]{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;color:#e8d7f5a6}.fac-close[data-v-0b6ee97c]{cursor:pointer;opacity:.7}.fac-close[data-v-0b6ee97c]:hover{opacity:1}.fac-body[data-v-0b6ee97c]{padding:4px 0 6px}.fac-info[data-v-0b6ee97c]{line-height:1.4;word-break:break-all}.fac-coord[data-v-0b6ee97c]{font-size:11.5px;color:#e8d7f5b3;margin-top:4px;font-family:ui-monospace,Menlo,Consolas,monospace}.fac-actions[data-v-0b6ee97c]{display:flex;gap:6px;justify-content:flex-end}.muted[data-v-0b6ee97c]{color:#e8d7f580}.floating-alarm-card.lvl-info[data-v-0b6ee97c]{--lvl-color: #67c23a}.floating-alarm-card.lvl-warn[data-v-0b6ee97c]{--lvl-color: #e6a23c}.floating-alarm-card.lvl-error[data-v-0b6ee97c]{--lvl-color: #f56c6c}.floating-alarm-card.lvl-critical[data-v-0b6ee97c]{--lvl-color: #d63a3a}.floating-alarm-stack[data-v-c37fdeb1]{position:absolute;inset:0;pointer-events:none}.floating-alarm-stack[data-v-c37fdeb1]>*{pointer-events:auto}.snooze-tray[data-v-c37fdeb1]{position:absolute;right:24px;top:24px}.canvas-toolbar[data-v-968a4c89]{display:flex;align-items:center;gap:6px;padding:6px 10px;background:#00000073;border-top:1px solid rgba(255,255,255,.1);border-bottom-left-radius:var(--mg-radius, 16px);border-bottom-right-radius:var(--mg-radius, 16px);backdrop-filter:blur(10px) saturate(140%);-webkit-backdrop-filter:blur(10px) saturate(140%);flex-wrap:wrap}.canvas-toolbar[data-v-968a4c89] .el-button{display:inline-flex;align-items:center;gap:4px}.btn-label[data-v-968a4c89]{margin-left:2px}.caret[data-v-968a4c89]{margin-left:2px;font-size:10px;opacity:.7}.separator[data-v-968a4c89]{width:1px;height:18px;background:#ffffff2e;margin:0 4px}.toolbar-menu .menu-row[data-v-968a4c89]{display:flex;align-items:center;gap:8px;padding:5px 14px;cursor:pointer;user-select:none;font-size:13px;color:var(--el-text-color-primary)}.toolbar-menu .menu-row[data-v-968a4c89]:hover{background:var(--el-fill-color-light)}.toolbar-menu .menu-row[data-v-968a4c89] .el-checkbox{margin-right:0;pointer-events:none}.layer-menu[data-v-968a4c89]{max-height:320px;overflow-y:auto}.menu-empty[data-v-968a4c89]{padding:10px 14px;color:var(--el-text-color-secondary);font-size:12px}.muted-hint[data-v-968a4c89]{margin:0 0 8px;color:var(--el-text-color-secondary);font-size:12px}.map-monitor-page[data-v-2dbfc203]{display:flex;flex-direction:column;gap:14px;height:calc(100vh - 124px)}.kpi-row[data-v-2dbfc203]{flex:none}.main-row[data-v-2dbfc203]{flex:1;min-height:0}.main-row>.el-col[data-v-2dbfc203]{display:flex;flex-direction:column;min-height:0}.side-col[data-v-2dbfc203]{display:flex;flex-direction:column;gap:12px;min-height:0;height:100%}.side-card[data-v-2dbfc203]{display:flex;flex-direction:column;min-height:0;overflow:hidden}.workbench-card[data-v-2dbfc203]{flex:1 1 0;min-height:0;max-height:52%}.detail-card[data-v-2dbfc203]{flex:1 1 0;min-height:200px}.workbench-card[data-v-2dbfc203] .el-card__body,.detail-card[data-v-2dbfc203] .el-card__body{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.muted[data-v-2dbfc203]{color:var(--mg-text-muted);font-size:12px}.workbench-card[data-v-2dbfc203] .el-card__header,.detail-card[data-v-2dbfc203] .el-card__header{color:var(--mg-text-light)}.workbench-header[data-v-2dbfc203]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}.workbench-tabs[data-v-2dbfc203]{flex:1;min-width:0}.workbench-tabs[data-v-2dbfc203] .el-tabs__header{margin:0}.workbench-tabs[data-v-2dbfc203] .el-tabs__nav-wrap:after{display:none}.workbench-tabs[data-v-2dbfc203] .el-tabs__item{color:var(--mg-text-muted);padding:0 10px;height:32px;line-height:32px}.workbench-tabs[data-v-2dbfc203] .el-tabs__item.is-active{color:var(--mg-text-light)}.workbench-tabs[data-v-2dbfc203] .el-tabs__active-bar{background-color:var(--mg-accent, #8ec8fc)}[data-v-2dbfc203] .el-row.main-row{height:100%}[data-v-2dbfc203] .el-col-16>div{height:100%;min-height:0}.canvas-with-alarms[data-v-2dbfc203]{position:relative;height:100%;min-height:0;flex:1;display:flex;flex-direction:column}.canvas-with-alarms[data-v-2dbfc203] .workspace-3d-wrap{flex:1} +.vehicle-monitor[data-v-c1cc74ad]{display:flex;flex-direction:column;gap:6px;min-height:0;height:100%;overflow:hidden}.overview-row[data-v-c1cc74ad]{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;flex:none}.overview-item[data-v-c1cc74ad]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:6px;padding:4px 2px;text-align:center;transition:var(--mg-transition, all .2s ease)}.overview-item[data-v-c1cc74ad]:hover{background:rgba(var(--mg-accent-rgb, 142, 200, 252),.14);border-color:rgba(var(--mg-accent-rgb, 142, 200, 252),.4)}.overview-num[data-v-c1cc74ad]{font-size:15px;font-weight:600;color:var(--mg-text-light);line-height:1.2}.overview-num.online[data-v-c1cc74ad]{color:var(--mg-accent);text-shadow:0 0 12px rgba(var(--mg-accent-rgb),.55)}.overview-num.running[data-v-c1cc74ad]{color:var(--mg-status-success);text-shadow:0 0 12px rgba(var(--mg-status-success-rgb),.45)}.overview-num.charging[data-v-c1cc74ad]{color:var(--mg-primary-hover);text-shadow:0 0 12px rgba(var(--mg-primary-hover-rgb),.55)}.overview-num.fault[data-v-c1cc74ad]{color:var(--mg-status-danger);text-shadow:0 0 12px rgba(var(--mg-status-danger-rgb),.5)}.overview-label[data-v-c1cc74ad]{font-size:11px;color:var(--mg-text-muted);margin-top:2px}.toolbar[data-v-c1cc74ad]{display:flex;gap:6px;flex:none}.toolbar .search[data-v-c1cc74ad]{flex:1;min-width:0}.toolbar .filter[data-v-c1cc74ad]{width:100px;flex:none}.vehicle-list[data-v-c1cc74ad]{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding-right:2px}.vehicle-row[data-v-c1cc74ad]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:4px;padding:4px 6px;cursor:pointer;display:flex;flex-direction:column;gap:2px;flex:none;transition:all .18s ease}.vehicle-row[data-v-c1cc74ad]:hover{background:rgba(var(--mg-accent-rgb, 142, 200, 252),.12);border-color:rgba(var(--mg-accent-rgb, 142, 200, 252),.35)}.vehicle-row.is-selected[data-v-c1cc74ad]{background:#6d28d952;border-color:#a78bfabf;box-shadow:inset 3px 0 #c4b5fdf2}.vehicle-head[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px}.vid[data-v-c1cc74ad]{font-size:10.5px;color:var(--mg-text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;flex:none}.vname[data-v-c1cc74ad]{flex:1;min-width:0;color:var(--mg-text-light);font-weight:600;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.state-tag[data-v-c1cc74ad]{display:inline-flex;align-items:center;gap:4px;flex:none}.dot[data-v-c1cc74ad]{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor}.dot-running[data-v-c1cc74ad]{color:#6fcd45;box-shadow:0 0 8px #6fcd45;animation:pulse-c1cc74ad 1.5s infinite}.dot-charging[data-v-c1cc74ad]{color:var(--mg-primary-hover);box-shadow:0 0 8px var(--mg-primary-hover)}.dot-paused[data-v-c1cc74ad]{color:#e6a23c;box-shadow:0 0 6px #e6a23c}.dot-fault[data-v-c1cc74ad]{color:#ff7396;box-shadow:0 0 8px #ff7396;animation:pulse-c1cc74ad .9s infinite}.dot-offline[data-v-c1cc74ad]{color:var(--mg-text-faint)}.dot-idle[data-v-c1cc74ad]{color:var(--mg-accent);box-shadow:0 0 6px rgba(var(--mg-accent-rgb),.6)}@keyframes pulse-c1cc74ad{0%,to{opacity:1}50%{opacity:.35}}.vehicle-sub[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;font-size:10.5px}.battery-mini[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;flex:0 0 44%;min-width:0}.mission-mini[data-v-c1cc74ad]{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.battery-bar[data-v-c1cc74ad]{flex:1;min-width:0}.battery-bar[data-v-c1cc74ad] .el-progress-bar__outer{background:var(--mg-veil-3)}.battery-text[data-v-c1cc74ad]{width:34px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;font-size:11.5px;flex:none}.battery-text.low[data-v-c1cc74ad]{color:var(--mg-status-danger)}.battery-text.mid[data-v-c1cc74ad]{color:var(--mg-status-warning)}.battery-text.high[data-v-c1cc74ad]{color:var(--mg-status-success)}.mission-name[data-v-c1cc74ad]{flex:1;min-width:0;color:var(--mg-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mission-name.muted[data-v-c1cc74ad]{color:var(--mg-text-dim)}.mission-tag[data-v-c1cc74ad]{flex:none}.empty[data-v-c1cc74ad]{text-align:center;padding:24px 0;font-size:12px}.muted[data-v-c1cc74ad]{color:var(--mg-text-muted)}.mission-list-panel[data-v-38e00e9c]{display:flex;flex-direction:column;gap:8px;min-height:0;height:100%;position:relative}.toolbar[data-v-38e00e9c]{display:flex;align-items:center;gap:8px;flex:none;flex-wrap:wrap}.toolbar .search[data-v-38e00e9c]{flex:1;min-width:120px}.delivery-table[data-v-38e00e9c]{flex:1;min-height:0;width:100%;overflow:hidden}.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__inner-wrapper,.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__header-wrapper,.mission-list-panel[data-v-38e00e9c] .delivery-table .el-table__body-wrapper{overflow-x:hidden!important}.mission-list-panel[data-v-38e00e9c] .delivery-table table{table-layout:fixed;width:100%!important}.mission-list-panel[data-v-38e00e9c] .delivery-table th.el-table__cell,.mission-list-panel[data-v-38e00e9c] .delivery-table td.el-table__cell{padding:3px 2px}.mission-list-panel[data-v-38e00e9c] .delivery-table .cell{padding:0 2px;font-size:11px;line-height:1.35}.mission-list-panel[data-v-38e00e9c] .delivery-table th .cell{font-size:11px;font-weight:600;white-space:nowrap}.cell-ellipsis[data-v-38e00e9c]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-pill[data-v-38e00e9c]{display:inline-block;max-width:100%;padding:0 3px;border-radius:3px;font-size:10px;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-pill--success[data-v-38e00e9c]{color:var(--mg-status-success)}.status-pill--primary[data-v-38e00e9c]{color:var(--mg-status-info)}.status-pill--warning[data-v-38e00e9c]{color:var(--mg-status-warning)}.status-pill--danger[data-v-38e00e9c]{color:var(--mg-status-danger)}.status-pill--info[data-v-38e00e9c]{color:var(--mg-text-muted)}.mission-list-panel[data-v-38e00e9c] .el-table,.mission-list-panel[data-v-38e00e9c] .el-table th.el-table__cell,.mission-list-panel[data-v-38e00e9c] .el-table .cell{color:var(--mg-text-light);background:transparent}.mission-list-panel[data-v-38e00e9c] .el-table tr{background:#ffffff08}.mission-list-panel[data-v-38e00e9c] .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#ffffff0f}.mission-list-panel[data-v-38e00e9c] .is-selected-row td{background:#6d28d959!important}.mission-list-panel[data-v-38e00e9c] .is-overdue-row td{color:var(--mg-status-danger)!important}.empty[data-v-38e00e9c]{text-align:center;padding:16px 0;font-size:12px}.muted[data-v-38e00e9c]{color:var(--mg-text-dim)}.ctx-menu[data-v-38e00e9c]{position:fixed;z-index:9000;min-width:128px;padding:4px 0;background:#1e1e2e;border:1px solid rgba(255,255,255,.15);border-radius:8px;box-shadow:0 8px 24px #00000073}.ctx-item[data-v-38e00e9c]{display:block;width:100%;padding:8px 14px;border:none;background:transparent;color:#fff;font-size:13px;text-align:left;cursor:pointer}.ctx-item[data-v-38e00e9c]:hover:not(:disabled){background:rgba(var(--mg-accent-rgb, 142, 200, 252),.2)}.ctx-item[data-v-38e00e9c]:disabled{color:#ffffff59;cursor:not-allowed}.hint[data-v-1e1b7025]{margin:0 0 10px;font-size:13px;color:#3c1e6ebf}.filter-input[data-v-1e1b7025]{margin-bottom:8px}.site-scroll[data-v-1e1b7025]{border:1px solid rgba(170,110,250,.18);border-radius:8px}.site-row[data-v-1e1b7025]{display:flex;gap:8px;width:100%;padding:8px 10px;border:none;border-bottom:1px solid rgba(170,110,250,.1);background:transparent;color:#3c1e6eeb;text-align:left;cursor:pointer;transition:background .12s ease}.site-row[data-v-1e1b7025]:hover{background:#a78bfa26}.site-row.active[data-v-1e1b7025]{background:#7c3aed29;color:#5b21b6;font-weight:600;box-shadow:inset 3px 0 #7c3aed}.sid[data-v-1e1b7025]{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:#7c3aed;flex:none}.sname[data-v-1e1b7025]{flex:1;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty[data-v-1e1b7025]{padding:20px;text-align:center;color:#785aa0b3;font-size:12px}.monitor-selection[data-v-c9236d99]{display:flex;flex-direction:column;min-height:0;height:100%}.pane[data-v-c9236d99]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px;padding-right:2px}.pane-loading[data-v-c9236d99]{display:flex;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--mg-text-muted);font-size:13px}.empty-hint[data-v-c9236d99]{display:flex;flex-direction:column;gap:4px;padding:24px 8px;text-align:center}.empty-title[data-v-c9236d99]{font-size:13px;color:var(--mg-text-light);font-weight:500}.empty-desc[data-v-c9236d99]{font-size:11.5px;color:var(--mg-text-dim)}.card[data-v-c9236d99]{background:var(--mg-veil-1);border:1px solid var(--mg-veil-border);border-radius:8px;padding:8px 10px;flex:none}.card--header[data-v-c9236d99]{background:linear-gradient(140deg,#aa6efa33,#461e6e14);border-color:#aa6efa47}.card--actions[data-v-c9236d99]{background:#8c50c814;border-color:#aa6efa38}.card-hd[data-v-c9236d99]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-size:11px;font-weight:600;letter-spacing:.8px;color:var(--mg-text-muted);text-transform:uppercase}.card-hd .meta[data-v-c9236d99]{font-size:10px;font-weight:400;color:var(--mg-text-dim);text-transform:none;letter-spacing:0}.title-row[data-v-c9236d99]{display:flex;align-items:center;gap:6px;margin-bottom:4px}.id-tag[data-v-c9236d99]{font-size:11px;font-weight:600;padding:1px 7px;border-radius:4px;background:var(--mg-primary);color:#fff}.type-tag[data-v-c9236d99]{font-size:11px;color:var(--mg-text-muted)}.name-line[data-v-c9236d99]{font-size:14px;font-weight:600;color:var(--mg-text-light);line-height:1.3;word-break:break-all}.sub-line[data-v-c9236d99]{margin-top:2px;font-size:11px;color:var(--mg-text-muted);font-family:ui-monospace,Consolas,monospace}.kv-grid[data-v-c9236d99]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.kv-list[data-v-c9236d99]{display:flex;flex-direction:column;gap:2px}.kv-row[data-v-c9236d99]{display:grid;grid-template-columns:minmax(72px,38%) 1fr;gap:8px;align-items:start;font-size:12px;line-height:1.35;padding:4px 0;border-bottom:1px solid var(--mg-divider)}.kv-row[data-v-c9236d99]:last-child{border-bottom:none}.kv-row.is-warn .v[data-v-c9236d99],.kv-row .v.is-low-battery[data-v-c9236d99]{color:var(--mg-status-danger)}.kv[data-v-c9236d99]{display:flex;flex-direction:column;gap:2px;min-width:0}.k[data-v-c9236d99],.kv-row .k[data-v-c9236d99]{color:var(--mg-text-muted);font-size:11px;word-break:break-word}.v[data-v-c9236d99],.kv-row .v[data-v-c9236d99]{color:var(--mg-text-light);word-break:break-word;font-size:12px}.mono[data-v-c9236d99]{font-family:ui-monospace,Consolas,monospace;font-size:11.5px}.action-grid[data-v-c9236d99]{display:grid;grid-template-columns:1fr 1fr;gap:6px}.action-grid--vehicle[data-v-c9236d99]{grid-template-columns:repeat(auto-fill,minmax(118px,1fr))}.action-btn[data-v-c9236d99]{appearance:none;cursor:pointer;border:1px solid var(--mg-action-border);background:var(--mg-action-bg);color:#fff;font-size:12px;font-weight:600;padding:7px 8px;border-radius:6px;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease;text-align:center;line-height:1.25}.action-btn--goto[data-v-c9236d99]{border-color:#fac878a6;background:#78461473}.action-btn[data-v-c9236d99]:hover:not(:disabled){background:var(--mg-action-bg-hover);border-color:var(--mg-action-border-hi);box-shadow:0 2px 8px #00000040}.action-btn--goto[data-v-c9236d99]:hover:not(:disabled){background:#a0641ebf;border-color:#ffdc96e6}.action-btn[data-v-c9236d99]:disabled{opacity:.55;cursor:progress}:root[data-theme=fame-lavender] .action-btn--goto[data-v-c9236d99]{border-color:#b45309;background:#b45309}:root[data-theme=fame-lavender] .action-btn--goto[data-v-c9236d99]:hover:not(:disabled){border-color:#92400e;background:#92400e}.muted-line[data-v-c9236d99]{font-size:11.5px;color:var(--mg-text-dim);line-height:1.4;padding:2px 0}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.floating-alarm-card[data-v-0b6ee97c]{position:absolute;width:320px;padding:10px 12px;border-radius:10px;background:#140828eb;backdrop-filter:blur(10px);box-shadow:0 10px 32px #0a02108c,0 0 0 1px #ffffff14 inset;color:#e8d7f5f2;font-size:13px;cursor:grab;user-select:none;z-index:1000;transition:box-shadow .2s,transform .2s}.floating-alarm-card.dragging[data-v-0b6ee97c]{cursor:grabbing;box-shadow:0 14px 40px #0a0210b3}.fac-header[data-v-0b6ee97c]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.fac-dot[data-v-0b6ee97c]{width:10px;height:10px;border-radius:999px;background:var(--lvl-color, #67c23a);box-shadow:0 0 8px var(--lvl-color, #67c23a)}.fac-title[data-v-0b6ee97c]{flex:1;font-weight:600}.fac-time[data-v-0b6ee97c]{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;color:#e8d7f5a6}.fac-close[data-v-0b6ee97c]{cursor:pointer;opacity:.7}.fac-close[data-v-0b6ee97c]:hover{opacity:1}.fac-body[data-v-0b6ee97c]{padding:4px 0 6px}.fac-info[data-v-0b6ee97c]{line-height:1.4;word-break:break-all}.fac-coord[data-v-0b6ee97c]{font-size:11.5px;color:#e8d7f5b3;margin-top:4px;font-family:ui-monospace,Menlo,Consolas,monospace}.fac-actions[data-v-0b6ee97c]{display:flex;gap:6px;justify-content:flex-end}.muted[data-v-0b6ee97c]{color:#e8d7f580}.floating-alarm-card.lvl-info[data-v-0b6ee97c]{--lvl-color: #67c23a}.floating-alarm-card.lvl-warn[data-v-0b6ee97c]{--lvl-color: #e6a23c}.floating-alarm-card.lvl-error[data-v-0b6ee97c]{--lvl-color: #f56c6c}.floating-alarm-card.lvl-critical[data-v-0b6ee97c]{--lvl-color: #d63a3a}.floating-alarm-stack[data-v-c37fdeb1]{position:absolute;inset:0;pointer-events:none}.floating-alarm-stack[data-v-c37fdeb1]>*{pointer-events:auto}.snooze-tray[data-v-c37fdeb1]{position:absolute;right:24px;top:24px}.canvas-toolbar[data-v-968a4c89]{display:flex;align-items:center;gap:6px;padding:6px 10px;background:#00000073;border-top:1px solid rgba(255,255,255,.1);border-bottom-left-radius:var(--mg-radius, 16px);border-bottom-right-radius:var(--mg-radius, 16px);backdrop-filter:blur(10px) saturate(140%);-webkit-backdrop-filter:blur(10px) saturate(140%);flex-wrap:wrap}.canvas-toolbar[data-v-968a4c89] .el-button{display:inline-flex;align-items:center;gap:4px}.btn-label[data-v-968a4c89]{margin-left:2px}.caret[data-v-968a4c89]{margin-left:2px;font-size:10px;opacity:.7}.separator[data-v-968a4c89]{width:1px;height:18px;background:#ffffff2e;margin:0 4px}.toolbar-menu .menu-row[data-v-968a4c89]{display:flex;align-items:center;gap:8px;padding:5px 14px;cursor:pointer;user-select:none;font-size:13px;color:var(--el-text-color-primary)}.toolbar-menu .menu-row[data-v-968a4c89]:hover{background:var(--el-fill-color-light)}.toolbar-menu .menu-row[data-v-968a4c89] .el-checkbox{margin-right:0;pointer-events:none}.layer-menu[data-v-968a4c89]{max-height:320px;overflow-y:auto}.menu-empty[data-v-968a4c89]{padding:10px 14px;color:var(--el-text-color-secondary);font-size:12px}.muted-hint[data-v-968a4c89]{margin:0 0 8px;color:var(--el-text-color-secondary);font-size:12px}.map-monitor-page[data-v-b11577f0]{display:flex;flex-direction:column;gap:14px;height:calc(100vh - 124px)}.kpi-row[data-v-b11577f0]{flex:none}.main-row[data-v-b11577f0]{flex:1;min-height:0}.main-row>.el-col[data-v-b11577f0]{display:flex;flex-direction:column;min-height:0}.side-col[data-v-b11577f0]{display:flex;flex-direction:column;gap:12px;min-height:0;height:100%}.side-card[data-v-b11577f0]{display:flex;flex-direction:column;min-height:0;overflow:hidden}.workbench-card[data-v-b11577f0]{flex:1 1 0;min-height:0;max-height:52%}.detail-card[data-v-b11577f0]{flex:1 1 0;min-height:200px}.workbench-card[data-v-b11577f0] .el-card__body,.detail-card[data-v-b11577f0] .el-card__body{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.muted[data-v-b11577f0]{color:var(--mg-text-muted);font-size:12px}.workbench-card[data-v-b11577f0] .el-card__header,.detail-card[data-v-b11577f0] .el-card__header{color:var(--mg-text-light)}.workbench-header[data-v-b11577f0]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}.workbench-tabs[data-v-b11577f0]{flex:1;min-width:0}.workbench-tabs[data-v-b11577f0] .el-tabs__header{margin:0}.workbench-tabs[data-v-b11577f0] .el-tabs__nav-wrap:after{display:none}.workbench-tabs[data-v-b11577f0] .el-tabs__item{color:var(--mg-text-muted);padding:0 10px;height:32px;line-height:32px}.workbench-tabs[data-v-b11577f0] .el-tabs__item.is-active{color:var(--mg-text-light)}.workbench-tabs[data-v-b11577f0] .el-tabs__active-bar{background-color:var(--mg-accent, #8ec8fc)}[data-v-b11577f0] .el-row.main-row{height:100%}[data-v-b11577f0] .el-col-16>div{height:100%;min-height:0}.canvas-with-alarms[data-v-b11577f0]{position:relative;height:100%;min-height:0;flex:1;display:flex;flex-direction:column}.canvas-with-alarms[data-v-b11577f0] .workspace-3d-wrap{flex:1} diff --git a/MiGu.Server/wwwroot/assets/MapMonitorView-BSY4Dsk8.js b/MiGu.Server/wwwroot/assets/MapMonitorView-oh-hd20C.js similarity index 96% rename from MiGu.Server/wwwroot/assets/MapMonitorView-BSY4Dsk8.js rename to MiGu.Server/wwwroot/assets/MapMonitorView-oh-hd20C.js index d3e5e51..78694cb 100644 --- a/MiGu.Server/wwwroot/assets/MapMonitorView-BSY4Dsk8.js +++ b/MiGu.Server/wwwroot/assets/MapMonitorView-oh-hd20C.js @@ -1,2 +1,2 @@ -import{aG as Ce,b7 as d,aC as k,az as n,bo as p,aF as a,R as Ke,a3 as ut,bH as s,ah as Z,bh as ie,Z as dt,b1 as ye,ac as Ge,aE as G,_ as ft,aB as we,bf as I,av as E,aj as Ie,aS as ae,b5 as Xe,b6 as Qe,u as et,a9 as tt,aa as nt,bI as We,bz as je,bK as ge,b2 as at,Y as Pe,X as M,bG as lt,aA as me,a2 as vt,r as Ae,G as st,bt as it,Q as He,br as X,aX as mt,b4 as ot,at as pt,o as gt,I as yt,b8 as _t,am as Ve,K as ht,bb as kt,aO as bt,J as wt,aM as $t,bE as qe,bC as St,bB as Ct,as as It,bD as Nt,aJ as xt,ak as Lt,af as Tt,be as Mt,L as Et,a1 as Vt,w as At,a5 as Pt,t as Dt,ab as Ft,a8 as Ot}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{W as zt}from"./Workspace3D-PfDes8bN.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{r as _e}from"./reflection-BmVSriDn.js";import{m as Rt}from"./mapEdit-Di5ggA7K.js";import{O as Bt}from"./ops-BCeFEEjY.js";import{e as Ut}from"./ops-DFVCciZx.js";import{f as rt,i as Wt}from"./monitorConfigCache-deAxNrzx.js";/* empty css *//* empty css *//* empty css */import{l as jt,a as Kt}from"./projection-BVk2tEkj.js";import{u as Gt}from"./useProjectionStream-DvMLcpMm.js";const Xt={class:"vehicle-monitor"},Ht={class:"overview-row"},Yt={class:"overview-item"},qt={class:"overview-num"},Zt={class:"overview-item"},Jt={class:"overview-num online"},Qt={class:"overview-item"},en={class:"overview-num running"},tn={class:"overview-item"},nn={class:"overview-num charging"},an={class:"overview-item"},ln={class:"overview-num fault"},sn={class:"toolbar"},on={class:"vehicle-list"},rn=["onClick"],cn={class:"vehicle-head"},un={class:"vid"},dn=["title"],fn={class:"vehicle-sub"},vn=["title"],mn={class:"mission-mini"},pn=["title"],gn={key:1,class:"mission-name muted"},yn={key:0,class:"empty muted"},_n=Ce({__name:"VehicleMonitorPanel",props:{cars:{},missions:{},selectedId:{}},emits:["select"],setup(i,{emit:w}){const f=i,x=w,T=I(""),o=I(""),y=[{value:"idle",label:"空闲"},{value:"running",label:"运行中"},{value:"charging",label:"充电中"},{value:"paused",label:"已暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],S=y.reduce((_,L)=>(_[L.value]=L.label,_),{});function O(_){return S[_]??_}function B(_){switch(_){case"running":return"success";case"charging":return"primary";case"paused":return"warning";case"fault":return"danger";case"offline":return"info";case"idle":default:return"info"}}const U={queued:"排队",assigned:"已分配",running:"执行中",paused:"暂停",completed:"已完成",cancelled:"已取消",failed:"失败"};function j(_){return U[_]??_}function W(_){switch(_){case"running":return"success";case"assigned":return"primary";case"queued":return"info";case"paused":return"warning";case"completed":return"success";case"cancelled":return"info";case"failed":return"danger";default:return"info"}}const V=E(()=>f.cars.filter(_=>_.state!=="offline").length),b=E(()=>f.cars.filter(_=>_.state==="running").length),J=E(()=>f.cars.filter(_=>_.state==="charging").length),Y=E(()=>f.cars.filter(_=>_.state==="fault").length),H=E(()=>{const _=r=>r==="running"?0:r==="paused"?1:r==="assigned"?2:3,L=new Map;for(const r of f.missions){if(!r.carId||r.status!=="running"&&r.status!=="paused"&&r.status!=="assigned")continue;const v=L.get(r.carId);(!v||_(r.status)<_(v.status))&&L.set(r.carId,r)}return L});function F(_){if(_.missionId){const L=f.missions.find(r=>r.id===_.missionId);if(L)return L}return H.value.get(_.id)}function P(_){const L=_.batterySoc??0,r=L>1?L:L*100;return Math.max(0,Math.min(100,Math.round(r)))}function ee(_){return _<20?"#f56c6c":_<50?"#e6a23c":"#67c23a"}function de(_){return _<20?"low":_<50?"mid":"high"}const z=E(()=>{const _=T.value.trim().toLowerCase(),L=_?_.split(/\s+/).filter(Boolean):[];return f.cars.filter(r=>{if(o.value&&r.state!==o.value)return!1;if(!L.length)return!0;const v=F(r),D=[r.id,r.name,r.typeName??"",r.group??"",r.ip??"",O(r.state),v?.name??"",v?j(v.status):""].join(" ").toLowerCase();return L.every(u=>D.includes(u))})});function K(_){x("select",{kind:"vehicle",id:te(_),name:_.name})}function te(_){return _.rawId!=null?String(_.rawId):_.id.replace(/^C/i,"").replace(/^0+/,"")||_.id}return(_,L)=>{const r=Ke,v=dt,D=ut,u=Ge,c=ft;return d(),k("div",Xt,[n("div",Ht,[n("div",Yt,[n("div",qt,p(i.cars.length),1),L[2]||(L[2]=n("div",{class:"overview-label"},"总数",-1))]),n("div",Zt,[n("div",Jt,p(V.value),1),L[3]||(L[3]=n("div",{class:"overview-label"},"在线",-1))]),n("div",Qt,[n("div",en,p(b.value),1),L[4]||(L[4]=n("div",{class:"overview-label"},"运行",-1))]),n("div",tn,[n("div",nn,p(J.value),1),L[5]||(L[5]=n("div",{class:"overview-label"},"充电",-1))]),n("div",an,[n("div",ln,p(Y.value),1),L[6]||(L[6]=n("div",{class:"overview-label"},"故障",-1))])]),n("div",sn,[a(r,{modelValue:T.value,"onUpdate:modelValue":L[0]||(L[0]=h=>T.value=h),size:"small",clearable:"",placeholder:"搜索 ID / 名称 / 任务",class:"search"},null,8,["modelValue"]),a(D,{modelValue:o.value,"onUpdate:modelValue":L[1]||(L[1]=h=>o.value=h),size:"small",placeholder:"状态",clearable:"",class:"filter"},{default:s(()=>[(d(),k(Z,null,ie(y,h=>a(v,{key:h.value,label:h.label,value:h.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),n("div",on,[(d(!0),k(Z,null,ie(z.value,h=>(d(),k("div",{key:h.id,class:ye(["vehicle-row",{"is-selected":h.id===i.selectedId}]),onClick:C=>K(h)},[n("div",cn,[n("span",un,p(h.id),1),n("span",{class:"vname",title:h.name},p(h.name),9,dn),a(u,{size:"small",type:B(h.state),class:"state-tag",effect:"dark"},{default:s(()=>[n("span",{class:ye(["dot",`dot-${h.state}`])},null,2),G(" "+p(O(h.state)),1)]),_:2},1032,["type"])]),n("div",fn,[n("div",{class:"battery-mini",title:`电量 ${P(h)}%`},[a(c,{percentage:P(h),"stroke-width":6,"show-text":!1,color:ee(P(h)),class:"battery-bar"},null,8,["percentage","color"]),n("span",{class:ye(["battery-text",de(P(h))])},p(P(h))+"% ",3)],8,vn),n("div",mn,[F(h)?(d(),k(Z,{key:0},[a(u,{size:"small",type:W(F(h).status),effect:"plain",class:"mission-tag"},{default:s(()=>[G(p(j(F(h).status)),1)]),_:2},1032,["type"]),n("span",{class:"mission-name",title:F(h).name},p(F(h).name),9,pn)],64)):(d(),k("span",gn,"空闲"))])])],10,rn))),128)),z.value.length?we("",!0):(d(),k("div",yn," 无匹配车辆 "))])])}}}),hn=Ie(_n,[["__scopeId","data-v-c1cc74ad"]]),De="/sl/projection/deliveries";async function kn(i){const w={};i?.includeFinished===!1&&(w.includeFinished="false"),i?.includeAborted===!1&&(w.includeAborted="false");const{data:f}=await ae.get(De,{params:w});return Array.isArray(f)?f:[]}async function bn(i){await ae.post(`${De}/${i}/cancel`)}async function wn(i){await ae.post(`${De}/${i}/resend`)}async function $n(i){await ae.post(`${De}/${i}/force-complete`)}const Sn={class:"mission-list-panel"},Cn={class:"toolbar"},In=["title"],Nn=["title"],xn=["title"],Ln=["title"],Tn={key:1,class:"muted"},Mn={key:0,class:"empty muted"},En=["disabled"],Vn=["disabled"],An=Ce({__name:"MissionListPanel",props:{deliveries:{},selectedId:{},loading:{type:Boolean}},emits:["select","refresh","actionDone"],setup(i,{emit:w}){const f=i,x=w,T=I(""),o=I(!0),y=I(!0),S=I(!1),O=I(0),B=I(0),U=I(null),j=E(()=>{const r=T.value.trim().toLowerCase(),v=r?r.split(/\s+/).filter(Boolean):[];return f.deliveries.filter(D=>{if(!v.length)return!0;const u=[String(D.id),D.srcLabel,D.dstLabel,D.status,D.carName??"",D.missionName].join(" ").toLowerCase();return v.every(c=>u.includes(c))})});function W(r,v=9){const D=r.indexOf("-"),u=D>=0?r.slice(D+1):r;return u.length<=v?u:`${u.slice(0,v)}…`}function V(r){return{已下发:"待发",执行中:"执行",已完成:"完成",已取消:"取消",强制结束:"强结",任务异常:"异常"}[r]??(r.length>4?`${r.slice(0,3)}…`:r)}function b(r,v=6){return r.length<=v?r:`${r.slice(0,v)}…`}function J(r){switch(r){case"Fetching":case"Putting":return"success";case"Waiting":return"primary";case"Finished":return"info";case"Canceled":case"Terminated":return"warning";case"Error":return"danger";default:return"info"}}function Y({row:r}){const v=[];return r.id===f.selectedId&&v.push("is-selected-row"),r.overdue&&v.push("is-overdue-row"),v.join(" ")}function H(r){return["Finished","Canceled","Terminated","Error"].includes(r)}function F(r){return r!=null&&!H(r.statusCode)}function P(r){return r!=null&&!H(r.statusCode)}function ee(){x("refresh",{includeFinished:o.value,includeAborted:y.value})}function de(r){K(),x("select",r)}function z(r,v,D){D.preventDefault(),U.value=r,O.value=D.clientX,B.value=D.clientY,S.value=!0}function K(){S.value=!1,U.value=null}const te={cancel:"取消任务",resend:"重发任务","force-complete":"强制完成"};async function _(r){const v=U.value;if(K(),!!v&&!(r==="cancel"&&!F(v))&&!(r==="force-complete"&&!P(v))){try{await Pe.confirm(`确定对任务 #${v.id}(${v.srcLabel} → ${v.dstLabel})执行「${te[r]}」?`,"确认操作",{type:"warning",confirmButtonText:"确定",cancelButtonText:"取消"})}catch{return}try{r==="cancel"?await bn(v.id):r==="resend"?await wn(v.id):await $n(v.id),M.success(`${te[r]} 已提交`),x("actionDone")}catch(D){M.error(`${te[r]} 失败:${D.message}`)}}}function L(){K()}return Xe(()=>document.addEventListener("click",L)),Qe(()=>document.removeEventListener("click",L)),(r,v)=>{const D=Ke,u=et,c=nt,h=tt;return d(),k("div",Sn,[n("div",Cn,[a(D,{modelValue:T.value,"onUpdate:modelValue":v[0]||(v[0]=C=>T.value=C),size:"small",clearable:"",placeholder:"搜索任务 ID / 站点 / 车辆",class:"search"},null,8,["modelValue"]),a(u,{modelValue:o.value,"onUpdate:modelValue":v[1]||(v[1]=C=>o.value=C),size:"small",onChange:ee},{default:s(()=>[...v[7]||(v[7]=[G(" 含已完成 ",-1)])]),_:1},8,["modelValue"]),a(u,{modelValue:y.value,"onUpdate:modelValue":v[2]||(v[2]=C=>y.value=C),size:"small",onChange:ee},{default:s(()=>[...v[8]||(v[8]=[G(" 含取消/异常 ",-1)])]),_:1},8,["modelValue"])]),a(h,{data:j.value,size:"small",stripe:"","highlight-current-row":"","row-class-name":Y,height:"100%",class:"delivery-table","table-layout":"fixed",onRowClick:de,onRowContextmenu:z},{default:s(()=>[a(c,{prop:"id",label:"ID",width:"40",align:"center"}),a(c,{label:"起点","show-overflow-tooltip":""},{default:s(({row:C})=>[n("span",{class:"cell-ellipsis",title:C.srcLabel},p(W(C.srcLabel)),9,In)]),_:1}),a(c,{label:"终点","show-overflow-tooltip":""},{default:s(({row:C})=>[n("span",{class:"cell-ellipsis",title:C.dstLabel},p(W(C.dstLabel)),9,Nn)]),_:1}),a(c,{label:"状态",width:"52",align:"center"},{default:s(({row:C})=>[n("span",{class:ye(["status-pill",`status-pill--${J(C.statusCode)}`]),title:C.status},p(V(C.status)),11,xn)]),_:1}),a(c,{label:"车辆",width:"56","show-overflow-tooltip":""},{default:s(({row:C})=>[C.carName?(d(),k("span",{key:0,class:"cell-ellipsis",title:C.carName},p(b(C.carName)),9,Ln)):(d(),k("span",Tn,"—"))]),_:1})]),_:1},8,["data"]),j.value.length?we("",!0):(d(),k("div",Mn,"暂无搬运任务")),We(n("div",{class:"ctx-menu",style:at({left:`${O.value}px`,top:`${B.value}px`}),onClick:v[6]||(v[6]=ge(()=>{},["stop"]))},[n("button",{type:"button",class:"ctx-item",disabled:!F(U.value),onClick:v[3]||(v[3]=C=>_("cancel"))}," 取消任务 ",8,En),n("button",{type:"button",class:"ctx-item",onClick:v[4]||(v[4]=C=>_("resend"))}," 重发任务 "),n("button",{type:"button",class:"ctx-item",disabled:!P(U.value),onClick:v[5]||(v[5]=C=>_("force-complete"))}," 强制完成 ",8,Vn)],4),[[je,S.value]])])}}}),Pn=Ie(An,[["__scopeId","data-v-38e00e9c"]]),Dn=["onClick"],Fn={class:"sid"},On={class:"sname"},zn={key:0,class:"empty"},Rn=Ce({__name:"SitePickDialog",props:{modelValue:{type:Boolean},title:{},sites:{}},emits:["update:modelValue","confirm","pickOnMap"],setup(i,{expose:w,emit:f}){const x=i,T=f,o=E({get:()=>x.modelValue,set:V=>T("update:modelValue",V)}),y=I(""),S=I(null),O=I(!1),B=E(()=>{const V=y.value.trim().toLowerCase();return V?x.sites.filter(b=>String(b.id).includes(V)||b.name.toLowerCase().includes(V)||b.label.toLowerCase().includes(V)):x.sites});lt(()=>x.modelValue,V=>{V&&(y.value="",S.value=x.sites[0]?.id??null)});function U(){S.value!=null&&(T("confirm",S.value),o.value=!1)}function j(){O.value=!0,T("pickOnMap")}function W(){O.value=!1}return w({close:()=>{o.value=!1},endMapPick:()=>{O.value=!1}}),(V,b)=>{const J=Ke,Y=vt,H=Ae,F=st;return d(),me(F,{modelValue:o.value,"onUpdate:modelValue":b[2]||(b[2]=P=>o.value=P),title:i.title,width:"420px","destroy-on-close":"","append-to-body":"",class:"site-pick-dialog",onClosed:W},{footer:s(()=>[a(H,{onClick:b[1]||(b[1]=P=>o.value=!1)},{default:s(()=>[...b[3]||(b[3]=[G("取消",-1)])]),_:1}),a(H,{loading:O.value,onClick:j},{default:s(()=>[...b[4]||(b[4]=[G("在地图上拾取",-1)])]),_:1},8,["loading"]),a(H,{type:"primary",disabled:S.value==null,onClick:U},{default:s(()=>[...b[5]||(b[5]=[G("确认前往",-1)])]),_:1},8,["disabled"])]),default:s(()=>[b[6]||(b[6]=n("p",{class:"hint"},"请选择车辆要前往的目标站点。",-1)),a(J,{modelValue:y.value,"onUpdate:modelValue":b[0]||(b[0]=P=>y.value=P),clearable:"",placeholder:"搜索站点 ID / 名称",class:"filter-input"},null,8,["modelValue"]),a(Y,{"max-height":"280px",class:"site-scroll"},{default:s(()=>[(d(!0),k(Z,null,ie(B.value,P=>(d(),k("button",{key:P.id,type:"button",class:ye(["site-row",{active:S.value===P.id}]),onClick:ee=>S.value=P.id},[n("span",Fn,"#"+p(P.id),1),n("span",On,p(P.name||"未命名"),1)],10,Dn))),128)),B.value.length?we("",!0):(d(),k("div",zn,"无匹配站点"))]),_:1})]),_:1},8,["modelValue","title"])}}}),Bn=Ie(Rn,[["__scopeId","data-v-1e1b7025"]]),Un=new Set(["Goto","GotoSite"]),Wn=["去某地","前往站点"];function Ze(i){if(i.params?.length)return!1;if(Un.has(i.methodName))return!0;const w=i.label??"";return Wn.some(f=>w.includes(f))}async function jn(){return(await _e.listObjects("site")).map(w=>({id:w.id,name:w.name,label:`#${w.id} ${w.name||"站点"}`})).sort((w,f)=>w.id-f.id)}async function Je(){try{M.info({message:"请在 3D 地图上点击目标站点附近",duration:4e3});const i=await Rt.pick();return i.siteId==null||i.siteId<0?(M.warning("未识别到附近站点,请靠近站点再点击"),null):i.siteId}catch(i){return i instanceof Error&&/取消|cancel|499/i.test(i.message)||M.error(`地图拾取失败:${i instanceof Error?i.message:String(i)}`),null}}function Kn(i){if(i&&typeof i=="object"&&"response"in i&&i.response?.status===404)return!0;const w=i instanceof Error?i.message:String(i);return/status code 404/i.test(w)}async function Gn(i,w){try{const f=await _e.gotoCarSite(i,w);return M.success(f.message||`已下发前往站点 #${w}`),!0}catch(f){if(!Kn(f))return M.error(`前往站点失败:${f instanceof Error?f.message:String(f)}`),!1;try{const x=await _e.execute("car",i,"WebGotoSite",{siteId:w});return M.success(x.returnValue?`已执行:${x.returnValue}`:`已下发前往站点 #${w}`),!0}catch(x){const T=x instanceof Error?x.message:String(x),o=/WebGotoSite|goto-site|不存在可调用方法/i.test(T);return M.error(o?`${T}。当前 SimpleLite 仍是旧版 DLL:请先完全关闭 SimpleLite 窗口,再在 PowerShell 执行 Migu2.0/scripts/redeploy-simplelite.ps1,然后重新登录;或调用 POST /api/health/simplelite/restart-for-update`:`前往站点失败:${T}`),!1}}}async function Xn(i,w,f){const x=f.label||f.methodName,T={};for(const o of f.params)try{const{value:y}=await Pe.prompt(`参数 ${o.name}(${o.typeName})`,x,{inputValue:o.defaultValue??"",confirmButtonText:"确定",cancelButtonText:"取消"});T[o.name]=y??""}catch{return!1}try{const o=await _e.execute(i,w,f.methodName,T);return M.success(o.returnValue?`已执行:${o.returnValue}`:`已执行 ${x}`),!0}catch(o){return M.error(`执行失败:${o instanceof Error?o.message:String(o)}`),!1}}const Hn={class:"monitor-selection"},Yn={key:0,class:"empty-hint"},qn={key:1,class:"pane"},Zn={key:0,class:"pane-loading"},Jn={class:"card card--header"},Qn={class:"title-row"},ea={class:"id-tag"},ta={class:"name-line"},na={class:"card"},aa={class:"kv-grid"},la={class:"kv"},sa={class:"v mono"},ia={class:"kv"},oa={class:"v mono"},ra={class:"kv"},ca={class:"v mono"},ua={key:0,class:"card"},da={class:"card-hd"},fa={class:"meta"},va={class:"kv-list"},ma={class:"k"},pa=["title"],ga={key:1,class:"card card--actions"},ya={class:"action-grid"},_a=["disabled","onClick"],ha={class:"card card--header"},ka={class:"title-row"},ba={class:"id-tag"},wa={class:"name-line"},$a={class:"card"},Sa={class:"kv-list"},Ca={class:"kv-row"},Ia=["title"],Na={class:"kv-row"},xa={class:"v"},La=["title"],Ta={class:"kv-row"},Ma={class:"kv-row"},Ea=["title"],Va={class:"card card--actions"},Aa={class:"card-hd"},Pa={key:0,class:"meta"},Da={key:1,class:"meta"},Fa={key:0,class:"muted-line"},Oa={key:1,class:"action-grid action-grid--vehicle"},za=["disabled","title","onClick"],Ra={key:0,class:"muted-line"},Ba={key:1,class:"muted-line"},Ua={key:2,class:"action-grid action-grid--vehicle"},Wa=["disabled","onClick"],ja={class:"card card--header"},Ka={class:"title-row"},Ga={class:"id-tag"},Xa={class:"name-line"},Ha={key:0,class:"card"},Ya={class:"kv-list"},qa={class:"k"},Za={class:"v"},Ja={class:"k"},Qa={class:"v"},el={key:1,class:"card card--actions"},tl={class:"action-grid"},nl=["disabled","onClick"],al={key:4,class:"muted-line"},ll=Ce({__name:"MonitorSelectionPanel",props:{selection:{},refreshKey:{},cars:{},missions:{},readOnly:{type:Boolean}},setup(i){const w=new Set(["AllowLock","PreventLock"]),f=i,x=it(),T=I(!1),o=I(!1),y=I(!1),S=I(null),O=I(null),B=I(""),U=I(""),j=I(""),W=I({}),V=I([]),b=I([]),J=I({}),Y=I([]),H=I([]),F=I(!1),P=I(!1),ee=I([]),de=I("选择目标站点"),z={car:"car",vehicle:"car",site:"site",track:"track"},K=E(()=>{const t=f.selection?.kind?.toLowerCase();return t?z[t]??null:null}),te=E(()=>{const t=f.selection?.kind?.toLowerCase();return t==="site"?"site":t==="vehicle"||t==="car"?"vehicle":t==="track"?"track":"other"}),_=E(()=>{const t=Number(f.selection?.id);return Number.isFinite(t)?t:f.selection?.id??"-"});function L(t,l=1){if(t==null||t==="")return"—";const m=Number(t);return Number.isFinite(m)?m.toFixed(l):t}function r(...t){for(const l of t){const m=W.value[l];if(m!=null&&m!=="")return m}return""}function v(...t){for(const l of t){const m=V.value.find(A=>A.key===l);if(m?.value)return m.value}for(const l of t){const m=V.value.find(A=>A.key.includes(l));if(m?.value)return m.value}return""}function D(){const t=v("标记","tags");return t?/unavailable/i.test(t):!1}const u=E(()=>({name:r("name")||B.value||f.selection?.name||`站点 ${_.value}`,x:L(r("x"),1),y:L(r("y"),1),z:L(r("z"),1),disabled:D()})),c=E(()=>{const t=Y.value;if(t.length){const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))}return b.value.filter(l=>w.has(l.methodName))}),h=E(()=>{const t=H.value;if(!t.length)return b.value;const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))});function C(){if(!f.selection||te.value!=="vehicle")return;const t=String(f.selection.id);return f.cars?.find(l=>l.id===t||String(l.rawId??"")===t||pe(l)===t)}function pe(t){return t.rawId!=null?String(t.rawId):t.id.replace(/^C/i,"").replace(/^0+/,"")||t.id}const re=E(()=>V.value.map(t=>({key:t.key,value:t.value||"—",warn:/alarm|error|fault|block|stop/i.test(`${t.key} ${t.value}`)&&t.value!=="0"&&t.value!=="无"})));function he(){const t=r("tags");if(t)return t;const l=v("tags","标记");if(l)return l;for(const m of V.value)if(/tag|标记/i.test(m.key)&&m.value)return m.value;return""}function $e(){const t=he();if(/occupied/i.test(t))return!0;for(const l of V.value)if(/occupied/i.test(l.value??""))return!0;return!1}function Ne(){const t=C(),l=r("batterySoc","battery","电量");let m=null;if(l){const A=Number(l);Number.isFinite(A)&&(m=A<=1?Math.round(A*100):Math.round(A))}else t!=null&&(m=Math.round(t.batterySoc<=1?t.batterySoc*100:t.batterySoc));return m==null?{text:"—",low:!1}:{text:`${m}%`,low:m<20}}function ne(){const t=C(),l=r("x"),m=r("y"),A=r("th","theta"),$=l||(t!=null?String(t.x):""),ce=m||(t!=null?String(t.y):""),Me=A||(t!=null?String(t.theta):"");if($||ce)return`(${$||"—"}, ${ce||"—"}${Me?`, ${L(Me,1)}°`:""})`;const Ee=r("siteID");return Ee&&Ee!=="-1"?`站点 #${Ee}`:v("位姿","站点")||"—"}function le(){const t=v("TCStat")||r("TCStat");if(t&&t!=="/"&&t.trim()!=="")return t;const l=v("blockedBy");if(l&&l!=="[]"&&l!=="/")try{const Me=JSON.parse(l);if(Array.isArray(Me)&&Me.length>0){const Ee=Me.map(Be=>Be.carid).filter(Be=>Be!=null);return Ee.length?`被车辆 ${Ee.join("、")} 交管`:"交管阻塞"}}catch{return l.length>48?`${l.slice(0,48)}…`:l}const m=v("trafficStopped");if(m&&m!=="(0, 0)"&&m!=="(0,0)"&&m!=="/")return`交管暂停 ${m}`;const A=v("holdingLocks"),$=v("pendingLocks"),ce=[];return A&&A!=="[]"&&ce.push(`已占 ${A}`),$&&$!=="[]"&&ce.push(`待锁 ${$}`),ce.length?ce.join(";"):"正常"}function ke(){const t=v("车体_AlarmInfo","AlarmInfo")||V.value.find(m=>/alarminfo/i.test(m.key))?.value;if(t&&t!=="0"&&t!=="/"&&t.trim()!=="")return{text:t,warn:!0};const l=r("lstatus")||v("lstatus");return l&&/故障|报警|异常|失联|超时|检修/i.test(l)?{text:l,warn:!0}:{text:"无",warn:!1}}const q=E(()=>{const t=C(),l=$e(),m=l?"任务中":"空闲",A=ke(),$=Ne();return{id:t?.id??f.selection?.id??"-",name:B.value||t?.name||f.selection?.name||"车辆",runLabel:m,runTagType:l?"success":"info",traffic:le(),alarm:A.text,alarmWarn:A.warn,battery:$.text,batteryLow:$.low,position:ne()}});function Le(){const t=J.value,l=j.value,m=U.value;if(l&&t[l]?.length)return t[l];if(m&&t[m]?.length)return t[m];for(const[A,$]of Object.entries(t))if($.length&&(l&&(A===l||A.endsWith("."+m)||l.endsWith("."+A))||m&&(A===m||A.endsWith("."+m))))return $;return[]}const e=E(()=>Le()),g=E(()=>{const t=e.value;if(!t.length)return[];const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))}),N=E(()=>Bt.filter(t=>t.target==="car"&&x.hasOp(t.code)));async function R(t){const l=Number(f.selection?.id);if(Number.isFinite(l)){if(t.needConfirm)try{await Pe.confirm(`确认执行 [${t.label}]? -目标车辆:${f.selection?.id}`,"二次确认",{type:"warning"})}catch{return}S.value=t.code;try{const m=await Ut({opCode:t.code,targetId:String(l),reason:""});m.ok?M.success(`已执行 ${t.label}(auditId=${m.auditId})`):M.warning(m.message||`执行未成功:${t.label}`)}catch(m){M.error(`执行失败:${m.message}`)}finally{S.value=null}}}const oe=E(()=>F.value?Object.keys(J.value).length?e.value.length?"当前车型无可执行动作。":"当前车型未配置动作,或方法名与运营维护中勾选的不一致。":"未配置动作。请在「配置中心 → 运营维护」按车型勾选动作并保存。":"加载配置中…"),se=E(()=>({name:r("name")||B.value||f.selection?.name||`路径 ${_.value}`})),Q=E(()=>[{key:"layer",label:"图层",value:r("layerName","layer")||"—"},{key:"type",label:"类型",value:U.value||"—"}]);function Se(t){return t?`${t.kind}:${t.id}`:""}async function be(t=!1){if(!(F.value&&!t))try{const l=await rt(t);J.value={...l.config.carActionByType??{}},Y.value=[...l.config.site?.methods??[]],H.value=[...l.config.track?.methods??[]]}catch{J.value={},Y.value=[],H.value=[]}finally{F.value=!0}}function xe(t,l){B.value=t.summary?.name??l??"",U.value=t.typeName??"",j.value="fullTypeName"in t&&t.fullTypeName?t.fullTypeName:t.typeName??"",W.value={...t.fields};for(const m of t.fieldList??[])W.value[m.key]=m.value;V.value=t.status??[],b.value=t.methods??[]}function Te(){const t=C();if(!t)return!1;B.value=t.name,U.value=t.typeName??"",j.value=t.typeName??"";const l=Math.round(t.batterySoc<=1?t.batterySoc*100:t.batterySoc);return W.value={x:String(t.x),y:String(t.y),th:String(t.theta),batterySoc:String(l)},V.value=[],b.value=[],!0}async function Fe(){if(!f.selection){B.value="",W.value={},V.value=[],b.value=[],o.value=!1;return}const t=K.value,l=Number(f.selection.id);if(!t||!Number.isFinite(l))return;const m=o.value,A=!m&&te.value==="vehicle"&&Te();A&&(o.value=!0),m?y.value=!0:T.value=!A;try{if(f.readOnly){const ce=await _e.getBundle(t,l);xe(ce,f.selection.name??""),b.value=[],o.value=!0;return}await be(!1);const $=await _e.getBundle(t,l);xe($,f.selection.name??""),o.value=!0}catch($){f.readOnly?console.warn("[MonitorSelection] 只读详情加载失败,降级用列表数据",$):M.error(`加载选中信息失败:${$.message}`)}finally{T.value=!1,y.value=!1}}async function Oe(t){const l=K.value;if(!l||!f.selection||!t.methodName)return;const m=Number(f.selection.id);if(Number.isFinite(m)){if(l==="car"&&Ze(t)){O.value=t,de.value=`选择目标站点 — ${t.label||t.methodName}`,S.value=t.methodName;try{const A=await Je();if(A!=null){await ze(A);return}ee.value=await jn(),P.value=!0}catch(A){M.error(`加载站点列表失败:${A.message}`)}finally{P.value||(S.value=null)}return}S.value=t.methodName;try{await Xn(l,m,t)&&await Fe()}finally{S.value=null}}}async function ze(t){const l=Number(f.selection?.id);if(Number.isFinite(l)){S.value=O.value?.methodName??"goto";try{await Gn(l,t)&&await Fe()}finally{S.value=null,O.value=null}}}async function ct(){const t=await Je();P.value=!1,t!=null&&await ze(t)}let Re=0,Ye="";return lt(()=>[Se(f.selection),f.refreshKey],async(t,l)=>{const m=++Re;if(l&&t[0]===l[0]&&t[0]&&t[1]!==l[1])return await be(!0),void 0;t[0]!==Ye&&(o.value=!1,Ye=t[0]),await Fe()},{immediate:!0}),(t,l)=>{const m=He,A=Ge;return d(),k("div",Hn,[i.selection?(d(),k("div",qn,[T.value?(d(),k("div",Zn,[a(m,{class:"is-loading"},{default:s(()=>[a(X(mt))]),_:1}),l[2]||(l[2]=n("span",null,"加载中…",-1))])):te.value==="site"?(d(),k(Z,{key:1},[n("section",Jn,[n("div",Qn,[n("span",ea,"#"+p(_.value),1),l[3]||(l[3]=n("span",{class:"type-tag"},"站点",-1))]),n("div",ta,p(u.value.name),1)]),n("section",na,[l[7]||(l[7]=n("header",{class:"card-hd"},[n("span",null,"位置")],-1)),n("div",aa,[n("div",la,[l[4]||(l[4]=n("span",{class:"k"},"X",-1)),n("span",sa,p(u.value.x),1)]),n("div",ia,[l[5]||(l[5]=n("span",{class:"k"},"Y",-1)),n("span",oa,p(u.value.y),1)]),n("div",ra,[l[6]||(l[6]=n("span",{class:"k"},"Z",-1)),n("span",ca,p(u.value.z),1)])])]),re.value.length?(d(),k("section",ua,[n("header",da,[l[8]||(l[8]=n("span",null,"状态",-1)),n("span",fa,p(re.value.length),1)]),n("div",va,[(d(!0),k(Z,null,ie(re.value,$=>(d(),k("div",{key:$.key,class:"kv-row"},[n("span",ma,p($.key),1),n("span",{class:"v",title:$.value},p($.value),9,pa)]))),128))])])):we("",!0),!i.readOnly&&c.value.length?(d(),k("section",ga,[l[9]||(l[9]=n("header",{class:"card-hd"},[n("span",null,"操作")],-1)),n("div",ya,[(d(!0),k(Z,null,ie(c.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:"action-btn",disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),9,_a))),128))])])):we("",!0)],64)):te.value==="vehicle"?(d(),k(Z,{key:2},[n("section",ha,[n("div",ka,[n("span",ba,p(q.value.id),1),a(A,{size:"small",type:q.value.runTagType,effect:"dark"},{default:s(()=>[G(p(q.value.runLabel),1)]),_:1},8,["type"])]),n("div",wa,p(q.value.name),1)]),n("section",$a,[l[15]||(l[15]=n("header",{class:"card-hd"},[n("span",null,"运行信息")],-1)),n("div",Sa,[n("div",Ca,[l[10]||(l[10]=n("span",{class:"k"},"交管状态",-1)),n("span",{class:"v",title:q.value.traffic},p(q.value.traffic),9,Ia)]),n("div",Na,[l[11]||(l[11]=n("span",{class:"k"},"运行状态",-1)),n("span",xa,p(q.value.runLabel),1)]),n("div",{class:ye(["kv-row",{"is-warn":q.value.alarmWarn}])},[l[12]||(l[12]=n("span",{class:"k"},"报警状态",-1)),n("span",{class:"v",title:q.value.alarm},p(q.value.alarm),9,La)],2),n("div",Ta,[l[13]||(l[13]=n("span",{class:"k"},"电量",-1)),n("span",{class:ye(["v",{"is-low-battery":q.value.batteryLow}])},p(q.value.battery),3)]),n("div",Ma,[l[14]||(l[14]=n("span",{class:"k"},"位置",-1)),n("span",{class:"v mono",title:q.value.position},p(q.value.position),9,Ea)])])]),n("section",Va,[n("header",Aa,[n("span",null,p(i.readOnly?"运维动作":"动作"),1),!i.readOnly&&g.value.length?(d(),k("span",Pa,p(g.value.length),1)):i.readOnly&&N.value.length?(d(),k("span",Da,p(N.value.length),1)):we("",!0)]),i.readOnly?(d(),k(Z,{key:0},[N.value.length?(d(),k("div",Oa,[(d(!0),k(Z,null,ie(N.value,$=>(d(),k("button",{key:$.code,type:"button",class:ye(["action-btn",{"action-btn--goto":$.needConfirm}]),disabled:S.value===$.code,title:$.description,onClick:ce=>R($)},p($.label),11,za))),128))])):(d(),k("div",Fa,"当前账号无可执行的运维动作。"))],64)):(d(),k(Z,{key:1},[y.value?(d(),k("div",Ra,"加载动作…")):g.value.length?(d(),k("div",Ua,[(d(!0),k(Z,null,ie(g.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:ye(["action-btn",{"action-btn--goto":X(Ze)($)}]),disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),11,Wa))),128))])):(d(),k("div",Ba,p(oe.value),1))],64))])],64)):te.value==="track"?(d(),k(Z,{key:3},[n("section",ja,[n("div",Ka,[n("span",Ga,"#"+p(_.value),1),l[16]||(l[16]=n("span",{class:"type-tag"},"路径",-1))]),n("div",Xa,p(se.value.name),1)]),re.value.length||Q.value.length?(d(),k("section",Ha,[l[17]||(l[17]=n("header",{class:"card-hd"},[n("span",null,"信息")],-1)),n("div",Ya,[(d(!0),k(Z,null,ie(Q.value,$=>(d(),k("div",{key:$.key,class:"kv-row"},[n("span",qa,p($.label),1),n("span",Za,p($.value),1)]))),128)),(d(!0),k(Z,null,ie(re.value,$=>(d(),k("div",{key:"s-"+$.key,class:"kv-row"},[n("span",Ja,p($.key),1),n("span",Qa,p($.value),1)]))),128))])])):we("",!0),!i.readOnly&&h.value.length?(d(),k("section",el,[l[18]||(l[18]=n("header",{class:"card-hd"},[n("span",null,"动作")],-1)),n("div",tl,[(d(!0),k(Z,null,ie(h.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:"action-btn",disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),9,nl))),128))])])):we("",!0)],64)):(d(),k("div",al,"该类型暂不支持监控详情展示。"))])):(d(),k("div",Yn,[...l[1]||(l[1]=[n("span",{class:"empty-title"},"未选中对象",-1),n("span",{class:"empty-desc"},"在 3D 画布或车辆列表中点击以查看信息。",-1)])])),a(Bn,{modelValue:P.value,"onUpdate:modelValue":l[0]||(l[0]=$=>P.value=$),title:de.value,sites:ee.value,onConfirm:ze,onPickOnMap:ct},null,8,["modelValue","title","sites"])])}}}),sl=Ie(ll,[["__scopeId","data-v-c9236d99"]]),il={class:"fac-header"},ol={class:"fac-title"},rl={class:"fac-time"},cl={class:"fac-body"},ul={class:"fac-info"},dl={class:"fac-coord"},fl={key:0},vl={key:1,class:"muted"},ml={class:"fac-actions"},pl=Ce({__name:"FloatingAlarmCard",props:{alarm:{},initialOffset:{}},emits:["close","ack","snooze","locate"],setup(i,{emit:w}){const f=i,x=w,T=I(null),o=I(!1),y=I({right:f.initialOffset?.right??24,bottom:f.initialOffset?.bottom??24}),S=E(()=>typeof f.alarm.x=="number"&&Number.isFinite(f.alarm.x)),O=E(()=>{const z=(f.alarm.info||"").toLowerCase();return z.includes("critical")||z.includes("严重")||z.includes("紧急")?"critical":z.includes("error")||z.includes("故障")?"error":z.includes("warn")||z.includes("告警")?"warn":"info"}),B=E(()=>{try{return new Date(f.alarm.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}}),U=E(()=>({left:y.value.left!==void 0?`${y.value.left}px`:void 0,top:y.value.top!==void 0?`${y.value.top}px`:void 0,right:y.value.right!==void 0?`${y.value.right}px`:void 0,bottom:y.value.bottom!==void 0?`${y.value.bottom}px`:void 0}));let j=0,W=0,V=0,b=0;function J(z){if(!T.value)return;const K=T.value.getBoundingClientRect();V=K.left,b=K.top,j=z.clientX,W=z.clientY,o.value=!0,window.addEventListener("mousemove",Y),window.addEventListener("mouseup",H)}function Y(z){y.value={left:V+(z.clientX-j),top:b+(z.clientY-W)}}function H(){o.value=!1,window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",H)}ot(()=>{window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",H)});function F(){x("close")}function P(){x("ack")}function ee(){x("snooze")}function de(){x("locate",f.alarm)}return(z,K)=>{const te=He,_=Ae;return d(),k("div",{ref_key:"cardRef",ref:T,class:ye(["floating-alarm-card",[`lvl-${O.value}`,{dragging:o.value}]]),style:at(U.value),onMousedown:ge(J,["stop"])},[n("div",il,[K[0]||(K[0]=n("span",{class:"fac-dot"},null,-1)),n("span",ol,p(i.alarm.carName)+" #"+p(i.alarm.carId),1),n("span",rl,p(B.value),1),a(te,{class:"fac-close",onClick:ge(F,["stop"])},{default:s(()=>[a(X(pt))]),_:1})]),n("div",cl,[n("div",ul,p(i.alarm.info),1),n("div",dl,[S.value?(d(),k("span",fl,"坐标 ("+p(i.alarm.x?.toFixed(0))+", "+p(i.alarm.y?.toFixed(0))+") mm",1)):(d(),k("span",vl,"无坐标"))])]),n("div",ml,[a(_,{size:"small",plain:"",disabled:!S.value,onClick:ge(de,["stop"])},{default:s(()=>[...K[1]||(K[1]=[G("定位",-1)])]),_:1},8,["disabled"]),a(_,{size:"small",plain:"",onClick:ge(P,["stop"])},{default:s(()=>[...K[2]||(K[2]=[G("确认",-1)])]),_:1}),a(_,{size:"small",plain:"",onClick:ge(ee,["stop"])},{default:s(()=>[...K[3]||(K[3]=[G("稍后",-1)])]),_:1})])],38)}}}),gl=Ie(pl,[["__scopeId","data-v-0b6ee97c"]]),yl={class:"floating-alarm-stack"},_l=Ce({__name:"FloatingAlarmStack",props:{alarms:{}},emits:["locate","ack"],setup(i,{emit:w}){const f=i,x=w,T=I(new Set),o=I(new Set);function y(b){return`${b.carId}`}const S=E(()=>f.alarms.filter(b=>b.action!=="clear").filter(b=>!T.value.has(y(b))).filter(b=>!o.value.has(y(b)))),O=E(()=>f.alarms.filter(b=>o.value.has(y(b))));function B(b){T.value=new Set([...T.value,y(b)])}function U(b){T.value=new Set([...T.value,y(b)]),x("ack",b)}function j(b){o.value=new Set([...o.value,y(b)])}function W(b){x("locate",b)}function V(){o.value=new Set}return(b,J)=>{const Y=Ae,H=gt;return d(),k("div",yl,[(d(!0),k(Z,null,ie(S.value,(F,P)=>(d(),me(gl,{key:`${F.carId}-${F.timestamp}`,alarm:F,"initial-offset":{right:24,bottom:24+P*132},onClose:ee=>B(F),onAck:ee=>U(F),onSnooze:ee=>j(F),onLocate:W},null,8,["alarm","initial-offset","onClose","onAck","onSnooze"]))),128)),O.value.length?(d(),k("div",{key:0,class:"snooze-tray",onClick:V},[a(H,{value:O.value.length,type:"warning"},{default:s(()=>[a(Y,{size:"small",circle:""},{default:s(()=>[...J[0]||(J[0]=[G("≡",-1)])]),_:1})]),_:1},8,["value"])])):we("",!0)])}}}),hl=Ie(_l,[["__scopeId","data-v-c37fdeb1"]]),fe="/sl/projection/toolbar";function Ue(i,w){return{key:i,value:w,Key:i,Value:w}}function kl(i,w){return{name:i,visible:w,Name:i,Visible:w}}function bl(i){return{note:i,Note:i}}function wl(i){return{fileName:i,FileName:i}}async function ve(i){const w=(await i).data;if(!w?.success)throw new Error(w?.message??"请求失败");if(w.data==null)throw new Error("服务端返回空数据");return w.data}const ue={getState:()=>ve(ae.get(`${fe}/state`)),setAlign:(i,w)=>ve(ae.post(`${fe}/align`,Ue(i,w))),setSelect:(i,w)=>ve(ae.post(`${fe}/select`,Ue(i,w))),setDisplay:(i,w)=>ve(ae.post(`${fe}/display`,Ue(i,w))),setLayerVisibility:(i,w)=>ve(ae.post(`${fe}/layer`,kl(i,w))),startRecording:i=>ve(ae.post(`${fe}/recording/start`,bl(i??""))),stopRecording:()=>ve(ae.post(`${fe}/recording/stop`)),deleteRecording:i=>ve(ae.delete(`${fe}/recording/${encodeURIComponent(i)}`)),startPlayback:i=>ve(ae.post(`${fe}/playback/start`,wl(i))),stopPlayback:()=>ve(ae.post(`${fe}/playback/stop`)),toggleViewMode:()=>ve(ae.post(`${fe}/view/toggle`)),setCameraFollow:(i,w)=>ve(ae.post(`${fe}/camera/follow`,{carId:i??void 0,enabled:w,CarId:i??void 0,Enabled:w}))},$l={class:"canvas-toolbar"},Sl=["onClick"],Cl=["onClick"],Il={key:0,class:"menu-empty"},Nl=["onClick"],xl=["onClick"],Ll={class:"btn-label"},Tl={class:"btn-label"},Ml={class:"btn-label"},El={class:"btn-label"},Vl={class:"muted-hint"},Al=Ce({__name:"WorkspaceCanvasToolbar",props:{followCarId:{default:null}},setup(i){const w=i,f=[{key:"sites",label:"站点"},{key:"cars",label:"AGV"},{key:"tracks",label:"路径"}],x=[{key:"tracks",label:"路径"},{key:"cars",label:"AGV"},{key:"decor",label:"区域/装饰"},{key:"sites",label:"站点"}],T=[{key:"labels",label:"场景图元标记"},{key:"primitives",label:"场景图元"},{key:"cars",label:"车辆"}],o=I(null),y=Mt({align:!1,select:!1,display:!1,layer:!1,recording:!1,playback:!1,view:!1,follow:!1}),S=I(!1),O=I(!1);let B=null;const U=E(()=>{const u=o.value?.recording;if(!u?.isRecording)return"录制";const c=Math.floor((u.elapsedMs??0)/1e3),h=String(Math.floor(c/60)).padStart(2,"0"),C=String(c%60).padStart(2,"0");return`停止 ${h}:${C}`}),j=E(()=>o.value?.view?.map2D??!0),W=E(()=>o.value?.view?.follow?.enabled??!1),V=E(()=>{const u=w.followCarId;if(u!=null&&Number.isFinite(u))return u;const c=o.value?.view?.follow?.carId;return c!=null&&Number.isFinite(c)?c:null});async function b(){try{o.value=await ue.getState()}catch(u){M.error(`同步工具栏状态失败:${u.message}`)}}async function J(u){if(o.value){y.align=!0;try{o.value=await ue.setAlign(u,!o.value.align[u])}catch(c){M.error(`切换对齐失败:${c.message}`)}finally{y.align=!1}}}async function Y(u){if(o.value){y.select=!0;try{o.value=await ue.setSelect(u,!o.value.select[u])}catch(c){M.error(`切换选择过滤失败:${c.message}`)}finally{y.select=!1}}}async function H(u){if(o.value){y.display=!0;try{o.value=await ue.setDisplay(u,!o.value.display[u])}catch(c){M.error(`切换显示内容失败:${c.message}`)}finally{y.display=!1}}}async function F(u,c){y.layer=!0;try{o.value=await ue.setLayerVisibility(u,c)}catch(h){M.error(`切换图层失败:${h.message}`)}finally{y.layer=!1}}function P(){M.info("寻路右键动作尚未接入 SimpleLite;请使用 SegmentPlan.FindRoute / 工作台脚本。")}async function ee(){const u=o.value?.recording;if(u){if(u.isPlaying){M.warning("当前在回放中,请先停止回放。");return}y.recording=!0;try{o.value=u.isRecording?await ue.stopRecording():await ue.startRecording("")}catch(c){M.error(`录制操作失败:${c.message}`)}finally{y.recording=!1}}}async function de(){const u=o.value?.recording;if(u){if(u.isRecording){M.warning("录制中无法进入回放,请先停止录制。");return}if(u.isPlaying){y.playback=!0;try{o.value=await ue.stopPlayback()}catch(c){M.error(`停止回放失败:${c.message}`)}finally{y.playback=!1}return}await b(),S.value=!0}}async function z(u){y.playback=!0;try{o.value=await ue.startPlayback(u),S.value=!1,O.value=!1,M.success(`已开始回放 ${u}`)}catch(c){M.error(`启动回放失败:${c.message}`)}finally{y.playback=!1}}async function K(u){try{await Pe.confirm(`确认删除录像 ${u}?此操作不可恢复。`,"删除录像",{type:"warning"})}catch{return}try{o.value=await ue.deleteRecording(u),M.success(`已删除 ${u}`)}catch(c){M.error(`删除失败:${c.message}`)}}async function te(){await b(),O.value=!0}async function _(){y.view=!0;try{o.value=await ue.toggleViewMode()}catch(u){M.error(`切换视图失败:${u.message}`)}finally{y.view=!1}}async function L(){const u=V.value;if(!W.value&&(u==null||!Number.isFinite(u))){M.warning("请先在车辆列表或 3D 画布中选中一辆车");return}y.follow=!0;try{const c=!W.value;o.value=await ue.setCameraFollow(u,c),c?M.success({message:`已开始跟随车辆 #${u}`,duration:1500,grouping:!0}):M.info("已停止自动跟随")}catch(c){M.error(`自动跟随失败:${c.message}`)}finally{y.follow=!1}}function r(u){if(!Number.isFinite(u)||u<=0)return"0 B";if(u<1024)return`${u} B`;const c=u/1024;return c<1024?`${c.toFixed(0)} KB`:`${(c/1024).toFixed(1)} MB`}function v(u){if(!Number.isFinite(u)||u<=0)return"00:00:00";const c=Math.floor(u/1e3),h=String(Math.floor(c/3600)).padStart(2,"0"),C=String(Math.floor(c%3600/60)).padStart(2,"0"),pe=String(c%60).padStart(2,"0");return`${h}:${C}:${pe}`}function D(u){if(!u)return"—";const c=new Date(u);if(isNaN(c.getTime()))return u;const h=C=>String(C).padStart(2,"0");return`${c.getFullYear()}-${h(c.getMonth()+1)}-${h(c.getDate())} ${h(c.getHours())}:${h(c.getMinutes())}`}return Xe(()=>{b(),B=setInterval(()=>{const u=o.value?.recording;(u?.isRecording||u?.isPlaying||o.value?.view?.follow?.enabled)&&b()},1e3)}),ot(()=>{B&&clearInterval(B),W.value&&ue.setCameraFollow(null,!1).catch(()=>{})}),(u,c)=>{const h=He,C=Ae,pe=et,re=ht,he=yt,$e=wt,Ne=Et,ne=nt,le=tt,ke=st,q=Ge,Le=Tt;return d(),k("div",$l,[a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(f,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>J(e.key),["stop"])},[a(pe,{"model-value":o.value?.align[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,Sl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.align},{default:s(()=>[a(h,null,{default:s(()=>[a(X(_t))]),_:1}),c[2]||(c[2]=n("span",{class:"btn-label"},"对齐",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(x,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>Y(e.key),["stop"])},[a(pe,{"model-value":o.value?.select[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,Cl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.select},{default:s(()=>[a(h,null,{default:s(()=>[a(X(kt))]),_:1}),c[3]||(c[3]=n("span",{class:"btn-label"},"选择",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click",placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[a($e,{onClick:P},{default:s(()=>[...c[5]||(c[5]=[G("寻路",-1)])]),_:1})]),_:1})]),default:s(()=>[a(C,{size:"small"},{default:s(()=>[a(h,null,{default:s(()=>[a(X(bt))]),_:1}),c[4]||(c[4]=n("span",{class:"btn-label"},"右击功能",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1})]),_:1}),c[14]||(c[14]=n("span",{class:"separator"},null,-1)),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu layer-menu"},{default:s(()=>[!o.value||o.value.layers.length===0?(d(),k("div",Il,"(无图层)")):(d(!0),k(Z,{key:1},ie(o.value.layers,e=>(d(),k("div",{key:e.name,class:"menu-row",onClick:ge(g=>F(e.name,!e.visible),["stop"])},[a(pe,{"model-value":e.visible},null,8,["model-value"]),n("span",null,"图层 "+p(e.name),1)],8,Nl))),128))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.layer},{default:s(()=>[a(h,null,{default:s(()=>[a(X($t))]),_:1}),c[6]||(c[6]=n("span",{class:"btn-label"},"显示图层",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(T,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>H(e.key),["stop"])},[a(pe,{"model-value":o.value?.display[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,xl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.display},{default:s(()=>[a(h,null,{default:s(()=>[a(X(qe))]),_:1}),c[7]||(c[7]=n("span",{class:"btn-label"},"显示内容",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),c[15]||(c[15]=n("span",{class:"separator"},null,-1)),a(C,{size:"small",type:o.value?.recording.isRecording?"danger":"default",loading:y.recording,onClick:ee},{default:s(()=>[o.value?.recording.isRecording?(d(),me(h,{key:0},{default:s(()=>[a(X(St))]),_:1})):(d(),me(h,{key:1},{default:s(()=>[a(X(Ct))]),_:1})),n("span",Ll,p(U.value),1)]),_:1},8,["type","loading"]),a(C,{size:"small",type:o.value?.recording.isPlaying?"warning":"default",loading:y.playback,onClick:de},{default:s(()=>[o.value?.recording.isPlaying?(d(),me(h,{key:0},{default:s(()=>[a(X(It))]),_:1})):(d(),me(h,{key:1},{default:s(()=>[a(X(Nt))]),_:1})),n("span",Tl,p(o.value?.recording.isPlaying?"退出回放":"回放"),1)]),_:1},8,["type","loading"]),a(C,{size:"small",onClick:te},{default:s(()=>[a(h,null,{default:s(()=>[a(X(xt))]),_:1}),c[8]||(c[8]=n("span",{class:"btn-label"},"录像管理",-1))]),_:1}),a(C,{size:"small",type:j.value?"primary":"default",loading:y.view,onClick:_},{default:s(()=>[a(h,null,{default:s(()=>[a(X(qe))]),_:1}),n("span",Ml,p(j.value?"2D":"3D"),1)]),_:1},8,["type","loading"]),a(C,{size:"small",type:W.value?"warning":"default",disabled:!W.value&&V.value==null,loading:y.follow,onClick:L},{default:s(()=>[a(h,null,{default:s(()=>[a(X(Lt))]),_:1}),n("span",El,p(W.value?"停止跟随":"自动跟随"),1)]),_:1},8,["type","disabled","loading"]),a(ke,{modelValue:S.value,"onUpdate:modelValue":c[0]||(c[0]=e=>S.value=e),title:"选择录像回放",width:"640px","append-to-body":"","destroy-on-close":""},{default:s(()=>[!o.value||o.value.recording.entries.length===0?(d(),me(Ne,{key:0,description:"(无可用录像。点 ● 录制 创建首份录像。)"})):(d(),me(le,{key:1,data:o.value.recording.entries,size:"small",stripe:""},{default:s(()=>[a(ne,{prop:"fileName",label:"文件名","min-width":"180"}),a(ne,{label:"大小",width:"90"},{default:s(({row:e})=>[G(p(r(e.fileSizeBytes)),1)]),_:1}),a(ne,{prop:"frameCount",label:"帧",width:"70"}),a(ne,{label:"时长",width:"100"},{default:s(({row:e})=>[G(p(v(e.durationMs)),1)]),_:1}),a(ne,{label:"时间",width:"160"},{default:s(({row:e})=>[G(p(D(e.fileWriteTime)),1)]),_:1}),a(ne,{label:"操作",width:"100",fixed:"right"},{default:s(({row:e})=>[a(C,{link:"",type:"primary",disabled:!e.headerReadable,onClick:g=>z(e.fileName)},{default:s(()=>[...c[9]||(c[9]=[G("回放",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"]),a(ke,{modelValue:O.value,"onUpdate:modelValue":c[1]||(c[1]=e=>O.value=e),title:"录像管理",width:"780px","append-to-body":"","destroy-on-close":""},{default:s(()=>[n("p",Vl,"目录:"+p(o.value?.recording.recordingsDirectory??"—"),1),!o.value||o.value.recording.entries.length===0?(d(),me(Ne,{key:0,description:"(无可用录像。)"})):(d(),me(le,{key:1,data:o.value.recording.entries,size:"small",stripe:""},{default:s(()=>[a(ne,{prop:"fileName",label:"文件名","min-width":"200"}),a(ne,{label:"大小",width:"90"},{default:s(({row:e})=>[G(p(r(e.fileSizeBytes)),1)]),_:1}),a(ne,{prop:"frameCount",label:"帧",width:"70"}),a(ne,{label:"时长",width:"100"},{default:s(({row:e})=>[G(p(v(e.durationMs)),1)]),_:1}),a(ne,{label:"时间",width:"160"},{default:s(({row:e})=>[G(p(D(e.fileWriteTime)),1)]),_:1}),a(ne,{label:"状态",width:"120"},{default:s(({row:e})=>[e.headerReadable?(d(),me(q,{key:0,type:"success",size:"small"},{default:s(()=>[...c[10]||(c[10]=[G("完整",-1)])]),_:1})):(d(),me(Le,{key:1,content:e.error,placement:"top"},{default:s(()=>[a(q,{type:"danger",size:"small"},{default:s(()=>[...c[11]||(c[11]=[G("头部不可读",-1)])]),_:1})]),_:1},8,["content"]))]),_:1}),a(ne,{label:"操作",width:"160",fixed:"right"},{default:s(({row:e})=>[a(C,{link:"",type:"primary",disabled:!e.headerReadable,onClick:g=>z(e.fileName)},{default:s(()=>[...c[12]||(c[12]=[G("回放",-1)])]),_:1},8,["disabled","onClick"]),a(C,{link:"",type:"danger",onClick:g=>K(e.fileName)},{default:s(()=>[...c[13]||(c[13]=[G("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"])])}}}),Pl=Ie(Al,[["__scopeId","data-v-968a4c89"]]),Dl={class:"map-monitor-page"},Fl={class:"muted"},Ol={class:"canvas-with-alarms"},zl={class:"workbench-header"},Rl=Ce({__name:"MapMonitorView",props:{readOnly:{type:Boolean}},setup(i){const w=it(),f="localhost:8223",x=I([]),T=I([]),o=I([]),y=I({includeFinished:!0,includeAborted:!0}),S=I(null),O=I(0),B=I(!1),U=I("vehicle"),j=I(null),W=I(null),V=I([]);async function b(e){const g=Number(e.carId);if(!Number.isFinite(g)){M.warning(`报警车辆 id 无法解析:${e.carId}`);return}try{await _e.setSelection("car",g),S.value={kind:"vehicle",id:String(g),name:e.carName??String(e.carId)}}catch(N){M.error(`定位失败:${N.message}`)}}function J(e){}let Y=null;const H=E(()=>x.value.filter(e=>e.state!=="offline").length),F=E(()=>o.value.length>0?o.value.filter(e=>e.statusCode==="Fetching"||e.statusCode==="Putting").length:T.value.filter(e=>e.status==="running").length),P=E(()=>o.value.length>0?o.value.filter(e=>e.statusCode==="Waiting").length:T.value.filter(e=>e.status==="queued").length),ee=E(()=>{if(!S.value||S.value.kind!=="vehicle")return null;const e=S.value;return x.value.find(N=>N.id===e.id||le(N)===e.id)?.id??null}),de=E(()=>{if(!S.value||S.value.kind!=="vehicle")return null;const e=S.value.id,g=Number(e);if(Number.isFinite(g))return g;const N=x.value.find(R=>R.id===e||le(R)===e);if(N?.rawId!=null)return N.rawId;if(N){const R=Number(le(N));if(Number.isFinite(R))return R}return null});function z(e){}const K=/^(?:UI)?(?:Car|Vehicle)-(\d+)$/i,te=/^UISite-(\d+)$/i,_=/^(?:UITrack|UICircularArcTrack|UIBezierTrack|UINurbsTrack)-(\d+)$/i;function L(e){const g=K.exec(e);if(g)return{kind:"vehicle",id:g[1]};const N=te.exec(e);if(N)return{kind:"site",id:N[1]};const R=_.exec(e);if(R)return{kind:"track",id:R[1]};const oe=/^UI([A-Za-z]+)-(\d+)$/.exec(e)??/^([A-Za-z]+)-(\d+)$/.exec(e);if(!oe)return null;const se=oe[1].toLowerCase(),Q=oe[2];return se==="site"?{kind:"site",id:Q}:se==="car"||se==="vehicle"?{kind:"vehicle",id:Q}:se.includes("track")?{kind:"track",id:Q}:null}function r(e,g){return!e&&!g?!0:!e||!g?!1:e.kind===g.kind&&e.id===g.id}function v(e,g){j.value=null;let N;if(e.kind==="vehicle"){const R=(g?Ne(g):void 0)??x.value.find(oe=>le(oe)===e.id);N=R?{kind:"vehicle",id:le(R),name:R.name}:{kind:"vehicle",id:e.id,name:`Vehicle ${e.id}`}}else N={kind:e.kind,id:e.id,name:g||`${e.kind==="site"?"Site":"Track"} ${e.id}`};r(S.value,N)||(S.value=N)}function D(e,g,N){if(j.value=null,e==="car"){const Q=String(g),Se=N?.find(Te=>K.test(Te))??`Car-${g}`,be=Ne(Se)??x.value.find(Te=>le(Te)===Q||Te.id===Q),xe=be?{kind:"vehicle",id:le(be),name:be.name}:{kind:"vehicle",id:Q,name:`Vehicle ${Q}`};r(S.value,xe)||(S.value=xe);return}const R=String(g),oe=N?.find(Q=>{const Se=L(Q);return Se?.kind===e&&Se.id===R}),se={kind:e,id:R,name:oe||`${e==="site"?"Site":"Track"} ${R}`};r(S.value,se)||(S.value=se)}function u(e){const g=e.siteIds?.length??0,N=e.trackIds?.length??0,R=e.carIds?.length??0,oe=Array.isArray(e.names)?e.names.length:0;if(g+N+R+oe===0){S.value=null;return}if(Array.isArray(e.names))for(const se of e.names){const Q=L(se);if(Q){v(Q,se);return}}if(e.kind&&e.id){D(e.kind,e.id,e.names);return}if(g>0){D("site",e.siteIds[0],e.names);return}if(N>0){D("track",e.trackIds[0],e.names);return}R>0&&D("car",e.carIds[0],e.names)}function c(e){if(!e.length){C();return}for(const g of e){const N=L(g);if(N){v(N,g);return}}C()}function h(){C()}async function C(){try{const e=await _e.getSelection();if(!e?.kind||e.id==null||e.kind!=="car"&&e.kind!=="site"&&e.kind!=="track")return;D(e.kind,Number(e.id),e.name?[e.name]:void 0)}catch{}}async function pe(e){j.value=null,r(S.value,e)||(S.value=e);const g=Number(e.id);if(Number.isFinite(g))try{await _e.setSelection("car",g)}catch(N){M.error(`同步 3D 选中失败:${N.message}`)}}async function re(e){if(j.value=e.id,e.carId!=null){const g=x.value.find(N=>N.rawId===e.carId||le(N)===String(e.carId));if(g){await pe({kind:"vehicle",id:le(g),name:g.name});return}try{await _e.setSelection("car",e.carId),S.value={kind:"vehicle",id:String(e.carId),name:e.carName??`Vehicle ${e.carId}`}}catch(N){M.error(`同步 3D 选中失败:${N.message}`)}return}S.value={kind:"delivery",id:String(e.id),name:`${e.srcLabel} → ${e.dstLabel}`}}function he(e){y.value=e,$e()}async function $e(){try{o.value=await kn(y.value)}catch(e){console.warn("[MapMonitor] refreshDeliveries failed",e),o.value=[]}}function Ne(e){const g=ne(e);return x.value.find(N=>N.name===e||N.id===e||g!=null&&le(N)===g)}function ne(e){return/^(?:UI)?(?:Car|Vehicle)-(\d+)$/i.exec(e)?.[1]??null}function le(e){return e.rawId!=null?String(e.rawId):e.id.replace(/^C/i,"").replace(/^0+/,"")||e.id}async function ke(){B.value=!0;try{const[e,g]=await Promise.all([jt(),Kt()]);x.value=e,T.value=g,await $e()}catch(e){console.warn("[MapMonitor] refreshAll failed",e)}finally{B.value=!1}}const q=Gt({autoConnect:!0});function Le(e){if(e?.kind)switch(e.kind){case"alarm":{const g=e.payload;if(!g)return;V.value=[g,...V.value.filter(N=>N.carId!==g.carId)].slice(0,30);break}case"car-state":case"mission-status":ke();break;case"selection-detail":e.payload&&typeof e.payload=="object"&&u(e.payload);break;case"monitor-config-updated":Wt(),O.value++;break}}return q.on(Le),Xe(async()=>{rt(),await ke(),Y=setInterval(()=>{!q.connected.value||x.value.length===0?ke():U.value==="mission"&&$e()},3e3)}),Qe(()=>{Y&&clearInterval(Y),q.off(Le)}),(e,g)=>{const N=Pt,R=At,oe=Vt,se=Ot,Q=Ft,Se=Ae,be=Dt;return d(),k("div",Dl,[a(oe,{gutter:12,class:"kpi-row"},{default:s(()=>[a(R,{span:8},{default:s(()=>[a(N,{title:"在线车辆",value:H.value},{suffix:s(()=>[n("span",Fl,"/ "+p(x.value.length),1)]),_:1},8,["value"])]),_:1}),a(R,{span:8},{default:s(()=>[a(N,{title:"运行中任务",value:F.value},null,8,["value"])]),_:1}),a(R,{span:8},{default:s(()=>[a(N,{title:"排队任务",value:P.value},null,8,["value"])]),_:1})]),_:1}),a(oe,{gutter:12,class:"main-row"},{default:s(()=>[a(R,{span:16},{default:s(()=>[n("div",Ol,[a(zt,{ref_key:"workspaceRef",ref:W,host:X(f),scope:X(w).scope??"Platform",token:X(w).token??"","read-only":!!i.readOnly,"embed-ui":!0,onPick:z,onSelect:c,onReady:h},null,8,["host","scope","token","read-only"]),a(hl,{alarms:V.value,onLocate:b,onAck:J},null,8,["alarms"]),a(Pl,{"follow-car-id":de.value},null,8,["follow-car-id"])])]),_:1}),a(R,{span:8,class:"side-col"},{default:s(()=>[a(be,{shadow:"never",class:"side-card workbench-card"},{header:s(()=>[n("div",zl,[a(Q,{modelValue:U.value,"onUpdate:modelValue":g[0]||(g[0]=xe=>U.value=xe),class:"workbench-tabs"},{default:s(()=>[a(se,{label:"车辆监控台",name:"vehicle"}),a(se,{label:"任务列表",name:"mission"})]),_:1},8,["modelValue"]),a(Se,{link:"",type:"primary",size:"small",loading:B.value,onClick:ke},{default:s(()=>[...g[1]||(g[1]=[G(" 刷新 ",-1)])]),_:1},8,["loading"])])]),default:s(()=>[We(a(hn,{cars:x.value,missions:T.value,"selected-id":ee.value,onSelect:pe},null,8,["cars","missions","selected-id"]),[[je,U.value==="vehicle"]]),We(a(Pn,{deliveries:o.value,"selected-id":j.value,onSelect:re,onRefresh:he,onActionDone:$e},null,8,["deliveries","selected-id"]),[[je,U.value==="mission"]])]),_:1}),a(be,{shadow:"never",class:"side-card detail-card"},{header:s(()=>[...g[2]||(g[2]=[n("span",null,"选中信息",-1)])]),default:s(()=>[a(sl,{selection:S.value,"refresh-key":O.value,cars:x.value,missions:T.value,"read-only":!!i.readOnly},null,8,["selection","refresh-key","cars","missions","read-only"])]),_:1})]),_:1})]),_:1})])}}}),ps=Ie(Rl,[["__scopeId","data-v-2dbfc203"]]);export{ps as default}; +import{aG as Ce,b7 as d,aC as k,az as n,bo as p,aF as a,R as Ke,a3 as ut,bH as s,ah as Z,bh as ie,Z as dt,b1 as ye,ac as Ge,aE as G,_ as ft,aB as we,bf as I,av as E,aj as Ie,aS as ae,b5 as Xe,b6 as Qe,u as et,a9 as tt,aa as nt,bI as We,bz as je,bK as ge,b2 as at,Y as Pe,X as M,bG as lt,aA as me,a2 as vt,r as Ae,G as st,bt as it,Q as He,br as X,aX as mt,b4 as ot,at as pt,o as gt,I as yt,b8 as _t,am as Ve,K as ht,bb as kt,aO as bt,J as wt,aM as $t,bE as qe,bC as St,bB as Ct,as as It,bD as Nt,aJ as xt,ak as Lt,af as Tt,be as Mt,L as Et,a1 as Vt,w as At,a5 as Pt,t as Dt,ab as Ft,a8 as Ot}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{W as zt}from"./Workspace3D-CE3B9LLc.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{r as _e}from"./reflection-CTDOoTn5.js";import{m as Rt}from"./mapEdit-Z_uHqZwy.js";import{O as Bt}from"./ops-BCeFEEjY.js";import{e as Ut}from"./ops-DQIK15vn.js";import{f as rt,i as Wt}from"./monitorConfigCache-B5CZXjjB.js";/* empty css *//* empty css *//* empty css */import{l as jt,a as Kt}from"./projection-D6ulMg5U.js";import{u as Gt}from"./useProjectionStream-C_klWvmm.js";const Xt={class:"vehicle-monitor"},Ht={class:"overview-row"},Yt={class:"overview-item"},qt={class:"overview-num"},Zt={class:"overview-item"},Jt={class:"overview-num online"},Qt={class:"overview-item"},en={class:"overview-num running"},tn={class:"overview-item"},nn={class:"overview-num charging"},an={class:"overview-item"},ln={class:"overview-num fault"},sn={class:"toolbar"},on={class:"vehicle-list"},rn=["onClick"],cn={class:"vehicle-head"},un={class:"vid"},dn=["title"],fn={class:"vehicle-sub"},vn=["title"],mn={class:"mission-mini"},pn=["title"],gn={key:1,class:"mission-name muted"},yn={key:0,class:"empty muted"},_n=Ce({__name:"VehicleMonitorPanel",props:{cars:{},missions:{},selectedId:{}},emits:["select"],setup(i,{emit:w}){const f=i,x=w,T=I(""),o=I(""),y=[{value:"idle",label:"空闲"},{value:"running",label:"运行中"},{value:"charging",label:"充电中"},{value:"paused",label:"已暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],S=y.reduce((_,L)=>(_[L.value]=L.label,_),{});function O(_){return S[_]??_}function B(_){switch(_){case"running":return"success";case"charging":return"primary";case"paused":return"warning";case"fault":return"danger";case"offline":return"info";case"idle":default:return"info"}}const U={queued:"排队",assigned:"已分配",running:"执行中",paused:"暂停",completed:"已完成",cancelled:"已取消",failed:"失败"};function j(_){return U[_]??_}function W(_){switch(_){case"running":return"success";case"assigned":return"primary";case"queued":return"info";case"paused":return"warning";case"completed":return"success";case"cancelled":return"info";case"failed":return"danger";default:return"info"}}const V=E(()=>f.cars.filter(_=>_.state!=="offline").length),b=E(()=>f.cars.filter(_=>_.state==="running").length),J=E(()=>f.cars.filter(_=>_.state==="charging").length),Y=E(()=>f.cars.filter(_=>_.state==="fault").length),H=E(()=>{const _=r=>r==="running"?0:r==="paused"?1:r==="assigned"?2:3,L=new Map;for(const r of f.missions){if(!r.carId||r.status!=="running"&&r.status!=="paused"&&r.status!=="assigned")continue;const v=L.get(r.carId);(!v||_(r.status)<_(v.status))&&L.set(r.carId,r)}return L});function F(_){if(_.missionId){const L=f.missions.find(r=>r.id===_.missionId);if(L)return L}return H.value.get(_.id)}function P(_){const L=_.batterySoc??0,r=L>1?L:L*100;return Math.max(0,Math.min(100,Math.round(r)))}function ee(_){return _<20?"#f56c6c":_<50?"#e6a23c":"#67c23a"}function de(_){return _<20?"low":_<50?"mid":"high"}const z=E(()=>{const _=T.value.trim().toLowerCase(),L=_?_.split(/\s+/).filter(Boolean):[];return f.cars.filter(r=>{if(o.value&&r.state!==o.value)return!1;if(!L.length)return!0;const v=F(r),D=[r.id,r.name,r.typeName??"",r.group??"",r.ip??"",O(r.state),v?.name??"",v?j(v.status):""].join(" ").toLowerCase();return L.every(u=>D.includes(u))})});function K(_){x("select",{kind:"vehicle",id:te(_),name:_.name})}function te(_){return _.rawId!=null?String(_.rawId):_.id.replace(/^C/i,"").replace(/^0+/,"")||_.id}return(_,L)=>{const r=Ke,v=dt,D=ut,u=Ge,c=ft;return d(),k("div",Xt,[n("div",Ht,[n("div",Yt,[n("div",qt,p(i.cars.length),1),L[2]||(L[2]=n("div",{class:"overview-label"},"总数",-1))]),n("div",Zt,[n("div",Jt,p(V.value),1),L[3]||(L[3]=n("div",{class:"overview-label"},"在线",-1))]),n("div",Qt,[n("div",en,p(b.value),1),L[4]||(L[4]=n("div",{class:"overview-label"},"运行",-1))]),n("div",tn,[n("div",nn,p(J.value),1),L[5]||(L[5]=n("div",{class:"overview-label"},"充电",-1))]),n("div",an,[n("div",ln,p(Y.value),1),L[6]||(L[6]=n("div",{class:"overview-label"},"故障",-1))])]),n("div",sn,[a(r,{modelValue:T.value,"onUpdate:modelValue":L[0]||(L[0]=h=>T.value=h),size:"small",clearable:"",placeholder:"搜索 ID / 名称 / 任务",class:"search"},null,8,["modelValue"]),a(D,{modelValue:o.value,"onUpdate:modelValue":L[1]||(L[1]=h=>o.value=h),size:"small",placeholder:"状态",clearable:"",class:"filter"},{default:s(()=>[(d(),k(Z,null,ie(y,h=>a(v,{key:h.value,label:h.label,value:h.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),n("div",on,[(d(!0),k(Z,null,ie(z.value,h=>(d(),k("div",{key:h.id,class:ye(["vehicle-row",{"is-selected":h.id===i.selectedId}]),onClick:C=>K(h)},[n("div",cn,[n("span",un,p(h.id),1),n("span",{class:"vname",title:h.name},p(h.name),9,dn),a(u,{size:"small",type:B(h.state),class:"state-tag",effect:"dark"},{default:s(()=>[n("span",{class:ye(["dot",`dot-${h.state}`])},null,2),G(" "+p(O(h.state)),1)]),_:2},1032,["type"])]),n("div",fn,[n("div",{class:"battery-mini",title:`电量 ${P(h)}%`},[a(c,{percentage:P(h),"stroke-width":6,"show-text":!1,color:ee(P(h)),class:"battery-bar"},null,8,["percentage","color"]),n("span",{class:ye(["battery-text",de(P(h))])},p(P(h))+"% ",3)],8,vn),n("div",mn,[F(h)?(d(),k(Z,{key:0},[a(u,{size:"small",type:W(F(h).status),effect:"plain",class:"mission-tag"},{default:s(()=>[G(p(j(F(h).status)),1)]),_:2},1032,["type"]),n("span",{class:"mission-name",title:F(h).name},p(F(h).name),9,pn)],64)):(d(),k("span",gn,"空闲"))])])],10,rn))),128)),z.value.length?we("",!0):(d(),k("div",yn," 无匹配车辆 "))])])}}}),hn=Ie(_n,[["__scopeId","data-v-c1cc74ad"]]),De="/sl/projection/deliveries";async function kn(i){const w={};i?.includeFinished===!1&&(w.includeFinished="false"),i?.includeAborted===!1&&(w.includeAborted="false");const{data:f}=await ae.get(De,{params:w});return Array.isArray(f)?f:[]}async function bn(i){await ae.post(`${De}/${i}/cancel`)}async function wn(i){await ae.post(`${De}/${i}/resend`)}async function $n(i){await ae.post(`${De}/${i}/force-complete`)}const Sn={class:"mission-list-panel"},Cn={class:"toolbar"},In=["title"],Nn=["title"],xn=["title"],Ln=["title"],Tn={key:1,class:"muted"},Mn={key:0,class:"empty muted"},En=["disabled"],Vn=["disabled"],An=Ce({__name:"MissionListPanel",props:{deliveries:{},selectedId:{},loading:{type:Boolean}},emits:["select","refresh","actionDone"],setup(i,{emit:w}){const f=i,x=w,T=I(""),o=I(!0),y=I(!0),S=I(!1),O=I(0),B=I(0),U=I(null),j=E(()=>{const r=T.value.trim().toLowerCase(),v=r?r.split(/\s+/).filter(Boolean):[];return f.deliveries.filter(D=>{if(!v.length)return!0;const u=[String(D.id),D.srcLabel,D.dstLabel,D.status,D.carName??"",D.missionName].join(" ").toLowerCase();return v.every(c=>u.includes(c))})});function W(r,v=9){const D=r.indexOf("-"),u=D>=0?r.slice(D+1):r;return u.length<=v?u:`${u.slice(0,v)}…`}function V(r){return{已下发:"待发",执行中:"执行",已完成:"完成",已取消:"取消",强制结束:"强结",任务异常:"异常"}[r]??(r.length>4?`${r.slice(0,3)}…`:r)}function b(r,v=6){return r.length<=v?r:`${r.slice(0,v)}…`}function J(r){switch(r){case"Fetching":case"Putting":return"success";case"Waiting":return"primary";case"Finished":return"info";case"Canceled":case"Terminated":return"warning";case"Error":return"danger";default:return"info"}}function Y({row:r}){const v=[];return r.id===f.selectedId&&v.push("is-selected-row"),r.overdue&&v.push("is-overdue-row"),v.join(" ")}function H(r){return["Finished","Canceled","Terminated","Error"].includes(r)}function F(r){return r!=null&&!H(r.statusCode)}function P(r){return r!=null&&!H(r.statusCode)}function ee(){x("refresh",{includeFinished:o.value,includeAborted:y.value})}function de(r){K(),x("select",r)}function z(r,v,D){D.preventDefault(),U.value=r,O.value=D.clientX,B.value=D.clientY,S.value=!0}function K(){S.value=!1,U.value=null}const te={cancel:"取消任务",resend:"重发任务","force-complete":"强制完成"};async function _(r){const v=U.value;if(K(),!!v&&!(r==="cancel"&&!F(v))&&!(r==="force-complete"&&!P(v))){try{await Pe.confirm(`确定对任务 #${v.id}(${v.srcLabel} → ${v.dstLabel})执行「${te[r]}」?`,"确认操作",{type:"warning",confirmButtonText:"确定",cancelButtonText:"取消"})}catch{return}try{r==="cancel"?await bn(v.id):r==="resend"?await wn(v.id):await $n(v.id),M.success(`${te[r]} 已提交`),x("actionDone")}catch(D){M.error(`${te[r]} 失败:${D.message}`)}}}function L(){K()}return Xe(()=>document.addEventListener("click",L)),Qe(()=>document.removeEventListener("click",L)),(r,v)=>{const D=Ke,u=et,c=nt,h=tt;return d(),k("div",Sn,[n("div",Cn,[a(D,{modelValue:T.value,"onUpdate:modelValue":v[0]||(v[0]=C=>T.value=C),size:"small",clearable:"",placeholder:"搜索任务 ID / 站点 / 车辆",class:"search"},null,8,["modelValue"]),a(u,{modelValue:o.value,"onUpdate:modelValue":v[1]||(v[1]=C=>o.value=C),size:"small",onChange:ee},{default:s(()=>[...v[7]||(v[7]=[G(" 含已完成 ",-1)])]),_:1},8,["modelValue"]),a(u,{modelValue:y.value,"onUpdate:modelValue":v[2]||(v[2]=C=>y.value=C),size:"small",onChange:ee},{default:s(()=>[...v[8]||(v[8]=[G(" 含取消/异常 ",-1)])]),_:1},8,["modelValue"])]),a(h,{data:j.value,size:"small",stripe:"","highlight-current-row":"","row-class-name":Y,height:"100%",class:"delivery-table","table-layout":"fixed",onRowClick:de,onRowContextmenu:z},{default:s(()=>[a(c,{prop:"id",label:"ID",width:"40",align:"center"}),a(c,{label:"起点","show-overflow-tooltip":""},{default:s(({row:C})=>[n("span",{class:"cell-ellipsis",title:C.srcLabel},p(W(C.srcLabel)),9,In)]),_:1}),a(c,{label:"终点","show-overflow-tooltip":""},{default:s(({row:C})=>[n("span",{class:"cell-ellipsis",title:C.dstLabel},p(W(C.dstLabel)),9,Nn)]),_:1}),a(c,{label:"状态",width:"52",align:"center"},{default:s(({row:C})=>[n("span",{class:ye(["status-pill",`status-pill--${J(C.statusCode)}`]),title:C.status},p(V(C.status)),11,xn)]),_:1}),a(c,{label:"车辆",width:"56","show-overflow-tooltip":""},{default:s(({row:C})=>[C.carName?(d(),k("span",{key:0,class:"cell-ellipsis",title:C.carName},p(b(C.carName)),9,Ln)):(d(),k("span",Tn,"—"))]),_:1})]),_:1},8,["data"]),j.value.length?we("",!0):(d(),k("div",Mn,"暂无搬运任务")),We(n("div",{class:"ctx-menu",style:at({left:`${O.value}px`,top:`${B.value}px`}),onClick:v[6]||(v[6]=ge(()=>{},["stop"]))},[n("button",{type:"button",class:"ctx-item",disabled:!F(U.value),onClick:v[3]||(v[3]=C=>_("cancel"))}," 取消任务 ",8,En),n("button",{type:"button",class:"ctx-item",onClick:v[4]||(v[4]=C=>_("resend"))}," 重发任务 "),n("button",{type:"button",class:"ctx-item",disabled:!P(U.value),onClick:v[5]||(v[5]=C=>_("force-complete"))}," 强制完成 ",8,Vn)],4),[[je,S.value]])])}}}),Pn=Ie(An,[["__scopeId","data-v-38e00e9c"]]),Dn=["onClick"],Fn={class:"sid"},On={class:"sname"},zn={key:0,class:"empty"},Rn=Ce({__name:"SitePickDialog",props:{modelValue:{type:Boolean},title:{},sites:{}},emits:["update:modelValue","confirm","pickOnMap"],setup(i,{expose:w,emit:f}){const x=i,T=f,o=E({get:()=>x.modelValue,set:V=>T("update:modelValue",V)}),y=I(""),S=I(null),O=I(!1),B=E(()=>{const V=y.value.trim().toLowerCase();return V?x.sites.filter(b=>String(b.id).includes(V)||b.name.toLowerCase().includes(V)||b.label.toLowerCase().includes(V)):x.sites});lt(()=>x.modelValue,V=>{V&&(y.value="",S.value=x.sites[0]?.id??null)});function U(){S.value!=null&&(T("confirm",S.value),o.value=!1)}function j(){O.value=!0,T("pickOnMap")}function W(){O.value=!1}return w({close:()=>{o.value=!1},endMapPick:()=>{O.value=!1}}),(V,b)=>{const J=Ke,Y=vt,H=Ae,F=st;return d(),me(F,{modelValue:o.value,"onUpdate:modelValue":b[2]||(b[2]=P=>o.value=P),title:i.title,width:"420px","destroy-on-close":"","append-to-body":"",class:"site-pick-dialog",onClosed:W},{footer:s(()=>[a(H,{onClick:b[1]||(b[1]=P=>o.value=!1)},{default:s(()=>[...b[3]||(b[3]=[G("取消",-1)])]),_:1}),a(H,{loading:O.value,onClick:j},{default:s(()=>[...b[4]||(b[4]=[G("在地图上拾取",-1)])]),_:1},8,["loading"]),a(H,{type:"primary",disabled:S.value==null,onClick:U},{default:s(()=>[...b[5]||(b[5]=[G("确认前往",-1)])]),_:1},8,["disabled"])]),default:s(()=>[b[6]||(b[6]=n("p",{class:"hint"},"请选择车辆要前往的目标站点。",-1)),a(J,{modelValue:y.value,"onUpdate:modelValue":b[0]||(b[0]=P=>y.value=P),clearable:"",placeholder:"搜索站点 ID / 名称",class:"filter-input"},null,8,["modelValue"]),a(Y,{"max-height":"280px",class:"site-scroll"},{default:s(()=>[(d(!0),k(Z,null,ie(B.value,P=>(d(),k("button",{key:P.id,type:"button",class:ye(["site-row",{active:S.value===P.id}]),onClick:ee=>S.value=P.id},[n("span",Fn,"#"+p(P.id),1),n("span",On,p(P.name||"未命名"),1)],10,Dn))),128)),B.value.length?we("",!0):(d(),k("div",zn,"无匹配站点"))]),_:1})]),_:1},8,["modelValue","title"])}}}),Bn=Ie(Rn,[["__scopeId","data-v-1e1b7025"]]),Un=new Set(["Goto","GotoSite"]),Wn=["去某地","前往站点"];function Ze(i){if(i.params?.length)return!1;if(Un.has(i.methodName))return!0;const w=i.label??"";return Wn.some(f=>w.includes(f))}async function jn(){return(await _e.listObjects("site")).map(w=>({id:w.id,name:w.name,label:`#${w.id} ${w.name||"站点"}`})).sort((w,f)=>w.id-f.id)}async function Je(){try{M.info({message:"请在 3D 地图上点击目标站点附近",duration:4e3});const i=await Rt.pick();return i.siteId==null||i.siteId<0?(M.warning("未识别到附近站点,请靠近站点再点击"),null):i.siteId}catch(i){return i instanceof Error&&/取消|cancel|499/i.test(i.message)||M.error(`地图拾取失败:${i instanceof Error?i.message:String(i)}`),null}}function Kn(i){if(i&&typeof i=="object"&&"response"in i&&i.response?.status===404)return!0;const w=i instanceof Error?i.message:String(i);return/status code 404/i.test(w)}async function Gn(i,w){try{const f=await _e.gotoCarSite(i,w);return M.success(f.message||`已下发前往站点 #${w}`),!0}catch(f){if(!Kn(f))return M.error(`前往站点失败:${f instanceof Error?f.message:String(f)}`),!1;try{const x=await _e.execute("car",i,"WebGotoSite",{siteId:w});return M.success(x.returnValue?`已执行:${x.returnValue}`:`已下发前往站点 #${w}`),!0}catch(x){const T=x instanceof Error?x.message:String(x),o=/WebGotoSite|goto-site|不存在可调用方法/i.test(T);return M.error(o?`${T}。当前 SimpleLite 仍是旧版 DLL:请先完全关闭 SimpleLite 窗口,再在 PowerShell 执行 Migu2.0/scripts/redeploy-simplelite.ps1,然后重新登录;或调用 POST /api/health/simplelite/restart-for-update`:`前往站点失败:${T}`),!1}}}async function Xn(i,w,f){const x=f.label||f.methodName,T={};for(const o of f.params)try{const{value:y}=await Pe.prompt(`参数 ${o.name}(${o.typeName})`,x,{inputValue:o.defaultValue??"",confirmButtonText:"确定",cancelButtonText:"取消"});T[o.name]=y??""}catch{return!1}try{const o=await _e.execute(i,w,f.methodName,T);return M.success(o.returnValue?`已执行:${o.returnValue}`:`已执行 ${x}`),!0}catch(o){return M.error(`执行失败:${o instanceof Error?o.message:String(o)}`),!1}}const Hn={class:"monitor-selection"},Yn={key:0,class:"empty-hint"},qn={key:1,class:"pane"},Zn={key:0,class:"pane-loading"},Jn={class:"card card--header"},Qn={class:"title-row"},ea={class:"id-tag"},ta={class:"name-line"},na={class:"card"},aa={class:"kv-grid"},la={class:"kv"},sa={class:"v mono"},ia={class:"kv"},oa={class:"v mono"},ra={class:"kv"},ca={class:"v mono"},ua={key:0,class:"card"},da={class:"card-hd"},fa={class:"meta"},va={class:"kv-list"},ma={class:"k"},pa=["title"],ga={key:1,class:"card card--actions"},ya={class:"action-grid"},_a=["disabled","onClick"],ha={class:"card card--header"},ka={class:"title-row"},ba={class:"id-tag"},wa={class:"name-line"},$a={class:"card"},Sa={class:"kv-list"},Ca={class:"kv-row"},Ia=["title"],Na={class:"kv-row"},xa={class:"v"},La=["title"],Ta={class:"kv-row"},Ma={class:"kv-row"},Ea=["title"],Va={class:"card card--actions"},Aa={class:"card-hd"},Pa={key:0,class:"meta"},Da={key:1,class:"meta"},Fa={key:0,class:"muted-line"},Oa={key:1,class:"action-grid action-grid--vehicle"},za=["disabled","title","onClick"],Ra={key:0,class:"muted-line"},Ba={key:1,class:"muted-line"},Ua={key:2,class:"action-grid action-grid--vehicle"},Wa=["disabled","onClick"],ja={class:"card card--header"},Ka={class:"title-row"},Ga={class:"id-tag"},Xa={class:"name-line"},Ha={key:0,class:"card"},Ya={class:"kv-list"},qa={class:"k"},Za={class:"v"},Ja={class:"k"},Qa={class:"v"},el={key:1,class:"card card--actions"},tl={class:"action-grid"},nl=["disabled","onClick"],al={key:4,class:"muted-line"},ll=Ce({__name:"MonitorSelectionPanel",props:{selection:{},refreshKey:{},cars:{},missions:{},readOnly:{type:Boolean}},setup(i){const w=new Set(["AllowLock","PreventLock"]),f=i,x=it(),T=I(!1),o=I(!1),y=I(!1),S=I(null),O=I(null),B=I(""),U=I(""),j=I(""),W=I({}),V=I([]),b=I([]),J=I({}),Y=I([]),H=I([]),F=I(!1),P=I(!1),ee=I([]),de=I("选择目标站点"),z={car:"car",vehicle:"car",site:"site",track:"track"},K=E(()=>{const t=f.selection?.kind?.toLowerCase();return t?z[t]??null:null}),te=E(()=>{const t=f.selection?.kind?.toLowerCase();return t==="site"?"site":t==="vehicle"||t==="car"?"vehicle":t==="track"?"track":"other"}),_=E(()=>{const t=Number(f.selection?.id);return Number.isFinite(t)?t:f.selection?.id??"-"});function L(t,l=1){if(t==null||t==="")return"—";const m=Number(t);return Number.isFinite(m)?m.toFixed(l):t}function r(...t){for(const l of t){const m=W.value[l];if(m!=null&&m!=="")return m}return""}function v(...t){for(const l of t){const m=V.value.find(A=>A.key===l);if(m?.value)return m.value}for(const l of t){const m=V.value.find(A=>A.key.includes(l));if(m?.value)return m.value}return""}function D(){const t=v("标记","tags");return t?/unavailable/i.test(t):!1}const u=E(()=>({name:r("name")||B.value||f.selection?.name||`站点 ${_.value}`,x:L(r("x"),1),y:L(r("y"),1),z:L(r("z"),1),disabled:D()})),c=E(()=>{const t=Y.value;if(t.length){const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))}return b.value.filter(l=>w.has(l.methodName))}),h=E(()=>{const t=H.value;if(!t.length)return b.value;const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))});function C(){if(!f.selection||te.value!=="vehicle")return;const t=String(f.selection.id);return f.cars?.find(l=>l.id===t||String(l.rawId??"")===t||pe(l)===t)}function pe(t){return t.rawId!=null?String(t.rawId):t.id.replace(/^C/i,"").replace(/^0+/,"")||t.id}const re=E(()=>V.value.map(t=>({key:t.key,value:t.value||"—",warn:/alarm|error|fault|block|stop/i.test(`${t.key} ${t.value}`)&&t.value!=="0"&&t.value!=="无"})));function he(){const t=r("tags");if(t)return t;const l=v("tags","标记");if(l)return l;for(const m of V.value)if(/tag|标记/i.test(m.key)&&m.value)return m.value;return""}function $e(){const t=he();if(/occupied/i.test(t))return!0;for(const l of V.value)if(/occupied/i.test(l.value??""))return!0;return!1}function Ne(){const t=C(),l=r("batterySoc","battery","电量");let m=null;if(l){const A=Number(l);Number.isFinite(A)&&(m=A<=1?Math.round(A*100):Math.round(A))}else t!=null&&(m=Math.round(t.batterySoc<=1?t.batterySoc*100:t.batterySoc));return m==null?{text:"—",low:!1}:{text:`${m}%`,low:m<20}}function ne(){const t=C(),l=r("x"),m=r("y"),A=r("th","theta"),$=l||(t!=null?String(t.x):""),ce=m||(t!=null?String(t.y):""),Me=A||(t!=null?String(t.theta):"");if($||ce)return`(${$||"—"}, ${ce||"—"}${Me?`, ${L(Me,1)}°`:""})`;const Ee=r("siteID");return Ee&&Ee!=="-1"?`站点 #${Ee}`:v("位姿","站点")||"—"}function le(){const t=v("TCStat")||r("TCStat");if(t&&t!=="/"&&t.trim()!=="")return t;const l=v("blockedBy");if(l&&l!=="[]"&&l!=="/")try{const Me=JSON.parse(l);if(Array.isArray(Me)&&Me.length>0){const Ee=Me.map(Be=>Be.carid).filter(Be=>Be!=null);return Ee.length?`被车辆 ${Ee.join("、")} 交管`:"交管阻塞"}}catch{return l.length>48?`${l.slice(0,48)}…`:l}const m=v("trafficStopped");if(m&&m!=="(0, 0)"&&m!=="(0,0)"&&m!=="/")return`交管暂停 ${m}`;const A=v("holdingLocks"),$=v("pendingLocks"),ce=[];return A&&A!=="[]"&&ce.push(`已占 ${A}`),$&&$!=="[]"&&ce.push(`待锁 ${$}`),ce.length?ce.join(";"):"正常"}function ke(){const t=v("车体_AlarmInfo","AlarmInfo")||V.value.find(m=>/alarminfo/i.test(m.key))?.value;if(t&&t!=="0"&&t!=="/"&&t.trim()!=="")return{text:t,warn:!0};const l=r("lstatus")||v("lstatus");return l&&/故障|报警|异常|失联|超时|检修/i.test(l)?{text:l,warn:!0}:{text:"无",warn:!1}}const q=E(()=>{const t=C(),l=$e(),m=l?"任务中":"空闲",A=ke(),$=Ne();return{id:t?.id??f.selection?.id??"-",name:B.value||t?.name||f.selection?.name||"车辆",runLabel:m,runTagType:l?"success":"info",traffic:le(),alarm:A.text,alarmWarn:A.warn,battery:$.text,batteryLow:$.low,position:ne()}});function Le(){const t=J.value,l=j.value,m=U.value;if(l&&t[l]?.length)return t[l];if(m&&t[m]?.length)return t[m];for(const[A,$]of Object.entries(t))if($.length&&(l&&(A===l||A.endsWith("."+m)||l.endsWith("."+A))||m&&(A===m||A.endsWith("."+m))))return $;return[]}const e=E(()=>Le()),g=E(()=>{const t=e.value;if(!t.length)return[];const l=new Set(t);return b.value.filter(m=>l.has(m.methodName))}),N=E(()=>Bt.filter(t=>t.target==="car"&&x.hasOp(t.code)));async function R(t){const l=Number(f.selection?.id);if(Number.isFinite(l)){if(t.needConfirm)try{await Pe.confirm(`确认执行 [${t.label}]? +目标车辆:${f.selection?.id}`,"二次确认",{type:"warning"})}catch{return}S.value=t.code;try{const m=await Ut({opCode:t.code,targetId:String(l),reason:""});m.ok?M.success(`已执行 ${t.label}(auditId=${m.auditId})`):M.warning(m.message||`执行未成功:${t.label}`)}catch(m){M.error(`执行失败:${m.message}`)}finally{S.value=null}}}const oe=E(()=>F.value?Object.keys(J.value).length?e.value.length?"当前车型无可执行动作。":"当前车型未配置动作,或方法名与运营维护中勾选的不一致。":"未配置动作。请在「配置中心 → 运营维护」按车型勾选动作并保存。":"加载配置中…"),se=E(()=>({name:r("name")||B.value||f.selection?.name||`路径 ${_.value}`})),Q=E(()=>[{key:"layer",label:"图层",value:r("layerName","layer")||"—"},{key:"type",label:"类型",value:U.value||"—"}]);function Se(t){return t?`${t.kind}:${t.id}`:""}async function be(t=!1){if(!(F.value&&!t))try{const l=await rt(t);J.value={...l.config.carActionByType??{}},Y.value=[...l.config.site?.methods??[]],H.value=[...l.config.track?.methods??[]]}catch{J.value={},Y.value=[],H.value=[]}finally{F.value=!0}}function xe(t,l){B.value=t.summary?.name??l??"",U.value=t.typeName??"",j.value="fullTypeName"in t&&t.fullTypeName?t.fullTypeName:t.typeName??"",W.value={...t.fields};for(const m of t.fieldList??[])W.value[m.key]=m.value;V.value=t.status??[],b.value=t.methods??[]}function Te(){const t=C();if(!t)return!1;B.value=t.name,U.value=t.typeName??"",j.value=t.typeName??"";const l=Math.round(t.batterySoc<=1?t.batterySoc*100:t.batterySoc);return W.value={x:String(t.x),y:String(t.y),th:String(t.theta),batterySoc:String(l)},V.value=[],b.value=[],!0}async function Fe(){if(!f.selection){B.value="",W.value={},V.value=[],b.value=[],o.value=!1;return}const t=K.value,l=Number(f.selection.id);if(!t||!Number.isFinite(l))return;const m=o.value,A=!m&&te.value==="vehicle"&&Te();A&&(o.value=!0),m?y.value=!0:T.value=!A;try{if(f.readOnly){const ce=await _e.getBundle(t,l);xe(ce,f.selection.name??""),b.value=[],o.value=!0;return}await be(!1);const $=await _e.getBundle(t,l);xe($,f.selection.name??""),o.value=!0}catch($){f.readOnly?console.warn("[MonitorSelection] 只读详情加载失败,降级用列表数据",$):M.error(`加载选中信息失败:${$.message}`)}finally{T.value=!1,y.value=!1}}async function Oe(t){const l=K.value;if(!l||!f.selection||!t.methodName)return;const m=Number(f.selection.id);if(Number.isFinite(m)){if(l==="car"&&Ze(t)){O.value=t,de.value=`选择目标站点 — ${t.label||t.methodName}`,S.value=t.methodName;try{const A=await Je();if(A!=null){await ze(A);return}ee.value=await jn(),P.value=!0}catch(A){M.error(`加载站点列表失败:${A.message}`)}finally{P.value||(S.value=null)}return}S.value=t.methodName;try{await Xn(l,m,t)&&await Fe()}finally{S.value=null}}}async function ze(t){const l=Number(f.selection?.id);if(Number.isFinite(l)){S.value=O.value?.methodName??"goto";try{await Gn(l,t)&&await Fe()}finally{S.value=null,O.value=null}}}async function ct(){const t=await Je();P.value=!1,t!=null&&await ze(t)}let Re=0,Ye="";return lt(()=>[Se(f.selection),f.refreshKey],async(t,l)=>{const m=++Re;if(l&&t[0]===l[0]&&t[0]&&t[1]!==l[1])return await be(!0),void 0;t[0]!==Ye&&(o.value=!1,Ye=t[0]),await Fe()},{immediate:!0}),(t,l)=>{const m=He,A=Ge;return d(),k("div",Hn,[i.selection?(d(),k("div",qn,[T.value?(d(),k("div",Zn,[a(m,{class:"is-loading"},{default:s(()=>[a(X(mt))]),_:1}),l[2]||(l[2]=n("span",null,"加载中…",-1))])):te.value==="site"?(d(),k(Z,{key:1},[n("section",Jn,[n("div",Qn,[n("span",ea,"#"+p(_.value),1),l[3]||(l[3]=n("span",{class:"type-tag"},"站点",-1))]),n("div",ta,p(u.value.name),1)]),n("section",na,[l[7]||(l[7]=n("header",{class:"card-hd"},[n("span",null,"位置")],-1)),n("div",aa,[n("div",la,[l[4]||(l[4]=n("span",{class:"k"},"X",-1)),n("span",sa,p(u.value.x),1)]),n("div",ia,[l[5]||(l[5]=n("span",{class:"k"},"Y",-1)),n("span",oa,p(u.value.y),1)]),n("div",ra,[l[6]||(l[6]=n("span",{class:"k"},"Z",-1)),n("span",ca,p(u.value.z),1)])])]),re.value.length?(d(),k("section",ua,[n("header",da,[l[8]||(l[8]=n("span",null,"状态",-1)),n("span",fa,p(re.value.length),1)]),n("div",va,[(d(!0),k(Z,null,ie(re.value,$=>(d(),k("div",{key:$.key,class:"kv-row"},[n("span",ma,p($.key),1),n("span",{class:"v",title:$.value},p($.value),9,pa)]))),128))])])):we("",!0),!i.readOnly&&c.value.length?(d(),k("section",ga,[l[9]||(l[9]=n("header",{class:"card-hd"},[n("span",null,"操作")],-1)),n("div",ya,[(d(!0),k(Z,null,ie(c.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:"action-btn",disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),9,_a))),128))])])):we("",!0)],64)):te.value==="vehicle"?(d(),k(Z,{key:2},[n("section",ha,[n("div",ka,[n("span",ba,p(q.value.id),1),a(A,{size:"small",type:q.value.runTagType,effect:"dark"},{default:s(()=>[G(p(q.value.runLabel),1)]),_:1},8,["type"])]),n("div",wa,p(q.value.name),1)]),n("section",$a,[l[15]||(l[15]=n("header",{class:"card-hd"},[n("span",null,"运行信息")],-1)),n("div",Sa,[n("div",Ca,[l[10]||(l[10]=n("span",{class:"k"},"交管状态",-1)),n("span",{class:"v",title:q.value.traffic},p(q.value.traffic),9,Ia)]),n("div",Na,[l[11]||(l[11]=n("span",{class:"k"},"运行状态",-1)),n("span",xa,p(q.value.runLabel),1)]),n("div",{class:ye(["kv-row",{"is-warn":q.value.alarmWarn}])},[l[12]||(l[12]=n("span",{class:"k"},"报警状态",-1)),n("span",{class:"v",title:q.value.alarm},p(q.value.alarm),9,La)],2),n("div",Ta,[l[13]||(l[13]=n("span",{class:"k"},"电量",-1)),n("span",{class:ye(["v",{"is-low-battery":q.value.batteryLow}])},p(q.value.battery),3)]),n("div",Ma,[l[14]||(l[14]=n("span",{class:"k"},"位置",-1)),n("span",{class:"v mono",title:q.value.position},p(q.value.position),9,Ea)])])]),n("section",Va,[n("header",Aa,[n("span",null,p(i.readOnly?"运维动作":"动作"),1),!i.readOnly&&g.value.length?(d(),k("span",Pa,p(g.value.length),1)):i.readOnly&&N.value.length?(d(),k("span",Da,p(N.value.length),1)):we("",!0)]),i.readOnly?(d(),k(Z,{key:0},[N.value.length?(d(),k("div",Oa,[(d(!0),k(Z,null,ie(N.value,$=>(d(),k("button",{key:$.code,type:"button",class:ye(["action-btn",{"action-btn--goto":$.needConfirm}]),disabled:S.value===$.code,title:$.description,onClick:ce=>R($)},p($.label),11,za))),128))])):(d(),k("div",Fa,"当前账号无可执行的运维动作。"))],64)):(d(),k(Z,{key:1},[y.value?(d(),k("div",Ra,"加载动作…")):g.value.length?(d(),k("div",Ua,[(d(!0),k(Z,null,ie(g.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:ye(["action-btn",{"action-btn--goto":X(Ze)($)}]),disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),11,Wa))),128))])):(d(),k("div",Ba,p(oe.value),1))],64))])],64)):te.value==="track"?(d(),k(Z,{key:3},[n("section",ja,[n("div",Ka,[n("span",Ga,"#"+p(_.value),1),l[16]||(l[16]=n("span",{class:"type-tag"},"路径",-1))]),n("div",Xa,p(se.value.name),1)]),re.value.length||Q.value.length?(d(),k("section",Ha,[l[17]||(l[17]=n("header",{class:"card-hd"},[n("span",null,"信息")],-1)),n("div",Ya,[(d(!0),k(Z,null,ie(Q.value,$=>(d(),k("div",{key:$.key,class:"kv-row"},[n("span",qa,p($.label),1),n("span",Za,p($.value),1)]))),128)),(d(!0),k(Z,null,ie(re.value,$=>(d(),k("div",{key:"s-"+$.key,class:"kv-row"},[n("span",Ja,p($.key),1),n("span",Qa,p($.value),1)]))),128))])])):we("",!0),!i.readOnly&&h.value.length?(d(),k("section",el,[l[18]||(l[18]=n("header",{class:"card-hd"},[n("span",null,"动作")],-1)),n("div",tl,[(d(!0),k(Z,null,ie(h.value,$=>(d(),k("button",{key:$.methodName,type:"button",class:"action-btn",disabled:S.value===$.methodName,onClick:ce=>Oe($)},p($.label||$.methodName),9,nl))),128))])])):we("",!0)],64)):(d(),k("div",al,"该类型暂不支持监控详情展示。"))])):(d(),k("div",Yn,[...l[1]||(l[1]=[n("span",{class:"empty-title"},"未选中对象",-1),n("span",{class:"empty-desc"},"在 3D 画布或车辆列表中点击以查看信息。",-1)])])),a(Bn,{modelValue:P.value,"onUpdate:modelValue":l[0]||(l[0]=$=>P.value=$),title:de.value,sites:ee.value,onConfirm:ze,onPickOnMap:ct},null,8,["modelValue","title","sites"])])}}}),sl=Ie(ll,[["__scopeId","data-v-c9236d99"]]),il={class:"fac-header"},ol={class:"fac-title"},rl={class:"fac-time"},cl={class:"fac-body"},ul={class:"fac-info"},dl={class:"fac-coord"},fl={key:0},vl={key:1,class:"muted"},ml={class:"fac-actions"},pl=Ce({__name:"FloatingAlarmCard",props:{alarm:{},initialOffset:{}},emits:["close","ack","snooze","locate"],setup(i,{emit:w}){const f=i,x=w,T=I(null),o=I(!1),y=I({right:f.initialOffset?.right??24,bottom:f.initialOffset?.bottom??24}),S=E(()=>typeof f.alarm.x=="number"&&Number.isFinite(f.alarm.x)),O=E(()=>{const z=(f.alarm.info||"").toLowerCase();return z.includes("critical")||z.includes("严重")||z.includes("紧急")?"critical":z.includes("error")||z.includes("故障")?"error":z.includes("warn")||z.includes("告警")?"warn":"info"}),B=E(()=>{try{return new Date(f.alarm.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}}),U=E(()=>({left:y.value.left!==void 0?`${y.value.left}px`:void 0,top:y.value.top!==void 0?`${y.value.top}px`:void 0,right:y.value.right!==void 0?`${y.value.right}px`:void 0,bottom:y.value.bottom!==void 0?`${y.value.bottom}px`:void 0}));let j=0,W=0,V=0,b=0;function J(z){if(!T.value)return;const K=T.value.getBoundingClientRect();V=K.left,b=K.top,j=z.clientX,W=z.clientY,o.value=!0,window.addEventListener("mousemove",Y),window.addEventListener("mouseup",H)}function Y(z){y.value={left:V+(z.clientX-j),top:b+(z.clientY-W)}}function H(){o.value=!1,window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",H)}ot(()=>{window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",H)});function F(){x("close")}function P(){x("ack")}function ee(){x("snooze")}function de(){x("locate",f.alarm)}return(z,K)=>{const te=He,_=Ae;return d(),k("div",{ref_key:"cardRef",ref:T,class:ye(["floating-alarm-card",[`lvl-${O.value}`,{dragging:o.value}]]),style:at(U.value),onMousedown:ge(J,["stop"])},[n("div",il,[K[0]||(K[0]=n("span",{class:"fac-dot"},null,-1)),n("span",ol,p(i.alarm.carName)+" #"+p(i.alarm.carId),1),n("span",rl,p(B.value),1),a(te,{class:"fac-close",onClick:ge(F,["stop"])},{default:s(()=>[a(X(pt))]),_:1})]),n("div",cl,[n("div",ul,p(i.alarm.info),1),n("div",dl,[S.value?(d(),k("span",fl,"坐标 ("+p(i.alarm.x?.toFixed(0))+", "+p(i.alarm.y?.toFixed(0))+") mm",1)):(d(),k("span",vl,"无坐标"))])]),n("div",ml,[a(_,{size:"small",plain:"",disabled:!S.value,onClick:ge(de,["stop"])},{default:s(()=>[...K[1]||(K[1]=[G("定位",-1)])]),_:1},8,["disabled"]),a(_,{size:"small",plain:"",onClick:ge(P,["stop"])},{default:s(()=>[...K[2]||(K[2]=[G("确认",-1)])]),_:1}),a(_,{size:"small",plain:"",onClick:ge(ee,["stop"])},{default:s(()=>[...K[3]||(K[3]=[G("稍后",-1)])]),_:1})])],38)}}}),gl=Ie(pl,[["__scopeId","data-v-0b6ee97c"]]),yl={class:"floating-alarm-stack"},_l=Ce({__name:"FloatingAlarmStack",props:{alarms:{}},emits:["locate","ack"],setup(i,{emit:w}){const f=i,x=w,T=I(new Set),o=I(new Set);function y(b){return`${b.carId}`}const S=E(()=>f.alarms.filter(b=>b.action!=="clear").filter(b=>!T.value.has(y(b))).filter(b=>!o.value.has(y(b)))),O=E(()=>f.alarms.filter(b=>o.value.has(y(b))));function B(b){T.value=new Set([...T.value,y(b)])}function U(b){T.value=new Set([...T.value,y(b)]),x("ack",b)}function j(b){o.value=new Set([...o.value,y(b)])}function W(b){x("locate",b)}function V(){o.value=new Set}return(b,J)=>{const Y=Ae,H=gt;return d(),k("div",yl,[(d(!0),k(Z,null,ie(S.value,(F,P)=>(d(),me(gl,{key:`${F.carId}-${F.timestamp}`,alarm:F,"initial-offset":{right:24,bottom:24+P*132},onClose:ee=>B(F),onAck:ee=>U(F),onSnooze:ee=>j(F),onLocate:W},null,8,["alarm","initial-offset","onClose","onAck","onSnooze"]))),128)),O.value.length?(d(),k("div",{key:0,class:"snooze-tray",onClick:V},[a(H,{value:O.value.length,type:"warning"},{default:s(()=>[a(Y,{size:"small",circle:""},{default:s(()=>[...J[0]||(J[0]=[G("≡",-1)])]),_:1})]),_:1},8,["value"])])):we("",!0)])}}}),hl=Ie(_l,[["__scopeId","data-v-c37fdeb1"]]),fe="/sl/projection/toolbar";function Ue(i,w){return{key:i,value:w,Key:i,Value:w}}function kl(i,w){return{name:i,visible:w,Name:i,Visible:w}}function bl(i){return{note:i,Note:i}}function wl(i){return{fileName:i,FileName:i}}async function ve(i){const w=(await i).data;if(!w?.success)throw new Error(w?.message??"请求失败");if(w.data==null)throw new Error("服务端返回空数据");return w.data}const ue={getState:()=>ve(ae.get(`${fe}/state`)),setAlign:(i,w)=>ve(ae.post(`${fe}/align`,Ue(i,w))),setSelect:(i,w)=>ve(ae.post(`${fe}/select`,Ue(i,w))),setDisplay:(i,w)=>ve(ae.post(`${fe}/display`,Ue(i,w))),setLayerVisibility:(i,w)=>ve(ae.post(`${fe}/layer`,kl(i,w))),startRecording:i=>ve(ae.post(`${fe}/recording/start`,bl(i??""))),stopRecording:()=>ve(ae.post(`${fe}/recording/stop`)),deleteRecording:i=>ve(ae.delete(`${fe}/recording/${encodeURIComponent(i)}`)),startPlayback:i=>ve(ae.post(`${fe}/playback/start`,wl(i))),stopPlayback:()=>ve(ae.post(`${fe}/playback/stop`)),toggleViewMode:()=>ve(ae.post(`${fe}/view/toggle`)),setCameraFollow:(i,w)=>ve(ae.post(`${fe}/camera/follow`,{carId:i??void 0,enabled:w,CarId:i??void 0,Enabled:w}))},$l={class:"canvas-toolbar"},Sl=["onClick"],Cl=["onClick"],Il={key:0,class:"menu-empty"},Nl=["onClick"],xl=["onClick"],Ll={class:"btn-label"},Tl={class:"btn-label"},Ml={class:"btn-label"},El={class:"btn-label"},Vl={class:"muted-hint"},Al=Ce({__name:"WorkspaceCanvasToolbar",props:{followCarId:{default:null}},setup(i){const w=i,f=[{key:"sites",label:"站点"},{key:"cars",label:"AGV"},{key:"tracks",label:"路径"}],x=[{key:"tracks",label:"路径"},{key:"cars",label:"AGV"},{key:"decor",label:"区域/装饰"},{key:"sites",label:"站点"}],T=[{key:"labels",label:"场景图元标记"},{key:"primitives",label:"场景图元"},{key:"cars",label:"车辆"}],o=I(null),y=Mt({align:!1,select:!1,display:!1,layer:!1,recording:!1,playback:!1,view:!1,follow:!1}),S=I(!1),O=I(!1);let B=null;const U=E(()=>{const u=o.value?.recording;if(!u?.isRecording)return"录制";const c=Math.floor((u.elapsedMs??0)/1e3),h=String(Math.floor(c/60)).padStart(2,"0"),C=String(c%60).padStart(2,"0");return`停止 ${h}:${C}`}),j=E(()=>o.value?.view?.map2D??!0),W=E(()=>o.value?.view?.follow?.enabled??!1),V=E(()=>{const u=w.followCarId;if(u!=null&&Number.isFinite(u))return u;const c=o.value?.view?.follow?.carId;return c!=null&&Number.isFinite(c)?c:null});async function b(){try{o.value=await ue.getState()}catch(u){M.error(`同步工具栏状态失败:${u.message}`)}}async function J(u){if(o.value){y.align=!0;try{o.value=await ue.setAlign(u,!o.value.align[u])}catch(c){M.error(`切换对齐失败:${c.message}`)}finally{y.align=!1}}}async function Y(u){if(o.value){y.select=!0;try{o.value=await ue.setSelect(u,!o.value.select[u])}catch(c){M.error(`切换选择过滤失败:${c.message}`)}finally{y.select=!1}}}async function H(u){if(o.value){y.display=!0;try{o.value=await ue.setDisplay(u,!o.value.display[u])}catch(c){M.error(`切换显示内容失败:${c.message}`)}finally{y.display=!1}}}async function F(u,c){y.layer=!0;try{o.value=await ue.setLayerVisibility(u,c)}catch(h){M.error(`切换图层失败:${h.message}`)}finally{y.layer=!1}}function P(){M.info("寻路右键动作尚未接入 SimpleLite;请使用 SegmentPlan.FindRoute / 工作台脚本。")}async function ee(){const u=o.value?.recording;if(u){if(u.isPlaying){M.warning("当前在回放中,请先停止回放。");return}y.recording=!0;try{o.value=u.isRecording?await ue.stopRecording():await ue.startRecording("")}catch(c){M.error(`录制操作失败:${c.message}`)}finally{y.recording=!1}}}async function de(){const u=o.value?.recording;if(u){if(u.isRecording){M.warning("录制中无法进入回放,请先停止录制。");return}if(u.isPlaying){y.playback=!0;try{o.value=await ue.stopPlayback()}catch(c){M.error(`停止回放失败:${c.message}`)}finally{y.playback=!1}return}await b(),S.value=!0}}async function z(u){y.playback=!0;try{o.value=await ue.startPlayback(u),S.value=!1,O.value=!1,M.success(`已开始回放 ${u}`)}catch(c){M.error(`启动回放失败:${c.message}`)}finally{y.playback=!1}}async function K(u){try{await Pe.confirm(`确认删除录像 ${u}?此操作不可恢复。`,"删除录像",{type:"warning"})}catch{return}try{o.value=await ue.deleteRecording(u),M.success(`已删除 ${u}`)}catch(c){M.error(`删除失败:${c.message}`)}}async function te(){await b(),O.value=!0}async function _(){y.view=!0;try{o.value=await ue.toggleViewMode()}catch(u){M.error(`切换视图失败:${u.message}`)}finally{y.view=!1}}async function L(){const u=V.value;if(!W.value&&(u==null||!Number.isFinite(u))){M.warning("请先在车辆列表或 3D 画布中选中一辆车");return}y.follow=!0;try{const c=!W.value;o.value=await ue.setCameraFollow(u,c),c?M.success({message:`已开始跟随车辆 #${u}`,duration:1500,grouping:!0}):M.info("已停止自动跟随")}catch(c){M.error(`自动跟随失败:${c.message}`)}finally{y.follow=!1}}function r(u){if(!Number.isFinite(u)||u<=0)return"0 B";if(u<1024)return`${u} B`;const c=u/1024;return c<1024?`${c.toFixed(0)} KB`:`${(c/1024).toFixed(1)} MB`}function v(u){if(!Number.isFinite(u)||u<=0)return"00:00:00";const c=Math.floor(u/1e3),h=String(Math.floor(c/3600)).padStart(2,"0"),C=String(Math.floor(c%3600/60)).padStart(2,"0"),pe=String(c%60).padStart(2,"0");return`${h}:${C}:${pe}`}function D(u){if(!u)return"—";const c=new Date(u);if(isNaN(c.getTime()))return u;const h=C=>String(C).padStart(2,"0");return`${c.getFullYear()}-${h(c.getMonth()+1)}-${h(c.getDate())} ${h(c.getHours())}:${h(c.getMinutes())}`}return Xe(()=>{b(),B=setInterval(()=>{const u=o.value?.recording;(u?.isRecording||u?.isPlaying||o.value?.view?.follow?.enabled)&&b()},1e3)}),ot(()=>{B&&clearInterval(B),W.value&&ue.setCameraFollow(null,!1).catch(()=>{})}),(u,c)=>{const h=He,C=Ae,pe=et,re=ht,he=yt,$e=wt,Ne=Et,ne=nt,le=tt,ke=st,q=Ge,Le=Tt;return d(),k("div",$l,[a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(f,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>J(e.key),["stop"])},[a(pe,{"model-value":o.value?.align[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,Sl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.align},{default:s(()=>[a(h,null,{default:s(()=>[a(X(_t))]),_:1}),c[2]||(c[2]=n("span",{class:"btn-label"},"对齐",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(x,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>Y(e.key),["stop"])},[a(pe,{"model-value":o.value?.select[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,Cl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.select},{default:s(()=>[a(h,null,{default:s(()=>[a(X(kt))]),_:1}),c[3]||(c[3]=n("span",{class:"btn-label"},"选择",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click",placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[a($e,{onClick:P},{default:s(()=>[...c[5]||(c[5]=[G("寻路",-1)])]),_:1})]),_:1})]),default:s(()=>[a(C,{size:"small"},{default:s(()=>[a(h,null,{default:s(()=>[a(X(bt))]),_:1}),c[4]||(c[4]=n("span",{class:"btn-label"},"右击功能",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1})]),_:1}),c[14]||(c[14]=n("span",{class:"separator"},null,-1)),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu layer-menu"},{default:s(()=>[!o.value||o.value.layers.length===0?(d(),k("div",Il,"(无图层)")):(d(!0),k(Z,{key:1},ie(o.value.layers,e=>(d(),k("div",{key:e.name,class:"menu-row",onClick:ge(g=>F(e.name,!e.visible),["stop"])},[a(pe,{"model-value":e.visible},null,8,["model-value"]),n("span",null,"图层 "+p(e.name),1)],8,Nl))),128))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.layer},{default:s(()=>[a(h,null,{default:s(()=>[a(X($t))]),_:1}),c[6]||(c[6]=n("span",{class:"btn-label"},"显示图层",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),a(he,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:s(()=>[a(re,{class:"toolbar-menu"},{default:s(()=>[(d(),k(Z,null,ie(T,e=>n("div",{key:e.key,class:"menu-row",onClick:ge(g=>H(e.key),["stop"])},[a(pe,{"model-value":o.value?.display[e.key]??!1},null,8,["model-value"]),n("span",null,p(e.label),1)],8,xl)),64))]),_:1})]),default:s(()=>[a(C,{size:"small",loading:y.display},{default:s(()=>[a(h,null,{default:s(()=>[a(X(qe))]),_:1}),c[7]||(c[7]=n("span",{class:"btn-label"},"显示内容",-1)),a(h,{class:"caret"},{default:s(()=>[a(X(Ve))]),_:1})]),_:1},8,["loading"])]),_:1}),c[15]||(c[15]=n("span",{class:"separator"},null,-1)),a(C,{size:"small",type:o.value?.recording.isRecording?"danger":"default",loading:y.recording,onClick:ee},{default:s(()=>[o.value?.recording.isRecording?(d(),me(h,{key:0},{default:s(()=>[a(X(St))]),_:1})):(d(),me(h,{key:1},{default:s(()=>[a(X(Ct))]),_:1})),n("span",Ll,p(U.value),1)]),_:1},8,["type","loading"]),a(C,{size:"small",type:o.value?.recording.isPlaying?"warning":"default",loading:y.playback,onClick:de},{default:s(()=>[o.value?.recording.isPlaying?(d(),me(h,{key:0},{default:s(()=>[a(X(It))]),_:1})):(d(),me(h,{key:1},{default:s(()=>[a(X(Nt))]),_:1})),n("span",Tl,p(o.value?.recording.isPlaying?"退出回放":"回放"),1)]),_:1},8,["type","loading"]),a(C,{size:"small",onClick:te},{default:s(()=>[a(h,null,{default:s(()=>[a(X(xt))]),_:1}),c[8]||(c[8]=n("span",{class:"btn-label"},"录像管理",-1))]),_:1}),a(C,{size:"small",type:j.value?"primary":"default",loading:y.view,onClick:_},{default:s(()=>[a(h,null,{default:s(()=>[a(X(qe))]),_:1}),n("span",Ml,p(j.value?"2D":"3D"),1)]),_:1},8,["type","loading"]),a(C,{size:"small",type:W.value?"warning":"default",disabled:!W.value&&V.value==null,loading:y.follow,onClick:L},{default:s(()=>[a(h,null,{default:s(()=>[a(X(Lt))]),_:1}),n("span",El,p(W.value?"停止跟随":"自动跟随"),1)]),_:1},8,["type","disabled","loading"]),a(ke,{modelValue:S.value,"onUpdate:modelValue":c[0]||(c[0]=e=>S.value=e),title:"选择录像回放",width:"640px","append-to-body":"","destroy-on-close":""},{default:s(()=>[!o.value||o.value.recording.entries.length===0?(d(),me(Ne,{key:0,description:"(无可用录像。点 ● 录制 创建首份录像。)"})):(d(),me(le,{key:1,data:o.value.recording.entries,size:"small",stripe:""},{default:s(()=>[a(ne,{prop:"fileName",label:"文件名","min-width":"180"}),a(ne,{label:"大小",width:"90"},{default:s(({row:e})=>[G(p(r(e.fileSizeBytes)),1)]),_:1}),a(ne,{prop:"frameCount",label:"帧",width:"70"}),a(ne,{label:"时长",width:"100"},{default:s(({row:e})=>[G(p(v(e.durationMs)),1)]),_:1}),a(ne,{label:"时间",width:"160"},{default:s(({row:e})=>[G(p(D(e.fileWriteTime)),1)]),_:1}),a(ne,{label:"操作",width:"100",fixed:"right"},{default:s(({row:e})=>[a(C,{link:"",type:"primary",disabled:!e.headerReadable,onClick:g=>z(e.fileName)},{default:s(()=>[...c[9]||(c[9]=[G("回放",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"]),a(ke,{modelValue:O.value,"onUpdate:modelValue":c[1]||(c[1]=e=>O.value=e),title:"录像管理",width:"780px","append-to-body":"","destroy-on-close":""},{default:s(()=>[n("p",Vl,"目录:"+p(o.value?.recording.recordingsDirectory??"—"),1),!o.value||o.value.recording.entries.length===0?(d(),me(Ne,{key:0,description:"(无可用录像。)"})):(d(),me(le,{key:1,data:o.value.recording.entries,size:"small",stripe:""},{default:s(()=>[a(ne,{prop:"fileName",label:"文件名","min-width":"200"}),a(ne,{label:"大小",width:"90"},{default:s(({row:e})=>[G(p(r(e.fileSizeBytes)),1)]),_:1}),a(ne,{prop:"frameCount",label:"帧",width:"70"}),a(ne,{label:"时长",width:"100"},{default:s(({row:e})=>[G(p(v(e.durationMs)),1)]),_:1}),a(ne,{label:"时间",width:"160"},{default:s(({row:e})=>[G(p(D(e.fileWriteTime)),1)]),_:1}),a(ne,{label:"状态",width:"120"},{default:s(({row:e})=>[e.headerReadable?(d(),me(q,{key:0,type:"success",size:"small"},{default:s(()=>[...c[10]||(c[10]=[G("完整",-1)])]),_:1})):(d(),me(Le,{key:1,content:e.error,placement:"top"},{default:s(()=>[a(q,{type:"danger",size:"small"},{default:s(()=>[...c[11]||(c[11]=[G("头部不可读",-1)])]),_:1})]),_:1},8,["content"]))]),_:1}),a(ne,{label:"操作",width:"160",fixed:"right"},{default:s(({row:e})=>[a(C,{link:"",type:"primary",disabled:!e.headerReadable,onClick:g=>z(e.fileName)},{default:s(()=>[...c[12]||(c[12]=[G("回放",-1)])]),_:1},8,["disabled","onClick"]),a(C,{link:"",type:"danger",onClick:g=>K(e.fileName)},{default:s(()=>[...c[13]||(c[13]=[G("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"])])}}}),Pl=Ie(Al,[["__scopeId","data-v-968a4c89"]]),Dl={class:"map-monitor-page"},Fl={class:"muted"},Ol={class:"canvas-with-alarms"},zl={class:"workbench-header"},Rl=Ce({__name:"MapMonitorView",props:{readOnly:{type:Boolean}},setup(i){const w=it(),f="localhost:8223",x=I([]),T=I([]),o=I([]),y=I({includeFinished:!0,includeAborted:!0}),S=I(null),O=I(0),B=I(!1),U=I("vehicle"),j=I(null),W=I(null),V=I([]);async function b(e){const g=Number(e.carId);if(!Number.isFinite(g)){M.warning(`报警车辆 id 无法解析:${e.carId}`);return}try{await _e.setSelection("car",g),S.value={kind:"vehicle",id:String(g),name:e.carName??String(e.carId)}}catch(N){M.error(`定位失败:${N.message}`)}}function J(e){}let Y=null;const H=E(()=>x.value.filter(e=>e.state!=="offline").length),F=E(()=>o.value.length>0?o.value.filter(e=>e.statusCode==="Fetching"||e.statusCode==="Putting").length:T.value.filter(e=>e.status==="running").length),P=E(()=>o.value.length>0?o.value.filter(e=>e.statusCode==="Waiting").length:T.value.filter(e=>e.status==="queued").length),ee=E(()=>{if(!S.value||S.value.kind!=="vehicle")return null;const e=S.value;return x.value.find(N=>N.id===e.id||le(N)===e.id)?.id??null}),de=E(()=>{if(!S.value||S.value.kind!=="vehicle")return null;const e=S.value.id,g=Number(e);if(Number.isFinite(g))return g;const N=x.value.find(R=>R.id===e||le(R)===e);if(N?.rawId!=null)return N.rawId;if(N){const R=Number(le(N));if(Number.isFinite(R))return R}return null});function z(e){}const K=/^(?:UI)?(?:Car|Vehicle)-(\d+)$/i,te=/^UISite-(\d+)$/i,_=/^(?:UITrack|UICircularArcTrack|UIBezierTrack|UINurbsTrack)-(\d+)$/i;function L(e){const g=K.exec(e);if(g)return{kind:"vehicle",id:g[1]};const N=te.exec(e);if(N)return{kind:"site",id:N[1]};const R=_.exec(e);if(R)return{kind:"track",id:R[1]};const oe=/^UI([A-Za-z]+)-(\d+)$/.exec(e)??/^([A-Za-z]+)-(\d+)$/.exec(e);if(!oe)return null;const se=oe[1].toLowerCase(),Q=oe[2];return se==="site"?{kind:"site",id:Q}:se==="car"||se==="vehicle"?{kind:"vehicle",id:Q}:se.includes("track")?{kind:"track",id:Q}:null}function r(e,g){return!e&&!g?!0:!e||!g?!1:e.kind===g.kind&&e.id===g.id}function v(e,g){j.value=null;let N;if(e.kind==="vehicle"){const R=(g?Ne(g):void 0)??x.value.find(oe=>le(oe)===e.id);N=R?{kind:"vehicle",id:le(R),name:R.name}:{kind:"vehicle",id:e.id,name:`Vehicle ${e.id}`}}else N={kind:e.kind,id:e.id,name:g||`${e.kind==="site"?"Site":"Track"} ${e.id}`};r(S.value,N)||(S.value=N)}function D(e,g,N){if(j.value=null,e==="car"){const Q=String(g),Se=N?.find(Te=>K.test(Te))??`Car-${g}`,be=Ne(Se)??x.value.find(Te=>le(Te)===Q||Te.id===Q),xe=be?{kind:"vehicle",id:le(be),name:be.name}:{kind:"vehicle",id:Q,name:`Vehicle ${Q}`};r(S.value,xe)||(S.value=xe);return}const R=String(g),oe=N?.find(Q=>{const Se=L(Q);return Se?.kind===e&&Se.id===R}),se={kind:e,id:R,name:oe||`${e==="site"?"Site":"Track"} ${R}`};r(S.value,se)||(S.value=se)}function u(e){const g=e.siteIds?.length??0,N=e.trackIds?.length??0,R=e.carIds?.length??0,oe=Array.isArray(e.names)?e.names.length:0;if(g+N+R+oe===0){S.value=null;return}if(Array.isArray(e.names))for(const se of e.names){const Q=L(se);if(Q){v(Q,se);return}}if(e.kind&&e.id){D(e.kind,e.id,e.names);return}if(g>0){D("site",e.siteIds[0],e.names);return}if(N>0){D("track",e.trackIds[0],e.names);return}R>0&&D("car",e.carIds[0],e.names)}function c(e){if(!e.length){C();return}for(const g of e){const N=L(g);if(N){v(N,g);return}}C()}function h(){C()}async function C(){try{const e=await _e.getSelection();if(!e?.kind||e.id==null||e.kind!=="car"&&e.kind!=="site"&&e.kind!=="track")return;D(e.kind,Number(e.id),e.name?[e.name]:void 0)}catch{}}async function pe(e){j.value=null,r(S.value,e)||(S.value=e);const g=Number(e.id);if(Number.isFinite(g))try{await _e.setSelection("car",g)}catch(N){M.error(`同步 3D 选中失败:${N.message}`)}}async function re(e){if(j.value=e.id,e.carId!=null){const g=x.value.find(N=>N.rawId===e.carId||le(N)===String(e.carId));if(g){await pe({kind:"vehicle",id:le(g),name:g.name});return}try{await _e.setSelection("car",e.carId),S.value={kind:"vehicle",id:String(e.carId),name:e.carName??`Vehicle ${e.carId}`}}catch(N){M.error(`同步 3D 选中失败:${N.message}`)}return}S.value={kind:"delivery",id:String(e.id),name:`${e.srcLabel} → ${e.dstLabel}`}}function he(e){y.value=e,$e()}async function $e(){try{o.value=await kn(y.value)}catch(e){console.warn("[MapMonitor] refreshDeliveries failed",e),o.value=[]}}function Ne(e){const g=ne(e);return x.value.find(N=>N.name===e||N.id===e||g!=null&&le(N)===g)}function ne(e){return/^(?:UI)?(?:Car|Vehicle)-(\d+)$/i.exec(e)?.[1]??null}function le(e){return e.rawId!=null?String(e.rawId):e.id.replace(/^C/i,"").replace(/^0+/,"")||e.id}async function ke(){B.value=!0;try{const[e,g]=await Promise.all([jt(),Kt()]);x.value=e,T.value=g,await $e()}catch(e){console.warn("[MapMonitor] refreshAll failed",e)}finally{B.value=!1}}const q=Gt({autoConnect:!0});function Le(e){if(e?.kind)switch(e.kind){case"alarm":{const g=e.payload;if(!g)return;V.value=[g,...V.value.filter(N=>N.carId!==g.carId)].slice(0,30);break}case"car-state":case"mission-status":ke();break;case"selection-detail":e.payload&&typeof e.payload=="object"&&u(e.payload);break;case"monitor-config-updated":Wt(),O.value++;break}}return q.on(Le),Xe(async()=>{rt(),await ke(),Y=setInterval(()=>{!q.connected.value||x.value.length===0?ke():U.value==="mission"&&$e()},3e3)}),Qe(()=>{Y&&clearInterval(Y),q.off(Le)}),(e,g)=>{const N=Pt,R=At,oe=Vt,se=Ot,Q=Ft,Se=Ae,be=Dt;return d(),k("div",Dl,[a(oe,{gutter:12,class:"kpi-row"},{default:s(()=>[a(R,{span:8},{default:s(()=>[a(N,{title:"在线车辆",value:H.value},{suffix:s(()=>[n("span",Fl,"/ "+p(x.value.length),1)]),_:1},8,["value"])]),_:1}),a(R,{span:8},{default:s(()=>[a(N,{title:"运行中任务",value:F.value},null,8,["value"])]),_:1}),a(R,{span:8},{default:s(()=>[a(N,{title:"排队任务",value:P.value},null,8,["value"])]),_:1})]),_:1}),a(oe,{gutter:12,class:"main-row"},{default:s(()=>[a(R,{span:16},{default:s(()=>[n("div",Ol,[a(zt,{ref_key:"workspaceRef",ref:W,host:X(f),scope:X(w).scope??"Platform",token:X(w).token??"","read-only":!!i.readOnly,"canvas-only":!0,"hide-toolbar":!0,onPick:z,onSelect:c,onReady:h},null,8,["host","scope","token","read-only"]),a(hl,{alarms:V.value,onLocate:b,onAck:J},null,8,["alarms"]),a(Pl,{"follow-car-id":de.value},null,8,["follow-car-id"])])]),_:1}),a(R,{span:8,class:"side-col"},{default:s(()=>[a(be,{shadow:"never",class:"side-card workbench-card"},{header:s(()=>[n("div",zl,[a(Q,{modelValue:U.value,"onUpdate:modelValue":g[0]||(g[0]=xe=>U.value=xe),class:"workbench-tabs"},{default:s(()=>[a(se,{label:"车辆监控台",name:"vehicle"}),a(se,{label:"任务列表",name:"mission"})]),_:1},8,["modelValue"]),a(Se,{link:"",type:"primary",size:"small",loading:B.value,onClick:ke},{default:s(()=>[...g[1]||(g[1]=[G(" 刷新 ",-1)])]),_:1},8,["loading"])])]),default:s(()=>[We(a(hn,{cars:x.value,missions:T.value,"selected-id":ee.value,onSelect:pe},null,8,["cars","missions","selected-id"]),[[je,U.value==="vehicle"]]),We(a(Pn,{deliveries:o.value,"selected-id":j.value,onSelect:re,onRefresh:he,onActionDone:$e},null,8,["deliveries","selected-id"]),[[je,U.value==="mission"]])]),_:1}),a(be,{shadow:"never",class:"side-card detail-card"},{header:s(()=>[...g[2]||(g[2]=[n("span",null,"选中信息",-1)])]),default:s(()=>[a(sl,{selection:S.value,"refresh-key":O.value,cars:x.value,missions:T.value,"read-only":!!i.readOnly},null,8,["selection","refresh-key","cars","missions","read-only"])]),_:1})]),_:1})]),_:1})])}}}),ps=Ie(Rl,[["__scopeId","data-v-b11577f0"]]);export{ps as default}; diff --git a/MiGu.Server/wwwroot/assets/MissionEditorView-Dq7FSGEy.js b/MiGu.Server/wwwroot/assets/MissionEditorView-1UuYWhls.js similarity index 81% rename from MiGu.Server/wwwroot/assets/MissionEditorView-Dq7FSGEy.js rename to MiGu.Server/wwwroot/assets/MissionEditorView-1UuYWhls.js index af7f8d6..43c40b1 100644 --- a/MiGu.Server/wwwroot/assets/MissionEditorView-Dq7FSGEy.js +++ b/MiGu.Server/wwwroot/assets/MissionEditorView-1UuYWhls.js @@ -1 +1 @@ -import{R as o}from"./ReflectionManagerPanel-Hhb-p5RK.js";import{aG as i,aC as t,aF as r,b7 as p,aj as e}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 *//* empty css */import"./reflection-BmVSriDn.js";import"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const m={class:"mission-page"},s=i({__name:"MissionEditorView",setup(a){return(n,c)=>(p(),t("div",m,[r(o,{kind:"process","kind-label":"任务",title:"任务编排(Mission / 进程,含插件 MissionType 实例化)","empty-text":"当前没有任务;点击右上角「新建任务」从已加载的 MissionType 中选一个实例化。"})]))}}),q=e(s,[["__scopeId","data-v-40f885f1"]]);export{q as default}; +import{R as o}from"./ReflectionManagerPanel-CpDwI_uG.js";import{aG as i,aC as t,aF as r,b7 as p,aj as e}from"./index-CC_hCGHZ.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 *//* empty css */import"./reflection-CTDOoTn5.js";import"./useMapEditStream-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.js";const m={class:"mission-page"},s=i({__name:"MissionEditorView",setup(a){return(n,c)=>(p(),t("div",m,[r(o,{kind:"process","kind-label":"任务",title:"任务编排(Mission / 进程,含插件 MissionType 实例化)","empty-text":"当前没有任务;点击右上角「新建任务」从已加载的 MissionType 中选一个实例化。"})]))}}),q=e(s,[["__scopeId","data-v-40f885f1"]]);export{q as default}; diff --git a/MiGu.Server/wwwroot/assets/MonitorDashboardView-CGH8aWbc.js b/MiGu.Server/wwwroot/assets/MonitorDashboardView-C_9mDYUp.js similarity index 94% rename from MiGu.Server/wwwroot/assets/MonitorDashboardView-CGH8aWbc.js rename to MiGu.Server/wwwroot/assets/MonitorDashboardView-C_9mDYUp.js index 1143687..529e9c8 100644 --- a/MiGu.Server/wwwroot/assets/MonitorDashboardView-CGH8aWbc.js +++ b/MiGu.Server/wwwroot/assets/MonitorDashboardView-C_9mDYUp.js @@ -1 +1 @@ -import{aG as k,b5 as z,aC as M,aF as t,bH as e,bf as p,a1 as T,b7 as V,w as B,a5 as D,az as d,bo as c,t as N,a9 as S,aa as I,ac as P,aE as h,_ as j,av as _,aj as A}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{l as F,a as G}from"./projection-BVk2tEkj.js";import{l as H}from"./ops-DFVCciZx.js";import"./reflection-BmVSriDn.js";const R={class:"muted"},q=k({__name:"MonitorDashboardView",setup(J){const n=p([]),m=p([]),i=p([]),b=_(()=>n.value.filter(l=>l.state!=="offline").length),C=_(()=>m.value.filter(l=>l.status==="running").length),E=_(()=>n.value.filter(l=>l.state==="fault").length);function x(l){switch(l){case"running":return"success";case"idle":return"info";case"charging":return"warning";case"paused":return"warning";case"fault":return"danger";case"offline":return"info";default:return"info"}}return z(async()=>{[n.value,m.value,i.value]=await Promise.all([F(),G(),H()])}),(l,r)=>{const u=D,o=B,f=T,a=I,g=P,y=j,v=S,w=N;return V(),M("div",null,[t(f,{gutter:14,class:"kpi-row"},{default:e(()=>[t(o,{span:6},{default:e(()=>[t(u,{title:"车辆在线",value:b.value},{suffix:e(()=>[d("span",R,"/ "+c(n.value.length),1)]),_:1},8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"任务进行中",value:C.value},null,8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"故障车辆",value:E.value},null,8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"今日运维动作",value:i.value.length},null,8,["value"])]),_:1})]),_:1}),t(f,{gutter:14,style:{"margin-top":"14px"}},{default:e(()=>[t(o,{span:14},{default:e(()=>[t(w,{shadow:"never"},{header:e(()=>[...r[0]||(r[0]=[d("span",null,"实时车辆",-1)])]),default:e(()=>[t(v,{data:n.value,size:"small","max-height":"360",stripe:""},{default:e(()=>[t(a,{prop:"name",label:"名称",width:"100"}),t(a,{prop:"state",label:"状态",width:"90"},{default:e(s=>[t(g,{size:"small",type:x(s.row.state)},{default:e(()=>[h(c(s.row.state),1)]),_:2},1032,["type"])]),_:1}),t(a,{prop:"group",label:"分组",width:"100"}),t(a,{label:"电量",width:"160"},{default:e(s=>[t(y,{percentage:Math.round(s.row.batterySoc*100),"stroke-width":8},null,8,["percentage"])]),_:1}),t(a,{prop:"missionId",label:"当前任务"})]),_:1},8,["data"])]),_:1})]),_:1}),t(o,{span:10},{default:e(()=>[t(w,{shadow:"never"},{header:e(()=>[...r[1]||(r[1]=[d("span",null,"最近运维动作",-1)])]),default:e(()=>[t(v,{data:i.value,size:"small","max-height":"360",stripe:""},{default:e(()=>[t(a,{prop:"ts",label:"时间",width:"180"}),t(a,{prop:"opCode",label:"动作"}),t(a,{prop:"target",label:"目标",width:"100"}),t(a,{prop:"result",label:"结果",width:"80"},{default:e(s=>[t(g,{size:"small",type:s.row.result==="ok"?"success":"danger"},{default:e(()=>[h(c(s.row.result),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})])}}}),ot=A(q,[["__scopeId","data-v-53088435"]]);export{ot as default}; +import{aG as k,b5 as z,aC as M,aF as t,bH as e,bf as p,a1 as T,b7 as V,w as B,a5 as D,az as d,bo as c,t as N,a9 as S,aa as I,ac as P,aE as h,_ as j,av as _,aj as A}from"./index-CC_hCGHZ.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{l as F,a as G}from"./projection-D6ulMg5U.js";import{l as H}from"./ops-DQIK15vn.js";import"./reflection-CTDOoTn5.js";const R={class:"muted"},q=k({__name:"MonitorDashboardView",setup(J){const n=p([]),m=p([]),i=p([]),b=_(()=>n.value.filter(l=>l.state!=="offline").length),C=_(()=>m.value.filter(l=>l.status==="running").length),E=_(()=>n.value.filter(l=>l.state==="fault").length);function x(l){switch(l){case"running":return"success";case"idle":return"info";case"charging":return"warning";case"paused":return"warning";case"fault":return"danger";case"offline":return"info";default:return"info"}}return z(async()=>{[n.value,m.value,i.value]=await Promise.all([F(),G(),H()])}),(l,r)=>{const u=D,o=B,f=T,a=I,g=P,y=j,v=S,w=N;return V(),M("div",null,[t(f,{gutter:14,class:"kpi-row"},{default:e(()=>[t(o,{span:6},{default:e(()=>[t(u,{title:"车辆在线",value:b.value},{suffix:e(()=>[d("span",R,"/ "+c(n.value.length),1)]),_:1},8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"任务进行中",value:C.value},null,8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"故障车辆",value:E.value},null,8,["value"])]),_:1}),t(o,{span:6},{default:e(()=>[t(u,{title:"今日运维动作",value:i.value.length},null,8,["value"])]),_:1})]),_:1}),t(f,{gutter:14,style:{"margin-top":"14px"}},{default:e(()=>[t(o,{span:14},{default:e(()=>[t(w,{shadow:"never"},{header:e(()=>[...r[0]||(r[0]=[d("span",null,"实时车辆",-1)])]),default:e(()=>[t(v,{data:n.value,size:"small","max-height":"360",stripe:""},{default:e(()=>[t(a,{prop:"name",label:"名称",width:"100"}),t(a,{prop:"state",label:"状态",width:"90"},{default:e(s=>[t(g,{size:"small",type:x(s.row.state)},{default:e(()=>[h(c(s.row.state),1)]),_:2},1032,["type"])]),_:1}),t(a,{prop:"group",label:"分组",width:"100"}),t(a,{label:"电量",width:"160"},{default:e(s=>[t(y,{percentage:Math.round(s.row.batterySoc*100),"stroke-width":8},null,8,["percentage"])]),_:1}),t(a,{prop:"missionId",label:"当前任务"})]),_:1},8,["data"])]),_:1})]),_:1}),t(o,{span:10},{default:e(()=>[t(w,{shadow:"never"},{header:e(()=>[...r[1]||(r[1]=[d("span",null,"最近运维动作",-1)])]),default:e(()=>[t(v,{data:i.value,size:"small","max-height":"360",stripe:""},{default:e(()=>[t(a,{prop:"ts",label:"时间",width:"180"}),t(a,{prop:"opCode",label:"动作"}),t(a,{prop:"target",label:"目标",width:"100"}),t(a,{prop:"result",label:"结果",width:"80"},{default:e(s=>[t(g,{size:"small",type:s.row.result==="ok"?"success":"danger"},{default:e(()=>[h(c(s.row.result),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})])}}}),ot=A(q,[["__scopeId","data-v-53088435"]]);export{ot as default}; diff --git a/MiGu.Server/wwwroot/assets/MonitorMapView-CxVrr8S7.js b/MiGu.Server/wwwroot/assets/MonitorMapView-Chf_3bcP.js similarity index 53% rename from MiGu.Server/wwwroot/assets/MonitorMapView-CxVrr8S7.js rename to MiGu.Server/wwwroot/assets/MonitorMapView-Chf_3bcP.js index 6964f73..5439b58 100644 --- a/MiGu.Server/wwwroot/assets/MonitorMapView-CxVrr8S7.js +++ b/MiGu.Server/wwwroot/assets/MonitorMapView-Chf_3bcP.js @@ -1 +1 @@ -import o from"./MapMonitorView-BSY4Dsk8.js";import{aG as r,aA as t,b7 as p}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./Workspace3D-PfDes8bN.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import"./reflection-BmVSriDn.js";import"./mapEdit-Di5ggA7K.js";import"./ops-BCeFEEjY.js";import"./ops-DFVCciZx.js";import"./monitorConfigCache-deAxNrzx.js";/* empty css *//* empty css *//* empty css */import"./projection-BVk2tEkj.js";import"./useProjectionStream-DvMLcpMm.js";const H=r({__name:"MonitorMapView",setup(i){return(m,e)=>(p(),t(o,{"read-only":""}))}});export{H as default}; +import o from"./MapMonitorView-oh-hd20C.js";import{aG as r,aA as t,b7 as p}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./Workspace3D-CE3B9LLc.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import"./reflection-CTDOoTn5.js";import"./mapEdit-Z_uHqZwy.js";import"./ops-BCeFEEjY.js";import"./ops-DQIK15vn.js";import"./monitorConfigCache-B5CZXjjB.js";/* empty css *//* empty css *//* empty css */import"./projection-D6ulMg5U.js";import"./useProjectionStream-C_klWvmm.js";const H=r({__name:"MonitorMapView",setup(i){return(m,e)=>(p(),t(o,{"read-only":""}))}});export{H as default}; diff --git a/MiGu.Server/wwwroot/assets/OpsActionPanelView-CqQdAWLE.js b/MiGu.Server/wwwroot/assets/OpsActionPanelView-iA-v2vXw.js similarity index 94% rename from MiGu.Server/wwwroot/assets/OpsActionPanelView-CqQdAWLE.js rename to MiGu.Server/wwwroot/assets/OpsActionPanelView-iA-v2vXw.js index e3a5d2b..c5e2fcf 100644 --- a/MiGu.Server/wwwroot/assets/OpsActionPanelView-CqQdAWLE.js +++ b/MiGu.Server/wwwroot/assets/OpsActionPanelView-iA-v2vXw.js @@ -1,2 +1,2 @@ -import{aG as O,bt as T,b5 as V,aA as m,bH as a,bf as B,b7 as d,aF as o,t as S,a9 as A,br as _,aa as M,az as p,bo as r,ac as P,aE as i,R as $,r as D,ad as N,aC as F,ah as G,bh as H,ae as L,be as R,av as U,X as f,Y as W}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 */import{P as X}from"./PermissionGuard-DhAzkl-X.js";import{O as g}from"./ops-BCeFEEjY.js";import{l as C,e as Y}from"./ops-DFVCciZx.js";/* empty css */const j={style:{display:"flex","align-items":"center",gap:"8px"}},me=O({__name:"OpsActionPanelView",setup(q){const w=T(),u=R({}),c=B([]),E=U(()=>g.filter(n=>w.hasOp(n.code)));async function h(n){const e=u[n.code];if(!e&&n.target!=="note"){f.warning("请填写目标 ID");return}if(n.needConfirm)try{await W.confirm(`确认执行 [${n.label}]? +import{aG as O,bt as T,b5 as V,aA as m,bH as a,bf as B,b7 as d,aF as o,t as S,a9 as A,br as _,aa as M,az as p,bo as r,ac as P,aE as i,R as $,r as D,ad as N,aC as F,ah as G,bh as H,ae as L,be as R,av as U,X as f,Y as W}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as X}from"./PermissionGuard-DxbOGfWF.js";import{O as g}from"./ops-BCeFEEjY.js";import{l as C,e as Y}from"./ops-DQIK15vn.js";/* empty css */const j={style:{display:"flex","align-items":"center",gap:"8px"}},me=O({__name:"OpsActionPanelView",setup(q){const w=T(),u=R({}),c=B([]),E=U(()=>g.filter(n=>w.hasOp(n.code)));async function h(n){const e=u[n.code];if(!e&&n.target!=="note"){f.warning("请填写目标 ID");return}if(n.needConfirm)try{await W.confirm(`确认执行 [${n.label}]? 目标:${e}`,"二次确认",{type:"warning"})}catch{return}try{const l=await Y({opCode:n.code,targetId:e});f.success(`成功,auditId=${l.auditId}`),c.value=await C()}catch(l){f.error(`失败:${l instanceof Error?l.message:String(l)}`)}}return V(async()=>{c.value=await C()}),(n,e)=>{const l=P,s=M,x=$,k=D,v=A,b=S,I=L,z=N;return d(),m(X,{"widget-id":"OpsActionPanel"},{default:a(()=>[o(b,{shadow:"never"},{header:a(()=>[p("div",j,[e[1]||(e[1]=p("span",null,"运维操作(架构 §5.1 白名单)",-1)),o(l,{size:"small",type:"info"},{default:a(()=>[...e[0]||(e[0]=[i("scope=RCSMonitor",-1)])]),_:1}),o(l,{size:"small",type:"success"},{default:a(()=>[i(r(E.value.length)+" / "+r(_(g).length)+" 可用",1)]),_:1})])]),default:a(()=>[o(v,{data:_(g),size:"small",border:""},{default:a(()=>[o(s,{prop:"code",label:"权限码",width:"200"},{default:a(t=>[p("code",null,r(t.row.code),1)]),_:1}),o(s,{prop:"label",label:"操作",width:"140"}),o(s,{prop:"target",label:"目标",width:"80"}),o(s,{prop:"needConfirm",label:"二次确认",width:"100"},{default:a(t=>[t.row.needConfirm?(d(),m(l,{key:0,size:"small",type:"warning"},{default:a(()=>[...e[2]||(e[2]=[i("是",-1)])]),_:1})):(d(),m(l,{key:1,size:"small",effect:"plain"},{default:a(()=>[...e[3]||(e[3]=[i("否",-1)])]),_:1}))]),_:1}),o(s,{prop:"description",label:"说明"}),o(s,{label:"操作",width:"200"},{default:a(t=>[o(x,{modelValue:u[t.row.code],"onUpdate:modelValue":y=>u[t.row.code]=y,placeholder:"目标 ID",size:"small",style:{width:"100px","margin-right":"6px"}},null,8,["modelValue","onUpdate:modelValue"]),o(k,{size:"small",type:t.row.needConfirm?"warning":"primary",disabled:!_(w).hasOp(t.row.code),onClick:y=>h(t.row)},{default:a(()=>[...e[4]||(e[4]=[i("执行",-1)])]),_:1},8,["type","disabled","onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),o(b,{shadow:"never",style:{"margin-top":"12px"}},{header:a(()=>[...e[5]||(e[5]=[p("span",null,"本地操作记录(占位 Mock)",-1)])]),default:a(()=>[o(z,null,{default:a(()=>[(d(!0),F(G,null,H(c.value,t=>(d(),m(I,{key:t.id,timestamp:t.ts,type:t.result==="ok"?"success":"danger"},{default:a(()=>[p("strong",null,r(t.opCode),1),i(" → "+r(t.target)+"("+r(t.user)+") ",1)]),_:2},1032,["timestamp","type"]))),128))]),_:1})]),_:1})]),_:1})}}});export{me as default}; diff --git a/MiGu.Server/wwwroot/assets/OpsConfigView-zdoGrqh4.js b/MiGu.Server/wwwroot/assets/OpsConfigView-CyPTl7WY.js similarity index 95% rename from MiGu.Server/wwwroot/assets/OpsConfigView-zdoGrqh4.js rename to MiGu.Server/wwwroot/assets/OpsConfigView-CyPTl7WY.js index bbb5f87..4a52c36 100644 --- a/MiGu.Server/wwwroot/assets/OpsConfigView-zdoGrqh4.js +++ b/MiGu.Server/wwwroot/assets/OpsConfigView-CyPTl7WY.js @@ -1 +1 @@ -import{aG as te,b4 as oe,aA as h,bH as n,br as P,b7 as u,aF as s,N as le,H as ae,aE as b,O as ne,S as se,bI as B,aC as C,E as ie,x as re,ah as E,bh as T,y as ue,az as ce,v as me,u as de,bo as D,bz as fe,aB as pe,by as ve,e as _e,bn as $,bf as S,X as j,aj as ye}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as he,n as w,c as be,d as ge,s as W,l as ke}from"./ConfigPageBase-DYlmkUIy.js";import{r as Ce}from"./reflection-BmVSriDn.js";import{f as Ve}from"./monitorConfigCache-deAxNrzx.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */function Ne(V,m,d){if(!V)return[];const g=V[m]??V[d];if(g?.length)return[...g];for(const[c,f]of Object.entries(V))if(f?.length){if(c===m||c===d)return[...f];if(m.endsWith("."+c)||c.endsWith("."+d))return[...f];if(m.endsWith("."+d)&&(c===d||c.endsWith("."+d)))return[...f]}return[]}const xe={class:"monitor-section"},Ae={key:0,class:"muted empty-hint"},G="simple-platform-methods-by-type-car-v1",Se=500,Ee=te({__name:"OpsConfigView",setup(V){const m=$([]),d=$([]),g=$([]),c=S(!1),f=S(!1),U=S([]),N=S(null),x=S(!1);let _=null,k=null;function M(l){k=l,_&&clearTimeout(_),_=setTimeout(()=>{O()},Se)}async function O(){if(_=null,x.value){_=setTimeout(()=>{O()},200);return}const l=k;if(k=null,!!l){x.value=!0;try{const e=await W(l,{cachedRoot:N.value});N.value=e,j.success({message:"地图监控配置已自动保存",duration:1200,grouping:!0})}catch(e){j.error(`地图监控配置自动保存失败:${e instanceof Error?e.message:String(e)}`)}finally{x.value=!1,k&&M(k)}}}oe(()=>{_&&(clearTimeout(_),_=null),k&&!x.value&&O()});async function J(l,e){c.value=!0,f.value=!0;try{const t=await Ve(),[{config:i,cache:r},p]=await Promise.all([ke(l,t),L()]);N.value=r,d.value=z(t.available.site.methods),g.value=z(t.available.track.methods),e(i)}catch{e(w(l)),d.value=[],g.value=[],await L()}finally{c.value=!1,f.value=!1}}async function Y(l){N.value=await W(l,{cachedRoot:N.value})}async function L(){try{const l=sessionStorage.getItem(G);if(l){const e=JSON.parse(l);if(Array.isArray(e)&&e.length){m.value=e;return}}}catch{}try{const e=(await Ce.listMethodsByType("car")).map(t=>({typeKey:t.fullTypeName??t.typeName,shortTypeName:t.typeName,title:`${t.typeLabel??t.typeName} / ${t.fullTypeName??t.typeName} [${t.assemblyName}]`,methods:t.methods.map(i=>({methodName:i.methodName,label:i.label||i.methodName})).filter(i=>!!i.methodName)})).filter(t=>t.methods.length>0).sort((t,i)=>t.title.localeCompare(i.title));m.value=e;try{sessionStorage.setItem(G,JSON.stringify(e))}catch{}}catch{m.value=[]}}function z(l){return l?.length?l.map(e=>({methodName:e,label:e})):[]}function K(l){return l.monitor??ge()}function F(l,e){const t=K(l).carActionByType;return Ne(t,e.typeKey,e.shortTypeName)}function X(l,e){const t=F(l,e).slice().sort().join("\0");return`${e.typeKey}\0${t}`}function I(l,e,t,i,r){const p=K(e),v={...e,monitor:{...p,[t]:{...p[t],[i]:[...r]}}};l(v),M(v)}function q(l,e,t,i){const r=K(e),p=be(r.carActionByType);p[t.typeKey]=[...i],t.shortTypeName!==t.typeKey&&delete p[t.shortTypeName];const v={...e,monitor:{...r,carActionByType:p}};l(v),M(v)}return(l,e)=>{const t=ae,i=se,r=ne,p=ie,v=de,R=me,Q=ue,Z=re,ee=le,H=ve;return u(),h(he,{section:"ops",title:"运营维护",description:"调度回放、日志管理、版本维护(OpsConfig)",defaults:P(_e),"normalize-payload":P(w),"after-load":J,"before-save":Y},{default:n(({payload:a,update:y})=>[s(ee,{"label-width":"200px",model:a},{default:n(()=>[s(t,{"content-position":"left"},{default:n(()=>[...e[1]||(e[1]=[b("调度回放",-1)])]),_:1}),s(r,{label:"保留时长 (天)"},{default:n(()=>[s(i,{"model-value":a.playback.retentionDays,min:1,max:3650,"onUpdate:modelValue":o=>y({...a,playback:{...a.playback,retentionDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"采样频率 (Hz)"},{default:n(()=>[s(i,{"model-value":a.playback.samplingHz,min:1,max:100,"onUpdate:modelValue":o=>y({...a,playback:{...a.playback,samplingHz:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[2]||(e[2]=[b("日志保留",-1)])]),_:1}),s(r,{label:"热数据 (天)"},{default:n(()=>[s(i,{"model-value":a.logRetention.hotDays,min:1,max:365,"onUpdate:modelValue":o=>y({...a,logRetention:{...a.logRetention,hotDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"冷数据 (天)"},{default:n(()=>[s(i,{"model-value":a.logRetention.coldDays,min:1,max:3650,"onUpdate:modelValue":o=>y({...a,logRetention:{...a.logRetention,coldDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[3]||(e[3]=[b("版本维护",-1)])]),_:1}),s(r,{label:"保留发布版本"},{default:n(()=>[s(i,{"model-value":a.version.keepReleases,min:1,max:100,"onUpdate:modelValue":o=>y({...a,version:{keepReleases:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[4]||(e[4]=[b("地图监控信息与动作管理",-1)])]),_:1}),B((u(),C("div",xe,[s(p,{type:"info",closable:!1,"show-icon":"",title:x.value?"正在自动保存…":"支持直接多选,修改后会自动保存到地图监控(simple.json),无需点击上方「保存」。若某组不勾选,表示该组在地图监控中显示全部。",style:{"margin-bottom":"10px"}},null,8,["title"]),B((u(),h(r,{label:"按车型动作配置"},{default:n(()=>[s(Z,{modelValue:U.value,"onUpdate:modelValue":e[0]||(e[0]=o=>U.value=o),class:"type-actions"},{default:n(()=>[(u(!0),C(E,null,T(m.value,o=>(u(),h(Q,{key:o.typeKey,name:o.typeKey,title:`${o.title}(${o.methods.length})`},{default:n(()=>[B(ce("div",null,[(u(),h(R,{key:X(a,o),"model-value":F(a,o),class:"cfg-check-grid","onUpdate:modelValue":A=>q(y,a,o,A)},{default:n(()=>[(u(!0),C(E,null,T(o.methods,A=>(u(),h(v,{key:`${o.typeKey}-${A.methodName}`,label:A.methodName},{default:n(()=>[b(D(A.label),1)]),_:2},1032,["label"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"]))],512),[[fe,U.value.includes(o.typeKey)]])]),_:2},1032,["name","title"]))),128))]),_:2},1032,["modelValue"]),!c.value&&!f.value&&!m.value.length?(u(),C("p",Ae," 暂未扫描到带 MethodMember 的车型(请确认 SimpleLite 已连接并已加载插件)。 ")):pe("",!0)]),_:2},1024)),[[H,f.value]]),s(r,{label:"站点动作显示项"},{default:n(()=>[s(R,{"model-value":a.monitor?.site?.actionKeys??[],class:"cfg-check-grid","onUpdate:modelValue":o=>I(y,a,"site","actionKeys",o)},{default:n(()=>[(u(!0),C(E,null,T(d.value,o=>(u(),h(v,{key:`sa-${o.methodName}`,label:o.methodName},{default:n(()=>[b(D(o.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"路径动作显示项"},{default:n(()=>[s(R,{"model-value":a.monitor?.track?.actionKeys??[],class:"cfg-check-grid","onUpdate:modelValue":o=>I(y,a,"track","actionKeys",o)},{default:n(()=>[(u(!0),C(E,null,T(g.value,o=>(u(),h(v,{key:`ta-${o.methodName}`,label:o.methodName},{default:n(()=>[b(D(o.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024)])),[[H,c.value]])]),_:2},1032,["model"])]),_:1},8,["defaults","normalize-payload"])}}}),Ye=ye(Ee,[["__scopeId","data-v-bf134df3"]]);export{Ye as default}; +import{aG as te,b4 as oe,aA as h,bH as n,br as P,b7 as u,aF as s,N as le,H as ae,aE as b,O as ne,S as se,bI as B,aC as C,E as ie,x as re,ah as E,bh as T,y as ue,az as ce,v as me,u as de,bo as D,bz as fe,aB as pe,by as ve,e as _e,bn as $,bf as S,X as j,aj as ye}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as he,n as w,c as be,d as ge,s as W,l as ke}from"./ConfigPageBase-B4fOVsSK.js";import{r as Ce}from"./reflection-CTDOoTn5.js";import{f as Ve}from"./monitorConfigCache-B5CZXjjB.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */function Ne(V,m,d){if(!V)return[];const g=V[m]??V[d];if(g?.length)return[...g];for(const[c,f]of Object.entries(V))if(f?.length){if(c===m||c===d)return[...f];if(m.endsWith("."+c)||c.endsWith("."+d))return[...f];if(m.endsWith("."+d)&&(c===d||c.endsWith("."+d)))return[...f]}return[]}const xe={class:"monitor-section"},Ae={key:0,class:"muted empty-hint"},G="simple-platform-methods-by-type-car-v1",Se=500,Ee=te({__name:"OpsConfigView",setup(V){const m=$([]),d=$([]),g=$([]),c=S(!1),f=S(!1),U=S([]),N=S(null),x=S(!1);let _=null,k=null;function M(l){k=l,_&&clearTimeout(_),_=setTimeout(()=>{O()},Se)}async function O(){if(_=null,x.value){_=setTimeout(()=>{O()},200);return}const l=k;if(k=null,!!l){x.value=!0;try{const e=await W(l,{cachedRoot:N.value});N.value=e,j.success({message:"地图监控配置已自动保存",duration:1200,grouping:!0})}catch(e){j.error(`地图监控配置自动保存失败:${e instanceof Error?e.message:String(e)}`)}finally{x.value=!1,k&&M(k)}}}oe(()=>{_&&(clearTimeout(_),_=null),k&&!x.value&&O()});async function J(l,e){c.value=!0,f.value=!0;try{const t=await Ve(),[{config:i,cache:r},p]=await Promise.all([ke(l,t),L()]);N.value=r,d.value=z(t.available.site.methods),g.value=z(t.available.track.methods),e(i)}catch{e(w(l)),d.value=[],g.value=[],await L()}finally{c.value=!1,f.value=!1}}async function Y(l){N.value=await W(l,{cachedRoot:N.value})}async function L(){try{const l=sessionStorage.getItem(G);if(l){const e=JSON.parse(l);if(Array.isArray(e)&&e.length){m.value=e;return}}}catch{}try{const e=(await Ce.listMethodsByType("car")).map(t=>({typeKey:t.fullTypeName??t.typeName,shortTypeName:t.typeName,title:`${t.typeLabel??t.typeName} / ${t.fullTypeName??t.typeName} [${t.assemblyName}]`,methods:t.methods.map(i=>({methodName:i.methodName,label:i.label||i.methodName})).filter(i=>!!i.methodName)})).filter(t=>t.methods.length>0).sort((t,i)=>t.title.localeCompare(i.title));m.value=e;try{sessionStorage.setItem(G,JSON.stringify(e))}catch{}}catch{m.value=[]}}function z(l){return l?.length?l.map(e=>({methodName:e,label:e})):[]}function K(l){return l.monitor??ge()}function F(l,e){const t=K(l).carActionByType;return Ne(t,e.typeKey,e.shortTypeName)}function X(l,e){const t=F(l,e).slice().sort().join("\0");return`${e.typeKey}\0${t}`}function I(l,e,t,i,r){const p=K(e),v={...e,monitor:{...p,[t]:{...p[t],[i]:[...r]}}};l(v),M(v)}function q(l,e,t,i){const r=K(e),p=be(r.carActionByType);p[t.typeKey]=[...i],t.shortTypeName!==t.typeKey&&delete p[t.shortTypeName];const v={...e,monitor:{...r,carActionByType:p}};l(v),M(v)}return(l,e)=>{const t=ae,i=se,r=ne,p=ie,v=de,R=me,Q=ue,Z=re,ee=le,H=ve;return u(),h(he,{section:"ops",title:"运营维护",description:"调度回放、日志管理、版本维护(OpsConfig)",defaults:P(_e),"normalize-payload":P(w),"after-load":J,"before-save":Y},{default:n(({payload:a,update:y})=>[s(ee,{"label-width":"200px",model:a},{default:n(()=>[s(t,{"content-position":"left"},{default:n(()=>[...e[1]||(e[1]=[b("调度回放",-1)])]),_:1}),s(r,{label:"保留时长 (天)"},{default:n(()=>[s(i,{"model-value":a.playback.retentionDays,min:1,max:3650,"onUpdate:modelValue":o=>y({...a,playback:{...a.playback,retentionDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"采样频率 (Hz)"},{default:n(()=>[s(i,{"model-value":a.playback.samplingHz,min:1,max:100,"onUpdate:modelValue":o=>y({...a,playback:{...a.playback,samplingHz:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[2]||(e[2]=[b("日志保留",-1)])]),_:1}),s(r,{label:"热数据 (天)"},{default:n(()=>[s(i,{"model-value":a.logRetention.hotDays,min:1,max:365,"onUpdate:modelValue":o=>y({...a,logRetention:{...a.logRetention,hotDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"冷数据 (天)"},{default:n(()=>[s(i,{"model-value":a.logRetention.coldDays,min:1,max:3650,"onUpdate:modelValue":o=>y({...a,logRetention:{...a.logRetention,coldDays:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[3]||(e[3]=[b("版本维护",-1)])]),_:1}),s(r,{label:"保留发布版本"},{default:n(()=>[s(i,{"model-value":a.version.keepReleases,min:1,max:100,"onUpdate:modelValue":o=>y({...a,version:{keepReleases:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(t,{"content-position":"left"},{default:n(()=>[...e[4]||(e[4]=[b("地图监控信息与动作管理",-1)])]),_:1}),B((u(),C("div",xe,[s(p,{type:"info",closable:!1,"show-icon":"",title:x.value?"正在自动保存…":"支持直接多选,修改后会自动保存到地图监控(simple.json),无需点击上方「保存」。若某组不勾选,表示该组在地图监控中显示全部。",style:{"margin-bottom":"10px"}},null,8,["title"]),B((u(),h(r,{label:"按车型动作配置"},{default:n(()=>[s(Z,{modelValue:U.value,"onUpdate:modelValue":e[0]||(e[0]=o=>U.value=o),class:"type-actions"},{default:n(()=>[(u(!0),C(E,null,T(m.value,o=>(u(),h(Q,{key:o.typeKey,name:o.typeKey,title:`${o.title}(${o.methods.length})`},{default:n(()=>[B(ce("div",null,[(u(),h(R,{key:X(a,o),"model-value":F(a,o),class:"cfg-check-grid","onUpdate:modelValue":A=>q(y,a,o,A)},{default:n(()=>[(u(!0),C(E,null,T(o.methods,A=>(u(),h(v,{key:`${o.typeKey}-${A.methodName}`,label:A.methodName},{default:n(()=>[b(D(A.label),1)]),_:2},1032,["label"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"]))],512),[[fe,U.value.includes(o.typeKey)]])]),_:2},1032,["name","title"]))),128))]),_:2},1032,["modelValue"]),!c.value&&!f.value&&!m.value.length?(u(),C("p",Ae," 暂未扫描到带 MethodMember 的车型(请确认 SimpleLite 已连接并已加载插件)。 ")):pe("",!0)]),_:2},1024)),[[H,f.value]]),s(r,{label:"站点动作显示项"},{default:n(()=>[s(R,{"model-value":a.monitor?.site?.actionKeys??[],class:"cfg-check-grid","onUpdate:modelValue":o=>I(y,a,"site","actionKeys",o)},{default:n(()=>[(u(!0),C(E,null,T(d.value,o=>(u(),h(v,{key:`sa-${o.methodName}`,label:o.methodName},{default:n(()=>[b(D(o.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),s(r,{label:"路径动作显示项"},{default:n(()=>[s(R,{"model-value":a.monitor?.track?.actionKeys??[],class:"cfg-check-grid","onUpdate:modelValue":o=>I(y,a,"track","actionKeys",o)},{default:n(()=>[(u(!0),C(E,null,T(g.value,o=>(u(),h(v,{key:`ta-${o.methodName}`,label:o.methodName},{default:n(()=>[b(D(o.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024)])),[[H,c.value]])]),_:2},1032,["model"])]),_:1},8,["defaults","normalize-payload"])}}}),Ye=ye(Ee,[["__scopeId","data-v-bf134df3"]]);export{Ye as default}; diff --git a/MiGu.Server/wwwroot/assets/PermissionGuard-DhAzkl-X.js b/MiGu.Server/wwwroot/assets/PermissionGuard-DxbOGfWF.js similarity index 93% rename from MiGu.Server/wwwroot/assets/PermissionGuard-DhAzkl-X.js rename to MiGu.Server/wwwroot/assets/PermissionGuard-DxbOGfWF.js index c5e4692..d02bcaf 100644 --- a/MiGu.Server/wwwroot/assets/PermissionGuard-DhAzkl-X.js +++ b/MiGu.Server/wwwroot/assets/PermissionGuard-DxbOGfWF.js @@ -1 +1 @@ -import{aG as p,bt as c,bi as i,aC as u,az as s,aA as m,L as g,bH as v,av as y,b7 as d,bo as _,aj as f}from"./index-D5OuyicD.js";/* empty css *//* empty css */const k=["title"],b={class:"pg-hidden-hint"},h=p({__name:"PermissionGuard",props:{widgetId:{}},setup(e){const n=e,l=c(),a=y(()=>l.widgetOf(n.widgetId));return(o,t)=>{const r=g;return a.value==="interactive"?i(o.$slots,"default",{key:0},void 0,!0):a.value==="readonly"?(d(),u("div",{key:1,class:"pg-readonly",title:`${e.widgetId} 当前为只读`},[i(o.$slots,"default",{},void 0,!0),t[0]||(t[0]=s("div",{class:"pg-mask"},null,-1))],8,k)):(d(),m(r,{key:2,class:"pg-hidden"},{description:v(()=>[t[1]||(t[1]=s("p",{class:"pg-hidden-title"},"当前账号无权查看此功能",-1)),s("p",b,"控件:"+_(e.widgetId)+"。若应为管理员可见,请尝试顶部切换「管理员/运营」或刷新页面。",1)]),_:1}))}}}),C=f(h,[["__scopeId","data-v-4766a149"]]);export{C as P}; +import{aG as p,bt as c,bi as i,aC as u,az as s,aA as m,L as g,bH as v,av as y,b7 as d,bo as _,aj as f}from"./index-CC_hCGHZ.js";/* empty css *//* empty css */const k=["title"],b={class:"pg-hidden-hint"},h=p({__name:"PermissionGuard",props:{widgetId:{}},setup(e){const n=e,l=c(),a=y(()=>l.widgetOf(n.widgetId));return(o,t)=>{const r=g;return a.value==="interactive"?i(o.$slots,"default",{key:0},void 0,!0):a.value==="readonly"?(d(),u("div",{key:1,class:"pg-readonly",title:`${e.widgetId} 当前为只读`},[i(o.$slots,"default",{},void 0,!0),t[0]||(t[0]=s("div",{class:"pg-mask"},null,-1))],8,k)):(d(),m(r,{key:2,class:"pg-hidden"},{description:v(()=>[t[1]||(t[1]=s("p",{class:"pg-hidden-title"},"当前账号无权查看此功能",-1)),s("p",b,"控件:"+_(e.widgetId)+"。若应为管理员可见,请尝试顶部切换「管理员/运营」或刷新页面。",1)]),_:1}))}}}),C=f(h,[["__scopeId","data-v-4766a149"]]);export{C as P}; diff --git a/MiGu.Server/wwwroot/assets/PlaybackView-U187TuNR.js b/MiGu.Server/wwwroot/assets/PlaybackView-B1Y9yN9o.js similarity index 97% rename from MiGu.Server/wwwroot/assets/PlaybackView-U187TuNR.js rename to MiGu.Server/wwwroot/assets/PlaybackView-B1Y9yN9o.js index c54da19..e95a894 100644 --- a/MiGu.Server/wwwroot/assets/PlaybackView-U187TuNR.js +++ b/MiGu.Server/wwwroot/assets/PlaybackView-B1Y9yN9o.js @@ -1 +1 @@ -import{aG as c,aA as y,bH as a,t as w,b7 as E,aF as e,a1 as V,w as k,R as B,B as g,r as x,aE as n,br as z,bD as N,H as P,a9 as v,aa as D,az as A,bo as C,be as S,bf as K}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 */const T=30,X=c({__name:"PlaybackView",setup(G){const r=S({kw:"",range:null}),i=K([{id:"SNAP-001",ts:"2026-05-19 10:21:33",type:"调度异常",summary:"AGV-005 上线超时 → 故障",size:"128 KB"},{id:"SNAP-002",ts:"2026-05-19 14:05:17",type:"路口死锁",summary:"路口-N 等待链 3 节点 30s",size:"64 KB"},{id:"SNAP-003",ts:"2026-05-20 09:11:02",type:"手动快照",summary:"用户 admin 触发 SnapshotExport",size:"420 KB"}]);return(H,t)=>{const d=B,s=k,m=g,o=x,u=V,_=P,l=D,b=v,f=w;return E(),y(f,{shadow:"never"},{header:a(()=>[A("span",null,"调度回放(PlaybackPolicy.retentionDays="+C(T)+" 天)")]),default:a(()=>[e(u,{gutter:12},{default:a(()=>[e(s,{span:6},{default:a(()=>[e(d,{modelValue:r.kw,"onUpdate:modelValue":t[0]||(t[0]=p=>r.kw=p),placeholder:"按任务 / 车辆检索",clearable:""},null,8,["modelValue"])]),_:1}),e(s,{span:8},{default:a(()=>[e(m,{modelValue:r.range,"onUpdate:modelValue":t[1]||(t[1]=p=>r.range=p),type:"datetimerange","range-separator":"→","start-placeholder":"开始","end-placeholder":"结束",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(s,{span:10},{default:a(()=>[e(o,{type:"primary"},{default:a(()=>[...t[2]||(t[2]=[n("检索快照",-1)])]),_:1}),e(o,null,{default:a(()=>[...t[3]||(t[3]=[n("下载日志",-1)])]),_:1}),e(o,{icon:z(N),plain:""},{default:a(()=>[...t[4]||(t[4]=[n("回放选中",-1)])]),_:1},8,["icon"])]),_:1})]),_:1}),e(_),e(b,{data:i.value,stripe:""},{default:a(()=>[e(l,{prop:"id",label:"ID",width:"100"}),e(l,{prop:"ts",label:"时间",width:"180"}),e(l,{prop:"type",label:"类型",width:"140"}),e(l,{prop:"summary",label:"概要"}),e(l,{prop:"size",label:"大小",width:"100"}),e(l,{label:"操作",width:"160"},{default:a(()=>[e(o,{text:"",size:"small"},{default:a(()=>[...t[5]||(t[5]=[n("回放",-1)])]),_:1}),e(o,{text:"",size:"small"},{default:a(()=>[...t[6]||(t[6]=[n("下载",-1)])]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})}}});export{X as default}; +import{aG as c,aA as y,bH as a,t as w,b7 as E,aF as e,a1 as V,w as k,R as B,B as g,r as x,aE as n,br as z,bD as N,H as P,a9 as v,aa as D,az as A,bo as C,be as S,bf as K}from"./index-CC_hCGHZ.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 */const T=30,X=c({__name:"PlaybackView",setup(G){const r=S({kw:"",range:null}),i=K([{id:"SNAP-001",ts:"2026-05-19 10:21:33",type:"调度异常",summary:"AGV-005 上线超时 → 故障",size:"128 KB"},{id:"SNAP-002",ts:"2026-05-19 14:05:17",type:"路口死锁",summary:"路口-N 等待链 3 节点 30s",size:"64 KB"},{id:"SNAP-003",ts:"2026-05-20 09:11:02",type:"手动快照",summary:"用户 admin 触发 SnapshotExport",size:"420 KB"}]);return(H,t)=>{const d=B,s=k,m=g,o=x,u=V,_=P,l=D,b=v,f=w;return E(),y(f,{shadow:"never"},{header:a(()=>[A("span",null,"调度回放(PlaybackPolicy.retentionDays="+C(T)+" 天)")]),default:a(()=>[e(u,{gutter:12},{default:a(()=>[e(s,{span:6},{default:a(()=>[e(d,{modelValue:r.kw,"onUpdate:modelValue":t[0]||(t[0]=p=>r.kw=p),placeholder:"按任务 / 车辆检索",clearable:""},null,8,["modelValue"])]),_:1}),e(s,{span:8},{default:a(()=>[e(m,{modelValue:r.range,"onUpdate:modelValue":t[1]||(t[1]=p=>r.range=p),type:"datetimerange","range-separator":"→","start-placeholder":"开始","end-placeholder":"结束",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(s,{span:10},{default:a(()=>[e(o,{type:"primary"},{default:a(()=>[...t[2]||(t[2]=[n("检索快照",-1)])]),_:1}),e(o,null,{default:a(()=>[...t[3]||(t[3]=[n("下载日志",-1)])]),_:1}),e(o,{icon:z(N),plain:""},{default:a(()=>[...t[4]||(t[4]=[n("回放选中",-1)])]),_:1},8,["icon"])]),_:1})]),_:1}),e(_),e(b,{data:i.value,stripe:""},{default:a(()=>[e(l,{prop:"id",label:"ID",width:"100"}),e(l,{prop:"ts",label:"时间",width:"180"}),e(l,{prop:"type",label:"类型",width:"140"}),e(l,{prop:"summary",label:"概要"}),e(l,{prop:"size",label:"大小",width:"100"}),e(l,{label:"操作",width:"160"},{default:a(()=>[e(o,{text:"",size:"small"},{default:a(()=>[...t[5]||(t[5]=[n("回放",-1)])]),_:1}),e(o,{text:"",size:"small"},{default:a(()=>[...t[6]||(t[6]=[n("下载",-1)])]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})}}});export{X as default}; diff --git a/MiGu.Server/wwwroot/assets/ProcessPanelView-CeuM__wB.js b/MiGu.Server/wwwroot/assets/ProcessPanelView-BIyHjFKr.js similarity index 80% rename from MiGu.Server/wwwroot/assets/ProcessPanelView-CeuM__wB.js rename to MiGu.Server/wwwroot/assets/ProcessPanelView-BIyHjFKr.js index 0432bd0..925a3b8 100644 --- a/MiGu.Server/wwwroot/assets/ProcessPanelView-CeuM__wB.js +++ b/MiGu.Server/wwwroot/assets/ProcessPanelView-BIyHjFKr.js @@ -1 +1 @@ -import{R as o}from"./ReflectionManagerPanel-Hhb-p5RK.js";import{aG as t,aC as r,aF as e,b7 as i,aj as p}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 *//* empty css */import"./reflection-BmVSriDn.js";import"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const m={class:"process-page"},s=t({__name:"ProcessPanelView",setup(a){return(n,c)=>(i(),r("div",m,[e(o,{kind:"process","kind-label":"进程",title:"进程管理(Mission / Process)","empty-text":"当前没有进程;点击右上角「新建进程」即可基于已加载的 MissionType 实例化一个。"})]))}}),q=p(s,[["__scopeId","data-v-6a85813e"]]);export{q as default}; +import{R as o}from"./ReflectionManagerPanel-CpDwI_uG.js";import{aG as t,aC as r,aF as e,b7 as i,aj as p}from"./index-CC_hCGHZ.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 *//* empty css */import"./reflection-CTDOoTn5.js";import"./useMapEditStream-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.js";const m={class:"process-page"},s=t({__name:"ProcessPanelView",setup(a){return(n,c)=>(i(),r("div",m,[e(o,{kind:"process","kind-label":"进程",title:"进程管理(Mission / Process)","empty-text":"当前没有进程;点击右上角「新建进程」即可基于已加载的 MissionType 实例化一个。"})]))}}),q=p(s,[["__scopeId","data-v-6a85813e"]]);export{q as default}; diff --git a/MiGu.Server/wwwroot/assets/ProjectPropertiesView-Bvi6s1pw.js b/MiGu.Server/wwwroot/assets/ProjectPropertiesView-0BoQ0Htf.js similarity index 98% rename from MiGu.Server/wwwroot/assets/ProjectPropertiesView-Bvi6s1pw.js rename to MiGu.Server/wwwroot/assets/ProjectPropertiesView-0BoQ0Htf.js index 4eb32c1..8a6795e 100644 --- a/MiGu.Server/wwwroot/assets/ProjectPropertiesView-Bvi6s1pw.js +++ b/MiGu.Server/wwwroot/assets/ProjectPropertiesView-0BoQ0Htf.js @@ -1,2 +1,2 @@ -import{aG as R,bG as se,b5 as ie,b7 as l,aC as C,az as V,bo as h,aA as i,bH as o,ah as re,bh as ce,F as ue,aB as L,aF as n,R as de,Q as pe,br as O,bl as me,r as fe,bg as _e,aJ as ve,aE as N,bI as ye,by as be,a9 as ge,aa as ke,a7 as he,S as Ee,ac as Ce,L as we,bf as d,av as M,X as P,Y as je,C as Fe,t as Se,be as Ve,aj as q,ab as Le,a8 as Be}from"./index-D5OuyicD.js";/* 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 *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as E}from"./reflection-BmVSriDn.js";const $e={class:"fme-root"},Ie={class:"fme-header"},xe={class:"fme-desc"},Ne={key:0,class:"fme-path"},Pe={key:1,class:"fme-path-empty"},ze={class:"fme-toolbar"},Te={class:"fme-btn-text"},Ue={key:0,class:"fme-locked"},Ae=R({__name:"FieldMemberEditor",props:{targetLabel:{},description:{},loader:{type:Function},onSet:{type:Function},onSave:{type:Function}},setup(B,{expose:f}){const _=B,v=d(!1),y=d(!1),w=d(""),p=d([]),j=d([]),$=d("保存"),c=Ve({}),z=d(!1),s=M(()=>{const e=w.value.trim().toLowerCase();return e?p.value.filter(t=>t.key.toLowerCase().includes(e)||t.label.toLowerCase().includes(e)):p.value}),m=M(()=>p.value.reduce((e,t)=>t.locked?e:c[t.key]!==t.value?e+1:e,0)),g=M(()=>m.value>0);function T(e){return e==="Boolean"}function U(e){return e==="Int32"||e==="Int64"||e==="Int16"||e==="Byte"}function Q(e){return e==="Single"||e==="Double"||e==="Decimal"}function X(e){const t=(e??"").trim().toLowerCase();return t==="true"||t==="1"||t==="yes"}function Y(e){const t=parseInt(e,10);return Number.isFinite(t)?t:0}function K(e){const t=parseFloat(e);return Number.isFinite(t)?t:0}function I(e){return c[e.key]??e.value}function x(e,t){c[e.key]=t}function W(e){if(e.locked)return!1;const t=c[e.key];return t!==void 0&&t!==e.value}async function k(){v.value=!0;try{const e=await _.loader();p.value=e.fields,j.value=e.pathInfos??[],e.saveButtonLabel&&($.value=e.saveButtonLabel);for(const t of e.fields)c[t.key]=t.value;for(const t of Object.keys(c))e.fields.find(u=>u.key===t)||delete c[t]}catch(e){P.error(`加载${_.targetLabel}失败:${e.message}`)}finally{v.value=!1}}function Z(){for(const e of p.value)c[e.key]=e.value}async function ee(){const e=p.value.filter(r=>!r.locked&&c[r.key]!==r.value);y.value=!0;let t=0;const u=[];for(const r of e)try{await _.onSet(r.key,c[r.key]??""),t+=1}catch(F){u.push({key:r.key,reason:F.message})}if(u.length>0){y.value=!1;try{await je.confirm(`共 ${e.length} 项改动:成功 ${t},失败 ${u.length}(首项: ${u[0].key} → ${u[0].reason})。 +import{aG as R,bG as se,b5 as ie,b7 as l,aC as C,az as V,bo as h,aA as i,bH as o,ah as re,bh as ce,F as ue,aB as L,aF as n,R as de,Q as pe,br as O,bl as me,r as fe,bg as _e,aJ as ve,aE as N,bI as ye,by as be,a9 as ge,aa as ke,a7 as he,S as Ee,ac as Ce,L as we,bf as d,av as M,X as P,Y as je,C as Fe,t as Se,be as Ve,aj as q,ab as Le,a8 as Be}from"./index-CC_hCGHZ.js";/* 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 *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as E}from"./reflection-CTDOoTn5.js";const $e={class:"fme-root"},Ie={class:"fme-header"},xe={class:"fme-desc"},Ne={key:0,class:"fme-path"},Pe={key:1,class:"fme-path-empty"},ze={class:"fme-toolbar"},Te={class:"fme-btn-text"},Ue={key:0,class:"fme-locked"},Ae=R({__name:"FieldMemberEditor",props:{targetLabel:{},description:{},loader:{type:Function},onSet:{type:Function},onSave:{type:Function}},setup(B,{expose:f}){const _=B,v=d(!1),y=d(!1),w=d(""),p=d([]),j=d([]),$=d("保存"),c=Ve({}),z=d(!1),s=M(()=>{const e=w.value.trim().toLowerCase();return e?p.value.filter(t=>t.key.toLowerCase().includes(e)||t.label.toLowerCase().includes(e)):p.value}),m=M(()=>p.value.reduce((e,t)=>t.locked?e:c[t.key]!==t.value?e+1:e,0)),g=M(()=>m.value>0);function T(e){return e==="Boolean"}function U(e){return e==="Int32"||e==="Int64"||e==="Int16"||e==="Byte"}function Q(e){return e==="Single"||e==="Double"||e==="Decimal"}function X(e){const t=(e??"").trim().toLowerCase();return t==="true"||t==="1"||t==="yes"}function Y(e){const t=parseInt(e,10);return Number.isFinite(t)?t:0}function K(e){const t=parseFloat(e);return Number.isFinite(t)?t:0}function I(e){return c[e.key]??e.value}function x(e,t){c[e.key]=t}function W(e){if(e.locked)return!1;const t=c[e.key];return t!==void 0&&t!==e.value}async function k(){v.value=!0;try{const e=await _.loader();p.value=e.fields,j.value=e.pathInfos??[],e.saveButtonLabel&&($.value=e.saveButtonLabel);for(const t of e.fields)c[t.key]=t.value;for(const t of Object.keys(c))e.fields.find(u=>u.key===t)||delete c[t]}catch(e){P.error(`加载${_.targetLabel}失败:${e.message}`)}finally{v.value=!1}}function Z(){for(const e of p.value)c[e.key]=e.value}async function ee(){const e=p.value.filter(r=>!r.locked&&c[r.key]!==r.value);y.value=!0;let t=0;const u=[];for(const r of e)try{await _.onSet(r.key,c[r.key]??""),t+=1}catch(F){u.push({key:r.key,reason:F.message})}if(u.length>0){y.value=!1;try{await je.confirm(`共 ${e.length} 项改动:成功 ${t},失败 ${u.length}(首项: ${u[0].key} → ${u[0].reason})。 是否仍要把已成功应用的改动持久化到磁盘?`,"部分字段写入失败",{confirmButtonText:"仍然保存",cancelButtonText:"取消",type:"warning"})}catch{P.warning(`已取消保存(${t} 项已写入内存,${u.length} 项未生效)`),await k();return}y.value=!0}try{const r=await _.onSave();P.success(`已保存到:${r.path}(应用 ${t} 项改动${u.length>0?`;${u.length} 项失败已忽略`:""})`),await k()}catch(r){P.error(`保存失败:${r.message}`)}finally{y.value=!1}}return se(()=>_.loader,()=>{k()}),ie(k),f({refresh:k}),(e,t)=>{const u=ue,r=Fe,F=pe,H=de,A=fe,S=ke,te=he,J=Ee,D=Ce,ae=ge,le=we,oe=Se,ne=be;return l(),C("div",$e,[V("div",Ie,[V("p",xe,h(B.description),1),j.value.length>0?(l(),i(r,{key:0,column:1,size:"small",border:"",class:"fme-paths"},{default:o(()=>[(l(!0),C(re,null,ce(j.value,a=>(l(),i(u,{key:a.label,label:a.label},{default:o(()=>[a.value?(l(),C("code",Ne,h(a.value),1)):(l(),C("span",Pe,"("+h(a.emptyHint??"空")+")",1))]),_:2},1032,["label"]))),128))]),_:1})):L("",!0),V("div",ze,[n(H,{modelValue:w.value,"onUpdate:modelValue":t[0]||(t[0]=a=>w.value=a),placeholder:"按中文/英文键过滤",size:"small",clearable:"",class:"fme-search"},{prefix:o(()=>[n(F,null,{default:o(()=>[n(O(me))]),_:1})]),_:1},8,["modelValue"]),n(A,{size:"small",loading:v.value,onClick:k},{default:o(()=>[n(F,null,{default:o(()=>[n(O(_e))]),_:1}),t[1]||(t[1]=V("span",{class:"fme-btn-text"},"刷新",-1))]),_:1},8,["loading"]),n(A,{size:"small",type:"primary",disabled:!g.value&&!z.value,loading:y.value,onClick:ee},{default:o(()=>[n(F,null,{default:o(()=>[n(O(ve))]),_:1}),V("span",Te,h($.value)+h(g.value?`(${m.value} 项未应用)`:""),1)]),_:1},8,["disabled","loading"]),g.value?(l(),i(A,{key:0,size:"small",link:"",type:"warning",onClick:Z},{default:o(()=>[...t[2]||(t[2]=[N(" 放弃未应用的改动 ",-1)])]),_:1})):L("",!0)])]),ye((l(),i(oe,{shadow:"never",class:"fme-table-card"},{default:o(()=>[n(ae,{data:s.value,stripe:"",border:"",size:"small",height:"100%",class:"fme-table","row-key":"key"},{default:o(()=>[n(S,{label:"中文说明",prop:"label","min-width":"240","show-overflow-tooltip":""}),n(S,{label:"英文键",prop:"key",width:"240","show-overflow-tooltip":""}),n(S,{label:"类型",prop:"typeName",width:"100"}),n(S,{label:"当前值(可编辑)","min-width":"260"},{default:o(({row:a})=>[a.locked?(l(),C("span",Ue,h(a.value)+"(🔒 锁定)",1)):T(a.typeName)?(l(),i(te,{key:1,"model-value":X(I(a)),"onUpdate:modelValue":b=>x(a,String(!!b))},null,8,["model-value","onUpdate:modelValue"])):U(a.typeName)?(l(),i(J,{key:2,"model-value":Y(I(a)),controls:!1,step:1,precision:0,size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,String(b??0))},null,8,["model-value","onUpdate:modelValue"])):Q(a.typeName)?(l(),i(J,{key:3,"model-value":K(I(a)),controls:!1,step:.1,size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,String(b??0))},null,8,["model-value","onUpdate:modelValue"])):(l(),i(H,{key:4,"model-value":I(a),size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,b)},null,8,["model-value","onUpdate:modelValue"]))]),_:1}),n(S,{label:"状态",width:"100",align:"center"},{default:o(({row:a})=>[a.locked?(l(),i(D,{key:0,size:"small",type:"info",effect:"plain"},{default:o(()=>[...t[3]||(t[3]=[N("只读",-1)])]),_:1})):W(a)?(l(),i(D,{key:1,size:"small",type:"warning",effect:"dark"},{default:o(()=>[...t[4]||(t[4]=[N("已修改",-1)])]),_:1})):(l(),i(D,{key:2,size:"small",type:"success",effect:"plain"},{default:o(()=>[...t[5]||(t[5]=[N("同步",-1)])]),_:1}))]),_:1})]),_:1},8,["data"]),!v.value&&p.value.length===0?(l(),i(le,{key:0,description:`未发现可编辑的 [FieldMember] 字段(target: ${B.targetLabel})`},null,8,["description"])):L("",!0)]),_:1})),[[ne,v.value]])])}}}),G=q(Ae,[["__scopeId","data-v-708f3ec1"]]),De={class:"pp-page"},Oe=R({__name:"ProjectPropertiesView",setup(B){const f=d("project"),_=d(null),v=d(null);function y(s){f.value=s}async function w(){const s=await E.getProjectFields();return{fields:s.fields,pathInfos:[{label:"最近加载/保存的项目 JSON",value:s.lastLoadedPath,emptyHint:"尚未通过 SimpleLite 加载或保存过项目"},{label:"simple.json autoload",value:s.autoloadPath,emptyHint:"未配置"}],saveButtonLabel:"保存(写回项目 JSON)"}}function p(s,m){return E.setProjectField(s,m)}async function j(){return{path:(await E.saveProject()).path}}async function $(){const s=await E.getAppConfigFields();return{fields:s.fields,pathInfos:[{label:"保存目标",value:s.savePath,emptyHint:"simple.json"}],saveButtonLabel:"保存(写入 simple.json)"}}function c(s,m){return E.setAppConfigField(s,m)}async function z(){return{path:(await E.saveAppConfig()).path}}return(s,m)=>{const g=Be,T=Le;return l(),C("div",De,[n(T,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=U=>f.value=U),type:"border-card",class:"pp-tabs admin-tabs",onTabChange:y},{default:o(()=>[n(g,{label:"项目属性 (Scene.conf)",name:"project"},{default:o(()=>[f.value==="project"?(l(),i(G,{key:0,ref_key:"projectEditor",ref:_,"target-label":"项目属性",description:"对应 SimpleLite 桌面端主菜单「项目属性…」。编辑字段后点「保存」即可一次完成内存生效 + 写回项目 JSON 文件(含全部场景/车辆/路径/属性)。",loader:w,"on-set":p,"on-save":j},null,512)):L("",!0)]),_:1}),n(g,{label:"核心配置 (simple.json)",name:"app-config"},{default:o(()=>[f.value==="app-config"?(l(),i(G,{key:0,ref_key:"appConfigEditor",ref:v,"target-label":"核心配置",description:"对应 SimpleLite 桌面端主菜单「核心配置 → 编辑配置…」。修改后点「保存」即可一次完成内存生效 + 写入可执行目录下的 simple.json。",loader:$,"on-set":c,"on-save":z},null,512)):L("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),st=q(Oe,[["__scopeId","data-v-b5a5a932"]]);export{st as default}; diff --git a/MiGu.Server/wwwroot/assets/ReflectionManagerPanel-Hhb-p5RK.js b/MiGu.Server/wwwroot/assets/ReflectionManagerPanel-CpDwI_uG.js similarity index 99% rename from MiGu.Server/wwwroot/assets/ReflectionManagerPanel-Hhb-p5RK.js rename to MiGu.Server/wwwroot/assets/ReflectionManagerPanel-CpDwI_uG.js index 7a3bc9e..17b67f1 100644 --- a/MiGu.Server/wwwroot/assets/ReflectionManagerPanel-Hhb-p5RK.js +++ b/MiGu.Server/wwwroot/assets/ReflectionManagerPanel-CpDwI_uG.js @@ -1,4 +1,4 @@ -import{aG as xe,bG as Ce,b5 as Ve,b7 as o,aA as r,bH as a,aC as v,L as Ne,bI as ze,by as Se,a9 as Be,aF as n,aa as Te,ac as De,aE as p,bo as w,af as Pe,r as Le,aB as _,az as c,br as G,al as fl,bg as Ee,av as j,bf as f,X as m,Y,t as Fe,aj as Ue,R as yl,Q as bl,bl as gl,ah as T,ba as $e,aq as _l,K as kl,bh as ae,J as hl,aw as wl,bK as ne,F as $l,a7 as xl,z as Cl,S as Vl,C as Nl,b1 as zl,G as Sl,N as Bl,a0 as Tl,$ as Dl,O as Pl,be as Ll,I as El}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 *//* empty css */import{r as C}from"./reflection-BmVSriDn.js";import{u as Fl}from"./useMapEditStream-DunazsxD.js";const Ul={class:"plg-header"},Al={class:"plg-title"},Il={key:0},Kl=xe({__name:"PluginListPanel",props:{visible:{type:Boolean}},emits:["changed"],setup($,{expose:ie,emit:g}){const A=$,H=g,D=j(()=>A.visible!==!1),I=f([]),P=f(!1),z=f(!0),W=f(null);async function L(){P.value=!0;try{I.value=await C.listPlugins()}catch(y){m.warning(`插件列表加载失败:${y.message}(旧版 SimpleLite 可能未带 /plugins 接口,请重启)`)}finally{P.value=!1}}async function J(y){try{await Y.confirm(`确认卸载插件 ${y.name}? +import{aG as xe,bG as Ce,b5 as Ve,b7 as o,aA as r,bH as a,aC as v,L as Ne,bI as ze,by as Se,a9 as Be,aF as n,aa as Te,ac as De,aE as p,bo as w,af as Pe,r as Le,aB as _,az as c,br as G,al as fl,bg as Ee,av as j,bf as f,X as m,Y,t as Fe,aj as Ue,R as yl,Q as bl,bl as gl,ah as T,ba as $e,aq as _l,K as kl,bh as ae,J as hl,aw as wl,bK as ne,F as $l,a7 as xl,z as Cl,S as Vl,C as Nl,b1 as zl,G as Sl,N as Bl,a0 as Tl,$ as Dl,O as Pl,be as Ll,I as El}from"./index-CC_hCGHZ.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 *//* empty css */import{r as C}from"./reflection-CTDOoTn5.js";import{u as Fl}from"./useMapEditStream-BAGhVPpt.js";const Ul={class:"plg-header"},Al={class:"plg-title"},Il={key:0},Kl=xe({__name:"PluginListPanel",props:{visible:{type:Boolean}},emits:["changed"],setup($,{expose:ie,emit:g}){const A=$,H=g,D=j(()=>A.visible!==!1),I=f([]),P=f(!1),z=f(!0),W=f(null);async function L(){P.value=!0;try{I.value=await C.listPlugins()}catch(y){m.warning(`插件列表加载失败:${y.message}(旧版 SimpleLite 可能未带 /plugins 接口,请重启)`)}finally{P.value=!1}}async function J(y){try{await Y.confirm(`确认卸载插件 ${y.name}? 此插件贡献了 ${y.missionTypes} 个进程类型 / ${y.carTypes} 个车/脚本类型;如果当前还有这些类型的实例存在,卸载会失败(请先在管理面板里删除)。`,"卸载插件",{type:"warning",confirmButtonText:"卸载",cancelButtonText:"取消"})}catch{return}W.value=y.name;try{const k=await C.unloadPlugin(y.name);m.success(k.message??`已卸载 ${y.name}`),H("changed"),await L()}catch(k){m.error(`卸载失败:${k.message}`)}finally{W.value=null}}return Ce(()=>A.visible,y=>{y&&L()}),Ve(()=>{D.value&&L()}),ie({refresh:L}),(y,k)=>{const E=Le,Q=Ne,B=Te,K=De,R=Pe,X=Be,u=Fe,F=Se;return D.value?(o(),r(u,{key:0,shadow:"never",class:"plugin-list-card"},{header:a(()=>[c("div",Ul,[c("span",Al,"已加载插件 ("+w(I.value.length)+")",1),n(E,{text:"",size:"small",icon:G(fl),class:"plg-collapse",onClick:k[0]||(k[0]=x=>z.value=!z.value)},{default:a(()=>[p(w(z.value?"展开":"折叠"),1)]),_:1},8,["icon"]),n(E,{size:"small",loading:P.value,icon:G(Ee),onClick:L},{default:a(()=>[...k[1]||(k[1]=[p("刷新",-1)])]),_:1},8,["loading","icon"])])]),default:a(()=>[z.value?_("",!0):(o(),v("div",Il,[!P.value&&I.value.length===0?(o(),r(Q,{key:0,description:"尚未通过 PluginManager 加载任何插件 (重启 SimpleLite 后会自动迁移现有 plugins/ 内的 dll)"})):ze((o(),r(X,{key:1,data:I.value,size:"small",stripe:"",border:"",class:"plg-table"},{default:a(()=>[n(B,{prop:"name",label:"插件名",width:"200","show-overflow-tooltip":""}),n(B,{prop:"assemblyVersion",label:"版本",width:"120"}),n(B,{label:"类型贡献",width:"200"},{default:a(({row:x})=>[n(K,{size:"small",type:"success",effect:"plain",class:"plg-tag"},{default:a(()=>[p(" 进程 "+w(x.missionTypes),1)]),_:2},1024),n(K,{size:"small",type:"primary",effect:"plain",class:"plg-tag"},{default:a(()=>[p(" 车/脚本 "+w(x.carTypes),1)]),_:2},1024),n(K,{size:"small",type:"info",effect:"plain",class:"plg-tag"},{default:a(()=>[p(" 共 "+w(x.loadedTypes)+" type ",1)]),_:2},1024)]),_:1}),n(B,{prop:"dllPath",label:"路径","min-width":"240","show-overflow-tooltip":""}),n(B,{label:"状态",width:"120"},{default:a(({row:x})=>[x.collectible?(o(),r(K,{key:0,size:"small",type:"success"},{default:a(()=>[...k[2]||(k[2]=[p("可卸载",-1)])]),_:1})):(o(),r(R,{key:1,content:"此插件被加到 default ALC(旧路径加载),重启 SimpleLite 后会自动迁移到 collectible",placement:"top"},{default:a(()=>[n(K,{size:"small",type:"warning"},{default:a(()=>[...k[3]||(k[3]=[p("不可卸载",-1)])]),_:1})]),_:1}))]),_:1}),n(B,{label:"操作",width:"100"},{default:a(({row:x})=>[n(E,{text:"",size:"small",type:"danger",disabled:!x.collectible,loading:W.value===x.name,onClick:M=>J(x)},{default:a(()=>[...k[4]||(k[4]=[p(" 卸载 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1},8,["data"])),[[F,P.value]])]))]),_:1})):_("",!0)}}}),Rl=Ue(Kl,[["__scopeId","data-v-d89a2aa6"]]),Ml={class:"ref-mgr-page"},Ol={class:"ref-mgr-header"},jl={class:"ref-mgr-title"},Gl={class:"ref-mgr-actions"},Wl={class:"ref-type-asm"},Xl={class:"ref-mgr-body"},Yl={class:"detail-header"},Zl={class:"detail-title"},ql={class:"detail-id"},Hl={class:"detail-name"},Jl={class:"detail-actions"},Ql={class:"field-section"},et={class:"field-section-title"},lt={key:1,class:"field-empty"},tt={class:"field-section"},at={class:"field-section-title"},nt={class:"dyn-row"},ot={key:1,class:"field-empty"},st={key:0,class:"field-section"},it={class:"field-section-title"},ut=["title"],dt={class:"field-section"},rt={class:"field-section-title"},ct={key:0,class:"field-empty"},mt={key:0,class:"method-grid script-method-grid"},pt=["disabled"],vt={key:0,class:"method-btn-spin"},ft={key:1,class:"method-btn-icon"},yt=["disabled"],bt={key:0,class:"method-btn-spin"},gt={key:1,class:"method-btn-icon"},_t={key:1,class:"field-empty"},kt={key:2,class:"method-grid"},ht=["disabled","onClick"],wt={key:0,class:"method-btn-spin"},$t={key:1,class:"method-btn-icon"},xt={class:"method-btn-label"},Ct={key:2,class:"method-btn-tag"},Vt=xe({__name:"ReflectionManagerPanel",props:{kind:{},kindLabel:{},title:{},emptyText:{},disableCreate:{type:Boolean},disableDelete:{type:Boolean},showSummaryColumn:{type:Boolean},summaryLabel:{},showStatusColumn:{type:Boolean},statusLabel:{},showScriptActions:{type:Boolean}},setup($,{expose:ie}){const g=$,A=f(!1),H=f(!1),D=f(null),I=f(null),P=f(null),z=f(null),W=f(!1),L=f(!1),J=f(""),y=f(null),k=f(null),E=f(!1),Q=f(""),B=f(""),K=f(null),R=f([]),X=f([]),u=f(null),F=f([]),x=f([]),M=f([]),ue=j(()=>F.value.filter(l=>l.source!=="dynamic")),de=j(()=>F.value.filter(l=>l.source==="dynamic")),re=j(()=>!!g.showScriptActions&&g.kind==="script"&&!!u.value),Ae=j(()=>M.value.length+(re.value?2:0)),Ie=j(()=>{let l=110;return g.showScriptActions&&g.kind==="script"&&(l+=130),g.disableDelete||(l+=60),l}),pe=j(()=>{const l=J.value.trim().toLowerCase();return l?R.value.filter(e=>String(e.id).includes(l)||(e.name??"").toLowerCase().includes(l)||(e.typeName??"").toLowerCase().includes(l)):R.value}),Ke=new Set(["process","mission","car","vehicle"]),Re=j(()=>Ke.has(g.kind));async function S(){A.value=!0;try{const[l,e]=await Promise.all([C.listObjects(g.kind),C.listCreatableTypes(g.kind).catch(()=>[])]);R.value=l,X.value=e,u.value&&!R.value.find(i=>i.id===u.value.id)&&(u.value=null,F.value=[],M.value=[],x.value=[])}catch(l){m.error(`加载 ${g.kindLabel} 失败:${l.message}`)}finally{A.value=!1}}async function U(l){if(u.value=l,F.value=[],M.value=[],x.value=[],!!l){H.value=!0;try{const e=l.subKind??g.kind,i=await C.getBundle(e,l.id);i.fieldList&&i.fieldList.length>0?F.value=i.fieldList.map(d=>({...d})):F.value=Object.entries(i.fields??{}).map(([d,b])=>({key:d,value:String(b),source:"dynamic"})),M.value=i.methods??[],x.value=i.status??[]}catch(e){m.error(`加载详情失败:${e.message}`)}finally{H.value=!1}}}function ee(l){return l?.subKind??g.kind}async function Me(){W.value=!0;try{const l=await C.reloadPlugins();m.success(`已扫描 plugins/ 目录:发现 ${l.totalDlls} dll,新加载 ${l.newlyLoaded};进程类型 ${l.missionTypes}、车辆/脚本类型 ${l.carTypes}`),await S(),K.value?.refresh()}catch(l){m.error(`刷新插件失败:${l.message}`)}finally{W.value=!1}}const le=f(!1),V=f(""),s=Ll({name:"",layer:"",x:0,y:0,z:0,siteA:0,siteB:0,trackKind:"line",imagePath:"",modelPath:"",content:"Text"});function Oe(l){switch(l){case"site":return"站点";case"track":return"路径";case"image":return"图片";case"text":return"文本";case"model":return"模型";case"car":return"车辆";default:return l}}function ve(l){const e=l??(g.kind==="special"?"image":g.kind==="scene"?"site":g.kind==="vehicle"?"car":g.kind);V.value=e,s.name="",s.layer="",s.x=0,s.y=0,s.z=0,s.siteA=0,s.siteB=0,s.trackKind="line",s.imagePath="",s.modelPath="",s.content="Text",le.value=!0}ie({openCreateForm:ve,refresh:S});async function fe(){L.value=!0;try{const l=V.value;let e=l;const i={name:s.name||void 0,layer:s.layer||void 0};l==="site"?(i.x=s.x,i.y=s.y,i.z=s.z):l==="track"?(e=s.trackKind==="line"?"track":s.trackKind,i.siteA=s.siteA,i.siteB=s.siteB):l==="image"?(i.x=s.x,i.y=s.y,i.imagePath=s.imagePath):l==="text"?(i.x=s.x,i.y=s.y,i.content=s.content):l==="model"?(i.x=s.x,i.y=s.y,i.modelPath=s.modelPath):l==="car"&&(i.x=s.x,i.y=s.y);const d=await C.createObject(e,"",i);m.success(`已创建 ${d.typeName??l} #${d.id}`),le.value=!1,await S();const b=R.value.find(oe=>oe.id===d.id);b&&await U(b)}catch(l){m.error(`创建失败:${l.message}`)}finally{L.value=!1}}async function je(l){try{let e;try{e=(await Y.prompt(`为新${g.kindLabel}指定名称(可空,留空使用默认名)`,`新建${g.kindLabel}`,{inputValue:"",confirmButtonText:"创建",cancelButtonText:"取消"})).value||void 0}catch{return}const i=await C.createObject(g.kind,l,{name:e});m.success(`已创建 ${i.typeName} #${i.id}`),await S();const d=R.value.find(b=>b.id===i.id);d&&await U(d)}catch(e){m.error(`创建失败:${e.message}`)}}async function Ge(l){try{await Y.confirm(`确认删除 ${l.typeName} #${l.id} (${l.name})?该操作无法撤销。`,`删除${g.kindLabel}`,{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"})}catch{return}I.value=l.id;try{const e=ee(l);await C.deleteObject(e,l.id),m.success(`已删除 ${l.typeName} #${l.id}`),u.value?.id===l.id&&(u.value=null),await S()}catch(e){m.error(`删除失败:${e.message}`)}finally{I.value=null}}async function Z(l,e){if(u.value){z.value=l;try{const i=ee(u.value);await C.setField(i,u.value.id,l,e),m.success(`已更新 ${l}`)}catch(i){m.error(`更新 ${l} 失败:${i.message}`),await U(u.value)}finally{z.value=null}}}async function We(l){if(u.value){try{await Y.confirm(`确认删除动态字段 "${l}"?`,"删除字段",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"})}catch{return}P.value=l;try{const e=ee(u.value);await C.deleteField(e,u.value.id,l),m.success(`已删除字段 ${l}`),await U(u.value)}catch(e){m.error(`删除字段失败:${e.message}`)}finally{P.value=null}}}async function Xe(){if(!u.value)return;let l="";try{l=(await Y.prompt("字段名(key)","添加动态字段",{inputValidator:d=>!!d&&/^[A-Za-z_][A-Za-z0-9_\-]*$/.test(d)||"只允许字母/数字/下划线/横线,且首字符非数字",confirmButtonText:"下一步",cancelButtonText:"取消"})).value}catch{return}let e="";try{e=(await Y.prompt(`字段 "${l}" 的初始值(可空)`,"添加动态字段",{inputValue:"",confirmButtonText:"保存",cancelButtonText:"取消"})).value}catch{return}if(F.value.find(i=>i.key===l)){m.warning(`字段 ${l} 已存在,请直接编辑`);return}await Z(l,e),await U(u.value)}async function ye(l){if(l)try{const e=ee(l);await C.setSelection(e,l.id),m.success(`已在 3D 视口高亮 ${l.typeName??e} #${l.id}`)}catch(e){m.error(`高亮失败:${e.message}`)}}async function be(l){if(l){y.value="source",k.value=l.id;try{const e=await C.getScriptSource(l.id);Q.value=`脚本 ${e.name||e.typeName}(#${e.id}) 内容`,B.value=e.script||"(无脚本)",E.value=!0}catch(e){m.error(`查看脚本失败:${e.message}`)}finally{y.value=null,k.value=null}}}async function ge(l){if(l){y.value="status",k.value=l.id;try{const e=await C.getScriptExceptionStatus(l.id);Q.value=`脚本 ${e.name||e.typeName}(#${e.id}) 异常状态`,B.value=e.report||"(无异常状态)",E.value=!0}catch(e){m.error(`查看异常状态失败:${e.message}`)}finally{y.value=null,k.value=null}}}function Ye(){u.value&&be(u.value)}function Ze(){u.value&&ge(u.value)}function _e(l,e){return k.value===l.id&&y.value===e}async function qe(){try{await navigator.clipboard.writeText(B.value),m.success("已复制到剪贴板")}catch{m.warning("复制失败,请手动选择文本复制")}}async function He(l){if(!u.value)return;const e=ee(u.value);if(l.hasParams){const i={};for(const d of l.params)try{const b=await Y.prompt(`参数 ${d.name} (${d.typeName})`+(d.hasDefault?` 默认: ${d.defaultValue}`:""),`调用 ${l.label??l.methodName}`,{inputValue:d.defaultValue??""});i[d.name]=b.value}catch{return}D.value=l.methodName;try{const d=await C.execute(e,u.value.id,l.methodName,i);m.success(`${l.label??l.methodName} 完成${d.returnValue?`:${d.returnValue}`:""}`),await U(u.value)}catch(d){m.error(`执行失败:${d.message}`)}finally{D.value=null}return}D.value=l.methodName;try{const i=await C.execute(e,u.value.id,l.methodName);m.success(`${l.label??l.methodName} 完成${i.returnValue?`:${i.returnValue}`:""}`),await U(u.value)}catch(i){m.error(`执行失败:${i.message}`)}finally{D.value=null}}function Je(l){return l.typeName==="Boolean"?!0:l.value==="true"||l.value==="false"||l.value==="True"||l.value==="False"}function Qe(l){return l.key==="color"||l.key==="textColor"?!0:/^#[0-9a-fA-F]{3,8}$/.test(l.value)}function el(l){return l.typeName?["Int32","Int64","Single","Double","Decimal","UInt32","UInt64"].includes(l.typeName):!1}function ll(l){return l==="true"||l==="True"||l==="1"}function tl(l){if(l==null||l==="")return;const e=Number(l);return Number.isFinite(e)?e:void 0}function al(l){const e=l.typeName?.trim();return e&&e!=="String"?`${l.key} (${e})`:l.key}function nl(l){const e=(l.value??"").trim();return e||(l.typeName?`(空 · ${l.typeName})`:"(空)")}function ol(l){if((l.typeName??"").endsWith("[]"))return!0;const i=(l.value??"").trim();return i.startsWith("[")||i.startsWith("{")}return Fl({onObjectCreated:()=>S(),onObjectDeleted:()=>S(),onObjectPatched:()=>{u.value&&U(u.value)},onObjectBatchChanged:()=>S()}),Ce(()=>g.kind,S),Ve(S),(l,e)=>{const i=bl,d=yl,b=Le,oe=hl,sl=kl,il=El,te=Pe,q=Te,ul=Be,ke=Ne,he=Fe,dl=De,rl=xl,cl=Cl,O=Vl,ce=$l,me=Nl,se=Dl,ml=Tl,N=Pl,pl=Bl,we=Sl,vl=Se;return o(),v("div",Ml,[n(Rl,{ref_key:"pluginPanelRef",ref:K,visible:!0,onChanged:S},null,512),c("div",Ol,[c("h2",jl,w($.title),1),c("div",Gl,[n(d,{modelValue:J.value,"onUpdate:modelValue":e[0]||(e[0]=t=>J.value=t),placeholder:`搜索 ${$.kindLabel} (id / 名称 / 类型)`,size:"small",clearable:"",class:"ref-mgr-search"},{prefix:a(()=>[n(i,null,{default:a(()=>[n(G(gl))]),_:1})]),_:1},8,["modelValue","placeholder"]),$.disableCreate?_("",!0):(o(),v(T,{key:0},[Re.value?(o(),r(il,{key:0,trigger:"click",disabled:X.value.length===0,onCommand:je},{dropdown:a(()=>[n(sl,null,{default:a(()=>[(o(!0),v(T,null,ae(X.value,t=>(o(),r(oe,{key:t.typeName,command:t.typeName},{default:a(()=>[p(w(t.label)+" ",1),c("span",Wl,"· "+w(t.shortName),1)]),_:2},1032,["command"]))),128)),X.value.length===0?(o(),r(oe,{key:0,disabled:""},{default:a(()=>[...e[20]||(e[20]=[p(" 未发现可创建的子类型 ",-1)])]),_:1})):_("",!0)]),_:1})]),default:a(()=>[n(b,{type:"primary",size:"small",icon:G($e),disabled:X.value.length===0},{default:a(()=>[p(" 新建"+w($.kindLabel),1),n(i,{class:"el-icon--right"},{default:a(()=>[n(G(_l))]),_:1})]),_:1},8,["icon","disabled"])]),_:1},8,["disabled"])):(o(),r(b,{key:1,type:"primary",size:"small",icon:G($e),onClick:e[1]||(e[1]=t=>ve())},{default:a(()=>[p(" 新建"+w($.kindLabel),1)]),_:1},8,["icon"]))],64)),n(te,{content:"重新扫描 ./plugins 目录加载新增 .dll,并重建可创建类型列表",placement:"bottom"},{default:a(()=>[n(b,{size:"small",loading:W.value,icon:G(wl),onClick:Me},{default:a(()=>[...e[21]||(e[21]=[p(" 刷新插件 ",-1)])]),_:1},8,["loading","icon"])]),_:1}),n(b,{size:"small",loading:A.value,icon:G(Ee),onClick:S},{default:a(()=>[...e[22]||(e[22]=[p("刷新",-1)])]),_:1},8,["loading","icon"])])]),c("div",Xl,[n(he,{shadow:"never",class:"ref-mgr-list-card"},{default:a(()=>[ze((o(),r(ul,{data:pe.value,stripe:"",border:"",size:"small","highlight-current-row":"",class:"ref-mgr-table",onCurrentChange:U},{default:a(()=>[n(q,{prop:"id",label:"ID",width:"70"}),n(q,{prop:"name",label:"名称","min-width":"160"}),n(q,{prop:"typeName",label:"类型",width:"160","show-overflow-tooltip":""}),$.showSummaryColumn?(o(),r(q,{key:0,prop:"summary",label:$.summaryLabel??"概况","min-width":"160","show-overflow-tooltip":""},null,8,["label"])):_("",!0),$.showStatusColumn?(o(),r(q,{key:1,prop:"status",label:$.statusLabel??"状态",width:"120","show-overflow-tooltip":""},null,8,["label"])):_("",!0),n(q,{label:"操作",width:Ie.value},{default:a(({row:t})=>[n(b,{text:"",size:"small",onClick:ne(h=>ye(t),["stop"])},{default:a(()=>[...e[23]||(e[23]=[p(" 3D 高亮 ",-1)])]),_:1},8,["onClick"]),$.showScriptActions&&$.kind==="script"?(o(),v(T,{key:0},[n(b,{text:"",size:"small",loading:_e(t,"source"),disabled:y.value!==null,onClick:ne(h=>be(t),["stop"])},{default:a(()=>[...e[24]||(e[24]=[p(" 查看脚本 ",-1)])]),_:1},8,["loading","disabled","onClick"]),n(b,{text:"",size:"small",loading:_e(t,"status"),disabled:y.value!==null,onClick:ne(h=>ge(t),["stop"])},{default:a(()=>[...e[25]||(e[25]=[p(" 异常状态 ",-1)])]),_:1},8,["loading","disabled","onClick"])],64)):_("",!0),$.disableDelete?_("",!0):(o(),r(b,{key:1,text:"",size:"small",type:"danger",loading:I.value===t.id,onClick:ne(h=>Ge(t),["stop"])},{default:a(()=>[...e[26]||(e[26]=[p(" 删除 ",-1)])]),_:1},8,["loading","onClick"]))]),_:1},8,["width"])]),_:1},8,["data"])),[[vl,A.value]]),!A.value&&pe.value.length===0?(o(),r(ke,{key:0,description:$.emptyText},null,8,["description"])):_("",!0)]),_:1}),n(he,{shadow:"never",class:"ref-mgr-detail-card"},{default:a(()=>[u.value?(o(),v(T,{key:1},[c("div",Yl,[c("div",Zl,[n(dl,{size:"small",type:"info"},{default:a(()=>[p(w(u.value.typeName),1)]),_:1}),c("span",ql,"#"+w(u.value.id),1),c("span",Hl,w(u.value.name),1)]),c("div",Jl,[c("button",{class:"header-action-btn",onClick:e[2]||(e[2]=t=>ye(u.value))},"在 3D 中高亮")])]),c("div",Ql,[c("div",et,"强类型字段 ("+w(ue.value.length)+")",1),ue.value.length>0?(o(),r(me,{key:0,column:2,border:"",size:"small"},{default:a(()=>[(o(!0),v(T,null,ae(ue.value,t=>(o(),r(ce,{key:t.key,label:t.key,"label-style":t.locked?{color:"#aaa"}:void 0},{default:a(()=>[Je(t)?(o(),r(rl,{key:0,"model-value":ll(t.value),disabled:!!t.locked||z.value===t.key,size:"small",onChange:h=>Z(t.key,h?"true":"false")},null,8,["model-value","disabled","onChange"])):Qe(t)?(o(),r(cl,{key:1,"model-value":t.value||"#ffffff",disabled:!!t.locked||z.value===t.key,"show-alpha":"",size:"small",onChange:h=>Z(t.key,h??"")},null,8,["model-value","disabled","onChange"])):el(t)?(o(),r(O,{key:2,"model-value":tl(t.value),controls:!1,disabled:!!t.locked||z.value===t.key,size:"small",class:"field-num",onChange:h=>Z(t.key,h==null?"":String(h))},null,8,["model-value","disabled","onChange"])):(o(),r(d,{key:3,modelValue:t.value,"onUpdate:modelValue":h=>t.value=h,size:"small",disabled:!!t.locked||z.value===t.key,onChange:h=>Z(t.key,h)},null,8,["modelValue","onUpdate:modelValue","disabled","onChange"]))]),_:2},1032,["label","label-style"]))),128))]),_:1})):(o(),v("div",lt,"该对象未声明任何 [FieldMember]"))]),c("div",tt,[c("div",at,[c("span",null,"动态字段 ("+w(de.value.length)+")",1),c("button",{class:"add-field-btn",onClick:Xe},"+ 添加字段")]),de.value.length>0?(o(),r(me,{key:0,column:1,border:"",size:"small"},{default:a(()=>[(o(!0),v(T,null,ae(de.value,t=>(o(),r(ce,{key:t.key,label:t.key},{default:a(()=>[c("div",nt,[n(d,{modelValue:t.value,"onUpdate:modelValue":h=>t.value=h,size:"small",disabled:z.value===t.key,onChange:h=>Z(t.key,h)},null,8,["modelValue","onUpdate:modelValue","disabled","onChange"]),n(te,{content:"删除该字段",placement:"top"},{default:a(()=>[n(b,{size:"small",text:"",type:"danger",loading:P.value===t.key,onClick:h=>We(t.key)},{default:a(()=>[...e[27]||(e[27]=[p(" 删除 ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)])]),_:2},1032,["label"]))),128))]),_:1})):(o(),v("div",ot,"尚无动态字段;点击右上角「+ 添加字段」"))]),x.value.length>0?(o(),v("div",st,[c("div",it,"运行状态 (只读, "+w(x.value.length)+")",1),n(me,{column:1,border:"",size:"small"},{default:a(()=>[(o(!0),v(T,null,ae(x.value,t=>(o(),r(ce,{key:t.key,label:al(t)},{default:a(()=>[c("span",{class:zl(["status-value",{"status-value--array":ol(t)}]),title:t.typeName},w(nl(t)),11,ut)]),_:2},1032,["label"]))),128))]),_:1})])):_("",!0),c("div",dt,[c("div",rt,"动作 / 方法 ("+w(Ae.value)+")",1),H.value?(o(),v("div",ct,"加载方法中…")):(o(),v(T,{key:1},[re.value?(o(),v("div",mt,[n(te,{content:"弹窗展示当前 CarProgram 的完整 script 内容",placement:"top"},{default:a(()=>[c("button",{class:"method-btn",disabled:y.value!==null,onClick:Ye},[y.value==="source"?(o(),v("span",vt,"⟳")):(o(),v("span",ft,"▶")),e[28]||(e[28]=c("span",{class:"method-btn-label"},"查看脚本",-1))],8,pt)]),_:1}),n(te,{content:"弹窗展示 state、exception、notifies 等异常状态报告",placement:"top"},{default:a(()=>[c("button",{class:"method-btn",disabled:y.value!==null,onClick:Ze},[y.value==="status"?(o(),v("span",bt,"⟳")):(o(),v("span",gt,"▶")),e[29]||(e[29]=c("span",{class:"method-btn-label"},"查看异常状态",-1))],8,yt)]),_:1})])):_("",!0),M.value.length===0&&!re.value?(o(),v("div",_t,"该类型未暴露 [MethodMember]")):M.value.length>0?(o(),v("div",kt,[(o(!0),v(T,null,ae(M.value,t=>(o(),r(te,{key:t.methodName,content:t.description??t.hint??"",disabled:!t.description&&!t.hint,placement:"top"},{default:a(()=>[c("button",{class:"method-btn",disabled:D.value===t.methodName,onClick:h=>He(t)},[D.value===t.methodName?(o(),v("span",wt,"⟳")):(o(),v("span",$t,"▶")),c("span",xt,w(t.label??t.methodName),1),t.hasParams?(o(),v("span",Ct,"带参")):_("",!0)],8,ht)]),_:2},1032,["content","disabled"]))),128))])):_("",!0)],64))])],64)):(o(),r(ke,{key:0,description:"左侧选中一行查看 / 编辑详情"}))]),_:1})]),n(we,{modelValue:le.value,"onUpdate:modelValue":e[17]||(e[17]=t=>le.value=t),title:`新建 ${$.kindLabel}${V.value?" · "+Oe(V.value):""}`,width:"480px","append-to-body":""},{footer:a(()=>[n(b,{onClick:e[16]||(e[16]=t=>le.value=!1)},{default:a(()=>[...e[34]||(e[34]=[p("取消",-1)])]),_:1}),n(b,{type:"primary",loading:L.value,onClick:fe},{default:a(()=>[...e[35]||(e[35]=[p("创建",-1)])]),_:1},8,["loading"])]),default:a(()=>[n(pl,{model:s,size:"small","label-width":"100px",onSubmit:ne(fe,["prevent"])},{default:a(()=>[V.value==="track"?(o(),r(N,{key:0,label:"路径类型"},{default:a(()=>[n(ml,{modelValue:s.trackKind,"onUpdate:modelValue":e[3]||(e[3]=t=>s.trackKind=t)},{default:a(()=>[n(se,{value:"line"},{default:a(()=>[...e[30]||(e[30]=[p("直线",-1)])]),_:1}),n(se,{value:"bezier"},{default:a(()=>[...e[31]||(e[31]=[p("贝塞尔",-1)])]),_:1}),n(se,{value:"arc"},{default:a(()=>[...e[32]||(e[32]=[p("圆弧",-1)])]),_:1}),n(se,{value:"nurbs"},{default:a(()=>[...e[33]||(e[33]=[p("NURBS",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):_("",!0),n(N,{label:"名称"},{default:a(()=>[n(d,{modelValue:s.name,"onUpdate:modelValue":e[4]||(e[4]=t=>s.name=t),placeholder:"(可空,留空走默认名)"},null,8,["modelValue"])]),_:1}),n(N,{label:"图层"},{default:a(()=>[n(d,{modelValue:s.layer,"onUpdate:modelValue":e[5]||(e[5]=t=>s.layer=t),placeholder:"g / main / ..."},null,8,["modelValue"])]),_:1}),["site","image","text","model"].includes(V.value)?(o(),v(T,{key:1},[n(N,{label:"X (mm)"},{default:a(()=>[n(O,{modelValue:s.x,"onUpdate:modelValue":e[6]||(e[6]=t=>s.x=t),controls:!1},null,8,["modelValue"])]),_:1}),n(N,{label:"Y (mm)"},{default:a(()=>[n(O,{modelValue:s.y,"onUpdate:modelValue":e[7]||(e[7]=t=>s.y=t),controls:!1},null,8,["modelValue"])]),_:1}),V.value==="site"?(o(),r(N,{key:0,label:"Z (mm)"},{default:a(()=>[n(O,{modelValue:s.z,"onUpdate:modelValue":e[8]||(e[8]=t=>s.z=t),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0)],64)):_("",!0),V.value==="track"?(o(),v(T,{key:2},[n(N,{label:"起点站 ID"},{default:a(()=>[n(O,{modelValue:s.siteA,"onUpdate:modelValue":e[9]||(e[9]=t=>s.siteA=t),controls:!1,min:1},null,8,["modelValue"])]),_:1}),n(N,{label:"终点站 ID"},{default:a(()=>[n(O,{modelValue:s.siteB,"onUpdate:modelValue":e[10]||(e[10]=t=>s.siteB=t),controls:!1,min:1},null,8,["modelValue"])]),_:1})],64)):_("",!0),V.value==="image"?(o(),r(N,{key:3,label:"图片路径"},{default:a(()=>[n(d,{modelValue:s.imagePath,"onUpdate:modelValue":e[11]||(e[11]=t=>s.imagePath=t),placeholder:"/uploads/xxxxx.png"},null,8,["modelValue"])]),_:1})):_("",!0),V.value==="model"?(o(),r(N,{key:4,label:"模型路径"},{default:a(()=>[n(d,{modelValue:s.modelPath,"onUpdate:modelValue":e[12]||(e[12]=t=>s.modelPath=t),placeholder:"/uploads/xxxxx.glb"},null,8,["modelValue"])]),_:1})):_("",!0),V.value==="text"?(o(),r(N,{key:5,label:"文本"},{default:a(()=>[n(d,{modelValue:s.content,"onUpdate:modelValue":e[13]||(e[13]=t=>s.content=t),placeholder:"Text"},null,8,["modelValue"])]),_:1})):_("",!0),V.value==="car"?(o(),r(N,{key:6,label:"X (mm)"},{default:a(()=>[n(O,{modelValue:s.x,"onUpdate:modelValue":e[14]||(e[14]=t=>s.x=t),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0),V.value==="car"?(o(),r(N,{key:7,label:"Y (mm)"},{default:a(()=>[n(O,{modelValue:s.y,"onUpdate:modelValue":e[15]||(e[15]=t=>s.y=t),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),n(we,{modelValue:E.value,"onUpdate:modelValue":e[19]||(e[19]=t=>E.value=t),title:Q.value,width:"720px","append-to-body":""},{footer:a(()=>[n(b,{onClick:qe},{default:a(()=>[...e[36]||(e[36]=[p("复制",-1)])]),_:1}),n(b,{type:"primary",onClick:e[18]||(e[18]=t=>E.value=!1)},{default:a(()=>[...e[37]||(e[37]=[p("关闭",-1)])]),_:1})]),default:a(()=>[n(d,{"model-value":B.value,type:"textarea",autosize:{minRows:16,maxRows:26},readonly:"",class:"script-dialog-textarea"},null,8,["model-value"])]),_:1},8,["modelValue","title"])])}}}),Ht=Ue(Vt,[["__scopeId","data-v-ddd8ee18"]]);export{Ht as R}; diff --git a/MiGu.Server/wwwroot/assets/RoutingPolicyView-BzXqXDjp.js b/MiGu.Server/wwwroot/assets/RoutingPolicyView-CIGTEJMB.js similarity index 84% rename from MiGu.Server/wwwroot/assets/RoutingPolicyView-BzXqXDjp.js rename to MiGu.Server/wwwroot/assets/RoutingPolicyView-CIGTEJMB.js index 3b11927..68cc836 100644 --- a/MiGu.Server/wwwroot/assets/RoutingPolicyView-BzXqXDjp.js +++ b/MiGu.Server/wwwroot/assets/RoutingPolicyView-CIGTEJMB.js @@ -1 +1 @@ -import{aG as f,aA as w,bH as t,br as h,b7 as g,aF as e,N as v,O as E,a3 as I,Z as k,a9 as x,aa as z,S as U,f as V}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}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=f({__name:"RoutingPolicyView",setup(D){function _(r){return Object.entries(r).map(([p,a])=>({k:p,v:a}))}return(r,p)=>{const a=k,u=I,m=E,o=z,d=U,n=x,c=v;return g(),w(C,{section:"routing",title:"路径规划策略",description:"算法选择、权重、避障规则、区域限速(RoutingPolicy)",defaults:h(V)},{default:t(({payload:l,update:s})=>[e(c,{"label-width":"140px",model:l},{default:t(()=>[e(m,{label:"算法"},{default:t(()=>[e(u,{"model-value":l.algorithm,"onUpdate:modelValue":i=>s({...l,algorithm:i})},{default:t(()=>[e(a,{label:"Dijkstra",value:"dijkstra"}),e(a,{label:"A*",value:"astar"}),e(a,{label:"自定义",value:"custom"})]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(m,{label:"权重"},{default:t(()=>[e(n,{data:_(l.weights),size:"small"},{default:t(()=>[e(o,{label:"维度",prop:"k",width:"140"}),e(o,{label:"权重"},{default:t(i=>[e(d,{"model-value":i.row.v,min:0,max:10,step:.1,"onUpdate:modelValue":b=>s({...l,weights:{...l.weights,[i.row.k]:b??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["data"])]),_:2},1024),e(m,{label:"避障规则"},{default:t(()=>[e(n,{data:l.avoidance,size:"small"},{default:t(()=>[e(o,{label:"ID",prop:"id",width:"100"}),e(o,{label:"区域 ID",prop:"zoneId",width:"140"}),e(o,{label:"规则",prop:"rule"})]),_:1},8,["data"])]),_:2},1024),e(m,{label:"区域限速"},{default:t(()=>[e(n,{data:l.zoneSpeedLimits,size:"small"},{default:t(()=>[e(o,{label:"区域",prop:"zoneId",width:"140"}),e(o,{label:"最大速度 (m/s)",prop:"maxSpeedMps"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{X as default}; +import{aG as f,aA as w,bH as t,br as h,b7 as g,aF as e,N as v,O as E,a3 as I,Z as k,a9 as x,aa as z,S as U,f as V}from"./index-CC_hCGHZ.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}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const X=f({__name:"RoutingPolicyView",setup(D){function _(r){return Object.entries(r).map(([p,a])=>({k:p,v:a}))}return(r,p)=>{const a=k,u=I,m=E,o=z,d=U,n=x,c=v;return g(),w(C,{section:"routing",title:"路径规划策略",description:"算法选择、权重、避障规则、区域限速(RoutingPolicy)",defaults:h(V)},{default:t(({payload:l,update:s})=>[e(c,{"label-width":"140px",model:l},{default:t(()=>[e(m,{label:"算法"},{default:t(()=>[e(u,{"model-value":l.algorithm,"onUpdate:modelValue":i=>s({...l,algorithm:i})},{default:t(()=>[e(a,{label:"Dijkstra",value:"dijkstra"}),e(a,{label:"A*",value:"astar"}),e(a,{label:"自定义",value:"custom"})]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(m,{label:"权重"},{default:t(()=>[e(n,{data:_(l.weights),size:"small"},{default:t(()=>[e(o,{label:"维度",prop:"k",width:"140"}),e(o,{label:"权重"},{default:t(i=>[e(d,{"model-value":i.row.v,min:0,max:10,step:.1,"onUpdate:modelValue":b=>s({...l,weights:{...l.weights,[i.row.k]:b??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["data"])]),_:2},1024),e(m,{label:"避障规则"},{default:t(()=>[e(n,{data:l.avoidance,size:"small"},{default:t(()=>[e(o,{label:"ID",prop:"id",width:"100"}),e(o,{label:"区域 ID",prop:"zoneId",width:"140"}),e(o,{label:"规则",prop:"rule"})]),_:1},8,["data"])]),_:2},1024),e(m,{label:"区域限速"},{default:t(()=>[e(n,{data:l.zoneSpeedLimits,size:"small"},{default:t(()=>[e(o,{label:"区域",prop:"zoneId",width:"140"}),e(o,{label:"最大速度 (m/s)",prop:"maxSpeedMps"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{X as default}; diff --git a/MiGu.Server/wwwroot/assets/ScenarioTemplateView-BLw6THy-.js b/MiGu.Server/wwwroot/assets/ScenarioTemplateView-BfXftOcX.js similarity index 84% rename from MiGu.Server/wwwroot/assets/ScenarioTemplateView-BLw6THy-.js rename to MiGu.Server/wwwroot/assets/ScenarioTemplateView-BfXftOcX.js index 215d218..a5397d1 100644 --- a/MiGu.Server/wwwroot/assets/ScenarioTemplateView-BLw6THy-.js +++ b/MiGu.Server/wwwroot/assets/ScenarioTemplateView-BfXftOcX.js @@ -1 +1 @@ -import{aG as b,aA as _,bH as e,br as C,b7 as i,aF as t,a1 as h,aC as E,ah as g,bh as v,w,t as S,az as r,bo as a,ac as k,aE as o,H as D,C as P,F as V,g as T,aj as x}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as B}from"./ConfigPageBase-DYlmkUIy.js";/* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const F={class:"tpl-title"},L={class:"tpl-meta"},N={class:"tpl-baseline"},z=b({__name:"ScenarioTemplateView",setup(A){return(I,R)=>{const c=k,d=S,m=w,p=h,f=D,l=V,u=P;return i(),_(B,{section:"scenario",title:"业务场景模板化",description:"SPS / Pack / 环线 / 点对点;DSL/低代码扩展(ScenarioTemplateConfig)",defaults:C(T)},{default:e(({payload:s})=>[t(p,{gutter:12},{default:e(()=>[(i(!0),E(g,null,v(s.templates,n=>(i(),_(m,{key:n.id,span:6},{default:e(()=>[t(d,{shadow:"hover",class:"tpl-card"},{default:e(()=>[r("div",F,a(n.name),1),r("div",L,[t(c,{size:"small"},{default:e(()=>[o(a(n.category),1)]),_:2},1024),t(c,{size:"small",type:"info"},{default:e(()=>[o("v"+a(n.version),1)]),_:2},1024)]),r("pre",N,a(n.baselineJson||"{}"),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024),t(f),t(u,{column:2,border:""},{default:e(()=>[t(l,{label:"DSL 启用"},{default:e(()=>[o(a(s.dslPolicy.enabled?"是":"否"),1)]),_:2},1024),t(l,{label:"Schema 版本"},{default:e(()=>[o(a(s.dslPolicy.schemaVersion),1)]),_:2},1024),t(l,{label:"低代码"},{default:e(()=>[o(a(s.lowCode.enabled?"启用":"关闭"),1)]),_:2},1024),t(l,{label:"编辑器"},{default:e(()=>[o(a(s.lowCode.editor),1)]),_:2},1024),t(l,{label:"保留版本"},{default:e(()=>[o(a(s.versionPolicy.keepVersions),1)]),_:2},1024),t(l,{label:"允许回滚"},{default:e(()=>[o(a(s.versionPolicy.allowRollback?"是":"否"),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}}),Y=x(z,[["__scopeId","data-v-4faf66a8"]]);export{Y as default}; +import{aG as b,aA as _,bH as e,br as C,b7 as i,aF as t,a1 as h,aC as E,ah as g,bh as v,w,t as S,az as r,bo as a,ac as k,aE as o,H as D,C as P,F as V,g as T,aj as x}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as B}from"./ConfigPageBase-B4fOVsSK.js";/* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const F={class:"tpl-title"},L={class:"tpl-meta"},N={class:"tpl-baseline"},z=b({__name:"ScenarioTemplateView",setup(A){return(I,R)=>{const c=k,d=S,m=w,p=h,f=D,l=V,u=P;return i(),_(B,{section:"scenario",title:"业务场景模板化",description:"SPS / Pack / 环线 / 点对点;DSL/低代码扩展(ScenarioTemplateConfig)",defaults:C(T)},{default:e(({payload:s})=>[t(p,{gutter:12},{default:e(()=>[(i(!0),E(g,null,v(s.templates,n=>(i(),_(m,{key:n.id,span:6},{default:e(()=>[t(d,{shadow:"hover",class:"tpl-card"},{default:e(()=>[r("div",F,a(n.name),1),r("div",L,[t(c,{size:"small"},{default:e(()=>[o(a(n.category),1)]),_:2},1024),t(c,{size:"small",type:"info"},{default:e(()=>[o("v"+a(n.version),1)]),_:2},1024)]),r("pre",N,a(n.baselineJson||"{}"),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024),t(f),t(u,{column:2,border:""},{default:e(()=>[t(l,{label:"DSL 启用"},{default:e(()=>[o(a(s.dslPolicy.enabled?"是":"否"),1)]),_:2},1024),t(l,{label:"Schema 版本"},{default:e(()=>[o(a(s.dslPolicy.schemaVersion),1)]),_:2},1024),t(l,{label:"低代码"},{default:e(()=>[o(a(s.lowCode.enabled?"启用":"关闭"),1)]),_:2},1024),t(l,{label:"编辑器"},{default:e(()=>[o(a(s.lowCode.editor),1)]),_:2},1024),t(l,{label:"保留版本"},{default:e(()=>[o(a(s.versionPolicy.keepVersions),1)]),_:2},1024),t(l,{label:"允许回滚"},{default:e(()=>[o(a(s.versionPolicy.allowRollback?"是":"否"),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}}),Y=x(z,[["__scopeId","data-v-4faf66a8"]]);export{Y as default}; diff --git a/MiGu.Server/wwwroot/assets/ScriptPanelView-C3iy0LkM.js b/MiGu.Server/wwwroot/assets/ScriptPanelView-B2wxU0Us.js similarity index 84% rename from MiGu.Server/wwwroot/assets/ScriptPanelView-C3iy0LkM.js rename to MiGu.Server/wwwroot/assets/ScriptPanelView-B2wxU0Us.js index a094555..15d5b2d 100644 --- a/MiGu.Server/wwwroot/assets/ScriptPanelView-C3iy0LkM.js +++ b/MiGu.Server/wwwroot/assets/ScriptPanelView-B2wxU0Us.js @@ -1 +1 @@ -import{R as t}from"./ReflectionManagerPanel-Hhb-p5RK.js";import{aG as r,aC as o,aF as i,b7 as e,aj as a}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 *//* empty css */import"./reflection-BmVSriDn.js";import"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const m={class:"script-page"},p=r({__name:"ScriptPanelView",setup(s){return(c,n)=>(e(),o("div",m,[i(t,{kind:"script","kind-label":"脚本",title:"脚本管理(CarProgram 运行实例 · 与 SimpleLite 工作台「脚本」页对齐)","empty-text":"当前无 CarProgram 实例。CarProgram 是 Mission 运行时编译用户脚本后产生的对象,要创建脚本请到「任务编排」页新建 Mission。","disable-create":"","disable-delete":"","show-summary-column":"","summary-label":"车辆","show-status-column":"","status-label":"状态","show-script-actions":""})]))}}),N=a(p,[["__scopeId","data-v-40d1e5dd"]]);export{N as default}; +import{R as t}from"./ReflectionManagerPanel-CpDwI_uG.js";import{aG as r,aC as o,aF as i,b7 as e,aj as a}from"./index-CC_hCGHZ.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 *//* empty css */import"./reflection-CTDOoTn5.js";import"./useMapEditStream-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.js";const m={class:"script-page"},p=r({__name:"ScriptPanelView",setup(s){return(c,n)=>(e(),o("div",m,[i(t,{kind:"script","kind-label":"脚本",title:"脚本管理(CarProgram 运行实例 · 与 SimpleLite 工作台「脚本」页对齐)","empty-text":"当前无 CarProgram 实例。CarProgram 是 Mission 运行时编译用户脚本后产生的对象,要创建脚本请到「任务编排」页新建 Mission。","disable-create":"","disable-delete":"","show-summary-column":"","summary-label":"车辆","show-status-column":"","status-label":"状态","show-script-actions":""})]))}}),N=a(p,[["__scopeId","data-v-40d1e5dd"]]);export{N as default}; diff --git a/MiGu.Server/wwwroot/assets/ServiceStatusView-DI9Rt6GP.js b/MiGu.Server/wwwroot/assets/ServiceStatusView-BAEp7yHN.js similarity index 97% rename from MiGu.Server/wwwroot/assets/ServiceStatusView-DI9Rt6GP.js rename to MiGu.Server/wwwroot/assets/ServiceStatusView-BAEp7yHN.js index 3cc04bb..5153638 100644 --- a/MiGu.Server/wwwroot/assets/ServiceStatusView-DI9Rt6GP.js +++ b/MiGu.Server/wwwroot/assets/ServiceStatusView-BAEp7yHN.js @@ -1 +1 @@ -import{aG as w,b5 as E,b6 as k,aC as y,aF as s,bH as e,t as C,bf as V,bv as x,b7 as z,C as D,F as I,aE as a,bo as f,br as M,ac as W,az as m,r as B,aj as N}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const O={class:"status-page mg-content"},K={class:"status-actions"},R=w({__name:"ServiceStatusView",setup(T){const b=x(),_=new Date().toLocaleString("zh-CN"),i=V("00:00:00");let r;const S=Date.now();function u(){const p=Date.now()-S,t=Math.floor(p/1e3),o=String(Math.floor(t/3600)).padStart(2,"0"),l=String(Math.floor(t%3600/60)).padStart(2,"0"),d=String(t%60).padStart(2,"0");i.value=`${o}:${l}:${d}`}E(()=>{u(),r=window.setInterval(u,1e3)}),k(()=>{r&&clearInterval(r)});function v(){b.back()}return(p,t)=>{const o=W,l=I,d=D,n=B,g=C;return z(),y("div",O,[s(g,{shadow:"never",class:"status-card"},{header:e(()=>[t[1]||(t[1]=m("span",null,"SimpleLite Service Status",-1)),s(o,{type:"success",effect:"dark",style:{"margin-left":"8px"}},{default:e(()=>[...t[0]||(t[0]=[a("Web-Enabled (Mock)",-1)])]),_:1})]),default:e(()=>[s(d,{column:2,border:""},{default:e(()=>[s(l,{label:"模式"},{default:e(()=>[...t[2]||(t[2]=[a("Web-Enabled",-1)])]),_:1}),s(l,{label:"启动时间"},{default:e(()=>[a(f(M(_)),1)]),_:1}),s(l,{label:"运行时长"},{default:e(()=>[a(f(i.value),1)]),_:1}),s(l,{label:"节点角色"},{default:e(()=>[s(o,{type:"success"},{default:e(()=>[...t[3]||(t[3]=[a("Active (ROSE)",-1)])]),_:1})]),_:1}),s(l,{label:"WebAPI"},{default:e(()=>[t[5]||(t[5]=a("http://0.0.0.0:7001 ",-1)),s(o,{size:"small"},{default:e(()=>[...t[4]||(t[4]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"WebSocket"},{default:e(()=>[t[7]||(t[7]=a("ws://0.0.0.0:7002 ",-1)),s(o,{size:"small"},{default:e(()=>[...t[6]||(t[6]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"webVRender"},{default:e(()=>[t[9]||(t[9]=a("http://0.0.0.0:8223 ",-1)),s(o,{size:"small",type:"success"},{default:e(()=>[...t[8]||(t[8]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"Platform.Server"},{default:e(()=>[...t[10]||(t[10]=[a(":8080 (pid=12345)",-1)])]),_:1}),s(l,{label:"在线 Vue 客户端"},{default:e(()=>[...t[11]||(t[11]=[a("admin=3, monitor=4",-1)])]),_:1}),s(l,{label:"调度循环 / 任务"},{default:e(()=>[...t[12]||(t[12]=[a("50 Hz · 14 / 32",-1)])]),_:1})]),_:1}),m("div",K,[s(n,null,{default:e(()=>[...t[13]||(t[13]=[a("查看日志",-1)])]),_:1}),s(n,{type:"warning",plain:""},{default:e(()=>[...t[14]||(t[14]=[a("重启 Web",-1)])]),_:1}),s(n,{type:"danger",plain:""},{default:e(()=>[...t[15]||(t[15]=[a("关闭服务",-1)])]),_:1}),s(n,{onClick:v},{default:e(()=>[...t[16]||(t[16]=[a("返回",-1)])]),_:1})])]),_:1})])}}}),P=N(R,[["__scopeId","data-v-ddc086d3"]]);export{P as default}; +import{aG as w,b5 as E,b6 as k,aC as y,aF as s,bH as e,t as C,bf as V,bv as x,b7 as z,C as D,F as I,aE as a,bo as f,br as M,ac as W,az as m,r as B,aj as N}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const O={class:"status-page mg-content"},K={class:"status-actions"},R=w({__name:"ServiceStatusView",setup(T){const b=x(),_=new Date().toLocaleString("zh-CN"),i=V("00:00:00");let r;const S=Date.now();function u(){const p=Date.now()-S,t=Math.floor(p/1e3),o=String(Math.floor(t/3600)).padStart(2,"0"),l=String(Math.floor(t%3600/60)).padStart(2,"0"),d=String(t%60).padStart(2,"0");i.value=`${o}:${l}:${d}`}E(()=>{u(),r=window.setInterval(u,1e3)}),k(()=>{r&&clearInterval(r)});function v(){b.back()}return(p,t)=>{const o=W,l=I,d=D,n=B,g=C;return z(),y("div",O,[s(g,{shadow:"never",class:"status-card"},{header:e(()=>[t[1]||(t[1]=m("span",null,"SimpleLite Service Status",-1)),s(o,{type:"success",effect:"dark",style:{"margin-left":"8px"}},{default:e(()=>[...t[0]||(t[0]=[a("Web-Enabled (Mock)",-1)])]),_:1})]),default:e(()=>[s(d,{column:2,border:""},{default:e(()=>[s(l,{label:"模式"},{default:e(()=>[...t[2]||(t[2]=[a("Web-Enabled",-1)])]),_:1}),s(l,{label:"启动时间"},{default:e(()=>[a(f(M(_)),1)]),_:1}),s(l,{label:"运行时长"},{default:e(()=>[a(f(i.value),1)]),_:1}),s(l,{label:"节点角色"},{default:e(()=>[s(o,{type:"success"},{default:e(()=>[...t[3]||(t[3]=[a("Active (ROSE)",-1)])]),_:1})]),_:1}),s(l,{label:"WebAPI"},{default:e(()=>[t[5]||(t[5]=a("http://0.0.0.0:7001 ",-1)),s(o,{size:"small"},{default:e(()=>[...t[4]||(t[4]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"WebSocket"},{default:e(()=>[t[7]||(t[7]=a("ws://0.0.0.0:7002 ",-1)),s(o,{size:"small"},{default:e(()=>[...t[6]||(t[6]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"webVRender"},{default:e(()=>[t[9]||(t[9]=a("http://0.0.0.0:8223 ",-1)),s(o,{size:"small",type:"success"},{default:e(()=>[...t[8]||(t[8]=[a("OK",-1)])]),_:1})]),_:1}),s(l,{label:"Platform.Server"},{default:e(()=>[...t[10]||(t[10]=[a(":8080 (pid=12345)",-1)])]),_:1}),s(l,{label:"在线 Vue 客户端"},{default:e(()=>[...t[11]||(t[11]=[a("admin=3, monitor=4",-1)])]),_:1}),s(l,{label:"调度循环 / 任务"},{default:e(()=>[...t[12]||(t[12]=[a("50 Hz · 14 / 32",-1)])]),_:1})]),_:1}),m("div",K,[s(n,null,{default:e(()=>[...t[13]||(t[13]=[a("查看日志",-1)])]),_:1}),s(n,{type:"warning",plain:""},{default:e(()=>[...t[14]||(t[14]=[a("重启 Web",-1)])]),_:1}),s(n,{type:"danger",plain:""},{default:e(()=>[...t[15]||(t[15]=[a("关闭服务",-1)])]),_:1}),s(n,{onClick:v},{default:e(()=>[...t[16]||(t[16]=[a("返回",-1)])]),_:1})])]),_:1})])}}}),P=N(R,[["__scopeId","data-v-ddc086d3"]]);export{P as default}; diff --git a/MiGu.Server/wwwroot/assets/SystemConfigView-a-hDUlj3.js b/MiGu.Server/wwwroot/assets/SystemConfigView-DFXZ6aVu.js similarity index 95% rename from MiGu.Server/wwwroot/assets/SystemConfigView-a-hDUlj3.js rename to MiGu.Server/wwwroot/assets/SystemConfigView-DFXZ6aVu.js index 9376dc6..70201bd 100644 --- a/MiGu.Server/wwwroot/assets/SystemConfigView-a-hDUlj3.js +++ b/MiGu.Server/wwwroot/assets/SystemConfigView-DFXZ6aVu.js @@ -1,2 +1,2 @@ -import{aG as $,bw as L,bf as I,b7 as c,aC as x,az as p,aF as l,x as K,bH as t,ah as U,bh as B,aA as k,N as P,br as v,ai as G,O as N,z as R,bo as A,r as j,aE as u,b2 as W,ac as D,aB as M,av as J,aN as X,X as _,y as Y,aj as F,b5 as Z,be as q,t as Q,S as ee,H as le,a3 as te,Z as oe,a7 as ae,R as ne,h as se}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 */import{C as ie}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css */import{a as O,m as me}from"./mapEdit-Di5ggA7K.js";/* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const de={class:"theme-customizer"},re={class:"tc-title-row"},ue={class:"tc-name"},pe={class:"tc-panel"},ce={class:"tc-picker-row"},fe={class:"tc-hex"},_e={class:"tc-field-hint"},be={class:"tc-actions"},ge={class:"tc-footer"},ve=$({__name:"ThemeCustomizer",setup(H){const o=L(),V=I(o.themeId),w=["#7c3aed","#8b5cf6","#c4b5fd","#5b21b6","#4c1d95","#6366f1","#a855f7","#9333ea","#1565c0","#00796b","#b71c1c","#455a64","#e65100"],S=J(()=>o.availableThemes.some(d=>C(d.id)));function C(d){const n=o.themeOverrides[d];return!!n&&Object.keys(n).length>0}function r(d){const n=o.getMergedTheme(X(d));return{background:`linear-gradient(135deg, ${n.preview} 0%, ${n.previewAccent} 100%)`}}function a(d,n,b){b&&(o.setThemeColor(d,n,b),d===o.themeId&&_.success("已应用当前主题配色"))}function f(d){o.clearThemeOverrides(d),_.info("已恢复该主题默认配色")}function i(){o.clearAllThemeOverrides(),_.info("已恢复全部主题默认配色")}return(d,n)=>{const b=D,z=R,g=N,E=P,y=j,T=Y,h=K;return c(),x("div",de,[n[6]||(n[6]=p("p",{class:"tc-hint"}," 为各主题单独调色;修改后立即预览。当前生效主题会同步应用到全站。保存系统配置时一并写入本地。 ",-1)),l(h,{modelValue:V.value,"onUpdate:modelValue":n[0]||(n[0]=e=>V.value=e),accordion:""},{default:t(()=>[(c(!0),x(U,null,B(v(o).availableThemes,e=>(c(),k(T,{key:e.id,name:e.id},{title:t(()=>[p("div",re,[p("span",{class:"tc-swatch",style:W(r(e.id))},null,4),p("span",ue,A(e.name),1),C(e.id)?(c(),k(b,{key:0,size:"small",type:"warning",effect:"plain"},{default:t(()=>[...n[1]||(n[1]=[u("已自定义",-1)])]),_:1})):M("",!0),e.id===v(o).themeId?(c(),k(b,{key:1,size:"small",type:"success",effect:"plain"},{default:t(()=>[...n[2]||(n[2]=[u("当前",-1)])]),_:1})):M("",!0)])]),default:t(()=>[p("div",pe,[l(E,{"label-width":"100px",class:"tc-form"},{default:t(()=>[(c(!0),x(U,null,B(v(G),m=>(c(),k(g,{key:m.key,label:m.label},{default:t(()=>[p("div",ce,[l(z,{"model-value":v(o).getThemeColor(e.id,m.key),"color-format":"hex",predefine:w,"onUpdate:modelValue":s=>a(e.id,m.key,s)},null,8,["model-value","onUpdate:modelValue"]),p("span",fe,A(v(o).getThemeColor(e.id,m.key)),1),p("span",_e,A(m.hint),1)])]),_:2},1032,["label"]))),128))]),_:2},1024),p("div",be,[l(y,{size:"small",onClick:m=>v(o).setThemeId(e.id)},{default:t(()=>[...n[3]||(n[3]=[u("切换到此主题",-1)])]),_:1},8,["onClick"]),l(y,{size:"small",disabled:!C(e.id),onClick:m=>f(e.id)},{default:t(()=>[...n[4]||(n[4]=[u("恢复默认",-1)])]),_:1},8,["disabled","onClick"])])])]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),p("div",ge,[l(y,{size:"small",type:"warning",plain:"",disabled:!S.value,onClick:i},{default:t(()=>[...n[5]||(n[5]=[u(" 重置全部主题配色 ",-1)])]),_:1},8,["disabled"])])])}}}),Ve=F(ve,[["__scopeId","data-v-8a725bd2"]]),ye=$({__name:"SystemConfigView",setup(H){const o=q({endpoint:"https://api.openai.com/v1/chat/completions",apiKey:"",model:"gpt-4o-mini",systemPrompt:"你是一个 AGV 路网设计师。",temperature:.4,maxTokens:4096,timeoutSec:60,configured:!1}),V=I(!1),w=I(!1);Z(async()=>{try{const r=await O.get();Object.assign(o,r)}catch(r){_.warning(`无法读取 AI 配置:${r.message}`)}});async function S(){try{V.value=!0,await O.save({...o}),_.success("AI 配置已保存"),o.configured=!!o.apiKey}catch(r){_.error(`保存失败:${r.message}`)}finally{V.value=!1}}async function C(){try{w.value=!0;const r=await me.aiMapGenerate({prompt:'测试连通:仅返回 "ok",不要生成任何站点或路径。',mode:"sites",bounds:[0,0,0,0]});_.success(`AI 服务连通正常:返回工具调用 ${r.usedTools} 次`)}catch(r){_.error(`连通失败:${r.message}`)}finally{w.value=!1}}return(r,a)=>{const f=ee,i=N,d=le,n=oe,b=te,z=ae,g=ne,E=P,y=D,T=j,h=Q;return c(),x(U,null,[l(ie,{section:"system",title:"系统级配置",description:"运行参数、日志策略、安全策略(对齐 SystemConfig)",defaults:v(se)},{default:t(({payload:e,update:m})=>[l(E,{"label-width":"160px",model:e},{default:t(()=>[l(i,{label:"调度循环 (Hz)"},{default:t(()=>[l(f,{"model-value":e.dispatchLoopHz,min:1,max:200,"onUpdate:modelValue":s=>m({...e,dispatchLoopHz:s??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(d,{"content-position":"left"},{default:t(()=>[...a[7]||(a[7]=[u("日志策略",-1)])]),_:1}),l(i,{label:"日志级别"},{default:t(()=>[l(b,{"model-value":e.log.level,"onUpdate:modelValue":s=>m({...e,log:{...e.log,level:s}})},{default:t(()=>[(c(),x(U,null,B(["trace","debug","info","warn","error"],s=>l(n,{key:s,label:s,value:s},null,8,["label","value"])),64))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"日志保留 (天)"},{default:t(()=>[l(f,{"model-value":e.log.rollDays,min:1,max:365,"onUpdate:modelValue":s=>m({...e,log:{...e.log,rollDays:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"单文件上限 (MB)"},{default:t(()=>[l(f,{"model-value":e.log.maxSizeMB,min:1,max:4096,"onUpdate:modelValue":s=>m({...e,log:{...e.log,maxSizeMB:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(d,{"content-position":"left"},{default:t(()=>[...a[8]||(a[8]=[u("安全策略",-1)])]),_:1}),l(i,{label:"JWT 过期 (分钟)"},{default:t(()=>[l(f,{"model-value":e.security.jwtExpireMin,min:5,max:43200,"onUpdate:modelValue":s=>m({...e,security:{...e.security,jwtExpireMin:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"启用 Swagger"},{default:t(()=>[l(z,{"model-value":e.security.enableSwagger,"onUpdate:modelValue":s=>m({...e,security:{...e.security,enableSwagger:!!s}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"CORS 白名单"},{default:t(()=>[l(g,{type:"textarea",rows:3,"model-value":e.security.corsWhitelist.join(` +import{aG as $,bw as L,bf as I,b7 as c,aC as x,az as p,aF as l,x as K,bH as t,ah as U,bh as B,aA as k,N as P,br as v,ai as G,O as N,z as R,bo as A,r as j,aE as u,b2 as W,ac as D,aB as M,av as J,aN as X,X as _,y as Y,aj as F,b5 as Z,be as q,t as Q,S as ee,H as le,a3 as te,Z as oe,a7 as ae,R as ne,h as se}from"./index-CC_hCGHZ.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{C as ie}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css */import{a as O,m as me}from"./mapEdit-Z_uHqZwy.js";/* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const de={class:"theme-customizer"},re={class:"tc-title-row"},ue={class:"tc-name"},pe={class:"tc-panel"},ce={class:"tc-picker-row"},fe={class:"tc-hex"},_e={class:"tc-field-hint"},be={class:"tc-actions"},ge={class:"tc-footer"},ve=$({__name:"ThemeCustomizer",setup(H){const o=L(),V=I(o.themeId),w=["#7c3aed","#8b5cf6","#c4b5fd","#5b21b6","#4c1d95","#6366f1","#a855f7","#9333ea","#1565c0","#00796b","#b71c1c","#455a64","#e65100"],S=J(()=>o.availableThemes.some(d=>C(d.id)));function C(d){const n=o.themeOverrides[d];return!!n&&Object.keys(n).length>0}function r(d){const n=o.getMergedTheme(X(d));return{background:`linear-gradient(135deg, ${n.preview} 0%, ${n.previewAccent} 100%)`}}function a(d,n,b){b&&(o.setThemeColor(d,n,b),d===o.themeId&&_.success("已应用当前主题配色"))}function f(d){o.clearThemeOverrides(d),_.info("已恢复该主题默认配色")}function i(){o.clearAllThemeOverrides(),_.info("已恢复全部主题默认配色")}return(d,n)=>{const b=D,z=R,g=N,E=P,y=j,T=Y,h=K;return c(),x("div",de,[n[6]||(n[6]=p("p",{class:"tc-hint"}," 为各主题单独调色;修改后立即预览。当前生效主题会同步应用到全站。保存系统配置时一并写入本地。 ",-1)),l(h,{modelValue:V.value,"onUpdate:modelValue":n[0]||(n[0]=e=>V.value=e),accordion:""},{default:t(()=>[(c(!0),x(U,null,B(v(o).availableThemes,e=>(c(),k(T,{key:e.id,name:e.id},{title:t(()=>[p("div",re,[p("span",{class:"tc-swatch",style:W(r(e.id))},null,4),p("span",ue,A(e.name),1),C(e.id)?(c(),k(b,{key:0,size:"small",type:"warning",effect:"plain"},{default:t(()=>[...n[1]||(n[1]=[u("已自定义",-1)])]),_:1})):M("",!0),e.id===v(o).themeId?(c(),k(b,{key:1,size:"small",type:"success",effect:"plain"},{default:t(()=>[...n[2]||(n[2]=[u("当前",-1)])]),_:1})):M("",!0)])]),default:t(()=>[p("div",pe,[l(E,{"label-width":"100px",class:"tc-form"},{default:t(()=>[(c(!0),x(U,null,B(v(G),m=>(c(),k(g,{key:m.key,label:m.label},{default:t(()=>[p("div",ce,[l(z,{"model-value":v(o).getThemeColor(e.id,m.key),"color-format":"hex",predefine:w,"onUpdate:modelValue":s=>a(e.id,m.key,s)},null,8,["model-value","onUpdate:modelValue"]),p("span",fe,A(v(o).getThemeColor(e.id,m.key)),1),p("span",_e,A(m.hint),1)])]),_:2},1032,["label"]))),128))]),_:2},1024),p("div",be,[l(y,{size:"small",onClick:m=>v(o).setThemeId(e.id)},{default:t(()=>[...n[3]||(n[3]=[u("切换到此主题",-1)])]),_:1},8,["onClick"]),l(y,{size:"small",disabled:!C(e.id),onClick:m=>f(e.id)},{default:t(()=>[...n[4]||(n[4]=[u("恢复默认",-1)])]),_:1},8,["disabled","onClick"])])])]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),p("div",ge,[l(y,{size:"small",type:"warning",plain:"",disabled:!S.value,onClick:i},{default:t(()=>[...n[5]||(n[5]=[u(" 重置全部主题配色 ",-1)])]),_:1},8,["disabled"])])])}}}),Ve=F(ve,[["__scopeId","data-v-8a725bd2"]]),ye=$({__name:"SystemConfigView",setup(H){const o=q({endpoint:"https://api.openai.com/v1/chat/completions",apiKey:"",model:"gpt-4o-mini",systemPrompt:"你是一个 AGV 路网设计师。",temperature:.4,maxTokens:4096,timeoutSec:60,configured:!1}),V=I(!1),w=I(!1);Z(async()=>{try{const r=await O.get();Object.assign(o,r)}catch(r){_.warning(`无法读取 AI 配置:${r.message}`)}});async function S(){try{V.value=!0,await O.save({...o}),_.success("AI 配置已保存"),o.configured=!!o.apiKey}catch(r){_.error(`保存失败:${r.message}`)}finally{V.value=!1}}async function C(){try{w.value=!0;const r=await me.aiMapGenerate({prompt:'测试连通:仅返回 "ok",不要生成任何站点或路径。',mode:"sites",bounds:[0,0,0,0]});_.success(`AI 服务连通正常:返回工具调用 ${r.usedTools} 次`)}catch(r){_.error(`连通失败:${r.message}`)}finally{w.value=!1}}return(r,a)=>{const f=ee,i=N,d=le,n=oe,b=te,z=ae,g=ne,E=P,y=D,T=j,h=Q;return c(),x(U,null,[l(ie,{section:"system",title:"系统级配置",description:"运行参数、日志策略、安全策略(对齐 SystemConfig)",defaults:v(se)},{default:t(({payload:e,update:m})=>[l(E,{"label-width":"160px",model:e},{default:t(()=>[l(i,{label:"调度循环 (Hz)"},{default:t(()=>[l(f,{"model-value":e.dispatchLoopHz,min:1,max:200,"onUpdate:modelValue":s=>m({...e,dispatchLoopHz:s??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(d,{"content-position":"left"},{default:t(()=>[...a[7]||(a[7]=[u("日志策略",-1)])]),_:1}),l(i,{label:"日志级别"},{default:t(()=>[l(b,{"model-value":e.log.level,"onUpdate:modelValue":s=>m({...e,log:{...e.log,level:s}})},{default:t(()=>[(c(),x(U,null,B(["trace","debug","info","warn","error"],s=>l(n,{key:s,label:s,value:s},null,8,["label","value"])),64))]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"日志保留 (天)"},{default:t(()=>[l(f,{"model-value":e.log.rollDays,min:1,max:365,"onUpdate:modelValue":s=>m({...e,log:{...e.log,rollDays:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"单文件上限 (MB)"},{default:t(()=>[l(f,{"model-value":e.log.maxSizeMB,min:1,max:4096,"onUpdate:modelValue":s=>m({...e,log:{...e.log,maxSizeMB:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(d,{"content-position":"left"},{default:t(()=>[...a[8]||(a[8]=[u("安全策略",-1)])]),_:1}),l(i,{label:"JWT 过期 (分钟)"},{default:t(()=>[l(f,{"model-value":e.security.jwtExpireMin,min:5,max:43200,"onUpdate:modelValue":s=>m({...e,security:{...e.security,jwtExpireMin:s??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"启用 Swagger"},{default:t(()=>[l(z,{"model-value":e.security.enableSwagger,"onUpdate:modelValue":s=>m({...e,security:{...e.security,enableSwagger:!!s}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(i,{label:"CORS 白名单"},{default:t(()=>[l(g,{type:"textarea",rows:3,"model-value":e.security.corsWhitelist.join(` `),"onUpdate:modelValue":s=>m({...e,security:{...e.security,corsWhitelist:s.split(/\s+/).filter(Boolean)}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),l(d,{"content-position":"left"},{default:t(()=>[...a[9]||(a[9]=[u("界面主题配色",-1)])]),_:1}),l(i,{label:"主题取色盘"},{default:t(()=>[l(Ve)]),_:1})]),_:2},1032,["model"])]),_:1},8,["defaults"]),l(h,{class:"ai-service-card",shadow:"never"},{header:t(()=>[a[12]||(a[12]=p("span",null,"AI 服务(地图编辑器「AI 生图」依赖)",-1)),o.configured?(c(),k(y,{key:0,type:"success",size:"small",effect:"dark",class:"ml-8"},{default:t(()=>[...a[10]||(a[10]=[u("已配置",-1)])]),_:1})):(c(),k(y,{key:1,type:"warning",size:"small",effect:"dark",class:"ml-8"},{default:t(()=>[...a[11]||(a[11]=[u("未配置",-1)])]),_:1}))]),default:t(()=>[l(E,{"label-width":"140px",size:"default"},{default:t(()=>[l(i,{label:"Endpoint"},{default:t(()=>[l(g,{modelValue:o.endpoint,"onUpdate:modelValue":a[0]||(a[0]=e=>o.endpoint=e),placeholder:"https://api.openai.com/v1/chat/completions"},null,8,["modelValue"])]),_:1}),l(i,{label:"API Key"},{default:t(()=>[l(g,{modelValue:o.apiKey,"onUpdate:modelValue":a[1]||(a[1]=e=>o.apiKey=e),type:"password","show-password":"",placeholder:"sk-..."},null,8,["modelValue"])]),_:1}),l(i,{label:"模型"},{default:t(()=>[l(g,{modelValue:o.model,"onUpdate:modelValue":a[2]||(a[2]=e=>o.model=e),placeholder:"gpt-4o-mini"},null,8,["modelValue"])]),_:1}),l(i,{label:"System Prompt"},{default:t(()=>[l(g,{modelValue:o.systemPrompt,"onUpdate:modelValue":a[3]||(a[3]=e=>o.systemPrompt=e),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(i,{label:"Temperature"},{default:t(()=>[l(f,{modelValue:o.temperature,"onUpdate:modelValue":a[4]||(a[4]=e=>o.temperature=e),min:0,max:2,step:.1},null,8,["modelValue"])]),_:1}),l(i,{label:"Max Tokens"},{default:t(()=>[l(f,{modelValue:o.maxTokens,"onUpdate:modelValue":a[5]||(a[5]=e=>o.maxTokens=e),min:64,max:32e3,step:64},null,8,["modelValue"])]),_:1}),l(i,{label:"超时 (秒)"},{default:t(()=>[l(f,{modelValue:o.timeoutSec,"onUpdate:modelValue":a[6]||(a[6]=e=>o.timeoutSec=e),min:5,max:600},null,8,["modelValue"])]),_:1}),l(i,null,{default:t(()=>[l(T,{type:"primary",loading:V.value,onClick:S},{default:t(()=>[...a[13]||(a[13]=[u("保存 AI 配置",-1)])]),_:1},8,["loading"]),l(T,{loading:w.value,onClick:C},{default:t(()=>[...a[14]||(a[14]=[u("测试连通",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})],64)}}}),Le=F(ye,[["__scopeId","data-v-b66101c5"]]);export{Le as default}; diff --git a/MiGu.Server/wwwroot/assets/TaskAllocationView-xksMEs81.js b/MiGu.Server/wwwroot/assets/TaskAllocationView-B6Eq3RnB.js similarity index 77% rename from MiGu.Server/wwwroot/assets/TaskAllocationView-xksMEs81.js rename to MiGu.Server/wwwroot/assets/TaskAllocationView-B6Eq3RnB.js index 865d66a..aa24777 100644 --- a/MiGu.Server/wwwroot/assets/TaskAllocationView-xksMEs81.js +++ b/MiGu.Server/wwwroot/assets/TaskAllocationView-B6Eq3RnB.js @@ -1 +1 @@ -import{aG as p,aA as f,bH as o,br as c,b7 as b,aF as e,N as v,O as V,a0 as x,$ as E,aE as n,a7 as B,S as U,i as C}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as k}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const j=p({__name:"TaskAllocationView",setup(w){return(A,t)=>{const m=E,d=x,u=V,i=B,s=U,_=v;return b(),f(k,{section:"task",title:"任务分配机制",description:"负载均衡、就近分配、优先级调度(TaskAllocationPolicy)",defaults:c(C)},{default:o(({payload:l,update:r})=>[e(_,{"label-width":"160px",model:l},{default:o(()=>[e(u,{label:"分配模式"},{default:o(()=>[e(d,{"model-value":l.mode,"onUpdate:modelValue":a=>r({...l,mode:a})},{default:o(()=>[e(m,{value:"roundRobin"},{default:o(()=>[...t[0]||(t[0]=[n("轮询",-1)])]),_:1}),e(m,{value:"nearest"},{default:o(()=>[...t[1]||(t[1]=[n("就近",-1)])]),_:1}),e(m,{value:"leastLoad"},{default:o(()=>[...t[2]||(t[2]=[n("最少负载",-1)])]),_:1}),e(m,{value:"custom"},{default:o(()=>[...t[3]||(t[3]=[n("自定义",-1)])]),_:1})]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(u,{label:"启用负载均衡"},{default:o(()=>[e(i,{"model-value":l.loadBalance,"onUpdate:modelValue":a=>r({...l,loadBalance:!!a})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(u,{label:"单车队列上限"},{default:o(()=>[e(s,{"model-value":l.maxQueuePerCar,min:1,max:100,"onUpdate:modelValue":a=>r({...l,maxQueuePerCar:a??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{j as default}; +import{aG as p,aA as f,bH as o,br as c,b7 as b,aF as e,N as v,O as V,a0 as x,$ as E,aE as n,a7 as B,S as U,i as C}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{C as k}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const j=p({__name:"TaskAllocationView",setup(w){return(A,t)=>{const m=E,d=x,u=V,i=B,s=U,_=v;return b(),f(k,{section:"task",title:"任务分配机制",description:"负载均衡、就近分配、优先级调度(TaskAllocationPolicy)",defaults:c(C)},{default:o(({payload:l,update:r})=>[e(_,{"label-width":"160px",model:l},{default:o(()=>[e(u,{label:"分配模式"},{default:o(()=>[e(d,{"model-value":l.mode,"onUpdate:modelValue":a=>r({...l,mode:a})},{default:o(()=>[e(m,{value:"roundRobin"},{default:o(()=>[...t[0]||(t[0]=[n("轮询",-1)])]),_:1}),e(m,{value:"nearest"},{default:o(()=>[...t[1]||(t[1]=[n("就近",-1)])]),_:1}),e(m,{value:"leastLoad"},{default:o(()=>[...t[2]||(t[2]=[n("最少负载",-1)])]),_:1}),e(m,{value:"custom"},{default:o(()=>[...t[3]||(t[3]=[n("自定义",-1)])]),_:1})]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(u,{label:"启用负载均衡"},{default:o(()=>[e(i,{"model-value":l.loadBalance,"onUpdate:modelValue":a=>r({...l,loadBalance:!!a})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(u,{label:"单车队列上限"},{default:o(()=>[e(s,{"model-value":l.maxQueuePerCar,min:1,max:100,"onUpdate:modelValue":a=>r({...l,maxQueuePerCar:a??0})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{j as default}; diff --git a/MiGu.Server/wwwroot/assets/TrackTableView-v0CQ3Y9j.js b/MiGu.Server/wwwroot/assets/TrackTableView-xOZBg8GQ.js similarity index 87% rename from MiGu.Server/wwwroot/assets/TrackTableView-v0CQ3Y9j.js rename to MiGu.Server/wwwroot/assets/TrackTableView-xOZBg8GQ.js index f46a4e3..f48b828 100644 --- a/MiGu.Server/wwwroot/assets/TrackTableView-v0CQ3Y9j.js +++ b/MiGu.Server/wwwroot/assets/TrackTableView-xOZBg8GQ.js @@ -1 +1 @@ -import{aG as m,b7 as _,aC as k,aF as e,bH as a,a8 as x,ab as g,bf as l,aj as T,aA as v}from"./index-D5OuyicD.js";/* empty css *//* empty css */import{R as s}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 *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./reflection-BmVSriDn.js";import"./useMapEditStream-DunazsxD.js";import"./useProjectionStream-DvMLcpMm.js";const y={class:"scene-mgr-page"},P=m({__name:"SceneManagerView",setup(f){const r=l("site"),o=l(null),p=l(null),c=l(null);function u(t){(t==="site"?o.value:t==="track"?p.value:t==="special"?c.value:null)?.refresh?.()}return(t,n)=>{const i=x,d=g;return _(),k("div",y,[e(d,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=b=>r.value=b),type:"border-card",class:"scene-tabs admin-tabs",onTabChange:u},{default:a(()=>[e(i,{label:"站点",name:"site"},{default:a(()=>[e(s,{ref_key:"sitePanelRef",ref:o,kind:"site","kind-label":"站点",title:"站点管理(Site / UISite,含禁用/启用、必空点等动作)","empty-text":"当前没有站点;点击右上角「新建站点」按 x/y 坐标添加。"},null,512)]),_:1}),e(i,{label:"路径",name:"track"},{default:a(()=>[e(s,{ref_key:"trackPanelRef",ref:p,kind:"track","kind-label":"路径",title:"路径管理(Track / UITrack,含方向、冲突、投影、二分等动作)","empty-text":"当前没有路径;点击右上角「新建路径」选起止站点添加。"},null,512)]),_:1}),e(i,{label:"装饰物",name:"special"},{default:a(()=>[e(s,{ref_key:"specialPanelRef",ref:c,kind:"special","kind-label":"装饰物",title:"装饰物管理(UI_Image / UI_Text / UI_Model)","empty-text":"当前没有装饰物;新建图片/文本/模型可用底部按钮,或先在地图编辑里上传资产。"},null,512)]),_:1})]),_:1},8,["modelValue"])])}}}),R=T(P,[["__scopeId","data-v-ce41515a"]]),Y=m({__name:"TrackTableView",setup(f){return(r,o)=>(_(),v(R))}});export{Y as default}; +import{aG as m,b7 as _,aC as k,aF as e,bH as a,a8 as x,ab as g,bf as l,aj as T,aA as v}from"./index-CC_hCGHZ.js";/* empty css *//* empty css */import{R as s}from"./ReflectionManagerPanel-CpDwI_uG.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 */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./reflection-CTDOoTn5.js";import"./useMapEditStream-BAGhVPpt.js";import"./useProjectionStream-C_klWvmm.js";const y={class:"scene-mgr-page"},P=m({__name:"SceneManagerView",setup(f){const r=l("site"),o=l(null),p=l(null),c=l(null);function u(t){(t==="site"?o.value:t==="track"?p.value:t==="special"?c.value:null)?.refresh?.()}return(t,n)=>{const i=x,d=g;return _(),k("div",y,[e(d,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=b=>r.value=b),type:"border-card",class:"scene-tabs admin-tabs",onTabChange:u},{default:a(()=>[e(i,{label:"站点",name:"site"},{default:a(()=>[e(s,{ref_key:"sitePanelRef",ref:o,kind:"site","kind-label":"站点",title:"站点管理(Site / UISite,含禁用/启用、必空点等动作)","empty-text":"当前没有站点;点击右上角「新建站点」按 x/y 坐标添加。"},null,512)]),_:1}),e(i,{label:"路径",name:"track"},{default:a(()=>[e(s,{ref_key:"trackPanelRef",ref:p,kind:"track","kind-label":"路径",title:"路径管理(Track / UITrack,含方向、冲突、投影、二分等动作)","empty-text":"当前没有路径;点击右上角「新建路径」选起止站点添加。"},null,512)]),_:1}),e(i,{label:"装饰物",name:"special"},{default:a(()=>[e(s,{ref_key:"specialPanelRef",ref:c,kind:"special","kind-label":"装饰物",title:"装饰物管理(UI_Image / UI_Text / UI_Model)","empty-text":"当前没有装饰物;新建图片/文本/模型可用底部按钮,或先在地图编辑里上传资产。"},null,512)]),_:1})]),_:1},8,["modelValue"])])}}}),R=T(P,[["__scopeId","data-v-ce41515a"]]),Y=m({__name:"TrackTableView",setup(f){return(r,o)=>(_(),v(R))}});export{Y as default}; diff --git a/MiGu.Server/wwwroot/assets/TrafficRuleView-C8LuzSZm.js b/MiGu.Server/wwwroot/assets/TrafficRuleView-uvpgC5iS.js similarity index 80% rename from MiGu.Server/wwwroot/assets/TrafficRuleView-C8LuzSZm.js rename to MiGu.Server/wwwroot/assets/TrafficRuleView-uvpgC5iS.js index d3fb0e6..f6e453e 100644 --- a/MiGu.Server/wwwroot/assets/TrafficRuleView-C8LuzSZm.js +++ b/MiGu.Server/wwwroot/assets/TrafficRuleView-uvpgC5iS.js @@ -1 +1 @@ -import{aG as m,aA as d,bH as e,br as _,b7 as c,aF as a,ab as f,a8 as b,a9 as u,aa as w,aE as s,bo as p,j as I}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as T}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 L=m({__name:"TrafficRuleView",setup(h){return(x,D)=>{const t=w,o=u,l=b,n=f;return c(),d(T,{section:"traffic",title:"交通管制规则",description:"路口策略、区域互斥、动态让行(TrafficRule)",defaults:_(I)},{default:e(({payload:i})=>[a(n,{"model-value":"ix"},{default:e(()=>[a(l,{name:"ix",label:"路口策略"},{default:e(()=>[a(o,{data:i.intersections,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"站点 IDs",prop:"siteIds"},{default:e(r=>[s(p(r.row.siteIds.join(", ")),1)]),_:1}),a(t,{label:"模式",prop:"mode",width:"100"})]),_:1},8,["data"])]),_:2},1024),a(l,{name:"mz",label:"区域互斥"},{default:e(()=>[a(o,{data:i.mutex,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"区域 IDs",prop:"zoneIds"},{default:e(r=>[s(p(r.row.zoneIds.join(", ")),1)]),_:1})]),_:1},8,["data"])]),_:2},1024),a(l,{name:"yd",label:"动态让行"},{default:e(()=>[a(o,{data:i.yields,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"From",prop:"from",width:"140"}),a(t,{label:"To",prop:"to",width:"140"}),a(t,{label:"条件",prop:"condition"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{L as default}; +import{aG as m,aA as d,bH as e,br as _,b7 as c,aF as a,ab as f,a8 as b,a9 as u,aa as w,aE as s,bo as p,j as I}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as T}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";/* empty css */import"./reflection-CTDOoTn5.js";import"./monitorConfigCache-B5CZXjjB.js";const L=m({__name:"TrafficRuleView",setup(h){return(x,D)=>{const t=w,o=u,l=b,n=f;return c(),d(T,{section:"traffic",title:"交通管制规则",description:"路口策略、区域互斥、动态让行(TrafficRule)",defaults:_(I)},{default:e(({payload:i})=>[a(n,{"model-value":"ix"},{default:e(()=>[a(l,{name:"ix",label:"路口策略"},{default:e(()=>[a(o,{data:i.intersections,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"站点 IDs",prop:"siteIds"},{default:e(r=>[s(p(r.row.siteIds.join(", ")),1)]),_:1}),a(t,{label:"模式",prop:"mode",width:"100"})]),_:1},8,["data"])]),_:2},1024),a(l,{name:"mz",label:"区域互斥"},{default:e(()=>[a(o,{data:i.mutex,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"区域 IDs",prop:"zoneIds"},{default:e(r=>[s(p(r.row.zoneIds.join(", ")),1)]),_:1})]),_:1},8,["data"])]),_:2},1024),a(l,{name:"yd",label:"动态让行"},{default:e(()=>[a(o,{data:i.yields,size:"small"},{default:e(()=>[a(t,{label:"ID",prop:"id",width:"100"}),a(t,{label:"From",prop:"from",width:"140"}),a(t,{label:"To",prop:"to",width:"140"}),a(t,{label:"条件",prop:"condition"})]),_:1},8,["data"])]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});export{L as default}; diff --git a/MiGu.Server/wwwroot/assets/VehicleHubView-CoRmumO4.js b/MiGu.Server/wwwroot/assets/VehicleHubView-CoRmumO4.js deleted file mode 100644 index 419e7af..0000000 --- a/MiGu.Server/wwwroot/assets/VehicleHubView-CoRmumO4.js +++ /dev/null @@ -1 +0,0 @@ -import{aG as J,b7 as I,aC as B,b1 as T,az as n,aF as o,_ as oe,bo as v,bK as ie,bH as c,r as Q,br as u,a$ as re,K as X,J as Y,aE as M,I as Z,a7 as ce,bA as ue,Q as ee,ay as de,au as fe,bF as me,aw as ve,av as d,Y as F,X as G,aj as te,aS as pe,b5 as he,b6 as _e,bn as q,bf as E,bt as be,bI as we,by as ge,ah as j,bh as W,aA as K,aB as ye,R as Ce,a3 as Ie,bl as Me,Z as xe,al as Ae,bg as $e,L as ke}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 */import{r as Pe}from"./reflection-BmVSriDn.js";import{l as Ve}from"./projection-BVk2tEkj.js";import{u as Le}from"./useProjectionStream-DvMLcpMm.js";const Be={online:"OnlineCar",offline:"OfflineCar",repair:"Repair",blown:"Blown"};async function ne(l,i){const a=Be[i];if(!a)return!1;try{return await Pe.execute("car",l,a),!0}catch{return!1}}function Ee(l,i){const a=l??(i?`http://${i}:8081`:null);a&&window.open(a,"_blank","noopener,noreferrer")}const Se={class:"battery-strip"},De={class:"card-head"},He={class:"title-block"},Oe={class:"vid"},ze=["title"],Te={class:"card-body"},Ue={class:"thumb"},Fe={class:"metrics"},Re={class:"metric-row"},Ne={class:"value mono"},je={class:"metric-row"},We={class:"metric-row"},Ke={class:"metric-row"},Ge={class:"value"},qe={class:"metric-row"},Je={class:"value"},Qe={class:"icon-grid"},Xe={class:"icon-cell",title:"CPU"},Ye={class:"icon-cell",title:"内存"},Ze={class:"icon-cell",title:"报警"},et={class:"icon-cell",title:"连接"},tt={class:"card-foot"},nt=J({__name:"VehicleHealthCard",props:{vehicle:{},selected:{type:Boolean},canWrite:{type:Boolean}},emits:["select","maintenanceChanged"],setup(l,{emit:i}){const a=l,w=i,x={idle:"空闲",running:"运行",charging:"充电",paused:"暂停",fault:"故障",offline:"离线"},A=d(()=>x[a.vehicle.state]??a.vehicle.state),p=d(()=>{const t=a.vehicle.batterySoc??0,e=t>1?t:t*100;return Math.max(0,Math.min(100,Math.round(e)))}),S=d(()=>{const t=p.value;return t<20?"#f56c6c":t<50?"#e6a23c":"#67c23a"}),g=d(()=>a.vehicle.maintenanceMode==="online"),D=d(()=>({"is-selected":a.selected,"is-alarm":a.vehicle.isAlarmActive,"is-offline":a.vehicle.maintenanceMode==="offline"||a.vehicle.state==="offline","is-maintenance":a.vehicle.maintenanceMode==="repair"||a.vehicle.maintenanceMode==="blown","is-unreachable":a.vehicle.reachable===!1})),H=d(()=>{const t=a.vehicle.latencyMs;return t==null?"—":a.vehicle.reachable===!1?"超时":`${t} ms`}),O=d(()=>{const t=a.vehicle.latencyMs;return a.vehicle.reachable===!1?"danger":t!=null&&t>80?"warn":""}),$=d(()=>{const t=a.vehicle.faultRatePercent;return t==null?"—":`${t.toFixed(2)}%`}),k=d(()=>{const t=a.vehicle.faultRatePercent??0;return t>=5?"danger":t>=1?"warn":""}),y=d(()=>{const t=a.vehicle.cpuPercent;return t!=null?`${Math.round(t)}%`:"—"}),C=d(()=>{const t=a.vehicle.memPercent;return t!=null?`${Math.round(t)}%`:"—"});function V(){w("select",a.vehicle.id)}function L(t){t.target.closest(".head-actions")||Ee(a.vehicle.onboardUrl,a.vehicle.ip)}async function _(t){const e=a.vehicle.rawId??parseInt(a.vehicle.id.replace(/\D/g,""),10);if(!Number.isFinite(e))return;await ne(e,t)?(G.success("维护状态已更新"),w("maintenanceChanged")):G.error("维护操作失败")}async function s(t){if(!a.canWrite)return;const e=t?"online":"offline";try{await F.confirm(t?"确认将车辆上线?":"确认将车辆下线维护?","维护确认",{type:"warning",confirmButtonText:"确定",cancelButtonText:"取消"}),await _(e)}catch{}}async function f(t){if(!a.canWrite)return;const e=t;if(e==="blown"){try{await F.confirm("返厂检修将停止调度并清空站点,确认?","危险操作",{type:"error",confirmButtonText:"确定",cancelButtonText:"取消"}),await _(e)}catch{}return}if(e==="repair"){try{await F.confirm("现场检修:不调度但仍刷新状态,确认?","维护确认",{type:"warning"}),await _(e)}catch{}return}await _(e)}return(t,e)=>{const r=oe,b=Q,h=Y,R=X,U=Z,z=ce,P=ee;return I(),B("div",{class:T(["vehicle-health-card",D.value]),onClick:V,onDblclick:L},[n("div",Se,[o(r,{percentage:p.value,"stroke-width":4,"show-text":!1,color:S.value},null,8,["percentage","color"])]),n("div",De,[n("div",He,[n("span",Oe,v(l.vehicle.id),1),n("span",{class:"vname",title:l.vehicle.name},v(l.vehicle.name),9,ze)]),n("div",{class:"head-actions",onClick:e[1]||(e[1]=ie(()=>{},["stop"]))},[o(U,{trigger:"click",onCommand:f},{dropdown:c(()=>[o(R,null,{default:c(()=>[o(h,{command:"online"},{default:c(()=>[...e[2]||(e[2]=[M("上线",-1)])]),_:1}),o(h,{command:"offline"},{default:c(()=>[...e[3]||(e[3]=[M("下线维护",-1)])]),_:1}),o(h,{command:"repair"},{default:c(()=>[...e[4]||(e[4]=[M("现场检修",-1)])]),_:1}),o(h,{command:"blown",divided:""},{default:c(()=>[...e[5]||(e[5]=[M("返厂检修",-1)])]),_:1})]),_:1})]),default:c(()=>[o(b,{size:"small",text:"",icon:u(re)},null,8,["icon"])]),_:1}),o(z,{"model-value":g.value,size:"small",disabled:!l.canWrite,"inline-prompt":"","active-text":"开","inactive-text":"关",onChange:e[0]||(e[0]=N=>s(!!N))},null,8,["model-value","disabled"])])]),n("div",Te,[n("div",Ue,[o(P,{size:36},{default:c(()=>[o(u(ue))]),_:1})]),n("div",Fe,[n("div",Re,[e[6]||(e[6]=n("span",{class:"label"},"IP",-1)),n("span",Ne,v(l.vehicle.ip??"—"),1)]),n("div",je,[e[7]||(e[7]=n("span",{class:"label"},"延迟",-1)),n("span",{class:T(["value",O.value])},v(H.value),3)]),n("div",We,[e[8]||(e[8]=n("span",{class:"label"},"故障率",-1)),n("span",{class:T(["value",k.value])},v($.value),3)]),n("div",Ke,[e[9]||(e[9]=n("span",{class:"label"},"群组",-1)),n("span",Ge,v(l.vehicle.group??"—"),1)]),n("div",qe,[e[10]||(e[10]=n("span",{class:"label"},"状态",-1)),n("span",Je,v(l.vehicle.lstatus??A.value),1)])])]),n("div",Qe,[n("div",Xe,[o(P,null,{default:c(()=>[o(u(de))]),_:1}),n("span",null,v(y.value),1)]),n("div",Ye,[o(P,null,{default:c(()=>[o(u(fe))]),_:1}),n("span",null,v(C.value),1)]),n("div",Ze,[o(P,{class:T({"is-alarm":l.vehicle.isAlarmActive})},{default:c(()=>[o(u(me))]),_:1},8,["class"]),n("span",null,v(l.vehicle.isAlarmActive?"报警":"正常"),1)]),n("div",et,[o(P,{class:T({"is-down":l.vehicle.reachable===!1})},{default:c(()=>[o(u(ve))]),_:1},8,["class"]),n("span",null,v(l.vehicle.reachable===!1?"不可达":"可达"),1)])]),n("div",tt,[n("span",null,"电量 "+v(p.value)+"%",1),e[11]||(e[11]=n("span",{class:"hint"},"双击打开车载界面",-1))])],34)}}}),at=te(nt,[["__scopeId","data-v-30c5a691"]]);async function lt(){const{data:l}=await pe.get("/sl/projection/fleet/health");return Array.isArray(l)?l:[]}const st=5e3,ot=2e4;function it(l){const i=(l.lstatus??"").toLowerCase();return/返厂|blown/.test(i)?"blown":/现场检修|repair/.test(i)?"repair":/下线|offline/.test(i)||l.state==="offline"?"offline":"online"}function rt(l,i){return{...l,ip:i?.ip??l.ip,onboardUrl:i?.onboardUrl??l.onboardUrl??(l.ip?`http://${l.ip}:8081`:void 0),latencyMs:i?.latencyMs,reachable:i?.reachable,faultRatePercent:i?.faultRatePercent,isAlarmActive:i?.isAlarmActive??l.state==="fault",cpuPercent:i?.cpuPercent,memPercent:i?.memPercent,maintenanceMode:it(l)}}function ct(){const l=q([]),i=q([]),a=E(!1),w=E(!1),x=E(null);let A=null,p=null;const S=d(()=>{const s=new Map;for(const f of i.value)s.set(f.carId,f);return s}),g=d(()=>l.value.map(s=>{const f=s.rawId??parseInt(s.id.replace(/\D/g,""),10),t=Number.isFinite(f)?S.value.get(f):void 0;return rt(s,t)})),D=d(()=>g.value.length),H=d(()=>g.value.filter(s=>s.state!=="offline"&&s.maintenanceMode==="online").length),O=d(()=>g.value.filter(s=>s.maintenanceMode==="offline"||s.maintenanceMode==="repair"||s.maintenanceMode==="blown").length),$=d(()=>g.value.filter(s=>s.isAlarmActive).length),k=d(()=>g.value.filter(s=>s.reachable===!1).length);async function y(){a.value=!0;try{l.value=await Ve()}finally{a.value=!1}}async function C(){w.value=!0;try{i.value=await lt()}finally{w.value=!1}}async function V(){await Promise.all([y(),C()])}function L(s,f){const t=l.value.findIndex(r=>(r.rawId??parseInt(r.id.replace(/\D/g,""),10))===s);if(t<0)return;const e=[...l.value];e[t]={...e[t],...f,lastUpdate:new Date().toISOString()},l.value=e}const _=Le({extraEventKinds:["alarm","car-state"],autoConnect:!0});return _.on(s=>{if(s.kind==="car-state"&&s.payload&&typeof s.payload=="object"){const f=s.payload,t=f.rawId;t!=null&&L(t,{state:f.state,lstatus:f.lstatus})}if(s.kind==="alarm"&&s.payload&&typeof s.payload=="object"){const f=s.payload;if(f.carId!=null){const t=f.action==="raise"||f.action==="update",e=i.value.findIndex(r=>r.carId===f.carId);if(e>=0){const r=[...i.value];r[e]={...r[e],isAlarmActive:t},i.value=r}L(f.carId,{state:t?"fault":void 0})}}}),he(()=>{V(),A=setInterval(()=>void y(),st),p=setInterval(()=>void C(),ot)}),_e(()=>{A&&clearInterval(A),p&&clearInterval(p),_.disconnect()}),{cardModels:g,loading:a,healthLoading:w,selectedId:x,totalCount:D,onlineCount:H,maintenanceCount:O,alarmCount:$,unreachableCount:k,refreshAll:V,loadCars:y,loadHealth:C}}const ut={class:"vehicle-hub-page"},dt={class:"hub-toolbar"},ft={class:"stats-row"},mt={class:"stat"},vt={class:"num"},pt={class:"stat online"},ht={class:"num"},_t={class:"stat warn"},bt={class:"num"},wt={class:"stat danger"},gt={class:"num"},yt={class:"stat muted"},Ct={class:"num"},It={class:"filters-row"},Mt={class:"card-grid"},xt=J({__name:"VehicleHubView",setup(l){const i=be(),a=d(()=>i.scope==="Platform"||(i.effectivePermissions?.allowedOps??[]).includes("*")),{cardModels:w,loading:x,healthLoading:A,selectedId:p,totalCount:S,onlineCount:g,maintenanceCount:D,alarmCount:H,unreachableCount:O,refreshAll:$}=ct(),k=E(""),y=E(""),C=E(""),V=[{value:"idle",label:"空闲"},{value:"running",label:"运行"},{value:"charging",label:"充电"},{value:"paused",label:"暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],L=d(()=>{const t=new Set;for(const e of w.value)e.group&&t.add(e.group);return[...t]}),_=d(()=>{const t=k.value.trim().toLowerCase(),e=t?t.split(/\s+/).filter(Boolean):[];return w.value.filter(r=>{if(y.value&&r.state!==y.value||C.value&&r.group!==C.value)return!1;if(!e.length)return!0;const b=[r.id,r.name,r.ip,r.group,r.lstatus].filter(Boolean).join(" ").toLowerCase();return e.every(h=>b.includes(h))})}),s=d(()=>p.value?[p.value]:[]);async function f(t){const e=t,r=_.value.filter(b=>p.value?b.id===p.value:!0);if(r.length)try{await F.confirm(`对 ${r.length} 辆车执行「${t}」?`,"批量维护",{type:"warning"});for(const b of r){const h=b.rawId??parseInt(b.id.replace(/\D/g,""),10);Number.isFinite(h)&&await ne(h,e)}G.success("批量操作已提交"),await $()}catch{}}return(t,e)=>{const r=Ce,b=xe,h=Ie,R=ee,U=Q,z=Y,P=X,N=Z,ae=ke,le=ge;return I(),B("div",ut,[n("div",dt,[n("div",ft,[n("div",mt,[n("span",vt,v(u(S)),1),e[4]||(e[4]=n("span",{class:"label"},"总数",-1))]),n("div",pt,[n("span",ht,v(u(g)),1),e[5]||(e[5]=n("span",{class:"label"},"在线",-1))]),n("div",_t,[n("span",bt,v(u(D)),1),e[6]||(e[6]=n("span",{class:"label"},"维护中",-1))]),n("div",wt,[n("span",gt,v(u(H)),1),e[7]||(e[7]=n("span",{class:"label"},"报警",-1))]),n("div",yt,[n("span",Ct,v(u(O)),1),e[8]||(e[8]=n("span",{class:"label"},"不可达",-1))])]),n("div",It,[o(r,{modelValue:k.value,"onUpdate:modelValue":e[0]||(e[0]=m=>k.value=m),size:"small",clearable:"",placeholder:"搜索 ID / 名称 / IP",class:"search-input","prefix-icon":u(Me)},null,8,["modelValue","prefix-icon"]),o(h,{modelValue:y.value,"onUpdate:modelValue":e[1]||(e[1]=m=>y.value=m),size:"small",clearable:"",placeholder:"状态",class:"filter-select"},{default:c(()=>[(I(),B(j,null,W(V,m=>o(b,{key:m.value,label:m.label,value:m.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),o(h,{modelValue:C.value,"onUpdate:modelValue":e[2]||(e[2]=m=>C.value=m),size:"small",clearable:"",placeholder:"群组",class:"filter-select"},{default:c(()=>[(I(!0),B(j,null,W(L.value,m=>(I(),K(b,{key:m,label:m,value:m},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o(N,{disabled:!a.value||!s.value.length,onCommand:f},{dropdown:c(()=>[o(P,null,{default:c(()=>[o(z,{command:"online"},{default:c(()=>[...e[10]||(e[10]=[M("批量上线",-1)])]),_:1}),o(z,{command:"offline"},{default:c(()=>[...e[11]||(e[11]=[M("批量下线",-1)])]),_:1}),o(z,{command:"repair"},{default:c(()=>[...e[12]||(e[12]=[M("批量现场检修",-1)])]),_:1})]),_:1})]),default:c(()=>[o(U,{size:"small",disabled:!a.value||!s.value.length},{default:c(()=>[e[9]||(e[9]=M(" 批量维护 ",-1)),o(R,{class:"el-icon--right"},{default:c(()=>[o(u(Ae))]),_:1})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),o(U,{size:"small",icon:u($e),loading:u(x)||u(A),onClick:u($)},{default:c(()=>[...e[13]||(e[13]=[M(" 刷新 ",-1)])]),_:1},8,["icon","loading","onClick"])])]),we((I(),B("div",Mt,[(I(!0),B(j,null,W(_.value,m=>(I(),K(at,{key:m.id,vehicle:m,selected:u(p)===m.id,"can-write":a.value,onSelect:e[3]||(e[3]=se=>p.value=se),onMaintenanceChanged:u($)},null,8,["vehicle","selected","can-write","onMaintenanceChanged"]))),128)),!_.value.length&&!u(x)?(I(),K(ae,{key:0,description:"无匹配车辆"})):ye("",!0)])),[[le,u(x)&&!u(w).length]]),e[14]||(e[14]=n("p",{class:"footnote"},"故障率 = 报警占用时长 ÷ 自上线以来运行时长(SimpleLite 进程内累计)",-1))])}}}),Nt=te(xt,[["__scopeId","data-v-16eb28f6"]]);export{Nt as default}; diff --git a/MiGu.Server/wwwroot/assets/VehicleHubView-CxAaADt4.css b/MiGu.Server/wwwroot/assets/VehicleHubView-CxAaADt4.css deleted file mode 100644 index 1cda807..0000000 --- a/MiGu.Server/wwwroot/assets/VehicleHubView-CxAaADt4.css +++ /dev/null @@ -1 +0,0 @@ -.vehicle-health-card[data-v-30c5a691]{border:1px solid var(--el-border-color-light);border-radius:8px;background:var(--el-bg-color);overflow:hidden;cursor:pointer;transition:box-shadow .15s ease,border-color .15s ease}.vehicle-health-card[data-v-30c5a691]:hover{box-shadow:0 2px 12px #00000014}.vehicle-health-card.is-selected[data-v-30c5a691]{border-color:var(--el-color-primary);box-shadow:0 0 0 1px var(--el-color-primary-light-7)}.vehicle-health-card.is-alarm[data-v-30c5a691]{border-color:var(--el-color-danger-light-5)}.vehicle-health-card.is-offline[data-v-30c5a691],.vehicle-health-card.is-maintenance[data-v-30c5a691]{border-color:var(--el-color-warning-light-5)}.vehicle-health-card.is-unreachable[data-v-30c5a691]{opacity:.85}.battery-strip[data-v-30c5a691]{height:4px}.card-head[data-v-30c5a691]{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 4px;gap:8px}.title-block[data-v-30c5a691]{min-width:0;display:flex;flex-direction:column;gap:2px}.vid[data-v-30c5a691]{font-size:12px;color:var(--el-text-color-secondary);font-family:ui-monospace,monospace}.vname[data-v-30c5a691]{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.head-actions[data-v-30c5a691]{display:flex;align-items:center;gap:4px;flex-shrink:0}.card-body[data-v-30c5a691]{display:flex;gap:10px;padding:4px 10px 8px}.thumb[data-v-30c5a691]{width:56px;height:56px;border-radius:6px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;color:var(--el-text-color-secondary);flex-shrink:0}.metrics[data-v-30c5a691]{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;font-size:12px}.metric-row[data-v-30c5a691]{display:flex;justify-content:space-between;gap:8px}.metric-row .label[data-v-30c5a691]{color:var(--el-text-color-secondary)}.metric-row .value[data-v-30c5a691]{font-weight:500}.metric-row .value.mono[data-v-30c5a691]{font-family:ui-monospace,monospace}.metric-row .value.danger[data-v-30c5a691]{color:var(--el-color-danger)}.metric-row .value.warn[data-v-30c5a691]{color:var(--el-color-warning)}.icon-grid[data-v-30c5a691]{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:0 10px 8px}.icon-cell[data-v-30c5a691]{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;color:var(--el-text-color-secondary)}.icon-cell .is-alarm[data-v-30c5a691]{color:var(--el-color-danger)}.icon-cell .is-down[data-v-30c5a691]{color:var(--el-color-info)}.card-foot[data-v-30c5a691]{display:flex;justify-content:space-between;padding:6px 10px;font-size:11px;color:var(--el-text-color-secondary);background:var(--el-fill-color-lighter);border-top:1px solid var(--el-border-color-lighter)}.card-foot .hint[data-v-30c5a691]{opacity:.7}.vehicle-hub-page[data-v-16eb28f6]{padding:16px;height:100%;display:flex;flex-direction:column;gap:12px;overflow:hidden}.hub-toolbar[data-v-16eb28f6]{display:flex;flex-direction:column;gap:12px;flex-shrink:0}.stats-row[data-v-16eb28f6]{display:flex;flex-wrap:wrap;gap:16px}.stat[data-v-16eb28f6]{display:flex;flex-direction:column;align-items:center;min-width:64px}.stat .num[data-v-16eb28f6]{font-size:22px;font-weight:700;line-height:1.2}.stat .label[data-v-16eb28f6]{font-size:12px;color:var(--el-text-color-secondary)}.stat.online .num[data-v-16eb28f6]{color:var(--el-color-success)}.stat.warn .num[data-v-16eb28f6]{color:var(--el-color-warning)}.stat.danger .num[data-v-16eb28f6]{color:var(--el-color-danger)}.stat.muted .num[data-v-16eb28f6]{color:var(--el-text-color-secondary)}.filters-row[data-v-16eb28f6]{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.search-input[data-v-16eb28f6]{width:220px}.filter-select[data-v-16eb28f6]{width:120px}.card-grid[data-v-16eb28f6]{flex:1;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;align-content:start;padding-bottom:8px}.footnote[data-v-16eb28f6]{flex-shrink:0;margin:0;font-size:11px;color:var(--el-text-color-placeholder)} diff --git a/MiGu.Server/wwwroot/assets/VehicleHubView-D_m8HS87.css b/MiGu.Server/wwwroot/assets/VehicleHubView-D_m8HS87.css new file mode 100644 index 0000000..67b1835 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/VehicleHubView-D_m8HS87.css @@ -0,0 +1 @@ +.vehicle-health-card[data-v-30c5a691]{border:1px solid var(--el-border-color-light);border-radius:8px;background:var(--el-bg-color);overflow:hidden;cursor:pointer;transition:box-shadow .15s ease,border-color .15s ease}.vehicle-health-card[data-v-30c5a691]:hover{box-shadow:0 2px 12px #00000014}.vehicle-health-card.is-selected[data-v-30c5a691]{border-color:var(--el-color-primary);box-shadow:0 0 0 1px var(--el-color-primary-light-7)}.vehicle-health-card.is-alarm[data-v-30c5a691]{border-color:var(--el-color-danger-light-5)}.vehicle-health-card.is-offline[data-v-30c5a691],.vehicle-health-card.is-maintenance[data-v-30c5a691]{border-color:var(--el-color-warning-light-5)}.vehicle-health-card.is-unreachable[data-v-30c5a691]{opacity:.85}.battery-strip[data-v-30c5a691]{height:4px}.card-head[data-v-30c5a691]{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 4px;gap:8px}.title-block[data-v-30c5a691]{min-width:0;display:flex;flex-direction:column;gap:2px}.vid[data-v-30c5a691]{font-size:12px;color:var(--el-text-color-secondary);font-family:ui-monospace,monospace}.vname[data-v-30c5a691]{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.head-actions[data-v-30c5a691]{display:flex;align-items:center;gap:4px;flex-shrink:0}.card-body[data-v-30c5a691]{display:flex;gap:10px;padding:4px 10px 8px}.thumb[data-v-30c5a691]{width:56px;height:56px;border-radius:6px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;color:var(--el-text-color-secondary);flex-shrink:0}.metrics[data-v-30c5a691]{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;font-size:12px}.metric-row[data-v-30c5a691]{display:flex;justify-content:space-between;gap:8px}.metric-row .label[data-v-30c5a691]{color:var(--el-text-color-secondary)}.metric-row .value[data-v-30c5a691]{font-weight:500}.metric-row .value.mono[data-v-30c5a691]{font-family:ui-monospace,monospace}.metric-row .value.danger[data-v-30c5a691]{color:var(--el-color-danger)}.metric-row .value.warn[data-v-30c5a691]{color:var(--el-color-warning)}.icon-grid[data-v-30c5a691]{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:0 10px 8px}.icon-cell[data-v-30c5a691]{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;color:var(--el-text-color-secondary)}.icon-cell .is-alarm[data-v-30c5a691]{color:var(--el-color-danger)}.icon-cell .is-down[data-v-30c5a691]{color:var(--el-color-info)}.card-foot[data-v-30c5a691]{display:flex;justify-content:space-between;padding:6px 10px;font-size:11px;color:var(--el-text-color-secondary);background:var(--el-fill-color-lighter);border-top:1px solid var(--el-border-color-lighter)}.card-foot .hint[data-v-30c5a691]{opacity:.7}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;width:100%;height:32px;display:flex}.el-slider__runway{height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;position:relative}.el-slider__runway.show-input{width:auto;margin-right:30px}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed;transform:scale(1)}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);z-index:1;top:var(--el-slider-button-wrapper-offset);text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;outline:none;line-height:normal;position:absolute;transform:translate(-50%)}.el-slider__button-wrapper:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{transform:scale(1.2)}.el-slider__button:hover,.el-slider__button.hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);position:absolute;transform:translate(-50%)}.el-slider__marks{width:18px;height:100%;top:0;left:12px}.el-slider__marks-text{color:var(--el-color-info);white-space:pre;margin-top:15px;font-size:14px;position:absolute;transform:translate(-50%)}.el-slider.is-vertical{flex:0;width:auto;height:100%;display:inline-flex;position:relative}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);border-radius:0 0 3px 3px;height:auto}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.vehicle-hub-page[data-v-e13531ad]{padding:16px;height:100%;display:flex;flex-direction:column;overflow:hidden}.hub-tabs[data-v-e13531ad]{flex:1;min-height:0;display:flex;flex-direction:column}[data-v-e13531ad] .el-tabs__content{flex:1;min-height:0}[data-v-e13531ad] .el-tab-pane{height:100%}[data-v-e13531ad] .el-tabs__item{color:var(--mg-text-muted, rgba(255, 255, 255, .65))}[data-v-e13531ad] .el-tabs__item.is-active{color:var(--mg-text-light, #fff)}[data-v-e13531ad] .el-tabs__active-bar{background-color:var(--mg-accent, var(--el-color-primary))}[data-v-e13531ad] .el-tabs__nav-wrap:after{background-color:#ffffff14}.overview-pane[data-v-e13531ad]{height:100%;display:flex;flex-direction:column;gap:12px;overflow:hidden}.config-pane[data-v-e13531ad]{height:100%;overflow:auto}.hub-toolbar[data-v-e13531ad]{display:flex;flex-direction:column;gap:12px;flex-shrink:0}.stats-row[data-v-e13531ad]{display:flex;flex-wrap:wrap;gap:16px}.stat[data-v-e13531ad]{display:flex;flex-direction:column;align-items:center;min-width:64px}.stat .num[data-v-e13531ad]{font-size:22px;font-weight:700;line-height:1.2}.stat .label[data-v-e13531ad]{font-size:12px;color:var(--el-text-color-secondary)}.stat.online .num[data-v-e13531ad]{color:var(--el-color-success)}.stat.warn .num[data-v-e13531ad]{color:var(--el-color-warning)}.stat.danger .num[data-v-e13531ad]{color:var(--el-color-danger)}.stat.muted .num[data-v-e13531ad]{color:var(--el-text-color-secondary)}.filters-row[data-v-e13531ad]{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.search-input[data-v-e13531ad]{width:220px}.filter-select[data-v-e13531ad]{width:120px}.card-grid[data-v-e13531ad]{flex:1;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;align-content:start;padding-bottom:8px}.footnote[data-v-e13531ad]{flex-shrink:0;margin:0;font-size:11px;color:var(--el-text-color-placeholder)} diff --git a/MiGu.Server/wwwroot/assets/VehicleHubView-cMWfwwrB.js b/MiGu.Server/wwwroot/assets/VehicleHubView-cMWfwwrB.js new file mode 100644 index 0000000..7ba6288 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/VehicleHubView-cMWfwwrB.js @@ -0,0 +1 @@ +import{aG as G,b7 as T,aC as U,b1 as H,az as t,aF as e,_ as we,bo as d,bK as ge,I as ee,bH as l,r as te,br as p,a$ as Ce,K as le,J as ae,aE as C,a7 as ne,Q as oe,bA as ye,ay as Ie,au as Me,bF as Ve,aw as Ee,av as _,Y as q,X as Q,aj as se,aA as O,N as xe,O as Te,a4 as Ae,H as $e,R as ie,S as ke,k as Be,ab as re,a8 as ce,a9 as Le,aa as Pe,ah as j,bh as W,ac as Re,C as Ue,F as De,b as Se,aS as Fe,b5 as Oe,b6 as ze,bn as Y,bf as D,bt as He,bG as Z,bu as Ne,bv as qe,bl as je,a3 as We,Z as Ge,al as Ke,bg as Je,bI as Qe,L as Xe,aB as Ye,by as Ze}from"./index-CC_hCGHZ.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 */import{r as et}from"./reflection-CTDOoTn5.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";import{C as ue}from"./ConfigPageBase-B4fOVsSK.js";/* empty css *//* empty css *//* empty css */import{l as tt}from"./projection-D6ulMg5U.js";import{u as lt}from"./useProjectionStream-C_klWvmm.js";/* empty css *//* empty css */import"./PermissionGuard-DxbOGfWF.js";import"./monitorConfigCache-B5CZXjjB.js";const at={online:"OnlineCar",offline:"OfflineCar",repair:"Repair",blown:"Blown"};async function de(i,u){const o=at[u];if(!o)return!1;try{return await et.execute("car",i,o),!0}catch{return!1}}function nt(i,u){const o=i??(u?`http://${u}:8081`:null);o&&window.open(o,"_blank","noopener,noreferrer")}const ot={class:"battery-strip"},st={class:"card-head"},it={class:"title-block"},rt={class:"vid"},ct=["title"],ut={class:"card-body"},dt={class:"thumb"},mt={class:"metrics"},ft={class:"metric-row"},pt={class:"value mono"},_t={class:"metric-row"},vt={class:"metric-row"},bt={class:"metric-row"},ht={class:"value"},wt={class:"metric-row"},gt={class:"value"},Ct={class:"icon-grid"},yt={class:"icon-cell",title:"CPU"},It={class:"icon-cell",title:"内存"},Mt={class:"icon-cell",title:"报警"},Vt={class:"icon-cell",title:"连接"},Et={class:"card-foot"},xt=G({__name:"VehicleHealthCard",props:{vehicle:{},selected:{type:Boolean},canWrite:{type:Boolean}},emits:["select","maintenanceChanged"],setup(i,{emit:u}){const o=i,b=u,x={idle:"空闲",running:"运行",charging:"充电",paused:"暂停",fault:"故障",offline:"离线"},A=_(()=>x[o.vehicle.state]??o.vehicle.state),y=_(()=>{const a=o.vehicle.batterySoc??0,n=a>1?a:a*100;return Math.max(0,Math.min(100,Math.round(n)))}),h=_(()=>{const a=y.value;return a<20?"#f56c6c":a<50?"#e6a23c":"#67c23a"}),I=_(()=>o.vehicle.maintenanceMode==="online"),$=_(()=>({"is-selected":o.selected,"is-alarm":o.vehicle.isAlarmActive,"is-offline":o.vehicle.maintenanceMode==="offline"||o.vehicle.state==="offline","is-maintenance":o.vehicle.maintenanceMode==="repair"||o.vehicle.maintenanceMode==="blown","is-unreachable":o.vehicle.reachable===!1})),c=_(()=>{const a=o.vehicle.latencyMs;return a==null?"—":o.vehicle.reachable===!1?"超时":`${a} ms`}),w=_(()=>{const a=o.vehicle.latencyMs;return o.vehicle.reachable===!1?"danger":a!=null&&a>80?"warn":""}),m=_(()=>{const a=o.vehicle.faultRatePercent;return a==null?"—":`${a.toFixed(2)}%`}),z=_(()=>{const a=o.vehicle.faultRatePercent??0;return a>=5?"danger":a>=1?"warn":""}),P=_(()=>{const a=o.vehicle.cpuPercent;return a!=null?`${Math.round(a)}%`:"—"}),R=_(()=>{const a=o.vehicle.memPercent;return a!=null?`${Math.round(a)}%`:"—"});function S(){b("select",o.vehicle.id)}function L(a){a.target.closest(".head-actions")||nt(o.vehicle.onboardUrl,o.vehicle.ip)}async function k(a){const n=o.vehicle.rawId??parseInt(o.vehicle.id.replace(/\D/g,""),10);if(!Number.isFinite(n))return;await de(n,a)?(Q.success("维护状态已更新"),b("maintenanceChanged")):Q.error("维护操作失败")}async function r(a){if(!o.canWrite)return;const n=a?"online":"offline";try{await q.confirm(a?"确认将车辆上线?":"确认将车辆下线维护?","维护确认",{type:"warning",confirmButtonText:"确定",cancelButtonText:"取消"}),await k(n)}catch{}}async function f(a){if(!o.canWrite)return;const n=a;if(n==="blown"){try{await q.confirm("返厂检修将停止调度并清空站点,确认?","危险操作",{type:"error",confirmButtonText:"确定",cancelButtonText:"取消"}),await k(n)}catch{}return}if(n==="repair"){try{await q.confirm("现场检修:不调度但仍刷新状态,确认?","维护确认",{type:"warning"}),await k(n)}catch{}return}await k(n)}return(a,n)=>{const M=we,N=te,F=ae,v=le,s=ee,V=ne,E=oe;return T(),U("div",{class:H(["vehicle-health-card",$.value]),onClick:S,onDblclick:L},[t("div",ot,[e(M,{percentage:y.value,"stroke-width":4,"show-text":!1,color:h.value},null,8,["percentage","color"])]),t("div",st,[t("div",it,[t("span",rt,d(i.vehicle.id),1),t("span",{class:"vname",title:i.vehicle.name},d(i.vehicle.name),9,ct)]),t("div",{class:"head-actions",onClick:n[1]||(n[1]=ge(()=>{},["stop"]))},[e(s,{trigger:"click",onCommand:f},{dropdown:l(()=>[e(v,null,{default:l(()=>[e(F,{command:"online"},{default:l(()=>[...n[2]||(n[2]=[C("上线",-1)])]),_:1}),e(F,{command:"offline"},{default:l(()=>[...n[3]||(n[3]=[C("下线维护",-1)])]),_:1}),e(F,{command:"repair"},{default:l(()=>[...n[4]||(n[4]=[C("现场检修",-1)])]),_:1}),e(F,{command:"blown",divided:""},{default:l(()=>[...n[5]||(n[5]=[C("返厂检修",-1)])]),_:1})]),_:1})]),default:l(()=>[e(N,{size:"small",text:"",icon:p(Ce)},null,8,["icon"])]),_:1}),e(V,{"model-value":I.value,size:"small",disabled:!i.canWrite,"inline-prompt":"","active-text":"开","inactive-text":"关",onChange:n[0]||(n[0]=B=>r(!!B))},null,8,["model-value","disabled"])])]),t("div",ut,[t("div",dt,[e(E,{size:36},{default:l(()=>[e(p(ye))]),_:1})]),t("div",mt,[t("div",ft,[n[6]||(n[6]=t("span",{class:"label"},"IP",-1)),t("span",pt,d(i.vehicle.ip??"—"),1)]),t("div",_t,[n[7]||(n[7]=t("span",{class:"label"},"延迟",-1)),t("span",{class:H(["value",w.value])},d(c.value),3)]),t("div",vt,[n[8]||(n[8]=t("span",{class:"label"},"故障率",-1)),t("span",{class:H(["value",z.value])},d(m.value),3)]),t("div",bt,[n[9]||(n[9]=t("span",{class:"label"},"群组",-1)),t("span",ht,d(i.vehicle.group??"—"),1)]),t("div",wt,[n[10]||(n[10]=t("span",{class:"label"},"状态",-1)),t("span",gt,d(i.vehicle.lstatus??A.value),1)])])]),t("div",Ct,[t("div",yt,[e(E,null,{default:l(()=>[e(p(Ie))]),_:1}),t("span",null,d(P.value),1)]),t("div",It,[e(E,null,{default:l(()=>[e(p(Me))]),_:1}),t("span",null,d(R.value),1)]),t("div",Mt,[e(E,{class:H({"is-alarm":i.vehicle.isAlarmActive})},{default:l(()=>[e(p(Ve))]),_:1},8,["class"]),t("span",null,d(i.vehicle.isAlarmActive?"报警":"正常"),1)]),t("div",Vt,[e(E,{class:H({"is-down":i.vehicle.reachable===!1})},{default:l(()=>[e(p(Ee))]),_:1},8,["class"]),t("span",null,d(i.vehicle.reachable===!1?"不可达":"可达"),1)])]),t("div",Et,[t("span",null,"电量 "+d(y.value)+"%",1),n[11]||(n[11]=t("span",{class:"hint"},"双击打开车载界面",-1))])],34)}}}),Tt=se(xt,[["__scopeId","data-v-30c5a691"]]),At=G({__name:"VehicleMaintenanceView",setup(i){return(u,o)=>{const b=Ae,x=Te,A=$e,y=ne,h=ie,I=ke,$=xe;return T(),O(ue,{section:"vehicle",title:"车辆维护策略",description:"电量阈值、故障上报、自动报修(VehicleMaintenancePolicy)",defaults:p(Be)},{default:l(({payload:c,update:w})=>[e($,{"label-width":"160px",model:c},{default:l(()=>[e(x,{label:"低电量阈值"},{default:l(()=>[e(b,{"model-value":c.lowBatteryThreshold*100,min:0,max:100,"format-tooltip":m=>`${m}%`,"onUpdate:modelValue":m=>w({...c,lowBatteryThreshold:(Number(m)||0)/100})},null,8,["model-value","format-tooltip","onUpdate:modelValue"])]),_:2},1024),e(x,{label:"临界电量阈值"},{default:l(()=>[e(b,{"model-value":c.criticalBatteryThreshold*100,min:0,max:100,"format-tooltip":m=>`${m}%`,"onUpdate:modelValue":m=>w({...c,criticalBatteryThreshold:(Number(m)||0)/100})},null,8,["model-value","format-tooltip","onUpdate:modelValue"])]),_:2},1024),e(A,{"content-position":"left"},{default:l(()=>[...o[0]||(o[0]=[C("故障上报",-1)])]),_:1}),e(x,{label:"启用"},{default:l(()=>[e(y,{"model-value":c.faultReport.enabled,"onUpdate:modelValue":m=>w({...c,faultReport:{...c.faultReport,enabled:!!m}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(x,{label:"接收邮箱"},{default:l(()=>[e(h,{"model-value":c.faultReport.emailTo.join(", "),"onUpdate:modelValue":m=>w({...c,faultReport:{...c.faultReport,emailTo:m.split(/[,\s]+/).filter(Boolean)}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(A,{"content-position":"left"},{default:l(()=>[...o[1]||(o[1]=[C("自动报修",-1)])]),_:1}),e(x,{label:"启用"},{default:l(()=>[e(y,{"model-value":c.autoRepair.enabled,"onUpdate:modelValue":m=>w({...c,autoRepair:{...c.autoRepair,enabled:!!m}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),e(x,{label:"冷却时间 (秒)"},{default:l(()=>[e(I,{"model-value":c.autoRepair.cooldownSec,min:0,max:86400,"onUpdate:modelValue":m=>w({...c,autoRepair:{...c.autoRepair,cooldownSec:m??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}}),$t=G({__name:"FleetLifecycleView",setup(i){return(u,o)=>{const b=Pe,x=Re,A=Le,y=ce,h=De,I=Ue,$=re;return T(),O(ue,{section:"fleet",title:"车队全生命周期",description:"分区域/跨楼层/多车协作;OTA、批量操作、网络诊断(FleetLifecycleConfig)",defaults:p(Se)},{default:l(({payload:c})=>[e($,{"model-value":"groups"},{default:l(()=>[e(y,{name:"groups",label:"车队分组"},{default:l(()=>[e(A,{data:c.groups,size:"small",border:""},{default:l(()=>[e(b,{label:"ID",prop:"id",width:"100"}),e(b,{label:"名称",prop:"name",width:"140"}),e(b,{label:"楼层",prop:"floor",width:"80"}),e(b,{label:"区域",prop:"region",width:"80"}),e(b,{label:"车辆"},{default:l(w=>[(T(!0),U(j,null,W(w.row.carIds,m=>(T(),O(x,{key:m,size:"small",style:{margin:"2px"}},{default:l(()=>[C(d(m),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:2},1024),e(y,{name:"ota",label:"OTA 升级"},{default:l(()=>[e(I,{column:2,border:""},{default:l(()=>[e(h,{label:"启用"},{default:l(()=>[C(d(c.ota.enabled?"是":"否"),1)]),_:2},1024),e(h,{label:"批次大小"},{default:l(()=>[C(d(c.ota.batchSize),1)]),_:2},1024),e(h,{label:"失败回滚"},{default:l(()=>[C(d(c.ota.rollbackOnFail?"是":"否"),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),e(y,{name:"batch",label:"批量操作"},{default:l(()=>[e(I,{column:2,border:""},{default:l(()=>[e(h,{label:"需确认"},{default:l(()=>[C(d(c.batchOps.confirmationRequired?"是":"否"),1)]),_:2},1024),e(h,{label:"最大批量"},{default:l(()=>[C(d(c.batchOps.maxBatch),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),e(y,{name:"diag",label:"网络诊断"},{default:l(()=>[e(I,{column:2,border:""},{default:l(()=>[e(h,{label:"RTT 阈值 (ms)"},{default:l(()=>[C(d(c.networkDiag.rttThresholdMs),1)]),_:2},1024),e(h,{label:"丢包阈值"},{default:l(()=>[C(d(c.networkDiag.packetLossThreshold),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}});async function kt(){const{data:i}=await Fe.get("/sl/projection/fleet/health");return Array.isArray(i)?i:[]}const Bt=5e3,Lt=2e4;function Pt(i){const u=(i.lstatus??"").toLowerCase();return/返厂|blown/.test(u)?"blown":/现场检修|repair/.test(u)?"repair":/下线|offline/.test(u)||i.state==="offline"?"offline":"online"}function Rt(i,u){return{...i,ip:u?.ip??i.ip,onboardUrl:u?.onboardUrl??i.onboardUrl??(i.ip?`http://${i.ip}:8081`:void 0),latencyMs:u?.latencyMs,reachable:u?.reachable,faultRatePercent:u?.faultRatePercent,isAlarmActive:u?.isAlarmActive??i.state==="fault",cpuPercent:u?.cpuPercent,memPercent:u?.memPercent,maintenanceMode:Pt(i)}}function Ut(){const i=Y([]),u=Y([]),o=D(!1),b=D(!1),x=D(null);let A=null,y=null;const h=_(()=>{const r=new Map;for(const f of u.value)r.set(f.carId,f);return r}),I=_(()=>i.value.map(r=>{const f=r.rawId??parseInt(r.id.replace(/\D/g,""),10),a=Number.isFinite(f)?h.value.get(f):void 0;return Rt(r,a)})),$=_(()=>I.value.length),c=_(()=>I.value.filter(r=>r.state!=="offline"&&r.maintenanceMode==="online").length),w=_(()=>I.value.filter(r=>r.maintenanceMode==="offline"||r.maintenanceMode==="repair"||r.maintenanceMode==="blown").length),m=_(()=>I.value.filter(r=>r.isAlarmActive).length),z=_(()=>I.value.filter(r=>r.reachable===!1).length);async function P(){o.value=!0;try{i.value=await tt()}finally{o.value=!1}}async function R(){b.value=!0;try{u.value=await kt()}finally{b.value=!1}}async function S(){await Promise.all([P(),R()])}function L(r,f){const a=i.value.findIndex(M=>(M.rawId??parseInt(M.id.replace(/\D/g,""),10))===r);if(a<0)return;const n=[...i.value];n[a]={...n[a],...f,lastUpdate:new Date().toISOString()},i.value=n}const k=lt({extraEventKinds:["alarm","car-state"],autoConnect:!0});return k.on(r=>{if(r.kind==="car-state"&&r.payload&&typeof r.payload=="object"){const f=r.payload,a=f.rawId;a!=null&&L(a,{state:f.state,lstatus:f.lstatus})}if(r.kind==="alarm"&&r.payload&&typeof r.payload=="object"){const f=r.payload;if(f.carId!=null){const a=f.action==="raise"||f.action==="update",n=u.value.findIndex(M=>M.carId===f.carId);if(n>=0){const M=[...u.value];M[n]={...M[n],isAlarmActive:a},u.value=M}L(f.carId,{state:a?"fault":void 0})}}}),Oe(()=>{S(),A=setInterval(()=>void P(),Bt),y=setInterval(()=>void R(),Lt)}),ze(()=>{A&&clearInterval(A),y&&clearInterval(y),k.disconnect()}),{cardModels:I,loading:o,healthLoading:b,selectedId:x,totalCount:$,onlineCount:c,maintenanceCount:w,alarmCount:m,unreachableCount:z,refreshAll:S,loadCars:P,loadHealth:R}}const Dt={class:"vehicle-hub-page"},St={class:"overview-pane"},Ft={class:"hub-toolbar"},Ot={class:"stats-row"},zt={class:"stat"},Ht={class:"num"},Nt={class:"stat online"},qt={class:"num"},jt={class:"stat warn"},Wt={class:"num"},Gt={class:"stat danger"},Kt={class:"num"},Jt={class:"stat muted"},Qt={class:"num"},Xt={class:"filters-row"},Yt={class:"card-grid"},Zt={class:"config-pane"},el={class:"config-pane"},tl=G({__name:"VehicleHubView",setup(i){const u=He(),o=_(()=>u.scope==="Platform"||(u.effectivePermissions?.allowedOps??[]).includes("*")),b=Ne(),x=qe(),A=["overview","maintenance","fleet"];function y(){const v=b.query.tab;return typeof v=="string"&&A.includes(v)?v:"overview"}const h=D(y());Z(h,v=>{b.query.tab!==v&&x.replace({query:{...b.query,tab:v}})}),Z(()=>b.query.tab,()=>{const v=y();v!==h.value&&(h.value=v)});const{cardModels:I,loading:$,healthLoading:c,selectedId:w,totalCount:m,onlineCount:z,maintenanceCount:P,alarmCount:R,unreachableCount:S,refreshAll:L}=Ut(),k=D(""),r=D(""),f=D(""),a=[{value:"idle",label:"空闲"},{value:"running",label:"运行"},{value:"charging",label:"充电"},{value:"paused",label:"暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],n=_(()=>{const v=new Set;for(const s of I.value)s.group&&v.add(s.group);return[...v]}),M=_(()=>{const v=k.value.trim().toLowerCase(),s=v?v.split(/\s+/).filter(Boolean):[];return I.value.filter(V=>{if(r.value&&V.state!==r.value||f.value&&V.group!==f.value)return!1;if(!s.length)return!0;const E=[V.id,V.name,V.ip,V.group,V.lstatus].filter(Boolean).join(" ").toLowerCase();return s.every(B=>E.includes(B))})}),N=_(()=>w.value?[w.value]:[]);async function F(v){const s=v,V=M.value.filter(E=>w.value?E.id===w.value:!0);if(V.length)try{await q.confirm(`对 ${V.length} 辆车执行「${v}」?`,"批量维护",{type:"warning"});for(const E of V){const B=E.rawId??parseInt(E.id.replace(/\D/g,""),10);Number.isFinite(B)&&await de(B,s)}Q.success("批量操作已提交"),await L()}catch{}}return(v,s)=>{const V=ie,E=Ge,B=We,me=oe,X=te,K=ae,fe=le,pe=ee,_e=Xe,J=ce,ve=re,be=Ze;return T(),U("div",Dt,[e(ve,{modelValue:h.value,"onUpdate:modelValue":s[4]||(s[4]=g=>h.value=g),class:"hub-tabs"},{default:l(()=>[e(J,{name:"overview",label:"运维总览"},{default:l(()=>[t("div",St,[t("div",Ft,[t("div",Ot,[t("div",zt,[t("span",Ht,d(p(m)),1),s[5]||(s[5]=t("span",{class:"label"},"总数",-1))]),t("div",Nt,[t("span",qt,d(p(z)),1),s[6]||(s[6]=t("span",{class:"label"},"在线",-1))]),t("div",jt,[t("span",Wt,d(p(P)),1),s[7]||(s[7]=t("span",{class:"label"},"维护中",-1))]),t("div",Gt,[t("span",Kt,d(p(R)),1),s[8]||(s[8]=t("span",{class:"label"},"报警",-1))]),t("div",Jt,[t("span",Qt,d(p(S)),1),s[9]||(s[9]=t("span",{class:"label"},"不可达",-1))])]),t("div",Xt,[e(V,{modelValue:k.value,"onUpdate:modelValue":s[0]||(s[0]=g=>k.value=g),size:"small",clearable:"",placeholder:"搜索 ID / 名称 / IP",class:"search-input","prefix-icon":p(je)},null,8,["modelValue","prefix-icon"]),e(B,{modelValue:r.value,"onUpdate:modelValue":s[1]||(s[1]=g=>r.value=g),size:"small",clearable:"",placeholder:"状态",class:"filter-select"},{default:l(()=>[(T(),U(j,null,W(a,g=>e(E,{key:g.value,label:g.label,value:g.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),e(B,{modelValue:f.value,"onUpdate:modelValue":s[2]||(s[2]=g=>f.value=g),size:"small",clearable:"",placeholder:"群组",class:"filter-select"},{default:l(()=>[(T(!0),U(j,null,W(n.value,g=>(T(),O(E,{key:g,label:g,value:g},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(pe,{disabled:!o.value||!N.value.length,onCommand:F},{dropdown:l(()=>[e(fe,null,{default:l(()=>[e(K,{command:"online"},{default:l(()=>[...s[11]||(s[11]=[C("批量上线",-1)])]),_:1}),e(K,{command:"offline"},{default:l(()=>[...s[12]||(s[12]=[C("批量下线",-1)])]),_:1}),e(K,{command:"repair"},{default:l(()=>[...s[13]||(s[13]=[C("批量现场检修",-1)])]),_:1})]),_:1})]),default:l(()=>[e(X,{size:"small",disabled:!o.value||!N.value.length},{default:l(()=>[s[10]||(s[10]=C(" 批量维护 ",-1)),e(me,{class:"el-icon--right"},{default:l(()=>[e(p(Ke))]),_:1})]),_:1},8,["disabled"])]),_:1},8,["disabled"]),e(X,{size:"small",icon:p(Je),loading:p($)||p(c),onClick:p(L)},{default:l(()=>[...s[14]||(s[14]=[C(" 刷新 ",-1)])]),_:1},8,["icon","loading","onClick"])])]),Qe((T(),U("div",Yt,[(T(!0),U(j,null,W(M.value,g=>(T(),O(Tt,{key:g.id,vehicle:g,selected:p(w)===g.id,"can-write":o.value,onSelect:s[3]||(s[3]=he=>w.value=he),onMaintenanceChanged:p(L)},null,8,["vehicle","selected","can-write","onMaintenanceChanged"]))),128)),!M.value.length&&!p($)?(T(),O(_e,{key:0,description:"无匹配车辆"})):Ye("",!0)])),[[be,p($)&&!p(I).length]]),s[15]||(s[15]=t("p",{class:"footnote"},"故障率 = 报警占用时长 ÷ 自上线以来运行时长(SimpleLite 进程内累计)",-1))])]),_:1}),e(J,{name:"maintenance",label:"维护策略",lazy:""},{default:l(()=>[t("div",Zt,[e(At)])]),_:1}),e(J,{name:"fleet",label:"车队生命周期",lazy:""},{default:l(()=>[t("div",el,[e($t)])]),_:1})]),_:1},8,["modelValue"])])}}}),Bl=se(tl,[["__scopeId","data-v-e13531ad"]]);export{Bl as default}; diff --git a/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-BONwcIeP.js b/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-BONwcIeP.js deleted file mode 100644 index 00bca03..0000000 --- a/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-BONwcIeP.js +++ /dev/null @@ -1 +0,0 @@ -import{aG as c,aA as f,bH as l,br as b,b7 as V,aF as t,N as v,O as R,a4 as U,H as h,aE as d,a7 as E,R as B,S as w,k as x}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";import{C as T}from"./ConfigPageBase-DYlmkUIy.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-DhAzkl-X.js";/* empty css */import"./reflection-BmVSriDn.js";import"./monitorConfigCache-deAxNrzx.js";const K=c({__name:"VehicleMaintenanceView",setup(N){return(C,m)=>{const i=U,a=R,r=h,u=E,p=B,s=w,_=v;return V(),f(T,{section:"vehicle",title:"车辆维护策略",description:"电量阈值、故障上报、自动报修(VehicleMaintenancePolicy)",defaults:b(x)},{default:l(({payload:e,update:n})=>[t(_,{"label-width":"160px",model:e},{default:l(()=>[t(a,{label:"低电量阈值"},{default:l(()=>[t(i,{"model-value":e.lowBatteryThreshold*100,min:0,max:100,"format-tooltip":o=>`${o}%`,"onUpdate:modelValue":o=>n({...e,lowBatteryThreshold:(Number(o)||0)/100})},null,8,["model-value","format-tooltip","onUpdate:modelValue"])]),_:2},1024),t(a,{label:"临界电量阈值"},{default:l(()=>[t(i,{"model-value":e.criticalBatteryThreshold*100,min:0,max:100,"format-tooltip":o=>`${o}%`,"onUpdate:modelValue":o=>n({...e,criticalBatteryThreshold:(Number(o)||0)/100})},null,8,["model-value","format-tooltip","onUpdate:modelValue"])]),_:2},1024),t(r,{"content-position":"left"},{default:l(()=>[...m[0]||(m[0]=[d("故障上报",-1)])]),_:1}),t(a,{label:"启用"},{default:l(()=>[t(u,{"model-value":e.faultReport.enabled,"onUpdate:modelValue":o=>n({...e,faultReport:{...e.faultReport,enabled:!!o}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),t(a,{label:"接收邮箱"},{default:l(()=>[t(p,{"model-value":e.faultReport.emailTo.join(", "),"onUpdate:modelValue":o=>n({...e,faultReport:{...e.faultReport,emailTo:o.split(/[,\s]+/).filter(Boolean)}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),t(r,{"content-position":"left"},{default:l(()=>[...m[1]||(m[1]=[d("自动报修",-1)])]),_:1}),t(a,{label:"启用"},{default:l(()=>[t(u,{"model-value":e.autoRepair.enabled,"onUpdate:modelValue":o=>n({...e,autoRepair:{...e.autoRepair,enabled:!!o}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),t(a,{label:"冷却时间 (秒)"},{default:l(()=>[t(s,{"model-value":e.autoRepair.cooldownSec,min:0,max:86400,"onUpdate:modelValue":o=>n({...e,autoRepair:{...e.autoRepair,cooldownSec:o??0}})},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["model"])]),_:1},8,["defaults"])}}});export{K as default}; diff --git a/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-KlqpaRgh.css b/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-KlqpaRgh.css deleted file mode 100644 index cbbc188..0000000 --- a/MiGu.Server/wwwroot/assets/VehicleMaintenanceView-KlqpaRgh.css +++ /dev/null @@ -1 +0,0 @@ -.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;width:100%;height:32px;display:flex}.el-slider__runway{height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;position:relative}.el-slider__runway.show-input{width:auto;margin-right:30px}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed;transform:scale(1)}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);z-index:1;top:var(--el-slider-button-wrapper-offset);text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;outline:none;line-height:normal;position:absolute;transform:translate(-50%)}.el-slider__button-wrapper:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{transform:scale(1.2)}.el-slider__button:hover,.el-slider__button.hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);position:absolute;transform:translate(-50%)}.el-slider__marks{width:18px;height:100%;top:0;left:12px}.el-slider__marks-text{color:var(--el-color-info);white-space:pre;margin-top:15px;font-size:14px;position:absolute;transform:translate(-50%)}.el-slider.is-vertical{flex:0;width:auto;height:100%;display:inline-flex;position:relative}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);border-radius:0 0 3px 3px;height:auto}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px} diff --git a/MiGu.Server/wwwroot/assets/Workspace3D-CE3B9LLc.js b/MiGu.Server/wwwroot/assets/Workspace3D-CE3B9LLc.js new file mode 100644 index 0000000..c467209 --- /dev/null +++ b/MiGu.Server/wwwroot/assets/Workspace3D-CE3B9LLc.js @@ -0,0 +1 @@ +import{aG as Q,b5 as X,b4 as J,aC as b,b1 as K,aF as u,ac as Y,bH as c,az as f,bo as s,aA as U,aB as p,r as Z,br as S,Q as ee,bf as l,av as V,b7 as i,aE as m,bg as ae,aQ as te,aX as ne,aj as oe}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css */const se={key:0,class:"workspace-3d-toolbar"},le={class:"hint"},re=["src"],ce={key:1,class:"workspace-3d-mask"},ie=1800,de=4,ue=18e3,fe=Q({__name:"Workspace3D",props:{host:{default:void 0},scope:{default:"Platform"},token:{default:""},readOnly:{type:Boolean,default:!1},embedUi:{type:Boolean,default:!1},canvasOnly:{type:Boolean,default:!1},hideToolbar:{type:Boolean,default:!1}},emits:["pick","select","ready"],setup(o,{expose:z,emit:F}){const n=o,h=F,_=l(),O=l(),y=l(!1),v=l("正在连接 webVRender ..."),w=l(null),g=l([]),r=l(""),d=V(()=>n.host??"localhost:8223"??"localhost:8223"),M=V(()=>{const a=new URLSearchParams;return a.set("scope",n.scope??"Platform"),n.token&&a.set("token",n.token),a.set("ro",n.readOnly?"1":"0"),n.canvasOnly?a.set("ui","canvas-only"):n.embedUi&&a.set("ui","embed"),`http://${d.value}/?${a.toString()}`});let k=null,E=0;function R(){return`http://${d.value}`}function B(a){return new Promise(e=>setTimeout(e,a))}function P(){return n.canvasOnly||n.embedUi}function H(){return n.canvasOnly?"/declareCanvasOnly":n.embedUi?"/declareEmbedUi":null}async function L(a){try{return(await fetch(`${R()}${a}`,{method:"GET",cache:"no-store",credentials:"omit",signal:AbortSignal.timeout(ie)})).ok}catch{return!1}}async function G(){const a=H();if(a){for(let e=0;e{a!==E||y.value||(v.value=`连接超时 (http://${d.value}),请确认 SimpleLite 已启动`)},ue)}function C(a){const e=M.value;if(!a)return e;const t=e.includes("?")?"&":"?";return`${e}${t}_=${Date.now()}`}async function D(a=!1){const e=++E;if(y.value=!1,v.value=`正在连接 webVRender (http://${d.value}) ...`,N(e),P())G(),r.value=C(a||!!r.value);else{if(v.value="正在等待 SimpleLite webVRender 就绪 ...",await I(),e!==E)return;r.value=C(a||!!r.value)}}function j(){y.value=!0,T(),h("ready")}function W(a){if(!_.value||a.source!==_.value.contentWindow)return;const e=a.data;if(!(!e||typeof e!="object")){if(e.type==="workspace.pick"&&e.payload&&typeof e.payload.x=="number")w.value=e.payload,h("pick",e.payload);else if(e.type==="workspace.select"&&Array.isArray(e.payload))g.value=e.payload,h("select",e.payload);else if(e.type==="workspace.shortcut"&&e.payload&&typeof e.payload=="object"){const t=e.payload.action;(t==="undo"||t==="redo"||t==="delete")&&window.dispatchEvent(new CustomEvent("workspace-shortcut",{detail:{action:t}}))}}}function x(){D(!0)}function $(){const a=O.value;a&&(document.fullscreenElement?document.exitFullscreen():a.requestFullscreen())}return X(()=>{window.addEventListener("message",W),D(!1)}),J(()=>{window.removeEventListener("message",W),T()}),z({reload:x,enterFullscreen:$}),(a,e)=>{const t=Y,A=Z,q=ee;return i(),b("div",{class:K(["workspace-3d-wrap",{"workspace-3d--canvas-only":o.canvasOnly||o.hideToolbar}])},[o.canvasOnly||o.hideToolbar?p("",!0):(i(),b("div",se,[u(t,{type:o.readOnly?"info":"success",effect:"dark",size:"small"},{default:c(()=>[m(s(o.readOnly?"只读":"可交互"),1)]),_:1},8,["type"]),f("span",le,"webVRender · http://"+s(d.value)+" · scope="+s(o.scope),1),e[2]||(e[2]=f("div",{class:"spacer"},null,-1)),w.value?(i(),U(t,{key:0,type:"warning",size:"small"},{default:c(()=>[m(" Pick ("+s(w.value.x.toFixed(0))+", "+s(w.value.y.toFixed(0))+") ",1)]),_:1})):p("",!0),g.value.length?(i(),U(t,{key:1,type:"primary",size:"small"},{default:c(()=>[m(" Selected: "+s(g.value.length),1)]),_:1})):p("",!0),u(A,{size:"small",icon:S(ae),onClick:x},{default:c(()=>[...e[0]||(e[0]=[m("重载",-1)])]),_:1},8,["icon"]),u(A,{size:"small",icon:S(te),onClick:$},{default:c(()=>[...e[1]||(e[1]=[m("全屏",-1)])]),_:1},8,["icon"])])),f("div",{ref_key:"frameWrap",ref:O,class:"workspace-3d-frame"},[r.value?(i(),b("iframe",{key:0,ref_key:"frame",ref:_,src:r.value,class:"workspace-3d-iframe",allow:"fullscreen",onLoad:j},null,40,re)):p("",!0),y.value?p("",!0):(i(),b("div",ce,[u(q,{class:"is-loading",size:"32"},{default:c(()=>[u(S(ne))]),_:1}),f("span",null,s(v.value),1),e[3]||(e[3]=f("span",{class:"muted"},"如长时间未加载,请确认 SimpleLite 已以 Web-Enabled 模式启动且 8223 端口可达。",-1))]))],512)],2)}}}),we=oe(fe,[["__scopeId","data-v-17efa15d"]]);export{we as W}; diff --git a/MiGu.Server/wwwroot/assets/Workspace3D-PfDes8bN.js b/MiGu.Server/wwwroot/assets/Workspace3D-PfDes8bN.js deleted file mode 100644 index bf84bef..0000000 --- a/MiGu.Server/wwwroot/assets/Workspace3D-PfDes8bN.js +++ /dev/null @@ -1 +0,0 @@ -import{aG as N,b5 as P,b4 as $,aC as y,b1 as A,aF as d,ac as D,bH as n,az as i,bo as l,aA as z,aB as u,r as R,br as _,Q as j,bf as r,av as S,b7 as c,aE as f,bg as I,aQ as q,aX as G,aj as H}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css */const M={key:0,class:"workspace-3d-toolbar"},Q={class:"hint"},X=["src"],J={key:1,class:"workspace-3d-mask"},K=N({__name:"Workspace3D",props:{host:{default:void 0},scope:{default:"Platform"},token:{default:""},readOnly:{type:Boolean,default:!1},embedUi:{type:Boolean,default:!1},canvasOnly:{type:Boolean,default:!1},hideToolbar:{type:Boolean,default:!1}},emits:["pick","select","ready"],setup(o,{expose:W,emit:L}){const t=o,v=L,k=r(),g=r(),w=r(!1),p=r(null),b=r([]),h=r(""),m=S(()=>t.host??"localhost:8223"??"localhost:8223"),U=S(()=>{const a=new URLSearchParams;return a.set("scope",t.scope??"Platform"),t.token&&a.set("token",t.token),a.set("ro",t.readOnly?"1":"0"),t.canvasOnly?a.set("ui","canvas-only"):t.embedUi&&a.set("ui","embed"),`http://${m.value}/?${a.toString()}`});async function F(){const a=t.canvasOnly?"/declareCanvasOnly":t.embedUi?"/declareEmbedUi":null;if(a)try{await fetch(`http://${m.value}${a}`,{method:"GET",mode:"no-cors",cache:"no-store",credentials:"omit",keepalive:!0})}catch(e){console.warn(`[Workspace3D] ${a} 请求失败,SimpleLite 可能仍以完整面板模式启动:`,e)}}async function E(){w.value=!1,await F(),h.value=U.value}function T(){w.value=!0,v("ready")}function x(a){if(!k.value||a.source!==k.value.contentWindow)return;const e=a.data;if(!(!e||typeof e!="object")){if(e.type==="workspace.pick"&&e.payload&&typeof e.payload.x=="number")p.value=e.payload,v("pick",e.payload);else if(e.type==="workspace.select"&&Array.isArray(e.payload))b.value=e.payload,v("select",e.payload);else if(e.type==="workspace.shortcut"&&e.payload&&typeof e.payload=="object"){const s=e.payload.action;(s==="undo"||s==="redo"||s==="delete")&&window.dispatchEvent(new CustomEvent("workspace-shortcut",{detail:{action:s}}))}}}function B(){E()}function O(){const a=g.value;a&&(document.fullscreenElement?document.exitFullscreen():a.requestFullscreen())}return P(()=>{window.addEventListener("message",x),E()}),$(()=>{window.removeEventListener("message",x)}),W({reload:B,enterFullscreen:O}),(a,e)=>{const s=D,C=R,V=j;return c(),y("div",{class:A(["workspace-3d-wrap",{"workspace-3d--canvas-only":o.canvasOnly||o.hideToolbar}])},[o.canvasOnly||o.hideToolbar?u("",!0):(c(),y("div",M,[d(s,{type:o.readOnly?"info":"success",effect:"dark",size:"small"},{default:n(()=>[f(l(o.readOnly?"只读":"可交互"),1)]),_:1},8,["type"]),i("span",Q,"webVRender · http://"+l(m.value)+" · scope="+l(o.scope),1),e[2]||(e[2]=i("div",{class:"spacer"},null,-1)),p.value?(c(),z(s,{key:0,type:"warning",size:"small"},{default:n(()=>[f(" Pick ("+l(p.value.x.toFixed(0))+", "+l(p.value.y.toFixed(0))+") ",1)]),_:1})):u("",!0),b.value.length?(c(),z(s,{key:1,type:"primary",size:"small"},{default:n(()=>[f(" Selected: "+l(b.value.length),1)]),_:1})):u("",!0),d(C,{size:"small",icon:_(I),onClick:B},{default:n(()=>[...e[0]||(e[0]=[f("重载",-1)])]),_:1},8,["icon"]),d(C,{size:"small",icon:_(q),onClick:O},{default:n(()=>[...e[1]||(e[1]=[f("全屏",-1)])]),_:1},8,["icon"])])),i("div",{ref_key:"frameWrap",ref:g,class:"workspace-3d-frame"},[h.value?(c(),y("iframe",{key:0,ref_key:"frame",ref:k,src:h.value,class:"workspace-3d-iframe",allow:"fullscreen",onLoad:T},null,40,X)):u("",!0),w.value?u("",!0):(c(),y("div",J,[d(V,{class:"is-loading",size:"32"},{default:n(()=>[d(_(G))]),_:1}),i("span",null,"正在连接 webVRender (http://"+l(m.value)+") ...",1),e[3]||(e[3]=i("span",{class:"muted"},"如长时间未加载,请确认 SimpleLite 已以 Web-Enabled 模式启动且 8223 端口可达。",-1))]))],512)],2)}}}),te=H(K,[["__scopeId","data-v-aaec3f2d"]]);export{te as W}; diff --git a/MiGu.Server/wwwroot/assets/Workspace3D-XQXNd-Sa.css b/MiGu.Server/wwwroot/assets/Workspace3D-mhI80n5T.css similarity index 54% rename from MiGu.Server/wwwroot/assets/Workspace3D-XQXNd-Sa.css rename to MiGu.Server/wwwroot/assets/Workspace3D-mhI80n5T.css index 180a8d3..593da57 100644 --- a/MiGu.Server/wwwroot/assets/Workspace3D-XQXNd-Sa.css +++ b/MiGu.Server/wwwroot/assets/Workspace3D-mhI80n5T.css @@ -1 +1 @@ -.workspace-3d-wrap[data-v-aaec3f2d]{display:flex;flex-direction:column;height:100%;min-height:480px;border:1px solid rgba(255,255,255,.12);border-radius:var(--mg-radius, 16px);background:#0f042073;backdrop-filter:blur(18px) saturate(140%);-webkit-backdrop-filter:blur(18px) saturate(140%);box-shadow:0 8px 24px #0a021059,0 0 0 1px #ffffff0f inset;overflow:hidden;transition:all .25s cubic-bezier(.25,.8,.25,1)}.workspace-3d-wrap.workspace-3d--canvas-only[data-v-aaec3f2d]{border:0;border-radius:0;min-height:0;background:transparent;box-shadow:none}.workspace-3d-toolbar[data-v-aaec3f2d]{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#ffffff0a;border-bottom:1px solid rgba(255,255,255,.08);font-size:12px;color:#e8d7f5d9}.workspace-3d-toolbar .hint[data-v-aaec3f2d]{color:#c9a6e3b3;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px}.workspace-3d-toolbar .spacer[data-v-aaec3f2d]{flex:1}.workspace-3d-frame[data-v-aaec3f2d]{flex:1;position:relative;background:radial-gradient(ellipse at 50% 40%,#2d1456,#1a0930,#0f0420)}.workspace-3d-iframe[data-v-aaec3f2d]{width:100%;height:100%;border:0;background:transparent;display:block}.workspace-3d-mask[data-v-aaec3f2d]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:radial-gradient(ellipse at center,rgba(var(--mg-primary-rgb),.35),rgba(var(--mg-bg-app-deep-rgb),.92) 80%),rgba(var(--mg-bg-app-deep-rgb),.85);color:#e8dcffeb;font-size:13px;backdrop-filter:blur(10px)}.workspace-3d-mask .muted[data-v-aaec3f2d]{color:rgba(var(--mg-accent-rgb),.7);font-size:12px}.workspace-3d-mask .el-icon[data-v-aaec3f2d]{color:var(--mg-accent);filter:drop-shadow(0 0 10px rgba(var(--mg-accent-rgb),.6))} +.workspace-3d-wrap[data-v-17efa15d]{display:flex;flex-direction:column;height:100%;min-height:480px;border:1px solid rgba(255,255,255,.12);border-radius:var(--mg-radius, 16px);background:#0f042073;backdrop-filter:blur(18px) saturate(140%);-webkit-backdrop-filter:blur(18px) saturate(140%);box-shadow:0 8px 24px #0a021059,0 0 0 1px #ffffff0f inset;overflow:hidden;transition:all .25s cubic-bezier(.25,.8,.25,1)}.workspace-3d-wrap.workspace-3d--canvas-only[data-v-17efa15d]{border:0;border-radius:0;min-height:0;background:transparent;box-shadow:none}.workspace-3d-toolbar[data-v-17efa15d]{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#ffffff0a;border-bottom:1px solid rgba(255,255,255,.08);font-size:12px;color:#e8d7f5d9}.workspace-3d-toolbar .hint[data-v-17efa15d]{color:#c9a6e3b3;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px}.workspace-3d-toolbar .spacer[data-v-17efa15d]{flex:1}.workspace-3d-frame[data-v-17efa15d]{flex:1;position:relative;background:radial-gradient(ellipse at 50% 40%,#2d1456,#1a0930,#0f0420)}.workspace-3d-iframe[data-v-17efa15d]{width:100%;height:100%;border:0;background:transparent;display:block}.workspace-3d-mask[data-v-17efa15d]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:radial-gradient(ellipse at center,rgba(var(--mg-primary-rgb),.35),rgba(var(--mg-bg-app-deep-rgb),.92) 80%),rgba(var(--mg-bg-app-deep-rgb),.85);color:#e8dcffeb;font-size:13px;backdrop-filter:blur(10px);pointer-events:none}.workspace-3d-mask .muted[data-v-17efa15d]{color:rgba(var(--mg-accent-rgb),.7);font-size:12px}.workspace-3d-mask .el-icon[data-v-17efa15d]{color:var(--mg-accent);filter:drop-shadow(0 0 10px rgba(var(--mg-accent-rgb),.6))} diff --git a/MiGu.Server/wwwroot/assets/index-BvDaAPxG.css b/MiGu.Server/wwwroot/assets/index-B461CCj6.css similarity index 98% rename from MiGu.Server/wwwroot/assets/index-BvDaAPxG.css rename to MiGu.Server/wwwroot/assets/index-B461CCj6.css index f583a35..55d26a8 100644 --- a/MiGu.Server/wwwroot/assets/index-BvDaAPxG.css +++ b/MiGu.Server/wwwroot/assets/index-B461CCj6.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap";:root{--el-color-white:#fff;--el-color-black:#000;--el-color-primary-rgb:64, 158, 255;--el-color-success-rgb:103, 194, 58;--el-color-warning-rgb:230, 162, 60;--el-color-danger-rgb:245, 108, 108;--el-color-error-rgb:245, 108, 108;--el-color-info-rgb:144, 147, 153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.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)}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;width:100%;padding:var(--el-alert-padding);box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);background-color:var(--el-color-white);opacity:1;transition:opacity var(--el-transition-duration-fast);align-items:center;margin:0;display:flex;position:relative;overflow:hidden}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-primary)}.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{flex-direction:column;gap:4px;display:flex}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size);margin-right:8px}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size);margin-right:12px}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;cursor:pointer;position:absolute;top:12px;right:16px}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.el-autocomplete{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;width:var(--el-input-width);display:inline-block;position:relative}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__header{border-bottom:1px solid var(--el-border-color-lighter);padding:10px}.el-autocomplete-suggestion__footer{border-top:1px solid var(--el-border-color-lighter);padding:10px}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{cursor:pointer;color:var(--el-text-color-regular);line-height:34px;font-size:var(--el-font-size-base);text-align:left;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0 20px;list-style:none;overflow:hidden}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{cursor:default;height:100px;color:var(--el-text-color-secondary);justify-content:center;align-items:center;font-size:20px;display:flex}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.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-avatar-group{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px;display:inline-flex}.el-avatar-group .el-avatar{border:1px solid var(--el-border-color-extra-light)}.el-avatar-group .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-item-gap)}.el-avatar-group__collapse-avatars{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px}.el-avatar-group__collapse-avatars .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-collapse-item-gap)}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);background-color:var(--el-backtop-bg-color);width:40px;height:40px;color:var(--el-backtop-text-color);box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex;position:fixed}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.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}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:before,.el-breadcrumb:after{content:"";display:table}.el-breadcrumb:after{clear:both}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:hover,.el-button-group>.el-button:focus,.el-button-group>.el-button:active,.el-button-group>.el-button.is-active{z-index:1}.el-button-group--horizontal{vertical-align:middle;display:inline-block}.el-button-group--horizontal:before,.el-button-group--horizontal:after{content:"";display:table}.el-button-group--horizontal:after{clear:both}.el-button-group--horizontal>.el-button{float:left;position:relative}.el-button-group--horizontal>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group--horizontal>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--horizontal>.el-button:not(:last-child){margin-right:-1px}.el-button-group--horizontal .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--vertical{flex-direction:column;align-items:stretch;display:inline-flex}.el-button-group--vertical>.el-button{margin-top:-1px}.el-button-group--vertical>.el-button:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.el-button-group--vertical>.el-button:last-child{border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical>.el-dropdown{margin-top:-1px}.el-button-group--vertical>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical .el-button--primary:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:#ffffff80;--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-plain,.el-button--primary.is-text,.el-button--primary.is-link{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-plain,.el-button--success.is-text,.el-button--success.is-link{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-plain,.el-button--warning.is-text,.el-button--warning.is-link{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-plain,.el-button--danger.is-text,.el-button--danger.is-link{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-plain,.el-button--info.is-text,.el-button--info.is-link{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);justify-content:space-between;padding:12px 20px;display:flex}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar__select-controller .el-select{margin-right:8px}.el-calendar__select-controller .el-calendar-select__year{width:120px}.el-calendar__select-controller .el-calendar-select__month{width:60px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);padding:12px 0;font-weight:400}.el-calendar-table:not(.is-range) td.prev,.el-calendar-table:not(.is-range) td.next{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);color:var(--el-text-color-primary);transition:var(--el-transition-duration);flex-direction:column;display:flex;overflow:hidden}.el-card.is-always-shadow,.el-card.is-hover-shadow:hover,.el-card.is-hover-shadow:focus{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding);flex-grow:1;overflow:auto}.el-card__footer{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-top:1px solid var(--el-card-border-color);box-sizing:border-box}.el-carousel__item{width:100%;height:100%;z-index:calc(var(--el-index-normal) - 1);display:inline-block;position:absolute;top:0;left:0;overflow:hidden}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage:hover .el-carousel__mask,.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{width:100%;height:50%}.el-carousel__mask{background-color:var(--el-color-white);opacity:.24;width:100%;height:100%;transition:var(--el-transition-duration-fast);position:absolute;top:0;left:0}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:#1f2d3d1c;--el-carousel-arrow-hover-background:#1f2d3d3b;--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel.is-vertical-outside{flex-direction:row;align-items:center;display:flex}.el-carousel.is-vertical-outside .el-carousel__container{flex:1}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);background-color:var(--el-carousel-arrow-background);color:#fff;z-index:10;text-align:center;font-size:var(--el-carousel-arrow-font-size);border:none;border-radius:50%;outline:none;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{z-index:calc(var(--el-index-normal) + 1);margin:0;padding:0;list-style:none;position:absolute}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{top:50%;right:0;transform:translateY(-50%)}.el-carousel__indicators--outside{text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels .el-carousel__button{color:#000;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{cursor:pointer;background-color:#0000}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal);display:inline-block}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width) / 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);cursor:pointer;transition:var(--el-transition-duration);background-color:#fff;border:none;outline:none;margin:0;padding:0;display:block}.el-carousel__indicators--labels .el-carousel__button{width:auto;height:auto}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%)translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%)translate(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);width:-moz-fit-content;width:fit-content;font-size:var(--el-cascader-menu-font-size);display:flex}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{box-sizing:border-box;min-width:180px;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;min-height:100%;margin:0;padding:6px 0;list-style:none;position:relative}.el-cascader-menu__list.el-vl__window{margin:6px 0;padding:0}.el-cascader-menu__list.el-vl__window ul{margin:0;padding:0}.el-cascader-menu__hover-zone{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.el-cascader-menu__empty-text{color:var(--el-cascader-color-empty);align-items:center;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{box-sizing:border-box;outline:none;align-items:center;height:34px;padding:0 30px 0 20px;line-height:34px;display:flex;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-selectable.in-checked-path,.el-cascader-node.is-active{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):hover,.el-cascader-node:not(.is-disabled):focus{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:1;padding:0 8px;overflow:hidden}.el-cascader-node>.el-checkbox,.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);vertical-align:middle;font-size:var(--el-font-size-base);outline:none;line-height:32px;display:inline-block;position:relative}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:read-only{cursor:pointer}.el-cascader .el-input .el-input__inner:disabled{cursor:not-allowed}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--large .el-cascader__tags{gap:6px;padding:8px}.el-cascader--large .el-cascader__search-input{height:24px;margin-left:7px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader--small .el-cascader__tags{gap:4px;padding:2px}.el-cascader--small .el-cascader__search-input{height:20px;margin-left:5px}.el-cascader.is-disabled .el-cascader__label{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-cascader__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-cascader__tags{text-align:left;box-sizing:border-box;flex-wrap:wrap;gap:6px;padding:4px;line-height:normal;display:flex;position:absolute;top:50%;left:0;right:30px;transform:translateY(-50%)}.el-cascader__tags .el-tag{text-overflow:ellipsis;background:var(--el-cascader-tag-background);align-items:center;max-width:100%;display:inline-flex}.el-cascader__tags .el-tag.el-tag--dark,.el-cascader__tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__tags .el-tag:not(.is-hit){border-color:#0000}.el-cascader__tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__tags .el-tag>span{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags .el-tag+input{margin-left:0}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{text-overflow:ellipsis;background:var(--el-fill-color);align-items:center;max-width:100%;display:inline-flex}.el-cascader__collapse-tags .el-tag.el-tag--dark,.el-cascader__collapse-tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:#0000}.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__collapse-tags .el-tag>span{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags .el-tag+input{margin-left:0}.el-cascader__collapse-tags .el-tag{margin:2px 0}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-wrap{max-height:204px}.el-cascader__suggestion-list{font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center;margin:0;padding:6px 0;list-style:none}.el-cascader__suggestion-list.el-vl__window{margin:6px 0;padding:0}.el-cascader__suggestion-list.el-vl__window ul{margin:0;padding:0}.el-cascader__suggestion-item{text-align:left;cursor:pointer;box-sizing:border-box;outline:none;justify-content:space-between;align-items:center;height:34px;padding:0 15px;display:flex}.el-cascader__suggestion-item:hover,.el-cascader__suggestion-item:focus{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>:not(.el-icon){white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__suggestion-item .el-icon{flex-shrink:0}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{min-width:60px;height:24px;color:var(--el-cascader-menu-text-color);box-sizing:border-box;background:0 0;border:none;outline:none;flex:1;margin-left:7px;padding:0}.el-cascader__search-input::placeholder{color:#0000}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);transition:var(--el-transition-all);padding:7px 15px;font-weight:700;display:inline-block}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--primary.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.el-check-tag--primary.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.el-check-tag--primary.is-checked.is-disabled{background-color:var(--el-color-primary-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-checked.is-disabled:hover{background-color:var(--el-color-primary-light-8)}.el-check-tag.el-check-tag--primary.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-check-tag.el-check-tag--success.is-checked{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.el-check-tag--success.is-checked:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.el-check-tag--success.is-checked.is-disabled{background-color:var(--el-color-success-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-checked.is-disabled:hover{background-color:var(--el-color-success-light-8)}.el-check-tag.el-check-tag--success.is-disabled{background-color:var(--el-color-success-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-disabled:hover{background-color:var(--el-color-success-light-9)}.el-check-tag.el-check-tag--warning.is-checked{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.el-check-tag--warning.is-checked:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.el-check-tag--warning.is-checked.is-disabled{background-color:var(--el-color-warning-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-checked.is-disabled:hover{background-color:var(--el-color-warning-light-8)}.el-check-tag.el-check-tag--warning.is-disabled{background-color:var(--el-color-warning-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-disabled:hover{background-color:var(--el-color-warning-light-9)}.el-check-tag.el-check-tag--danger.is-checked{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.el-check-tag--danger.is-checked:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.el-check-tag--danger.is-checked.is-disabled{background-color:var(--el-color-danger-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-checked.is-disabled:hover{background-color:var(--el-color-danger-light-8)}.el-check-tag.el-check-tag--danger.is-disabled{background-color:var(--el-color-danger-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-disabled:hover{background-color:var(--el-color-danger-light-9)}.el-check-tag.el-check-tag--error.is-checked{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.el-check-tag--error.is-checked:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.el-check-tag--error.is-checked.is-disabled{background-color:var(--el-color-error-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-checked.is-disabled:hover{background-color:var(--el-color-error-light-8)}.el-check-tag.el-check-tag--error.is-disabled{background-color:var(--el-color-error-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-disabled:hover{background-color:var(--el-color-error-light-9)}.el-check-tag.el-check-tag--info.is-checked{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.el-check-tag--info.is-checked:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--info.is-checked.is-disabled{background-color:var(--el-color-info-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-checked.is-disabled:hover{background-color:var(--el-color-info-light-8)}.el-check-tag.el-check-tag--info.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);--el-checkbox-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;position:relative}.el-checkbox-button__inner{line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;z-index:-1;outline:none;margin:0;position:absolute}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button.is-disabled.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-disabled-checked-fill)}.el-checkbox-button:first-child .el-checkbox-button__inner{border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{font-size:var(--el-font-size-base);border-radius:0;padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;padding:5px 11px;font-size:12px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;height:var(--el-checkbox-height,32px);align-items:center;margin-right:30px;display:inline-flex;position:relative}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color);will-change:transform}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%)rotate(45deg)scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";background-color:var(--el-checkbox-checked-icon-color);height:2px;display:block;position:absolute;top:5px;left:0;right:0;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);display:inline-block;position:relative}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";transform-origin:50%;border:1px solid #0000;border-top:0;border-left:0;width:3px;height:7px;transition:transform .15s ease-in 50ms;position:absolute;top:50%;left:50%;transform:translate(-45%,-60%)rotate(45deg)scaleY(0)}.el-checkbox__original{opacity:0;z-index:-1;outline:none;width:0;height:0;margin:0;position:absolute}.el-checkbox__label{line-height:1;font-size:var(--el-checkbox-font-size);padding-left:8px;display:inline-block}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{min-height:1px;display:block}.el-col-0{flex:0 0;max-width:0%;display:none}.el-col-0.is-guttered{display:none}.el-col-offset-0{margin-left:0%}.el-col-pull-0{position:relative;right:0%}.el-col-push-0{position:relative;left:0%}.el-col-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-3.is-guttered{display:block}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6667%}.el-col-pull-4{position:relative;right:16.6667%}.el-col-push-4{position:relative;left:16.6667%}.el-col-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333%}.el-col-pull-5{position:relative;right:20.8333%}.el-col-push-5{position:relative;left:20.8333%}.el-col-6{flex:0 0 25%;max-width:25%;display:block}.el-col-6.is-guttered{display:block}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1667%}.el-col-pull-7{position:relative;right:29.1667%}.el-col-push-7{position:relative;left:29.1667%}.el-col-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333%}.el-col-pull-8{position:relative;right:33.3333%}.el-col-push-8{position:relative;left:33.3333%}.el-col-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-9.is-guttered{display:block}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6667%}.el-col-pull-10{position:relative;right:41.6667%}.el-col-push-10{position:relative;left:41.6667%}.el-col-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333%}.el-col-pull-11{position:relative;right:45.8333%}.el-col-push-11{position:relative;left:45.8333%}.el-col-12{flex:0 0 50%;max-width:50%;display:block}.el-col-12.is-guttered{display:block}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1667%}.el-col-pull-13{position:relative;right:54.1667%}.el-col-push-13{position:relative;left:54.1667%}.el-col-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333%}.el-col-pull-14{position:relative;right:58.3333%}.el-col-push-14{position:relative;left:58.3333%}.el-col-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-15.is-guttered{display:block}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6667%}.el-col-pull-16{position:relative;right:66.6667%}.el-col-push-16{position:relative;left:66.6667%}.el-col-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333%}.el-col-pull-17{position:relative;right:70.8333%}.el-col-push-17{position:relative;left:70.8333%}.el-col-18{flex:0 0 75%;max-width:75%;display:block}.el-col-18.is-guttered{display:block}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1667%}.el-col-pull-19{position:relative;right:79.1667%}.el-col-push-19{position:relative;left:79.1667%}.el-col-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333%}.el-col-pull-20{position:relative;right:83.3333%}.el-col-push-20{position:relative;left:83.3333%}.el-col-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-21.is-guttered{display:block}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6667%}.el-col-pull-22{position:relative;right:91.6667%}.el-col-push-22{position:relative;left:91.6667%}.el-col-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333%}.el-col-pull-23{position:relative;right:95.8333%}.el-col-push-23{position:relative;left:95.8333%}.el-col-24{flex:0 0 100%;max-width:100%;display:block}.el-col-24.is-guttered{display:block}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{flex:0 0;max-width:0%;display:none}.el-col-xs-0.is-guttered{display:none}.el-col-xs-offset-0{margin-left:0%}.el-col-xs-pull-0{position:relative;right:0%}.el-col-xs-push-0{position:relative;left:0%}.el-col-xs-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-xs-3.is-guttered{display:block}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6667%}.el-col-xs-pull-4{position:relative;right:16.6667%}.el-col-xs-push-4{position:relative;left:16.6667%}.el-col-xs-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333%}.el-col-xs-pull-5{position:relative;right:20.8333%}.el-col-xs-push-5{position:relative;left:20.8333%}.el-col-xs-6{flex:0 0 25%;max-width:25%;display:block}.el-col-xs-6.is-guttered{display:block}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1667%}.el-col-xs-pull-7{position:relative;right:29.1667%}.el-col-xs-push-7{position:relative;left:29.1667%}.el-col-xs-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333%}.el-col-xs-pull-8{position:relative;right:33.3333%}.el-col-xs-push-8{position:relative;left:33.3333%}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-xs-9.is-guttered{display:block}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6667%}.el-col-xs-pull-10{position:relative;right:41.6667%}.el-col-xs-push-10{position:relative;left:41.6667%}.el-col-xs-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333%}.el-col-xs-pull-11{position:relative;right:45.8333%}.el-col-xs-push-11{position:relative;left:45.8333%}.el-col-xs-12{flex:0 0 50%;max-width:50%;display:block}.el-col-xs-12.is-guttered{display:block}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1667%}.el-col-xs-pull-13{position:relative;right:54.1667%}.el-col-xs-push-13{position:relative;left:54.1667%}.el-col-xs-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333%}.el-col-xs-pull-14{position:relative;right:58.3333%}.el-col-xs-push-14{position:relative;left:58.3333%}.el-col-xs-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-xs-15.is-guttered{display:block}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6667%}.el-col-xs-pull-16{position:relative;right:66.6667%}.el-col-xs-push-16{position:relative;left:66.6667%}.el-col-xs-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333%}.el-col-xs-pull-17{position:relative;right:70.8333%}.el-col-xs-push-17{position:relative;left:70.8333%}.el-col-xs-18{flex:0 0 75%;max-width:75%;display:block}.el-col-xs-18.is-guttered{display:block}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1667%}.el-col-xs-pull-19{position:relative;right:79.1667%}.el-col-xs-push-19{position:relative;left:79.1667%}.el-col-xs-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333%}.el-col-xs-pull-20{position:relative;right:83.3333%}.el-col-xs-push-20{position:relative;left:83.3333%}.el-col-xs-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-xs-21.is-guttered{display:block}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6667%}.el-col-xs-pull-22{position:relative;right:91.6667%}.el-col-xs-push-22{position:relative;left:91.6667%}.el-col-xs-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333%}.el-col-xs-pull-23{position:relative;right:95.8333%}.el-col-xs-push-23{position:relative;left:95.8333%}.el-col-xs-24{flex:0 0 100%;max-width:100%;display:block}.el-col-xs-24.is-guttered{display:block}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{flex:0 0;max-width:0%;display:none}.el-col-sm-0.is-guttered{display:none}.el-col-sm-offset-0{margin-left:0%}.el-col-sm-pull-0{position:relative;right:0%}.el-col-sm-push-0{position:relative;left:0%}.el-col-sm-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-sm-3.is-guttered{display:block}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6667%}.el-col-sm-pull-4{position:relative;right:16.6667%}.el-col-sm-push-4{position:relative;left:16.6667%}.el-col-sm-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333%}.el-col-sm-pull-5{position:relative;right:20.8333%}.el-col-sm-push-5{position:relative;left:20.8333%}.el-col-sm-6{flex:0 0 25%;max-width:25%;display:block}.el-col-sm-6.is-guttered{display:block}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1667%}.el-col-sm-pull-7{position:relative;right:29.1667%}.el-col-sm-push-7{position:relative;left:29.1667%}.el-col-sm-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333%}.el-col-sm-pull-8{position:relative;right:33.3333%}.el-col-sm-push-8{position:relative;left:33.3333%}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-sm-9.is-guttered{display:block}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6667%}.el-col-sm-pull-10{position:relative;right:41.6667%}.el-col-sm-push-10{position:relative;left:41.6667%}.el-col-sm-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333%}.el-col-sm-pull-11{position:relative;right:45.8333%}.el-col-sm-push-11{position:relative;left:45.8333%}.el-col-sm-12{flex:0 0 50%;max-width:50%;display:block}.el-col-sm-12.is-guttered{display:block}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1667%}.el-col-sm-pull-13{position:relative;right:54.1667%}.el-col-sm-push-13{position:relative;left:54.1667%}.el-col-sm-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333%}.el-col-sm-pull-14{position:relative;right:58.3333%}.el-col-sm-push-14{position:relative;left:58.3333%}.el-col-sm-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-sm-15.is-guttered{display:block}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6667%}.el-col-sm-pull-16{position:relative;right:66.6667%}.el-col-sm-push-16{position:relative;left:66.6667%}.el-col-sm-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333%}.el-col-sm-pull-17{position:relative;right:70.8333%}.el-col-sm-push-17{position:relative;left:70.8333%}.el-col-sm-18{flex:0 0 75%;max-width:75%;display:block}.el-col-sm-18.is-guttered{display:block}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1667%}.el-col-sm-pull-19{position:relative;right:79.1667%}.el-col-sm-push-19{position:relative;left:79.1667%}.el-col-sm-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333%}.el-col-sm-pull-20{position:relative;right:83.3333%}.el-col-sm-push-20{position:relative;left:83.3333%}.el-col-sm-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-sm-21.is-guttered{display:block}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6667%}.el-col-sm-pull-22{position:relative;right:91.6667%}.el-col-sm-push-22{position:relative;left:91.6667%}.el-col-sm-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333%}.el-col-sm-pull-23{position:relative;right:95.8333%}.el-col-sm-push-23{position:relative;left:95.8333%}.el-col-sm-24{flex:0 0 100%;max-width:100%;display:block}.el-col-sm-24.is-guttered{display:block}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{flex:0 0;max-width:0%;display:none}.el-col-md-0.is-guttered{display:none}.el-col-md-offset-0{margin-left:0%}.el-col-md-pull-0{position:relative;right:0%}.el-col-md-push-0{position:relative;left:0%}.el-col-md-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-md-3.is-guttered{display:block}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6667%}.el-col-md-pull-4{position:relative;right:16.6667%}.el-col-md-push-4{position:relative;left:16.6667%}.el-col-md-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333%}.el-col-md-pull-5{position:relative;right:20.8333%}.el-col-md-push-5{position:relative;left:20.8333%}.el-col-md-6{flex:0 0 25%;max-width:25%;display:block}.el-col-md-6.is-guttered{display:block}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1667%}.el-col-md-pull-7{position:relative;right:29.1667%}.el-col-md-push-7{position:relative;left:29.1667%}.el-col-md-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333%}.el-col-md-pull-8{position:relative;right:33.3333%}.el-col-md-push-8{position:relative;left:33.3333%}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-md-9.is-guttered{display:block}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6667%}.el-col-md-pull-10{position:relative;right:41.6667%}.el-col-md-push-10{position:relative;left:41.6667%}.el-col-md-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333%}.el-col-md-pull-11{position:relative;right:45.8333%}.el-col-md-push-11{position:relative;left:45.8333%}.el-col-md-12{flex:0 0 50%;max-width:50%;display:block}.el-col-md-12.is-guttered{display:block}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1667%}.el-col-md-pull-13{position:relative;right:54.1667%}.el-col-md-push-13{position:relative;left:54.1667%}.el-col-md-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333%}.el-col-md-pull-14{position:relative;right:58.3333%}.el-col-md-push-14{position:relative;left:58.3333%}.el-col-md-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-md-15.is-guttered{display:block}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6667%}.el-col-md-pull-16{position:relative;right:66.6667%}.el-col-md-push-16{position:relative;left:66.6667%}.el-col-md-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333%}.el-col-md-pull-17{position:relative;right:70.8333%}.el-col-md-push-17{position:relative;left:70.8333%}.el-col-md-18{flex:0 0 75%;max-width:75%;display:block}.el-col-md-18.is-guttered{display:block}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1667%}.el-col-md-pull-19{position:relative;right:79.1667%}.el-col-md-push-19{position:relative;left:79.1667%}.el-col-md-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333%}.el-col-md-pull-20{position:relative;right:83.3333%}.el-col-md-push-20{position:relative;left:83.3333%}.el-col-md-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-md-21.is-guttered{display:block}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6667%}.el-col-md-pull-22{position:relative;right:91.6667%}.el-col-md-push-22{position:relative;left:91.6667%}.el-col-md-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333%}.el-col-md-pull-23{position:relative;right:95.8333%}.el-col-md-push-23{position:relative;left:95.8333%}.el-col-md-24{flex:0 0 100%;max-width:100%;display:block}.el-col-md-24.is-guttered{display:block}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{flex:0 0;max-width:0%;display:none}.el-col-lg-0.is-guttered{display:none}.el-col-lg-offset-0{margin-left:0%}.el-col-lg-pull-0{position:relative;right:0%}.el-col-lg-push-0{position:relative;left:0%}.el-col-lg-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-lg-3.is-guttered{display:block}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6667%}.el-col-lg-pull-4{position:relative;right:16.6667%}.el-col-lg-push-4{position:relative;left:16.6667%}.el-col-lg-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333%}.el-col-lg-pull-5{position:relative;right:20.8333%}.el-col-lg-push-5{position:relative;left:20.8333%}.el-col-lg-6{flex:0 0 25%;max-width:25%;display:block}.el-col-lg-6.is-guttered{display:block}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1667%}.el-col-lg-pull-7{position:relative;right:29.1667%}.el-col-lg-push-7{position:relative;left:29.1667%}.el-col-lg-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333%}.el-col-lg-pull-8{position:relative;right:33.3333%}.el-col-lg-push-8{position:relative;left:33.3333%}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-lg-9.is-guttered{display:block}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6667%}.el-col-lg-pull-10{position:relative;right:41.6667%}.el-col-lg-push-10{position:relative;left:41.6667%}.el-col-lg-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333%}.el-col-lg-pull-11{position:relative;right:45.8333%}.el-col-lg-push-11{position:relative;left:45.8333%}.el-col-lg-12{flex:0 0 50%;max-width:50%;display:block}.el-col-lg-12.is-guttered{display:block}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1667%}.el-col-lg-pull-13{position:relative;right:54.1667%}.el-col-lg-push-13{position:relative;left:54.1667%}.el-col-lg-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333%}.el-col-lg-pull-14{position:relative;right:58.3333%}.el-col-lg-push-14{position:relative;left:58.3333%}.el-col-lg-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-lg-15.is-guttered{display:block}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6667%}.el-col-lg-pull-16{position:relative;right:66.6667%}.el-col-lg-push-16{position:relative;left:66.6667%}.el-col-lg-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333%}.el-col-lg-pull-17{position:relative;right:70.8333%}.el-col-lg-push-17{position:relative;left:70.8333%}.el-col-lg-18{flex:0 0 75%;max-width:75%;display:block}.el-col-lg-18.is-guttered{display:block}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1667%}.el-col-lg-pull-19{position:relative;right:79.1667%}.el-col-lg-push-19{position:relative;left:79.1667%}.el-col-lg-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333%}.el-col-lg-pull-20{position:relative;right:83.3333%}.el-col-lg-push-20{position:relative;left:83.3333%}.el-col-lg-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-lg-21.is-guttered{display:block}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6667%}.el-col-lg-pull-22{position:relative;right:91.6667%}.el-col-lg-push-22{position:relative;left:91.6667%}.el-col-lg-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333%}.el-col-lg-pull-23{position:relative;right:95.8333%}.el-col-lg-push-23{position:relative;left:95.8333%}.el-col-lg-24{flex:0 0 100%;max-width:100%;display:block}.el-col-lg-24.is-guttered{display:block}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{flex:0 0;max-width:0%;display:none}.el-col-xl-0.is-guttered{display:none}.el-col-xl-offset-0{margin-left:0%}.el-col-xl-pull-0{position:relative;right:0%}.el-col-xl-push-0{position:relative;left:0%}.el-col-xl-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-xl-3.is-guttered{display:block}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6667%}.el-col-xl-pull-4{position:relative;right:16.6667%}.el-col-xl-push-4{position:relative;left:16.6667%}.el-col-xl-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333%}.el-col-xl-pull-5{position:relative;right:20.8333%}.el-col-xl-push-5{position:relative;left:20.8333%}.el-col-xl-6{flex:0 0 25%;max-width:25%;display:block}.el-col-xl-6.is-guttered{display:block}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1667%}.el-col-xl-pull-7{position:relative;right:29.1667%}.el-col-xl-push-7{position:relative;left:29.1667%}.el-col-xl-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333%}.el-col-xl-pull-8{position:relative;right:33.3333%}.el-col-xl-push-8{position:relative;left:33.3333%}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-xl-9.is-guttered{display:block}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6667%}.el-col-xl-pull-10{position:relative;right:41.6667%}.el-col-xl-push-10{position:relative;left:41.6667%}.el-col-xl-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333%}.el-col-xl-pull-11{position:relative;right:45.8333%}.el-col-xl-push-11{position:relative;left:45.8333%}.el-col-xl-12{flex:0 0 50%;max-width:50%;display:block}.el-col-xl-12.is-guttered{display:block}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1667%}.el-col-xl-pull-13{position:relative;right:54.1667%}.el-col-xl-push-13{position:relative;left:54.1667%}.el-col-xl-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333%}.el-col-xl-pull-14{position:relative;right:58.3333%}.el-col-xl-push-14{position:relative;left:58.3333%}.el-col-xl-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-xl-15.is-guttered{display:block}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6667%}.el-col-xl-pull-16{position:relative;right:66.6667%}.el-col-xl-push-16{position:relative;left:66.6667%}.el-col-xl-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333%}.el-col-xl-pull-17{position:relative;right:70.8333%}.el-col-xl-push-17{position:relative;left:70.8333%}.el-col-xl-18{flex:0 0 75%;max-width:75%;display:block}.el-col-xl-18.is-guttered{display:block}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1667%}.el-col-xl-pull-19{position:relative;right:79.1667%}.el-col-xl-push-19{position:relative;left:79.1667%}.el-col-xl-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333%}.el-col-xl-pull-20{position:relative;right:83.3333%}.el-col-xl-push-20{position:relative;left:83.3333%}.el-col-xl-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-xl-21.is-guttered{display:block}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6667%}.el-col-xl-pull-22{position:relative;right:91.6667%}.el-col-xl-push-22{position:relative;left:91.6667%}.el-col-xl-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333%}.el-col-xl-pull-23{position:relative;right:95.8333%}.el-col-xl-push-23{position:relative;left:95.8333%}.el-col-xl-24{flex:0 0 100%;max-width:100%;display:block}.el-col-xl-24.is-guttered{display:block}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{width:100%;min-height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border:none;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);transition:border-bottom-color var(--el-transition-duration);box-sizing:border-box;outline:none;align-items:center;padding:0;font-weight:500;display:flex}.el-collapse-item__arrow{transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{text-align:left;flex:auto}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:#0000}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color);overflow:hidden}.el-collapse-item__content{font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);padding-bottom:25px;line-height:1.76923}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-color-picker-panel{--el-colorpicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-colorpicker-bg-color);box-sizing:content-box;background:var(--el-colorpicker-bg-color);width:300px;padding:12px}.el-color-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter);border-radius:4px}.el-color-picker-panel__wrapper{margin-bottom:6px}.el-color-picker-panel__footer{text-align:right;justify-content:space-between;margin-top:12px;display:flex}.el-color-picker-panel__footer .el-input{color:#000;width:160px;font-size:12px;line-height:26px}.el-color-picker-panel.is-disabled .el-color-svpanel,.el-color-picker-panel.is-disabled .el-color-hue-slider{cursor:not-allowed;opacity:.3}.el-color-picker-panel.is-disabled .el-color-hue-slider__thumb{cursor:not-allowed}.el-color-picker-panel.is-disabled .el-color-alpha-slider,.el-color-picker-panel.is-disabled .el-color-predefine .el-color-predefine__color-selector{cursor:not-allowed;opacity:.3}.el-color-predefine{width:280px;margin-top:8px;font-size:12px;display:flex}.el-color-predefine__colors{flex-wrap:wrap;flex:1;gap:8px;display:flex}.el-color-predefine__color-selector{border-radius:var(--el-border-radius-base);cursor:pointer;border:none;outline:none;width:20px;height:20px;padding:0;overflow:hidden}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-predefine__color-selector>div{height:100%;display:flex}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{box-sizing:border-box;float:right;background-color:red;width:280px;height:12px;padding:0 2px;position:relative}.el-color-hue-slider__bar{background:linear-gradient(90deg,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-hue-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-svpanel{background-image:linear-gradient(#0000,#000),linear-gradient(90deg,#fff,#fff0);width:280px;height:180px;position:relative}.el-color-svpanel__cursor{cursor:pointer;border-radius:50%;width:4px;height:4px;position:absolute;transform:translate(-2px,-2px);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006}.el-color-svpanel__cursor:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-alpha-slider{box-sizing:border-box;background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;width:280px;height:12px;position:relative}.el-color-alpha-slider.is-disabled .el-color-alpha-slider__thumb{cursor:not-allowed}.el-color-alpha-slider__bar{background:linear-gradient(to right,#fff0 0%,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-alpha-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(#fff0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-picker-panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker-panel{--el-color-picker-alpha-bg-a:#333}.el-color-picker{outline:none;width:32px;height:32px;line-height:normal;display:inline-block;position:relative}.el-color-picker:hover:not(:-webkit-any(.is-disabled,.is-focused)) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:hover:not(:is(.is-disabled,.is-focused)) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed;background-color:var(--el-fill-color-light)}.el-color-picker.is-disabled .el-color-picker__color{opacity:.3}.el-color-picker--large{width:40px;height:40px}.el-color-picker--small{width:24px;height:24px}.el-color-picker--small .el-color-picker__icon,.el-color-picker--small .el-color-picker__empty{transform:scale(.8)}.el-color-picker__trigger{box-sizing:border-box;border:1px solid var(--el-border-color);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;width:100%;height:100%;padding:4px;font-size:0;display:inline-flex;position:relative}.el-color-picker__color{box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);text-align:center;width:100%;height:100%;display:block;position:relative}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{justify-content:center;align-items:center;width:100%;height:100%;display:inline-flex}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{color:#fff;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.el-color-picker__panel{border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);background-color:#fff}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-date-table{-webkit-user-select:none;user-select:none;font-size:12px}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;text-align:center;cursor:pointer;width:32px;height:30px;padding:4px 0;position:relative}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;width:24px;height:24px;margin:0 auto;line-height:24px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.start-date .el-date-table-cell__text,.el-date-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.start-date .el-date-table-cell,.el-date-table td.end-date .el-date-table-cell{color:#fff}.el-date-table td.start-date .el-date-table-cell__text,.el-date-table td.end-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff;border-radius:15px}.el-date-table td.week{color:var(--el-datepicker-off-text-color);cursor:default;font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{color:var(--el-datepicker-header-text-color);border-bottom:solid 1px var(--el-border-color-lighter);padding:5px;font-weight:400}.el-date-table th.el-date-table__week-header{width:24px;padding:0}.el-month-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-month-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.el-month-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.start-date .el-date-table-cell__text,.el-month-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-month-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-month-table td .el-date-table-cell__text{width:54px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-month-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.start-date .el-date-table-cell,.el-month-table td.end-date .el-date-table-cell{color:#fff}.el-month-table td.start-date .el-date-table-cell__text,.el-month-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.el-year-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-year-table td.today.start-date .el-date-table-cell__text,.el-year-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-year-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-year-table td .el-date-table-cell__text{width:60px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-year-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-year-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-year-table td.start-date .el-date-table-cell,.el-year-table td.end-date .el-date-table-cell{color:#fff}.el-year-table td.start-date .el-date-table-cell__text,.el-year-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{vertical-align:top;width:50%;max-height:192px;display:inline-block;position:relative;overflow:auto}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);width:100%;z-index:var(--el-index-normal);text-align:center;cursor:pointer;height:30px;font-size:12px;line-height:30px;position:absolute;left:0}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{text-align:center;padding:0}.el-time-spinner__list{text-align:center;margin:0;padding:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";width:100%;height:80px;display:block}.el-time-spinner__item{height:32px;color:var(--el-text-color-regular);font-size:12px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;text-align:left;vertical-align:middle;position:relative}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__icon{height:inherit;color:var(--el-text-color-placeholder);float:left;font-size:14px}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;width:39%;height:30px;line-height:30px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:#0000;border:none;outline:none;margin:0;padding:0;display:inline-block}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{overflow-wrap:break-word;height:100%;color:var(--el-text-color-primary);flex:1;justify-content:center;align-items:center;margin:0;padding:0 5px;font-size:14px;display:inline-flex}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer;font-size:14px}.el-date-editor .el-range__close-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{vertical-align:middle;align-items:center;padding:0 10px;display:inline-flex}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{height:38px;font-size:14px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{height:22px;font-size:12px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:hover,.el-range-editor.is-disabled:focus{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-datepicker-bg-color);border-radius:var(--el-popper-border-radius,var(--el-border-radius-base));line-height:30px}.el-picker-panel .el-time-panel{border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-datepicker-bg-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body:after,.el-picker-panel__body-wrapper:after{content:"";clear:both;display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);text-align:right;background-color:var(--el-datepicker-bg-color);padding:4px 12px;font-size:0;position:relative}.el-picker-panel__shortcut{width:100%;color:var(--el-datepicker-text-color);text-align:left;cursor:pointer;background-color:#0000;border:0;outline:none;padding-left:12px;font-size:14px;line-height:28px;display:block}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{color:var(--el-datepicker-active-color);background-color:#e6f1fe}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);cursor:pointer;background-color:#0000;border-radius:2px;outline:none;padding:0 20px;font-size:12px;line-height:24px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{color:var(--el-datepicker-icon-color);cursor:pointer;background:0 0;border:0;outline:none;margin-top:8px;padding:1px 6px;font-size:12px;line-height:1}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn.is-disabled .el-icon{cursor:inherit}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel.is-disabled .el-picker-panel__prev-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__prev-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__prev-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__next-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__next-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__next-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__icon-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__icon-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__icon-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__shortcut{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__shortcut:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__shortcut .el-icon{cursor:inherit}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;padding-top:6px;position:absolute;top:0;bottom:0;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);--el-datepicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-datepicker-bg-color);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-picker__header{text-align:center;padding:12px 12px 0}.el-date-picker__header--bordered{border-bottom:solid 1px var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{text-align:center;padding:10px}.el-date-picker__time-label{float:left;cursor:pointer;margin-left:10px;line-height:30px}.el-date-picker .el-time-panel{position:absolute}.el-date-picker.is-disabled .el-date-picker__header-label{color:var(--el-text-color-disabled)}.el-date-picker.is-disabled .el-date-picker__header-label:hover{cursor:not-allowed}.el-date-picker.is-disabled .el-date-picker__header-label .el-icon{cursor:inherit}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);--el-datepicker-bg-color:var(--el-bg-color-overlay);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker.single-panel{width:322px}.el-date-range-picker.single-panel .el-picker-panel__body{min-width:322px}.el-date-range-picker.single-panel.has-sidebar.has-time{width:434px}.el-date-range-picker.single-panel.has-sidebar{width:438px}.el-date-range-picker.single-panel .el-picker-panel__content{width:292px;margin:15px;padding:0;display:block;position:relative}.el-date-range-picker__header{text-align:center;height:28px;position:relative}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{margin-right:50px;font-size:16px;font-weight:500}.el-date-range-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-range-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-range-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-range-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-range-picker__content{box-sizing:border-box;width:50%;margin:0;padding:16px;display:table-cell}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-range-picker__time-header>.el-icon-arrow-right{vertical-align:middle;color:var(--el-datepicker-icon-color);font-size:20px;display:table-cell}.el-date-range-picker__time-picker-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{z-index:1;background:#fff;position:absolute;top:13px;right:0}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-date-range-picker.is-disabled .el-date-range-picker__header-label{color:var(--el-text-color-disabled)}.el-date-range-picker.is-disabled .el-date-range-picker__header-label:hover{cursor:not-allowed}.el-date-range-picker.is-disabled .el-date-range-picker__header-label .el-icon{cursor:inherit}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{text-align:center;z-index:1;padding:10px;position:relative}.el-time-range-picker__cell{box-sizing:border-box;width:50%;margin:0;padding:4px 7px 7px;display:inline-block}.el-time-range-picker__header{text-align:center;margin-bottom:5px;font-size:14px}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{width:180px;z-index:var(--el-index-top);-webkit-user-select:none;user-select:none;box-sizing:content-box;border-radius:2px;position:relative;left:0}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";z-index:-1;box-sizing:border-box;text-align:left;height:32px;margin-top:-16px;padding-top:6px;position:absolute;top:50%;left:0;right:0}.el-time-panel__content:after{margin-left:12%;margin-right:12%;left:50%}.el-time-panel__content:before{border-top:1px solid var(--el-border-color-light);border-bottom:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));text-align:right;box-sizing:border-box;height:36px;padding:4px;line-height:25px}.el-time-panel__btn{cursor:pointer;color:var(--el-text-color-primary);background-color:#0000;border:none;outline:none;margin:0 5px;padding:0 5px;font-size:12px;line-height:28px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter)}.el-picker-panel.is-border .el-picker-panel__body-wrapper{position:relative}.el-picker-panel.is-border.el-picker-panel [slot=sidebar],.el-picker-panel.is-border.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;height:100%;padding-top:6px;position:absolute;top:0;overflow:auto}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;text-align:left;font-size:14px;line-height:23px}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color);position:fixed;top:0;left:0}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width,50%);overflow-wrap:break-word;position:relative}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{margin:0;position:fixed;inset:0;overflow:auto}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size,16px))}.el-dialog__headerbtn{cursor:pointer;width:48px;height:48px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{position:fixed;inset:0;overflow:auto}.el-overlay-dialog.is-closing .el-dialog{pointer-events:none}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);width:100%;height:1px;margin:24px 0;display:block}.el-divider--vertical{vertical-align:middle;border-left:1px var(--el-border-color) var(--el-border-style);width:1px;height:1em;margin:0 8px;display:inline-block;position:relative}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);padding:0 20px;font-size:14px;font-weight:500;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%)translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;box-sizing:border-box;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);transition:all var(--el-transition-duration);flex-direction:column;display:flex;position:absolute}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{color:var(--el-text-color-primary);padding:var(--el-drawer-padding-primary);align-items:center;margin-bottom:32px;padding-bottom:0;display:flex;overflow:hidden}.el-drawer__header>:first-child{flex:1}.el-drawer__title{line-height:inherit;flex:1;margin:0;font-size:16px}.el-drawer__footer{padding:var(--el-drawer-padding-primary);text-align:right;padding-top:10px;overflow:hidden}.el-drawer__close-btn{cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:#0000;border:none;outline:none;display:inline-flex}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{padding:var(--el-drawer-padding-primary);flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{-webkit-user-select:none;user-select:none;background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:before{content:"";background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{height:100%;width:var(--el-drawer-dragger-size);cursor:ew-resize;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{width:3px;top:0;bottom:0}.el-drawer.ttb,.el-drawer.btt{width:100%;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger,.el-drawer.btt>.el-drawer__dragger{width:100%;height:var(--el-drawer-dragger-size);cursor:ns-resize;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger:before,.el-drawer.btt>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-from,.el-drawer-fade-enter-active,.el-drawer-fade-enter-to,.el-drawer-fade-leave-from,.el-drawer-fade-leave-active,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:#0000!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);vertical-align:top;line-height:1;display:inline-flex;position:relative}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;margin:0;padding:0;list-style:none}.el-dropdown .el-dropdown__caret-button{border-left:none;justify-content:center;align-items:center;width:32px;padding-left:0;padding-right:0;display:inline-flex}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";background:var(--el-overlay-color-lighter);width:1px;display:block;position:absolute;top:-1px;bottom:-1px;left:0}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{z-index:var(--el-dropdown-menu-index);background-color:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);box-shadow:none;border:none;margin:0;padding:5px 0;list-style:none;position:relative;top:0;left:0}.el-dropdown-menu__item{white-space:nowrap;line-height:22px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:none;align-items:center;margin:0;padding:5px 16px;list-style:none;display:flex}.el-dropdown-menu__item:not(.is-disabled):hover,.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;font-size:14px;line-height:22px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;font-size:12px;line-height:20px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;user-select:none;vertical-align:top;object-fit:contain;width:100%;height:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;vertical-align:top;width:100%;height:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{font-size:var(--el-font-size-base);color:var(--el-text-color-secondary);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.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-form-item{--font-size:14px;margin-bottom:18px;display:flex}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{text-align:left;justify-content:flex-start}.el-form-item--label-right .el-form-item__label{text-align:right;justify-content:flex-end}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{text-align:left;width:-moz-fit-content;width:fit-content;height:auto;margin-bottom:8px;padding-right:0;line-height:22px;display:block}.el-form-item__label-wrap{display:flex}.el-form-item__label{font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);box-sizing:border-box;flex:none;align-items:flex-start;height:32px;padding:0 12px 0 0;line-height:32px;display:inline-flex}.el-form-item__content{line-height:32px;font-size:var(--font-size);flex-wrap:wrap;flex:1;align-items:center;min-width:0;display:flex;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);padding-top:2px;font-size:12px;line-height:1;position:absolute;top:100%;left:0}.el-form-item__error--inline{margin-left:10px;display:inline-block;position:relative;top:auto;left:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field:hover,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field:focus,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field.is-focus,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:hover:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:focus:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field.is-focus:after{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px #0000}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{vertical-align:middle;margin-right:32px;display:inline-flex}.el-form--inline .el-form-item:last-child{margin-right:0}.el-form--inline.el-form--label-top{flex-wrap:wrap;display:flex}.el-form--inline.el-form--label-top .el-form-item{display:block}.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-image-viewer__wrapper{position:fixed;inset:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{z-index:1;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{width:40px;height:40px;font-size:40px;top:40px;right:40px}.el-image-viewer__canvas{-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:static}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;height:44px;padding:0 23px;bottom:30px;left:50%;transform:translate(-50%)}.el-image-viewer__actions__inner{cursor:default;color:#fff;justify-content:space-around;align-items:center;gap:22px;width:100%;height:100%;padding:0 6px;font-size:23px;display:flex}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{cursor:default;color:#fff;bottom:90px;left:50%;transform:translate(-50%)}.el-image-viewer__prev{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;left:40px;transform:translateY(-50%)}.el-image-viewer__next{text-indent:2px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;right:40px;transform:translateY(-50%)}.el-image-viewer__close{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px}.el-image-viewer__mask{opacity:.5;background:#000;width:100%;height:100%;position:absolute;top:0;left:0}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}.el-image__error,.el-image__placeholder,.el-image__wrapper,.el-image__inner{width:100%;height:100%}.el-image{display:inline-block;position:relative;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle;justify-content:center;align-items:center;font-size:14px;display:flex}.el-image__preview{cursor:pointer}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height,32px) - 2px)}.el-input__inner{-webkit-appearance:none;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.el-input .el-input__clear{transition:color var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height,40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height,24px) - 2px)}.el-input-group{align-items:stretch;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{color:inherit;background-color:#0000;border-color:#0000}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important}.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__increase,.el-input-number.is-controls-right .el-input-number__decrease{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--el-input-number-controls-height:11px}.el-input-tag{--el-input-tag-border-color-hover:var(--el-border-color-hover);--el-input-tag-placeholder-color:var(--el-text-color-placeholder);--el-input-tag-disabled-color:var(--el-disabled-text-color);--el-input-tag-disabled-border:var(--el-disabled-border-color);--el-input-tag-font-size:var(--el-font-size-base);--el-input-tag-close-hover-color:var(--el-text-color-secondary);--el-input-tag-text-color:var(--el-text-color-regular);--el-input-tag-input-focus-border-color:var(--el-color-primary);--el-input-tag-width:100%;--el-input-tag-mini-height:var(--el-component-size);--el-input-tag-gap:6px;--el-input-tag-padding:4px;--el-input-tag-inner-padding:8px;--el-input-tag-line-height:24px;box-sizing:border-box;cursor:pointer;font-size:var(--el-input-tag-font-size);padding:var(--el-input-tag-padding);width:var(--el-input-tag-width);min-height:var(--el-input-tag-mini-height);line-height:var(--el-input-tag-line-height);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;display:flex;transform:translate(0)}.el-input-tag.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-tag.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-input-tag.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled:hover{box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input-tag.is-disabled .el-input-tag__inner .el-input-tag__input,.el-input-tag.is-disabled .el-input-tag__inner .el-tag{cursor:not-allowed}.el-input-tag__prefix{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;display:flex}.el-input-tag__suffix{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:8px;display:flex}.el-input-tag__collapse-tag{line-height:1}.el-input-tag__input-tag-list{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-input-tag__input-tag-list.is-near{margin-left:-8px}.el-input-tag__input-tag-list .el-tag{cursor:pointer;border-color:#0000}.el-input-tag__input-tag-list .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__input-tag-list .el-tag .el-tag__content{min-width:0}.el-input-tag__inner{align-items:center;gap:var(--el-input-tag-gap);flex-wrap:wrap;flex:1;min-width:0;max-width:100%;display:flex;position:relative}.el-input-tag__inner.is-left-space{margin-left:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-right-space{margin-right:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-draggable .el-tag{cursor:move;-webkit-user-select:none;user-select:none}.el-input-tag__drop-indicator{width:1px;height:var(--el-input-tag-line-height);background-color:var(--el-color-primary);position:absolute;top:0}.el-input-tag__inner .el-tag{cursor:pointer;border-color:#0000;max-width:100%}.el-input-tag__inner .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__inner .el-tag .el-tag__content{text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:normal;overflow:hidden}.el-input-tag__input-wrapper{flex:1}.el-input-tag__input{color:var(--el-input-tag-text-color);font-size:inherit;font-family:inherit;line-height:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;padding:0}.el-input-tag__input::placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-input-tag--large{--el-input-tag-gap:6px;--el-input-tag-padding:8px;--el-input-tag-padding-left:8px;--el-input-tag-font-size:14px}.el-input-tag--small{--el-input-tag-gap:4px;--el-input-tag-padding:2px;--el-input-tag-padding-left:6px;--el-input-tag-font-size:12px;--el-input-tag-line-height:20px;--el-input-tag-mini-height:var(--el-component-size-small)}.el-input-otp{--el-input-otp-text-color:var(--el-text-color-regular);--el-input-otp-field-width:calc(var(--el-input-otp-size) - 4px);--el-input-otp-gap:8px;--el-input-otp-font-size:14px;--el-input-otp-size:32px}.el-input-otp--large{--el-input-otp-gap:12px;--el-input-otp-font-size:14px;--el-input-otp-size:40px}.el-input-otp--small{--el-input-otp-gap:6px;--el-input-otp-font-size:12px;--el-input-otp-size:24px}.el-input-otp{align-items:center;column-gap:var(--el-input-otp-gap);font-size:var(--el-input-otp-font-size);height:var(--el-input-otp-size);flex-wrap:nowrap;display:inline-flex}.el-input-otp.is-disabled,.el-input-otp.is-disabled .el-input-otp__input{cursor:not-allowed}.el-input-otp__input-field{width:var(--el-input-otp-field-width,calc(var(--el-input-otp-size) - 4px));border-radius:var(--el-border-radius-base);height:100%;position:relative}.el-input-otp__input{text-align:center;width:100%;height:100%;line-height:1;font-size:inherit;color:var(--el-input-otp-text-color,var(--el-text-color-regular));background-color:#0000;border:none;outline:none;padding:0}.el-input-otp.is-disabled .el-input-otp__input{color:var(--el-text-color-disabled)}.el-input-otp--outlined .el-input-otp__input-field{box-shadow:0 0 0 1px var(--el-border-color) inset}.el-input-otp--outlined .el-input-otp__input-field:hover{box-shadow:0 0 0 1px var(--el-color-primary-light-5) inset}.el-input-otp--outlined .el-input-otp__input-field:focus-within{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-otp--outlined.is-disabled .el-input-otp__input-field{background-color:var(--el-fill-color-light)}.el-input-otp--outlined.is-disabled .el-input-otp__input-field:hover{box-shadow:0 0 0 1px var(--el-border-color) inset}.el-input-otp--filled .el-input-otp__input-field{background-color:var(--el-fill-color)}.el-input-otp--filled .el-input-otp__input-field:hover{background-color:var(--el-fill-color-dark)}.el-input-otp--filled .el-input-otp__input-field:focus-within{background-color:var(--el-fill-color-blank);box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-otp--filled.is-disabled .el-input-otp__input-field,.el-input-otp--filled.is-disabled .el-input-otp__input-field:hover{background-color:var(--el-fill-color-light)}.el-input-otp--underlined .el-input-otp__input-field:after{content:"";background-color:var(--el-border-color);width:100%;height:1px;display:block;position:absolute;bottom:0;left:0}.el-input-otp--underlined .el-input-otp__input-field:hover:after{background-color:var(--el-color-primary-light-5)}.el-input-otp--underlined .el-input-otp__input-field:focus-within:after{background-color:var(--el-color-primary)}.el-input-otp--underlined.is-disabled .el-input-otp__input-field:hover:after{background-color:var(--el-border-color)}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);vertical-align:middle;cursor:pointer;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color);outline:none;flex-direction:row;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex;position:relative}.el-link.is-hover-underline:hover:after{content:"";border-bottom:1px solid var(--el-link-hover-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link.is-underline:after{content:"";border-bottom:1px solid var(--el-link-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link:hover:after{border-color:var(--el-link-hover-text-color)}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link__inner{justify-content:center;align-items:center;display:inline-flex}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link.is-disabled:after{border-color:var(--el-link-disabled-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{z-index:2000;background-color:var(--el-mask-color);transition:opacity var(--el-transition-duration);margin:0;position:absolute;inset:0}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size)) / 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size)) / 2);text-align:center;width:100%;position:absolute;top:50%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:2s linear infinite loading-rotate;display:inline}.el-loading-spinner .path{stroke-dasharray:90 150;stroke-dashoffset:0;stroke-width:2px;stroke:var(--el-color-primary);stroke-linecap:round;animation:1.5s ease-in-out infinite loading-dash}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1 200;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-40px}to{stroke-dasharray:90 150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}: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}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word;display:inline-block;position:relative;overflow:hidden}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{text-align:center;padding:16px;position:fixed;inset:0;overflow:auto}.is-message-box .el-overlay-message-box:after{content:"";vertical-align:middle;width:0;height:100%;display:inline-block}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size,16px))}.el-message-box__title{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{width:40px;height:40px;font-size:var(--el-message-close-size,16px);cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;gap:12px;display:flex}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{min-width:0;margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{padding-top:var(--el-messagebox-padding-primary);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.el-message-box--center .el-message-box__title{justify-content:center;align-items:center;gap:6px;display:flex}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);background-color:var(--el-message-bg-color);width:max-content;max-width:calc(100% - 32px);transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;padding:var(--el-message-padding);align-items:center;gap:8px;display:flex;position:fixed}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:50%;transform:translate(-50%)}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0}.el-message-fade-enter-from.is-left,.el-message-fade-enter-from.is-right,.el-message-fade-leave-to.is-left,.el-message-fade-leave-to.is-right{transform:translateY(-100%)}.el-message-fade-enter-from.is-left.is-bottom,.el-message-fade-enter-from.is-right.is-bottom,.el-message-fade-leave-to.is-left.is-bottom,.el-message-fade-leave-to.is-right.is-bottom{transform:translateY(100%)}.el-message-fade-enter-from.is-center,.el-message-fade-leave-to.is-center{transform:translate(-50%,-100%)}.el-message-fade-enter-from.is-center.is-bottom,.el-message-fade-leave-to.is-center.is-bottom{transform:translate(-50%,100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);overflow-wrap:break-word;z-index:9999;display:flex;position:fixed;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{min-width:0;margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right);flex:1}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);color:var(--el-notification-content-color);margin:6px 0 0;line-height:24px}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size);flex-shrink:0}.el-notification .el-notification__closeBtn{cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size);position:absolute;top:18px;right:15px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--primary{--el-notification-icon-color:var(--el-color-primary);color:var(--el-notification-icon-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{z-index:2000;background-color:var(--el-overlay-color-lighter);height:100%;position:fixed;inset:0;overflow:auto}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{justify-content:space-between;align-items:center;line-height:24px;display:flex}.el-page-header__left{align-items:center;margin-right:40px;display:flex;position:relative}.el-page-header__back{cursor:pointer;align-items:center;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;margin-right:10px;font-size:16px;display:flex}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);align-items:center;font-weight:400;display:flex}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select{width:128px}.el-pagination .btn-prev,.el-pagination .btn-next{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pagination .btn-prev *,.el-pagination .btn-next *{pointer-events:none}.el-pagination .btn-prev:focus,.el-pagination .btn-next:focus{outline:none}.el-pagination .btn-prev:hover,.el-pagination .btn-next:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-prev.is-active,.el-pagination .btn-next.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-prev.is-active.is-disabled,.el-pagination .btn-next.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-prev:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-next.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-prev .el-icon,.el-pagination .btn-next .el-icon{width:inherit;font-size:12px;font-weight:700;display:block}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);font-weight:400}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);align-items:center;font-weight:400;display:flex}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;justify-content:flex-end;align-items:center;display:flex}.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .el-pager li:disabled,.el-pagination.is-background .el-pager li.is-disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-prev,.el-pagination--small .btn-next,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small span:not([class*=suffix]),.el-pagination--small button{font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-prev,.el-pagination--large .btn-next,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{-webkit-user-select:none;user-select:none;align-items:center;margin:0;padding:0;font-size:0;list-style:none;display:flex}.el-pager li{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li:disabled,.el-pager li.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm{outline:none}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);min-width:150px;padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);overflow-wrap:break-word;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);margin-bottom:12px;line-height:1}.el-popover__reference:focus:not(.focusing),.el-popover__reference:focus:hover{outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus:active,.el-popover.el-popper:focus{outline-width:0}.el-progress{align-items:center;line-height:1;display:flex;position:relative}.el-progress__text{color:var(--el-text-color-regular);min-width:50px;margin-left:5px;font-size:14px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{text-align:center;width:100%;margin:0;position:absolute;top:50%;left:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{margin-right:0;padding-right:0;display:block}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);vertical-align:middle;border-radius:100px;height:6px;position:relative;overflow:hidden}.el-progress-bar__inner{background-color:var(--el-color-primary);text-align:right;white-space:nowrap;border-radius:100px;height:100%;line-height:1;transition:width .6s;position:absolute;top:0;left:0}.el-progress-bar__inner:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-progress-bar__inner--indeterminate{animation:3s infinite indeterminate;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,#0000001a 25%,#0000 25% 50%,#0000001a 50% 75%,#0000 75%,#0000);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:3s linear infinite striped-flow}.el-progress-bar__innerText{vertical-align:middle;color:#fff;margin:0 5px;font-size:12px;display:inline-block}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);outline:none;display:inline-block;position:relative}.el-radio-button__inner{white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);line-height:1;font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio{opacity:0;z-index:-1;outline:none;position:absolute}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{font-size:var(--el-font-size-base);border-radius:0;padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;padding:5px 11px;font-size:12px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{flex-wrap:wrap;align-items:center;font-size:0;display:inline-flex}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);cursor:pointer;white-space:nowrap;font-size:var(--el-font-size-base);-webkit-user-select:none;user-select:none;outline:none;align-items:center;height:32px;margin-right:30px;display:inline-flex;position:relative}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{width:12px;height:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;vertical-align:middle;outline:none;display:inline-flex;position:relative}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%)scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);cursor:pointer;box-sizing:border-box;transition:all .3s;display:inline-block;position:relative}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";width:4px;height:4px;transition:transform .15s ease-in;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(0)}.el-radio__original{opacity:0;z-index:-1;outline:none;margin:0;position:absolute;inset:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);--el-rate-outline-color:var(--el-color-primary-light-5);align-items:center;height:32px;display:inline-flex}.el-rate:focus,.el-rate:active{outline:none}.el-rate:focus-visible .el-rate__item .el-rate__icon.is-focus-visible{outline:2px solid var(--el-rate-outline-color);transition:outline-offset,outline}.el-rate__item{cursor:pointer;vertical-align:middle;color:var(--el-rate-void-color);font-size:0;line-height:normal;display:inline-block;position:relative}.el-rate .el-rate__icon{font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration);display:inline-block;position:relative}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;position:absolute;top:0;left:0;overflow:hidden}.el-rate__decimal--box{position:absolute;top:0;left:0}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{cursor:not-allowed;color:var(--el-rate-disabled-void-color)}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;text-align:center;box-sizing:border-box;padding:var(--el-result-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);margin:0;line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{font-size:var(--el-font-size-base);color:var(--el-text-color-regular);margin:0;line-height:1.3}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;flex-wrap:wrap;display:flex;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);width:100%;height:16px;display:inline-block}.el-skeleton__circle{width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);border-radius:50%}.el-skeleton__button{border-radius:4px;width:64px;height:40px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;border-radius:0;justify-content:center;align-items:center;display:flex}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@keyframes el-skeleton-loading{0%{background-position:100%}to{background-position:0}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;animation:1.4s infinite el-skeleton-loading}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;width:100%;height:32px;display:flex}.el-slider__runway{height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;position:relative}.el-slider__runway.show-input{width:auto;margin-right:30px}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed;transform:scale(1)}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);z-index:1;top:var(--el-slider-button-wrapper-offset);text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;outline:none;line-height:normal;position:absolute;transform:translate(-50%)}.el-slider__button-wrapper:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{transform:scale(1.2)}.el-slider__button:hover,.el-slider__button.hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);position:absolute;transform:translate(-50%)}.el-slider__marks{width:18px;height:100%;top:0;left:12px}.el-slider__marks-text{color:var(--el-color-info);white-space:pre;margin-top:15px;font-size:14px;position:absolute;transform:translate(-50%)}.el-slider.is-vertical{flex:0;width:auto;height:100%;display:inline-flex;position:relative}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);border-radius:0 0 3px 3px;height:auto}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{vertical-align:top;display:inline-flex}.el-space__item{flex-wrap:wrap;display:flex}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{vertical-align:middle;display:inline-block}.el-spinner-inner{width:50px;height:50px;animation:2s linear infinite rotate}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:1.5s ease-in-out infinite dash}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1 150;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-35px}to{stroke-dasharray:90 150;stroke-dashoffset:-124px}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-grow:0;flex-shrink:0;flex-basis:auto!important}.el-step:last-of-type .el-step__main,.el-step:last-of-type .el-step__description{padding-right:0}.el-step__head{width:100%;position:relative}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{z-index:1;box-sizing:border-box;background:var(--el-bg-color);justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;transition:all .15s ease-out;display:inline-flex;position:relative}.el-step__icon.is-text{border:2px solid;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;user-select:none;text-align:center;color:inherit;font-weight:700;line-height:1;display:inline-block}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:currentColor;position:absolute}.el-step__line-inner{box-sizing:border-box;border:1px solid;width:0;height:0;transition:all .15s ease-out;display:block}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{margin-top:-5px;padding-right:10%;font-size:12px;font-weight:400;line-height:20px}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{padding-bottom:8px;line-height:24px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-vertical .el-step__description{padding-right:0}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{width:auto;padding-right:10px;font-size:0}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8)translateY(1px)}.el-step.is-simple .el-step__main{flex-grow:1;align-items:stretch;display:flex;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{overflow-wrap:break-word;max-width:50%}.el-step.is-simple .el-step__arrow{flex-grow:1;justify-content:center;align-items:center;display:flex}.el-step.is-simple .el-step__arrow:before,.el-step.is-simple .el-step__arrow:after{content:"";background:var(--el-text-color-placeholder);width:1px;height:15px;display:inline-block;position:absolute}.el-step.is-simple .el-step__arrow:before{transform-origin:0 0;transform:rotate(-45deg)translateY(-4px)}.el-step.is-simple .el-step__arrow:after{transform-origin:100% 100%;transform:rotate(45deg)translateY(4px)}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{line-height:normal;display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);vertical-align:middle;align-items:center;height:32px;font-size:14px;line-height:20px;display:inline-flex;position:relative}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);cursor:pointer;vertical-align:middle;height:20px;color:var(--el-text-color-primary);font-size:14px;font-weight:500;display:inline-block}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{font-size:14px;line-height:1;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{opacity:0;width:0;height:0;margin:0;position:absolute}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;min-width:40px;height:20px;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration);border-radius:10px;outline:none;align-items:center;display:inline-flex;position:relative}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);justify-content:center;align-items:center;height:16px;padding:0 4px 0 18px;display:flex;overflow:hidden}.el-switch__core .el-switch__inner-wrapper{color:var(--el-color-white);-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;align-items:center;font-size:12px;display:flex;overflow:hidden}.el-switch__core .el-switch__action{border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);background-color:var(--el-color-white);width:16px;height:16px;color:var(--el-switch-off-color);justify-content:center;align-items:center;display:flex;position:absolute;left:1px}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{height:40px;font-size:14px;line-height:24px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;min-width:50px;height:24px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{height:24px;font-size:12px;line-height:16px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;min-width:30px;height:16px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;background-color:#fff;border-radius:2px}.el-table-filter__list{outline:none;min-width:100px;margin:0;padding:5px 0;list-style:none}.el-table-filter__list-item{cursor:pointer;line-height:36px;font-size:var(--el-font-size-base);outline:none;padding:0 10px}.el-table-filter__list-item:hover,.el-table-filter__list-item:focus{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button{color:var(--el-text-color-regular);font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{height:unset;align-items:center;margin-bottom:12px;margin-left:5px;margin-right:5px;display:flex}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-fill-color-blank);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);box-sizing:border-box;background-color:var(--el-table-bg-color);width:100%;max-width:100%;height:-moz-fit-content;height:fit-content;font-size:var(--el-font-size-base);color:var(--el-table-text-color);position:relative;overflow:hidden}.el-table__inner-wrapper{flex-direction:column;height:100%;display:flex;position:relative}.el-table__inner-wrapper:before{height:1px;bottom:0;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell,.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell{border-bottom-color:#0000}.el-table__empty-block{text-align:center;justify-content:center;align-items:center;width:100%;min-height:60px;display:flex;position:sticky;left:0}.el-table__empty-text{width:50%;color:var(--el-text-color-secondary);line-height:60px}.el-table__expand-column .cell{text-align:center;-webkit-user-select:none;user-select:none;padding:0}.el-table__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon{color:var(--el-text-color-regular);width:min(23px,100%);height:23px;font-size:12px;line-height:12px}.el-table__expand-icon.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:#0000!important}.el-table__placeholder{width:20px;display:inline-block}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;text-align:left;min-width:0;z-index:var(--el-table-index);padding:8px 0;position:relative}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;width:15px;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;padding:0 12px;line-height:23px;overflow:hidden}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table th.el-table__cell.is-leaf,.el-table td.el-table__cell{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{content:"";vertical-align:middle;background:#ff4d51;border-radius:50%;width:8px;height:8px;margin-right:5px;display:inline-block}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border:after,.el-table--border:before,.el-table--border .el-table__inner-wrapper:after,.el-table__inner-wrapper:before{content:"";background-color:var(--el-table-border-color);z-index:calc(var(--el-table-index) + 2);position:absolute}.el-table--border .el-table__inner-wrapper:after{width:100%;height:1px;z-index:calc(var(--el-table-index) + 2);top:0;left:0}.el-table--border:before{width:1px;height:100%;top:-1px;left:0}.el-table--border:after{width:1px;height:100%;top:-1px;right:0}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%}.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right,.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right{background:inherit;z-index:calc(var(--el-table-index) + 1);position:sticky!important}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{content:"";width:10px;box-shadow:none;touch-action:none;pointer-events:none;position:absolute;top:0;bottom:0;overflow:hidden}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch,.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch{z-index:calc(var(--el-table-index) + 1);background:#fff;right:0;position:sticky!important}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__header-wrapper .el-table-column--selection>.cell,.el-table__body-wrapper .el-table-column--selection>.cell{align-items:center;height:23px;display:inline-flex}.el-table__header-wrapper .el-table-column--selection .el-checkbox,.el-table__body-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;position:relative;overflow:hidden}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .caret-wrapper{vertical-align:middle;width:24px;height:14px;overflow:initial;flex-direction:column;align-items:center;display:inline-flex;position:relative}.el-table .sort-caret{border:5px solid #0000;width:0;height:0;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;z-index:-1;position:absolute}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{z-index:calc(var(--el-table-index) + 2);position:sticky;top:0}.el-table.el-table--scrollable-y .el-table__body-footer{z-index:calc(var(--el-table-index) + 2);position:sticky;bottom:0}.el-table__column-resize-proxy{border-left:var(--el-table-border);width:0;z-index:calc(var(--el-table-index) + 9);position:absolute;top:0;bottom:0;left:200px}.el-table__column-filter-trigger{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger{display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);vertical-align:middle;font-size:14px}.el-table__border-left-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0;left:0}.el-table__border-bottom-patch{height:1px;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;left:0}.el-table__border-right-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s 1ms}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{text-align:center;width:20px;display:inline-block}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-fill-color-blank);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);font-size:var(--el-font-size-base)}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__vertical,.el-table-v2__left .el-vl__horizontal{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;right:0;overflow:hidden;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__vertical,.el-table-v2__right .el-vl__horizontal{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{position:relative;overflow:hidden}.el-table-v2__header .el-checkbox{z-index:0}.el-table-v2__footer{position:absolute;bottom:0;left:0;right:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{z-index:9999;position:absolute;inset:0}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{-webkit-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color);height:100%;color:var(--el-table-header-text-color);align-items:center;padding:0 8px;font-weight:700;display:flex;overflow:hidden}.el-table-v2__header-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__header-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__sort-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{opacity:1;display:flex}.el-table-v2__row{border-bottom:var(--el-table-border);transition:background-color var(--el-transition-duration);align-items:center;display:flex}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;height:100%;padding:0 8px;display:flex;overflow:hidden}.el-table-v2__row-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__row-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__expand-icon{-webkit-user-select:none;user-select:none;margin:0 4px}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{justify-content:space-between;align-items:center;margin:0 0 15px;padding:0;display:flex;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);z-index:1;height:2px;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none;position:absolute;bottom:0;left:0}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{border:1px solid var(--el-border-color);text-align:center;width:20px;height:20px;color:var(--el-text-color-primary);cursor:pointer;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin:10px 0 10px 10px;font-size:12px;line-height:20px;transition:all .15s;display:flex}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:auto;margin-bottom:-1px;position:relative;overflow:hidden}.el-tabs__nav-wrap:after{content:"";background-color:var(--el-border-color-light);width:100%;height:2px;z-index:var(--el-index-normal);position:absolute;bottom:0;left:0}.el-tabs__nav-wrap.is-bottom:after{top:0;bottom:auto}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{cursor:pointer;color:var(--el-text-color-secondary);text-align:center;width:20px;font-size:12px;line-height:44px;position:absolute}.el-tabs__nav-next.is-disabled,.el-tabs__nav-prev.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1);display:flex;position:relative}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{text-align:center;flex:1}.el-tabs__item{height:var(--el-tabs-header-height);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary);justify-content:center;align-items:center;padding:0 20px;font-weight:500;list-style:none;display:flex;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border-radius:50%;margin-left:5px}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;position:relative;overflow:hidden}.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--top>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height);box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);box-sizing:border-box;border-bottom:none;border-radius:4px 4px 0 0}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{transform-origin:100%;width:0;height:14px;font-size:12px;position:relative;right:-2px;overflow:hidden}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid #0000;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-top:-1px}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);color:var(--el-text-color-secondary);border:1px solid #0000;margin-top:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child,.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-top:10px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid #0000}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-scroll{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{width:2px;height:auto;top:0;bottom:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{text-align:center;cursor:pointer;width:100%;height:30px;line-height:30px}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled{cursor:not-allowed}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{top:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{width:2px;height:100%;top:0;bottom:auto}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__active-bar.is-left{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right-color:#fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-right:none;border-radius:4px 0 0 4px}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid #0000;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 #0000}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left-color:#fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid #0000;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 #0000}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInRight-transition,.slideInLeft-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);position:absolute;left:0;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);position:absolute;left:0;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(100%)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(-100%)}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag .el-tag__close .el-icon{display:flex}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);font-size:var(--el-text-font-size);color:var(--el-text-color);overflow-wrap:break-word;align-self:center;margin:0;padding:0}.el-text.is-truncated{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline-block;overflow:hidden}.el-text.is-line-clamp{-webkit-box-orient:vertical;display:-webkit-inline-box;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{min-width:0;margin:5px 0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{box-sizing:content-box;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);box-sizing:border-box;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__node--normal{width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{width:var(--el-timeline-node-size-large);height:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline-item.is-start .el-timeline-item__wrapper{padding-left:28px}.el-timeline-item.is-start .el-timeline-item__tail{left:4px}.el-timeline-item.is-start .el-timeline-item__node--normal{left:-1px}.el-timeline-item.is-start .el-timeline-item__node--large{left:-2px}.el-timeline-item.is-end .el-timeline-item__wrapper{text-align:right;padding-right:28px}.el-timeline-item.is-end .el-timeline-item__tail{right:4px}.el-timeline-item.is-end .el-timeline-item__node--normal{right:-1px}.el-timeline-item.is-end .el-timeline-item__node--large{right:-2px}.el-timeline-item.is-alternate .el-timeline-item__tail,.el-timeline-item.is-alternate .el-timeline-item__node,.el-timeline-item.is-alternate-reverse .el-timeline-item__tail,.el-timeline-item.is-alternate-reverse .el-timeline-item__node{left:50%;transform:translate(-50%)}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{height:calc(50% - 10px);display:block}.el-timeline.is-start{padding-left:40px;padding-right:0}.el-timeline.is-end{padding-left:0;padding-right:40px}.el-timeline.is-alternate{padding-left:20px;padding-right:20px}.el-timeline.is-alternate .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.el-timeline.is-alternate .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse{padding-left:20px;padding-right:20px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{vertical-align:middle;padding:0 30px;display:inline-block}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);box-sizing:border-box;max-height:100%;display:inline-block;position:relative;overflow:hidden}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0}.el-transfer-panel__list{height:var(--el-transfer-panel-body-height);box-sizing:border-box;margin:0;padding:6px 0;list-style:none;overflow:auto}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular);margin-right:30px}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;width:100%;line-height:var(--el-transfer-item-height);padding-left:22px;display:block;overflow:hidden}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;box-sizing:border-box;padding:15px}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);box-sizing:border-box;width:100%;font-size:12px;display:inline-block}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:var(--el-transfer-panel-header-height);background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);align-items:center;margin:0;padding-left:15px;display:flex}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;width:100%;display:flex;position:relative}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{min-width:0;color:var(--el-text-color-primary);flex:1;align-items:center;font-size:16px;font-weight:400;display:flex}.el-transfer-panel .el-transfer-panel__header-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.el-transfer-panel .el-transfer-panel__header-count{color:var(--el-text-color-secondary);flex-shrink:0;margin-left:8px;margin-right:15px;font-size:12px}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);color:var(--el-text-color-secondary);text-align:center;margin:0;padding:6px 15px 0}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{text-align:center;width:100%;height:100%;min-height:60px;position:relative}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;position:absolute;left:0;right:0}.el-tree-node{white-space:nowrap;outline:none}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);height:var(--el-tree-node-content-height);cursor:pointer;align-items:center;display:flex}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:var(--el-tree-expand-icon-color);transition:transform var(--el-transition-duration) ease-in-out;font-size:12px;transform:rotate(0)}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:#0000;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:#0000;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__list>.el-select-dropdown__item{padding-left:32px}.el-tree-select__popper .el-select-dropdown__item{flex:1;height:20px;padding-left:0;line-height:20px;background:0 0!important}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;cursor:pointer;outline:none;justify-content:center;align-items:center;display:inline-flex}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{border-color:var(--el-border-color-darker);color:inherit}.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);margin-top:7px;font-size:12px}.el-upload iframe{z-index:-1;opacity:0;filter:alpha(opacity=0);position:absolute;top:0;left:0}.el-upload--picture-card{background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);box-sizing:border-box;text-align:center;cursor:pointer;border-radius:6px;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);margin-bottom:16px;font-size:67px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);text-align:center;font-size:14px}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{color:var(--el-text-color-regular);box-sizing:border-box;border-radius:4px;width:100%;margin-bottom:5px;font-size:14px;transition:all .5s cubic-bezier(.55,0,.1,1);position:relative}.el-upload-list__item .el-progress{width:100%;position:absolute;top:20px}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);display:none;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{cursor:pointer;opacity:1;color:var(--el-color-primary);font-size:12px;font-style:normal;display:none;position:absolute;top:1px;right:5px}.el-upload-list__item:hover,.el-upload-list__item:focus-within{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close,.el-upload-list__item:focus-within .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-icon--close-tip,.el-upload-list__item:focus-within .el-icon--close-tip{right:24px}.el-upload-list__item:hover .el-progress__text,.el-upload-list__item:focus-within .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{flex-direction:column;justify-content:center;width:calc(100% - 30px);margin-left:4px;display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0}.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip,.el-upload-list__item.is-success:active .el-icon--close-tip{display:none}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus-within .el-upload-list__item-status-label{opacity:0;display:none}.el-upload-list__item-name{color:var(--el-text-color-regular);text-align:center;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base);align-items:center;padding:0 4px;display:inline-flex}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-upload-list__item-status-label{line-height:inherit;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;display:none;position:absolute;top:0;right:5px}.el-upload-list__item-delete{color:var(--el-text-color-regular);font-size:12px;display:none;position:absolute;top:0;right:10px}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{flex-wrap:wrap;margin:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);border-radius:6px;margin:0 8px 8px 0;padding:0;display:inline-flex;overflow:hidden}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{object-fit:contain;width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{cursor:default;color:#fff;opacity:0;background-color:var(--el-overlay-color-lighter);width:100%;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;font-size:20px;display:inline-flex;position:absolute;top:0;left:0}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{font-size:inherit;color:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{width:126px;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%)}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;border-radius:6px;align-items:center;margin-top:10px;padding:10px;display:flex;overflow:hidden}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{object-fit:contain;z-index:1;background-color:var(--el-color-white);justify-content:center;align-items:center;width:70px;height:70px;display:inline-flex;position:relative}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:46px;height:26px;position:absolute;top:-7px;right:-17px;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{margin-top:12px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{z-index:10;cursor:default;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.el-upload-cover:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-upload-cover img{width:100%;height:100%;display:block}.el-upload-cover__label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-cover__label i{color:#fff;margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-cover__progress{vertical-align:middle;width:243px;display:inline-block;position:static}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{width:100%;height:100%;position:absolute;top:0;left:0}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);text-align:center;width:100%;height:100%;position:absolute;bottom:0;left:0}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px;font-size:14px;display:inline-block}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;font-size:24px;line-height:inherit;margin:0 auto 5px;display:block}.el-upload-cover__title{text-overflow:ellipsis;white-space:nowrap;text-align:left;width:100%;height:36px;color:var(--el-text-color-primary);background-color:#fff;margin:0;padding:0 10px;font-size:14px;font-weight:400;line-height:36px;position:absolute;bottom:0;left:0;overflow:hidden}.el-upload-cover+.el-upload__inner{opacity:0;z-index:1;position:relative}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!important}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);margin-bottom:4px;line-height:20px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);width:var(--el-tour-width);padding:var(--el-tour-padding-primary);background:var(--el-tour-bg-color);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;overflow-wrap:break-word;outline:none}.el-tour__arrow{background:var(--el-tour-bg-color);pointer-events:none;box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-tour__content[data-side^=top] .el-tour__arrow{border-top-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:#0000;border-right-color:#0000}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=right] .el-tour__arrow{border-top-color:#0000;border-right-color:#0000}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{cursor:pointer;width:40px;height:40px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size,16px))}.el-tour__title{line-height:var(--el-tour-font-line-height);font-size:var(--el-tour-title-font-size);color:var(--el-tour-title-text-color);font-weight:var(--el-tour-title-font-weight)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{padding-top:var(--el-tour-padding-primary);box-sizing:border-box;justify-content:space-between;display:flex}.el-tour__content .el-tour-indicators{flex:1;display:inline-block}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;width:6px;height:6px;margin-right:6px;display:inline-block}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{color:var(--el-color-primary);border-color:var(--el-color-primary);background:#fff}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-hover-color:var(--el-text-color-regular);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);opacity:0;z-index:0;border-radius:4px;position:absolute}.el-anchor.el-anchor--vertical .el-anchor__marker{width:4px;height:14px;transition:top .25s ease-in-out,opacity .25s;top:8px;left:0}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{content:"";background-color:#0505050f;width:2px;height:100%;position:absolute;left:0}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{width:20px;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;bottom:0}.el-anchor.el-anchor--horizontal .el-anchor__list{padding-bottom:4px;display:flex}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{content:"";background-color:#0505050f;width:100%;height:2px;position:absolute;bottom:0}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{flex-direction:column;display:flex}.el-anchor__link{font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);color:var(--el-anchor-color);transition:color var(--el-transition-duration);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;outline:none;max-width:100%;padding:4px 0;text-decoration:none;overflow:hidden}.el-anchor__link:hover,.el-anchor__link:focus{color:var(--el-hover-color)}.el-anchor__link:focus-visible{border-radius:var(--el-border-radius-base);outline:2px solid var(--el-color-primary)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block}.el-segmented--vertical{flex-direction:column}.el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented{--el-segmented-color:var(--el-text-color-regular);--el-segmented-bg-color:var(--el-fill-color-light);--el-segmented-padding:2px;--el-segmented-item-selected-color:var(--el-color-white);--el-segmented-item-selected-bg-color:var(--el-color-primary);--el-segmented-item-selected-disabled-bg-color:var(--el-color-primary-light-5);--el-segmented-item-hover-color:var(--el-text-color-primary);--el-segmented-item-hover-bg-color:var(--el-fill-color-dark);--el-segmented-item-active-bg-color:var(--el-fill-color-darker);--el-segmented-item-disabled-color:var(--el-text-color-placeholder);background:var(--el-segmented-bg-color);min-height:32px;padding:var(--el-segmented-padding);border-radius:var(--el-border-radius-base);color:var(--el-segmented-color);box-sizing:border-box;align-items:stretch;font-size:14px;display:inline-flex}.el-segmented__group{align-items:stretch;width:100%;display:flex;position:relative}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);pointer-events:none;width:10px;height:100%;transition:all .3s;position:absolute;top:0;left:0}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{content:"";border-radius:inherit;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute;inset:0}.el-segmented__item{cursor:pointer;border-radius:calc(var(--el-border-radius-base) - 2px);flex:1;align-items:center;padding:0 11px;display:flex}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{color:var(--el-segmented-item-hover-color);background:var(--el-segmented-item-hover-bg-color)}.el-segmented__item:not(.is-disabled):not(.is-selected):active{background:var(--el-segmented-item-active-bg-color)}.el-segmented__item.is-selected,.el-segmented__item.is-selected.is-disabled{color:var(--el-segmented-item-selected-color)}.el-segmented__item.is-disabled{cursor:not-allowed;color:var(--el-segmented-item-disabled-color)}.el-segmented__item-input{opacity:0;pointer-events:none;width:0;height:0;margin:0;position:absolute}.el-segmented__item-label{text-align:center;text-overflow:ellipsis;white-space:nowrap;z-index:1;flex:1;line-height:normal;transition:color .3s;overflow:hidden}.el-segmented.is-block{display:flex}.el-segmented.is-block .el-segmented__item{min-width:0}.el-segmented--large{border-radius:var(--el-border-radius-base);min-height:40px;font-size:16px}.el-segmented--large .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 2px)}.el-segmented--large .el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented--large .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 2px);padding:0 11px}.el-segmented--small{border-radius:calc(var(--el-border-radius-base) - 1px);min-height:24px;font-size:14px}.el-segmented--small .el-segmented__item-selected{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px)}.el-segmented--small .el-segmented--vertical .el-segmented__item{padding:7px}.el-segmented--small .el-segmented__item{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px);padding:0 7px}.el-mention{width:100%;position:relative}.el-mention__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-mention__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-mention__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-mention-dropdown{--el-mention-font-size:var(--el-font-size-base);--el-mention-bg-color:var(--el-bg-color-overlay);--el-mention-shadow:var(--el-box-shadow-light);--el-mention-border:1px solid var(--el-border-color-light);--el-mention-option-color:var(--el-text-color-regular);--el-mention-option-height:34px;--el-mention-option-min-width:100px;--el-mention-option-hover-background:var(--el-fill-color-light);--el-mention-option-selected-color:var(--el-color-primary);--el-mention-option-disabled-color:var(--el-text-color-placeholder);--el-mention-option-loading-color:var(--el-text-color-secondary);--el-mention-option-loading-padding:10px 0;--el-mention-max-height:174px;--el-mention-padding:6px 0;--el-mention-header-padding:10px;--el-mention-footer-padding:10px}.el-mention-dropdown__item{font-size:var(--el-mention-font-size);white-space:nowrap;text-overflow:ellipsis;color:var(--el-mention-option-color);height:var(--el-mention-option-height);line-height:var(--el-mention-option-height);box-sizing:border-box;min-width:var(--el-mention-option-min-width);cursor:pointer;padding:0 20px;position:relative;overflow:hidden}.el-mention-dropdown__item.is-hovering{background-color:var(--el-mention-option-hover-background)}.el-mention-dropdown__item.is-selected{color:var(--el-mention-option-selected-color);font-weight:700}.el-mention-dropdown__item.is-disabled{color:var(--el-mention-option-disabled-color);cursor:not-allowed;background-color:unset}.el-mention-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-mention-dropdown__loading{text-align:center;color:var(--el-mention-option-loading-color);min-width:var(--el-mention-option-min-width);margin:0;padding:10px 0;font-size:12px}.el-mention-dropdown__wrap{max-height:var(--el-mention-max-height)}.el-mention-dropdown__list{padding:var(--el-mention-padding);box-sizing:border-box;margin:0;list-style:none}.el-mention-dropdown__header{padding:var(--el-mention-header-padding);border-bottom:var(--el-mention-border)}.el-mention-dropdown__footer{padding:var(--el-mention-footer-padding);border-top:var(--el-mention-border)}.el-splitter{width:100%;height:100%;margin:0;padding:0;display:flex;position:relative}.el-splitter__mask{z-index:999;position:absolute;inset:0}.el-splitter__mask-horizontal{cursor:ew-resize}.el-splitter__mask-vertical{cursor:ns-resize}.el-splitter__horizontal{flex-direction:row}.el-splitter__vertical{flex-direction:column}.el-splitter-bar{-webkit-user-select:none;user-select:none;flex:none;position:relative}.el-splitter-bar__dragger{z-index:1;background:0 0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:before,.el-splitter-bar__dragger:after{content:"";background-color:var(--el-border-color-light);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:not(.is-lazy):after{display:none}.el-splitter-bar__dragger:after{opacity:.4}.el-splitter-bar__dragger:hover:not(.is-disabled):before{background-color:var(--el-color-primary-light-5)}.el-splitter-bar__dragger-horizontal:before,.el-splitter-bar__dragger-horizontal:after{width:2px;height:100%}.el-splitter-bar__dragger-vertical:before,.el-splitter-bar__dragger-vertical:after{width:100%;height:2px}.el-splitter-bar__dragger-active:before,.el-splitter-bar__dragger-active:after{background-color:var(--el-color-primary-light-3)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-horizontal:after{transform:translate(calc(-50% + var(--el-splitter-bar-offset)),-50%)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-vertical:after{transform:translate(-50%,calc(-50% + var(--el-splitter-bar-offset)))}.el-splitter-bar:hover .el-splitter-bar__collapse-icon{opacity:1}.el-splitter-bar__collapse-icon{background:var(--el-border-color-light);cursor:pointer;opacity:0;z-index:9;border-radius:2px;justify-content:center;align-items:center;display:flex;position:absolute}.el-splitter-bar__collapse-icon:hover{opacity:1;background-color:var(--el-color-primary-light-5)}.el-splitter-bar__horizontal-collapse-icon-start{width:16px;height:24px;top:50%;left:-12px;transform:translate(-50%,-50%)}.el-splitter-bar__horizontal-collapse-icon-end{width:16px;height:24px;top:50%;left:12px;transform:translate(-50%,-50%)}.el-splitter-bar__vertical-collapse-icon-start{width:24px;height:16px;top:-12px;right:50%;transform:translate(50%,-50%)}.el-splitter-bar__vertical-collapse-icon-end{width:24px;height:16px;top:12px;right:50%;transform:translate(50%,-50%)}.el-splitter-panel{scrollbar-width:thin;box-sizing:border-box;flex-grow:0;overflow:auto}:root{--mg-status-success: #22c55e;--mg-status-success-rgb: 34, 197, 94;--mg-status-warning: #f59e0b;--mg-status-warning-rgb: 245, 158, 11;--mg-status-danger: #ef4444;--mg-status-danger-rgb: 239, 68, 68;--mg-status-info: #3b82f6;--mg-status-info-rgb: 59, 130, 246;--mg-status-idle: #94a3b8;--mg-status-idle-rgb: 148, 163, 184;--mg-data-c1: #3b82f6;--mg-data-c2: #22c55e;--mg-data-c3: #a855f7;--mg-data-c4: #f59e0b;--mg-data-c5: #ef4444;--mg-data-c6: #06b6d4;--mg-data-c7: #ec4899;--mg-data-c8: #84cc16;--mg-font-sans: "PingFang SC", "Microsoft YaHei", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--mg-font-mono: "JetBrains Mono", "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;--mg-primary: #7c3aed;--mg-primary-rgb: 124, 58, 237;--mg-primary-hover: #8b5cf6;--mg-primary-hover-rgb: 139, 92, 246;--mg-primary-active: #5b21b6;--mg-accent: #c4b5fd;--mg-accent-rgb: 196, 181, 253;--mg-primary-light-3: #9d6cf2;--mg-primary-light-5: #b594f7;--mg-primary-light-7: #6f4eab;--mg-primary-light-8: #4c357a;--mg-primary-light-9: #2d1f55;--mg-primary-dark-2: #4c1d95;--mg-bg-app-1: #0e0a24;--mg-bg-app-2: #1f1147;--mg-bg-app-3: #06031a;--mg-bg-app-deep-rgb: 6, 3, 26;--mg-bg-aside-1: #0c0820;--mg-bg-aside-2: #03020e;--mg-bg-aside-rgb: 10, 6, 30;--mg-bg-card-rgb: 38, 24, 78;--mg-bg-card-hi-rgb: 58, 38, 110;--mg-bg-card-darker-rgb: 20, 12, 48;--mg-shadow-rgb: 8, 2, 24;--mg-text-tint-rgb: 242, 232, 255;--mg-text-hi-rgb: 220, 200, 252;--mg-orb-a-opacity: .55;--mg-orb-b-opacity: .5;--mg-orb-c-opacity: .4;--mg-glass-bg: rgba(255, 255, 255, .06);--mg-glass-bg-hover: rgba(255, 255, 255, .1);--mg-glass-bg-active: rgba(255, 255, 255, .14);--mg-glass-border: rgba(255, 255, 255, .18);--mg-glass-border-hi: rgba(255, 255, 255, .28);--mg-glass-shadow: 0 10px 28px rgba(var(--mg-shadow-rgb), .55), 0 0 22px rgba(var(--mg-primary-rgb), .18), 0 0 0 1px rgba(255, 255, 255, .06) inset, 0 1px 0 rgba(255, 255, 255, .12) inset;--mg-glass-shadow-hi: 0 18px 44px rgba(var(--mg-shadow-rgb), .7), 0 0 36px rgba(var(--mg-primary-hover-rgb), .3), 0 0 0 1px rgba(var(--mg-accent-rgb), .25) inset, 0 1px 0 rgba(255, 255, 255, .22) inset;--mg-glass-blur: blur(20px) saturate(160%);--mg-glass-blur-hi: blur(30px) saturate(180%);--mg-radius-sm: 8px;--mg-radius: 14px;--mg-radius-lg: 20px;--mg-radius-xl: 24px;--mg-text-light: #ffffff;--mg-text-muted: rgba(255, 255, 255, .7);--mg-text-dim: rgba(255, 255, 255, .5);--mg-text-faint: rgba(255, 255, 255, .35);--mg-divider: rgba(255, 255, 255, .08);--el-color-primary: var(--mg-primary);--el-color-primary-rgb: var(--mg-primary-rgb);--el-color-primary-light-3: var(--mg-primary-light-3);--el-color-primary-light-5: var(--mg-primary-light-5);--el-color-primary-light-7: var(--mg-primary-light-7);--el-color-primary-light-8: var(--mg-primary-light-8);--el-color-primary-light-9: var(--mg-primary-light-9);--el-color-primary-dark-2: var(--mg-primary-dark-2);--mg-transition: all .25s cubic-bezier(.25, .8, .25, 1);--mg-veil-1: rgba(255, 255, 255, .05);--mg-veil-2: rgba(255, 255, 255, .08);--mg-veil-3: rgba(255, 255, 255, .12);--mg-veil-border: rgba(255, 255, 255, .12);--mg-veil-border-hi: rgba(255, 255, 255, .2);--mg-action-bg: rgba(76, 29, 149, .45);--mg-action-bg-hover: rgba(109, 40, 217, .75);--mg-action-border: rgba(167, 139, 250, .55);--mg-action-border-hi: rgba(196, 181, 253, .9)}html{--el-color-primary: var(--mg-primary) !important;--el-color-primary-rgb: var(--mg-primary-rgb) !important;--el-color-primary-light-3: var(--mg-primary-light-3) !important;--el-color-primary-light-5: var(--mg-primary-light-5) !important;--el-color-primary-light-7: var(--mg-primary-light-7) !important;--el-color-primary-light-8: var(--mg-primary-light-8) !important;--el-color-primary-light-9: var(--mg-primary-light-9) !important;--el-color-primary-dark-2: var(--mg-primary-dark-2) !important}body{margin:0;font-family:var(--mg-font-sans);color:var(--mg-text-light);background:radial-gradient(ellipse at 20% 0%,rgba(var(--mg-primary-hover-rgb),.45) 0%,transparent 55%),radial-gradient(ellipse at 80% 100%,rgba(var(--mg-bg-card-rgb),.65) 0%,transparent 55%),linear-gradient(135deg,var(--mg-bg-app-1) 0%,var(--mg-bg-app-2) 50%,var(--mg-bg-app-3) 100%);background-attachment:fixed;min-height:100vh;transition:background-color .35s ease}#app{min-height:100vh;position:relative}#app:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(var(--mg-accent-rgb),.05) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--mg-accent-rgb),.05) 1px,transparent 1px);background-size:48px 48px,48px 48px;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}#app:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background-image:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0,rgba(255,255,255,.018) 1px,transparent 1px,transparent 3px);mix-blend-mode:overlay}.app-shell,.login-page{position:relative;z-index:1}.mg-glass{background:var(--mg-glass-bg);border:1px solid var(--mg-glass-border);border-radius:var(--mg-radius);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);transition:var(--mg-transition)}.mg-glass:hover{background:var(--mg-glass-bg-hover);border-color:var(--mg-glass-border-hi);box-shadow:var(--mg-glass-shadow-hi);transform:translateY(-2px)}.mg-glass-lg{background:#ffffff14;border:1px solid rgba(255,255,255,.22);border-radius:var(--mg-radius-lg);backdrop-filter:var(--mg-glass-blur-hi);-webkit-backdrop-filter:var(--mg-glass-blur-hi);box-shadow:0 30px 80px rgba(var(--mg-shadow-rgb),.55),0 0 0 1px #ffffff40 inset,0 1px #fff6 inset}.el-button--primary{--el-button-bg-color: var(--mg-primary);--el-button-border-color: var(--mg-primary);--el-button-hover-bg-color: var(--mg-primary-hover);--el-button-hover-border-color: var(--mg-primary-hover);--el-button-active-bg-color: var(--mg-primary-active);--el-button-active-border-color: var(--mg-primary-active)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.4);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.7)}::-webkit-scrollbar-track{background:transparent}::selection{background:rgba(var(--mg-accent-rgb),.4);color:#fff}a{color:var(--mg-accent)}a:hover{color:rgba(var(--mg-accent-rgb),.85)}.mg-content{--el-fill-color-blank: transparent;--el-fill-color-light: rgba(var(--mg-bg-card-rgb), .45);--el-fill-color-lighter: rgba(var(--mg-bg-card-rgb), .35);--el-fill-color: rgba(var(--mg-bg-card-rgb), .55);--el-fill-color-dark: rgba(var(--mg-bg-card-rgb), .65);--el-fill-color-darker: rgba(var(--mg-bg-card-rgb), .75);--el-bg-color: rgba(var(--mg-bg-card-rgb), .55);--el-bg-color-page: transparent;--el-bg-color-overlay: rgba(var(--mg-bg-card-rgb), .92);--el-border-color: rgba(255, 255, 255, .14);--el-border-color-light: rgba(255, 255, 255, .1);--el-border-color-lighter: rgba(255, 255, 255, .08);--el-border-color-extra-light: rgba(255, 255, 255, .06);--el-text-color-secondary: rgba(var(--mg-text-hi-rgb), .7);--el-text-color-placeholder: rgba(255, 255, 255, .4);--el-text-color-disabled: rgba(255, 255, 255, .3)}.mg-content .fme-desc{background:rgba(var(--mg-bg-card-rgb),.55)!important;color:var(--mg-text-light)!important;border-left-color:var(--mg-accent)!important}.mg-content .fme-path{color:var(--mg-text-light)!important}.mg-content .fme-path-empty{color:var(--mg-text-muted)!important}.mg-content .admin-tabs.el-tabs--border-card{height:100%;background:rgba(var(--mg-bg-card-rgb),.45)!important;border:1px solid rgba(255,255,255,.1)!important;border-radius:var(--mg-radius);box-shadow:var(--mg-glass-shadow);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);overflow:hidden;display:flex;flex-direction:column}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header{background:rgba(var(--mg-bg-card-darker-rgb),.35)!important;border-bottom:1px solid rgba(255,255,255,.1)!important;margin:0}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__nav{border:0!important}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item{background:transparent!important;color:#dcc8f0bf!important;border:0!important;height:42px;line-height:42px;font-size:13.5px;letter-spacing:.5px;padding:0 18px!important;transition:background .2s ease,color .2s ease}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item:hover{background:rgba(var(--mg-accent-rgb),.1)!important;color:#fff!important}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background:rgba(var(--mg-accent-rgb),.18)!important;color:#fff!important;font-weight:600;box-shadow:inset 0 -2px 0 0 var(--mg-accent)}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__content{flex:1;padding:14px;overflow:auto;background:transparent!important}.mg-content .admin-tabs.el-tabs--border-card .el-tab-pane{height:100%}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card{background:#fff!important;border:1px solid rgba(124,58,237,.18)!important;box-shadow:0 8px 24px #7c3aed0f!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header{background:#7c3aed0a!important;border-bottom:1px solid rgba(124,58,237,.14)!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item{color:#4a3d6e!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item:hover{background:#7c3aed14!important;color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background:#7c3aed24!important;color:#7c3aed!important}.mg-content .el-card{background:linear-gradient(135deg,rgba(var(--mg-bg-card-rgb),.55),rgba(var(--mg-bg-app-deep-rgb),.6))!important;border:1px solid rgba(255,255,255,.14);border-radius:var(--mg-radius);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);color:var(--mg-text-light);transition:var(--mg-transition);overflow:hidden}.mg-content .el-card:hover{background:linear-gradient(135deg,rgba(var(--mg-bg-card-hi-rgb),.65),rgba(var(--mg-bg-card-darker-rgb),.67))!important;border-color:#ffffff38;box-shadow:var(--mg-glass-shadow-hi);transform:translateY(-2px)}.mg-content .el-card.no-hover:hover{transform:none}.mg-content .el-card__header{background:#ffffff0a;border-bottom:1px solid rgba(255,255,255,.1);color:var(--mg-text-light);font-weight:600;padding:14px 18px}.mg-content .el-card__body{background:transparent!important;color:var(--mg-text-light)}.mg-content .el-card .el-card{background:#ffffff0a!important;border-color:#ffffff1a;box-shadow:none}.mg-content .el-card .el-card:hover{background:#ffffff0f!important;transform:none;box-shadow:none}.mg-content h1,.mg-content h2,.mg-content h3{color:var(--mg-text-light);margin-top:0}.mg-content p,.mg-content .el-statistic__head{color:var(--mg-text-muted)}.mg-content .el-statistic__number,.mg-content .el-statistic__content{color:var(--mg-text-light)}.mg-content .el-tabs{--el-text-color-primary: #fff}.mg-content .el-tabs__item{color:#ffffffd1!important}.mg-content .el-tabs__item:hover{color:#fff!important}.mg-content .el-tabs__item.is-active{color:#fff!important;font-weight:600}.mg-content .el-tabs__active-bar{background-color:var(--mg-accent)!important}.mg-content .el-tabs__nav-wrap:after{background-color:#ffffff24!important}.mg-content .el-table,.mg-content .el-table tr,.mg-content .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:transparent!important}.mg-content .el-table{--el-table-bg-color: transparent;--el-table-tr-bg-color: transparent;--el-table-header-bg-color: transparent;--el-table-row-hover-bg-color: rgba(var(--mg-accent-rgb), .18);--el-table-border-color: rgba(255, 255, 255, .1);--el-table-header-text-color: rgba(255, 255, 255, .7);--el-table-text-color: var(--mg-text-light);--el-fill-color-blank: transparent;--el-fill-color-light: rgba(255, 255, 255, .04);color:var(--mg-text-light)!important}.mg-content .el-table th.el-table__cell{background:#ffffff0f!important;color:#ffffffbf!important;border-bottom-color:#ffffff1f!important}.mg-content .el-table td.el-table__cell{background:transparent!important;color:var(--mg-text-light)!important;border-bottom-color:#ffffff14!important}.mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell{background:#ffffff08!important}.mg-content .el-table tr:hover>td.el-table__cell,.mg-content .el-table__body tr.hover-row>td.el-table__cell{background:rgba(var(--mg-accent-rgb),.18)!important}.mg-content .el-table__empty-block{background:transparent;color:var(--mg-text-dim)}.mg-content .el-table__inner-wrapper:before,.mg-content .el-table:before{background:#ffffff1a!important}.mg-content .el-input__wrapper,.mg-content .el-textarea__inner{background:#ffffff0f!important;box-shadow:0 0 0 1px #ffffff2e inset!important}.mg-content .el-input__wrapper.is-focus{box-shadow:0 0 0 1px rgba(var(--mg-accent-rgb),.7) inset,0 0 16px rgba(var(--mg-primary-hover-rgb),.35)!important}.mg-content .el-input__inner{color:var(--mg-text-light)!important}.mg-content .el-input__inner::placeholder{color:var(--mg-text-faint)}.mg-content .el-form-item__label{color:var(--mg-text-muted)!important}.mg-content .el-divider__text{background:transparent!important;color:var(--mg-text-muted)}.mg-content .el-divider{background:var(--mg-divider)}.mg-content .el-tag{background:rgba(var(--mg-accent-rgb),.18);color:rgba(var(--mg-text-tint-rgb),1);border-color:rgba(var(--mg-accent-rgb),.4)}.mg-content .el-tag--success{background:#6f8f4c38;color:#c0d99c;border-color:#6f8f4c80}.mg-content .el-tag--warning{background:#c98a1d38;color:#f5cf85;border-color:#c98a1d80}.mg-content .el-tag--danger{background:#b3324f38;color:#ff9bb8;border-color:#b3324f80}.mg-content .el-tag--info{background:#7a6b8738;color:#c9bdd6;border-color:#7a6b8780}.mg-content .el-descriptions{--el-text-color-primary: #fff;--el-text-color-regular: var(--mg-text-muted);--el-border-color-lighter: rgba(255, 255, 255, .12);--el-fill-color-blank: transparent;color:var(--mg-text-light)}.mg-content .el-descriptions__body,.mg-content .el-descriptions__table{background:transparent!important}.mg-content .el-descriptions__label,.mg-content .el-descriptions__cell.is-bordered-label{background:#ffffff0d!important;color:var(--mg-text-muted)!important;border-color:#ffffff1f!important}.mg-content .el-descriptions__content,.mg-content .el-descriptions__cell.is-bordered-content{background:transparent!important;color:#fff!important;border-color:#ffffff1f!important}.mg-content .el-descriptions__title{color:#fff}.mg-content .el-progress-bar__outer{background:#ffffff1a}.mg-content .el-progress-bar__inner{background:linear-gradient(90deg,var(--mg-primary-hover) 0%,var(--mg-accent) 100%)}.mg-content .el-alert{background:#ffffff0f!important;border:1px solid rgba(255,255,255,.14);color:var(--mg-text-light)}.mg-content .el-alert__title,.mg-content .el-alert__description{color:var(--mg-text-light)!important}.mg-content .el-collapse{border-color:#ffffff1a;--el-collapse-header-bg-color: transparent;--el-collapse-content-bg-color: transparent;--el-collapse-header-text-color: #fff;--el-collapse-content-text-color: var(--mg-text-light)}.mg-content .el-collapse-item__header,.mg-content .el-collapse-item__wrap{background:transparent!important;border-color:#ffffff1a!important;color:var(--mg-text-light)!important}.mg-content .el-radio__label,.mg-content .el-checkbox__label{color:var(--mg-text-light)!important}.mg-content .el-radio__inner,.mg-content .el-checkbox__inner{background:#ffffff14;border-color:#ffffff52}.mg-content .el-radio-button__inner{background:#ffffff0f!important;border-color:#ffffff2e!important;color:var(--mg-text-light)!important}.mg-content .el-radio-button.is-active .el-radio-button__inner{background:var(--mg-primary)!important;border-color:var(--mg-primary)!important;color:#fff!important}.mg-content .el-select .el-input__wrapper{background:#ffffff0f!important;box-shadow:0 0 0 1px #ffffff2e inset!important}.mg-content .el-input-number .el-input-number__decrease,.mg-content .el-input-number .el-input-number__increase{background:#ffffff0f!important;color:var(--mg-text-muted)!important;border-color:#ffffff26!important}.mg-content .el-switch.is-checked .el-switch__core{background:var(--mg-primary);border-color:var(--mg-primary)}.mg-content .el-statistic .el-statistic__head{color:var(--mg-text-muted);font-size:13px}.mg-content .el-statistic .el-statistic__number,.mg-content .el-statistic .el-statistic__content{color:#fff;font-weight:600;text-shadow:0 2px 8px rgba(var(--mg-primary-hover-rgb),.4)}.mg-content .kpi-row .el-statistic,.mg-content .kpi-card{background:linear-gradient(135deg,rgba(var(--mg-bg-card-rgb),.55),rgba(var(--mg-bg-app-deep-rgb),.6));border:1px solid rgba(255,255,255,.14);border-radius:var(--mg-radius);padding:16px 18px;backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);transition:var(--mg-transition)}.mg-content .kpi-row .el-statistic:hover,.mg-content .kpi-card:hover{background:linear-gradient(135deg,rgba(var(--mg-bg-card-hi-rgb),.65),rgba(var(--mg-bg-card-darker-rgb),.67));transform:translateY(-2px);box-shadow:var(--mg-glass-shadow-hi);border-color:#ffffff38}.mg-content .el-pagination{--el-pagination-bg-color: transparent;--el-pagination-button-bg-color: rgba(255, 255, 255, .06);--el-pagination-button-color: var(--mg-text-light);--el-pagination-hover-color: var(--mg-accent);color:var(--mg-text-muted)}.el-dropdown-menu{background:rgba(var(--mg-bg-aside-rgb),.92)!important;backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.12)!important}.el-dropdown-menu__item{color:#fffc!important}.el-dropdown-menu__item:hover{background:rgba(var(--mg-accent-rgb),.18)!important;color:#fff!important}.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){background:#ffffff14;border-color:#fff3;color:var(--mg-text-light)}.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}.el-dialog h2{color:var(--mg-primary-active)}.el-dialog{border-radius:var(--mg-radius)}:root[data-theme=industrial-purple]{--mg-orb-a-opacity: .55;--mg-orb-b-opacity: .5;--mg-orb-c-opacity: .42;--mg-glass-bg: rgba(28, 14, 62, .62);--mg-glass-bg-hover: rgba(44, 22, 88, .72);--mg-glass-border: rgba(var(--mg-accent-rgb), .18);--mg-glass-border-hi: rgba(var(--mg-accent-rgb), .55);--mg-glass-shadow: 0 12px 32px rgba(0, 0, 0, .55), 0 0 24px rgba(var(--mg-primary-rgb), .25), 0 0 0 1px rgba(var(--mg-accent-rgb), .1) inset, 0 1px 0 rgba(255, 255, 255, .14) inset;--mg-glass-shadow-hi: 0 20px 50px rgba(0, 0, 0, .68), 0 0 42px rgba(var(--mg-primary-hover-rgb), .42), 0 0 0 1px rgba(var(--mg-accent-rgb), .32) inset, 0 1px 0 rgba(255, 255, 255, .24) inset;--mg-text-muted: rgba(255, 255, 255, .86);--mg-text-dim: rgba(220, 200, 252, .7)}:root[data-theme=industrial-purple] body{background:radial-gradient(circle at 8% 8%,rgba(var(--mg-primary-hover-rgb),.55) 0%,transparent 48%),radial-gradient(ellipse at 92% 18%,rgba(var(--mg-accent-rgb),.28) 0%,transparent 42%),radial-gradient(circle at 78% 88%,rgba(var(--mg-primary-rgb),.55) 0%,transparent 46%),radial-gradient(ellipse at 18% 92%,rgba(99,102,241,.3) 0%,transparent 48%),linear-gradient(135deg,var(--mg-bg-app-1) 0%,var(--mg-bg-app-2) 48%,var(--mg-bg-app-3) 100%)}:root[data-theme=industrial-purple] #app:before{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);opacity:.85}:root[data-theme=industrial-purple] #app:after{background-image:repeating-linear-gradient(0deg,rgba(var(--mg-accent-rgb),.03) 0,rgba(var(--mg-accent-rgb),.03) 1px,transparent 1px,transparent 3px)}:root[data-theme=industrial-purple] .mg-content .el-card,:root[data-theme=industrial-purple] .mg-content .kpi-row .el-statistic,:root[data-theme=industrial-purple] .mg-content .kpi-card{position:relative;background:linear-gradient(145deg,rgba(var(--mg-bg-card-rgb),.78),rgba(var(--mg-bg-app-deep-rgb),.86))!important;border:1px solid rgba(var(--mg-accent-rgb),.14)!important;border-radius:var(--mg-radius)!important;box-shadow:0 12px 30px #00000080,0 0 22px rgba(var(--mg-primary-rgb),.16),inset 0 1px #ffffff1a!important;backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);overflow:hidden}:root[data-theme=industrial-purple] .mg-content .el-card:before,:root[data-theme=industrial-purple] .mg-content .kpi-card:before{content:"";position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.55) 30%,rgba(255,255,255,.85) 50%,rgba(var(--mg-accent-rgb),.55) 70%,transparent 100%);pointer-events:none;opacity:.7}:root[data-theme=industrial-purple] .mg-content .el-card:hover,:root[data-theme=industrial-purple] .mg-content .kpi-row .el-statistic:hover,:root[data-theme=industrial-purple] .mg-content .kpi-card:hover{background:linear-gradient(145deg,rgba(var(--mg-bg-card-hi-rgb),.85),rgba(var(--mg-bg-card-darker-rgb),.92))!important;border-color:rgba(var(--mg-accent-rgb),.42)!important;box-shadow:0 18px 40px #0009,0 0 38px rgba(var(--mg-primary-hover-rgb),.38),inset 0 1px #ffffff2e!important}:root[data-theme=industrial-purple] .mg-content .el-card .el-card{background:rgba(var(--mg-bg-card-darker-rgb),.55)!important}:root[data-theme=industrial-purple] .mg-content .el-card .el-card:before{display:none}:root[data-theme=industrial-purple] .mg-content .el-statistic__head{color:#ffffffc7!important}:root[data-theme=industrial-purple] .mg-content .el-statistic__number,:root[data-theme=industrial-purple] .mg-content .el-statistic__content{background:linear-gradient(135deg,#fff,rgba(var(--mg-accent-rgb),1));-webkit-background-clip:text;background-clip:text;color:transparent!important;text-shadow:0 0 24px rgba(var(--mg-primary-hover-rgb),.5)}:root[data-theme=industrial-purple] .mg-content .el-table th.el-table__cell{background:rgba(var(--mg-bg-card-darker-rgb),.75)!important}:root[data-theme=industrial-purple] .mg-content .el-input__wrapper,:root[data-theme=industrial-purple] .mg-content .el-textarea__inner{background:rgba(var(--mg-bg-card-darker-rgb),.55)!important;box-shadow:0 0 0 1px rgba(var(--mg-accent-rgb),.18) inset!important}:root[data-theme=industrial-purple] .el-button--primary{background:linear-gradient(135deg,var(--mg-primary) 0%,var(--mg-primary-hover) 100%)!important;border:none!important;box-shadow:0 8px 22px rgba(var(--mg-primary-rgb),.45),0 0 0 1px #ffffff2e inset!important;position:relative;overflow:hidden}:root[data-theme=industrial-purple] .el-button--primary:after{content:"";position:absolute;top:0;left:-120%;width:80%;height:100%;background:linear-gradient(110deg,transparent 0%,rgba(255,255,255,0) 30%,rgba(255,255,255,.35) 50%,rgba(255,255,255,0) 70%,transparent 100%);transition:left .6s cubic-bezier(.25,.8,.25,1)}:root[data-theme=industrial-purple] .el-button--primary:hover:after{left:120%}:root[data-theme=industrial-purple] .el-button--primary:hover{box-shadow:0 12px 32px rgba(var(--mg-primary-rgb),.6),0 0 28px rgba(var(--mg-primary-hover-rgb),.55),0 0 0 1px rgba(var(--mg-accent-rgb),.4) inset!important;transform:translateY(-1px)}:root[data-theme=industrial-purple] .mg-content .el-tag{background:linear-gradient(135deg,rgba(var(--mg-primary-rgb),.25),rgba(var(--mg-accent-rgb),.18));color:#fff;border-color:rgba(var(--mg-accent-rgb),.45)}.mg-neon-text{background:linear-gradient(135deg,#ffffff 0%,var(--mg-accent) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 18px rgba(var(--mg-primary-hover-rgb),.45)}@keyframes mg-pulse-glow{0%,to{box-shadow:0 0 rgba(var(--mg-accent-rgb),.35),0 0 28px rgba(var(--mg-primary-hover-rgb),.35)}50%{box-shadow:0 0 0 6px rgba(var(--mg-accent-rgb),0),0 0 38px rgba(var(--mg-primary-hover-rgb),.55)}}:root[data-theme=fame-lavender]{--mg-glass-bg: rgba(255, 255, 255, .95);--mg-glass-bg-hover: rgba(249, 246, 255, 1);--mg-glass-bg-active: rgba(245, 240, 251, 1);--mg-glass-border: rgba(124, 58, 237, .14);--mg-glass-border-hi: rgba(124, 58, 237, .35);--mg-glass-shadow: 0 4px 14px rgba(45, 27, 105, .06), 0 0 0 1px rgba(124, 58, 237, .06);--mg-glass-shadow-hi: 0 8px 24px rgba(45, 27, 105, .1), 0 0 0 1px rgba(124, 58, 237, .15);--mg-glass-blur: none;--mg-glass-blur-hi: none;--mg-text-light: #1a0f3d;--mg-text-muted: #4a3d6e;--mg-text-dim: #7a6b9a;--mg-text-faint: #a8a0c0;--mg-divider: #e8e1f0;--mg-status-success: #15803d;--mg-status-success-rgb: 21, 128, 61;--mg-status-warning: #b45309;--mg-status-warning-rgb: 180, 83, 9;--mg-status-danger: #b91c1c;--mg-status-danger-rgb: 185, 28, 28;--mg-status-info: #1d4ed8;--mg-status-info-rgb: 29, 78, 216;--mg-status-idle: #64748b;--mg-status-idle-rgb: 100, 116, 139;--mg-veil-1: rgba(124, 58, 237, .05);--mg-veil-2: rgba(124, 58, 237, .1);--mg-veil-3: rgba(124, 58, 237, .16);--mg-veil-border: rgba(124, 58, 237, .16);--mg-veil-border-hi: rgba(124, 58, 237, .32);--mg-action-bg: #7c3aed;--mg-action-bg-hover: #6d28d9;--mg-action-border: #7c3aed;--mg-action-border-hi: #6d28d9}:root[data-theme=fame-lavender] body{background:linear-gradient(160deg,#edeaf5,#e7e4f1 55%,#f1eef8)!important;color:#1a0f3d}:root[data-theme=fame-lavender] #app:before,:root[data-theme=fame-lavender] #app:after{display:none!important}:root[data-theme=fame-lavender] .bg-orbs{display:none!important}:root[data-theme=fame-lavender] .aside{background:linear-gradient(180deg,#2e1065,#1c0a4d)!important;border-right:1px solid rgba(0,0,0,.08)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:4px 0 24px #2d1b692e!important}:root[data-theme=fame-lavender] .aside:before{display:none!important}:root[data-theme=fame-lavender] .aside .logo{background:transparent!important;border-bottom:1px solid rgba(196,181,253,.12)!important}:root[data-theme=fame-lavender] .aside .logo-title-zh{background:linear-gradient(135deg,#fff,#c4b5fd)!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important;color:transparent!important;text-shadow:none!important;font-weight:700}:root[data-theme=fame-lavender] .aside .el-menu{background:transparent!important;border-right:none!important}:root[data-theme=fame-lavender] .aside .el-menu-item,:root[data-theme=fame-lavender] .aside .el-sub-menu__title{color:#d4cae8!important;font-weight:500!important;background:transparent!important}:root[data-theme=fame-lavender] .aside .el-menu-item:hover,:root[data-theme=fame-lavender] .aside .el-sub-menu__title:hover{background:#c4b5fd1a!important;color:#fff!important}:root[data-theme=fame-lavender] .aside .el-menu-item.is-active,:root[data-theme=fame-lavender] .aside .el-sub-menu.is-active>.el-sub-menu__title{background:linear-gradient(90deg,#a855f74d,#7c3aed29)!important;color:#fff!important;font-weight:700!important;box-shadow:inset 3px 0 #c4b5fd!important;text-shadow:none!important}:root[data-theme=fame-lavender] .aside .el-menu .el-menu-item.is-active{background:linear-gradient(90deg,rgba(168,85,247,.22) 0%,transparent 100%)!important;box-shadow:inset 2px 0 #a855f7!important}:root[data-theme=fame-lavender] .header{background:#fff!important;border-bottom:1px solid #ebe5f4!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:0 1px 6px #2d1b690d!important}:root[data-theme=fame-lavender] .header:after{display:none!important}:root[data-theme=fame-lavender] .header .el-breadcrumb__inner{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .header .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .header .el-breadcrumb__separator{color:#a8a0c0!important}:root[data-theme=fame-lavender] .header .el-breadcrumb__inner:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .header .icon-btn{border-color:#ebe5f4!important;color:#7c3aed!important;background:#f8f4fc!important}:root[data-theme=fame-lavender] .header .icon-btn:hover{background:#ede9fe!important;border-color:#c4b5fd!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .header .runmode-tag{background:#f5f3ff!important;border-color:#ddd6fe!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .header .runmode-tag.WebEnabled{background:#ecfdf5!important;border-color:#bbf7d0!important;color:#047857!important}:root[data-theme=fame-lavender] .header .runmode-tag.WebOnly{background:#ede9fe!important;border-color:#c4b5fd!important;color:#6d28d9!important}:root[data-theme=fame-lavender] .header .el-radio-button__inner{background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important;font-weight:500}:root[data-theme=fame-lavender] .header .el-radio-button__inner:hover{color:#6d28d9!important;border-color:#c4b5fd!important;background:#f5f3ff!important}:root[data-theme=fame-lavender] .header .el-radio-button.is-active .el-radio-button__inner{background:#7c3aed!important;border-color:#7c3aed!important;color:#fff!important;box-shadow:0 2px 6px #7c3aed40}:root[data-theme=fame-lavender] .header .user-link{background:#f8f4fc!important;border-color:#ebe5f4!important;color:#2d1b69!important}:root[data-theme=fame-lavender] .header .user-link:hover{background:#ede9fe!important;border-color:#c4b5fd!important}:root[data-theme=fame-lavender] .header .user-name{color:#2d1b69!important}:root[data-theme=fame-lavender] .main,:root[data-theme=fame-lavender] .mg-content{background:transparent!important;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content h1,:root[data-theme=fame-lavender] .mg-content h2,:root[data-theme=fame-lavender] .mg-content h3{color:#1a0f3d!important;font-weight:700}:root[data-theme=fame-lavender] .mg-content p{color:#4a3d6e!important}:root[data-theme=fame-lavender] .mg-content small,:root[data-theme=fame-lavender] .mg-content .text-secondary{color:#7a6b9a!important}:root[data-theme=fame-lavender] .footer{background:#ffffffb3!important;border-top:1px solid #ebe5f4!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;color:#909399!important}:root[data-theme=fame-lavender] .mg-content .el-card{background:#fff!important;border:1px solid #e2dbf0!important;border-radius:14px!important;box-shadow:0 1px 2px #2d1b690d,0 10px 26px #6c47c81a!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;color:#1a0f3d!important;overflow:hidden}:root[data-theme=fame-lavender] .mg-content .el-card:before{display:none!important}:root[data-theme=fame-lavender] .mg-content .el-card:hover{background:#fff!important;border-color:#c4b5fd!important;box-shadow:0 4px 14px #2d1b691a,0 18px 40px #6c47c829!important;transform:translateY(-2px)!important}:root[data-theme=fame-lavender] .mg-content .el-card .el-card{background:#faf7fd!important;border-color:#f0eaf6!important;box-shadow:none!important}:root[data-theme=fame-lavender] .mg-content .el-card__header{background:#faf7fd!important;border-bottom:1px solid #e8e1f0!important;color:#1a0f3d!important;font-weight:600}:root[data-theme=fame-lavender] .mg-content .el-card__body{background:transparent!important;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content .kpi-row .el-statistic,:root[data-theme=fame-lavender] .mg-content .kpi-card{background:#fff!important;border:1px solid #e2dbf0!important;border-radius:12px!important;box-shadow:0 1px 2px #2d1b690d,0 8px 22px #6c47c81a!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;padding:16px 18px!important}:root[data-theme=fame-lavender] .mg-content .kpi-row .el-statistic:hover,:root[data-theme=fame-lavender] .mg-content .kpi-card:hover{background:#fff!important;border-color:#c4b5fd!important;box-shadow:0 4px 14px #2d1b6917,0 14px 32px #6c47c826!important;transform:translateY(-2px)!important}:root[data-theme=fame-lavender] .mg-content .el-statistic__head{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-statistic__number,:root[data-theme=fame-lavender] .mg-content .el-statistic__content{background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;color:#1a0f3d!important;text-shadow:none!important;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;font-weight:700}:root[data-theme=fame-lavender] .mg-content .el-table{--el-table-bg-color: #ffffff;--el-table-tr-bg-color: #ffffff;--el-table-header-bg-color: #faf7fd;--el-table-row-hover-bg-color: #f5f3ff;--el-table-border-color: #e8e1f0;--el-table-header-text-color: #1a0f3d;--el-table-text-color: #1a0f3d;--el-fill-color-blank: #ffffff;--el-fill-color-light: #faf7fd;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content .el-table,:root[data-theme=fame-lavender] .mg-content .el-table tr{background:#fff!important}:root[data-theme=fame-lavender] .mg-content .el-table th.el-table__cell{background:#faf7fd!important;color:#1a0f3d!important;border-bottom-color:#e8e1f0!important;font-weight:600}:root[data-theme=fame-lavender] .mg-content .el-table td.el-table__cell{background:#fff!important;color:#1a0f3d!important;border-bottom-color:#f0eaf6!important}:root[data-theme=fame-lavender] .mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell{background:#faf7fd!important}:root[data-theme=fame-lavender] .mg-content .el-table tr:hover>td.el-table__cell{background:#f5f3ff!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner,:root[data-theme=fame-lavender] .mg-content .el-select .el-input__wrapper{background:#fff!important;box-shadow:0 0 0 1px #e0d4f5 inset!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper:hover{box-shadow:0 0 0 1px #c4b5fd inset!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper.is-focus{box-shadow:0 0 0 1px #7c3aed inset,0 0 0 3px #7c3aed26!important}:root[data-theme=fame-lavender] .mg-content .el-input__inner,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner{color:#1a0f3d!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-input__inner::placeholder,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner::placeholder{color:#a8a0c0!important}:root[data-theme=fame-lavender] .mg-content .el-form-item__label{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-tabs{--el-text-color-primary: #2d1b69 !important;--el-text-color-regular: #303133 !important}:root[data-theme=fame-lavender] .mg-content .el-tabs__item{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-tabs__item:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .el-tabs__item.is-active{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .el-tabs__item{color:#4a3d6e!important}:root[data-theme=fame-lavender] .el-tabs__item:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .el-tabs__item.is-active{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .mg-content .el-tabs__active-bar{background-color:#7c3aed!important;height:3px!important;border-radius:2px}:root[data-theme=fame-lavender] .mg-content .el-tabs__nav-wrap:after{background-color:#e8e1f0!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-page,:root[data-theme=fame-lavender] .mg-content .ref-mgr-title,:root[data-theme=fame-lavender] .mg-content .field-section-title,:root[data-theme=fame-lavender] .mg-content .detail-name{color:#2d1b69!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-title{font-weight:700}:root[data-theme=fame-lavender] .mg-content .detail-id,:root[data-theme=fame-lavender] .mg-content .ref-type-asm,:root[data-theme=fame-lavender] .mg-content .field-empty{color:#7a6b9a!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-list-card,:root[data-theme=fame-lavender] .mg-content .ref-mgr-detail-card{background:#fff!important;border:1px solid rgba(124,58,237,.16)!important;box-shadow:0 8px 24px #7c3aed0f!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-header,:root[data-theme=fame-lavender] .mg-content .detail-header{border-color:#7c3aed2e!important}:root[data-theme=fame-lavender] .mg-content .field-section{color:#303133}:root[data-theme=fame-lavender] .mg-content .status-value{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-tag{background:#ede9fe!important;color:#5b21b6!important;border-color:#ddd6fe!important}:root[data-theme=fame-lavender] .mg-content .el-tag--success{background:#ecfdf5!important;color:#047857!important;border-color:#bbf7d0!important}:root[data-theme=fame-lavender] .mg-content .el-tag--warning{background:#fffbeb!important;color:#b45309!important;border-color:#fde68a!important}:root[data-theme=fame-lavender] .mg-content .el-tag--danger{background:#fef2f2!important;color:#b91c1c!important;border-color:#fecaca!important}:root[data-theme=fame-lavender] .mg-content .el-tag--info{background:#f3f4f6!important;color:#4b5563!important;border-color:#e5e7eb!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions{--el-text-color-primary: #2d1b69;--el-text-color-regular: #606266;--el-border-color-lighter: #ebe5f4;--el-fill-color-blank: #fff;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__label,:root[data-theme=fame-lavender] .mg-content .el-descriptions__cell.is-bordered-label{background:#faf7fd!important;color:#606266!important;border-color:#ebe5f4!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__content,:root[data-theme=fame-lavender] .mg-content .el-descriptions__cell.is-bordered-content{background:#fff!important;color:#303133!important;border-color:#ebe5f4!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__title{color:#2d1b69!important}:root[data-theme=fame-lavender] .mg-content .el-alert{background:#faf7fd!important;border:1px solid #ebe5f4!important;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-alert__title,:root[data-theme=fame-lavender] .mg-content .el-alert__description{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-collapse{border-color:#ebe5f4!important;--el-collapse-header-text-color: #2d1b69;--el-collapse-content-text-color: #303133}:root[data-theme=fame-lavender] .mg-content .el-collapse-item__header,:root[data-theme=fame-lavender] .mg-content .el-collapse-item__wrap{background:#fff!important;border-color:#ebe5f4!important;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-radio__label,:root[data-theme=fame-lavender] .mg-content .el-checkbox__label{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-radio__inner,:root[data-theme=fame-lavender] .mg-content .el-checkbox__inner{background:#fff!important;border-color:#c4b5fd!important}:root[data-theme=fame-lavender] .mg-content .el-radio-button__inner{background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .el-radio-button.is-active .el-radio-button__inner{background:#7c3aed!important;border-color:#7c3aed!important;color:#fff!important}:root[data-theme=fame-lavender] .el-button--primary{background:#7c3aed!important;border:1px solid #7c3aed!important;color:#fff!important;font-weight:600;box-shadow:0 1px 2px #2d1b6914,0 2px 6px #7c3aed38!important}:root[data-theme=fame-lavender] .el-button--primary:after{display:none!important}:root[data-theme=fame-lavender] .el-button--primary:hover{background:#6d28d9!important;border-color:#6d28d9!important;box-shadow:0 2px 6px #2d1b691f,0 4px 14px #7c3aed52!important;transform:translateY(-1px)!important}:root[data-theme=fame-lavender] .el-button--primary:active{background:#5b21b6!important;border-color:#5b21b6!important;transform:translateY(0)!important}:root[data-theme=fame-lavender] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover{background:#f5f3ff!important;border-color:#a78bfa!important;color:#5b21b6!important;box-shadow:0 2px 6px #7c3aed1a!important}:root[data-theme=fame-lavender] .mg-content .el-progress-bar__outer{background:#ede9fe!important}:root[data-theme=fame-lavender] .mg-content .el-progress-bar__inner{background:linear-gradient(90deg,#7c3aed,#a855f7)!important}:root[data-theme=fame-lavender] .mg-content .el-pagination{--el-pagination-bg-color: #fff;--el-pagination-button-bg-color: #faf7fd;--el-pagination-button-color: #2d1b69;--el-pagination-hover-color: #7c3aed;color:#606266!important}:root[data-theme=fame-lavender] .el-dropdown-menu{background:#fff!important;backdrop-filter:none!important;border:1px solid #ebe5f4!important;box-shadow:0 6px 16px #2d1b691a!important}:root[data-theme=fame-lavender] .el-dropdown-menu__item{color:#303133!important}:root[data-theme=fame-lavender] .el-dropdown-menu__item:hover{background:#f5f3ff!important;color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .el-switch.is-checked .el-switch__core{background:#7c3aed!important;border-color:#7c3aed!important}:root[data-theme=fame-lavender] .el-dialog h2{color:#2d1b69!important}:root[data-theme=fame-lavender] .el-dialog{background:#fff!important}:root[data-theme=fame-lavender] .el-dialog__title{color:#2d1b69!important}:root[data-theme=fame-lavender] .el-dialog__body{color:#303133!important}:root[data-theme=fame-lavender] ::-webkit-scrollbar-thumb{background:#7c3aed40}:root[data-theme=fame-lavender] ::-webkit-scrollbar-thumb:hover{background:#7c3aed73}.mg-mono,.mg-num{font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:0}.mg-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.3px;border:1px solid transparent;white-space:nowrap}.mg-pill.is-success{background:rgba(var(--mg-status-success-rgb),.15);color:var(--mg-status-success);border-color:rgba(var(--mg-status-success-rgb),.4)}.mg-pill.is-warning{background:rgba(var(--mg-status-warning-rgb),.15);color:var(--mg-status-warning);border-color:rgba(var(--mg-status-warning-rgb),.4)}.mg-pill.is-danger{background:rgba(var(--mg-status-danger-rgb),.15);color:var(--mg-status-danger);border-color:rgba(var(--mg-status-danger-rgb),.4)}.mg-pill.is-info{background:rgba(var(--mg-status-info-rgb),.15);color:var(--mg-status-info);border-color:rgba(var(--mg-status-info-rgb),.4)}.mg-pill.is-idle{background:rgba(var(--mg-status-idle-rgb),.15);color:var(--mg-status-idle);border-color:rgba(var(--mg-status-idle-rgb),.4)}.mg-live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--mg-status-info);position:relative}.mg-live-dot:after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid currentColor;opacity:0;animation:mg-live-pulse 1.6s ease-out infinite}.mg-live-dot.is-success{background:var(--mg-status-success);color:var(--mg-status-success)}.mg-live-dot.is-warning{background:var(--mg-status-warning);color:var(--mg-status-warning)}.mg-live-dot.is-danger{background:var(--mg-status-danger);color:var(--mg-status-danger)}.mg-live-dot.is-info{background:var(--mg-status-info);color:var(--mg-status-info)}.mg-live-dot.is-idle{background:var(--mg-status-idle);color:var(--mg-status-idle)}.mg-live-dot.is-idle:after{animation:none}@keyframes mg-live-pulse{0%{transform:scale(.6);opacity:.55}70%{transform:scale(1.5);opacity:0}to{transform:scale(1.8);opacity:0}}@media (prefers-reduced-motion: reduce){.mg-live-dot:after{animation:none}.bg-orb,.hero-orb,.hero-scene .agv-1,.hero-scene .agv-2,.hero-scene .float-data{animation:none!important}}:root[data-theme=fame-lavender] .mg-content .method-btn,:root[data-theme=fame-lavender] .mg-content .header-action-btn{background:#7c3aed!important;border:1px solid #7c3aed!important;color:#fff!important;font-weight:600!important;box-shadow:0 1px 2px #2d1b6914,0 2px 6px #7c3aed38!important}:root[data-theme=fame-lavender] .mg-content .method-btn:hover:not(:disabled),:root[data-theme=fame-lavender] .mg-content .header-action-btn:hover{background:#6d28d9!important;border-color:#6d28d9!important;color:#fff!important;box-shadow:0 2px 6px #2d1b691f,0 4px 14px #7c3aed52!important}:root[data-theme=fame-lavender] .mg-content .method-btn:active:not(:disabled){background:#5b21b6!important;border-color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .method-btn:disabled{background:#c4b5fd!important;border-color:#c4b5fd!important;color:#fff!important;box-shadow:none!important;opacity:.85!important}:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-icon,:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-spin{color:#ffffffeb!important}:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-tag{background:#ffffff3d!important;color:#fff!important}:root[data-theme=fame-lavender] .mg-content .add-field-btn{background:#fff!important;border:1px dashed #a78bfa!important;color:#5b21b6!important;font-weight:500!important}:root[data-theme=fame-lavender] .mg-content .add-field-btn:hover{background:#f5f3ff!important;border-color:#7c3aed!important;color:#5b21b6!important}html,body,#app{height:100%;margin:0;padding:0}#app{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,Arial,sans-serif;color:#303133;background:#f0f2f5} +@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap";:root{--el-color-white:#fff;--el-color-black:#000;--el-color-primary-rgb:64, 158, 255;--el-color-success-rgb:103, 194, 58;--el-color-warning-rgb:230, 162, 60;--el-color-danger-rgb:245, 108, 108;--el-color-error-rgb:245, 108, 108;--el-color-info-rgb:144, 147, 153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier), opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.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)}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;width:100%;padding:var(--el-alert-padding);box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);background-color:var(--el-color-white);opacity:1;transition:opacity var(--el-transition-duration-fast);align-items:center;margin:0;display:flex;position:relative;overflow:hidden}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-primary)}.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{flex-direction:column;gap:4px;display:flex}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size);margin-right:8px}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size);margin-right:12px}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;cursor:pointer;position:absolute;top:12px;right:16px}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.el-autocomplete{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;width:var(--el-input-width);display:inline-block;position:relative}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__header{border-bottom:1px solid var(--el-border-color-lighter);padding:10px}.el-autocomplete-suggestion__footer{border-top:1px solid var(--el-border-color-lighter);padding:10px}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{cursor:pointer;color:var(--el-text-color-regular);line-height:34px;font-size:var(--el-font-size-base);text-align:left;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0 20px;list-style:none;overflow:hidden}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{cursor:default;height:100px;color:var(--el-text-color-secondary);justify-content:center;align-items:center;font-size:20px;display:flex}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.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-avatar-group{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px;display:inline-flex}.el-avatar-group .el-avatar{border:1px solid var(--el-border-color-extra-light)}.el-avatar-group .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-item-gap)}.el-avatar-group__collapse-avatars{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px}.el-avatar-group__collapse-avatars .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-collapse-item-gap)}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);background-color:var(--el-backtop-bg-color);width:40px;height:40px;color:var(--el-backtop-text-color);box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex;position:fixed}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.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}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:before,.el-breadcrumb:after{content:"";display:table}.el-breadcrumb:after{clear:both}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:hover,.el-button-group>.el-button:focus,.el-button-group>.el-button:active,.el-button-group>.el-button.is-active{z-index:1}.el-button-group--horizontal{vertical-align:middle;display:inline-block}.el-button-group--horizontal:before,.el-button-group--horizontal:after{content:"";display:table}.el-button-group--horizontal:after{clear:both}.el-button-group--horizontal>.el-button{float:left;position:relative}.el-button-group--horizontal>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group--horizontal>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--horizontal>.el-button:not(:last-child){margin-right:-1px}.el-button-group--horizontal .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--vertical{flex-direction:column;align-items:stretch;display:inline-flex}.el-button-group--vertical>.el-button{margin-top:-1px}.el-button-group--vertical>.el-button:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.el-button-group--vertical>.el-button:last-child{border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical>.el-dropdown{margin-top:-1px}.el-button-group--vertical>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical .el-button--primary:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:#ffffff80;--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-plain,.el-button--primary.is-text,.el-button--primary.is-link{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-plain,.el-button--success.is-text,.el-button--success.is-link{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-plain,.el-button--warning.is-text,.el-button--warning.is-link{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-plain,.el-button--danger.is-text,.el-button--danger.is-link{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-plain,.el-button--info.is-text,.el-button--info.is-link{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);justify-content:space-between;padding:12px 20px;display:flex}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar__select-controller .el-select{margin-right:8px}.el-calendar__select-controller .el-calendar-select__year{width:120px}.el-calendar__select-controller .el-calendar-select__month{width:60px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);padding:12px 0;font-weight:400}.el-calendar-table:not(.is-range) td.prev,.el-calendar-table:not(.is-range) td.next{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);color:var(--el-text-color-primary);transition:var(--el-transition-duration);flex-direction:column;display:flex;overflow:hidden}.el-card.is-always-shadow,.el-card.is-hover-shadow:hover,.el-card.is-hover-shadow:focus{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding);flex-grow:1;overflow:auto}.el-card__footer{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-top:1px solid var(--el-card-border-color);box-sizing:border-box}.el-carousel__item{width:100%;height:100%;z-index:calc(var(--el-index-normal) - 1);display:inline-block;position:absolute;top:0;left:0;overflow:hidden}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage:hover .el-carousel__mask,.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{width:100%;height:50%}.el-carousel__mask{background-color:var(--el-color-white);opacity:.24;width:100%;height:100%;transition:var(--el-transition-duration-fast);position:absolute;top:0;left:0}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:#1f2d3d1c;--el-carousel-arrow-hover-background:#1f2d3d3b;--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel.is-vertical-outside{flex-direction:row;align-items:center;display:flex}.el-carousel.is-vertical-outside .el-carousel__container{flex:1}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);background-color:var(--el-carousel-arrow-background);color:#fff;z-index:10;text-align:center;font-size:var(--el-carousel-arrow-font-size);border:none;border-radius:50%;outline:none;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{z-index:calc(var(--el-index-normal) + 1);margin:0;padding:0;list-style:none;position:absolute}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{top:50%;right:0;transform:translateY(-50%)}.el-carousel__indicators--outside{text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels .el-carousel__button{color:#000;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{cursor:pointer;background-color:#0000}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal);display:inline-block}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width) / 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);cursor:pointer;transition:var(--el-transition-duration);background-color:#fff;border:none;outline:none;margin:0;padding:0;display:block}.el-carousel__indicators--labels .el-carousel__button{width:auto;height:auto}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%)translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%)translate(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);width:-moz-fit-content;width:fit-content;font-size:var(--el-cascader-menu-font-size);display:flex}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{box-sizing:border-box;min-width:180px;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;min-height:100%;margin:0;padding:6px 0;list-style:none;position:relative}.el-cascader-menu__list.el-vl__window{margin:6px 0;padding:0}.el-cascader-menu__list.el-vl__window ul{margin:0;padding:0}.el-cascader-menu__hover-zone{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.el-cascader-menu__empty-text{color:var(--el-cascader-color-empty);align-items:center;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{box-sizing:border-box;outline:none;align-items:center;height:34px;padding:0 30px 0 20px;line-height:34px;display:flex;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-selectable.in-checked-path,.el-cascader-node.is-active{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):hover,.el-cascader-node:not(.is-disabled):focus{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:1;padding:0 8px;overflow:hidden}.el-cascader-node>.el-checkbox,.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);vertical-align:middle;font-size:var(--el-font-size-base);outline:none;line-height:32px;display:inline-block;position:relative}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:read-only{cursor:pointer}.el-cascader .el-input .el-input__inner:disabled{cursor:not-allowed}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--large .el-cascader__tags{gap:6px;padding:8px}.el-cascader--large .el-cascader__search-input{height:24px;margin-left:7px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader--small .el-cascader__tags{gap:4px;padding:2px}.el-cascader--small .el-cascader__search-input{height:20px;margin-left:5px}.el-cascader.is-disabled .el-cascader__label{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-cascader__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-cascader__tags{text-align:left;box-sizing:border-box;flex-wrap:wrap;gap:6px;padding:4px;line-height:normal;display:flex;position:absolute;top:50%;left:0;right:30px;transform:translateY(-50%)}.el-cascader__tags .el-tag{text-overflow:ellipsis;background:var(--el-cascader-tag-background);align-items:center;max-width:100%;display:inline-flex}.el-cascader__tags .el-tag.el-tag--dark,.el-cascader__tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__tags .el-tag:not(.is-hit){border-color:#0000}.el-cascader__tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__tags .el-tag>span{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags .el-tag+input{margin-left:0}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{text-overflow:ellipsis;background:var(--el-fill-color);align-items:center;max-width:100%;display:inline-flex}.el-cascader__collapse-tags .el-tag.el-tag--dark,.el-cascader__collapse-tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:#0000}.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__collapse-tags .el-tag>span{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags .el-tag+input{margin-left:0}.el-cascader__collapse-tags .el-tag{margin:2px 0}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-wrap{max-height:204px}.el-cascader__suggestion-list{font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center;margin:0;padding:6px 0;list-style:none}.el-cascader__suggestion-list.el-vl__window{margin:6px 0;padding:0}.el-cascader__suggestion-list.el-vl__window ul{margin:0;padding:0}.el-cascader__suggestion-item{text-align:left;cursor:pointer;box-sizing:border-box;outline:none;justify-content:space-between;align-items:center;height:34px;padding:0 15px;display:flex}.el-cascader__suggestion-item:hover,.el-cascader__suggestion-item:focus{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>:not(.el-icon){white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__suggestion-item .el-icon{flex-shrink:0}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{min-width:60px;height:24px;color:var(--el-cascader-menu-text-color);box-sizing:border-box;background:0 0;border:none;outline:none;flex:1;margin-left:7px;padding:0}.el-cascader__search-input::placeholder{color:#0000}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);transition:var(--el-transition-all);padding:7px 15px;font-weight:700;display:inline-block}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--primary.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.el-check-tag--primary.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.el-check-tag--primary.is-checked.is-disabled{background-color:var(--el-color-primary-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-checked.is-disabled:hover{background-color:var(--el-color-primary-light-8)}.el-check-tag.el-check-tag--primary.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-check-tag.el-check-tag--success.is-checked{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.el-check-tag--success.is-checked:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.el-check-tag--success.is-checked.is-disabled{background-color:var(--el-color-success-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-checked.is-disabled:hover{background-color:var(--el-color-success-light-8)}.el-check-tag.el-check-tag--success.is-disabled{background-color:var(--el-color-success-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-disabled:hover{background-color:var(--el-color-success-light-9)}.el-check-tag.el-check-tag--warning.is-checked{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.el-check-tag--warning.is-checked:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.el-check-tag--warning.is-checked.is-disabled{background-color:var(--el-color-warning-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-checked.is-disabled:hover{background-color:var(--el-color-warning-light-8)}.el-check-tag.el-check-tag--warning.is-disabled{background-color:var(--el-color-warning-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-disabled:hover{background-color:var(--el-color-warning-light-9)}.el-check-tag.el-check-tag--danger.is-checked{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.el-check-tag--danger.is-checked:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.el-check-tag--danger.is-checked.is-disabled{background-color:var(--el-color-danger-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-checked.is-disabled:hover{background-color:var(--el-color-danger-light-8)}.el-check-tag.el-check-tag--danger.is-disabled{background-color:var(--el-color-danger-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-disabled:hover{background-color:var(--el-color-danger-light-9)}.el-check-tag.el-check-tag--error.is-checked{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.el-check-tag--error.is-checked:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.el-check-tag--error.is-checked.is-disabled{background-color:var(--el-color-error-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-checked.is-disabled:hover{background-color:var(--el-color-error-light-8)}.el-check-tag.el-check-tag--error.is-disabled{background-color:var(--el-color-error-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-disabled:hover{background-color:var(--el-color-error-light-9)}.el-check-tag.el-check-tag--info.is-checked{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.el-check-tag--info.is-checked:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--info.is-checked.is-disabled{background-color:var(--el-color-info-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-checked.is-disabled:hover{background-color:var(--el-color-info-light-8)}.el-check-tag.el-check-tag--info.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);--el-checkbox-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;position:relative}.el-checkbox-button__inner{line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;z-index:-1;outline:none;margin:0;position:absolute}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button.is-disabled.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-disabled-checked-fill)}.el-checkbox-button:first-child .el-checkbox-button__inner{border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{font-size:var(--el-font-size-base);border-radius:0;padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;padding:5px 11px;font-size:12px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;height:var(--el-checkbox-height,32px);align-items:center;margin-right:30px;display:inline-flex;position:relative}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color);will-change:transform}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%)rotate(45deg)scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";background-color:var(--el-checkbox-checked-icon-color);height:2px;display:block;position:absolute;top:5px;left:0;right:0;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);display:inline-block;position:relative}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";transform-origin:50%;border:1px solid #0000;border-top:0;border-left:0;width:3px;height:7px;transition:transform .15s ease-in 50ms;position:absolute;top:50%;left:50%;transform:translate(-45%,-60%)rotate(45deg)scaleY(0)}.el-checkbox__original{opacity:0;z-index:-1;outline:none;width:0;height:0;margin:0;position:absolute}.el-checkbox__label{line-height:1;font-size:var(--el-checkbox-font-size);padding-left:8px;display:inline-block}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{min-height:1px;display:block}.el-col-0{flex:0 0;max-width:0%;display:none}.el-col-0.is-guttered{display:none}.el-col-offset-0{margin-left:0%}.el-col-pull-0{position:relative;right:0%}.el-col-push-0{position:relative;left:0%}.el-col-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-3.is-guttered{display:block}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6667%}.el-col-pull-4{position:relative;right:16.6667%}.el-col-push-4{position:relative;left:16.6667%}.el-col-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333%}.el-col-pull-5{position:relative;right:20.8333%}.el-col-push-5{position:relative;left:20.8333%}.el-col-6{flex:0 0 25%;max-width:25%;display:block}.el-col-6.is-guttered{display:block}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1667%}.el-col-pull-7{position:relative;right:29.1667%}.el-col-push-7{position:relative;left:29.1667%}.el-col-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333%}.el-col-pull-8{position:relative;right:33.3333%}.el-col-push-8{position:relative;left:33.3333%}.el-col-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-9.is-guttered{display:block}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6667%}.el-col-pull-10{position:relative;right:41.6667%}.el-col-push-10{position:relative;left:41.6667%}.el-col-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333%}.el-col-pull-11{position:relative;right:45.8333%}.el-col-push-11{position:relative;left:45.8333%}.el-col-12{flex:0 0 50%;max-width:50%;display:block}.el-col-12.is-guttered{display:block}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1667%}.el-col-pull-13{position:relative;right:54.1667%}.el-col-push-13{position:relative;left:54.1667%}.el-col-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333%}.el-col-pull-14{position:relative;right:58.3333%}.el-col-push-14{position:relative;left:58.3333%}.el-col-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-15.is-guttered{display:block}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6667%}.el-col-pull-16{position:relative;right:66.6667%}.el-col-push-16{position:relative;left:66.6667%}.el-col-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333%}.el-col-pull-17{position:relative;right:70.8333%}.el-col-push-17{position:relative;left:70.8333%}.el-col-18{flex:0 0 75%;max-width:75%;display:block}.el-col-18.is-guttered{display:block}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1667%}.el-col-pull-19{position:relative;right:79.1667%}.el-col-push-19{position:relative;left:79.1667%}.el-col-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333%}.el-col-pull-20{position:relative;right:83.3333%}.el-col-push-20{position:relative;left:83.3333%}.el-col-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-21.is-guttered{display:block}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6667%}.el-col-pull-22{position:relative;right:91.6667%}.el-col-push-22{position:relative;left:91.6667%}.el-col-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333%}.el-col-pull-23{position:relative;right:95.8333%}.el-col-push-23{position:relative;left:95.8333%}.el-col-24{flex:0 0 100%;max-width:100%;display:block}.el-col-24.is-guttered{display:block}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{flex:0 0;max-width:0%;display:none}.el-col-xs-0.is-guttered{display:none}.el-col-xs-offset-0{margin-left:0%}.el-col-xs-pull-0{position:relative;right:0%}.el-col-xs-push-0{position:relative;left:0%}.el-col-xs-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-xs-3.is-guttered{display:block}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6667%}.el-col-xs-pull-4{position:relative;right:16.6667%}.el-col-xs-push-4{position:relative;left:16.6667%}.el-col-xs-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333%}.el-col-xs-pull-5{position:relative;right:20.8333%}.el-col-xs-push-5{position:relative;left:20.8333%}.el-col-xs-6{flex:0 0 25%;max-width:25%;display:block}.el-col-xs-6.is-guttered{display:block}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1667%}.el-col-xs-pull-7{position:relative;right:29.1667%}.el-col-xs-push-7{position:relative;left:29.1667%}.el-col-xs-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333%}.el-col-xs-pull-8{position:relative;right:33.3333%}.el-col-xs-push-8{position:relative;left:33.3333%}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-xs-9.is-guttered{display:block}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6667%}.el-col-xs-pull-10{position:relative;right:41.6667%}.el-col-xs-push-10{position:relative;left:41.6667%}.el-col-xs-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333%}.el-col-xs-pull-11{position:relative;right:45.8333%}.el-col-xs-push-11{position:relative;left:45.8333%}.el-col-xs-12{flex:0 0 50%;max-width:50%;display:block}.el-col-xs-12.is-guttered{display:block}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1667%}.el-col-xs-pull-13{position:relative;right:54.1667%}.el-col-xs-push-13{position:relative;left:54.1667%}.el-col-xs-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333%}.el-col-xs-pull-14{position:relative;right:58.3333%}.el-col-xs-push-14{position:relative;left:58.3333%}.el-col-xs-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-xs-15.is-guttered{display:block}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6667%}.el-col-xs-pull-16{position:relative;right:66.6667%}.el-col-xs-push-16{position:relative;left:66.6667%}.el-col-xs-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333%}.el-col-xs-pull-17{position:relative;right:70.8333%}.el-col-xs-push-17{position:relative;left:70.8333%}.el-col-xs-18{flex:0 0 75%;max-width:75%;display:block}.el-col-xs-18.is-guttered{display:block}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1667%}.el-col-xs-pull-19{position:relative;right:79.1667%}.el-col-xs-push-19{position:relative;left:79.1667%}.el-col-xs-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333%}.el-col-xs-pull-20{position:relative;right:83.3333%}.el-col-xs-push-20{position:relative;left:83.3333%}.el-col-xs-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-xs-21.is-guttered{display:block}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6667%}.el-col-xs-pull-22{position:relative;right:91.6667%}.el-col-xs-push-22{position:relative;left:91.6667%}.el-col-xs-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333%}.el-col-xs-pull-23{position:relative;right:95.8333%}.el-col-xs-push-23{position:relative;left:95.8333%}.el-col-xs-24{flex:0 0 100%;max-width:100%;display:block}.el-col-xs-24.is-guttered{display:block}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{flex:0 0;max-width:0%;display:none}.el-col-sm-0.is-guttered{display:none}.el-col-sm-offset-0{margin-left:0%}.el-col-sm-pull-0{position:relative;right:0%}.el-col-sm-push-0{position:relative;left:0%}.el-col-sm-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-sm-3.is-guttered{display:block}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6667%}.el-col-sm-pull-4{position:relative;right:16.6667%}.el-col-sm-push-4{position:relative;left:16.6667%}.el-col-sm-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333%}.el-col-sm-pull-5{position:relative;right:20.8333%}.el-col-sm-push-5{position:relative;left:20.8333%}.el-col-sm-6{flex:0 0 25%;max-width:25%;display:block}.el-col-sm-6.is-guttered{display:block}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1667%}.el-col-sm-pull-7{position:relative;right:29.1667%}.el-col-sm-push-7{position:relative;left:29.1667%}.el-col-sm-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333%}.el-col-sm-pull-8{position:relative;right:33.3333%}.el-col-sm-push-8{position:relative;left:33.3333%}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-sm-9.is-guttered{display:block}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6667%}.el-col-sm-pull-10{position:relative;right:41.6667%}.el-col-sm-push-10{position:relative;left:41.6667%}.el-col-sm-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333%}.el-col-sm-pull-11{position:relative;right:45.8333%}.el-col-sm-push-11{position:relative;left:45.8333%}.el-col-sm-12{flex:0 0 50%;max-width:50%;display:block}.el-col-sm-12.is-guttered{display:block}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1667%}.el-col-sm-pull-13{position:relative;right:54.1667%}.el-col-sm-push-13{position:relative;left:54.1667%}.el-col-sm-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333%}.el-col-sm-pull-14{position:relative;right:58.3333%}.el-col-sm-push-14{position:relative;left:58.3333%}.el-col-sm-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-sm-15.is-guttered{display:block}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6667%}.el-col-sm-pull-16{position:relative;right:66.6667%}.el-col-sm-push-16{position:relative;left:66.6667%}.el-col-sm-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333%}.el-col-sm-pull-17{position:relative;right:70.8333%}.el-col-sm-push-17{position:relative;left:70.8333%}.el-col-sm-18{flex:0 0 75%;max-width:75%;display:block}.el-col-sm-18.is-guttered{display:block}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1667%}.el-col-sm-pull-19{position:relative;right:79.1667%}.el-col-sm-push-19{position:relative;left:79.1667%}.el-col-sm-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333%}.el-col-sm-pull-20{position:relative;right:83.3333%}.el-col-sm-push-20{position:relative;left:83.3333%}.el-col-sm-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-sm-21.is-guttered{display:block}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6667%}.el-col-sm-pull-22{position:relative;right:91.6667%}.el-col-sm-push-22{position:relative;left:91.6667%}.el-col-sm-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333%}.el-col-sm-pull-23{position:relative;right:95.8333%}.el-col-sm-push-23{position:relative;left:95.8333%}.el-col-sm-24{flex:0 0 100%;max-width:100%;display:block}.el-col-sm-24.is-guttered{display:block}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{flex:0 0;max-width:0%;display:none}.el-col-md-0.is-guttered{display:none}.el-col-md-offset-0{margin-left:0%}.el-col-md-pull-0{position:relative;right:0%}.el-col-md-push-0{position:relative;left:0%}.el-col-md-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-md-3.is-guttered{display:block}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6667%}.el-col-md-pull-4{position:relative;right:16.6667%}.el-col-md-push-4{position:relative;left:16.6667%}.el-col-md-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333%}.el-col-md-pull-5{position:relative;right:20.8333%}.el-col-md-push-5{position:relative;left:20.8333%}.el-col-md-6{flex:0 0 25%;max-width:25%;display:block}.el-col-md-6.is-guttered{display:block}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1667%}.el-col-md-pull-7{position:relative;right:29.1667%}.el-col-md-push-7{position:relative;left:29.1667%}.el-col-md-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333%}.el-col-md-pull-8{position:relative;right:33.3333%}.el-col-md-push-8{position:relative;left:33.3333%}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-md-9.is-guttered{display:block}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6667%}.el-col-md-pull-10{position:relative;right:41.6667%}.el-col-md-push-10{position:relative;left:41.6667%}.el-col-md-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333%}.el-col-md-pull-11{position:relative;right:45.8333%}.el-col-md-push-11{position:relative;left:45.8333%}.el-col-md-12{flex:0 0 50%;max-width:50%;display:block}.el-col-md-12.is-guttered{display:block}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1667%}.el-col-md-pull-13{position:relative;right:54.1667%}.el-col-md-push-13{position:relative;left:54.1667%}.el-col-md-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333%}.el-col-md-pull-14{position:relative;right:58.3333%}.el-col-md-push-14{position:relative;left:58.3333%}.el-col-md-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-md-15.is-guttered{display:block}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6667%}.el-col-md-pull-16{position:relative;right:66.6667%}.el-col-md-push-16{position:relative;left:66.6667%}.el-col-md-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333%}.el-col-md-pull-17{position:relative;right:70.8333%}.el-col-md-push-17{position:relative;left:70.8333%}.el-col-md-18{flex:0 0 75%;max-width:75%;display:block}.el-col-md-18.is-guttered{display:block}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1667%}.el-col-md-pull-19{position:relative;right:79.1667%}.el-col-md-push-19{position:relative;left:79.1667%}.el-col-md-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333%}.el-col-md-pull-20{position:relative;right:83.3333%}.el-col-md-push-20{position:relative;left:83.3333%}.el-col-md-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-md-21.is-guttered{display:block}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6667%}.el-col-md-pull-22{position:relative;right:91.6667%}.el-col-md-push-22{position:relative;left:91.6667%}.el-col-md-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333%}.el-col-md-pull-23{position:relative;right:95.8333%}.el-col-md-push-23{position:relative;left:95.8333%}.el-col-md-24{flex:0 0 100%;max-width:100%;display:block}.el-col-md-24.is-guttered{display:block}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{flex:0 0;max-width:0%;display:none}.el-col-lg-0.is-guttered{display:none}.el-col-lg-offset-0{margin-left:0%}.el-col-lg-pull-0{position:relative;right:0%}.el-col-lg-push-0{position:relative;left:0%}.el-col-lg-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-lg-3.is-guttered{display:block}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6667%}.el-col-lg-pull-4{position:relative;right:16.6667%}.el-col-lg-push-4{position:relative;left:16.6667%}.el-col-lg-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333%}.el-col-lg-pull-5{position:relative;right:20.8333%}.el-col-lg-push-5{position:relative;left:20.8333%}.el-col-lg-6{flex:0 0 25%;max-width:25%;display:block}.el-col-lg-6.is-guttered{display:block}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1667%}.el-col-lg-pull-7{position:relative;right:29.1667%}.el-col-lg-push-7{position:relative;left:29.1667%}.el-col-lg-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333%}.el-col-lg-pull-8{position:relative;right:33.3333%}.el-col-lg-push-8{position:relative;left:33.3333%}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-lg-9.is-guttered{display:block}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6667%}.el-col-lg-pull-10{position:relative;right:41.6667%}.el-col-lg-push-10{position:relative;left:41.6667%}.el-col-lg-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333%}.el-col-lg-pull-11{position:relative;right:45.8333%}.el-col-lg-push-11{position:relative;left:45.8333%}.el-col-lg-12{flex:0 0 50%;max-width:50%;display:block}.el-col-lg-12.is-guttered{display:block}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1667%}.el-col-lg-pull-13{position:relative;right:54.1667%}.el-col-lg-push-13{position:relative;left:54.1667%}.el-col-lg-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333%}.el-col-lg-pull-14{position:relative;right:58.3333%}.el-col-lg-push-14{position:relative;left:58.3333%}.el-col-lg-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-lg-15.is-guttered{display:block}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6667%}.el-col-lg-pull-16{position:relative;right:66.6667%}.el-col-lg-push-16{position:relative;left:66.6667%}.el-col-lg-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333%}.el-col-lg-pull-17{position:relative;right:70.8333%}.el-col-lg-push-17{position:relative;left:70.8333%}.el-col-lg-18{flex:0 0 75%;max-width:75%;display:block}.el-col-lg-18.is-guttered{display:block}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1667%}.el-col-lg-pull-19{position:relative;right:79.1667%}.el-col-lg-push-19{position:relative;left:79.1667%}.el-col-lg-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333%}.el-col-lg-pull-20{position:relative;right:83.3333%}.el-col-lg-push-20{position:relative;left:83.3333%}.el-col-lg-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-lg-21.is-guttered{display:block}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6667%}.el-col-lg-pull-22{position:relative;right:91.6667%}.el-col-lg-push-22{position:relative;left:91.6667%}.el-col-lg-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333%}.el-col-lg-pull-23{position:relative;right:95.8333%}.el-col-lg-push-23{position:relative;left:95.8333%}.el-col-lg-24{flex:0 0 100%;max-width:100%;display:block}.el-col-lg-24.is-guttered{display:block}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{flex:0 0;max-width:0%;display:none}.el-col-xl-0.is-guttered{display:none}.el-col-xl-offset-0{margin-left:0%}.el-col-xl-pull-0{position:relative;right:0%}.el-col-xl-push-0{position:relative;left:0%}.el-col-xl-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%;display:block}.el-col-xl-3.is-guttered{display:block}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6667%}.el-col-xl-pull-4{position:relative;right:16.6667%}.el-col-xl-push-4{position:relative;left:16.6667%}.el-col-xl-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333%}.el-col-xl-pull-5{position:relative;right:20.8333%}.el-col-xl-push-5{position:relative;left:20.8333%}.el-col-xl-6{flex:0 0 25%;max-width:25%;display:block}.el-col-xl-6.is-guttered{display:block}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1667%}.el-col-xl-pull-7{position:relative;right:29.1667%}.el-col-xl-push-7{position:relative;left:29.1667%}.el-col-xl-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333%}.el-col-xl-pull-8{position:relative;right:33.3333%}.el-col-xl-push-8{position:relative;left:33.3333%}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%;display:block}.el-col-xl-9.is-guttered{display:block}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6667%}.el-col-xl-pull-10{position:relative;right:41.6667%}.el-col-xl-push-10{position:relative;left:41.6667%}.el-col-xl-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333%}.el-col-xl-pull-11{position:relative;right:45.8333%}.el-col-xl-push-11{position:relative;left:45.8333%}.el-col-xl-12{flex:0 0 50%;max-width:50%;display:block}.el-col-xl-12.is-guttered{display:block}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1667%}.el-col-xl-pull-13{position:relative;right:54.1667%}.el-col-xl-push-13{position:relative;left:54.1667%}.el-col-xl-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333%}.el-col-xl-pull-14{position:relative;right:58.3333%}.el-col-xl-push-14{position:relative;left:58.3333%}.el-col-xl-15{flex:0 0 62.5%;max-width:62.5%;display:block}.el-col-xl-15.is-guttered{display:block}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6667%}.el-col-xl-pull-16{position:relative;right:66.6667%}.el-col-xl-push-16{position:relative;left:66.6667%}.el-col-xl-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333%}.el-col-xl-pull-17{position:relative;right:70.8333%}.el-col-xl-push-17{position:relative;left:70.8333%}.el-col-xl-18{flex:0 0 75%;max-width:75%;display:block}.el-col-xl-18.is-guttered{display:block}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1667%}.el-col-xl-pull-19{position:relative;right:79.1667%}.el-col-xl-push-19{position:relative;left:79.1667%}.el-col-xl-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333%}.el-col-xl-pull-20{position:relative;right:83.3333%}.el-col-xl-push-20{position:relative;left:83.3333%}.el-col-xl-21{flex:0 0 87.5%;max-width:87.5%;display:block}.el-col-xl-21.is-guttered{display:block}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6667%}.el-col-xl-pull-22{position:relative;right:91.6667%}.el-col-xl-push-22{position:relative;left:91.6667%}.el-col-xl-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333%}.el-col-xl-pull-23{position:relative;right:95.8333%}.el-col-xl-push-23{position:relative;left:95.8333%}.el-col-xl-24{flex:0 0 100%;max-width:100%;display:block}.el-col-xl-24.is-guttered{display:block}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{width:100%;min-height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border:none;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);transition:border-bottom-color var(--el-transition-duration);box-sizing:border-box;outline:none;align-items:center;padding:0;font-weight:500;display:flex}.el-collapse-item__arrow{transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{text-align:left;flex:auto}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:#0000}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color);overflow:hidden}.el-collapse-item__content{font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);padding-bottom:25px;line-height:1.76923}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-color-picker-panel{--el-colorpicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-colorpicker-bg-color);box-sizing:content-box;background:var(--el-colorpicker-bg-color);width:300px;padding:12px}.el-color-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter);border-radius:4px}.el-color-picker-panel__wrapper{margin-bottom:6px}.el-color-picker-panel__footer{text-align:right;justify-content:space-between;margin-top:12px;display:flex}.el-color-picker-panel__footer .el-input{color:#000;width:160px;font-size:12px;line-height:26px}.el-color-picker-panel.is-disabled .el-color-svpanel,.el-color-picker-panel.is-disabled .el-color-hue-slider{cursor:not-allowed;opacity:.3}.el-color-picker-panel.is-disabled .el-color-hue-slider__thumb{cursor:not-allowed}.el-color-picker-panel.is-disabled .el-color-alpha-slider,.el-color-picker-panel.is-disabled .el-color-predefine .el-color-predefine__color-selector{cursor:not-allowed;opacity:.3}.el-color-predefine{width:280px;margin-top:8px;font-size:12px;display:flex}.el-color-predefine__colors{flex-wrap:wrap;flex:1;gap:8px;display:flex}.el-color-predefine__color-selector{border-radius:var(--el-border-radius-base);cursor:pointer;border:none;outline:none;width:20px;height:20px;padding:0;overflow:hidden}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-predefine__color-selector>div{height:100%;display:flex}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{box-sizing:border-box;float:right;background-color:red;width:280px;height:12px;padding:0 2px;position:relative}.el-color-hue-slider__bar{background:linear-gradient(90deg,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-hue-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-svpanel{background-image:linear-gradient(#0000,#000),linear-gradient(90deg,#fff,#fff0);width:280px;height:180px;position:relative}.el-color-svpanel__cursor{cursor:pointer;border-radius:50%;width:4px;height:4px;position:absolute;transform:translate(-2px,-2px);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006}.el-color-svpanel__cursor:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-alpha-slider{box-sizing:border-box;background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;width:280px;height:12px;position:relative}.el-color-alpha-slider.is-disabled .el-color-alpha-slider__thumb{cursor:not-allowed}.el-color-alpha-slider__bar{background:linear-gradient(to right,#fff0 0%,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-alpha-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(#fff0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-picker-panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker-panel{--el-color-picker-alpha-bg-a:#333}.el-color-picker{outline:none;width:32px;height:32px;line-height:normal;display:inline-block;position:relative}.el-color-picker:hover:not(:-webkit-any(.is-disabled,.is-focused)) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:hover:not(:is(.is-disabled,.is-focused)) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed;background-color:var(--el-fill-color-light)}.el-color-picker.is-disabled .el-color-picker__color{opacity:.3}.el-color-picker--large{width:40px;height:40px}.el-color-picker--small{width:24px;height:24px}.el-color-picker--small .el-color-picker__icon,.el-color-picker--small .el-color-picker__empty{transform:scale(.8)}.el-color-picker__trigger{box-sizing:border-box;border:1px solid var(--el-border-color);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;width:100%;height:100%;padding:4px;font-size:0;display:inline-flex;position:relative}.el-color-picker__color{box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);text-align:center;width:100%;height:100%;display:block;position:relative}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{justify-content:center;align-items:center;width:100%;height:100%;display:inline-flex}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{color:#fff;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.el-color-picker__panel{border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);background-color:#fff}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-date-table{-webkit-user-select:none;user-select:none;font-size:12px}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;text-align:center;cursor:pointer;width:32px;height:30px;padding:4px 0;position:relative}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;width:24px;height:24px;margin:0 auto;line-height:24px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.start-date .el-date-table-cell__text,.el-date-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.start-date .el-date-table-cell,.el-date-table td.end-date .el-date-table-cell{color:#fff}.el-date-table td.start-date .el-date-table-cell__text,.el-date-table td.end-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff;border-radius:15px}.el-date-table td.week{color:var(--el-datepicker-off-text-color);cursor:default;font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{color:var(--el-datepicker-header-text-color);border-bottom:solid 1px var(--el-border-color-lighter);padding:5px;font-weight:400}.el-date-table th.el-date-table__week-header{width:24px;padding:0}.el-month-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-month-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.el-month-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.start-date .el-date-table-cell__text,.el-month-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-month-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-month-table td .el-date-table-cell__text{width:54px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-month-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.start-date .el-date-table-cell,.el-month-table td.end-date .el-date-table-cell{color:#fff}.el-month-table td.start-date .el-date-table-cell__text,.el-month-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.el-year-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-year-table td.today.start-date .el-date-table-cell__text,.el-year-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-year-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-year-table td .el-date-table-cell__text{width:60px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.el-year-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-year-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-year-table td.start-date .el-date-table-cell,.el-year-table td.end-date .el-date-table-cell{color:#fff}.el-year-table td.start-date .el-date-table-cell__text,.el-year-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{vertical-align:top;width:50%;max-height:192px;display:inline-block;position:relative;overflow:auto}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);width:100%;z-index:var(--el-index-normal);text-align:center;cursor:pointer;height:30px;font-size:12px;line-height:30px;position:absolute;left:0}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{text-align:center;padding:0}.el-time-spinner__list{text-align:center;margin:0;padding:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";width:100%;height:80px;display:block}.el-time-spinner__item{height:32px;color:var(--el-text-color-regular);font-size:12px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;text-align:left;vertical-align:middle;position:relative}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__icon{height:inherit;color:var(--el-text-color-placeholder);float:left;font-size:14px}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;width:39%;height:30px;line-height:30px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:#0000;border:none;outline:none;margin:0;padding:0;display:inline-block}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{overflow-wrap:break-word;height:100%;color:var(--el-text-color-primary);flex:1;justify-content:center;align-items:center;margin:0;padding:0 5px;font-size:14px;display:inline-flex}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer;font-size:14px}.el-date-editor .el-range__close-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{vertical-align:middle;align-items:center;padding:0 10px;display:inline-flex}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{height:38px;font-size:14px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{height:22px;font-size:12px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:hover,.el-range-editor.is-disabled:focus{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-datepicker-bg-color);border-radius:var(--el-popper-border-radius,var(--el-border-radius-base));line-height:30px}.el-picker-panel .el-time-panel{border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-datepicker-bg-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body:after,.el-picker-panel__body-wrapper:after{content:"";clear:both;display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);text-align:right;background-color:var(--el-datepicker-bg-color);padding:4px 12px;font-size:0;position:relative}.el-picker-panel__shortcut{width:100%;color:var(--el-datepicker-text-color);text-align:left;cursor:pointer;background-color:#0000;border:0;outline:none;padding-left:12px;font-size:14px;line-height:28px;display:block}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{color:var(--el-datepicker-active-color);background-color:#e6f1fe}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);cursor:pointer;background-color:#0000;border-radius:2px;outline:none;padding:0 20px;font-size:12px;line-height:24px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{color:var(--el-datepicker-icon-color);cursor:pointer;background:0 0;border:0;outline:none;margin-top:8px;padding:1px 6px;font-size:12px;line-height:1}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn.is-disabled .el-icon{cursor:inherit}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel.is-disabled .el-picker-panel__prev-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__prev-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__prev-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__next-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__next-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__next-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__icon-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__icon-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__icon-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__shortcut{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__shortcut:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__shortcut .el-icon{cursor:inherit}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;padding-top:6px;position:absolute;top:0;bottom:0;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);--el-datepicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-datepicker-bg-color);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-picker__header{text-align:center;padding:12px 12px 0}.el-date-picker__header--bordered{border-bottom:solid 1px var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{text-align:center;padding:10px}.el-date-picker__time-label{float:left;cursor:pointer;margin-left:10px;line-height:30px}.el-date-picker .el-time-panel{position:absolute}.el-date-picker.is-disabled .el-date-picker__header-label{color:var(--el-text-color-disabled)}.el-date-picker.is-disabled .el-date-picker__header-label:hover{cursor:not-allowed}.el-date-picker.is-disabled .el-date-picker__header-label .el-icon{cursor:inherit}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);--el-datepicker-bg-color:var(--el-bg-color-overlay);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker.single-panel{width:322px}.el-date-range-picker.single-panel .el-picker-panel__body{min-width:322px}.el-date-range-picker.single-panel.has-sidebar.has-time{width:434px}.el-date-range-picker.single-panel.has-sidebar{width:438px}.el-date-range-picker.single-panel .el-picker-panel__content{width:292px;margin:15px;padding:0;display:block;position:relative}.el-date-range-picker__header{text-align:center;height:28px;position:relative}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{margin-right:50px;font-size:16px;font-weight:500}.el-date-range-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-range-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-range-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-range-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-range-picker__content{box-sizing:border-box;width:50%;margin:0;padding:16px;display:table-cell}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-range-picker__time-header>.el-icon-arrow-right{vertical-align:middle;color:var(--el-datepicker-icon-color);font-size:20px;display:table-cell}.el-date-range-picker__time-picker-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{z-index:1;background:#fff;position:absolute;top:13px;right:0}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-date-range-picker.is-disabled .el-date-range-picker__header-label{color:var(--el-text-color-disabled)}.el-date-range-picker.is-disabled .el-date-range-picker__header-label:hover{cursor:not-allowed}.el-date-range-picker.is-disabled .el-date-range-picker__header-label .el-icon{cursor:inherit}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{text-align:center;z-index:1;padding:10px;position:relative}.el-time-range-picker__cell{box-sizing:border-box;width:50%;margin:0;padding:4px 7px 7px;display:inline-block}.el-time-range-picker__header{text-align:center;margin-bottom:5px;font-size:14px}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{width:180px;z-index:var(--el-index-top);-webkit-user-select:none;user-select:none;box-sizing:content-box;border-radius:2px;position:relative;left:0}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";z-index:-1;box-sizing:border-box;text-align:left;height:32px;margin-top:-16px;padding-top:6px;position:absolute;top:50%;left:0;right:0}.el-time-panel__content:after{margin-left:12%;margin-right:12%;left:50%}.el-time-panel__content:before{border-top:1px solid var(--el-border-color-light);border-bottom:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));text-align:right;box-sizing:border-box;height:36px;padding:4px;line-height:25px}.el-time-panel__btn{cursor:pointer;color:var(--el-text-color-primary);background-color:#0000;border:none;outline:none;margin:0 5px;padding:0 5px;font-size:12px;line-height:28px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter)}.el-picker-panel.is-border .el-picker-panel__body-wrapper{position:relative}.el-picker-panel.is-border.el-picker-panel [slot=sidebar],.el-picker-panel.is-border.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;height:100%;padding-top:6px;position:absolute;top:0;overflow:auto}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;text-align:left;font-size:14px;line-height:23px}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color);position:fixed;top:0;left:0}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width,50%);overflow-wrap:break-word;position:relative}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{margin:0;position:fixed;inset:0;overflow:auto}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size,16px))}.el-dialog__headerbtn{cursor:pointer;width:48px;height:48px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{position:fixed;inset:0;overflow:auto}.el-overlay-dialog.is-closing .el-dialog{pointer-events:none}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);width:100%;height:1px;margin:24px 0;display:block}.el-divider--vertical{vertical-align:middle;border-left:1px var(--el-border-color) var(--el-border-style);width:1px;height:1em;margin:0 8px;display:inline-block;position:relative}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);padding:0 20px;font-size:14px;font-weight:500;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%)translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;box-sizing:border-box;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);transition:all var(--el-transition-duration);flex-direction:column;display:flex;position:absolute}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{color:var(--el-text-color-primary);padding:var(--el-drawer-padding-primary);align-items:center;margin-bottom:32px;padding-bottom:0;display:flex;overflow:hidden}.el-drawer__header>:first-child{flex:1}.el-drawer__title{line-height:inherit;flex:1;margin:0;font-size:16px}.el-drawer__footer{padding:var(--el-drawer-padding-primary);text-align:right;padding-top:10px;overflow:hidden}.el-drawer__close-btn{cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:#0000;border:none;outline:none;display:inline-flex}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{padding:var(--el-drawer-padding-primary);flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{-webkit-user-select:none;user-select:none;background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:before{content:"";background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{height:100%;width:var(--el-drawer-dragger-size);cursor:ew-resize;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{width:3px;top:0;bottom:0}.el-drawer.ttb,.el-drawer.btt{width:100%;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger,.el-drawer.btt>.el-drawer__dragger{width:100%;height:var(--el-drawer-dragger-size);cursor:ns-resize;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger:before,.el-drawer.btt>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-from,.el-drawer-fade-enter-active,.el-drawer-fade-enter-to,.el-drawer-fade-leave-from,.el-drawer-fade-leave-active,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:#0000!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);vertical-align:top;line-height:1;display:inline-flex;position:relative}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;margin:0;padding:0;list-style:none}.el-dropdown .el-dropdown__caret-button{border-left:none;justify-content:center;align-items:center;width:32px;padding-left:0;padding-right:0;display:inline-flex}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";background:var(--el-overlay-color-lighter);width:1px;display:block;position:absolute;top:-1px;bottom:-1px;left:0}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{z-index:var(--el-dropdown-menu-index);background-color:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);box-shadow:none;border:none;margin:0;padding:5px 0;list-style:none;position:relative;top:0;left:0}.el-dropdown-menu__item{white-space:nowrap;line-height:22px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:none;align-items:center;margin:0;padding:5px 16px;list-style:none;display:flex}.el-dropdown-menu__item:not(.is-disabled):hover,.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;font-size:14px;line-height:22px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;font-size:12px;line-height:20px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;user-select:none;vertical-align:top;object-fit:contain;width:100%;height:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;vertical-align:top;width:100%;height:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{font-size:var(--el-font-size-base);color:var(--el-text-color-secondary);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.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-form-item{--font-size:14px;margin-bottom:18px;display:flex}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{text-align:left;justify-content:flex-start}.el-form-item--label-right .el-form-item__label{text-align:right;justify-content:flex-end}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{text-align:left;width:-moz-fit-content;width:fit-content;height:auto;margin-bottom:8px;padding-right:0;line-height:22px;display:block}.el-form-item__label-wrap{display:flex}.el-form-item__label{font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);box-sizing:border-box;flex:none;align-items:flex-start;height:32px;padding:0 12px 0 0;line-height:32px;display:inline-flex}.el-form-item__content{line-height:32px;font-size:var(--font-size);flex-wrap:wrap;flex:1;align-items:center;min-width:0;display:flex;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);padding-top:2px;font-size:12px;line-height:1;position:absolute;top:100%;left:0}.el-form-item__error--inline{margin-left:10px;display:inline-block;position:relative;top:auto;left:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field:hover,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field:focus,.el-form-item.is-error .el-form-item__content :not(.el-input-otp--underlined) .el-input-otp__input-field.is-focus,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:hover:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field:focus:after,.el-form-item.is-error .el-form-item__content .el-input-otp--underlined .el-input-otp__input-field.is-focus:after{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px #0000}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{vertical-align:middle;margin-right:32px;display:inline-flex}.el-form--inline .el-form-item:last-child{margin-right:0}.el-form--inline.el-form--label-top{flex-wrap:wrap;display:flex}.el-form--inline.el-form--label-top .el-form-item{display:block}.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-image-viewer__wrapper{position:fixed;inset:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{z-index:1;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{width:40px;height:40px;font-size:40px;top:40px;right:40px}.el-image-viewer__canvas{-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:static}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;height:44px;padding:0 23px;bottom:30px;left:50%;transform:translate(-50%)}.el-image-viewer__actions__inner{cursor:default;color:#fff;justify-content:space-around;align-items:center;gap:22px;width:100%;height:100%;padding:0 6px;font-size:23px;display:flex}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{cursor:default;color:#fff;bottom:90px;left:50%;transform:translate(-50%)}.el-image-viewer__prev{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;left:40px;transform:translateY(-50%)}.el-image-viewer__next{text-indent:2px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;right:40px;transform:translateY(-50%)}.el-image-viewer__close{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px}.el-image-viewer__mask{opacity:.5;background:#000;width:100%;height:100%;position:absolute;top:0;left:0}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}.el-image__error,.el-image__placeholder,.el-image__wrapper,.el-image__inner{width:100%;height:100%}.el-image{display:inline-block;position:relative;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle;justify-content:center;align-items:center;font-size:14px;display:flex}.el-image__preview{cursor:pointer}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height,32px) - 2px)}.el-input__inner{-webkit-appearance:none;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.el-input .el-input__clear{transition:color var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height,40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height,24px) - 2px)}.el-input-group{align-items:stretch;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{color:inherit;background-color:#0000;border-color:#0000}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important}.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__increase,.el-input-number.is-controls-right .el-input-number__decrease{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--el-input-number-controls-height:11px}.el-input-tag{--el-input-tag-border-color-hover:var(--el-border-color-hover);--el-input-tag-placeholder-color:var(--el-text-color-placeholder);--el-input-tag-disabled-color:var(--el-disabled-text-color);--el-input-tag-disabled-border:var(--el-disabled-border-color);--el-input-tag-font-size:var(--el-font-size-base);--el-input-tag-close-hover-color:var(--el-text-color-secondary);--el-input-tag-text-color:var(--el-text-color-regular);--el-input-tag-input-focus-border-color:var(--el-color-primary);--el-input-tag-width:100%;--el-input-tag-mini-height:var(--el-component-size);--el-input-tag-gap:6px;--el-input-tag-padding:4px;--el-input-tag-inner-padding:8px;--el-input-tag-line-height:24px;box-sizing:border-box;cursor:pointer;font-size:var(--el-input-tag-font-size);padding:var(--el-input-tag-padding);width:var(--el-input-tag-width);min-height:var(--el-input-tag-mini-height);line-height:var(--el-input-tag-line-height);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;display:flex;transform:translate(0)}.el-input-tag.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-tag.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-input-tag.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled:hover{box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input-tag.is-disabled .el-input-tag__inner .el-input-tag__input,.el-input-tag.is-disabled .el-input-tag__inner .el-tag{cursor:not-allowed}.el-input-tag__prefix{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;display:flex}.el-input-tag__suffix{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:8px;display:flex}.el-input-tag__collapse-tag{line-height:1}.el-input-tag__input-tag-list{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-input-tag__input-tag-list.is-near{margin-left:-8px}.el-input-tag__input-tag-list .el-tag{cursor:pointer;border-color:#0000}.el-input-tag__input-tag-list .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__input-tag-list .el-tag .el-tag__content{min-width:0}.el-input-tag__inner{align-items:center;gap:var(--el-input-tag-gap);flex-wrap:wrap;flex:1;min-width:0;max-width:100%;display:flex;position:relative}.el-input-tag__inner.is-left-space{margin-left:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-right-space{margin-right:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-draggable .el-tag{cursor:move;-webkit-user-select:none;user-select:none}.el-input-tag__drop-indicator{width:1px;height:var(--el-input-tag-line-height);background-color:var(--el-color-primary);position:absolute;top:0}.el-input-tag__inner .el-tag{cursor:pointer;border-color:#0000;max-width:100%}.el-input-tag__inner .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__inner .el-tag .el-tag__content{text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:normal;overflow:hidden}.el-input-tag__input-wrapper{flex:1}.el-input-tag__input{color:var(--el-input-tag-text-color);font-size:inherit;font-family:inherit;line-height:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;padding:0}.el-input-tag__input::placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-input-tag--large{--el-input-tag-gap:6px;--el-input-tag-padding:8px;--el-input-tag-padding-left:8px;--el-input-tag-font-size:14px}.el-input-tag--small{--el-input-tag-gap:4px;--el-input-tag-padding:2px;--el-input-tag-padding-left:6px;--el-input-tag-font-size:12px;--el-input-tag-line-height:20px;--el-input-tag-mini-height:var(--el-component-size-small)}.el-input-otp{--el-input-otp-text-color:var(--el-text-color-regular);--el-input-otp-field-width:calc(var(--el-input-otp-size) - 4px);--el-input-otp-gap:8px;--el-input-otp-font-size:14px;--el-input-otp-size:32px}.el-input-otp--large{--el-input-otp-gap:12px;--el-input-otp-font-size:14px;--el-input-otp-size:40px}.el-input-otp--small{--el-input-otp-gap:6px;--el-input-otp-font-size:12px;--el-input-otp-size:24px}.el-input-otp{align-items:center;column-gap:var(--el-input-otp-gap);font-size:var(--el-input-otp-font-size);height:var(--el-input-otp-size);flex-wrap:nowrap;display:inline-flex}.el-input-otp.is-disabled,.el-input-otp.is-disabled .el-input-otp__input{cursor:not-allowed}.el-input-otp__input-field{width:var(--el-input-otp-field-width,calc(var(--el-input-otp-size) - 4px));border-radius:var(--el-border-radius-base);height:100%;position:relative}.el-input-otp__input{text-align:center;width:100%;height:100%;line-height:1;font-size:inherit;color:var(--el-input-otp-text-color,var(--el-text-color-regular));background-color:#0000;border:none;outline:none;padding:0}.el-input-otp.is-disabled .el-input-otp__input{color:var(--el-text-color-disabled)}.el-input-otp--outlined .el-input-otp__input-field{box-shadow:0 0 0 1px var(--el-border-color) inset}.el-input-otp--outlined .el-input-otp__input-field:hover{box-shadow:0 0 0 1px var(--el-color-primary-light-5) inset}.el-input-otp--outlined .el-input-otp__input-field:focus-within{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-otp--outlined.is-disabled .el-input-otp__input-field{background-color:var(--el-fill-color-light)}.el-input-otp--outlined.is-disabled .el-input-otp__input-field:hover{box-shadow:0 0 0 1px var(--el-border-color) inset}.el-input-otp--filled .el-input-otp__input-field{background-color:var(--el-fill-color)}.el-input-otp--filled .el-input-otp__input-field:hover{background-color:var(--el-fill-color-dark)}.el-input-otp--filled .el-input-otp__input-field:focus-within{background-color:var(--el-fill-color-blank);box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-otp--filled.is-disabled .el-input-otp__input-field,.el-input-otp--filled.is-disabled .el-input-otp__input-field:hover{background-color:var(--el-fill-color-light)}.el-input-otp--underlined .el-input-otp__input-field:after{content:"";background-color:var(--el-border-color);width:100%;height:1px;display:block;position:absolute;bottom:0;left:0}.el-input-otp--underlined .el-input-otp__input-field:hover:after{background-color:var(--el-color-primary-light-5)}.el-input-otp--underlined .el-input-otp__input-field:focus-within:after{background-color:var(--el-color-primary)}.el-input-otp--underlined.is-disabled .el-input-otp__input-field:hover:after{background-color:var(--el-border-color)}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);vertical-align:middle;cursor:pointer;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color);outline:none;flex-direction:row;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex;position:relative}.el-link.is-hover-underline:hover:after{content:"";border-bottom:1px solid var(--el-link-hover-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link.is-underline:after{content:"";border-bottom:1px solid var(--el-link-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link:hover:after{border-color:var(--el-link-hover-text-color)}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link__inner{justify-content:center;align-items:center;display:inline-flex}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link.is-disabled:after{border-color:var(--el-link-disabled-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{z-index:2000;background-color:var(--el-mask-color);transition:opacity var(--el-transition-duration);margin:0;position:absolute;inset:0}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size)) / 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size)) / 2);text-align:center;width:100%;position:absolute;top:50%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:2s linear infinite loading-rotate;display:inline}.el-loading-spinner .path{stroke-dasharray:90 150;stroke-dashoffset:0;stroke-width:2px;stroke:var(--el-color-primary);stroke-linecap:round;animation:1.5s ease-in-out infinite loading-dash}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1 200;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-40px}to{stroke-dasharray:90 150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}: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}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word;display:inline-block;position:relative;overflow:hidden}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{text-align:center;padding:16px;position:fixed;inset:0;overflow:auto}.is-message-box .el-overlay-message-box:after{content:"";vertical-align:middle;width:0;height:100%;display:inline-block}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size,16px))}.el-message-box__title{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{width:40px;height:40px;font-size:var(--el-message-close-size,16px);cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;gap:12px;display:flex}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{min-width:0;margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{padding-top:var(--el-messagebox-padding-primary);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.el-message-box--center .el-message-box__title{justify-content:center;align-items:center;gap:6px;display:flex}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translate(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);background-color:var(--el-message-bg-color);width:max-content;max-width:calc(100% - 32px);transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;padding:var(--el-message-padding);align-items:center;gap:8px;display:flex;position:fixed}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:50%;transform:translate(-50%)}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0}.el-message-fade-enter-from.is-left,.el-message-fade-enter-from.is-right,.el-message-fade-leave-to.is-left,.el-message-fade-leave-to.is-right{transform:translateY(-100%)}.el-message-fade-enter-from.is-left.is-bottom,.el-message-fade-enter-from.is-right.is-bottom,.el-message-fade-leave-to.is-left.is-bottom,.el-message-fade-leave-to.is-right.is-bottom{transform:translateY(100%)}.el-message-fade-enter-from.is-center,.el-message-fade-leave-to.is-center{transform:translate(-50%,-100%)}.el-message-fade-enter-from.is-center.is-bottom,.el-message-fade-leave-to.is-center.is-bottom{transform:translate(-50%,100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);overflow-wrap:break-word;z-index:9999;display:flex;position:fixed;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{min-width:0;margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right);flex:1}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);color:var(--el-notification-content-color);margin:6px 0 0;line-height:24px}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size);flex-shrink:0}.el-notification .el-notification__closeBtn{cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size);position:absolute;top:18px;right:15px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--primary{--el-notification-icon-color:var(--el-color-primary);color:var(--el-notification-icon-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{z-index:2000;background-color:var(--el-overlay-color-lighter);height:100%;position:fixed;inset:0;overflow:auto}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{justify-content:space-between;align-items:center;line-height:24px;display:flex}.el-page-header__left{align-items:center;margin-right:40px;display:flex;position:relative}.el-page-header__back{cursor:pointer;align-items:center;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;margin-right:10px;font-size:16px;display:flex}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);align-items:center;font-weight:400;display:flex}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select{width:128px}.el-pagination .btn-prev,.el-pagination .btn-next{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pagination .btn-prev *,.el-pagination .btn-next *{pointer-events:none}.el-pagination .btn-prev:focus,.el-pagination .btn-next:focus{outline:none}.el-pagination .btn-prev:hover,.el-pagination .btn-next:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-prev.is-active,.el-pagination .btn-next.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-prev.is-active.is-disabled,.el-pagination .btn-next.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-prev:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-next.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-prev .el-icon,.el-pagination .btn-next .el-icon{width:inherit;font-size:12px;font-weight:700;display:block}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);font-weight:400}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);align-items:center;font-weight:400;display:flex}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;justify-content:flex-end;align-items:center;display:flex}.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .el-pager li:disabled,.el-pagination.is-background .el-pager li.is-disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-prev,.el-pagination--small .btn-next,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small span:not([class*=suffix]),.el-pagination--small button{font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-prev,.el-pagination--large .btn-next,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{-webkit-user-select:none;user-select:none;align-items:center;margin:0;padding:0;font-size:0;list-style:none;display:flex}.el-pager li{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li:disabled,.el-pager li.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm{outline:none}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);min-width:150px;padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);overflow-wrap:break-word;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);margin-bottom:12px;line-height:1}.el-popover__reference:focus:not(.focusing),.el-popover__reference:focus:hover{outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus:active,.el-popover.el-popper:focus{outline-width:0}.el-progress{align-items:center;line-height:1;display:flex;position:relative}.el-progress__text{color:var(--el-text-color-regular);min-width:50px;margin-left:5px;font-size:14px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{text-align:center;width:100%;margin:0;position:absolute;top:50%;left:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{margin-right:0;padding-right:0;display:block}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);vertical-align:middle;border-radius:100px;height:6px;position:relative;overflow:hidden}.el-progress-bar__inner{background-color:var(--el-color-primary);text-align:right;white-space:nowrap;border-radius:100px;height:100%;line-height:1;transition:width .6s;position:absolute;top:0;left:0}.el-progress-bar__inner:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-progress-bar__inner--indeterminate{animation:3s infinite indeterminate;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,#0000001a 25%,#0000 25% 50%,#0000001a 50% 75%,#0000 75%,#0000);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:3s linear infinite striped-flow}.el-progress-bar__innerText{vertical-align:middle;color:#fff;margin:0 5px;font-size:12px;display:inline-block}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);outline:none;display:inline-block;position:relative}.el-radio-button__inner{white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);line-height:1;font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio{opacity:0;z-index:-1;outline:none;position:absolute}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{font-size:var(--el-font-size-base);border-radius:0;padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;padding:5px 11px;font-size:12px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{flex-wrap:wrap;align-items:center;font-size:0;display:inline-flex}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);cursor:pointer;white-space:nowrap;font-size:var(--el-font-size-base);-webkit-user-select:none;user-select:none;outline:none;align-items:center;height:32px;margin-right:30px;display:inline-flex;position:relative}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{width:12px;height:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;vertical-align:middle;outline:none;display:inline-flex;position:relative}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%)scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);cursor:pointer;box-sizing:border-box;transition:all .3s;display:inline-block;position:relative}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";width:4px;height:4px;transition:transform .15s ease-in;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(0)}.el-radio__original{opacity:0;z-index:-1;outline:none;margin:0;position:absolute;inset:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);--el-rate-outline-color:var(--el-color-primary-light-5);align-items:center;height:32px;display:inline-flex}.el-rate:focus,.el-rate:active{outline:none}.el-rate:focus-visible .el-rate__item .el-rate__icon.is-focus-visible{outline:2px solid var(--el-rate-outline-color);transition:outline-offset,outline}.el-rate__item{cursor:pointer;vertical-align:middle;color:var(--el-rate-void-color);font-size:0;line-height:normal;display:inline-block;position:relative}.el-rate .el-rate__icon{font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration);display:inline-block;position:relative}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;position:absolute;top:0;left:0;overflow:hidden}.el-rate__decimal--box{position:absolute;top:0;left:0}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{cursor:not-allowed;color:var(--el-rate-disabled-void-color)}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;text-align:center;box-sizing:border-box;padding:var(--el-result-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);margin:0;line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{font-size:var(--el-font-size-base);color:var(--el-text-color-regular);margin:0;line-height:1.3}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;flex-wrap:wrap;display:flex;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") 0 0/100% 100% no-repeat}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);width:100%;height:16px;display:inline-block}.el-skeleton__circle{width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);border-radius:50%}.el-skeleton__button{border-radius:4px;width:64px;height:40px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;border-radius:0;justify-content:center;align-items:center;display:flex}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@keyframes el-skeleton-loading{0%{background-position:100%}to{background-position:0}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;animation:1.4s infinite el-skeleton-loading}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;width:100%;height:32px;display:flex}.el-slider__runway{height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;position:relative}.el-slider__runway.show-input{width:auto;margin-right:30px}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed;transform:scale(1)}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);z-index:1;top:var(--el-slider-button-wrapper-offset);text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;outline:none;line-height:normal;position:absolute;transform:translate(-50%)}.el-slider__button-wrapper:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{transform:scale(1.2)}.el-slider__button:hover,.el-slider__button.hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);position:absolute;transform:translate(-50%)}.el-slider__marks{width:18px;height:100%;top:0;left:12px}.el-slider__marks-text{color:var(--el-color-info);white-space:pre;margin-top:15px;font-size:14px;position:absolute;transform:translate(-50%)}.el-slider.is-vertical{flex:0;width:auto;height:100%;display:inline-flex;position:relative}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);border-radius:0 0 3px 3px;height:auto}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{vertical-align:top;display:inline-flex}.el-space__item{flex-wrap:wrap;display:flex}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{vertical-align:middle;display:inline-block}.el-spinner-inner{width:50px;height:50px;animation:2s linear infinite rotate}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:1.5s ease-in-out infinite dash}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1 150;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-35px}to{stroke-dasharray:90 150;stroke-dashoffset:-124px}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-grow:0;flex-shrink:0;flex-basis:auto!important}.el-step:last-of-type .el-step__main,.el-step:last-of-type .el-step__description{padding-right:0}.el-step__head{width:100%;position:relative}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{z-index:1;box-sizing:border-box;background:var(--el-bg-color);justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;transition:all .15s ease-out;display:inline-flex;position:relative}.el-step__icon.is-text{border:2px solid;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;user-select:none;text-align:center;color:inherit;font-weight:700;line-height:1;display:inline-block}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:currentColor;position:absolute}.el-step__line-inner{box-sizing:border-box;border:1px solid;width:0;height:0;transition:all .15s ease-out;display:block}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{margin-top:-5px;padding-right:10%;font-size:12px;font-weight:400;line-height:20px}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{padding-bottom:8px;line-height:24px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-vertical .el-step__description{padding-right:0}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{width:auto;padding-right:10px;font-size:0}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8)translateY(1px)}.el-step.is-simple .el-step__main{flex-grow:1;align-items:stretch;display:flex;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{overflow-wrap:break-word;max-width:50%}.el-step.is-simple .el-step__arrow{flex-grow:1;justify-content:center;align-items:center;display:flex}.el-step.is-simple .el-step__arrow:before,.el-step.is-simple .el-step__arrow:after{content:"";background:var(--el-text-color-placeholder);width:1px;height:15px;display:inline-block;position:absolute}.el-step.is-simple .el-step__arrow:before{transform-origin:0 0;transform:rotate(-45deg)translateY(-4px)}.el-step.is-simple .el-step__arrow:after{transform-origin:100% 100%;transform:rotate(45deg)translateY(4px)}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{line-height:normal;display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);vertical-align:middle;align-items:center;height:32px;font-size:14px;line-height:20px;display:inline-flex;position:relative}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);cursor:pointer;vertical-align:middle;height:20px;color:var(--el-text-color-primary);font-size:14px;font-weight:500;display:inline-block}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{font-size:14px;line-height:1;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{opacity:0;width:0;height:0;margin:0;position:absolute}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;min-width:40px;height:20px;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration);border-radius:10px;outline:none;align-items:center;display:inline-flex;position:relative}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);justify-content:center;align-items:center;height:16px;padding:0 4px 0 18px;display:flex;overflow:hidden}.el-switch__core .el-switch__inner-wrapper{color:var(--el-color-white);-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;align-items:center;font-size:12px;display:flex;overflow:hidden}.el-switch__core .el-switch__action{border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);background-color:var(--el-color-white);width:16px;height:16px;color:var(--el-switch-off-color);justify-content:center;align-items:center;display:flex;position:absolute;left:1px}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{height:40px;font-size:14px;line-height:24px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;min-width:50px;height:24px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{height:24px;font-size:12px;line-height:16px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;min-width:30px;height:16px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;background-color:#fff;border-radius:2px}.el-table-filter__list{outline:none;min-width:100px;margin:0;padding:5px 0;list-style:none}.el-table-filter__list-item{cursor:pointer;line-height:36px;font-size:var(--el-font-size-base);outline:none;padding:0 10px}.el-table-filter__list-item:hover,.el-table-filter__list-item:focus{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button{color:var(--el-text-color-regular);font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{height:unset;align-items:center;margin-bottom:12px;margin-left:5px;margin-right:5px;display:flex}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-fill-color-blank);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);box-sizing:border-box;background-color:var(--el-table-bg-color);width:100%;max-width:100%;height:-moz-fit-content;height:fit-content;font-size:var(--el-font-size-base);color:var(--el-table-text-color);position:relative;overflow:hidden}.el-table__inner-wrapper{flex-direction:column;height:100%;display:flex;position:relative}.el-table__inner-wrapper:before{height:1px;bottom:0;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell,.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell{border-bottom-color:#0000}.el-table__empty-block{text-align:center;justify-content:center;align-items:center;width:100%;min-height:60px;display:flex;position:sticky;left:0}.el-table__empty-text{width:50%;color:var(--el-text-color-secondary);line-height:60px}.el-table__expand-column .cell{text-align:center;-webkit-user-select:none;user-select:none;padding:0}.el-table__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon{color:var(--el-text-color-regular);width:min(23px,100%);height:23px;font-size:12px;line-height:12px}.el-table__expand-icon.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:#0000!important}.el-table__placeholder{width:20px;display:inline-block}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;text-align:left;min-width:0;z-index:var(--el-table-index);padding:8px 0;position:relative}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;width:15px;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;padding:0 12px;line-height:23px;overflow:hidden}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table th.el-table__cell.is-leaf,.el-table td.el-table__cell{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{content:"";vertical-align:middle;background:#ff4d51;border-radius:50%;width:8px;height:8px;margin-right:5px;display:inline-block}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border:after,.el-table--border:before,.el-table--border .el-table__inner-wrapper:after,.el-table__inner-wrapper:before{content:"";background-color:var(--el-table-border-color);z-index:calc(var(--el-table-index) + 2);position:absolute}.el-table--border .el-table__inner-wrapper:after{width:100%;height:1px;z-index:calc(var(--el-table-index) + 2);top:0;left:0}.el-table--border:before{width:1px;height:100%;top:-1px;left:0}.el-table--border:after{width:1px;height:100%;top:-1px;right:0}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%}.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right,.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right{background:inherit;z-index:calc(var(--el-table-index) + 1);position:sticky!important}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{content:"";width:10px;box-shadow:none;touch-action:none;pointer-events:none;position:absolute;top:0;bottom:0;overflow:hidden}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch,.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch{z-index:calc(var(--el-table-index) + 1);background:#fff;right:0;position:sticky!important}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__header-wrapper .el-table-column--selection>.cell,.el-table__body-wrapper .el-table-column--selection>.cell{align-items:center;height:23px;display:inline-flex}.el-table__header-wrapper .el-table-column--selection .el-checkbox,.el-table__body-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;position:relative;overflow:hidden}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .caret-wrapper{vertical-align:middle;width:24px;height:14px;overflow:initial;flex-direction:column;align-items:center;display:inline-flex;position:relative}.el-table .sort-caret{border:5px solid #0000;width:0;height:0;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;z-index:-1;position:absolute}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{z-index:calc(var(--el-table-index) + 2);position:sticky;top:0}.el-table.el-table--scrollable-y .el-table__body-footer{z-index:calc(var(--el-table-index) + 2);position:sticky;bottom:0}.el-table__column-resize-proxy{border-left:var(--el-table-border);width:0;z-index:calc(var(--el-table-index) + 9);position:absolute;top:0;bottom:0;left:200px}.el-table__column-filter-trigger{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger{display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);vertical-align:middle;font-size:14px}.el-table__border-left-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0;left:0}.el-table__border-bottom-patch{height:1px;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;left:0}.el-table__border-right-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s 1ms}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{text-align:center;width:20px;display:inline-block}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-fill-color-blank);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);font-size:var(--el-font-size-base)}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__vertical,.el-table-v2__left .el-vl__horizontal{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;right:0;overflow:hidden;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__vertical,.el-table-v2__right .el-vl__horizontal{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{position:relative;overflow:hidden}.el-table-v2__header .el-checkbox{z-index:0}.el-table-v2__footer{position:absolute;bottom:0;left:0;right:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{z-index:9999;position:absolute;inset:0}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{-webkit-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color);height:100%;color:var(--el-table-header-text-color);align-items:center;padding:0 8px;font-weight:700;display:flex;overflow:hidden}.el-table-v2__header-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__header-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__sort-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{opacity:1;display:flex}.el-table-v2__row{border-bottom:var(--el-table-border);transition:background-color var(--el-transition-duration);align-items:center;display:flex}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;height:100%;padding:0 8px;display:flex;overflow:hidden}.el-table-v2__row-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__row-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__expand-icon{-webkit-user-select:none;user-select:none;margin:0 4px}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{justify-content:space-between;align-items:center;margin:0 0 15px;padding:0;display:flex;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);z-index:1;height:2px;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none;position:absolute;bottom:0;left:0}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{border:1px solid var(--el-border-color);text-align:center;width:20px;height:20px;color:var(--el-text-color-primary);cursor:pointer;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin:10px 0 10px 10px;font-size:12px;line-height:20px;transition:all .15s;display:flex}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:auto;margin-bottom:-1px;position:relative;overflow:hidden}.el-tabs__nav-wrap:after{content:"";background-color:var(--el-border-color-light);width:100%;height:2px;z-index:var(--el-index-normal);position:absolute;bottom:0;left:0}.el-tabs__nav-wrap.is-bottom:after{top:0;bottom:auto}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{cursor:pointer;color:var(--el-text-color-secondary);text-align:center;width:20px;font-size:12px;line-height:44px;position:absolute}.el-tabs__nav-next.is-disabled,.el-tabs__nav-prev.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1);display:flex;position:relative}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{text-align:center;flex:1}.el-tabs__item{height:var(--el-tabs-header-height);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary);justify-content:center;align-items:center;padding:0 20px;font-weight:500;list-style:none;display:flex;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border-radius:50%;margin-left:5px}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;position:relative;overflow:hidden}.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--top>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height);box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);box-sizing:border-box;border-bottom:none;border-radius:4px 4px 0 0}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{transform-origin:100%;width:0;height:14px;font-size:12px;position:relative;right:-2px;overflow:hidden}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid #0000;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-top:-1px}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);color:var(--el-text-color-secondary);border:1px solid #0000;margin-top:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child,.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-top:10px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid #0000}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-scroll{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{width:2px;height:auto;top:0;bottom:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{text-align:center;cursor:pointer;width:100%;height:30px;line-height:30px}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled{cursor:not-allowed}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{top:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{width:2px;height:100%;top:0;bottom:auto}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__active-bar.is-left{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right-color:#fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-right:none;border-radius:4px 0 0 4px}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid #0000;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 #0000}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left-color:#fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid #0000;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 #0000}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInRight-transition,.slideInLeft-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);position:absolute;left:0;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);position:absolute;left:0;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(100%)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(-100%)}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag .el-tag__close .el-icon{display:flex}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);font-size:var(--el-text-font-size);color:var(--el-text-color);overflow-wrap:break-word;align-self:center;margin:0;padding:0}.el-text.is-truncated{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline-block;overflow:hidden}.el-text.is-line-clamp{-webkit-box-orient:vertical;display:-webkit-inline-box;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{min-width:0;margin:5px 0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{box-sizing:content-box;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);box-sizing:border-box;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__node--normal{width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{width:var(--el-timeline-node-size-large);height:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline-item.is-start .el-timeline-item__wrapper{padding-left:28px}.el-timeline-item.is-start .el-timeline-item__tail{left:4px}.el-timeline-item.is-start .el-timeline-item__node--normal{left:-1px}.el-timeline-item.is-start .el-timeline-item__node--large{left:-2px}.el-timeline-item.is-end .el-timeline-item__wrapper{text-align:right;padding-right:28px}.el-timeline-item.is-end .el-timeline-item__tail{right:4px}.el-timeline-item.is-end .el-timeline-item__node--normal{right:-1px}.el-timeline-item.is-end .el-timeline-item__node--large{right:-2px}.el-timeline-item.is-alternate .el-timeline-item__tail,.el-timeline-item.is-alternate .el-timeline-item__node,.el-timeline-item.is-alternate-reverse .el-timeline-item__tail,.el-timeline-item.is-alternate-reverse .el-timeline-item__node{left:50%;transform:translate(-50%)}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{height:calc(50% - 10px);display:block}.el-timeline.is-start{padding-left:40px;padding-right:0}.el-timeline.is-end{padding-left:0;padding-right:40px}.el-timeline.is-alternate{padding-left:20px;padding-right:20px}.el-timeline.is-alternate .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.el-timeline.is-alternate .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse{padding-left:20px;padding-right:20px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{vertical-align:middle;padding:0 30px;display:inline-block}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);box-sizing:border-box;max-height:100%;display:inline-block;position:relative;overflow:hidden}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0}.el-transfer-panel__list{height:var(--el-transfer-panel-body-height);box-sizing:border-box;margin:0;padding:6px 0;list-style:none;overflow:auto}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular);margin-right:30px}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;width:100%;line-height:var(--el-transfer-item-height);padding-left:22px;display:block;overflow:hidden}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;box-sizing:border-box;padding:15px}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);box-sizing:border-box;width:100%;font-size:12px;display:inline-block}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:var(--el-transfer-panel-header-height);background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);align-items:center;margin:0;padding-left:15px;display:flex}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;width:100%;display:flex;position:relative}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{min-width:0;color:var(--el-text-color-primary);flex:1;align-items:center;font-size:16px;font-weight:400;display:flex}.el-transfer-panel .el-transfer-panel__header-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.el-transfer-panel .el-transfer-panel__header-count{color:var(--el-text-color-secondary);flex-shrink:0;margin-left:8px;margin-right:15px;font-size:12px}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);color:var(--el-text-color-secondary);text-align:center;margin:0;padding:6px 15px 0}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{text-align:center;width:100%;height:100%;min-height:60px;position:relative}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;position:absolute;left:0;right:0}.el-tree-node{white-space:nowrap;outline:none}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);height:var(--el-tree-node-content-height);cursor:pointer;align-items:center;display:flex}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:var(--el-tree-expand-icon-color);transition:transform var(--el-transition-duration) ease-in-out;font-size:12px;transform:rotate(0)}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:#0000;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:#0000;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__list>.el-select-dropdown__item{padding-left:32px}.el-tree-select__popper .el-select-dropdown__item{flex:1;height:20px;padding-left:0;line-height:20px;background:0 0!important}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;cursor:pointer;outline:none;justify-content:center;align-items:center;display:inline-flex}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{border-color:var(--el-border-color-darker);color:inherit}.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);margin-top:7px;font-size:12px}.el-upload iframe{z-index:-1;opacity:0;filter:alpha(opacity=0);position:absolute;top:0;left:0}.el-upload--picture-card{background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);box-sizing:border-box;text-align:center;cursor:pointer;border-radius:6px;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);margin-bottom:16px;font-size:67px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);text-align:center;font-size:14px}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{color:var(--el-text-color-regular);box-sizing:border-box;border-radius:4px;width:100%;margin-bottom:5px;font-size:14px;transition:all .5s cubic-bezier(.55,0,.1,1);position:relative}.el-upload-list__item .el-progress{width:100%;position:absolute;top:20px}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);display:none;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{cursor:pointer;opacity:1;color:var(--el-color-primary);font-size:12px;font-style:normal;display:none;position:absolute;top:1px;right:5px}.el-upload-list__item:hover,.el-upload-list__item:focus-within{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close,.el-upload-list__item:focus-within .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-icon--close-tip,.el-upload-list__item:focus-within .el-icon--close-tip{right:24px}.el-upload-list__item:hover .el-progress__text,.el-upload-list__item:focus-within .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{flex-direction:column;justify-content:center;width:calc(100% - 30px);margin-left:4px;display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0}.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip,.el-upload-list__item.is-success:active .el-icon--close-tip{display:none}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus-within .el-upload-list__item-status-label{opacity:0;display:none}.el-upload-list__item-name{color:var(--el-text-color-regular);text-align:center;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base);align-items:center;padding:0 4px;display:inline-flex}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-upload-list__item-status-label{line-height:inherit;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;display:none;position:absolute;top:0;right:5px}.el-upload-list__item-delete{color:var(--el-text-color-regular);font-size:12px;display:none;position:absolute;top:0;right:10px}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{flex-wrap:wrap;margin:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);border-radius:6px;margin:0 8px 8px 0;padding:0;display:inline-flex;overflow:hidden}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{object-fit:contain;width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{cursor:default;color:#fff;opacity:0;background-color:var(--el-overlay-color-lighter);width:100%;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;font-size:20px;display:inline-flex;position:absolute;top:0;left:0}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{font-size:inherit;color:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{width:126px;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%)}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;border-radius:6px;align-items:center;margin-top:10px;padding:10px;display:flex;overflow:hidden}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{object-fit:contain;z-index:1;background-color:var(--el-color-white);justify-content:center;align-items:center;width:70px;height:70px;display:inline-flex;position:relative}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:46px;height:26px;position:absolute;top:-7px;right:-17px;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{margin-top:12px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{z-index:10;cursor:default;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.el-upload-cover:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-upload-cover img{width:100%;height:100%;display:block}.el-upload-cover__label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-cover__label i{color:#fff;margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-cover__progress{vertical-align:middle;width:243px;display:inline-block;position:static}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{width:100%;height:100%;position:absolute;top:0;left:0}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);text-align:center;width:100%;height:100%;position:absolute;bottom:0;left:0}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px;font-size:14px;display:inline-block}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;font-size:24px;line-height:inherit;margin:0 auto 5px;display:block}.el-upload-cover__title{text-overflow:ellipsis;white-space:nowrap;text-align:left;width:100%;height:36px;color:var(--el-text-color-primary);background-color:#fff;margin:0;padding:0 10px;font-size:14px;font-weight:400;line-height:36px;position:absolute;bottom:0;left:0;overflow:hidden}.el-upload-cover+.el-upload__inner{opacity:0;z-index:1;position:relative}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!important}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);margin-bottom:4px;line-height:20px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);width:var(--el-tour-width);padding:var(--el-tour-padding-primary);background:var(--el-tour-bg-color);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;overflow-wrap:break-word;outline:none}.el-tour__arrow{background:var(--el-tour-bg-color);pointer-events:none;box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-tour__content[data-side^=top] .el-tour__arrow{border-top-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:#0000;border-right-color:#0000}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=right] .el-tour__arrow{border-top-color:#0000;border-right-color:#0000}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{cursor:pointer;width:40px;height:40px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size,16px))}.el-tour__title{line-height:var(--el-tour-font-line-height);font-size:var(--el-tour-title-font-size);color:var(--el-tour-title-text-color);font-weight:var(--el-tour-title-font-weight)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{padding-top:var(--el-tour-padding-primary);box-sizing:border-box;justify-content:space-between;display:flex}.el-tour__content .el-tour-indicators{flex:1;display:inline-block}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;width:6px;height:6px;margin-right:6px;display:inline-block}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{color:var(--el-color-primary);border-color:var(--el-color-primary);background:#fff}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-hover-color:var(--el-text-color-regular);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);opacity:0;z-index:0;border-radius:4px;position:absolute}.el-anchor.el-anchor--vertical .el-anchor__marker{width:4px;height:14px;transition:top .25s ease-in-out,opacity .25s;top:8px;left:0}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{content:"";background-color:#0505050f;width:2px;height:100%;position:absolute;left:0}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{width:20px;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;bottom:0}.el-anchor.el-anchor--horizontal .el-anchor__list{padding-bottom:4px;display:flex}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{content:"";background-color:#0505050f;width:100%;height:2px;position:absolute;bottom:0}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{flex-direction:column;display:flex}.el-anchor__link{font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);color:var(--el-anchor-color);transition:color var(--el-transition-duration);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;outline:none;max-width:100%;padding:4px 0;text-decoration:none;overflow:hidden}.el-anchor__link:hover,.el-anchor__link:focus{color:var(--el-hover-color)}.el-anchor__link:focus-visible{border-radius:var(--el-border-radius-base);outline:2px solid var(--el-color-primary)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block}.el-segmented--vertical{flex-direction:column}.el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented{--el-segmented-color:var(--el-text-color-regular);--el-segmented-bg-color:var(--el-fill-color-light);--el-segmented-padding:2px;--el-segmented-item-selected-color:var(--el-color-white);--el-segmented-item-selected-bg-color:var(--el-color-primary);--el-segmented-item-selected-disabled-bg-color:var(--el-color-primary-light-5);--el-segmented-item-hover-color:var(--el-text-color-primary);--el-segmented-item-hover-bg-color:var(--el-fill-color-dark);--el-segmented-item-active-bg-color:var(--el-fill-color-darker);--el-segmented-item-disabled-color:var(--el-text-color-placeholder);background:var(--el-segmented-bg-color);min-height:32px;padding:var(--el-segmented-padding);border-radius:var(--el-border-radius-base);color:var(--el-segmented-color);box-sizing:border-box;align-items:stretch;font-size:14px;display:inline-flex}.el-segmented__group{align-items:stretch;width:100%;display:flex;position:relative}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);pointer-events:none;width:10px;height:100%;transition:all .3s;position:absolute;top:0;left:0}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{content:"";border-radius:inherit;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute;inset:0}.el-segmented__item{cursor:pointer;border-radius:calc(var(--el-border-radius-base) - 2px);flex:1;align-items:center;padding:0 11px;display:flex}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{color:var(--el-segmented-item-hover-color);background:var(--el-segmented-item-hover-bg-color)}.el-segmented__item:not(.is-disabled):not(.is-selected):active{background:var(--el-segmented-item-active-bg-color)}.el-segmented__item.is-selected,.el-segmented__item.is-selected.is-disabled{color:var(--el-segmented-item-selected-color)}.el-segmented__item.is-disabled{cursor:not-allowed;color:var(--el-segmented-item-disabled-color)}.el-segmented__item-input{opacity:0;pointer-events:none;width:0;height:0;margin:0;position:absolute}.el-segmented__item-label{text-align:center;text-overflow:ellipsis;white-space:nowrap;z-index:1;flex:1;line-height:normal;transition:color .3s;overflow:hidden}.el-segmented.is-block{display:flex}.el-segmented.is-block .el-segmented__item{min-width:0}.el-segmented--large{border-radius:var(--el-border-radius-base);min-height:40px;font-size:16px}.el-segmented--large .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 2px)}.el-segmented--large .el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented--large .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 2px);padding:0 11px}.el-segmented--small{border-radius:calc(var(--el-border-radius-base) - 1px);min-height:24px;font-size:14px}.el-segmented--small .el-segmented__item-selected{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px)}.el-segmented--small .el-segmented--vertical .el-segmented__item{padding:7px}.el-segmented--small .el-segmented__item{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px);padding:0 7px}.el-mention{width:100%;position:relative}.el-mention__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-mention__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-mention__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-mention-dropdown{--el-mention-font-size:var(--el-font-size-base);--el-mention-bg-color:var(--el-bg-color-overlay);--el-mention-shadow:var(--el-box-shadow-light);--el-mention-border:1px solid var(--el-border-color-light);--el-mention-option-color:var(--el-text-color-regular);--el-mention-option-height:34px;--el-mention-option-min-width:100px;--el-mention-option-hover-background:var(--el-fill-color-light);--el-mention-option-selected-color:var(--el-color-primary);--el-mention-option-disabled-color:var(--el-text-color-placeholder);--el-mention-option-loading-color:var(--el-text-color-secondary);--el-mention-option-loading-padding:10px 0;--el-mention-max-height:174px;--el-mention-padding:6px 0;--el-mention-header-padding:10px;--el-mention-footer-padding:10px}.el-mention-dropdown__item{font-size:var(--el-mention-font-size);white-space:nowrap;text-overflow:ellipsis;color:var(--el-mention-option-color);height:var(--el-mention-option-height);line-height:var(--el-mention-option-height);box-sizing:border-box;min-width:var(--el-mention-option-min-width);cursor:pointer;padding:0 20px;position:relative;overflow:hidden}.el-mention-dropdown__item.is-hovering{background-color:var(--el-mention-option-hover-background)}.el-mention-dropdown__item.is-selected{color:var(--el-mention-option-selected-color);font-weight:700}.el-mention-dropdown__item.is-disabled{color:var(--el-mention-option-disabled-color);cursor:not-allowed;background-color:unset}.el-mention-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-mention-dropdown__loading{text-align:center;color:var(--el-mention-option-loading-color);min-width:var(--el-mention-option-min-width);margin:0;padding:10px 0;font-size:12px}.el-mention-dropdown__wrap{max-height:var(--el-mention-max-height)}.el-mention-dropdown__list{padding:var(--el-mention-padding);box-sizing:border-box;margin:0;list-style:none}.el-mention-dropdown__header{padding:var(--el-mention-header-padding);border-bottom:var(--el-mention-border)}.el-mention-dropdown__footer{padding:var(--el-mention-footer-padding);border-top:var(--el-mention-border)}.el-splitter{width:100%;height:100%;margin:0;padding:0;display:flex;position:relative}.el-splitter__mask{z-index:999;position:absolute;inset:0}.el-splitter__mask-horizontal{cursor:ew-resize}.el-splitter__mask-vertical{cursor:ns-resize}.el-splitter__horizontal{flex-direction:row}.el-splitter__vertical{flex-direction:column}.el-splitter-bar{-webkit-user-select:none;user-select:none;flex:none;position:relative}.el-splitter-bar__dragger{z-index:1;background:0 0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:before,.el-splitter-bar__dragger:after{content:"";background-color:var(--el-border-color-light);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:not(.is-lazy):after{display:none}.el-splitter-bar__dragger:after{opacity:.4}.el-splitter-bar__dragger:hover:not(.is-disabled):before{background-color:var(--el-color-primary-light-5)}.el-splitter-bar__dragger-horizontal:before,.el-splitter-bar__dragger-horizontal:after{width:2px;height:100%}.el-splitter-bar__dragger-vertical:before,.el-splitter-bar__dragger-vertical:after{width:100%;height:2px}.el-splitter-bar__dragger-active:before,.el-splitter-bar__dragger-active:after{background-color:var(--el-color-primary-light-3)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-horizontal:after{transform:translate(calc(-50% + var(--el-splitter-bar-offset)),-50%)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-vertical:after{transform:translate(-50%,calc(-50% + var(--el-splitter-bar-offset)))}.el-splitter-bar:hover .el-splitter-bar__collapse-icon{opacity:1}.el-splitter-bar__collapse-icon{background:var(--el-border-color-light);cursor:pointer;opacity:0;z-index:9;border-radius:2px;justify-content:center;align-items:center;display:flex;position:absolute}.el-splitter-bar__collapse-icon:hover{opacity:1;background-color:var(--el-color-primary-light-5)}.el-splitter-bar__horizontal-collapse-icon-start{width:16px;height:24px;top:50%;left:-12px;transform:translate(-50%,-50%)}.el-splitter-bar__horizontal-collapse-icon-end{width:16px;height:24px;top:50%;left:12px;transform:translate(-50%,-50%)}.el-splitter-bar__vertical-collapse-icon-start{width:24px;height:16px;top:-12px;right:50%;transform:translate(50%,-50%)}.el-splitter-bar__vertical-collapse-icon-end{width:24px;height:16px;top:12px;right:50%;transform:translate(50%,-50%)}.el-splitter-panel{scrollbar-width:thin;box-sizing:border-box;flex-grow:0;overflow:auto}:root{--mg-status-success: #22c55e;--mg-status-success-rgb: 34, 197, 94;--mg-status-warning: #f59e0b;--mg-status-warning-rgb: 245, 158, 11;--mg-status-danger: #ef4444;--mg-status-danger-rgb: 239, 68, 68;--mg-status-info: #3b82f6;--mg-status-info-rgb: 59, 130, 246;--mg-status-idle: #94a3b8;--mg-status-idle-rgb: 148, 163, 184;--mg-data-c1: #3b82f6;--mg-data-c2: #22c55e;--mg-data-c3: #a855f7;--mg-data-c4: #f59e0b;--mg-data-c5: #ef4444;--mg-data-c6: #06b6d4;--mg-data-c7: #ec4899;--mg-data-c8: #84cc16;--mg-font-sans: "PingFang SC", "Microsoft YaHei", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--mg-font-mono: "JetBrains Mono", "Cascadia Mono", "SF Mono", Menlo, Consolas, monospace;--mg-primary: #7c3aed;--mg-primary-rgb: 124, 58, 237;--mg-primary-hover: #8b5cf6;--mg-primary-hover-rgb: 139, 92, 246;--mg-primary-active: #5b21b6;--mg-accent: #c4b5fd;--mg-accent-rgb: 196, 181, 253;--mg-primary-light-3: #9d6cf2;--mg-primary-light-5: #b594f7;--mg-primary-light-7: #6f4eab;--mg-primary-light-8: #4c357a;--mg-primary-light-9: #2d1f55;--mg-primary-dark-2: #4c1d95;--mg-bg-app-1: #0e0a24;--mg-bg-app-2: #1f1147;--mg-bg-app-3: #06031a;--mg-bg-app-deep-rgb: 6, 3, 26;--mg-bg-aside-1: #0c0820;--mg-bg-aside-2: #03020e;--mg-bg-aside-rgb: 10, 6, 30;--mg-bg-card-rgb: 38, 24, 78;--mg-bg-card-hi-rgb: 58, 38, 110;--mg-bg-card-darker-rgb: 20, 12, 48;--mg-shadow-rgb: 8, 2, 24;--mg-text-tint-rgb: 242, 232, 255;--mg-text-hi-rgb: 220, 200, 252;--mg-orb-a-opacity: .55;--mg-orb-b-opacity: .5;--mg-orb-c-opacity: .4;--mg-glass-bg: rgba(255, 255, 255, .06);--mg-glass-bg-hover: rgba(255, 255, 255, .1);--mg-glass-bg-active: rgba(255, 255, 255, .14);--mg-glass-border: rgba(255, 255, 255, .18);--mg-glass-border-hi: rgba(255, 255, 255, .28);--mg-glass-shadow: 0 10px 28px rgba(var(--mg-shadow-rgb), .55), 0 0 22px rgba(var(--mg-primary-rgb), .18), 0 0 0 1px rgba(255, 255, 255, .06) inset, 0 1px 0 rgba(255, 255, 255, .12) inset;--mg-glass-shadow-hi: 0 18px 44px rgba(var(--mg-shadow-rgb), .7), 0 0 36px rgba(var(--mg-primary-hover-rgb), .3), 0 0 0 1px rgba(var(--mg-accent-rgb), .25) inset, 0 1px 0 rgba(255, 255, 255, .22) inset;--mg-glass-blur: blur(20px) saturate(160%);--mg-glass-blur-hi: blur(30px) saturate(180%);--mg-radius-sm: 8px;--mg-radius: 14px;--mg-radius-lg: 20px;--mg-radius-xl: 24px;--mg-text-light: #ffffff;--mg-text-muted: rgba(255, 255, 255, .7);--mg-text-dim: rgba(255, 255, 255, .5);--mg-text-faint: rgba(255, 255, 255, .35);--mg-divider: rgba(255, 255, 255, .08);--el-color-primary: var(--mg-primary);--el-color-primary-rgb: var(--mg-primary-rgb);--el-color-primary-light-3: var(--mg-primary-light-3);--el-color-primary-light-5: var(--mg-primary-light-5);--el-color-primary-light-7: var(--mg-primary-light-7);--el-color-primary-light-8: var(--mg-primary-light-8);--el-color-primary-light-9: var(--mg-primary-light-9);--el-color-primary-dark-2: var(--mg-primary-dark-2);--mg-transition: all .25s cubic-bezier(.25, .8, .25, 1);--mg-veil-1: rgba(255, 255, 255, .05);--mg-veil-2: rgba(255, 255, 255, .08);--mg-veil-3: rgba(255, 255, 255, .12);--mg-veil-border: rgba(255, 255, 255, .12);--mg-veil-border-hi: rgba(255, 255, 255, .2);--mg-action-bg: rgba(76, 29, 149, .45);--mg-action-bg-hover: rgba(109, 40, 217, .75);--mg-action-border: rgba(167, 139, 250, .55);--mg-action-border-hi: rgba(196, 181, 253, .9)}html{--el-color-primary: var(--mg-primary) !important;--el-color-primary-rgb: var(--mg-primary-rgb) !important;--el-color-primary-light-3: var(--mg-primary-light-3) !important;--el-color-primary-light-5: var(--mg-primary-light-5) !important;--el-color-primary-light-7: var(--mg-primary-light-7) !important;--el-color-primary-light-8: var(--mg-primary-light-8) !important;--el-color-primary-light-9: var(--mg-primary-light-9) !important;--el-color-primary-dark-2: var(--mg-primary-dark-2) !important}body{margin:0;font-family:var(--mg-font-sans);color:var(--mg-text-light);background:radial-gradient(ellipse at 20% 0%,rgba(var(--mg-primary-hover-rgb),.45) 0%,transparent 55%),radial-gradient(ellipse at 80% 100%,rgba(var(--mg-bg-card-rgb),.65) 0%,transparent 55%),linear-gradient(135deg,var(--mg-bg-app-1) 0%,var(--mg-bg-app-2) 50%,var(--mg-bg-app-3) 100%);background-attachment:fixed;min-height:100vh;transition:background-color .35s ease}#app{min-height:100vh;position:relative}#app:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(var(--mg-accent-rgb),.05) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--mg-accent-rgb),.05) 1px,transparent 1px);background-size:48px 48px,48px 48px;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}#app:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background-image:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0,rgba(255,255,255,.018) 1px,transparent 1px,transparent 3px);mix-blend-mode:overlay}.app-shell,.login-page{position:relative;z-index:1}.mg-glass{background:var(--mg-glass-bg);border:1px solid var(--mg-glass-border);border-radius:var(--mg-radius);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);transition:var(--mg-transition)}.mg-glass:hover{background:var(--mg-glass-bg-hover);border-color:var(--mg-glass-border-hi);box-shadow:var(--mg-glass-shadow-hi);transform:translateY(-2px)}.mg-glass-lg{background:#ffffff14;border:1px solid rgba(255,255,255,.22);border-radius:var(--mg-radius-lg);backdrop-filter:var(--mg-glass-blur-hi);-webkit-backdrop-filter:var(--mg-glass-blur-hi);box-shadow:0 30px 80px rgba(var(--mg-shadow-rgb),.55),0 0 0 1px #ffffff40 inset,0 1px #fff6 inset}.el-button--primary{--el-button-bg-color: var(--mg-primary);--el-button-border-color: var(--mg-primary);--el-button-hover-bg-color: var(--mg-primary-hover);--el-button-hover-border-color: var(--mg-primary-hover);--el-button-active-bg-color: var(--mg-primary-active);--el-button-active-border-color: var(--mg-primary-active)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.4);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.7)}::-webkit-scrollbar-track{background:transparent}::selection{background:rgba(var(--mg-accent-rgb),.4);color:#fff}a{color:var(--mg-accent)}a:hover{color:rgba(var(--mg-accent-rgb),.85)}.mg-content{--el-fill-color-blank: transparent;--el-fill-color-light: rgba(var(--mg-bg-card-rgb), .45);--el-fill-color-lighter: rgba(var(--mg-bg-card-rgb), .35);--el-fill-color: rgba(var(--mg-bg-card-rgb), .55);--el-fill-color-dark: rgba(var(--mg-bg-card-rgb), .65);--el-fill-color-darker: rgba(var(--mg-bg-card-rgb), .75);--el-bg-color: rgba(var(--mg-bg-card-rgb), .55);--el-bg-color-page: transparent;--el-bg-color-overlay: rgba(var(--mg-bg-card-rgb), .92);--el-border-color: rgba(255, 255, 255, .14);--el-border-color-light: rgba(255, 255, 255, .1);--el-border-color-lighter: rgba(255, 255, 255, .08);--el-border-color-extra-light: rgba(255, 255, 255, .06);--el-text-color-secondary: rgba(var(--mg-text-hi-rgb), .7);--el-text-color-placeholder: rgba(255, 255, 255, .4);--el-text-color-disabled: rgba(255, 255, 255, .3)}.mg-content .fme-desc{background:rgba(var(--mg-bg-card-rgb),.55)!important;color:var(--mg-text-light)!important;border-left-color:var(--mg-accent)!important}.mg-content .fme-path{color:var(--mg-text-light)!important}.mg-content .fme-path-empty{color:var(--mg-text-muted)!important}.mg-content .admin-tabs.el-tabs--border-card{height:100%;background:rgba(var(--mg-bg-card-rgb),.45)!important;border:1px solid rgba(255,255,255,.1)!important;border-radius:var(--mg-radius);box-shadow:var(--mg-glass-shadow);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);overflow:hidden;display:flex;flex-direction:column}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header{background:rgba(var(--mg-bg-card-darker-rgb),.35)!important;border-bottom:1px solid rgba(255,255,255,.1)!important;margin:0}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__nav{border:0!important}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item{background:transparent!important;color:#dcc8f0bf!important;border:0!important;height:42px;line-height:42px;font-size:13.5px;letter-spacing:.5px;padding:0 18px!important;transition:background .2s ease,color .2s ease}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item:hover{background:rgba(var(--mg-accent-rgb),.1)!important;color:#fff!important}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background:rgba(var(--mg-accent-rgb),.18)!important;color:#fff!important;font-weight:600;box-shadow:inset 0 -2px 0 0 var(--mg-accent)}.mg-content .admin-tabs.el-tabs--border-card>.el-tabs__content{flex:1;padding:14px;overflow:auto;background:transparent!important}.mg-content .admin-tabs.el-tabs--border-card .el-tab-pane{height:100%}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card{background:#fff!important;border:1px solid rgba(124,58,237,.18)!important;box-shadow:0 8px 24px #7c3aed0f!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header{background:#7c3aed0a!important;border-bottom:1px solid rgba(124,58,237,.14)!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item{color:#4a3d6e!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item:hover{background:#7c3aed14!important;color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .admin-tabs.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background:#7c3aed24!important;color:#7c3aed!important}.mg-content .el-card{background:linear-gradient(135deg,rgba(var(--mg-bg-card-rgb),.55),rgba(var(--mg-bg-app-deep-rgb),.6))!important;border:1px solid rgba(255,255,255,.14);border-radius:var(--mg-radius);backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);color:var(--mg-text-light);transition:var(--mg-transition);overflow:hidden}.mg-content .el-card:hover{background:linear-gradient(135deg,rgba(var(--mg-bg-card-hi-rgb),.65),rgba(var(--mg-bg-card-darker-rgb),.67))!important;border-color:#ffffff38;box-shadow:var(--mg-glass-shadow-hi);transform:translateY(-2px)}.mg-content .el-card.no-hover:hover{transform:none}.mg-content .el-card__header{background:#ffffff0a;border-bottom:1px solid rgba(255,255,255,.1);color:var(--mg-text-light);font-weight:600;padding:14px 18px}.mg-content .el-card__body{background:transparent!important;color:var(--mg-text-light)}.mg-content .el-card .el-card{background:#ffffff0a!important;border-color:#ffffff1a;box-shadow:none}.mg-content .el-card .el-card:hover{background:#ffffff0f!important;transform:none;box-shadow:none}.mg-content h1,.mg-content h2,.mg-content h3{color:var(--mg-text-light);margin-top:0}.mg-content p,.mg-content .el-statistic__head{color:var(--mg-text-muted)}.mg-content .el-statistic__number,.mg-content .el-statistic__content{color:var(--mg-text-light)}.mg-content .el-tabs{--el-text-color-primary: #fff}.mg-content .el-tabs__item{color:#ffffffd1!important}.mg-content .el-tabs__item:hover{color:#fff!important}.mg-content .el-tabs__item.is-active{color:#fff!important;font-weight:600}.mg-content .el-tabs__active-bar{background-color:var(--mg-accent)!important}.mg-content .el-tabs__nav-wrap:after{background-color:#ffffff24!important}.mg-content .el-table,.mg-content .el-table tr,.mg-content .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:transparent!important}.mg-content .el-table{--el-table-bg-color: transparent;--el-table-tr-bg-color: transparent;--el-table-header-bg-color: transparent;--el-table-row-hover-bg-color: rgba(var(--mg-accent-rgb), .18);--el-table-border-color: rgba(255, 255, 255, .1);--el-table-header-text-color: rgba(255, 255, 255, .7);--el-table-text-color: var(--mg-text-light);--el-fill-color-blank: transparent;--el-fill-color-light: rgba(255, 255, 255, .04);color:var(--mg-text-light)!important}.mg-content .el-table th.el-table__cell{background:#ffffff0f!important;color:#ffffffbf!important;border-bottom-color:#ffffff1f!important}.mg-content .el-table td.el-table__cell{background:transparent!important;color:var(--mg-text-light)!important;border-bottom-color:#ffffff14!important}.mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell{background:#ffffff08!important}.mg-content .el-table tr:hover>td.el-table__cell,.mg-content .el-table__body tr.hover-row>td.el-table__cell{background:rgba(var(--mg-accent-rgb),.18)!important}.mg-content .el-table__empty-block{background:transparent;color:var(--mg-text-dim)}.mg-content .el-table__inner-wrapper:before,.mg-content .el-table:before{background:#ffffff1a!important}.mg-content .el-input__wrapper,.mg-content .el-textarea__inner{background:#ffffff0f!important;box-shadow:0 0 0 1px #ffffff2e inset!important}.mg-content .el-input__wrapper.is-focus{box-shadow:0 0 0 1px rgba(var(--mg-accent-rgb),.7) inset,0 0 16px rgba(var(--mg-primary-hover-rgb),.35)!important}.mg-content .el-input__inner{color:var(--mg-text-light)!important}.mg-content .el-input__inner::placeholder{color:var(--mg-text-faint)}.mg-content .el-form-item__label{color:var(--mg-text-muted)!important}.mg-content .el-divider__text{background:transparent!important;color:var(--mg-text-muted)}.mg-content .el-divider{background:var(--mg-divider)}.mg-content .el-tag{background:rgba(var(--mg-accent-rgb),.18);color:rgba(var(--mg-text-tint-rgb),1);border-color:rgba(var(--mg-accent-rgb),.4)}.mg-content .el-tag--success{background:#6f8f4c38;color:#c0d99c;border-color:#6f8f4c80}.mg-content .el-tag--warning{background:#c98a1d38;color:#f5cf85;border-color:#c98a1d80}.mg-content .el-tag--danger{background:#b3324f38;color:#ff9bb8;border-color:#b3324f80}.mg-content .el-tag--info{background:#7a6b8738;color:#c9bdd6;border-color:#7a6b8780}.mg-content .el-descriptions{--el-text-color-primary: #fff;--el-text-color-regular: var(--mg-text-muted);--el-border-color-lighter: rgba(255, 255, 255, .12);--el-fill-color-blank: transparent;color:var(--mg-text-light)}.mg-content .el-descriptions__body,.mg-content .el-descriptions__table{background:transparent!important}.mg-content .el-descriptions__label,.mg-content .el-descriptions__cell.is-bordered-label{background:#ffffff0d!important;color:var(--mg-text-muted)!important;border-color:#ffffff1f!important}.mg-content .el-descriptions__content,.mg-content .el-descriptions__cell.is-bordered-content{background:transparent!important;color:#fff!important;border-color:#ffffff1f!important}.mg-content .el-descriptions__title{color:#fff}.mg-content .el-progress-bar__outer{background:#ffffff1a}.mg-content .el-progress-bar__inner{background:linear-gradient(90deg,var(--mg-primary-hover) 0%,var(--mg-accent) 100%)}.mg-content .el-alert{background:#ffffff0f!important;border:1px solid rgba(255,255,255,.14);color:var(--mg-text-light)}.mg-content .el-alert__title,.mg-content .el-alert__description{color:var(--mg-text-light)!important}.mg-content .el-collapse{border-color:#ffffff1a;--el-collapse-header-bg-color: transparent;--el-collapse-content-bg-color: transparent;--el-collapse-header-text-color: #fff;--el-collapse-content-text-color: var(--mg-text-light)}.mg-content .el-collapse-item__header,.mg-content .el-collapse-item__wrap{background:transparent!important;border-color:#ffffff1a!important;color:var(--mg-text-light)!important}.mg-content .el-radio__label,.mg-content .el-checkbox__label{color:var(--mg-text-light)!important}.mg-content .el-radio__inner,.mg-content .el-checkbox__inner{background:#ffffff14;border-color:#ffffff52}.mg-content .el-radio-button__inner{background:#ffffff0f!important;border-color:#ffffff2e!important;color:var(--mg-text-light)!important}.mg-content .el-radio-button.is-active .el-radio-button__inner{background:var(--mg-primary)!important;border-color:var(--mg-primary)!important;color:#fff!important}.mg-content .el-select .el-input__wrapper{background:#ffffff0f!important;box-shadow:0 0 0 1px #ffffff2e inset!important}.mg-content .el-input-number .el-input-number__decrease,.mg-content .el-input-number .el-input-number__increase{background:#ffffff0f!important;color:var(--mg-text-muted)!important;border-color:#ffffff26!important}.mg-content .el-switch.is-checked .el-switch__core{background:var(--mg-primary);border-color:var(--mg-primary)}.mg-content .el-statistic .el-statistic__head{color:var(--mg-text-muted);font-size:13px}.mg-content .el-statistic .el-statistic__number,.mg-content .el-statistic .el-statistic__content{color:#fff;font-weight:600;text-shadow:0 2px 8px rgba(var(--mg-primary-hover-rgb),.4)}.mg-content .kpi-row .el-statistic,.mg-content .kpi-card{background:linear-gradient(135deg,rgba(var(--mg-bg-card-rgb),.55),rgba(var(--mg-bg-app-deep-rgb),.6));border:1px solid rgba(255,255,255,.14);border-radius:var(--mg-radius);padding:16px 18px;backdrop-filter:var(--mg-glass-blur);-webkit-backdrop-filter:var(--mg-glass-blur);box-shadow:var(--mg-glass-shadow);transition:var(--mg-transition)}.mg-content .kpi-row .el-statistic:hover,.mg-content .kpi-card:hover{background:linear-gradient(135deg,rgba(var(--mg-bg-card-hi-rgb),.65),rgba(var(--mg-bg-card-darker-rgb),.67));transform:translateY(-2px);box-shadow:var(--mg-glass-shadow-hi);border-color:#ffffff38}.mg-content .el-pagination{--el-pagination-bg-color: transparent;--el-pagination-button-bg-color: rgba(255, 255, 255, .06);--el-pagination-button-color: var(--mg-text-light);--el-pagination-hover-color: var(--mg-accent);color:var(--mg-text-muted)}.el-dropdown-menu{background:rgba(var(--mg-bg-aside-rgb),.92)!important;backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.12)!important}.el-dropdown-menu__item{color:#fffc!important}.el-dropdown-menu__item:hover{background:rgba(var(--mg-accent-rgb),.18)!important;color:#fff!important}.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){background:#ffffff14;border-color:#fff3;color:var(--mg-text-light)}.mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}.el-dialog h2{color:var(--mg-primary-active)}.el-dialog{border-radius:var(--mg-radius)}:root[data-theme=industrial-purple]{--mg-orb-a-opacity: .55;--mg-orb-b-opacity: .5;--mg-orb-c-opacity: .42;--mg-glass-bg: rgba(28, 14, 62, .62);--mg-glass-bg-hover: rgba(44, 22, 88, .72);--mg-glass-border: rgba(var(--mg-accent-rgb), .18);--mg-glass-border-hi: rgba(var(--mg-accent-rgb), .55);--mg-glass-shadow: 0 12px 32px rgba(0, 0, 0, .55), 0 0 24px rgba(var(--mg-primary-rgb), .25), 0 0 0 1px rgba(var(--mg-accent-rgb), .1) inset, 0 1px 0 rgba(255, 255, 255, .14) inset;--mg-glass-shadow-hi: 0 20px 50px rgba(0, 0, 0, .68), 0 0 42px rgba(var(--mg-primary-hover-rgb), .42), 0 0 0 1px rgba(var(--mg-accent-rgb), .32) inset, 0 1px 0 rgba(255, 255, 255, .24) inset;--mg-text-muted: rgba(255, 255, 255, .86);--mg-text-dim: rgba(220, 200, 252, .7)}:root[data-theme=industrial-purple] body{background:radial-gradient(circle at 8% 8%,rgba(var(--mg-primary-hover-rgb),.55) 0%,transparent 48%),radial-gradient(ellipse at 92% 18%,rgba(var(--mg-accent-rgb),.28) 0%,transparent 42%),radial-gradient(circle at 78% 88%,rgba(var(--mg-primary-rgb),.55) 0%,transparent 46%),radial-gradient(ellipse at 18% 92%,rgba(99,102,241,.3) 0%,transparent 48%),linear-gradient(135deg,var(--mg-bg-app-1) 0%,var(--mg-bg-app-2) 48%,var(--mg-bg-app-3) 100%)}:root[data-theme=industrial-purple] #app:before{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);opacity:.85}:root[data-theme=industrial-purple] #app:after{background-image:repeating-linear-gradient(0deg,rgba(var(--mg-accent-rgb),.03) 0,rgba(var(--mg-accent-rgb),.03) 1px,transparent 1px,transparent 3px)}:root[data-theme=industrial-purple] .mg-content .el-card,:root[data-theme=industrial-purple] .mg-content .kpi-row .el-statistic,:root[data-theme=industrial-purple] .mg-content .kpi-card{position:relative;background:linear-gradient(145deg,rgba(var(--mg-bg-card-rgb),.78),rgba(var(--mg-bg-app-deep-rgb),.86))!important;border:1px solid rgba(var(--mg-accent-rgb),.14)!important;border-radius:var(--mg-radius)!important;box-shadow:0 12px 30px #00000080,0 0 22px rgba(var(--mg-primary-rgb),.16),inset 0 1px #ffffff1a!important;backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);overflow:hidden}:root[data-theme=industrial-purple] .mg-content .el-card:before,:root[data-theme=industrial-purple] .mg-content .kpi-card:before{content:"";position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.55) 30%,rgba(255,255,255,.85) 50%,rgba(var(--mg-accent-rgb),.55) 70%,transparent 100%);pointer-events:none;opacity:.7}:root[data-theme=industrial-purple] .mg-content .el-card:hover,:root[data-theme=industrial-purple] .mg-content .kpi-row .el-statistic:hover,:root[data-theme=industrial-purple] .mg-content .kpi-card:hover{background:linear-gradient(145deg,rgba(var(--mg-bg-card-hi-rgb),.85),rgba(var(--mg-bg-card-darker-rgb),.92))!important;border-color:rgba(var(--mg-accent-rgb),.42)!important;box-shadow:0 18px 40px #0009,0 0 38px rgba(var(--mg-primary-hover-rgb),.38),inset 0 1px #ffffff2e!important}:root[data-theme=industrial-purple] .mg-content .el-card .el-card{background:rgba(var(--mg-bg-card-darker-rgb),.55)!important}:root[data-theme=industrial-purple] .mg-content .el-card .el-card:before{display:none}:root[data-theme=industrial-purple] .mg-content .el-statistic__head{color:#ffffffc7!important}:root[data-theme=industrial-purple] .mg-content .el-statistic__number,:root[data-theme=industrial-purple] .mg-content .el-statistic__content{background:linear-gradient(135deg,#fff,rgba(var(--mg-accent-rgb),1));-webkit-background-clip:text;background-clip:text;color:transparent!important;text-shadow:0 0 24px rgba(var(--mg-primary-hover-rgb),.5)}:root[data-theme=industrial-purple] .mg-content .el-table th.el-table__cell{background:rgba(var(--mg-bg-card-darker-rgb),.75)!important}:root[data-theme=industrial-purple] .mg-content .el-input__wrapper,:root[data-theme=industrial-purple] .mg-content .el-textarea__inner{background:rgba(var(--mg-bg-card-darker-rgb),.55)!important;box-shadow:0 0 0 1px rgba(var(--mg-accent-rgb),.18) inset!important}:root[data-theme=industrial-purple] .el-button--primary{background:linear-gradient(135deg,var(--mg-primary) 0%,var(--mg-primary-hover) 100%)!important;border:none!important;box-shadow:0 8px 22px rgba(var(--mg-primary-rgb),.45),0 0 0 1px #ffffff2e inset!important;position:relative;overflow:hidden}:root[data-theme=industrial-purple] .el-button--primary:after{content:"";position:absolute;top:0;left:-120%;width:80%;height:100%;background:linear-gradient(110deg,transparent 0%,rgba(255,255,255,0) 30%,rgba(255,255,255,.35) 50%,rgba(255,255,255,0) 70%,transparent 100%);transition:left .6s cubic-bezier(.25,.8,.25,1)}:root[data-theme=industrial-purple] .el-button--primary:hover:after{left:120%}:root[data-theme=industrial-purple] .el-button--primary:hover{box-shadow:0 12px 32px rgba(var(--mg-primary-rgb),.6),0 0 28px rgba(var(--mg-primary-hover-rgb),.55),0 0 0 1px rgba(var(--mg-accent-rgb),.4) inset!important;transform:translateY(-1px)}:root[data-theme=industrial-purple] .mg-content .el-tag{background:linear-gradient(135deg,rgba(var(--mg-primary-rgb),.25),rgba(var(--mg-accent-rgb),.18));color:#fff;border-color:rgba(var(--mg-accent-rgb),.45)}.mg-neon-text{background:linear-gradient(135deg,#ffffff 0%,var(--mg-accent) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 18px rgba(var(--mg-primary-hover-rgb),.45)}@keyframes mg-pulse-glow{0%,to{box-shadow:0 0 rgba(var(--mg-accent-rgb),.35),0 0 28px rgba(var(--mg-primary-hover-rgb),.35)}50%{box-shadow:0 0 0 6px rgba(var(--mg-accent-rgb),0),0 0 38px rgba(var(--mg-primary-hover-rgb),.55)}}:root[data-theme=fame-lavender]{--mg-glass-bg: rgba(255, 255, 255, .95);--mg-glass-bg-hover: rgba(249, 246, 255, 1);--mg-glass-bg-active: rgba(245, 240, 251, 1);--mg-glass-border: rgba(124, 58, 237, .14);--mg-glass-border-hi: rgba(124, 58, 237, .35);--mg-glass-shadow: 0 4px 14px rgba(45, 27, 105, .06), 0 0 0 1px rgba(124, 58, 237, .06);--mg-glass-shadow-hi: 0 8px 24px rgba(45, 27, 105, .1), 0 0 0 1px rgba(124, 58, 237, .15);--mg-glass-blur: none;--mg-glass-blur-hi: none;--mg-text-light: #1a0f3d;--mg-text-muted: #4a3d6e;--mg-text-dim: #7a6b9a;--mg-text-faint: #a8a0c0;--mg-divider: #e8e1f0;--mg-status-success: #15803d;--mg-status-success-rgb: 21, 128, 61;--mg-status-warning: #b45309;--mg-status-warning-rgb: 180, 83, 9;--mg-status-danger: #b91c1c;--mg-status-danger-rgb: 185, 28, 28;--mg-status-info: #1d4ed8;--mg-status-info-rgb: 29, 78, 216;--mg-status-idle: #64748b;--mg-status-idle-rgb: 100, 116, 139;--mg-veil-1: rgba(124, 58, 237, .05);--mg-veil-2: rgba(124, 58, 237, .1);--mg-veil-3: rgba(124, 58, 237, .16);--mg-veil-border: rgba(124, 58, 237, .16);--mg-veil-border-hi: rgba(124, 58, 237, .32);--mg-action-bg: #7c3aed;--mg-action-bg-hover: #6d28d9;--mg-action-border: #7c3aed;--mg-action-border-hi: #6d28d9}:root[data-theme=fame-lavender] body{background:linear-gradient(160deg,#edeaf5,#e7e4f1 55%,#f1eef8)!important;color:#1a0f3d}:root[data-theme=fame-lavender] #app:before,:root[data-theme=fame-lavender] #app:after{display:none!important}:root[data-theme=fame-lavender] .bg-orbs{display:none!important}:root[data-theme=fame-lavender] .aside{background:linear-gradient(180deg,#2e1065,#1c0a4d)!important;border-right:1px solid rgba(0,0,0,.08)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:4px 0 24px #2d1b692e!important}:root[data-theme=fame-lavender] .aside:before{display:none!important}:root[data-theme=fame-lavender] .aside .logo{background:transparent!important;border-bottom:1px solid rgba(196,181,253,.12)!important}:root[data-theme=fame-lavender] .aside .logo-title-zh{background:linear-gradient(135deg,#fff,#c4b5fd)!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important;color:transparent!important;text-shadow:none!important;font-weight:700}:root[data-theme=fame-lavender] .aside .el-menu{background:transparent!important;border-right:none!important}:root[data-theme=fame-lavender] .aside .el-menu-item,:root[data-theme=fame-lavender] .aside .el-sub-menu__title{color:#d4cae8!important;font-weight:500!important;background:transparent!important}:root[data-theme=fame-lavender] .aside .el-menu-item:hover,:root[data-theme=fame-lavender] .aside .el-sub-menu__title:hover{background:#c4b5fd1a!important;color:#fff!important}:root[data-theme=fame-lavender] .aside .el-menu-item.is-active,:root[data-theme=fame-lavender] .aside .el-sub-menu.is-active>.el-sub-menu__title{background:linear-gradient(90deg,#a855f74d,#7c3aed29)!important;color:#fff!important;font-weight:700!important;box-shadow:inset 3px 0 #c4b5fd!important;text-shadow:none!important}:root[data-theme=fame-lavender] .aside .el-menu .el-menu-item.is-active{background:linear-gradient(90deg,rgba(168,85,247,.22) 0%,transparent 100%)!important;box-shadow:inset 2px 0 #a855f7!important}:root[data-theme=fame-lavender] .header{background:#fff!important;border-bottom:1px solid #ebe5f4!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:0 1px 6px #2d1b690d!important}:root[data-theme=fame-lavender] .header:after{display:none!important}:root[data-theme=fame-lavender] .header .el-breadcrumb__inner{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .header .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .header .el-breadcrumb__separator{color:#a8a0c0!important}:root[data-theme=fame-lavender] .header .el-breadcrumb__inner:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .header .icon-btn{border-color:#ebe5f4!important;color:#7c3aed!important;background:#f8f4fc!important}:root[data-theme=fame-lavender] .header .icon-btn:hover{background:#ede9fe!important;border-color:#c4b5fd!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .header .runmode-tag{background:#f5f3ff!important;border-color:#ddd6fe!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .header .runmode-tag.WebEnabled{background:#ecfdf5!important;border-color:#bbf7d0!important;color:#047857!important}:root[data-theme=fame-lavender] .header .runmode-tag.WebOnly{background:#ede9fe!important;border-color:#c4b5fd!important;color:#6d28d9!important}:root[data-theme=fame-lavender] .header .el-radio-button__inner{background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important;font-weight:500}:root[data-theme=fame-lavender] .header .el-radio-button__inner:hover{color:#6d28d9!important;border-color:#c4b5fd!important;background:#f5f3ff!important}:root[data-theme=fame-lavender] .header .el-radio-button.is-active .el-radio-button__inner{background:#7c3aed!important;border-color:#7c3aed!important;color:#fff!important;box-shadow:0 2px 6px #7c3aed40}:root[data-theme=fame-lavender] .header .user-link{background:#f8f4fc!important;border-color:#ebe5f4!important;color:#2d1b69!important}:root[data-theme=fame-lavender] .header .user-link:hover{background:#ede9fe!important;border-color:#c4b5fd!important}:root[data-theme=fame-lavender] .header .user-name{color:#2d1b69!important}:root[data-theme=fame-lavender] .main,:root[data-theme=fame-lavender] .mg-content{background:transparent!important;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content h1,:root[data-theme=fame-lavender] .mg-content h2,:root[data-theme=fame-lavender] .mg-content h3{color:#1a0f3d!important;font-weight:700}:root[data-theme=fame-lavender] .mg-content p{color:#4a3d6e!important}:root[data-theme=fame-lavender] .mg-content small,:root[data-theme=fame-lavender] .mg-content .text-secondary{color:#7a6b9a!important}:root[data-theme=fame-lavender] .footer{background:#ffffffb3!important;border-top:1px solid #ebe5f4!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;color:#909399!important}:root[data-theme=fame-lavender] .mg-content .el-card{background:#fff!important;border:1px solid #e2dbf0!important;border-radius:14px!important;box-shadow:0 1px 2px #2d1b690d,0 10px 26px #6c47c81a!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;color:#1a0f3d!important;overflow:hidden}:root[data-theme=fame-lavender] .mg-content .el-card:before{display:none!important}:root[data-theme=fame-lavender] .mg-content .el-card:hover{background:#fff!important;border-color:#c4b5fd!important;box-shadow:0 4px 14px #2d1b691a,0 18px 40px #6c47c829!important;transform:translateY(-2px)!important}:root[data-theme=fame-lavender] .mg-content .el-card .el-card{background:#faf7fd!important;border-color:#f0eaf6!important;box-shadow:none!important}:root[data-theme=fame-lavender] .mg-content .el-card__header{background:#faf7fd!important;border-bottom:1px solid #e8e1f0!important;color:#1a0f3d!important;font-weight:600}:root[data-theme=fame-lavender] .mg-content .el-card__body{background:transparent!important;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content .kpi-row .el-statistic,:root[data-theme=fame-lavender] .mg-content .kpi-card{background:#fff!important;border:1px solid #e2dbf0!important;border-radius:12px!important;box-shadow:0 1px 2px #2d1b690d,0 8px 22px #6c47c81a!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;padding:16px 18px!important}:root[data-theme=fame-lavender] .mg-content .kpi-row .el-statistic:hover,:root[data-theme=fame-lavender] .mg-content .kpi-card:hover{background:#fff!important;border-color:#c4b5fd!important;box-shadow:0 4px 14px #2d1b6917,0 14px 32px #6c47c826!important;transform:translateY(-2px)!important}:root[data-theme=fame-lavender] .mg-content .el-statistic__head{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-statistic__number,:root[data-theme=fame-lavender] .mg-content .el-statistic__content{background:none!important;-webkit-background-clip:initial!important;background-clip:initial!important;color:#1a0f3d!important;text-shadow:none!important;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;font-weight:700}:root[data-theme=fame-lavender] .mg-content .el-table{--el-table-bg-color: #ffffff;--el-table-tr-bg-color: #ffffff;--el-table-header-bg-color: #faf7fd;--el-table-row-hover-bg-color: #f5f3ff;--el-table-border-color: #e8e1f0;--el-table-header-text-color: #1a0f3d;--el-table-text-color: #1a0f3d;--el-fill-color-blank: #ffffff;--el-fill-color-light: #faf7fd;color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content .el-table,:root[data-theme=fame-lavender] .mg-content .el-table tr{background:#fff!important}:root[data-theme=fame-lavender] .mg-content .el-table th.el-table__cell{background:#faf7fd!important;color:#1a0f3d!important;border-bottom-color:#e8e1f0!important;font-weight:600}:root[data-theme=fame-lavender] .mg-content .el-table td.el-table__cell{background:#fff!important;color:#1a0f3d!important;border-bottom-color:#f0eaf6!important}:root[data-theme=fame-lavender] .mg-content .el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell{background:#faf7fd!important}:root[data-theme=fame-lavender] .mg-content .el-table tr:hover>td.el-table__cell{background:#f5f3ff!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner,:root[data-theme=fame-lavender] .mg-content .el-select .el-input__wrapper{background:#fff!important;box-shadow:0 0 0 1px #e0d4f5 inset!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper:hover{box-shadow:0 0 0 1px #c4b5fd inset!important}:root[data-theme=fame-lavender] .mg-content .el-input__wrapper.is-focus{box-shadow:0 0 0 1px #7c3aed inset,0 0 0 3px #7c3aed26!important}:root[data-theme=fame-lavender] .mg-content .el-input__inner,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner{color:#1a0f3d!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-input__inner::placeholder,:root[data-theme=fame-lavender] .mg-content .el-textarea__inner::placeholder{color:#a8a0c0!important}:root[data-theme=fame-lavender] .mg-content .el-form-item__label{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-tabs{--el-text-color-primary: #2d1b69 !important;--el-text-color-regular: #303133 !important}:root[data-theme=fame-lavender] .mg-content .el-tabs__item{color:#4a3d6e!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-tabs__item:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .el-tabs__item.is-active{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .el-tabs__item{color:#4a3d6e!important}:root[data-theme=fame-lavender] .el-tabs__item:hover{color:#7c3aed!important}:root[data-theme=fame-lavender] .el-tabs__item.is-active{color:#7c3aed!important;font-weight:700}:root[data-theme=fame-lavender] .mg-content .el-tabs__active-bar{background-color:#7c3aed!important;height:3px!important;border-radius:2px}:root[data-theme=fame-lavender] .mg-content .el-tabs__nav-wrap:after{background-color:#e8e1f0!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-page,:root[data-theme=fame-lavender] .mg-content .ref-mgr-title,:root[data-theme=fame-lavender] .mg-content .field-section-title,:root[data-theme=fame-lavender] .mg-content .detail-name{color:#2d1b69!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-title{font-weight:700}:root[data-theme=fame-lavender] .mg-content .detail-id,:root[data-theme=fame-lavender] .mg-content .ref-type-asm,:root[data-theme=fame-lavender] .mg-content .field-empty{color:#7a6b9a!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-list-card,:root[data-theme=fame-lavender] .mg-content .ref-mgr-detail-card{background:#fff!important;border:1px solid rgba(124,58,237,.16)!important;box-shadow:0 8px 24px #7c3aed0f!important}:root[data-theme=fame-lavender] .mg-content .ref-mgr-header,:root[data-theme=fame-lavender] .mg-content .detail-header{border-color:#7c3aed2e!important}:root[data-theme=fame-lavender] .mg-content .field-section{color:#303133}:root[data-theme=fame-lavender] .mg-content .status-value{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-tag{background:#ede9fe!important;color:#5b21b6!important;border-color:#ddd6fe!important}:root[data-theme=fame-lavender] .mg-content .el-tag--success{background:#ecfdf5!important;color:#047857!important;border-color:#bbf7d0!important}:root[data-theme=fame-lavender] .mg-content .el-tag--warning{background:#fffbeb!important;color:#b45309!important;border-color:#fde68a!important}:root[data-theme=fame-lavender] .mg-content .el-tag--danger{background:#fef2f2!important;color:#b91c1c!important;border-color:#fecaca!important}:root[data-theme=fame-lavender] .mg-content .el-tag--info{background:#f3f4f6!important;color:#4b5563!important;border-color:#e5e7eb!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions{--el-text-color-primary: #2d1b69;--el-text-color-regular: #606266;--el-border-color-lighter: #ebe5f4;--el-fill-color-blank: #fff;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__label,:root[data-theme=fame-lavender] .mg-content .el-descriptions__cell.is-bordered-label{background:#faf7fd!important;color:#606266!important;border-color:#ebe5f4!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__content,:root[data-theme=fame-lavender] .mg-content .el-descriptions__cell.is-bordered-content{background:#fff!important;color:#303133!important;border-color:#ebe5f4!important}:root[data-theme=fame-lavender] .mg-content .el-descriptions__title{color:#2d1b69!important}:root[data-theme=fame-lavender] .mg-content .el-alert{background:#faf7fd!important;border:1px solid #ebe5f4!important;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-alert__title,:root[data-theme=fame-lavender] .mg-content .el-alert__description{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-collapse{border-color:#ebe5f4!important;--el-collapse-header-text-color: #2d1b69;--el-collapse-content-text-color: #303133}:root[data-theme=fame-lavender] .mg-content .el-collapse-item__header,:root[data-theme=fame-lavender] .mg-content .el-collapse-item__wrap{background:#fff!important;border-color:#ebe5f4!important;color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-radio__label,:root[data-theme=fame-lavender] .mg-content .el-checkbox__label{color:#303133!important}:root[data-theme=fame-lavender] .mg-content .el-radio__inner,:root[data-theme=fame-lavender] .mg-content .el-checkbox__inner{background:#fff!important;border-color:#c4b5fd!important}:root[data-theme=fame-lavender] .mg-content .el-radio-button__inner{background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .el-radio-button.is-active .el-radio-button__inner{background:#7c3aed!important;border-color:#7c3aed!important;color:#fff!important}:root[data-theme=fame-lavender] .el-button--primary{background:#7c3aed!important;border:1px solid #7c3aed!important;color:#fff!important;font-weight:600;box-shadow:0 1px 2px #2d1b6914,0 2px 6px #7c3aed38!important}:root[data-theme=fame-lavender] .el-button--primary:after{display:none!important}:root[data-theme=fame-lavender] .el-button--primary:hover{background:#6d28d9!important;border-color:#6d28d9!important;box-shadow:0 2px 6px #2d1b691f,0 4px 14px #7c3aed52!important;transform:translateY(-1px)!important}:root[data-theme=fame-lavender] .el-button--primary:active{background:#5b21b6!important;border-color:#5b21b6!important;transform:translateY(0)!important}:root[data-theme=fame-lavender] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){background:#fff!important;border-color:#ddd6fe!important;color:#5b21b6!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--text):hover{background:#f5f3ff!important;border-color:#a78bfa!important;color:#5b21b6!important;box-shadow:0 2px 6px #7c3aed1a!important}:root[data-theme=fame-lavender] .mg-content .el-progress-bar__outer{background:#ede9fe!important}:root[data-theme=fame-lavender] .mg-content .el-progress-bar__inner{background:linear-gradient(90deg,#7c3aed,#a855f7)!important}:root[data-theme=fame-lavender] .mg-content .el-pagination{--el-pagination-bg-color: #fff;--el-pagination-button-bg-color: #faf7fd;--el-pagination-button-color: #2d1b69;--el-pagination-hover-color: #7c3aed;color:#606266!important}:root[data-theme=fame-lavender] .el-dropdown-menu{background:#fff!important;backdrop-filter:none!important;border:1px solid #ebe5f4!important;box-shadow:0 6px 16px #2d1b691a!important}:root[data-theme=fame-lavender] .el-dropdown-menu__item{color:#303133!important}:root[data-theme=fame-lavender] .el-dropdown-menu__item:hover{background:#f5f3ff!important;color:#7c3aed!important}:root[data-theme=fame-lavender] .mg-content .el-switch.is-checked .el-switch__core{background:#7c3aed!important;border-color:#7c3aed!important}:root[data-theme=fame-lavender] .el-dialog h2{color:#2d1b69!important}:root[data-theme=fame-lavender] .el-dialog{background:#fff!important}:root[data-theme=fame-lavender] .el-dialog__title{color:#2d1b69!important}:root[data-theme=fame-lavender] .el-dialog__body{color:#303133!important}:root[data-theme=fame-lavender] ::-webkit-scrollbar-thumb{background:#7c3aed40}:root[data-theme=fame-lavender] ::-webkit-scrollbar-thumb:hover{background:#7c3aed73}.mg-mono,.mg-num{font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:0}.mg-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.3px;border:1px solid transparent;white-space:nowrap}.mg-pill.is-success{background:rgba(var(--mg-status-success-rgb),.15);color:var(--mg-status-success);border-color:rgba(var(--mg-status-success-rgb),.4)}.mg-pill.is-warning{background:rgba(var(--mg-status-warning-rgb),.15);color:var(--mg-status-warning);border-color:rgba(var(--mg-status-warning-rgb),.4)}.mg-pill.is-danger{background:rgba(var(--mg-status-danger-rgb),.15);color:var(--mg-status-danger);border-color:rgba(var(--mg-status-danger-rgb),.4)}.mg-pill.is-info{background:rgba(var(--mg-status-info-rgb),.15);color:var(--mg-status-info);border-color:rgba(var(--mg-status-info-rgb),.4)}.mg-pill.is-idle{background:rgba(var(--mg-status-idle-rgb),.15);color:var(--mg-status-idle);border-color:rgba(var(--mg-status-idle-rgb),.4)}.mg-live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--mg-status-info);position:relative}.mg-live-dot:after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid currentColor;opacity:0;animation:mg-live-pulse 1.6s ease-out infinite}.mg-live-dot.is-success{background:var(--mg-status-success);color:var(--mg-status-success)}.mg-live-dot.is-warning{background:var(--mg-status-warning);color:var(--mg-status-warning)}.mg-live-dot.is-danger{background:var(--mg-status-danger);color:var(--mg-status-danger)}.mg-live-dot.is-info{background:var(--mg-status-info);color:var(--mg-status-info)}.mg-live-dot.is-idle{background:var(--mg-status-idle);color:var(--mg-status-idle)}.mg-live-dot.is-idle:after{animation:none}@keyframes mg-live-pulse{0%{transform:scale(.6);opacity:.55}70%{transform:scale(1.5);opacity:0}to{transform:scale(1.8);opacity:0}}@media (prefers-reduced-motion: reduce){.mg-live-dot:after{animation:none}.bg-orb,.hero-orb,.hero-scene .agv-1,.hero-scene .agv-2,.hero-scene .float-data{animation:none!important}}:root[data-theme=fame-lavender] .mg-content .method-btn,:root[data-theme=fame-lavender] .mg-content .header-action-btn{background:#7c3aed!important;border:1px solid #7c3aed!important;color:#fff!important;font-weight:600!important;box-shadow:0 1px 2px #2d1b6914,0 2px 6px #7c3aed38!important}:root[data-theme=fame-lavender] .mg-content .method-btn:hover:not(:disabled),:root[data-theme=fame-lavender] .mg-content .header-action-btn:hover{background:#6d28d9!important;border-color:#6d28d9!important;color:#fff!important;box-shadow:0 2px 6px #2d1b691f,0 4px 14px #7c3aed52!important}:root[data-theme=fame-lavender] .mg-content .method-btn:active:not(:disabled){background:#5b21b6!important;border-color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .method-btn:disabled{background:#c4b5fd!important;border-color:#c4b5fd!important;color:#fff!important;box-shadow:none!important;opacity:.85!important}:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-icon,:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-spin{color:#ffffffeb!important}:root[data-theme=fame-lavender] .mg-content .method-btn .method-btn-tag{background:#ffffff3d!important;color:#fff!important}:root[data-theme=fame-lavender] .mg-content .add-field-btn{background:#fff!important;border:1px dashed #a78bfa!important;color:#5b21b6!important;font-weight:500!important}:root[data-theme=fame-lavender] .mg-content .add-field-btn:hover{background:#f5f3ff!important;border-color:#7c3aed!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page{--el-text-color-primary: rgba(232, 215, 245, .95);--el-text-color-regular: rgba(220, 200, 230, .88);--el-text-color-secondary: rgba(200, 180, 220, .72);color:#e8d7f5eb}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-form-item__label{color:#dcc8e6e6!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs{--el-text-color-primary: rgba(232, 215, 245, .95) !important;--el-text-color-regular: rgba(220, 200, 240, .75) !important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs__item,:root[data-theme=fame-lavender] .map-editor-page .el-tabs__item{color:#dcc8f0b8!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs__item:hover,:root[data-theme=fame-lavender] .map-editor-page .el-tabs__item:hover{color:#f0e1fff2!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs__item.is-active,:root[data-theme=fame-lavender] .map-editor-page .el-tabs__item.is-active{color:#fff!important;font-weight:600}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs__nav-wrap:after{background-color:#ffffff1a!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-tabs__active-bar{background:linear-gradient(90deg,#aa6efa,#ff6edc)!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table{--el-table-bg-color: #ffffff;--el-table-tr-bg-color: #ffffff;--el-table-header-bg-color: #f5f3ff;--el-table-text-color: #1a0f3d;--el-table-header-text-color: #2d1b69;--el-table-row-hover-bg-color: #ede9fe;--el-table-border-color: #e0d4f5;--el-fill-color-blank: #ffffff;--el-fill-color-light: #faf7fd;color:#1a0f3d!important;background:#fff!important;border-radius:8px;overflow:hidden;box-shadow:0 0 0 1px #7c3aed24}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table,:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table tr,:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table .el-table__inner-wrapper{background:#fff!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table th.el-table__cell{background:#f5f3ff!important;color:#2d1b69!important;font-weight:600!important;border-bottom-color:#e0d4f5!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table td.el-table__cell{background:#fff!important;color:#1a0f3d!important;font-weight:500!important;border-bottom-color:#f0eaf6!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table .cell{color:#1a0f3d!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell{background:#faf7fd!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .layer-table tr:hover>td.el-table__cell{background:#ede9fe!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input__inner{color:#1a0f3d!important;font-weight:500}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input__inner::placeholder{color:#7a6b9a!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input-group__append .el-button{background:#f5f3ff!important;border-color:#ddd6fe!important;color:#5b21b6!important;font-weight:600!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input-group__append .el-button:hover{background:#ede9fe!important;border-color:#a78bfa!important;color:#5b21b6!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .el-checkbox__label{color:#dcc8e6e0!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .prop-card-flag,:root[data-theme=fame-lavender] .mg-content .map-editor-page .prop-card-flag-text{color:#c8dcffe0!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .prop-card-flag.is-synced,:root[data-theme=fame-lavender] .mg-content .map-editor-page .prop-card-flag.is-synced .prop-card-flag-text{color:#dcffe6fa!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .el-input__wrapper,:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .el-textarea__inner,:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .el-select .el-input__wrapper{background:#fff!important;box-shadow:0 0 0 1px #aa6efa47 inset!important}:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .el-input__inner,:root[data-theme=fame-lavender] .mg-content .map-editor-page .edit-property-panel .el-textarea__inner{color:#1a0f3d!important}html,body,#app{height:100%;margin:0;padding:0}#app{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,Arial,sans-serif;color:#303133;background:#f0f2f5} diff --git a/MiGu.Server/wwwroot/assets/index-D5OuyicD.js b/MiGu.Server/wwwroot/assets/index-CC_hCGHZ.js similarity index 99% rename from MiGu.Server/wwwroot/assets/index-D5OuyicD.js rename to MiGu.Server/wwwroot/assets/index-CC_hCGHZ.js index b29cc06..d543515 100644 --- a/MiGu.Server/wwwroot/assets/index-D5OuyicD.js +++ b/MiGu.Server/wwwroot/assets/index-CC_hCGHZ.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-Clx-477K.js","assets/el-tooltip-l0sNRNKZ.js","assets/LoginView-CoJzk9R3.css","assets/base-BhyKBIh7.css","assets/el-form-item-D_relxjU.css","assets/el-button-ZSOkJyjJ.css","assets/el-collapse-item-BvmEG8Qn.css","assets/el-input-BddTPWVI.css","assets/el-input-number-DExoAqKP.css","assets/el-link-CPQZ-olG.css","assets/el-checkbox-CzNtyWdF.css","assets/el-popper-Wf_ds9r7.css","assets/ServiceStatusView-DI9Rt6GP.js","assets/ServiceStatusView-IGba4H4q.css","assets/el-card-BAyktVMS.css","assets/el-descriptions-BpDzfuC8.css","assets/el-tag-1VV9QMa7.css","assets/AppShell-BE7Z2zMC.js","assets/AppShell-CWFWq1yp.css","assets/el-scrollbar-GF-yQkxY.css","assets/el-button-group-B09mLjuS.css","assets/el-dropdown-item-CtcKg9JC.css","assets/el-radio-button-TYBaCPcE.css","assets/DashboardView-CKzq29Wm.js","assets/projection-BVk2tEkj.js","assets/reflection-BmVSriDn.js","assets/DashboardView-C22mCfRB.css","assets/el-tab-pane-C5lGmld3.css","assets/MapMonitorView-BSY4Dsk8.js","assets/Workspace3D-PfDes8bN.js","assets/Workspace3D-XQXNd-Sa.css","assets/mapEdit-Di5ggA7K.js","assets/ops-BCeFEEjY.js","assets/ops-DFVCciZx.js","assets/monitorConfigCache-deAxNrzx.js","assets/useProjectionStream-DvMLcpMm.js","assets/MapMonitorView-C1g906ic.css","assets/el-col-BWEC13sA.css","assets/el-statistic-D5_dVssE.css","assets/el-progress-B7X4OvaL.css","assets/el-select-CK58rX4v.css","assets/el-table-column-Dp73S2HR.css","assets/el-dialog-TSZfE1b8.css","assets/el-empty-S7fQQ3B8.css","assets/MapEditorView-CBiHCGTE.js","assets/useMapEditStream-DunazsxD.js","assets/MapEditorView-DbYZjgvw.css","assets/el-color-picker-DRNdOQmm.css","assets/el-switch-DpR9-s4E.css","assets/el-alert-B6UgayC7.css","assets/el-loading-Dq8WDDkr.css","assets/TrackTableView-v0CQ3Y9j.js","assets/ReflectionManagerPanel-Hhb-p5RK.js","assets/ReflectionManagerPanel-Btm77NGt.css","assets/TrackTableView-C-Cp6740.css","assets/CarPanelView-BBup3icl.js","assets/CarPanelView-CYaApbj9.css","assets/VehicleHubView-CoRmumO4.js","assets/VehicleHubView-CxAaADt4.css","assets/ProcessPanelView-CeuM__wB.js","assets/ProcessPanelView-DLKKlZA4.css","assets/ScriptPanelView-C3iy0LkM.js","assets/ScriptPanelView-zM2-1jjH.css","assets/MissionEditorView-Dq7FSGEy.js","assets/MissionEditorView-DOR5c4wb.css","assets/ProjectPropertiesView-Bvi6s1pw.js","assets/ProjectPropertiesView-CvKuii5E.css","assets/PlaybackView-U187TuNR.js","assets/PlaybackView-BsrAVvYx.css","assets/el-divider-B0pQhKGi.css","assets/SystemConfigView-a-hDUlj3.js","assets/ConfigPageBase-DYlmkUIy.js","assets/PermissionGuard-DhAzkl-X.js","assets/PermissionGuard-B-YLUKV0.css","assets/ConfigPageBase-DOgE48Ff.css","assets/SystemConfigView-zK_tPjiF.css","assets/ExternalIntegrationView-hLQNf3xD.js","assets/RoutingPolicyView-BzXqXDjp.js","assets/VehicleMaintenanceView-BONwcIeP.js","assets/VehicleMaintenanceView-KlqpaRgh.css","assets/ChargePolicyView-Ce8wh2Wp.js","assets/TaskAllocationView-xksMEs81.js","assets/TrafficRuleView-C8LuzSZm.js","assets/AuthRoleView-BdMtSzyV.js","assets/AuthRoleView-CTEbfTF-.css","assets/el-checkbox-group-D_6SYB2i.css","assets/DeviceHubView-BdHihSd2.js","assets/FleetLifecycleView-Dyw9UG3W.js","assets/ScenarioTemplateView-BLw6THy-.js","assets/ScenarioTemplateView-rv7Jf-RX.css","assets/LocationView-BGR6UzZX.js","assets/OpsConfigView-zdoGrqh4.js","assets/OpsConfigView-Dn7upUIu.css","assets/CustomWidgetView-D9yWpJST.js","assets/CustomWidgetView-Ch0BQYzJ.css","assets/MapMonitorConfigView-lSEClylU.js","assets/MapMonitorConfigView-BC-sAP6v.css","assets/MonitorDashboardView-CGH8aWbc.js","assets/MonitorDashboardView-CzA4Ot5V.css","assets/MonitorMapView-CxVrr8S7.js","assets/OpsActionPanelView-CqQdAWLE.js","assets/OpsActionPanelView-C3hWMI-V.css","assets/AnnotationView-D9RHWYI7.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-BoWUwdFm.js","assets/el-tooltip-l0sNRNKZ.js","assets/LoginView-CoJzk9R3.css","assets/base-BhyKBIh7.css","assets/el-form-item-D_relxjU.css","assets/el-button-ZSOkJyjJ.css","assets/el-collapse-item-BvmEG8Qn.css","assets/el-input-BddTPWVI.css","assets/el-input-number-DExoAqKP.css","assets/el-link-CPQZ-olG.css","assets/el-checkbox-CzNtyWdF.css","assets/el-popper-Wf_ds9r7.css","assets/ServiceStatusView-BAEp7yHN.js","assets/ServiceStatusView-IGba4H4q.css","assets/el-card-BAyktVMS.css","assets/el-descriptions-BpDzfuC8.css","assets/el-tag-1VV9QMa7.css","assets/AppShell-DSc4T3s8.js","assets/AppShell-kSXr3TmZ.css","assets/el-scrollbar-GF-yQkxY.css","assets/el-button-group-B09mLjuS.css","assets/el-dropdown-item-CtcKg9JC.css","assets/el-radio-button-TYBaCPcE.css","assets/DashboardView-CrqZ1yEu.js","assets/projection-D6ulMg5U.js","assets/reflection-CTDOoTn5.js","assets/DashboardView-C22mCfRB.css","assets/el-tab-pane-C5lGmld3.css","assets/MapMonitorView-oh-hd20C.js","assets/Workspace3D-CE3B9LLc.js","assets/Workspace3D-mhI80n5T.css","assets/mapEdit-Z_uHqZwy.js","assets/ops-BCeFEEjY.js","assets/ops-DQIK15vn.js","assets/monitorConfigCache-B5CZXjjB.js","assets/useProjectionStream-C_klWvmm.js","assets/MapMonitorView-_OYIzKiz.css","assets/el-col-BWEC13sA.css","assets/el-statistic-D5_dVssE.css","assets/el-progress-B7X4OvaL.css","assets/el-select-CK58rX4v.css","assets/el-table-column-Dp73S2HR.css","assets/el-dialog-TSZfE1b8.css","assets/el-empty-S7fQQ3B8.css","assets/MapEditorView-Blj6CGw0.js","assets/useMapEditStream-BAGhVPpt.js","assets/MapEditorView-Cnbi0NJ-.css","assets/el-color-picker-DRNdOQmm.css","assets/el-switch-DpR9-s4E.css","assets/el-alert-B6UgayC7.css","assets/el-loading-Dq8WDDkr.css","assets/TrackTableView-xOZBg8GQ.js","assets/ReflectionManagerPanel-CpDwI_uG.js","assets/ReflectionManagerPanel-Btm77NGt.css","assets/TrackTableView-C-Cp6740.css","assets/CarPanelView-PMCxnAq3.js","assets/CarPanelView-CYaApbj9.css","assets/ProcessPanelView-BIyHjFKr.js","assets/ProcessPanelView-DLKKlZA4.css","assets/ScriptPanelView-B2wxU0Us.js","assets/ScriptPanelView-zM2-1jjH.css","assets/MissionEditorView-1UuYWhls.js","assets/MissionEditorView-DOR5c4wb.css","assets/ProjectPropertiesView-0BoQ0Htf.js","assets/ProjectPropertiesView-CvKuii5E.css","assets/PlaybackView-B1Y9yN9o.js","assets/PlaybackView-BsrAVvYx.css","assets/el-divider-B0pQhKGi.css","assets/SystemConfigView-DFXZ6aVu.js","assets/ConfigPageBase-B4fOVsSK.js","assets/PermissionGuard-DxbOGfWF.js","assets/PermissionGuard-B-YLUKV0.css","assets/ConfigPageBase-DOgE48Ff.css","assets/SystemConfigView-zK_tPjiF.css","assets/ExternalIntegrationView-CpHHAMpz.js","assets/RoutingPolicyView-CIGTEJMB.js","assets/VehicleHubView-cMWfwwrB.js","assets/VehicleHubView-D_m8HS87.css","assets/ChargePolicyView-BJa18gVS.js","assets/TaskAllocationView-B6Eq3RnB.js","assets/TrafficRuleView-uvpgC5iS.js","assets/AuthRoleView-CbH2OR6X.js","assets/AuthRoleView-CTEbfTF-.css","assets/el-checkbox-group-D_6SYB2i.css","assets/DeviceHubView-COkUK8gp.js","assets/ScenarioTemplateView-BfXftOcX.js","assets/ScenarioTemplateView-rv7Jf-RX.css","assets/LocationView-DLR_9_m5.js","assets/OpsConfigView-CyPTl7WY.js","assets/OpsConfigView-Dn7upUIu.css","assets/CustomWidgetView-D54ImLde.js","assets/CustomWidgetView-Ch0BQYzJ.css","assets/MapMonitorConfigView-CRLVKr09.js","assets/MapMonitorConfigView-BC-sAP6v.css","assets/MonitorDashboardView-C_9mDYUp.js","assets/MonitorDashboardView-CzA4Ot5V.css","assets/MonitorMapView-Chf_3bcP.js","assets/OpsActionPanelView-iA-v2vXw.js","assets/OpsActionPanelView-C3hWMI-V.css","assets/AnnotationView-DCFcPZNR.js"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const s of r.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();/** * @vue/shared v3.5.34 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -97,4 +97,4 @@ usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:a,curr `);return s===-1?"":o.stack.slice(s+1)})();try{if(!a.stack)a.stack=r;else if(r){const s=r.indexOf(` `),l=s===-1?-1:r.indexOf(` `,s+1),u=l===-1?"":r.slice(l+1);String(a.stack).endsWith(u)||(a.stack+=` -`+r)}}catch{}}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Ds(this.defaults,n);const{transitional:a,paramsSerializer:o,headers:r}=n;a!==void 0&&Fc.assertOptions(a,{silentJSONParsing:Ka.transitional(Ka.boolean),forcedJSONParsing:Ka.transitional(Ka.boolean),clarifyTimeoutError:Ka.transitional(Ka.boolean),legacyInterceptorReqResOrdering:Ka.transitional(Ka.boolean)},!1),o!=null&&(ke.isFunction(o)?n.paramsSerializer={serialize:o}:Fc.assertOptions(o,{encode:Ka.function,serialize:Ka.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Fc.assertOptions(n,{baseUrl:Ka.spelling("baseURL"),withXsrfToken:Ka.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=r&&ke.merge(r.common,r[n.method]);r&&ke.forEach(["delete","get","head","post","put","patch","query","common"],h=>{delete r[h]}),n.headers=va.concat(s,r);const l=[];let u=!0;this.interceptors.request.forEach(function(v){if(typeof v.runWhen=="function"&&v.runWhen(n)===!1)return;u=u&&v.synchronous;const m=n.transitional||Dg;m&&m.legacyInterceptorReqResOrdering?l.unshift(v.fulfilled,v.rejected):l.push(v.fulfilled,v.rejected)});const c=[];this.interceptors.response.forEach(function(v){c.push(v.fulfilled,v.rejected)});let d,f=0,p;if(!u){const h=[ew.bind(this),void 0];for(h.unshift(...l),h.push(...c),p=h.length,d=Promise.resolve(n);f{if(!a._listeners)return;let r=a._listeners.length;for(;r-- >0;)a._listeners[r](o);a._listeners=null}),this.promise.then=o=>{let r;const s=new Promise(l=>{a.subscribe(l),r=l}).then(o);return s.cancel=function(){a.unsubscribe(r)},s},t(function(r,s,l){a.reason||(a.reason=new Uu(r,s,l),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new F4(function(o){t=o}),cancel:t}}};function kae(e){return function(n){return e.apply(null,n)}}function Eae(e){return ke.isObject(e)&&e.isAxiosError===!0}const yv={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(yv).forEach(([e,t])=>{yv[t]=e});function z4(e){const t=new xs(e),n=w4(xs.prototype.request,t);return ke.extend(n,xs.prototype,t,{allOwnKeys:!0}),ke.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return z4(Ds(e,o))},n}const An=z4(ju);An.Axios=xs;An.CanceledError=Uu;An.CancelToken=Cae;An.isCancel=P4;An.VERSION=Vg;An.toFormData=If;An.AxiosError=Ct;An.Cancel=An.CanceledError;An.all=function(t){return Promise.all(t)};An.spread=kae;An.isAxiosError=Eae;An.mergeConfig=Ds;An.AxiosHeaders=va;An.formToJSON=e=>M4(ke.isHTMLForm(e)?new FormData(e):e);An.getAdapter=V4.getAdapter;An.HttpStatusCode=yv;An.default=An;const{Axios:Yoe,AxiosError:Goe,CanceledError:Xoe,isCancel:Joe,CancelToken:Zoe,VERSION:Qoe,all:ere,Cancel:tre,isAxiosError:nre,spread:are,toFormData:ore,AxiosHeaders:rre,HttpStatusCode:sre,formToJSON:lre,getAdapter:ire,mergeConfig:ure,create:cre}=An,xae="/api",Xl=An.create({baseURL:xae,timeout:15e3,headers:{"Content-Type":"application/json"},withCredentials:!0});Xl.interceptors.request.use(e=>{const t=localStorage.getItem("simple.auth.token");t&&e.headers.set("Authorization",`Bearer ${t}`);const n=localStorage.getItem("simple.auth.scope");return n&&e.headers.set("X-Scope",n),e});function Tae(e){const t=e.response?.status,n=e.config?.url??"",a=n.startsWith("/sl/")||n.startsWith("sl/");if(t===502||t===504||e.code==="ECONNABORTED"||e.code==="ERR_NETWORK")return a?"SimpleLite 未连接:请先启动 SimpleLite 后端(监听端口 8222)后重试。":`网关无法连接到下游服务(${t??e.code??"network"})。`;const o=e.response?.data;return o?.message?o.message:e.message}Xl.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){try{localStorage.removeItem("simple.auth.token"),localStorage.removeItem("simple.auth.user"),localStorage.removeItem("simple.auth.scope"),localStorage.removeItem("simple.auth.runMode"),localStorage.removeItem("simple.auth.perm")}catch{}location.pathname!=="/login"&&location.assign("/login")}const t=Tae(e);try{Object.defineProperty(e,"message",{value:t,configurable:!0})}catch{}return Promise.reject(e)});new Date().toISOString();new Date().toISOString();const Oae={dispatchLoopHz:50,log:{level:"info",rollDays:7,maxSizeMB:256},security:{jwtExpireMin:1440,enableSwagger:!1,corsWhitelist:["http://localhost:5173","https://*.intra"]}},_ae={mes:[{id:"mes-1",name:"MES 主线",url:"http://mes.lan/api",enabled:!0}],wms:[{id:"wms-1",name:"WMS 仓储",url:"http://wms.lan/api",enabled:!0}],rcs:[]},Rae={algorithm:"astar",weights:{distance:1,congestion:.5,turnPenalty:.2},avoidance:[{id:"AV1",zoneId:"Z-NORTH",rule:"no-entry-while-loading"}],zoneSpeedLimits:[{zoneId:"Z-NARROW",maxSpeedMps:.5}]},Iae={lowBatteryThreshold:.3,criticalBatteryThreshold:.15,faultReport:{enabled:!0,emailTo:["ops@example.com"]},autoRepair:{enabled:!1,cooldownSec:600}},$ae={allowMidTaskCharge:!1,idleChargeAfterSec:300,priority:[{id:"CP1",condition:"soc<0.2",weight:100},{id:"CP2",condition:"idle>5min",weight:30}]},Nae={mode:"leastLoad",loadBalance:!0,maxQueuePerCar:3},Mae={intersections:[{id:"IX1",siteIds:["S006","S007"],mode:"mutex"}],mutex:[{id:"MZ1",zoneIds:["Z-CROSS"]}],yields:[{id:"YD1",from:"A 区",to:"B 区",condition:"priority30s"},{level:"error",condition:"driverException"}]}},Lae={groups:[{id:"G-A",name:"A 区车队",floor:"F1",region:"A",carIds:["C01","C02","C03"]},{id:"G-B",name:"B 区车队",floor:"F1",region:"B",carIds:["C04","C05"]}],ota:{enabled:!0,batchSize:2,rollbackOnFail:!0},batchOps:{confirmationRequired:!0,maxBatch:10},networkDiag:{rttThresholdMs:80,packetLossThreshold:.02}},Dae={templates:[{id:"tpl-sps",name:"SPS 物料配送",category:"SPS",version:"1.0.0",baselineJson:"{}"},{id:"tpl-pack",name:"电池 Pack 自动化产线",category:"BatteryPack",version:"1.0.0",baselineJson:"{}"},{id:"tpl-loop",name:"环线运行",category:"Loop",version:"1.0.0",baselineJson:"{}"},{id:"tpl-p2p",name:"点对点柔性搬运",category:"P2P",version:"1.0.0",baselineJson:"{}"}],dslPolicy:{enabled:!0,schemaVersion:"1"},lowCode:{enabled:!1,editor:"json"},versionPolicy:{keepVersions:10,allowRollback:!0}},Bae={locations:[{id:"L01",code:"A-01",name:"A 区货架 1",siteId:"S001",capacity:20,occupied:12},{id:"L02",code:"A-02",name:"A 区货架 2",siteId:"S002",capacity:20,occupied:7},{id:"L03",code:"B-01",name:"B 区缓存",siteId:"S003",capacity:30,occupied:25}],inventoryRules:[{id:"IR1",itemType:"PalletA",minQty:5,maxQty:30}]},Vae={playback:{retentionDays:30,samplingHz:5},logRetention:{hotDays:7,coldDays:180},version:{keepReleases:5},monitor:{car:{propertyKeys:[],statusKeys:[],actionKeys:[]},site:{propertyKeys:[],statusKeys:[],actionKeys:[]},track:{propertyKeys:[],statusKeys:[],actionKeys:[]},carActionByType:{}}},Fae={items:[{id:"widget-call-button",name:"呼叫按钮",schemaJson:'{"fields":[{"name":"siteId"}]}',layoutJson:'{"x":0,"y":0,"w":2,"h":1}',bindToScopes:["RCSMonitor"]}]},H4={system:Oae,integrations:_ae,routing:Rae,vehicle:Iae,charge:$ae,task:Nae,traffic:Mae,auth:Pae,device:Aae,fleet:Lae,scenario:Dae,location:Bae,ops:Vae,widget:Fae},K4="simple-platform-mock-rbac";function zae(){return{roles:[{id:"role-admin",name:"超级管理员",description:"拥有全部页面与操作权限的内置角色",scope:"*",pages:["*"],ops:["*"],widgetGrants:[],system:!0},{id:"role-ops",name:"运营人员",description:"运营监控端默认角色:可执行运维操作、查看监控",scope:"RCSMonitor",pages:["monitor-dashboard","monitor-map","monitor-ops","monitor-notes","monitor-vehicle-hub"],ops:["ops.car.pause","ops.car.resume","ops.car.gohome","ops.car.resetSession","ops.car.manualCharge","ops.task.pause","ops.task.cancel","ops.task.reassign","ops.task.boostPriority","monitor.note.write"],widgetGrants:[{widgetId:"MapEditor",visibility:"readonly"},{widgetId:"CadToolbar",visibility:"hidden"},{widgetId:"CarPanel",visibility:"readonly"},{widgetId:"MissionEditor",visibility:"readonly"},{widgetId:"OpsActionPanel",visibility:"interactive"},{widgetId:"ConfigCenter",visibility:"hidden"}],system:!0}],users:[{id:"u-admin",username:"admin",displayName:"系统管理员",enabled:!0,roleIds:["role-admin"],scopes:[]},{id:"u-ops",username:"ops",displayName:"运营人员",enabled:!0,roleIds:["role-ops"],scopes:[]}]}}function Hae(){try{const t=localStorage.getItem(K4);if(t)return JSON.parse(t)}catch{}const e=zae();return Wae(e),e}let Kae=Hae();function Wae(e=Kae){try{localStorage.setItem(K4,JSON.stringify(e))}catch{}}function wv(){return new Date().toISOString()}const jae="simple-platform-mock-config",nw=new Map;function Uae(){try{const e=localStorage.getItem(jae);if(e)return JSON.parse(e)}catch{}return{}}function qae(e){let t=nw.get(e);return t||(t=Uae()[e]??{section:e,version:1,updatedAt:wv(),payload:H4[e]},nw.set(e,t)),t}for(const e of Object.keys(H4))qae(e);wv(),wv();async function Yae(e){const{data:t}=await Xl.post("/auth/login",e);return t}async function Gae(){await Xl.post("/auth/logout")}async function Xae(e){const{data:t}=await Xl.post("/auth/switch-scope",{scope:e});return t}async function Jae(){const{data:e}=await Xl.get("/auth/me");return e}const xd="simple.auth.token",Pi="simple.auth.user",Ai="simple.auth.scope",Li="simple.auth.runMode",Di="simple.auth.perm";function aw(e){try{const t=localStorage.getItem(e);return t==null?null:JSON.parse(t)}catch{return null}}function zp(e){try{return localStorage.getItem(e)}catch{return null}}function Zae(){return{token:zp(xd),user:aw(Pi),scope:zp(Ai),runMode:zp(Li),effectivePermissions:aw(Di),validated:!1}}function Hp(e){e.token=null,e.user=null,e.scope=null,e.runMode=null,e.effectivePermissions=null,e.validated=!1;try{localStorage.removeItem(xd),localStorage.removeItem(Pi),localStorage.removeItem(Ai),localStorage.removeItem(Li),localStorage.removeItem(Di)}catch{}}const Qae=F2("auth",{state:()=>Zae(),getters:{isAuthed:e=>!!e.token,hasOp:e=>t=>{const n=e.effectivePermissions?.allowedOps??[];return n.includes("*")||n.includes(t)},widgetOf:e=>t=>e.effectivePermissions?.visibleWidgets.find(a=>a.widgetId===t)?.visibility??"interactive",hasPage:e=>t=>{const n=e.effectivePermissions?.allowedPages??[];return n.includes("*")||n.includes(t)}},actions:{async login(e){const t=await Yae(e);return this.token=t.token,this.user=t.user,this.scope=t.scope,this.runMode=t.runMode,this.effectivePermissions=t.effectivePermissions,this.validated=!0,localStorage.setItem(xd,t.token),localStorage.setItem(Pi,JSON.stringify(t.user)),localStorage.setItem(Ai,t.scope),localStorage.setItem(Li,t.runMode),localStorage.setItem(Di,JSON.stringify(t.effectivePermissions)),t},async logout(){try{await Gae()}catch{}Hp(this)},async validate(){if(!this.token)throw Hp(this),new Error("no-token");try{const e=await Jae();this.user=e.user,this.scope=e.scope,this.runMode=e.runMode,this.effectivePermissions=e.effectivePermissions,this.validated=!0,localStorage.setItem(Pi,JSON.stringify(e.user)),localStorage.setItem(Ai,e.scope),localStorage.setItem(Li,e.runMode),localStorage.setItem(Di,JSON.stringify(e.effectivePermissions))}catch(e){if(e instanceof Error&&e.message==="mock-mode-skip-me-validation"){this.validated=!0;return}throw Hp(this),e}},async switchScope(e){const t=await Xae(e);return this.token=t.token,this.user=t.user,this.scope=t.scope,this.runMode=t.runMode,this.effectivePermissions=t.effectivePermissions,this.validated=!0,localStorage.setItem(xd,t.token),localStorage.setItem(Pi,JSON.stringify(t.user)),localStorage.setItem(Ai,t.scope),localStorage.setItem(Li,t.runMode),localStorage.setItem(Di,JSON.stringify(t.effectivePermissions)),t}}}),W4=[{path:"/login",name:"login",component:()=>nn(()=>import("./LoginView-Clx-477K.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),meta:{layout:"blank",public:!0,title:"登录"}},{path:"/status",name:"status",component:()=>nn(()=>import("./ServiceStatusView-DI9Rt6GP.js"),__vite__mapDeps([12,13,3,14,5,15,16])),meta:{layout:"blank",public:!0,title:"服务状态"}},{path:"/admin",component:()=>nn(()=>import("./AppShell-BE7Z2zMC.js"),__vite__mapDeps([17,1,18,3,19,11,5,20,21,22])),meta:{scope:"Platform"},redirect:"/admin/dashboard",children:[{path:"dashboard",name:"admin-dashboard",component:()=>nn(()=>import("./DashboardView-CKzq29Wm.js"),__vite__mapDeps([23,24,25,26,3,27,9,14])),meta:{title:"总览"}},{path:"map-monitor",name:"admin-map-monitor",component:()=>nn(()=>import("./MapMonitorView-BSY4Dsk8.js"),__vite__mapDeps([28,29,30,3,5,16,1,25,31,32,33,34,24,35,36,14,27,37,38,39,19,11,40,7,10,41,42,43,21,20])),meta:{title:"地图监控"}},{path:"map-editor",name:"admin-map-editor",component:()=>nn(()=>import("./MapEditorView-CBiHCGTE.js"),__vite__mapDeps([44,1,29,30,3,5,16,25,31,45,35,46,42,19,11,10,41,7,47,48,20,21,27,4,49,8,40,6,22,39,9,50])),meta:{title:"地图编辑"}},{path:"tracks",name:"admin-tracks",component:()=>nn(()=>import("./TrackTableView-v0CQ3Y9j.js"),__vite__mapDeps([51,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,54,27])),meta:{title:"场景管理"}},{path:"cars",name:"admin-cars",component:()=>nn(()=>import("./CarPanelView-BBup3icl.js"),__vite__mapDeps([55,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,56,27,6,37])),meta:{title:"车辆管理"}},{path:"vehicle-hub",name:"admin-vehicle-hub",component:()=>nn(()=>import("./VehicleHubView-CoRmumO4.js"),__vite__mapDeps([57,25,24,35,58,3,50,43,19,11,5,20,21,16,40,7,48,39])),meta:{title:"车辆运维"}},{path:"processes",name:"admin-processes",component:()=>nn(()=>import("./ProcessPanelView-CeuM__wB.js"),__vite__mapDeps([59,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,60])),meta:{title:"进程管理"}},{path:"scripts",name:"admin-scripts",component:()=>nn(()=>import("./ScriptPanelView-C3iy0LkM.js"),__vite__mapDeps([61,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,62])),meta:{title:"脚本管理"}},{path:"missions",name:"admin-missions",component:()=>nn(()=>import("./MissionEditorView-Dq7FSGEy.js"),__vite__mapDeps([63,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,64])),meta:{title:"任务编排"}},{path:"project-properties",name:"admin-project-properties",component:()=>nn(()=>import("./ProjectPropertiesView-Bvi6s1pw.js"),__vite__mapDeps([65,1,25,66,3,27,50,14,43,19,11,10,41,16,7,8,48,5,15])),meta:{title:"项目属性"}},{path:"playback",name:"admin-playback",component:()=>nn(()=>import("./PlaybackView-U187TuNR.js"),__vite__mapDeps([67,1,68,3,14,19,11,10,41,16,69,37,5,7])),meta:{title:"调度回放"}},{path:"config/system",name:"admin-config-system",component:()=>nn(()=>import("./SystemConfigView-a-hDUlj3.js"),__vite__mapDeps([70,71,72,73,3,43,25,34,74,37,14,5,16,31,75,4,7,48,19,11,40,69,8,6,47])),meta:{title:"系统级配置"}},{path:"config/integrations",name:"admin-config-integrations",component:()=>nn(()=>import("./ExternalIntegrationView-hLQNf3xD.js"),__vite__mapDeps([76,1,71,72,73,3,43,25,34,74,37,14,5,16,27,19,11,10,41,48,7])),meta:{title:"外部系统对接"}},{path:"config/routing",name:"admin-config-routing",component:()=>nn(()=>import("./RoutingPolicyView-BzXqXDjp.js"),__vite__mapDeps([77,1,71,72,73,3,43,25,34,74,37,14,5,16,4,19,11,10,41,7,8,40])),meta:{title:"路径规划策略"}},{path:"config/vehicle",name:"admin-config-vehicle",component:()=>nn(()=>import("./VehicleMaintenanceView-BONwcIeP.js"),__vite__mapDeps([78,1,71,72,73,3,43,25,34,74,37,14,5,16,79,4,7,8,48,69,11])),meta:{title:"车辆维护策略"}},{path:"config/charge",name:"admin-config-charge",component:()=>nn(()=>import("./ChargePolicyView-Ce8wh2Wp.js"),__vite__mapDeps([80,1,71,72,73,3,43,25,34,74,37,14,5,16,4,19,11,10,41,7,8,48])),meta:{title:"充电逻辑"}},{path:"config/task",name:"admin-config-task",component:()=>nn(()=>import("./TaskAllocationView-xksMEs81.js"),__vite__mapDeps([81,71,72,73,3,43,25,34,74,37,14,5,16,4,7,8,48,22])),meta:{title:"任务分配"}},{path:"config/traffic",name:"admin-config-traffic",component:()=>nn(()=>import("./TrafficRuleView-C8LuzSZm.js"),__vite__mapDeps([82,1,71,72,73,3,43,25,34,74,37,14,5,16,27,19,11,10,41])),meta:{title:"交通管制"}},{path:"config/auth",name:"admin-config-auth",component:()=>nn(()=>import("./AuthRoleView-BdMtSzyV.js"),__vite__mapDeps([83,1,84,3,50,43,10,85,69,37,42,4,19,11,16,40,7,14,27,41,48,5])),meta:{title:"权限角色"}},{path:"config/device",name:"admin-config-device",component:()=>nn(()=>import("./DeviceHubView-BdHihSd2.js"),__vite__mapDeps([86,1,71,72,73,3,43,25,34,74,37,14,5,16,27,15,48,19,11,10,41])),meta:{title:"设备接入"}},{path:"config/fleet",name:"admin-config-fleet",component:()=>nn(()=>import("./FleetLifecycleView-Dyw9UG3W.js"),__vite__mapDeps([87,1,71,72,73,3,43,25,34,74,37,14,5,16,27,15,19,11,10,41])),meta:{title:"车队生命周期"}},{path:"config/scenario",name:"admin-config-scenario",component:()=>nn(()=>import("./ScenarioTemplateView-BLw6THy-.js"),__vite__mapDeps([88,71,72,73,3,43,25,34,74,37,14,5,16,89,15,69])),meta:{title:"场景模板"}},{path:"config/location",name:"admin-config-location",component:()=>nn(()=>import("./LocationView-BGR6UzZX.js"),__vite__mapDeps([90,1,71,72,73,3,43,25,34,74,37,14,5,16,27,19,11,10,41,39])),meta:{title:"库位管理"}},{path:"config/ops",name:"admin-config-ops",component:()=>nn(()=>import("./OpsConfigView-zdoGrqh4.js"),__vite__mapDeps([91,71,72,73,3,43,25,34,74,37,14,5,16,92,50,4,6,10,85,49,7,8,69])),meta:{title:"运营维护"}},{path:"config/widget",name:"admin-config-widget",component:()=>nn(()=>import("./CustomWidgetView-D9yWpJST.js"),__vite__mapDeps([93,1,71,72,73,3,43,25,34,74,37,14,5,16,94,19,11,10,41])),meta:{title:"自定义控件"}},{path:"config/map-monitor",name:"admin-config-map-monitor",component:()=>nn(()=>import("./MapMonitorConfigView-lSEClylU.js"),__vite__mapDeps([95,72,73,3,43,25,96,50,14,27,5,16,49,10,85,20])),meta:{title:"地图监控配置"}}]},{path:"/monitor",component:()=>nn(()=>import("./AppShell-BE7Z2zMC.js"),__vite__mapDeps([17,1,18,3,19,11,5,20,21,22])),meta:{scope:"RCSMonitor"},redirect:"/monitor/map",children:[{path:"dashboard",name:"monitor-dashboard",component:()=>nn(()=>import("./MonitorDashboardView-CGH8aWbc.js"),__vite__mapDeps([97,1,24,25,33,98,3,14,19,11,10,41,39,16,37,38])),meta:{title:"运营总览"}},{path:"vehicle-hub",name:"monitor-vehicle-hub",component:()=>nn(()=>import("./VehicleHubView-CoRmumO4.js"),__vite__mapDeps([57,25,24,35,58,3,50,43,19,11,5,20,21,16,40,7,48,39])),meta:{title:"车辆运维"}},{path:"map",name:"monitor-map",component:()=>nn(()=>import("./MonitorMapView-CxVrr8S7.js"),__vite__mapDeps([99,28,29,30,3,5,16,1,25,31,32,33,34,24,35,36,14,27,37,38,39,19,11,40,7,10,41,42,43,21,20])),meta:{title:"地图监控"}},{path:"ops",name:"monitor-ops",component:()=>nn(()=>import("./OpsActionPanelView-CqQdAWLE.js"),__vite__mapDeps([100,1,72,73,3,43,32,33,101,14,19,11,10,41,5,7,16])),meta:{title:"运维操作"}},{path:"notes",name:"monitor-notes",component:()=>nn(()=>import("./AnnotationView-D9RHWYI7.js"),__vite__mapDeps([102,1,3,14,19,11,10,41,16,69,4,5,40,7])),meta:{title:"运营备注"}}]},{path:"/",redirect:"/login"},{path:"/:pathMatch(.*)*",redirect:"/login"}];function j4(e){return(W4.find(n=>n.path===e)?.children??[]).filter(n=>typeof n.name=="string").map(n=>({name:String(n.name),path:`${e}/${n.path}`}))}const U4=j4("/admin"),q4=j4("/monitor"),eoe=new Set([...U4,...q4].map(e=>e.name)),Nf=Ate({history:pte(),routes:W4});Nf.beforeEach(async e=>{const t=Qae();if(e.meta.public)return!0;if(!t.isAuthed)return{path:"/login",query:{redirect:e.fullPath}};if(!t.validated)try{await t.validate()}catch{return{path:"/login",query:{redirect:e.fullPath}}}const n=e.path.startsWith("/admin")?"Platform":e.path.startsWith("/monitor")?"RCSMonitor":null;if(n&&t.scope!==n)try{await t.switchScope(n)}catch{try{await t.switchScope(n)}catch{}}const a=typeof e.name=="string"?e.name:"";if(a&&eoe.has(a)&&!t.hasPage(a)){const r=(t.scope==="RCSMonitor"?q4:U4).find(s=>t.hasPage(s.name))?.path;if(r&&r!==e.path)return cv.warning("无权访问该页面,已跳转到可访问页面"),r;if(!r)return cv.error("当前账号在该区域没有任何可访问页面,请联系管理员分配权限"),{path:"/status"}}return!0});Nf.afterEach(e=>{const t="迷毂";document.title=e.meta.title?`${e.meta.title} · ${t}`:t});Nf.onError((e,t)=>{const n=e?.message??"";/dynamically imported module|Loading (chunk|CSS chunk)|module script failed|Failed to fetch/i.test(n)&&(t?.fullPath?window.location.assign(t.fullPath):window.location.reload())});const toe="fame-lavender",zc=[{id:"fame-lavender",name:"迷毂浅紫",description:"参考 FAME 系统:深紫侧栏 + 浅紫白主区,柔和耐看,长时间使用不刺眼",preview:"#7c3aed",previewAccent:"#a855f7",vars:{"--mg-primary":"#7c3aed","--mg-primary-rgb":"124, 58, 237","--mg-primary-hover":"#8b5cf6","--mg-primary-hover-rgb":"139, 92, 246","--mg-primary-active":"#5b21b6","--mg-accent":"#a855f7","--mg-accent-rgb":"168, 85, 247","--mg-primary-light-3":"#a78bfa","--mg-primary-light-5":"#c4b5fd","--mg-primary-light-7":"#ddd6fe","--mg-primary-light-8":"#ede9fe","--mg-primary-light-9":"#f5f3ff","--mg-primary-dark-2":"#6d28d9","--mg-bg-app-1":"#edeaf5","--mg-bg-app-2":"#e7e4f1","--mg-bg-app-3":"#f1eef8","--mg-bg-app-deep-rgb":"231, 228, 241","--mg-bg-aside-1":"#2d1b69","--mg-bg-aside-2":"#1a1040","--mg-bg-aside-rgb":"45, 27, 105","--mg-bg-card-rgb":"255, 255, 255","--mg-bg-card-hi-rgb":"249, 246, 255","--mg-bg-card-darker-rgb":"245, 240, 251","--mg-shadow-rgb":"124, 58, 237","--mg-text-tint-rgb":"45, 27, 105","--mg-text-hi-rgb":"96, 98, 102","--mg-orb-a-opacity":"0","--mg-orb-b-opacity":"0","--mg-orb-c-opacity":"0"}},{id:"industrial-purple",name:"星云紫",description:"科幻紫主色,辅以蓝紫渐变,磨砂玻璃 · 霓虹辉光",preview:"#7c3aed",previewAccent:"#c4b5fd",vars:{"--mg-primary":"#7c3aed","--mg-primary-rgb":"124, 58, 237","--mg-primary-hover":"#8b5cf6","--mg-primary-hover-rgb":"139, 92, 246","--mg-primary-active":"#5b21b6","--mg-accent":"#c4b5fd","--mg-accent-rgb":"196, 181, 253","--mg-primary-light-3":"#9d6cf2","--mg-primary-light-5":"#b594f7","--mg-primary-light-7":"#6f4eab","--mg-primary-light-8":"#4c357a","--mg-primary-light-9":"#2d1f55","--mg-primary-dark-2":"#4c1d95","--mg-bg-app-1":"#0e0a24","--mg-bg-app-2":"#1f1147","--mg-bg-app-3":"#06031a","--mg-bg-app-deep-rgb":"6, 3, 26","--mg-bg-aside-1":"#0c0820","--mg-bg-aside-2":"#03020e","--mg-bg-aside-rgb":"10, 6, 30","--mg-bg-card-rgb":"38, 24, 78","--mg-bg-card-hi-rgb":"58, 38, 110","--mg-bg-card-darker-rgb":"20, 12, 48","--mg-shadow-rgb":"8, 2, 24","--mg-text-tint-rgb":"242, 232, 255","--mg-text-hi-rgb":"220, 200, 252","--mg-orb-a-opacity":"0.55","--mg-orb-b-opacity":"0.50","--mg-orb-c-opacity":"0.40"}},{id:"deep-azure",name:"深邃蓝",description:"科技感深蓝,沉静稳重",preview:"#1565c0",previewAccent:"#82b1ff",vars:{"--mg-primary":"#1565c0","--mg-primary-rgb":"21, 101, 192","--mg-primary-hover":"#1976d2","--mg-primary-hover-rgb":"25, 118, 210","--mg-primary-active":"#0d47a1","--mg-accent":"#82b1ff","--mg-accent-rgb":"130, 177, 255","--mg-primary-light-3":"#5a8fce","--mg-primary-light-5":"#83aedb","--mg-primary-light-7":"#adcde7","--mg-primary-light-8":"#c4dbed","--mg-primary-light-9":"#e3eef8","--mg-primary-dark-2":"#0d47a1","--mg-bg-app-1":"#051a3a","--mg-bg-app-2":"#0a2f6b","--mg-bg-app-3":"#020a1f","--mg-bg-app-deep-rgb":"2, 8, 26","--mg-bg-aside-1":"#06122a","--mg-bg-aside-2":"#02060f","--mg-bg-aside-rgb":"8, 18, 42","--mg-bg-card-rgb":"12, 36, 80","--mg-bg-card-hi-rgb":"18, 50, 110","--mg-bg-card-darker-rgb":"6, 18, 44","--mg-shadow-rgb":"2, 4, 14","--mg-text-tint-rgb":"218, 234, 252","--mg-text-hi-rgb":"170, 200, 240"}},{id:"emerald-forge",name:"翡翠绿",description:"机械翡翠绿,沉稳活力",preview:"#00796b",previewAccent:"#80cbc4",vars:{"--mg-primary":"#00796b","--mg-primary-rgb":"0, 121, 107","--mg-primary-hover":"#00897b","--mg-primary-hover-rgb":"0, 137, 123","--mg-primary-active":"#004d40","--mg-accent":"#80cbc4","--mg-accent-rgb":"128, 203, 196","--mg-primary-light-3":"#4ca094","--mg-primary-light-5":"#79b9b0","--mg-primary-light-7":"#a6d2cc","--mg-primary-light-8":"#bfdfdb","--mg-primary-light-9":"#e1f0ee","--mg-primary-dark-2":"#004d40","--mg-bg-app-1":"#06241f","--mg-bg-app-2":"#0a4538","--mg-bg-app-3":"#020f0c","--mg-bg-app-deep-rgb":"2, 12, 10","--mg-bg-aside-1":"#061a16","--mg-bg-aside-2":"#020a08","--mg-bg-aside-rgb":"8, 26, 22","--mg-bg-card-rgb":"10, 50, 42","--mg-bg-card-hi-rgb":"14, 66, 56","--mg-bg-card-darker-rgb":"6, 28, 24","--mg-shadow-rgb":"2, 10, 8","--mg-text-tint-rgb":"220, 244, 240","--mg-text-hi-rgb":"170, 220, 210"}},{id:"crimson-iron",name:"熔铁赤",description:"熔铁炉火般的暗红工业风",preview:"#b71c1c",previewAccent:"#ff8a80",vars:{"--mg-primary":"#b71c1c","--mg-primary-rgb":"183, 28, 28","--mg-primary-hover":"#d32f2f","--mg-primary-hover-rgb":"211, 47, 47","--mg-primary-active":"#8a0c0c","--mg-accent":"#ff8a80","--mg-accent-rgb":"255, 138, 128","--mg-primary-light-3":"#c95a5a","--mg-primary-light-5":"#d68585","--mg-primary-light-7":"#e4afaf","--mg-primary-light-8":"#edc8c8","--mg-primary-light-9":"#f7e6e6","--mg-primary-dark-2":"#8a0c0c","--mg-bg-app-1":"#2a0606","--mg-bg-app-2":"#4a0c0c","--mg-bg-app-3":"#150303","--mg-bg-app-deep-rgb":"20, 4, 4","--mg-bg-aside-1":"#200505","--mg-bg-aside-2":"#0c0202","--mg-bg-aside-rgb":"36, 6, 6","--mg-bg-card-rgb":"60, 10, 10","--mg-bg-card-hi-rgb":"80, 14, 14","--mg-bg-card-darker-rgb":"34, 5, 5","--mg-shadow-rgb":"10, 1, 1","--mg-text-tint-rgb":"252, 220, 220","--mg-text-hi-rgb":"240, 175, 175"}},{id:"graphite-steel",name:"石墨钢",description:"中性冷灰,纯粹工业",preview:"#455a64",previewAccent:"#b0bec5",vars:{"--mg-primary":"#455a64","--mg-primary-rgb":"69, 90, 100","--mg-primary-hover":"#607d8b","--mg-primary-hover-rgb":"96, 125, 139","--mg-primary-active":"#263238","--mg-accent":"#b0bec5","--mg-accent-rgb":"176, 190, 197","--mg-primary-light-3":"#7a8a92","--mg-primary-light-5":"#9aa6ac","--mg-primary-light-7":"#bac2c7","--mg-primary-light-8":"#ccd2d6","--mg-primary-light-9":"#e8ebed","--mg-primary-dark-2":"#263238","--mg-bg-app-1":"#161e24","--mg-bg-app-2":"#243038","--mg-bg-app-3":"#0a0e12","--mg-bg-app-deep-rgb":"10, 14, 18","--mg-bg-aside-1":"#11181d","--mg-bg-aside-2":"#060a0d","--mg-bg-aside-rgb":"18, 26, 32","--mg-bg-card-rgb":"30, 42, 50","--mg-bg-card-hi-rgb":"42, 56, 66","--mg-bg-card-darker-rgb":"16, 22, 28","--mg-shadow-rgb":"4, 6, 10","--mg-text-tint-rgb":"226, 232, 238","--mg-text-hi-rgb":"186, 198, 210"}},{id:"amber-forge",name:"琥珀金",description:"高对比的橙金调,警示与活力并存",preview:"#e65100",previewAccent:"#ffb74d",vars:{"--mg-primary":"#e65100","--mg-primary-rgb":"230, 81, 0","--mg-primary-hover":"#f57c00","--mg-primary-hover-rgb":"245, 124, 0","--mg-primary-active":"#bf360c","--mg-accent":"#ffb74d","--mg-accent-rgb":"255, 183, 77","--mg-primary-light-3":"#ec8344","--mg-primary-light-5":"#f2a474","--mg-primary-light-7":"#f7c4a3","--mg-primary-light-8":"#fad6bc","--mg-primary-light-9":"#fdeadd","--mg-primary-dark-2":"#bf360c","--mg-bg-app-1":"#2a1404","--mg-bg-app-2":"#4a2a0c","--mg-bg-app-3":"#150a02","--mg-bg-app-deep-rgb":"20, 10, 4","--mg-bg-aside-1":"#200f04","--mg-bg-aside-2":"#0c0602","--mg-bg-aside-rgb":"34, 16, 6","--mg-bg-card-rgb":"62, 32, 8","--mg-bg-card-hi-rgb":"82, 44, 12","--mg-bg-card-darker-rgb":"34, 16, 4","--mg-shadow-rgb":"10, 4, 1","--mg-text-tint-rgb":"252, 232, 210","--mg-text-hi-rgb":"240, 196, 140"}}];function ui(e){return e?zc.find(t=>t.id===e)??zc[0]:zc[0]}function ci(e){const t=document.documentElement;for(const[n,a]of Object.entries(e.vars))t.style.setProperty(n,a);t.setAttribute("data-theme",e.id)}const dre=[{key:"--mg-primary",label:"主色(背景基色)",hint:"全页背景、左侧导航、卡片底色、按钮"},{key:"--mg-primary-hover",label:"悬停/辉光",hint:"背景光晕、菜单高亮、悬停态"},{key:"--mg-accent",label:"强调/高光",hint:"点缀、边框高光、Logo 光晕"}];function Sv(e){const t=e.trim().replace(/^#/,"");return/^[0-9a-f]{6}$/i.test(t)?[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]:null}function Zo(e){const t=Sv(e);return t?`${t[0]}, ${t[1]}, ${t[2]}`:"0, 0, 0"}function Bi(e,t,n){const a=Sv(e),o=Sv(t);if(!a||!o)return e;const r=l=>Math.round(a[l]+(o[l]-a[l])*n),s=l=>l.toString(16).padStart(2,"0");return`#${s(r(0))}${s(r(1))}${s(r(2))}`}function ow(e,t){return Bi(e,"#ffffff",t)}function no(e,t){return Bi(e,"#000000",t)}function noe(e,t){const n={...e.vars},a=t["--mg-primary"]??n["--mg-primary"],o=t["--mg-primary-hover"]??n["--mg-primary-hover"],r=t["--mg-accent"]??n["--mg-accent"];if(t["--mg-primary"]){const s=no(a,.72),l=no(a,.48),u=no(a,.58),c=no(a,.54),d=no(a,.7),f=no(a,.38),p=no(a,.28),g=no(a,.62);n["--mg-primary"]=a,n["--mg-primary-rgb"]=Zo(a),n["--mg-primary-active"]=no(a,.35),n["--mg-primary-dark-2"]=no(a,.35),n["--mg-primary-light-3"]=ow(a,.22),n["--mg-primary-light-5"]=ow(a,.35),n["--mg-primary-light-7"]=Bi(a,"#888888",.45),n["--mg-primary-light-8"]=Bi(a,"#666666",.55),n["--mg-primary-light-9"]=Bi(a,"#444444",.65),n["--mg-bg-app-1"]=u,n["--mg-bg-app-2"]=l,n["--mg-bg-app-3"]=s,n["--mg-bg-app-deep-rgb"]=Zo(s),n["--mg-bg-aside-1"]=c,n["--mg-bg-aside-2"]=d,n["--mg-bg-aside-rgb"]=Zo(c),n["--mg-bg-card-rgb"]=Zo(f),n["--mg-bg-card-hi-rgb"]=Zo(p),n["--mg-bg-card-darker-rgb"]=Zo(g),n["--mg-shadow-rgb"]=Zo(no(a,.78))}return t["--mg-primary-hover"]&&(n["--mg-primary-hover"]=o,n["--mg-primary-hover-rgb"]=Zo(o)),t["--mg-accent"]&&(n["--mg-accent"]=r,n["--mg-accent-rgb"]=Zo(r)),n}function rw(e,t){if(!t||Object.keys(t).length===0)return e;const n=noe(e,t);return{...e,preview:t["--mg-primary"]??e.preview,previewAccent:t["--mg-accent"]??e.previewAccent,vars:n}}const Y4="simple.ui.state",yc={sidebarCollapsed:!1,theme:"light",themeId:toe,themeOverrides:{}};function aoe(){try{const e=localStorage.getItem(Y4);if(!e)return{...yc};const t=JSON.parse(e);return{sidebarCollapsed:t.sidebarCollapsed??yc.sidebarCollapsed,theme:t.theme==="dark"?"dark":"light",themeId:t.themeId??yc.themeId,themeOverrides:t.themeOverrides??{}}}catch(e){return console.warn("[ui.store] localStorage 中的 UI 状态解析失败,已回退默认:",e),{...yc}}}const ooe=F2("ui",{state:()=>aoe(),getters:{activeTheme(e){return rw(ui(e.themeId),e.themeOverrides[e.themeId])},availableThemes(){return zc}},actions:{toggleSidebar(){this.sidebarCollapsed=!this.sidebarCollapsed,this.persist()},setTheme(e){this.theme=e,document.documentElement.classList.toggle("dark",e==="dark"),this.persist()},getMergedTheme(e){return rw(e,this.themeOverrides[e.id])},getThemeColor(e,t){const n=ui(e);return this.themeOverrides[e]?.[t]??n.vars[t]},setThemeColor(e,t,n){this.themeOverrides[e]||(this.themeOverrides[e]={}),this.themeOverrides[e][t]=n,this.themeId===e&&ci(this.getMergedTheme(ui(e))),this.persist()},clearThemeOverrides(e){delete this.themeOverrides[e],this.themeId===e&&ci(ui(e)),this.persist()},clearAllThemeOverrides(){this.themeOverrides={},ci(this.activeTheme),this.persist()},setThemeId(e){const t=ui(e);this.themeId=t.id,ci(this.getMergedTheme(t)),this.persist()},applyCurrentTheme(){ci(this.activeTheme)},persist(){const e={sidebarCollapsed:this.sidebarCollapsed,theme:this.theme,themeId:this.themeId,themeOverrides:this.themeOverrides};try{localStorage.setItem(Y4,JSON.stringify(e))}catch(t){console.warn("[ui.store] 持久化 UI 状态失败:",t)}}}}),Mf=A2(Oee),G4=wO();Mf.use(G4);ooe(G4).applyCurrentTheme();Mf.use(Nf);Mf.use(Cee,{locale:kee});Mf.mount("#app");export{HF as $,S9 as A,p7 as B,C7 as C,$ae as D,tL as E,k7 as F,B7 as G,BE as H,BK as I,VK as J,FK as K,qE as L,k9 as M,ZL as N,QL as O,E9 as P,De as Q,Un as R,GE as S,aj as T,x9 as U,yj as V,wj as W,cv as X,XQ as Y,ud as Z,tx as _,Aae as a,L0 as a$,zF as a0,Sz as a1,vo as a2,es as a3,Oq as a4,CE as a5,Cj as a6,Xq as a7,QG as a8,oG as a9,le as aA,re as aB,D as aC,roe as aD,wt as aE,X as aF,se as aG,F2 as aH,NP as aI,PP as aJ,voe as aK,moe as aL,goe as aM,ui as aN,boe as aO,yoe as aP,zP as aQ,woe as aR,Xl as aS,tu as aT,Soe as aU,Coe as aV,koe as aW,ho as aX,Eoe as aY,xoe as aZ,Toe as a_,rG as aa,ZG as ab,cr as ac,fX as ad,pX as ae,Wn as af,DJ as ag,Ve as ah,dre as ai,Eee as aj,soe as ak,qo as al,ff as am,loe as an,ioe as ao,uoe as ap,coe as aq,Il as ar,Yo as as,Qa as at,doe as au,C as av,foe as aw,poe as ax,hoe as ay,z as az,Lae as b,Ne as b0,R as b1,ze as b2,Ooe as b3,Vt as b4,ht as b5,Vl as b6,E as b7,_oe as b8,Roe as b9,Boe as bA,Voe as bB,Foe as bC,zoe as bD,zA as bE,Hoe as bF,pe as bG,ne as bH,ct as bI,dn as bJ,Xe as bK,xC as ba,Ioe as bb,$oe as bc,pA as bd,Dt as be,M as bf,Noe as bg,kt as bh,oe as bi,Mt as bj,it as bk,CA as bl,Moe as bm,Tt as bn,Ce as bo,Poe as bp,Aoe as bq,i as br,Loe as bs,Qae as bt,Woe as bu,Koe as bv,ooe as bw,Doe as bx,Ni as by,$t as bz,_ae as c,Bae as d,Vae as e,Rae as f,Dae as g,Oae as h,Nae as i,Mae as j,Iae as k,Fae as l,C9 as m,vB as n,UC as o,NB as p,MB as q,Bn as r,QC as s,MV as t,mo as u,qm as v,Ez as w,Vz as x,Fz as y,h9 as z}; +`+r)}}catch{}}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Ds(this.defaults,n);const{transitional:a,paramsSerializer:o,headers:r}=n;a!==void 0&&Fc.assertOptions(a,{silentJSONParsing:Ka.transitional(Ka.boolean),forcedJSONParsing:Ka.transitional(Ka.boolean),clarifyTimeoutError:Ka.transitional(Ka.boolean),legacyInterceptorReqResOrdering:Ka.transitional(Ka.boolean)},!1),o!=null&&(ke.isFunction(o)?n.paramsSerializer={serialize:o}:Fc.assertOptions(o,{encode:Ka.function,serialize:Ka.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Fc.assertOptions(n,{baseUrl:Ka.spelling("baseURL"),withXsrfToken:Ka.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=r&&ke.merge(r.common,r[n.method]);r&&ke.forEach(["delete","get","head","post","put","patch","query","common"],h=>{delete r[h]}),n.headers=va.concat(s,r);const l=[];let u=!0;this.interceptors.request.forEach(function(v){if(typeof v.runWhen=="function"&&v.runWhen(n)===!1)return;u=u&&v.synchronous;const m=n.transitional||Dg;m&&m.legacyInterceptorReqResOrdering?l.unshift(v.fulfilled,v.rejected):l.push(v.fulfilled,v.rejected)});const c=[];this.interceptors.response.forEach(function(v){c.push(v.fulfilled,v.rejected)});let d,f=0,p;if(!u){const h=[ew.bind(this),void 0];for(h.unshift(...l),h.push(...c),p=h.length,d=Promise.resolve(n);f{if(!a._listeners)return;let r=a._listeners.length;for(;r-- >0;)a._listeners[r](o);a._listeners=null}),this.promise.then=o=>{let r;const s=new Promise(l=>{a.subscribe(l),r=l}).then(o);return s.cancel=function(){a.unsubscribe(r)},s},t(function(r,s,l){a.reason||(a.reason=new Uu(r,s,l),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new F4(function(o){t=o}),cancel:t}}};function kae(e){return function(n){return e.apply(null,n)}}function Eae(e){return ke.isObject(e)&&e.isAxiosError===!0}const yv={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(yv).forEach(([e,t])=>{yv[t]=e});function z4(e){const t=new xs(e),n=w4(xs.prototype.request,t);return ke.extend(n,xs.prototype,t,{allOwnKeys:!0}),ke.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return z4(Ds(e,o))},n}const An=z4(ju);An.Axios=xs;An.CanceledError=Uu;An.CancelToken=Cae;An.isCancel=P4;An.VERSION=Vg;An.toFormData=If;An.AxiosError=Ct;An.Cancel=An.CanceledError;An.all=function(t){return Promise.all(t)};An.spread=kae;An.isAxiosError=Eae;An.mergeConfig=Ds;An.AxiosHeaders=va;An.formToJSON=e=>M4(ke.isHTMLForm(e)?new FormData(e):e);An.getAdapter=V4.getAdapter;An.HttpStatusCode=yv;An.default=An;const{Axios:Yoe,AxiosError:Goe,CanceledError:Xoe,isCancel:Joe,CancelToken:Zoe,VERSION:Qoe,all:ere,Cancel:tre,isAxiosError:nre,spread:are,toFormData:ore,AxiosHeaders:rre,HttpStatusCode:sre,formToJSON:lre,getAdapter:ire,mergeConfig:ure,create:cre}=An,xae="/api",Xl=An.create({baseURL:xae,timeout:15e3,headers:{"Content-Type":"application/json"},withCredentials:!0});Xl.interceptors.request.use(e=>{const t=localStorage.getItem("simple.auth.token");t&&e.headers.set("Authorization",`Bearer ${t}`);const n=localStorage.getItem("simple.auth.scope");return n&&e.headers.set("X-Scope",n),e});function Tae(e){const t=e.response?.status,n=e.config?.url??"",a=n.startsWith("/sl/")||n.startsWith("sl/");if(t===502||t===504||e.code==="ECONNABORTED"||e.code==="ERR_NETWORK")return a?"SimpleLite 未连接:请先启动 SimpleLite 后端(监听端口 8222)后重试。":`网关无法连接到下游服务(${t??e.code??"network"})。`;const o=e.response?.data;return o?.message?o.message:e.message}Xl.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){try{localStorage.removeItem("simple.auth.token"),localStorage.removeItem("simple.auth.user"),localStorage.removeItem("simple.auth.scope"),localStorage.removeItem("simple.auth.runMode"),localStorage.removeItem("simple.auth.perm")}catch{}location.pathname!=="/login"&&location.assign("/login")}const t=Tae(e);try{Object.defineProperty(e,"message",{value:t,configurable:!0})}catch{}return Promise.reject(e)});new Date().toISOString();new Date().toISOString();const Oae={dispatchLoopHz:50,log:{level:"info",rollDays:7,maxSizeMB:256},security:{jwtExpireMin:1440,enableSwagger:!1,corsWhitelist:["http://localhost:5173","https://*.intra"]}},_ae={mes:[{id:"mes-1",name:"MES 主线",url:"http://mes.lan/api",enabled:!0}],wms:[{id:"wms-1",name:"WMS 仓储",url:"http://wms.lan/api",enabled:!0}],rcs:[]},Rae={algorithm:"astar",weights:{distance:1,congestion:.5,turnPenalty:.2},avoidance:[{id:"AV1",zoneId:"Z-NORTH",rule:"no-entry-while-loading"}],zoneSpeedLimits:[{zoneId:"Z-NARROW",maxSpeedMps:.5}]},Iae={lowBatteryThreshold:.3,criticalBatteryThreshold:.15,faultReport:{enabled:!0,emailTo:["ops@example.com"]},autoRepair:{enabled:!1,cooldownSec:600}},$ae={allowMidTaskCharge:!1,idleChargeAfterSec:300,priority:[{id:"CP1",condition:"soc<0.2",weight:100},{id:"CP2",condition:"idle>5min",weight:30}]},Nae={mode:"leastLoad",loadBalance:!0,maxQueuePerCar:3},Mae={intersections:[{id:"IX1",siteIds:["S006","S007"],mode:"mutex"}],mutex:[{id:"MZ1",zoneIds:["Z-CROSS"]}],yields:[{id:"YD1",from:"A 区",to:"B 区",condition:"priority30s"},{level:"error",condition:"driverException"}]}},Lae={groups:[{id:"G-A",name:"A 区车队",floor:"F1",region:"A",carIds:["C01","C02","C03"]},{id:"G-B",name:"B 区车队",floor:"F1",region:"B",carIds:["C04","C05"]}],ota:{enabled:!0,batchSize:2,rollbackOnFail:!0},batchOps:{confirmationRequired:!0,maxBatch:10},networkDiag:{rttThresholdMs:80,packetLossThreshold:.02}},Dae={templates:[{id:"tpl-sps",name:"SPS 物料配送",category:"SPS",version:"1.0.0",baselineJson:"{}"},{id:"tpl-pack",name:"电池 Pack 自动化产线",category:"BatteryPack",version:"1.0.0",baselineJson:"{}"},{id:"tpl-loop",name:"环线运行",category:"Loop",version:"1.0.0",baselineJson:"{}"},{id:"tpl-p2p",name:"点对点柔性搬运",category:"P2P",version:"1.0.0",baselineJson:"{}"}],dslPolicy:{enabled:!0,schemaVersion:"1"},lowCode:{enabled:!1,editor:"json"},versionPolicy:{keepVersions:10,allowRollback:!0}},Bae={locations:[{id:"L01",code:"A-01",name:"A 区货架 1",siteId:"S001",capacity:20,occupied:12},{id:"L02",code:"A-02",name:"A 区货架 2",siteId:"S002",capacity:20,occupied:7},{id:"L03",code:"B-01",name:"B 区缓存",siteId:"S003",capacity:30,occupied:25}],inventoryRules:[{id:"IR1",itemType:"PalletA",minQty:5,maxQty:30}]},Vae={playback:{retentionDays:30,samplingHz:5},logRetention:{hotDays:7,coldDays:180},version:{keepReleases:5},monitor:{car:{propertyKeys:[],statusKeys:[],actionKeys:[]},site:{propertyKeys:[],statusKeys:[],actionKeys:[]},track:{propertyKeys:[],statusKeys:[],actionKeys:[]},carActionByType:{}}},Fae={items:[{id:"widget-call-button",name:"呼叫按钮",schemaJson:'{"fields":[{"name":"siteId"}]}',layoutJson:'{"x":0,"y":0,"w":2,"h":1}',bindToScopes:["RCSMonitor"]}]},H4={system:Oae,integrations:_ae,routing:Rae,vehicle:Iae,charge:$ae,task:Nae,traffic:Mae,auth:Pae,device:Aae,fleet:Lae,scenario:Dae,location:Bae,ops:Vae,widget:Fae},K4="simple-platform-mock-rbac";function zae(){return{roles:[{id:"role-admin",name:"超级管理员",description:"拥有全部页面与操作权限的内置角色",scope:"*",pages:["*"],ops:["*"],widgetGrants:[],system:!0},{id:"role-ops",name:"运营人员",description:"运营监控端默认角色:可执行运维操作、查看监控",scope:"RCSMonitor",pages:["monitor-dashboard","monitor-map","monitor-ops","monitor-notes","monitor-vehicle-hub"],ops:["ops.car.pause","ops.car.resume","ops.car.gohome","ops.car.resetSession","ops.car.manualCharge","ops.task.pause","ops.task.cancel","ops.task.reassign","ops.task.boostPriority","monitor.note.write"],widgetGrants:[{widgetId:"MapEditor",visibility:"readonly"},{widgetId:"CadToolbar",visibility:"hidden"},{widgetId:"CarPanel",visibility:"readonly"},{widgetId:"MissionEditor",visibility:"readonly"},{widgetId:"OpsActionPanel",visibility:"interactive"},{widgetId:"ConfigCenter",visibility:"hidden"}],system:!0}],users:[{id:"u-admin",username:"admin",displayName:"系统管理员",enabled:!0,roleIds:["role-admin"],scopes:[]},{id:"u-ops",username:"ops",displayName:"运营人员",enabled:!0,roleIds:["role-ops"],scopes:[]}]}}function Hae(){try{const t=localStorage.getItem(K4);if(t)return JSON.parse(t)}catch{}const e=zae();return Wae(e),e}let Kae=Hae();function Wae(e=Kae){try{localStorage.setItem(K4,JSON.stringify(e))}catch{}}function wv(){return new Date().toISOString()}const jae="simple-platform-mock-config",nw=new Map;function Uae(){try{const e=localStorage.getItem(jae);if(e)return JSON.parse(e)}catch{}return{}}function qae(e){let t=nw.get(e);return t||(t=Uae()[e]??{section:e,version:1,updatedAt:wv(),payload:H4[e]},nw.set(e,t)),t}for(const e of Object.keys(H4))qae(e);wv(),wv();async function Yae(e){const{data:t}=await Xl.post("/auth/login",e);return t}async function Gae(){await Xl.post("/auth/logout")}async function Xae(e){const{data:t}=await Xl.post("/auth/switch-scope",{scope:e});return t}async function Jae(){const{data:e}=await Xl.get("/auth/me");return e}const xd="simple.auth.token",Pi="simple.auth.user",Ai="simple.auth.scope",Li="simple.auth.runMode",Di="simple.auth.perm";function aw(e){try{const t=localStorage.getItem(e);return t==null?null:JSON.parse(t)}catch{return null}}function zp(e){try{return localStorage.getItem(e)}catch{return null}}function Zae(){return{token:zp(xd),user:aw(Pi),scope:zp(Ai),runMode:zp(Li),effectivePermissions:aw(Di),validated:!1}}function Hp(e){e.token=null,e.user=null,e.scope=null,e.runMode=null,e.effectivePermissions=null,e.validated=!1;try{localStorage.removeItem(xd),localStorage.removeItem(Pi),localStorage.removeItem(Ai),localStorage.removeItem(Li),localStorage.removeItem(Di)}catch{}}const Qae=F2("auth",{state:()=>Zae(),getters:{isAuthed:e=>!!e.token,hasOp:e=>t=>{const n=e.effectivePermissions?.allowedOps??[];return n.includes("*")||n.includes(t)},widgetOf:e=>t=>e.effectivePermissions?.visibleWidgets.find(a=>a.widgetId===t)?.visibility??"interactive",hasPage:e=>t=>{const n=e.effectivePermissions?.allowedPages??[];return n.includes("*")||n.includes(t)}},actions:{async login(e){const t=await Yae(e);return this.token=t.token,this.user=t.user,this.scope=t.scope,this.runMode=t.runMode,this.effectivePermissions=t.effectivePermissions,this.validated=!0,localStorage.setItem(xd,t.token),localStorage.setItem(Pi,JSON.stringify(t.user)),localStorage.setItem(Ai,t.scope),localStorage.setItem(Li,t.runMode),localStorage.setItem(Di,JSON.stringify(t.effectivePermissions)),t},async logout(){try{await Gae()}catch{}Hp(this)},async validate(){if(!this.token)throw Hp(this),new Error("no-token");try{const e=await Jae();this.user=e.user,this.scope=e.scope,this.runMode=e.runMode,this.effectivePermissions=e.effectivePermissions,this.validated=!0,localStorage.setItem(Pi,JSON.stringify(e.user)),localStorage.setItem(Ai,e.scope),localStorage.setItem(Li,e.runMode),localStorage.setItem(Di,JSON.stringify(e.effectivePermissions))}catch(e){if(e instanceof Error&&e.message==="mock-mode-skip-me-validation"){this.validated=!0;return}throw Hp(this),e}},async switchScope(e){const t=await Xae(e);return this.token=t.token,this.user=t.user,this.scope=t.scope,this.runMode=t.runMode,this.effectivePermissions=t.effectivePermissions,this.validated=!0,localStorage.setItem(xd,t.token),localStorage.setItem(Pi,JSON.stringify(t.user)),localStorage.setItem(Ai,t.scope),localStorage.setItem(Li,t.runMode),localStorage.setItem(Di,JSON.stringify(t.effectivePermissions)),t}}}),W4=[{path:"/login",name:"login",component:()=>nn(()=>import("./LoginView-BoWUwdFm.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),meta:{layout:"blank",public:!0,title:"登录"}},{path:"/status",name:"status",component:()=>nn(()=>import("./ServiceStatusView-BAEp7yHN.js"),__vite__mapDeps([12,13,3,14,5,15,16])),meta:{layout:"blank",public:!0,title:"服务状态"}},{path:"/admin",component:()=>nn(()=>import("./AppShell-DSc4T3s8.js"),__vite__mapDeps([17,1,18,3,19,11,5,20,21,22])),meta:{scope:"Platform"},redirect:"/admin/dashboard",children:[{path:"dashboard",name:"admin-dashboard",component:()=>nn(()=>import("./DashboardView-CrqZ1yEu.js"),__vite__mapDeps([23,24,25,26,3,27,9,14])),meta:{title:"总览"}},{path:"map-monitor",name:"admin-map-monitor",component:()=>nn(()=>import("./MapMonitorView-oh-hd20C.js"),__vite__mapDeps([28,29,30,3,5,16,1,25,31,32,33,34,24,35,36,14,27,37,38,39,19,11,40,7,10,41,42,43,21,20])),meta:{title:"地图监控"}},{path:"map-editor",name:"admin-map-editor",component:()=>nn(()=>import("./MapEditorView-Blj6CGw0.js"),__vite__mapDeps([44,1,29,30,3,5,16,25,31,45,35,46,42,19,11,10,41,7,47,48,20,21,27,4,49,8,40,6,22,39,9,50])),meta:{title:"地图编辑"}},{path:"tracks",name:"admin-tracks",component:()=>nn(()=>import("./TrackTableView-xOZBg8GQ.js"),__vite__mapDeps([51,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,54,27])),meta:{title:"场景管理"}},{path:"cars",name:"admin-cars",component:()=>nn(()=>import("./CarPanelView-PMCxnAq3.js"),__vite__mapDeps([55,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,56,27,6,37])),meta:{title:"车辆管理"}},{path:"processes",name:"admin-processes",component:()=>nn(()=>import("./ProcessPanelView-BIyHjFKr.js"),__vite__mapDeps([57,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,58])),meta:{title:"进程管理"}},{path:"scripts",name:"admin-scripts",component:()=>nn(()=>import("./ScriptPanelView-B2wxU0Us.js"),__vite__mapDeps([59,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,60])),meta:{title:"脚本管理"}},{path:"missions",name:"admin-missions",component:()=>nn(()=>import("./MissionEditorView-1UuYWhls.js"),__vite__mapDeps([61,52,1,25,45,35,53,3,50,42,4,22,15,7,8,5,47,48,16,14,43,19,11,10,41,20,21,62])),meta:{title:"任务编排"}},{path:"project-properties",name:"admin-project-properties",component:()=>nn(()=>import("./ProjectPropertiesView-0BoQ0Htf.js"),__vite__mapDeps([63,1,25,64,3,27,50,14,43,19,11,10,41,16,7,8,48,5,15])),meta:{title:"项目属性"}},{path:"playback",name:"admin-playback",component:()=>nn(()=>import("./PlaybackView-B1Y9yN9o.js"),__vite__mapDeps([65,1,66,3,14,19,11,10,41,16,67,37,5,7])),meta:{title:"调度回放"}},{path:"config/system",name:"admin-config-system",component:()=>nn(()=>import("./SystemConfigView-DFXZ6aVu.js"),__vite__mapDeps([68,69,70,71,3,43,25,34,72,37,14,5,16,31,73,4,7,48,19,11,40,67,8,6,47])),meta:{title:"系统级配置"}},{path:"config/integrations",name:"admin-config-integrations",component:()=>nn(()=>import("./ExternalIntegrationView-CpHHAMpz.js"),__vite__mapDeps([74,1,69,70,71,3,43,25,34,72,37,14,5,16,27,19,11,10,41,48,7])),meta:{title:"外部系统对接"}},{path:"config/routing",name:"admin-config-routing",component:()=>nn(()=>import("./RoutingPolicyView-CIGTEJMB.js"),__vite__mapDeps([75,1,69,70,71,3,43,25,34,72,37,14,5,16,4,19,11,10,41,7,8,40])),meta:{title:"路径规划策略"}},{path:"config/vehicle-hub",name:"admin-vehicle-hub",component:()=>nn(()=>import("./VehicleHubView-cMWfwwrB.js"),__vite__mapDeps([76,25,1,69,70,71,3,43,34,72,37,14,5,16,24,35,77,50,27,19,11,20,21,40,7,48,39,4,8,67,15,10,41])),meta:{title:"车辆运维"}},{path:"vehicle-hub",redirect:"/admin/config/vehicle-hub"},{path:"config/vehicle",redirect:{path:"/admin/config/vehicle-hub",query:{tab:"maintenance"}}},{path:"config/fleet",redirect:{path:"/admin/config/vehicle-hub",query:{tab:"fleet"}}},{path:"config/charge",name:"admin-config-charge",component:()=>nn(()=>import("./ChargePolicyView-BJa18gVS.js"),__vite__mapDeps([78,1,69,70,71,3,43,25,34,72,37,14,5,16,4,19,11,10,41,7,8,48])),meta:{title:"充电逻辑"}},{path:"config/task",name:"admin-config-task",component:()=>nn(()=>import("./TaskAllocationView-B6Eq3RnB.js"),__vite__mapDeps([79,69,70,71,3,43,25,34,72,37,14,5,16,4,7,8,48,22])),meta:{title:"任务分配"}},{path:"config/traffic",name:"admin-config-traffic",component:()=>nn(()=>import("./TrafficRuleView-uvpgC5iS.js"),__vite__mapDeps([80,1,69,70,71,3,43,25,34,72,37,14,5,16,27,19,11,10,41])),meta:{title:"交通管制"}},{path:"config/auth",name:"admin-config-auth",component:()=>nn(()=>import("./AuthRoleView-CbH2OR6X.js"),__vite__mapDeps([81,1,82,3,50,43,10,83,67,37,42,4,19,11,16,40,7,14,27,41,48,5])),meta:{title:"权限角色"}},{path:"config/device",name:"admin-config-device",component:()=>nn(()=>import("./DeviceHubView-COkUK8gp.js"),__vite__mapDeps([84,1,69,70,71,3,43,25,34,72,37,14,5,16,27,15,48,19,11,10,41])),meta:{title:"设备接入"}},{path:"config/scenario",name:"admin-config-scenario",component:()=>nn(()=>import("./ScenarioTemplateView-BfXftOcX.js"),__vite__mapDeps([85,69,70,71,3,43,25,34,72,37,14,5,16,86,15,67])),meta:{title:"场景模板"}},{path:"config/location",name:"admin-config-location",component:()=>nn(()=>import("./LocationView-DLR_9_m5.js"),__vite__mapDeps([87,1,69,70,71,3,43,25,34,72,37,14,5,16,27,19,11,10,41,39])),meta:{title:"库位管理"}},{path:"config/ops",name:"admin-config-ops",component:()=>nn(()=>import("./OpsConfigView-CyPTl7WY.js"),__vite__mapDeps([88,69,70,71,3,43,25,34,72,37,14,5,16,89,50,4,6,10,83,49,7,8,67])),meta:{title:"运营维护"}},{path:"config/widget",name:"admin-config-widget",component:()=>nn(()=>import("./CustomWidgetView-D54ImLde.js"),__vite__mapDeps([90,1,69,70,71,3,43,25,34,72,37,14,5,16,91,19,11,10,41])),meta:{title:"自定义控件"}},{path:"config/map-monitor",name:"admin-config-map-monitor",component:()=>nn(()=>import("./MapMonitorConfigView-CRLVKr09.js"),__vite__mapDeps([92,70,71,3,43,25,93,50,14,27,5,16,49,10,83,20])),meta:{title:"地图监控配置"}}]},{path:"/monitor",component:()=>nn(()=>import("./AppShell-DSc4T3s8.js"),__vite__mapDeps([17,1,18,3,19,11,5,20,21,22])),meta:{scope:"RCSMonitor"},redirect:"/monitor/map",children:[{path:"dashboard",name:"monitor-dashboard",component:()=>nn(()=>import("./MonitorDashboardView-C_9mDYUp.js"),__vite__mapDeps([94,1,24,25,33,95,3,14,19,11,10,41,39,16,37,38])),meta:{title:"运营总览"}},{path:"vehicle-hub",name:"monitor-vehicle-hub",component:()=>nn(()=>import("./VehicleHubView-cMWfwwrB.js"),__vite__mapDeps([76,25,1,69,70,71,3,43,34,72,37,14,5,16,24,35,77,50,27,19,11,20,21,40,7,48,39,4,8,67,15,10,41])),meta:{title:"车辆运维"}},{path:"map",name:"monitor-map",component:()=>nn(()=>import("./MonitorMapView-Chf_3bcP.js"),__vite__mapDeps([96,28,29,30,3,5,16,1,25,31,32,33,34,24,35,36,14,27,37,38,39,19,11,40,7,10,41,42,43,21,20])),meta:{title:"地图监控"}},{path:"ops",name:"monitor-ops",component:()=>nn(()=>import("./OpsActionPanelView-iA-v2vXw.js"),__vite__mapDeps([97,1,70,71,3,43,32,33,98,14,19,11,10,41,5,7,16])),meta:{title:"运维操作"}},{path:"notes",name:"monitor-notes",component:()=>nn(()=>import("./AnnotationView-DCFcPZNR.js"),__vite__mapDeps([99,1,3,14,19,11,10,41,16,67,4,5,40,7])),meta:{title:"运营备注"}}]},{path:"/",redirect:"/login"},{path:"/:pathMatch(.*)*",redirect:"/login"}];function j4(e){return(W4.find(n=>n.path===e)?.children??[]).filter(n=>typeof n.name=="string").map(n=>({name:String(n.name),path:`${e}/${n.path}`}))}const U4=j4("/admin"),q4=j4("/monitor"),eoe=new Set([...U4,...q4].map(e=>e.name)),Nf=Ate({history:pte(),routes:W4});Nf.beforeEach(async e=>{const t=Qae();if(e.meta.public)return!0;if(!t.isAuthed)return{path:"/login",query:{redirect:e.fullPath}};if(!t.validated)try{await t.validate()}catch{return{path:"/login",query:{redirect:e.fullPath}}}const n=e.path.startsWith("/admin")?"Platform":e.path.startsWith("/monitor")?"RCSMonitor":null;if(n&&t.scope!==n)try{await t.switchScope(n)}catch{try{await t.switchScope(n)}catch{}}const a=typeof e.name=="string"?e.name:"";if(a&&eoe.has(a)&&!t.hasPage(a)){const r=(t.scope==="RCSMonitor"?q4:U4).find(s=>t.hasPage(s.name))?.path;if(r&&r!==e.path)return cv.warning("无权访问该页面,已跳转到可访问页面"),r;if(!r)return cv.error("当前账号在该区域没有任何可访问页面,请联系管理员分配权限"),{path:"/status"}}return!0});Nf.afterEach(e=>{const t="迷毂";document.title=e.meta.title?`${e.meta.title} · ${t}`:t});Nf.onError((e,t)=>{const n=e?.message??"";/dynamically imported module|Loading (chunk|CSS chunk)|module script failed|Failed to fetch/i.test(n)&&(t?.fullPath?window.location.assign(t.fullPath):window.location.reload())});const toe="fame-lavender",zc=[{id:"fame-lavender",name:"迷毂浅紫",description:"参考 FAME 系统:深紫侧栏 + 浅紫白主区,柔和耐看,长时间使用不刺眼",preview:"#7c3aed",previewAccent:"#a855f7",vars:{"--mg-primary":"#7c3aed","--mg-primary-rgb":"124, 58, 237","--mg-primary-hover":"#8b5cf6","--mg-primary-hover-rgb":"139, 92, 246","--mg-primary-active":"#5b21b6","--mg-accent":"#a855f7","--mg-accent-rgb":"168, 85, 247","--mg-primary-light-3":"#a78bfa","--mg-primary-light-5":"#c4b5fd","--mg-primary-light-7":"#ddd6fe","--mg-primary-light-8":"#ede9fe","--mg-primary-light-9":"#f5f3ff","--mg-primary-dark-2":"#6d28d9","--mg-bg-app-1":"#edeaf5","--mg-bg-app-2":"#e7e4f1","--mg-bg-app-3":"#f1eef8","--mg-bg-app-deep-rgb":"231, 228, 241","--mg-bg-aside-1":"#2d1b69","--mg-bg-aside-2":"#1a1040","--mg-bg-aside-rgb":"45, 27, 105","--mg-bg-card-rgb":"255, 255, 255","--mg-bg-card-hi-rgb":"249, 246, 255","--mg-bg-card-darker-rgb":"245, 240, 251","--mg-shadow-rgb":"124, 58, 237","--mg-text-tint-rgb":"45, 27, 105","--mg-text-hi-rgb":"96, 98, 102","--mg-orb-a-opacity":"0","--mg-orb-b-opacity":"0","--mg-orb-c-opacity":"0"}},{id:"industrial-purple",name:"星云紫",description:"科幻紫主色,辅以蓝紫渐变,磨砂玻璃 · 霓虹辉光",preview:"#7c3aed",previewAccent:"#c4b5fd",vars:{"--mg-primary":"#7c3aed","--mg-primary-rgb":"124, 58, 237","--mg-primary-hover":"#8b5cf6","--mg-primary-hover-rgb":"139, 92, 246","--mg-primary-active":"#5b21b6","--mg-accent":"#c4b5fd","--mg-accent-rgb":"196, 181, 253","--mg-primary-light-3":"#9d6cf2","--mg-primary-light-5":"#b594f7","--mg-primary-light-7":"#6f4eab","--mg-primary-light-8":"#4c357a","--mg-primary-light-9":"#2d1f55","--mg-primary-dark-2":"#4c1d95","--mg-bg-app-1":"#0e0a24","--mg-bg-app-2":"#1f1147","--mg-bg-app-3":"#06031a","--mg-bg-app-deep-rgb":"6, 3, 26","--mg-bg-aside-1":"#0c0820","--mg-bg-aside-2":"#03020e","--mg-bg-aside-rgb":"10, 6, 30","--mg-bg-card-rgb":"38, 24, 78","--mg-bg-card-hi-rgb":"58, 38, 110","--mg-bg-card-darker-rgb":"20, 12, 48","--mg-shadow-rgb":"8, 2, 24","--mg-text-tint-rgb":"242, 232, 255","--mg-text-hi-rgb":"220, 200, 252","--mg-orb-a-opacity":"0.55","--mg-orb-b-opacity":"0.50","--mg-orb-c-opacity":"0.40"}},{id:"deep-azure",name:"深邃蓝",description:"科技感深蓝,沉静稳重",preview:"#1565c0",previewAccent:"#82b1ff",vars:{"--mg-primary":"#1565c0","--mg-primary-rgb":"21, 101, 192","--mg-primary-hover":"#1976d2","--mg-primary-hover-rgb":"25, 118, 210","--mg-primary-active":"#0d47a1","--mg-accent":"#82b1ff","--mg-accent-rgb":"130, 177, 255","--mg-primary-light-3":"#5a8fce","--mg-primary-light-5":"#83aedb","--mg-primary-light-7":"#adcde7","--mg-primary-light-8":"#c4dbed","--mg-primary-light-9":"#e3eef8","--mg-primary-dark-2":"#0d47a1","--mg-bg-app-1":"#051a3a","--mg-bg-app-2":"#0a2f6b","--mg-bg-app-3":"#020a1f","--mg-bg-app-deep-rgb":"2, 8, 26","--mg-bg-aside-1":"#06122a","--mg-bg-aside-2":"#02060f","--mg-bg-aside-rgb":"8, 18, 42","--mg-bg-card-rgb":"12, 36, 80","--mg-bg-card-hi-rgb":"18, 50, 110","--mg-bg-card-darker-rgb":"6, 18, 44","--mg-shadow-rgb":"2, 4, 14","--mg-text-tint-rgb":"218, 234, 252","--mg-text-hi-rgb":"170, 200, 240"}},{id:"emerald-forge",name:"翡翠绿",description:"机械翡翠绿,沉稳活力",preview:"#00796b",previewAccent:"#80cbc4",vars:{"--mg-primary":"#00796b","--mg-primary-rgb":"0, 121, 107","--mg-primary-hover":"#00897b","--mg-primary-hover-rgb":"0, 137, 123","--mg-primary-active":"#004d40","--mg-accent":"#80cbc4","--mg-accent-rgb":"128, 203, 196","--mg-primary-light-3":"#4ca094","--mg-primary-light-5":"#79b9b0","--mg-primary-light-7":"#a6d2cc","--mg-primary-light-8":"#bfdfdb","--mg-primary-light-9":"#e1f0ee","--mg-primary-dark-2":"#004d40","--mg-bg-app-1":"#06241f","--mg-bg-app-2":"#0a4538","--mg-bg-app-3":"#020f0c","--mg-bg-app-deep-rgb":"2, 12, 10","--mg-bg-aside-1":"#061a16","--mg-bg-aside-2":"#020a08","--mg-bg-aside-rgb":"8, 26, 22","--mg-bg-card-rgb":"10, 50, 42","--mg-bg-card-hi-rgb":"14, 66, 56","--mg-bg-card-darker-rgb":"6, 28, 24","--mg-shadow-rgb":"2, 10, 8","--mg-text-tint-rgb":"220, 244, 240","--mg-text-hi-rgb":"170, 220, 210"}},{id:"crimson-iron",name:"熔铁赤",description:"熔铁炉火般的暗红工业风",preview:"#b71c1c",previewAccent:"#ff8a80",vars:{"--mg-primary":"#b71c1c","--mg-primary-rgb":"183, 28, 28","--mg-primary-hover":"#d32f2f","--mg-primary-hover-rgb":"211, 47, 47","--mg-primary-active":"#8a0c0c","--mg-accent":"#ff8a80","--mg-accent-rgb":"255, 138, 128","--mg-primary-light-3":"#c95a5a","--mg-primary-light-5":"#d68585","--mg-primary-light-7":"#e4afaf","--mg-primary-light-8":"#edc8c8","--mg-primary-light-9":"#f7e6e6","--mg-primary-dark-2":"#8a0c0c","--mg-bg-app-1":"#2a0606","--mg-bg-app-2":"#4a0c0c","--mg-bg-app-3":"#150303","--mg-bg-app-deep-rgb":"20, 4, 4","--mg-bg-aside-1":"#200505","--mg-bg-aside-2":"#0c0202","--mg-bg-aside-rgb":"36, 6, 6","--mg-bg-card-rgb":"60, 10, 10","--mg-bg-card-hi-rgb":"80, 14, 14","--mg-bg-card-darker-rgb":"34, 5, 5","--mg-shadow-rgb":"10, 1, 1","--mg-text-tint-rgb":"252, 220, 220","--mg-text-hi-rgb":"240, 175, 175"}},{id:"graphite-steel",name:"石墨钢",description:"中性冷灰,纯粹工业",preview:"#455a64",previewAccent:"#b0bec5",vars:{"--mg-primary":"#455a64","--mg-primary-rgb":"69, 90, 100","--mg-primary-hover":"#607d8b","--mg-primary-hover-rgb":"96, 125, 139","--mg-primary-active":"#263238","--mg-accent":"#b0bec5","--mg-accent-rgb":"176, 190, 197","--mg-primary-light-3":"#7a8a92","--mg-primary-light-5":"#9aa6ac","--mg-primary-light-7":"#bac2c7","--mg-primary-light-8":"#ccd2d6","--mg-primary-light-9":"#e8ebed","--mg-primary-dark-2":"#263238","--mg-bg-app-1":"#161e24","--mg-bg-app-2":"#243038","--mg-bg-app-3":"#0a0e12","--mg-bg-app-deep-rgb":"10, 14, 18","--mg-bg-aside-1":"#11181d","--mg-bg-aside-2":"#060a0d","--mg-bg-aside-rgb":"18, 26, 32","--mg-bg-card-rgb":"30, 42, 50","--mg-bg-card-hi-rgb":"42, 56, 66","--mg-bg-card-darker-rgb":"16, 22, 28","--mg-shadow-rgb":"4, 6, 10","--mg-text-tint-rgb":"226, 232, 238","--mg-text-hi-rgb":"186, 198, 210"}},{id:"amber-forge",name:"琥珀金",description:"高对比的橙金调,警示与活力并存",preview:"#e65100",previewAccent:"#ffb74d",vars:{"--mg-primary":"#e65100","--mg-primary-rgb":"230, 81, 0","--mg-primary-hover":"#f57c00","--mg-primary-hover-rgb":"245, 124, 0","--mg-primary-active":"#bf360c","--mg-accent":"#ffb74d","--mg-accent-rgb":"255, 183, 77","--mg-primary-light-3":"#ec8344","--mg-primary-light-5":"#f2a474","--mg-primary-light-7":"#f7c4a3","--mg-primary-light-8":"#fad6bc","--mg-primary-light-9":"#fdeadd","--mg-primary-dark-2":"#bf360c","--mg-bg-app-1":"#2a1404","--mg-bg-app-2":"#4a2a0c","--mg-bg-app-3":"#150a02","--mg-bg-app-deep-rgb":"20, 10, 4","--mg-bg-aside-1":"#200f04","--mg-bg-aside-2":"#0c0602","--mg-bg-aside-rgb":"34, 16, 6","--mg-bg-card-rgb":"62, 32, 8","--mg-bg-card-hi-rgb":"82, 44, 12","--mg-bg-card-darker-rgb":"34, 16, 4","--mg-shadow-rgb":"10, 4, 1","--mg-text-tint-rgb":"252, 232, 210","--mg-text-hi-rgb":"240, 196, 140"}}];function ui(e){return e?zc.find(t=>t.id===e)??zc[0]:zc[0]}function ci(e){const t=document.documentElement;for(const[n,a]of Object.entries(e.vars))t.style.setProperty(n,a);t.setAttribute("data-theme",e.id)}const dre=[{key:"--mg-primary",label:"主色(背景基色)",hint:"全页背景、左侧导航、卡片底色、按钮"},{key:"--mg-primary-hover",label:"悬停/辉光",hint:"背景光晕、菜单高亮、悬停态"},{key:"--mg-accent",label:"强调/高光",hint:"点缀、边框高光、Logo 光晕"}];function Sv(e){const t=e.trim().replace(/^#/,"");return/^[0-9a-f]{6}$/i.test(t)?[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]:null}function Zo(e){const t=Sv(e);return t?`${t[0]}, ${t[1]}, ${t[2]}`:"0, 0, 0"}function Bi(e,t,n){const a=Sv(e),o=Sv(t);if(!a||!o)return e;const r=l=>Math.round(a[l]+(o[l]-a[l])*n),s=l=>l.toString(16).padStart(2,"0");return`#${s(r(0))}${s(r(1))}${s(r(2))}`}function ow(e,t){return Bi(e,"#ffffff",t)}function no(e,t){return Bi(e,"#000000",t)}function noe(e,t){const n={...e.vars},a=t["--mg-primary"]??n["--mg-primary"],o=t["--mg-primary-hover"]??n["--mg-primary-hover"],r=t["--mg-accent"]??n["--mg-accent"];if(t["--mg-primary"]){const s=no(a,.72),l=no(a,.48),u=no(a,.58),c=no(a,.54),d=no(a,.7),f=no(a,.38),p=no(a,.28),g=no(a,.62);n["--mg-primary"]=a,n["--mg-primary-rgb"]=Zo(a),n["--mg-primary-active"]=no(a,.35),n["--mg-primary-dark-2"]=no(a,.35),n["--mg-primary-light-3"]=ow(a,.22),n["--mg-primary-light-5"]=ow(a,.35),n["--mg-primary-light-7"]=Bi(a,"#888888",.45),n["--mg-primary-light-8"]=Bi(a,"#666666",.55),n["--mg-primary-light-9"]=Bi(a,"#444444",.65),n["--mg-bg-app-1"]=u,n["--mg-bg-app-2"]=l,n["--mg-bg-app-3"]=s,n["--mg-bg-app-deep-rgb"]=Zo(s),n["--mg-bg-aside-1"]=c,n["--mg-bg-aside-2"]=d,n["--mg-bg-aside-rgb"]=Zo(c),n["--mg-bg-card-rgb"]=Zo(f),n["--mg-bg-card-hi-rgb"]=Zo(p),n["--mg-bg-card-darker-rgb"]=Zo(g),n["--mg-shadow-rgb"]=Zo(no(a,.78))}return t["--mg-primary-hover"]&&(n["--mg-primary-hover"]=o,n["--mg-primary-hover-rgb"]=Zo(o)),t["--mg-accent"]&&(n["--mg-accent"]=r,n["--mg-accent-rgb"]=Zo(r)),n}function rw(e,t){if(!t||Object.keys(t).length===0)return e;const n=noe(e,t);return{...e,preview:t["--mg-primary"]??e.preview,previewAccent:t["--mg-accent"]??e.previewAccent,vars:n}}const Y4="simple.ui.state",yc={sidebarCollapsed:!1,theme:"light",themeId:toe,themeOverrides:{}};function aoe(){try{const e=localStorage.getItem(Y4);if(!e)return{...yc};const t=JSON.parse(e);return{sidebarCollapsed:t.sidebarCollapsed??yc.sidebarCollapsed,theme:t.theme==="dark"?"dark":"light",themeId:t.themeId??yc.themeId,themeOverrides:t.themeOverrides??{}}}catch(e){return console.warn("[ui.store] localStorage 中的 UI 状态解析失败,已回退默认:",e),{...yc}}}const ooe=F2("ui",{state:()=>aoe(),getters:{activeTheme(e){return rw(ui(e.themeId),e.themeOverrides[e.themeId])},availableThemes(){return zc}},actions:{toggleSidebar(){this.sidebarCollapsed=!this.sidebarCollapsed,this.persist()},setTheme(e){this.theme=e,document.documentElement.classList.toggle("dark",e==="dark"),this.persist()},getMergedTheme(e){return rw(e,this.themeOverrides[e.id])},getThemeColor(e,t){const n=ui(e);return this.themeOverrides[e]?.[t]??n.vars[t]},setThemeColor(e,t,n){this.themeOverrides[e]||(this.themeOverrides[e]={}),this.themeOverrides[e][t]=n,this.themeId===e&&ci(this.getMergedTheme(ui(e))),this.persist()},clearThemeOverrides(e){delete this.themeOverrides[e],this.themeId===e&&ci(ui(e)),this.persist()},clearAllThemeOverrides(){this.themeOverrides={},ci(this.activeTheme),this.persist()},setThemeId(e){const t=ui(e);this.themeId=t.id,ci(this.getMergedTheme(t)),this.persist()},applyCurrentTheme(){ci(this.activeTheme)},persist(){const e={sidebarCollapsed:this.sidebarCollapsed,theme:this.theme,themeId:this.themeId,themeOverrides:this.themeOverrides};try{localStorage.setItem(Y4,JSON.stringify(e))}catch(t){console.warn("[ui.store] 持久化 UI 状态失败:",t)}}}}),Mf=A2(Oee),G4=wO();Mf.use(G4);ooe(G4).applyCurrentTheme();Mf.use(Nf);Mf.use(Cee,{locale:kee});Mf.mount("#app");export{HF as $,S9 as A,p7 as B,C7 as C,$ae as D,tL as E,k7 as F,B7 as G,BE as H,BK as I,VK as J,FK as K,qE as L,k9 as M,ZL as N,QL as O,E9 as P,De as Q,Un as R,GE as S,aj as T,x9 as U,yj as V,wj as W,cv as X,XQ as Y,ud as Z,tx as _,Aae as a,L0 as a$,zF as a0,Sz as a1,vo as a2,es as a3,Oq as a4,CE as a5,Cj as a6,Xq as a7,QG as a8,oG as a9,le as aA,re as aB,D as aC,roe as aD,wt as aE,X as aF,se as aG,F2 as aH,NP as aI,PP as aJ,voe as aK,moe as aL,goe as aM,ui as aN,boe as aO,yoe as aP,zP as aQ,woe as aR,Xl as aS,tu as aT,Soe as aU,Coe as aV,koe as aW,ho as aX,Eoe as aY,xoe as aZ,Toe as a_,rG as aa,ZG as ab,cr as ac,fX as ad,pX as ae,Wn as af,DJ as ag,Ve as ah,dre as ai,Eee as aj,soe as ak,qo as al,ff as am,loe as an,ioe as ao,uoe as ap,coe as aq,Il as ar,Yo as as,Qa as at,doe as au,C as av,foe as aw,poe as ax,hoe as ay,z as az,Lae as b,Ne as b0,R as b1,ze as b2,Ooe as b3,Vt as b4,ht as b5,Vl as b6,E as b7,_oe as b8,Roe as b9,Boe as bA,Voe as bB,Foe as bC,zoe as bD,zA as bE,Hoe as bF,pe as bG,ne as bH,ct as bI,dn as bJ,Xe as bK,xC as ba,Ioe as bb,$oe as bc,pA as bd,Dt as be,M as bf,Noe as bg,kt as bh,oe as bi,Mt as bj,it as bk,CA as bl,Moe as bm,Tt as bn,Ce as bo,Poe as bp,Aoe as bq,i as br,Loe as bs,Qae as bt,Woe as bu,Koe as bv,ooe as bw,Doe as bx,Ni as by,$t as bz,_ae as c,Bae as d,Vae as e,Rae as f,Dae as g,Oae as h,Nae as i,Mae as j,Iae as k,Fae as l,C9 as m,vB as n,UC as o,NB as p,MB as q,Bn as r,QC as s,MV as t,mo as u,qm as v,Ez as w,Vz as x,Fz as y,h9 as z}; diff --git a/MiGu.Server/wwwroot/assets/mapEdit-Di5ggA7K.js b/MiGu.Server/wwwroot/assets/mapEdit-Z_uHqZwy.js similarity index 96% rename from MiGu.Server/wwwroot/assets/mapEdit-Di5ggA7K.js rename to MiGu.Server/wwwroot/assets/mapEdit-Z_uHqZwy.js index 5050c90..f2e1801 100644 --- a/MiGu.Server/wwwroot/assets/mapEdit-Di5ggA7K.js +++ b/MiGu.Server/wwwroot/assets/mapEdit-Z_uHqZwy.js @@ -1 +1 @@ -import{aS as t}from"./index-D5OuyicD.js";const a="/sl/projection/map-edit",r="/sl/projection/ai-config";async function o(e){const{data:s}=await e;if(!s?.success)throw new Error(s?.message??"request failed");return s.data}const n={createSite:e=>o(t.post(`${a}/objects/site`,e)),createTrack:(e,s)=>o(t.post(`${a}/objects/${e}`,s)),createImage:e=>o(t.post(`${a}/objects/image`,e)),createText:e=>o(t.post(`${a}/objects/text`,e)),createModel:e=>o(t.post(`${a}/objects/model`,e)),createCar:e=>o(t.post(`${a}/objects/car`,e)),deleteObject:(e,s)=>o(t.delete(`${a}/objects/${e}/${s}`)),batch:e=>o(t.post(`${a}/objects/batch`,{ops:e})),copyFieldsTo:(e,s,p,c)=>o(t.post(`${a}/objects/${e}/${s}/fields/copy-to`,{fieldNames:p,targets:c})),pick:()=>o(t.post(`${a}/pick`)),dashboardSummary:()=>o(t.get(`${a}/dashboard/summary`)),uploadAsset:(e,s)=>o(t.post(`${a}/assets/upload`,{filename:e,data:s},{headers:{"Content-Type":"multipart/form-data"}})),aiMapGenerate:e=>o(t.post(`${a}/ai/map-generate`,e)),projectSave:e=>o(t.post(`${a}/project/save`,{path:e??""})),projectLoad:e=>o(t.post(`${a}/project/load`,{path:e})),projectCurrent:()=>o(t.get(`${a}/project/current`)),projectBrowse:e=>o(t.get(`${a}/project/browse`,{params:e?{dir:e}:{}})),projectNativePickOpen:e=>o(t.post(`${a}/project/native-pick-open`,{initialDir:e??""})),projectNativePickSave:(e,s)=>o(t.post(`${a}/project/native-pick-save`,{initialDir:e??"",suggestedFileName:s??"project.current.json"})),sampleSitesAlongTrack:(e,s)=>o(t.post(`${a}/objects/track/${e}/sample-sites`,s)),getViewFilter:()=>o(t.get(`${a}/view-filter`)),setViewFilter:e=>o(t.post(`${a}/view-filter`,e))},$={get:()=>o(t.get(`${r}/`)),save:e=>o(t.post(`${r}/`,e))};export{$ as a,n as m}; +import{aS as t}from"./index-CC_hCGHZ.js";const a="/sl/projection/map-edit",r="/sl/projection/ai-config";async function o(e){const{data:s}=await e;if(!s?.success)throw new Error(s?.message??"request failed");return s.data}const n={createSite:e=>o(t.post(`${a}/objects/site`,e)),createTrack:(e,s)=>o(t.post(`${a}/objects/${e}`,s)),createImage:e=>o(t.post(`${a}/objects/image`,e)),createText:e=>o(t.post(`${a}/objects/text`,e)),createModel:e=>o(t.post(`${a}/objects/model`,e)),createCar:e=>o(t.post(`${a}/objects/car`,e)),deleteObject:(e,s)=>o(t.delete(`${a}/objects/${e}/${s}`)),batch:e=>o(t.post(`${a}/objects/batch`,{ops:e})),copyFieldsTo:(e,s,p,c)=>o(t.post(`${a}/objects/${e}/${s}/fields/copy-to`,{fieldNames:p,targets:c})),pick:()=>o(t.post(`${a}/pick`)),dashboardSummary:()=>o(t.get(`${a}/dashboard/summary`)),uploadAsset:(e,s)=>o(t.post(`${a}/assets/upload`,{filename:e,data:s},{headers:{"Content-Type":"multipart/form-data"}})),aiMapGenerate:e=>o(t.post(`${a}/ai/map-generate`,e)),projectSave:e=>o(t.post(`${a}/project/save`,{path:e??""})),projectLoad:e=>o(t.post(`${a}/project/load`,{path:e})),projectCurrent:()=>o(t.get(`${a}/project/current`)),projectBrowse:e=>o(t.get(`${a}/project/browse`,{params:e?{dir:e}:{}})),projectNativePickOpen:e=>o(t.post(`${a}/project/native-pick-open`,{initialDir:e??""})),projectNativePickSave:(e,s)=>o(t.post(`${a}/project/native-pick-save`,{initialDir:e??"",suggestedFileName:s??"project.current.json"})),sampleSitesAlongTrack:(e,s)=>o(t.post(`${a}/objects/track/${e}/sample-sites`,s)),getViewFilter:()=>o(t.get(`${a}/view-filter`)),setViewFilter:e=>o(t.post(`${a}/view-filter`,e))},$={get:()=>o(t.get(`${r}/`)),save:e=>o(t.post(`${r}/`,e))};export{$ as a,n as m}; diff --git a/MiGu.Server/wwwroot/assets/monitorConfigCache-deAxNrzx.js b/MiGu.Server/wwwroot/assets/monitorConfigCache-B5CZXjjB.js similarity index 72% rename from MiGu.Server/wwwroot/assets/monitorConfigCache-deAxNrzx.js rename to MiGu.Server/wwwroot/assets/monitorConfigCache-B5CZXjjB.js index 4dc6c7f..15a35e2 100644 --- a/MiGu.Server/wwwroot/assets/monitorConfigCache-deAxNrzx.js +++ b/MiGu.Server/wwwroot/assets/monitorConfigCache-B5CZXjjB.js @@ -1 +1 @@ -import{r as e}from"./reflection-BmVSriDn.js";let i=null,n=null;function o(){i=null,n=null}async function f(l=!1){return!l&&i?i:(!l&&n||(n=e.getMonitorConfig().then(t=>(i=t,n=null,t)).catch(t=>{throw n=null,t})),n)}export{f,o as i}; +import{r as e}from"./reflection-CTDOoTn5.js";let i=null,n=null;function o(){i=null,n=null}async function f(l=!1){return!l&&i?i:(!l&&n||(n=e.getMonitorConfig().then(t=>(i=t,n=null,t)).catch(t=>{throw n=null,t})),n)}export{f,o as i}; diff --git a/MiGu.Server/wwwroot/assets/ops-DFVCciZx.js b/MiGu.Server/wwwroot/assets/ops-DQIK15vn.js similarity index 69% rename from MiGu.Server/wwwroot/assets/ops-DFVCciZx.js rename to MiGu.Server/wwwroot/assets/ops-DQIK15vn.js index 7d03807..4d9d240 100644 --- a/MiGu.Server/wwwroot/assets/ops-DFVCciZx.js +++ b/MiGu.Server/wwwroot/assets/ops-DQIK15vn.js @@ -1 +1 @@ -import{aS as a}from"./index-D5OuyicD.js";async function n(t){const{data:s}=await a.post("/sl/ops/execute",t);return s}async function o(){const{data:t}=await a.get("/sl/ops/audits");return t}export{n as e,o as l}; +import{aS as a}from"./index-CC_hCGHZ.js";async function n(t){const{data:s}=await a.post("/sl/ops/execute",t);return s}async function o(){const{data:t}=await a.get("/sl/ops/audits");return t}export{n as e,o as l}; diff --git a/MiGu.Server/wwwroot/assets/projection-BVk2tEkj.js b/MiGu.Server/wwwroot/assets/projection-D6ulMg5U.js similarity index 92% rename from MiGu.Server/wwwroot/assets/projection-BVk2tEkj.js rename to MiGu.Server/wwwroot/assets/projection-D6ulMg5U.js index 19f4d09..ee78cfa 100644 --- a/MiGu.Server/wwwroot/assets/projection-BVk2tEkj.js +++ b/MiGu.Server/wwwroot/assets/projection-D6ulMg5U.js @@ -1 +1 @@ -import{aS as e}from"./index-D5OuyicD.js";import{r as s}from"./reflection-BmVSriDn.js";async function p(){const{data:t}=await e.get("/sl/projection/sites");return t}async function d(){const{data:t}=await e.get("/sl/projection/tracks");return t}function i(t){if(!t)return"idle";const r=t.toLowerCase();return/fault|error|failed|故障|异常|失联|超时|检修/.test(r)?"fault":/charg|充电/.test(r)?"charging":/pause|暂停|挂起/.test(r)?"paused":/offline|离线/.test(r)?"offline":/run|busy|working|运行|工作|执行|忙/.test(r)?"running":"idle"}function o(t){if(!t)return"queued";const r=t.toLowerCase();return/run|运行|执行/.test(r)?"running":/pause|暂停|挂起/.test(r)?"paused":/complete|done|完成|成功/.test(r)?"completed":/cancel|取消|中止/.test(r)?"cancelled":/fail|error|fault|失败|异常/.test(r)?"failed":/assign|分配/.test(r)?"assigned":"queued"}function u(t){return{id:`C${String(t.id).padStart(2,"0")}`,rawId:t.id,name:t.name,typeName:t.typeName,x:0,y:0,theta:0,batterySoc:.8,state:i(t.status),lastUpdate:new Date().toISOString(),group:t.layer??void 0}}function c(t){return{id:`M${String(t.id).padStart(2,"0")}`,name:t.name,typeName:t.typeName,priority:50,status:o(t.status),steps:[],createdAt:new Date().toISOString()}}async function n(){return(await s.listObjects("car")).map(u)}async function a(){return(await s.listObjects("mission")).map(c)}async function m(){try{const{data:t}=await e.get("/sl/projection/cars");if(Array.isArray(t)&&t.length>0)return t;const r=await n();return r.length>0?r:Array.isArray(t)?t:[]}catch{return n()}}async function y(){try{const{data:t}=await e.get("/sl/projection/missions");if(Array.isArray(t)&&t.length>0)return t;const r=await a();return r.length>0?r:Array.isArray(t)?t:[]}catch{return a()}}export{y as a,p as b,d as c,m as l}; +import{aS as e}from"./index-CC_hCGHZ.js";import{r as s}from"./reflection-CTDOoTn5.js";async function p(){const{data:t}=await e.get("/sl/projection/sites");return t}async function d(){const{data:t}=await e.get("/sl/projection/tracks");return t}function i(t){if(!t)return"idle";const r=t.toLowerCase();return/fault|error|failed|故障|异常|失联|超时|检修/.test(r)?"fault":/charg|充电/.test(r)?"charging":/pause|暂停|挂起/.test(r)?"paused":/offline|离线/.test(r)?"offline":/run|busy|working|运行|工作|执行|忙/.test(r)?"running":"idle"}function o(t){if(!t)return"queued";const r=t.toLowerCase();return/run|运行|执行/.test(r)?"running":/pause|暂停|挂起/.test(r)?"paused":/complete|done|完成|成功/.test(r)?"completed":/cancel|取消|中止/.test(r)?"cancelled":/fail|error|fault|失败|异常/.test(r)?"failed":/assign|分配/.test(r)?"assigned":"queued"}function u(t){return{id:`C${String(t.id).padStart(2,"0")}`,rawId:t.id,name:t.name,typeName:t.typeName,x:0,y:0,theta:0,batterySoc:.8,state:i(t.status),lastUpdate:new Date().toISOString(),group:t.layer??void 0}}function c(t){return{id:`M${String(t.id).padStart(2,"0")}`,name:t.name,typeName:t.typeName,priority:50,status:o(t.status),steps:[],createdAt:new Date().toISOString()}}async function n(){return(await s.listObjects("car")).map(u)}async function a(){return(await s.listObjects("mission")).map(c)}async function m(){try{const{data:t}=await e.get("/sl/projection/cars");if(Array.isArray(t)&&t.length>0)return t;const r=await n();return r.length>0?r:Array.isArray(t)?t:[]}catch{return n()}}async function y(){try{const{data:t}=await e.get("/sl/projection/missions");if(Array.isArray(t)&&t.length>0)return t;const r=await a();return r.length>0?r:Array.isArray(t)?t:[]}catch{return a()}}export{y as a,p as b,d as c,m as l}; diff --git a/MiGu.Server/wwwroot/assets/reflection-BmVSriDn.js b/MiGu.Server/wwwroot/assets/reflection-BmVSriDn.js deleted file mode 100644 index 82331b1..0000000 --- a/MiGu.Server/wwwroot/assets/reflection-BmVSriDn.js +++ /dev/null @@ -1 +0,0 @@ -import{aS as i}from"./index-D5OuyicD.js";const c="/sl/projection/reflection";function p(){return{fields:[],status:[],methods:[]}}function f(){return{car:p(),site:p(),track:p()}}const g=f;async function o(e){const{data:t}=await i.get(`${c}${e}`);if(!t?.success)throw new Error(t?.message??`reflection ${e} failed`);return t.data}async function r(e,t){const{data:s}=await i.post(`${c}${e}`,null,{params:t});if(!s?.success)throw new Error(s?.message??`reflection ${e} failed`);return s.data}async function d(e){const{data:t}=await i.delete(`${c}${e}`);if(!t?.success)throw new Error(t?.message??`reflection ${e} failed`);return t.data}async function u(e,t){const{data:s}=await i.patch(`${c}${e}`,t);if(!s?.success)throw new Error(s?.message??`reflection PATCH ${e} failed`);return s.data}const y={listKinds:()=>o("/kinds"),listAssemblies:()=>o("/assemblies"),listObjects:e=>o(`/objects/${e}`),listCreatableTypes:e=>o(`/types/${e}`),createObject:(e,t,s)=>{const n={};if(t&&(n.typeName=t),s)for(const[a,l]of Object.entries(s))l==null||l===""||(n[a]=l);return r(`/objects/${e}`,n)},deleteObject:(e,t)=>d(`/objects/${e}/${t}`),reloadPlugins:()=>r("/plugins/reload"),listPlugins:()=>o("/plugins"),unloadPlugin:e=>r(`/plugins/${encodeURIComponent(e)}/unload`),listMethods:(e,t)=>o(`/methods/${e}/${t}`),listMethodsByType:e=>o(`/methods-by-type/${e}`),getStatus:(e,t)=>o(`/status/${e}/${t}`),getFields:(e,t)=>o(`/fields/${e}/${t}`),setField:(e,t,s,n)=>r(`/fields/${e}/${t}/${encodeURIComponent(s)}`,{value:n}),deleteField:(e,t,s)=>d(`/fields/${e}/${t}/${encodeURIComponent(s)}`),getBundle:(e,t)=>o(`/bundle/${e}/${t}`),execute:(e,t,s,n)=>r(`/execute/${e}/${t}/${encodeURIComponent(s)}`,n),gotoCarSite:(e,t)=>r(`/car/${e}/goto-site`,{siteId:t}),getScriptSource:e=>o(`/scripts/${e}/source`),getScriptExceptionStatus:e=>o(`/scripts/${e}/exception-status`),getMonitorConfig:()=>o("/monitor-config"),saveMonitorConfig:async e=>{const{data:t}=await i.post(`${c}/monitor-config`,e);if(!t?.success)throw new Error(t?.message??"saveMonitorConfig failed");return t.data},getSelection:()=>o("/selection"),setSelection:(e,t)=>r("/selection",{kind:e,id:t}),clearSelection:()=>r("/selection/clear"),getProjectFields:()=>o("/project/fields"),setProjectField:(e,t)=>r(`/project/fields/${encodeURIComponent(e)}`,{value:t}),saveProject:e=>r("/project/save",e?{path:e}:void 0),getAppConfigFields:()=>o("/app-config/fields"),setAppConfigField:(e,t)=>r(`/app-config/fields/${encodeURIComponent(e)}`,{value:t}),saveAppConfig:()=>r("/app-config/save"),getViewportStyle:()=>o("/viewport-style"),patchViewportStyle:e=>u("/viewport-style",e),getCarStyleTypes:()=>o("/car-style/types"),getCarStyle:e=>o(`/car-style/${encodeURIComponent(e)}`),putCarStyle:async(e,t)=>{const{data:s}=await i.post(`${c}/car-style/${encodeURIComponent(e)}`,t);if(!s?.success)throw new Error(s?.message??"putCarStyle failed");return s.data},deleteCarStyle:e=>d(`/car-style/${encodeURIComponent(e)}`),getAlarmColors:()=>o("/car-style/alarm-colors"),putAlarmColors:async e=>{const{data:t}=await i.post(`${c}/car-style/alarm-colors`,e);if(!t?.success)throw new Error(t?.message??"putAlarmColors failed");return t.data},saveCarStyle:()=>r("/car-style/save")};function m(e){const t=e>>>24&255,s=e>>>16&255,n=e>>>8&255,a=e&255;return t>=255?`#${s.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`:`#${t.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`}function S(e){const t=e.replace("#","").trim();if(t.length===6){const s=parseInt(t.slice(0,2),16),n=parseInt(t.slice(2,4),16),a=parseInt(t.slice(4,6),16);return 255<<24|s<<16|n<<8|a}if(t.length===8){const s=parseInt(t.slice(0,2),16),n=parseInt(t.slice(2,4),16),a=parseInt(t.slice(4,6),16),l=parseInt(t.slice(6,8),16);return s<<24|n<<16|a<<8|l}return 4294967295}export{m as a,f as b,g as e,S as h,y as r}; diff --git a/MiGu.Server/wwwroot/assets/reflection-CTDOoTn5.js b/MiGu.Server/wwwroot/assets/reflection-CTDOoTn5.js new file mode 100644 index 0000000..a3d3cca --- /dev/null +++ b/MiGu.Server/wwwroot/assets/reflection-CTDOoTn5.js @@ -0,0 +1 @@ +import{aS as l}from"./index-CC_hCGHZ.js";const d="/sl/projection/reflection";function p(){return{fields:[],status:[],methods:[]}}function f(){return{car:p(),site:p(),track:p()}}const y=f;async function s(e){const{data:t}=await l.get(`${d}${e}`);if(!t?.success)throw new Error(t?.message??`reflection ${e} failed`);return t.data}async function n(e,t){const{data:o}=await l.post(`${d}${e}`,null,{params:t});if(!o?.success)throw new Error(o?.message??`reflection ${e} failed`);return o.data}async function g(e){const{data:t}=await l.delete(`${d}${e}`);if(!t?.success)throw new Error(t?.message??`reflection ${e} failed`);return t.data}async function u(e,t){const{data:o}=await l.patch(`${d}${e}`,t);if(!o?.success)throw new Error(o?.message??`reflection PATCH ${e} failed`);return o.data}const A={listKinds:()=>s("/kinds"),listAssemblies:()=>s("/assemblies"),listObjects:e=>s(`/objects/${e}`),listCreatableTypes:e=>s(`/types/${e}`),createObject:(e,t,o)=>{const r={};if(t&&(r.typeName=t),o)for(const[c,a]of Object.entries(o))a==null||a===""||(r[c]=a);return n(`/objects/${e}`,r)},deleteObject:(e,t)=>g(`/objects/${e}/${t}`),reloadPlugins:()=>n("/plugins/reload"),listPlugins:()=>s("/plugins"),unloadPlugin:e=>n(`/plugins/${encodeURIComponent(e)}/unload`),listMethods:(e,t)=>s(`/methods/${e}/${t}`),listMethodsByType:e=>s(`/methods-by-type/${e}`),getStatus:(e,t)=>s(`/status/${e}/${t}`),getFields:(e,t)=>s(`/fields/${e}/${t}`),setField:(e,t,o,r)=>n(`/fields/${e}/${t}/${encodeURIComponent(o)}`,{value:r}),deleteField:(e,t,o)=>g(`/fields/${e}/${t}/${encodeURIComponent(o)}`),getBundle:(e,t)=>s(`/bundle/${e}/${t}`),execute:(e,t,o,r)=>n(`/execute/${e}/${t}/${encodeURIComponent(o)}`,r),gotoCarSite:(e,t)=>n(`/car/${e}/goto-site`,{siteId:t}),getScriptSource:e=>s(`/scripts/${e}/source`),getScriptExceptionStatus:e=>s(`/scripts/${e}/exception-status`),getMonitorConfig:()=>s("/monitor-config"),saveMonitorConfig:async e=>{const{data:t}=await l.post(`${d}/monitor-config`,e);if(!t?.success)throw new Error(t?.message??"saveMonitorConfig failed");return t.data},getSelection:()=>s("/selection"),setSelection:(e,t)=>n("/selection",{kind:e,id:t}),clearSelection:()=>n("/selection/clear"),getProjectFields:()=>s("/project/fields"),setProjectField:(e,t)=>n(`/project/fields/${encodeURIComponent(e)}`,{value:t}),saveProject:e=>n("/project/save",e?{path:e}:void 0),getAppConfigFields:()=>s("/app-config/fields"),setAppConfigField:(e,t)=>n(`/app-config/fields/${encodeURIComponent(e)}`,{value:t}),saveAppConfig:()=>n("/app-config/save"),getViewportStyle:()=>s("/viewport-style"),patchViewportStyle:e=>u("/viewport-style",b(e)),getCarStyleTypes:()=>s("/car-style/types"),getCarStyle:e=>s(`/car-style/${encodeURIComponent(e)}`),putCarStyle:async(e,t)=>{const{data:o}=await l.post(`${d}/car-style/${encodeURIComponent(e)}`,t);if(!o?.success)throw new Error(o?.message??"putCarStyle failed");return o.data},deleteCarStyle:e=>g(`/car-style/${encodeURIComponent(e)}`),getAlarmColors:()=>s("/car-style/alarm-colors"),putAlarmColors:async e=>{const{data:t}=await l.post(`${d}/car-style/alarm-colors`,e);if(!t?.success)throw new Error(t?.message??"putAlarmColors failed");return t.data},saveCarStyle:()=>n("/car-style/save")};function i(e){return Number.isFinite(e)?e>>>0:0}function C(e){const t=i(e),o=t>>>24&255,r=t>>>16&255,c=t>>>8&255,a=t&255;return o>=255?`#${r.toString(16).padStart(2,"0")}${c.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`:`#${o.toString(16).padStart(2,"0")}${r.toString(16).padStart(2,"0")}${c.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`}function w(e){const t=e.replace("#","").trim();if(t.length===6){const o=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),c=parseInt(t.slice(4,6),16);return i(255<<24|o<<16|r<<8|c)}if(t.length===8){const o=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),c=parseInt(t.slice(4,6),16),a=parseInt(t.slice(6,8),16);return i(o<<24|r<<16|c<<8|a)}return 4294967295}const $=["colorNormalArgb","colorSelectedArgb","labelColorNormalArgb","labelColorSelectedArgb"],m=["colorNormalArgb","colorSelectedArgb"];function b(e){const t={};if(e.site){const o={...e.site};for(const r of $)o[r]!=null&&(o[r]=i(o[r]));t.site=o}if(e.track){const o={...e.track};for(const r of m)o[r]!=null&&(o[r]=i(o[r]));t.track=o}return t}function I(e){return{site:{...e.site,colorNormalArgb:i(e.site.colorNormalArgb),colorSelectedArgb:i(e.site.colorSelectedArgb),labelColorNormalArgb:i(e.site.labelColorNormalArgb),labelColorSelectedArgb:i(e.site.labelColorSelectedArgb)},track:{...e.track,colorNormalArgb:i(e.track.colorNormalArgb),colorSelectedArgb:i(e.track.colorSelectedArgb)}}}export{C as a,f as b,y as e,w as h,I as n,A as r}; diff --git a/MiGu.Server/wwwroot/assets/useMapEditStream-DunazsxD.js b/MiGu.Server/wwwroot/assets/useMapEditStream-BAGhVPpt.js similarity index 83% rename from MiGu.Server/wwwroot/assets/useMapEditStream-DunazsxD.js rename to MiGu.Server/wwwroot/assets/useMapEditStream-BAGhVPpt.js index 9f840f1..45ba07b 100644 --- a/MiGu.Server/wwwroot/assets/useMapEditStream-DunazsxD.js +++ b/MiGu.Server/wwwroot/assets/useMapEditStream-BAGhVPpt.js @@ -1 +1 @@ -import{u as n}from"./useProjectionStream-DvMLcpMm.js";import{b5 as r,b4 as s}from"./index-D5OuyicD.js";function u(e){const c=n({autoConnect:!1});function o(a){const t=a?.payload;if(t)switch(a.kind){case"alarm":e.onAlarm?.(t);break;case"object-created":e.onObjectCreated?.(t);break;case"object-deleted":e.onObjectDeleted?.(t);break;case"object-patched":e.onObjectPatched?.(t);break;case"object-batch-changed":e.onObjectBatchChanged?.(t);break;case"pick-result":e.onPickResult?.(t);break;case"selection-detail":e.onSelectionDetail?.(t);break;case"workspace-shortcut":e.onWorkspaceShortcut?.(t);break;case"viewport-style-updated":e.onViewportStyleUpdated?.();break}}return r(()=>{c.on(o),c.connect()}),s(()=>{c.off(o),c.disconnect()}),{connected:c.connected}}export{u}; +import{u as n}from"./useProjectionStream-C_klWvmm.js";import{b5 as r,b4 as s}from"./index-CC_hCGHZ.js";function u(e){const c=n({autoConnect:!1});function o(a){const t=a?.payload;if(t)switch(a.kind){case"alarm":e.onAlarm?.(t);break;case"object-created":e.onObjectCreated?.(t);break;case"object-deleted":e.onObjectDeleted?.(t);break;case"object-patched":e.onObjectPatched?.(t);break;case"object-batch-changed":e.onObjectBatchChanged?.(t);break;case"pick-result":e.onPickResult?.(t);break;case"selection-detail":e.onSelectionDetail?.(t);break;case"workspace-shortcut":e.onWorkspaceShortcut?.(t);break;case"viewport-style-updated":e.onViewportStyleUpdated?.();break}}return r(()=>{c.on(o),c.connect()}),s(()=>{c.off(o),c.disconnect()}),{connected:c.connected}}export{u}; diff --git a/MiGu.Server/wwwroot/assets/useProjectionStream-DvMLcpMm.js b/MiGu.Server/wwwroot/assets/useProjectionStream-C_klWvmm.js similarity index 94% rename from MiGu.Server/wwwroot/assets/useProjectionStream-DvMLcpMm.js rename to MiGu.Server/wwwroot/assets/useProjectionStream-C_klWvmm.js index eb92453..f4fd46b 100644 --- a/MiGu.Server/wwwroot/assets/useProjectionStream-DvMLcpMm.js +++ b/MiGu.Server/wwwroot/assets/useProjectionStream-C_klWvmm.js @@ -1 +1 @@ -import{b6 as S,bf as h}from"./index-D5OuyicD.js";const g=["snapshot-tick","selection-detail","alarm","object-created","object-deleted","object-patched","object-batch-changed","pick-result","project-saved","project-loaded","car-state","mission-status","monitor-config-updated","workspace-shortcut","viewport-style-updated"];function w(a={}){const y=a.url??"/api/sl/projection/stream",j=a.reconnectDelayMs??3e3,r=h(!1),u=h(null),s=new Set;let e=null,c=null,l=!1;function i(){if(l||e)return;try{e=new EventSource(y)}catch{p();return}e.onopen=()=>{r.value=!0},e.onerror=()=>{r.value=!1,f(),p()},e.onmessage=t=>{d(void 0,t.data)};const n=new Set([...g,...a.extraEventKinds??[]]);for(const t of n)e.addEventListener(t,o=>{d(t,o.data)})}function d(n,t){if(!(typeof t!="string"||!t))try{const o=JSON.parse(t),v=typeof o=="object"&&o!==null&&"kind"in o?o:{kind:n??"message",payload:o};u.value=v,s.forEach(k=>{try{k(v)}catch{}})}catch{}}function f(){if(e){try{e.close()}catch{}e=null}}function p(){l||c||(c=setTimeout(()=>{c=null,i()},j))}function m(){l=!0,c&&(clearTimeout(c),c=null),f(),r.value=!1}function b(n){s.add(n)}function E(n){s.delete(n)}return a.autoConnect!==!1&&i(),S(()=>{m(),s.clear()}),{connected:r,lastEvent:u,connect:i,disconnect:m,on:b,off:E}}export{w as u}; +import{b6 as S,bf as h}from"./index-CC_hCGHZ.js";const g=["snapshot-tick","selection-detail","alarm","object-created","object-deleted","object-patched","object-batch-changed","pick-result","project-saved","project-loaded","car-state","mission-status","monitor-config-updated","workspace-shortcut","viewport-style-updated"];function w(a={}){const y=a.url??"/api/sl/projection/stream",j=a.reconnectDelayMs??3e3,r=h(!1),u=h(null),s=new Set;let e=null,c=null,l=!1;function i(){if(l||e)return;try{e=new EventSource(y)}catch{p();return}e.onopen=()=>{r.value=!0},e.onerror=()=>{r.value=!1,f(),p()},e.onmessage=t=>{d(void 0,t.data)};const n=new Set([...g,...a.extraEventKinds??[]]);for(const t of n)e.addEventListener(t,o=>{d(t,o.data)})}function d(n,t){if(!(typeof t!="string"||!t))try{const o=JSON.parse(t),v=typeof o=="object"&&o!==null&&"kind"in o?o:{kind:n??"message",payload:o};u.value=v,s.forEach(k=>{try{k(v)}catch{}})}catch{}}function f(){if(e){try{e.close()}catch{}e=null}}function p(){l||c||(c=setTimeout(()=>{c=null,i()},j))}function m(){l=!0,c&&(clearTimeout(c),c=null),f(),r.value=!1}function b(n){s.add(n)}function E(n){s.delete(n)}return a.autoConnect!==!1&&i(),S(()=>{m(),s.clear()}),{connected:r,lastEvent:u,connect:i,disconnect:m,on:b,off:E}}export{w as u}; diff --git a/MiGu.Server/wwwroot/index.html b/MiGu.Server/wwwroot/index.html index e6f8a6f..1758f97 100644 --- a/MiGu.Server/wwwroot/index.html +++ b/MiGu.Server/wwwroot/index.html @@ -6,8 +6,8 @@ 迷毂 · 智能调度平台 - - + +
diff --git a/frontends/apps/simple-platform-vue/src/components/Workspace3D.vue b/frontends/apps/simple-platform-vue/src/components/Workspace3D.vue index deb2040..fa44148 100644 --- a/frontends/apps/simple-platform-vue/src/components/Workspace3D.vue +++ b/frontends/apps/simple-platform-vue/src/components/Workspace3D.vue @@ -25,7 +25,7 @@ @load="onReady" />
- 正在连接 webVRender (http://{{ resolvedHost }}) ... + {{ loadingHint }} 如长时间未加载,请确认 SimpleLite 已以 Web-Enabled 模式启动且 8223 端口可达。
@@ -73,6 +73,7 @@ const emit = defineEmits<{ const frame = ref() const frameWrap = ref() const loaded = ref(false) +const loadingHint = ref('正在连接 webVRender ...') const lastPick = ref(null) const lastSelect = ref([]) const iframeSrc = ref('') @@ -89,40 +90,118 @@ const vrUrl = computed(() => { return `http://${resolvedHost.value}/?${qs.toString()}` }) -/** - * 嵌入 / canvas-only 模式必须在 webVRender 主页加载(即发起 WebSocket 连接)之前先打一次 - * 对应的 GET 声明端点,让 SimpleLite 把"下一个连入的 WebTerminal"打上对应模式标签。 - * 否则 SimpleLite 拿不到任何提示(CycleGUI 不会把 URL query 透传给 Terminal), - * 会默认创建完整工作区面板(工作台 / 浮动条 / CAD / 底栏),违反平台 UI 接管的要求。 - */ -async function declareEmbedIfNeeded() { - const endpoint = props.canvasOnly - ? '/declareCanvasOnly' - : props.embedUi - ? '/declareEmbedUi' - : null - if (!endpoint) return +const FETCH_TIMEOUT_MS = 1800 +const DECLARE_MAX_ATTEMPTS = 4 +const LOAD_WATCHDOG_MS = 18_000 + +let loadWatchdog: ReturnType | null = null +let prepareGeneration = 0 + +function vrenderBaseUrl() { + return `http://${resolvedHost.value}` +} + +function sleep(ms: number) { + return new Promise(r => setTimeout(r, ms)) +} + +function needsDeclare() { + return props.canvasOnly || props.embedUi +} + +function declareEndpoint() { + if (props.canvasOnly) return '/declareCanvasOnly' + if (props.embedUi) return '/declareEmbedUi' + return null +} + +/** 单次 HTTP 探测(带超时),用于 declare / vrenderReady。 */ +async function pingVrender(path: string): Promise { try { - await fetch(`http://${resolvedHost.value}${endpoint}`, { + const res = await fetch(`${vrenderBaseUrl()}${path}`, { method: 'GET', - mode: 'no-cors', cache: 'no-store', credentials: 'omit', - keepalive: true + signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) }) - } catch (err) { - console.warn(`[Workspace3D] ${endpoint} 请求失败,SimpleLite 可能仍以完整面板模式启动:`, err) + return res.ok + } catch { + return false } } -async function prepareAndLoad() { +/** + * 尽力 declare(不阻塞 iframe)。SimpleLite 侧 WebTerminal 已默认 canvas-only, + * declare 主要用于多 tab 显式标记;失败也不影响平台纯画布模式。 + */ +async function postDeclareBestEffort() { + const endpoint = declareEndpoint() + if (!endpoint) return + + for (let attempt = 0; attempt < DECLARE_MAX_ATTEMPTS; attempt++) { + if (await pingVrender(endpoint)) return + await sleep(80 * (attempt + 1)) + } + console.warn(`[Workspace3D] ${endpoint} 未成功,将依赖 SimpleLite 默认 canvas-only 模式`) +} + +/** 非嵌入模式:短轮询等待 8223 就绪后再加载 iframe。 */ +async function waitForVrenderReady(maxMs = 10_000): Promise { + const deadline = Date.now() + maxMs + let interval = 60 + while (Date.now() < deadline) { + if (await pingVrender('/vrenderReady')) return true + await sleep(interval) + interval = Math.min(interval + 40, 280) + } + return false +} + +function clearLoadWatchdog() { + if (loadWatchdog != null) { + clearTimeout(loadWatchdog) + loadWatchdog = null + } +} + +function startLoadWatchdog(generation: number) { + clearLoadWatchdog() + loadWatchdog = setTimeout(() => { + if (generation !== prepareGeneration || loaded.value) return + loadingHint.value = `连接超时 (http://${resolvedHost.value}),请确认 SimpleLite 已启动` + }, LOAD_WATCHDOG_MS) +} + +function buildIframeSrc(forceReload: boolean) { + const base = vrUrl.value + if (!forceReload) return base + const sep = base.includes('?') ? '&' : '?' + return `${base}${sep}_=${Date.now()}` +} + +async function prepareAndLoad(forceReload = false) { + const generation = ++prepareGeneration loaded.value = false - await declareEmbedIfNeeded() - iframeSrc.value = vrUrl.value + loadingHint.value = `正在连接 webVRender (http://${resolvedHost.value}) ...` + startLoadWatchdog(generation) + + const embedded = needsDeclare() + + if (embedded) { + // 并行:iframe 立即加载,declare 后台尽力发送(不挡首屏)。 + void postDeclareBestEffort() + iframeSrc.value = buildIframeSrc(forceReload || !!iframeSrc.value) + } else { + loadingHint.value = '正在等待 SimpleLite webVRender 就绪 ...' + await waitForVrenderReady() + if (generation !== prepareGeneration) return + iframeSrc.value = buildIframeSrc(forceReload || !!iframeSrc.value) + } } function onReady() { loaded.value = true + clearLoadWatchdog() emit('ready') } @@ -145,7 +224,7 @@ function onMessage(ev: MessageEvent) { } function reload() { - prepareAndLoad() + prepareAndLoad(true) } function enterFullscreen() { @@ -157,11 +236,12 @@ function enterFullscreen() { onMounted(() => { window.addEventListener('message', onMessage) - prepareAndLoad() + prepareAndLoad(false) }) onBeforeUnmount(() => { window.removeEventListener('message', onMessage) + clearLoadWatchdog() }) defineExpose({ reload, enterFullscreen }) @@ -216,6 +296,7 @@ defineExpose({ reload, enterFullscreen }) color: rgba(232, 220, 255, 0.92); font-size: 13px; backdrop-filter: blur(10px); + pointer-events: none; } .workspace-3d-mask .muted { color: rgba(var(--mg-accent-rgb), 0.7); font-size: 12px; } .workspace-3d-mask .el-icon { color: var(--mg-accent); filter: drop-shadow(0 0 10px rgba(var(--mg-accent-rgb), 0.6)); } diff --git a/frontends/apps/simple-platform-vue/src/components/map-editor/EditPropertyPanel.vue b/frontends/apps/simple-platform-vue/src/components/map-editor/EditPropertyPanel.vue index 6a0ab98..5c62f3b 100644 --- a/frontends/apps/simple-platform-vue/src/components/map-editor/EditPropertyPanel.vue +++ b/frontends/apps/simple-platform-vue/src/components/map-editor/EditPropertyPanel.vue @@ -1060,6 +1060,43 @@ function onDelete() { .defaults-empty { padding: 40px 12px; } .defaults-form .el-button { margin-top: 8px; } .defaults-form :deep(.el-form-item) { margin-bottom: 10px; } -.layer-table { margin: 6px 0; } +/* 图层 Tab:白底数据块(深侧栏上的可读「岛」),各主题下表头/单元格均用深字 */ +.layer-table { + margin: 6px 0; + border-radius: 8px; + overflow: hidden; + background: #fff; + box-shadow: 0 0 0 1px rgba(124, 58, 237, 0.14); +} +.layer-table :deep(.el-table__inner-wrapper) { + background: #fff; +} +.layer-table :deep(th.el-table__cell) { + background: #f5f3ff !important; + color: #2d1b69 !important; + font-weight: 600; +} +.layer-table :deep(td.el-table__cell) { + background: #fff !important; + color: #1a0f3d !important; + font-weight: 500; +} +.layer-table :deep(.cell) { + color: #1a0f3d !important; +} +.layer-table :deep(tr:hover > td.el-table__cell) { + background: #ede9fe !important; +} .new-layer { margin-top: 8px; } +.new-layer :deep(.el-input__inner) { + color: #1a0f3d; + font-weight: 500; +} +.new-layer :deep(.el-input__inner::placeholder) { + color: #7a6b9a; +} +.new-layer :deep(.el-input-group__append .el-button) { + color: #5b21b6; + font-weight: 600; +} diff --git a/frontends/apps/simple-platform-vue/src/layouts/AppShell.vue b/frontends/apps/simple-platform-vue/src/layouts/AppShell.vue index df42307..b3a44d8 100644 --- a/frontends/apps/simple-platform-vue/src/layouts/AppShell.vue +++ b/frontends/apps/simple-platform-vue/src/layouts/AppShell.vue @@ -162,14 +162,12 @@ const ADMIN_MENU: MenuItem[] = [ { 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/vehicle-hub', label: '车辆运维', key: 'admin-vehicle-hub' }, { 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' }, diff --git a/frontends/apps/simple-platform-vue/src/mock/rbac.ts b/frontends/apps/simple-platform-vue/src/mock/rbac.ts index c929b3f..d895014 100644 --- a/frontends/apps/simple-platform-vue/src/mock/rbac.ts +++ b/frontends/apps/simple-platform-vue/src/mock/rbac.ts @@ -23,14 +23,12 @@ const PAGES: PageDef[] = [ { key: 'admin-config-system', label: '系统级配置', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-integrations', label: '外部系统对接', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-routing', label: '路径规划', group: '平台配置中心', scope: 'Platform' }, - { key: 'admin-config-vehicle', label: '车辆维护策略', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-vehicle-hub', label: '车辆运维', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-charge', label: '充电策略', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-task', label: '任务分配', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-traffic', label: '交通管制', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-auth', label: '权限与角色', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-device', label: '设备接入', group: '平台配置中心', scope: 'Platform' }, - { key: 'admin-config-fleet', label: '车队生命周期', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-scenario', label: '场景模板', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-location', label: '库位管理', group: '平台配置中心', scope: 'Platform' }, { key: 'admin-config-ops', label: '运营维护', group: '平台配置中心', scope: 'Platform' }, @@ -144,7 +142,11 @@ function delay(ms: number) { return new Promise((r) => setTimeout(r, ms)) } function sanitizePages(pages: string[]): string[] { if (pages.includes('*')) return ['*'] const valid = new Set(PAGES.map((p) => p.key)) - return [...new Set(pages.filter((p) => valid.has(p)))] + const legacy: Record = { + 'admin-config-vehicle': 'admin-vehicle-hub', + 'admin-config-fleet': 'admin-vehicle-hub' + } + return [...new Set(pages.map((p) => legacy[p] ?? p).filter((p) => valid.has(p)))] } export function mockRbacCatalog(): RbacCatalog { diff --git a/frontends/apps/simple-platform-vue/src/router/index.ts b/frontends/apps/simple-platform-vue/src/router/index.ts index 626c944..128edbc 100644 --- a/frontends/apps/simple-platform-vue/src/router/index.ts +++ b/frontends/apps/simple-platform-vue/src/router/index.ts @@ -34,15 +34,16 @@ const routes: RouteRecordRaw[] = [ { path: 'config/system', name: 'admin-config-system', component: () => import('@/views/admin/config/SystemConfigView.vue'), meta: { title: '系统级配置' } }, { path: 'config/integrations', name: 'admin-config-integrations', component: () => import('@/views/admin/config/ExternalIntegrationView.vue'), meta: { title: '外部系统对接' } }, { path: 'config/routing', name: 'admin-config-routing', component: () => import('@/views/admin/config/RoutingPolicyView.vue'), meta: { title: '路径规划策略' } }, - { path: 'config/vehicle', name: 'admin-config-vehicle', component: () => import('@/views/admin/config/VehicleMaintenanceView.vue'), meta: { title: '车辆维护策略' } }, { path: 'config/vehicle-hub', name: 'admin-vehicle-hub', component: () => import('@/views/shared/VehicleHubView.vue'), meta: { title: '车辆运维' } }, { path: 'vehicle-hub', redirect: '/admin/config/vehicle-hub' }, + // 旧独立配置页已合并进车辆运维 Tab,保留深链接兼容。 + { path: 'config/vehicle', redirect: { path: '/admin/config/vehicle-hub', query: { tab: 'maintenance' } } }, + { path: 'config/fleet', redirect: { path: '/admin/config/vehicle-hub', query: { tab: 'fleet' } } }, { path: 'config/charge', name: 'admin-config-charge', component: () => import('@/views/admin/config/ChargePolicyView.vue'), meta: { title: '充电逻辑' } }, { path: 'config/task', name: 'admin-config-task', component: () => import('@/views/admin/config/TaskAllocationView.vue'), meta: { title: '任务分配' } }, { path: 'config/traffic', name: 'admin-config-traffic', component: () => import('@/views/admin/config/TrafficRuleView.vue'), meta: { title: '交通管制' } }, { path: 'config/auth', name: 'admin-config-auth', component: () => import('@/views/admin/config/AuthRoleView.vue'), meta: { title: '权限角色' } }, { path: 'config/device', name: 'admin-config-device', component: () => import('@/views/admin/config/DeviceHubView.vue'), meta: { title: '设备接入' } }, - { path: 'config/fleet', name: 'admin-config-fleet', component: () => import('@/views/admin/config/FleetLifecycleView.vue'), meta: { title: '车队生命周期' } }, { path: 'config/scenario', name: 'admin-config-scenario', component: () => import('@/views/admin/config/ScenarioTemplateView.vue'), meta: { title: '场景模板' } }, { path: 'config/location', name: 'admin-config-location', component: () => import('@/views/admin/config/LocationView.vue'), meta: { title: '库位管理' } }, { path: 'config/ops', name: 'admin-config-ops', component: () => import('@/views/admin/config/OpsConfigView.vue'), meta: { title: '运营维护' } }, diff --git a/frontends/apps/simple-platform-vue/src/styles/theme.css b/frontends/apps/simple-platform-vue/src/styles/theme.css index 8586fec..4453fcb 100644 --- a/frontends/apps/simple-platform-vue/src/styles/theme.css +++ b/frontends/apps/simple-platform-vue/src/styles/theme.css @@ -1657,3 +1657,134 @@ a:hover { color: rgba(var(--mg-accent-rgb), 0.85); } border-color: #7c3aed !important; color: #5b21b6 !important; } + +/* ───────────────────────────────────────────────────────────────────────── + * fame-lavender × 地图编辑器深紫沉浸 UI(MapEditorView) + * 侧栏 / 属性面板 / 工具轨保持深紫底 + 浅字。全局浅紫规则会把 .mg-content 内 + * el-form 标签、el-tabs 等改成深紫字 (#4a3d6e),在深底上出现「深底深字」看不清。 + * ───────────────────────────────────────────────────────────────────────── */ +:root[data-theme="fame-lavender"] .mg-content .map-editor-page { + --el-text-color-primary: rgba(232, 215, 245, 0.95); + --el-text-color-regular: rgba(220, 200, 230, 0.88); + --el-text-color-secondary: rgba(200, 180, 220, 0.72); + color: rgba(232, 215, 245, 0.92); +} + +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-form-item__label { + color: rgba(220, 200, 230, 0.9) !important; + font-weight: 500; +} + +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs { + --el-text-color-primary: rgba(232, 215, 245, 0.95) !important; + --el-text-color-regular: rgba(220, 200, 240, 0.75) !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs__item, +:root[data-theme="fame-lavender"] .map-editor-page .el-tabs__item { + color: rgba(220, 200, 240, 0.72) !important; + font-weight: 500; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs__item:hover, +:root[data-theme="fame-lavender"] .map-editor-page .el-tabs__item:hover { + color: rgba(240, 225, 255, 0.95) !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs__item.is-active, +:root[data-theme="fame-lavender"] .map-editor-page .el-tabs__item.is-active { + color: #ffffff !important; + font-weight: 600; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs__nav-wrap::after { + background-color: rgba(255, 255, 255, 0.1) !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-tabs__active-bar { + background: linear-gradient(90deg, rgba(170, 110, 250, 1) 0%, rgba(255, 110, 220, 1) 100%) !important; +} + +/* 图层 Tab:白底数据岛 + 深紫字(与属性面板输入框一致,避免白底叠浅字) */ +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table { + --el-table-bg-color: #ffffff; + --el-table-tr-bg-color: #ffffff; + --el-table-header-bg-color: #f5f3ff; + --el-table-text-color: #1a0f3d; + --el-table-header-text-color: #2d1b69; + --el-table-row-hover-bg-color: #ede9fe; + --el-table-border-color: #e0d4f5; + --el-fill-color-blank: #ffffff; + --el-fill-color-light: #faf7fd; + color: #1a0f3d !important; + background: #ffffff !important; + border-radius: 8px; + overflow: hidden; + box-shadow: 0 0 0 1px rgba(124, 58, 237, 0.14); +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table tr, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table .el-table__inner-wrapper { + background: #ffffff !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table th.el-table__cell { + background: #f5f3ff !important; + color: #2d1b69 !important; + font-weight: 600 !important; + border-bottom-color: #e0d4f5 !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table td.el-table__cell { + background: #ffffff !important; + color: #1a0f3d !important; + font-weight: 500 !important; + border-bottom-color: #f0eaf6 !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table .cell { + color: #1a0f3d !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table.el-table--striped .el-table__body tr:nth-child(2n) td.el-table__cell { + background: #faf7fd !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .layer-table tr:hover > td.el-table__cell { + background: #ede9fe !important; +} + +/* 新建图层行:白底深字 + 占位符可读 */ +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input__inner { + color: #1a0f3d !important; + font-weight: 500; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input__inner::placeholder { + color: #7a6b9a !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input-group__append .el-button { + background: #f5f3ff !important; + border-color: #ddd6fe !important; + color: #5b21b6 !important; + font-weight: 600 !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .new-layer .el-input-group__append .el-button:hover { + background: #ede9fe !important; + border-color: #a78bfa !important; + color: #5b21b6 !important; +} + +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .el-checkbox__label { + color: rgba(220, 200, 230, 0.88) !important; +} + +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .prop-card-flag, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .prop-card-flag-text { + color: rgba(200, 220, 255, 0.88) !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .prop-card-flag.is-synced, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .prop-card-flag.is-synced .prop-card-flag-text { + color: rgba(220, 255, 230, 0.98) !important; +} + +/* 属性面板内输入框仍用白底深字(与组件 scoped 设计一致),仅修正标签/Tab 等说明文字 */ +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .el-input__wrapper, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .el-textarea__inner, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .el-select .el-input__wrapper { + background: #ffffff !important; + box-shadow: 0 0 0 1px rgba(170, 110, 250, 0.28) inset !important; +} +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .el-input__inner, +:root[data-theme="fame-lavender"] .mg-content .map-editor-page .edit-property-panel .el-textarea__inner { + color: #1a0f3d !important; +} diff --git a/frontends/apps/simple-platform-vue/src/views/admin/MapMonitorView.vue b/frontends/apps/simple-platform-vue/src/views/admin/MapMonitorView.vue index 31cb674..b5e1834 100644 --- a/frontends/apps/simple-platform-vue/src/views/admin/MapMonitorView.vue +++ b/frontends/apps/simple-platform-vue/src/views/admin/MapMonitorView.vue @@ -23,7 +23,8 @@ :scope="auth.scope ?? 'Platform'" :token="auth.token ?? ''" :read-only="!!readOnly" - :embed-ui="true" + :canvas-only="true" + :hide-toolbar="true" @pick="onPick" @select="onSelect" @ready="onWorkspaceReady" diff --git a/frontends/apps/simple-platform-vue/src/views/shared/VehicleHubView.vue b/frontends/apps/simple-platform-vue/src/views/shared/VehicleHubView.vue index 6ba1f6c..19de7ce 100644 --- a/frontends/apps/simple-platform-vue/src/views/shared/VehicleHubView.vue +++ b/frontends/apps/simple-platform-vue/src/views/shared/VehicleHubView.vue @@ -1,85 +1,106 @@