diff --git a/MiGu.Server/wwwroot/assets/AnnotationView-W73nG5X1.js b/MiGu.Server/wwwroot/assets/AnnotationView-DixiuHnc.js similarity index 98% rename from MiGu.Server/wwwroot/assets/AnnotationView-W73nG5X1.js rename to MiGu.Server/wwwroot/assets/AnnotationView-DixiuHnc.js index 1e06849..a618e66 100644 --- a/MiGu.Server/wwwroot/assets/AnnotationView-W73nG5X1.js +++ b/MiGu.Server/wwwroot/assets/AnnotationView-DixiuHnc.js @@ -1 +1 @@ -import{aI as S,bv as N,aC as f,bJ as a,t as B,b9 as p,aH as e,N as z,bL as O,O as T,R as A,a4 as M,aE as U,ai as D,bj as F,Z as I,r as L,bt as b,aG as d,H as G,aa as H,ab as j,ad as q,bq as J,aB as c,bg as R,bh as X,X as g}from"./index-368apsQG.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 Z={style:{display:"flex","align-items":"center",gap:"8px"}},pe=S({__name:"AnnotationView",setup($){const s=N(),l=R({title:"",target:"",level:"info",content:""}),m=X([{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=q,_=A,i=T,V=I,y=M,E=L,h=z,x=G,n=j,k=H,C=B;return p(),f(C,{shadow:"never"},{header:a(()=>[c("div",Z,[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]=O(()=>{},["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(),U(D,null,F(["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(J(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{aI as S,bv as N,aC as f,bJ as a,t as B,b9 as p,aH as e,N as z,bL as O,O as T,R as A,a4 as M,aE as U,ai as D,bj as F,Z as I,r as L,bt as b,aG as d,H as G,aa as H,ab as j,ad as q,bq as J,aB as c,bg as R,bh as X,X as g}from"./index-Dg4NaXsE.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 Z={style:{display:"flex","align-items":"center",gap:"8px"}},pe=S({__name:"AnnotationView",setup($){const s=N(),l=R({title:"",target:"",level:"info",content:""}),m=X([{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=q,_=A,i=T,V=I,y=M,E=L,h=z,x=G,n=j,k=H,C=B;return p(),f(C,{shadow:"never"},{header:a(()=>[c("div",Z,[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]=O(()=>{},["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(),U(D,null,F(["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(J(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-BqTC0xJK.js b/MiGu.Server/wwwroot/assets/AppShell-CAX-HJ2b.js similarity index 99% rename from MiGu.Server/wwwroot/assets/AppShell-BqTC0xJK.js rename to MiGu.Server/wwwroot/assets/AppShell-CAX-HJ2b.js index bafa4fb..5c35eef 100644 --- a/MiGu.Server/wwwroot/assets/AppShell-BqTC0xJK.js +++ b/MiGu.Server/wwwroot/assets/AppShell-CAX-HJ2b.js @@ -1 +1 @@ -import{aI as A,bv as j,bx as G,b9 as o,aC as u,bJ as e,aH as t,a0 as me,aG as m,ax as f,a1 as ue,X as pe,by as q,aB as a,b4 as F,bq as i,bt as s,Q as H,ar as J,K,aE as y,ai as M,bj as N,J as Q,b3 as R,as as _e,aD as T,I as X,ak as Y,aF as be,A as fe,bw as he,bl as ge,m as ve,V as ke,a7 as ye,W as we,bm as D,P as Ee,aR as Ce,aN as xe,p as Me,q as Se,n as Ie,U as Pe,M as Te,aT as $e,a$ as W,br as De,b5 as O,bo as Ne,b0 as Re,bC as Ae,be as ze}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";import{_ as Be}from"./FRLD-logo-white-no_title-BE78iS6n.js";/* empty css */const Le="/FRLD-logo-white.png",Ue=A({__name:"ScopeSwitcher",setup(z){const r=j(),w=G(),l=f(()=>r.scope??"Platform");let c=!1;async function v(_){if(!c){c=!0;try{await E(_)}finally{c=!1}}}async function E(_){try{await r.switchScope(_),w.push(_==="Platform"?"/admin/map-monitor":"/monitor/map")}catch(b){pe.error(b?.message??`切换到 ${_} 失败`)}}return(_,b)=>{const C=me,S=ue;return o(),u(S,{"model-value":l.value,size:"small",onChange:v},{default:e(()=>[t(C,{value:"Platform"},{default:e(()=>[...b[0]||(b[0]=[m("管理员",-1)])]),_:1}),t(C,{value:"RCSMonitor"},{default:e(()=>[...b[1]||(b[1]=[m("运营",-1)])]),_:1})]),_:1},8,["model-value"])}}}),Ve=["title"],Fe={class:"theme-label"},We={class:"option-text"},Oe={class:"option-name"},je={class:"option-desc"},Ge=A({__name:"ThemeSwitcher",setup(z){const r=q(),w=f(()=>({background:`linear-gradient(135deg, ${r.activeTheme.preview} 0%, ${r.activeTheme.previewAccent} 100%)`}));function l(v){const E=r.getMergedTheme(v);return{background:`linear-gradient(135deg, ${E.preview} 0%, ${E.previewAccent} 100%)`}}function c(v){r.setThemeId(v)}return(v,E)=>{const _=H,b=Q,C=K,S=X;return o(),u(S,{trigger:"click",onCommand:c},{dropdown:e(()=>[t(C,{class:"theme-menu"},{default:e(()=>[(o(!0),y(M,null,N(s(r).availableThemes,h=>(o(),u(b,{key:h.id,command:h.id,class:R({"is-active":h.id===s(r).themeId})},{default:e(()=>[a("span",{class:"option-swatch",style:F(l(h))},null,4),a("span",We,[a("span",Oe,i(h.name),1),a("span",je,i(h.description),1)]),h.id===s(r).themeId?(o(),u(_,{key:0,class:"check"},{default:e(()=>[t(s(_e))]),_:1})):T("",!0)]),_:2},1032,["command","class"]))),128))]),_:1})]),default:e(()=>[a("button",{class:"theme-trigger",type:"button",title:`当前主题:${s(r).activeTheme.name}`},[a("span",{class:"swatch",style:F(w.value)},null,4),a("span",Fe,i(s(r).activeTheme.name),1),t(_,{class:"caret"},{default:e(()=>[t(s(J))]),_:1})],8,Ve)]),_:1})}}}),qe=Y(Ge,[["__scopeId","data-v-28ea4aeb"]]),He={class:"app-shell"},Je={class:"aside-footer"},Ke={key:0},Qe={class:"header-left"},Xe={class:"header-right"},Ye={class:"user-link"},Ze={class:"user-name"},ea=A({__name:"AppShell",setup(z){const r=he(),w=G(),l=j(),c=q(),v=f(()=>"localhost:8223".split(":")[1]??"8223"),E=f(()=>"/api"),_=f(()=>(l.user?.displayName??l.user?.username??"?").slice(0,1).toUpperCase()),b=f(()=>l.scope==="Platform"?"管理员 (Platform)":"运营 (RCSMonitor)"),C=f(()=>{switch(l.runMode){case"WebOnly":return"Web-Only";case"WebEnabled":return"Web + Desktop";case"Detached":return"SimpleLite 未连接";default:return String(l.runMode??"Unknown")}}),S=[{path:"/admin/dashboard",label:"总览",icon:$e,key:"admin-dashboard"},{path:"/admin/map-monitor",label:"地图监控",icon:W,key:"admin-map-monitor"},{path:"/admin/design",label:"设计与编排",icon:De,children:[{path:"/admin/maps",label:"地图管理",key:"admin-maps"},{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:O,key:"admin-playback"},{path:"/admin/config",label:"平台配置中心",icon:Ne,children:[{path:"/admin/config/system",label:"系统级配置",key:"admin-config-system"},{path:"/admin/config/integrations",label:"外部系统对接",key:"admin-config-integrations"},{path:"/admin/config/routing",label:"路径规划",key:"admin-config-routing"},{path:"/admin/config/vehicle-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"}]}],h=[{path:"/monitor/dashboard",label:"运营总览",icon:Re,key:"monitor-dashboard"},{path:"/monitor/vehicle-hub",label:"车辆运维",icon:Ae,key:"monitor-vehicle-hub"},{path:"/monitor/map",label:"地图监控",icon:W,key:"monitor-map"},{path:"/monitor/ops",label:"运维操作",icon:ze,key:"monitor-ops"},{path:"/monitor/notes",label:"运营备注",icon:O,key:"monitor-notes"}];function Z(g){const n=[];for(const d of g)if(d.children){const x=d.children.filter(k=>!k.key||l.hasPage(k.key));x.length&&n.push({...d,children:x})}else(!d.key||l.hasPage(d.key))&&n.push(d);return n}const B=f(()=>Z(l.scope==="Platform"?S:h)),ee=f(()=>{const g=r.path,n=[],d=k=>{k.forEach(I=>{n.push(I),I.children&&d(I.children)})};return d(B.value),n.find(k=>k.path===g)?.path??g}),L=f(()=>r.meta.title??"");function ae(g){g==="logout"?(l.logout(),w.push("/login")):g==="status"?w.push("/status"):g==="wizard"&&w.push("/wizard")}return(g,n)=>{const d=H,x=we,k=ye,I=ke,te=ve,U=Se,ne=Me,oe=Ie,$=Q,se=K,le=X,ie=Ee,re=ge("router-view"),ce=Pe,de=Te,V=fe;return o(),y("div",He,[n[9]||(n[9]=be('
',1)),t(V,{class:"app-container"},{default:e(()=>[t(te,{width:s(c).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:R(["logo",{collapsed:s(c).sidebarCollapsed}])},[s(c).sidebarCollapsed?(o(),y(M,{key:0},[n[1]||(n[1]=a("img",{src:Be,alt:"FRLD",class:"logo-img-small"},null,-1)),n[2]||(n[2]=a("span",{class:"logo-abbr"},"迷毂",-1))],64)):(o(),y(M,{key:1},[n[3]||(n[3]=a("img",{src:Le,alt:"FRLD",class:"logo-img-full"},null,-1)),n[4]||(n[4]=a("div",{class:"logo-titles"},[a("span",{class:"logo-title-zh"},"迷 毂 · 智能调度平台"),a("span",{class:"logo-title-en"},[a("b",null,"M"),m("i "),a("b",null,"G"),m("u · "),a("b",null,"I"),m("ntelligent "),a("b",null,"D"),m("ispatch "),a("b",null,"P"),m("latform ")])],-1))],64))],2),t(I,{"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(M,null,N(B.value,p=>(o(),y(M,{key:p.path},[p.children?(o(),u(k,{key:0,index:p.path},{title:e(()=>[t(d,null,{default:e(()=>[(o(),u(D(p.icon)))]),_:2},1024),a("span",null,i(p.label),1)]),default:e(()=>[(o(!0),y(M,null,N(p.children,P=>(o(),u(x,{key:P.path,index:P.path},{default:e(()=>[a("span",null,i(P.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(o(),u(x,{key:1,index:p.path},{title:e(()=>[m(i(p.label),1)]),default:e(()=>[t(d,null,{default:e(()=>[(o(),u(D(p.icon)))]),_:2},1024)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse"]),a("div",Je,[n[5]||(n[5]=a("span",{class:"aside-footer-badge"},"v1.6",-1)),s(c).sidebarCollapsed?T("",!0):(o(),y("span",Ke,i(s(c).activeTheme.name)+" · "+i(s(c).activeTheme.preview),1))])]),_:1},8,["width"]),t(V,{class:"container-right"},{default:e(()=>[t(ie,{class:"header"},{default:e(()=>[a("div",Qe,[a("button",{class:"icon-btn",onClick:n[0]||(n[0]=p=>s(c).toggleSidebar()),title:"切换侧栏"},[t(d,{size:"18"},{default:e(()=>[s(c).sidebarCollapsed?(o(),u(s(xe),{key:1})):(o(),u(s(Ce),{key:0}))]),_:1})]),t(ne,{separator:"/"},{default:e(()=>[t(U,null,{default:e(()=>[m(i(b.value),1)]),_:1}),L.value?(o(),u(U,{key:0},{default:e(()=>[m(i(L.value),1)]),_:1})):T("",!0)]),_:1})]),a("div",Xe,[t(qe),t(Ue),a("span",{class:R(["runmode-tag",s(l).runMode])},i(C.value),3),t(le,{trigger:"click",onCommand:ae},{dropdown:e(()=>[t(se,null,{default:e(()=>[s(l).scope==="Platform"?(o(),u($,{key:0,command:"wizard"},{default:e(()=>[...n[6]||(n[6]=[m("配置向导",-1)])]),_:1})):T("",!0),t($,{command:"status"},{default:e(()=>[...n[7]||(n[7]=[m("服务状态",-1)])]),_:1}),t($,{command:"logout",divided:""},{default:e(()=>[...n[8]||(n[8]=[m("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Ye,[t(oe,{size:"small"},{default:e(()=>[m(i(_.value),1)]),_:1}),a("span",Ze,i(s(l).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:p,route:P})=>[p?(o(),u(D(p),{key:P.fullPath,class:"route-page"})):T("",!0)]),_:1})]),_:1}),t(de,{class:"footer"},{default:e(()=>[a("span",null,i(b.value)+" · webVRender :"+i(v.value)+" · API "+i(E.value),1)]),_:1})]),_:1})]),_:1})])}}}),ma=Y(ea,[["__scopeId","data-v-94b7b35c"]]);export{ma as default}; +import{aI as A,bv as j,bx as G,b9 as o,aC as u,bJ as e,aH as t,a0 as me,aG as m,ax as f,a1 as ue,X as pe,by as q,aB as a,b4 as F,bq as i,bt as s,Q as H,ar as J,K,aE as y,ai as M,bj as N,J as Q,b3 as R,as as _e,aD as T,I as X,ak as Y,aF as be,A as fe,bw as he,bl as ge,m as ve,V as ke,a7 as ye,W as we,bm as D,P as Ee,aR as Ce,aN as xe,p as Me,q as Se,n as Ie,U as Pe,M as Te,aT as $e,a$ as W,br as De,b5 as O,bo as Ne,b0 as Re,bC as Ae,be as ze}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";import{_ as Be}from"./FRLD-logo-white-no_title-BE78iS6n.js";/* empty css */const Le="/FRLD-logo-white.png",Ue=A({__name:"ScopeSwitcher",setup(z){const r=j(),w=G(),l=f(()=>r.scope??"Platform");let c=!1;async function v(_){if(!c){c=!0;try{await E(_)}finally{c=!1}}}async function E(_){try{await r.switchScope(_),w.push(_==="Platform"?"/admin/map-monitor":"/monitor/map")}catch(b){pe.error(b?.message??`切换到 ${_} 失败`)}}return(_,b)=>{const C=me,S=ue;return o(),u(S,{"model-value":l.value,size:"small",onChange:v},{default:e(()=>[t(C,{value:"Platform"},{default:e(()=>[...b[0]||(b[0]=[m("管理员",-1)])]),_:1}),t(C,{value:"RCSMonitor"},{default:e(()=>[...b[1]||(b[1]=[m("运营",-1)])]),_:1})]),_:1},8,["model-value"])}}}),Ve=["title"],Fe={class:"theme-label"},We={class:"option-text"},Oe={class:"option-name"},je={class:"option-desc"},Ge=A({__name:"ThemeSwitcher",setup(z){const r=q(),w=f(()=>({background:`linear-gradient(135deg, ${r.activeTheme.preview} 0%, ${r.activeTheme.previewAccent} 100%)`}));function l(v){const E=r.getMergedTheme(v);return{background:`linear-gradient(135deg, ${E.preview} 0%, ${E.previewAccent} 100%)`}}function c(v){r.setThemeId(v)}return(v,E)=>{const _=H,b=Q,C=K,S=X;return o(),u(S,{trigger:"click",onCommand:c},{dropdown:e(()=>[t(C,{class:"theme-menu"},{default:e(()=>[(o(!0),y(M,null,N(s(r).availableThemes,h=>(o(),u(b,{key:h.id,command:h.id,class:R({"is-active":h.id===s(r).themeId})},{default:e(()=>[a("span",{class:"option-swatch",style:F(l(h))},null,4),a("span",We,[a("span",Oe,i(h.name),1),a("span",je,i(h.description),1)]),h.id===s(r).themeId?(o(),u(_,{key:0,class:"check"},{default:e(()=>[t(s(_e))]),_:1})):T("",!0)]),_:2},1032,["command","class"]))),128))]),_:1})]),default:e(()=>[a("button",{class:"theme-trigger",type:"button",title:`当前主题:${s(r).activeTheme.name}`},[a("span",{class:"swatch",style:F(w.value)},null,4),a("span",Fe,i(s(r).activeTheme.name),1),t(_,{class:"caret"},{default:e(()=>[t(s(J))]),_:1})],8,Ve)]),_:1})}}}),qe=Y(Ge,[["__scopeId","data-v-28ea4aeb"]]),He={class:"app-shell"},Je={class:"aside-footer"},Ke={key:0},Qe={class:"header-left"},Xe={class:"header-right"},Ye={class:"user-link"},Ze={class:"user-name"},ea=A({__name:"AppShell",setup(z){const r=he(),w=G(),l=j(),c=q(),v=f(()=>"localhost:8223".split(":")[1]??"8223"),E=f(()=>"/api"),_=f(()=>(l.user?.displayName??l.user?.username??"?").slice(0,1).toUpperCase()),b=f(()=>l.scope==="Platform"?"管理员 (Platform)":"运营 (RCSMonitor)"),C=f(()=>{switch(l.runMode){case"WebOnly":return"Web-Only";case"WebEnabled":return"Web + Desktop";case"Detached":return"SimpleLite 未连接";default:return String(l.runMode??"Unknown")}}),S=[{path:"/admin/dashboard",label:"总览",icon:$e,key:"admin-dashboard"},{path:"/admin/map-monitor",label:"地图监控",icon:W,key:"admin-map-monitor"},{path:"/admin/design",label:"设计与编排",icon:De,children:[{path:"/admin/maps",label:"地图管理",key:"admin-maps"},{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:O,key:"admin-playback"},{path:"/admin/config",label:"平台配置中心",icon:Ne,children:[{path:"/admin/config/system",label:"系统级配置",key:"admin-config-system"},{path:"/admin/config/integrations",label:"外部系统对接",key:"admin-config-integrations"},{path:"/admin/config/routing",label:"路径规划",key:"admin-config-routing"},{path:"/admin/config/vehicle-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"}]}],h=[{path:"/monitor/dashboard",label:"运营总览",icon:Re,key:"monitor-dashboard"},{path:"/monitor/vehicle-hub",label:"车辆运维",icon:Ae,key:"monitor-vehicle-hub"},{path:"/monitor/map",label:"地图监控",icon:W,key:"monitor-map"},{path:"/monitor/ops",label:"运维操作",icon:ze,key:"monitor-ops"},{path:"/monitor/notes",label:"运营备注",icon:O,key:"monitor-notes"}];function Z(g){const n=[];for(const d of g)if(d.children){const x=d.children.filter(k=>!k.key||l.hasPage(k.key));x.length&&n.push({...d,children:x})}else(!d.key||l.hasPage(d.key))&&n.push(d);return n}const B=f(()=>Z(l.scope==="Platform"?S:h)),ee=f(()=>{const g=r.path,n=[],d=k=>{k.forEach(I=>{n.push(I),I.children&&d(I.children)})};return d(B.value),n.find(k=>k.path===g)?.path??g}),L=f(()=>r.meta.title??"");function ae(g){g==="logout"?(l.logout(),w.push("/login")):g==="status"?w.push("/status"):g==="wizard"&&w.push("/wizard")}return(g,n)=>{const d=H,x=we,k=ye,I=ke,te=ve,U=Se,ne=Me,oe=Ie,$=Q,se=K,le=X,ie=Ee,re=ge("router-view"),ce=Pe,de=Te,V=fe;return o(),y("div",He,[n[9]||(n[9]=be('',1)),t(V,{class:"app-container"},{default:e(()=>[t(te,{width:s(c).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:R(["logo",{collapsed:s(c).sidebarCollapsed}])},[s(c).sidebarCollapsed?(o(),y(M,{key:0},[n[1]||(n[1]=a("img",{src:Be,alt:"FRLD",class:"logo-img-small"},null,-1)),n[2]||(n[2]=a("span",{class:"logo-abbr"},"迷毂",-1))],64)):(o(),y(M,{key:1},[n[3]||(n[3]=a("img",{src:Le,alt:"FRLD",class:"logo-img-full"},null,-1)),n[4]||(n[4]=a("div",{class:"logo-titles"},[a("span",{class:"logo-title-zh"},"迷 毂 · 智能调度平台"),a("span",{class:"logo-title-en"},[a("b",null,"M"),m("i "),a("b",null,"G"),m("u · "),a("b",null,"I"),m("ntelligent "),a("b",null,"D"),m("ispatch "),a("b",null,"P"),m("latform ")])],-1))],64))],2),t(I,{"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(M,null,N(B.value,p=>(o(),y(M,{key:p.path},[p.children?(o(),u(k,{key:0,index:p.path},{title:e(()=>[t(d,null,{default:e(()=>[(o(),u(D(p.icon)))]),_:2},1024),a("span",null,i(p.label),1)]),default:e(()=>[(o(!0),y(M,null,N(p.children,P=>(o(),u(x,{key:P.path,index:P.path},{default:e(()=>[a("span",null,i(P.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(o(),u(x,{key:1,index:p.path},{title:e(()=>[m(i(p.label),1)]),default:e(()=>[t(d,null,{default:e(()=>[(o(),u(D(p.icon)))]),_:2},1024)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse"]),a("div",Je,[n[5]||(n[5]=a("span",{class:"aside-footer-badge"},"v1.6",-1)),s(c).sidebarCollapsed?T("",!0):(o(),y("span",Ke,i(s(c).activeTheme.name)+" · "+i(s(c).activeTheme.preview),1))])]),_:1},8,["width"]),t(V,{class:"container-right"},{default:e(()=>[t(ie,{class:"header"},{default:e(()=>[a("div",Qe,[a("button",{class:"icon-btn",onClick:n[0]||(n[0]=p=>s(c).toggleSidebar()),title:"切换侧栏"},[t(d,{size:"18"},{default:e(()=>[s(c).sidebarCollapsed?(o(),u(s(xe),{key:1})):(o(),u(s(Ce),{key:0}))]),_:1})]),t(ne,{separator:"/"},{default:e(()=>[t(U,null,{default:e(()=>[m(i(b.value),1)]),_:1}),L.value?(o(),u(U,{key:0},{default:e(()=>[m(i(L.value),1)]),_:1})):T("",!0)]),_:1})]),a("div",Xe,[t(qe),t(Ue),a("span",{class:R(["runmode-tag",s(l).runMode])},i(C.value),3),t(le,{trigger:"click",onCommand:ae},{dropdown:e(()=>[t(se,null,{default:e(()=>[s(l).scope==="Platform"?(o(),u($,{key:0,command:"wizard"},{default:e(()=>[...n[6]||(n[6]=[m("配置向导",-1)])]),_:1})):T("",!0),t($,{command:"status"},{default:e(()=>[...n[7]||(n[7]=[m("服务状态",-1)])]),_:1}),t($,{command:"logout",divided:""},{default:e(()=>[...n[8]||(n[8]=[m("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Ye,[t(oe,{size:"small"},{default:e(()=>[m(i(_.value),1)]),_:1}),a("span",Ze,i(s(l).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:p,route:P})=>[p?(o(),u(D(p),{key:P.fullPath,class:"route-page"})):T("",!0)]),_:1})]),_:1}),t(de,{class:"footer"},{default:e(()=>[a("span",null,i(b.value)+" · webVRender :"+i(v.value)+" · API "+i(E.value),1)]),_:1})]),_:1})]),_:1})])}}}),ma=Y(ea,[["__scopeId","data-v-94b7b35c"]]);export{ma as default}; diff --git a/MiGu.Server/wwwroot/assets/AuthRoleView-94zjdzbD.js b/MiGu.Server/wwwroot/assets/AuthRoleView-BW7bVuKX.js similarity index 99% rename from MiGu.Server/wwwroot/assets/AuthRoleView-94zjdzbD.js rename to MiGu.Server/wwwroot/assets/AuthRoleView-BW7bVuKX.js index a94859f..8884267 100644 --- a/MiGu.Server/wwwroot/assets/AuthRoleView-94zjdzbD.js +++ b/MiGu.Server/wwwroot/assets/AuthRoleView-BW7bVuKX.js @@ -1 +1 @@ -import{aU as k,aI as Be,bv as Se,b7 as Te,aE as b,aH as t,bJ as s,ai as x,X as c,bh as f,bg as oe,t as De,G as Oe,b9 as u,ac as qe,a9 as Ae,aB as v,bq as g,r as Ge,bt as E,bc as ue,aG as i,bK as ie,aC as w,aa as Me,ab as je,bj as R,ad as Fe,aD as G,a8 as Le,aM as de,aW as He,aK as re,bA as Ke,bi as We,N as Je,O as Xe,R as Ye,a4 as Ze,Z as Qe,a2 as el,w as ll,H as al,v as tl,u as sl,L as nl,ax as J,Y as pe,ak as ol}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */async function ul(){const{data:d}=await k.get("/rbac/catalog");return d}async function il(){const{data:d}=await k.get("/rbac/roles");return d}async function dl(d){if(d.id){const{data:z}=await k.put(`/rbac/roles/${d.id}`,d);return z}const{data:V}=await k.post("/rbac/roles",d);return V}async function rl(d){await k.delete(`/rbac/roles/${d}`)}async function pl(){const{data:d}=await k.get("/rbac/users");return d}async function cl(d){const{data:V}=await k.post("/rbac/users",d);return V}async function ce(d,V){const{data:z}=await k.put(`/rbac/users/${d}`,V);return z}async function ml(d,V){await k.put(`/rbac/users/${d}/password`,{password:V})}async function fl(d){await k.delete(`/rbac/users/${d}`)}const vl={class:"rbac-header"},bl={class:"tab-toolbar"},gl={class:"toolbar-hint"},yl={key:0,class:"muted"},_l={class:"tab-toolbar"},wl={class:"toolbar-hint"},kl={key:1},Vl={key:0,class:"page-picker"},Cl={class:"page-group-head"},El={class:"page-group-title"},Ul={class:"page-group-actions"},$l={key:1,class:"wildcard-hint"},xl=Be({__name:"AuthRoleView",setup(d){const V=Se(),z=J(()=>V.user?.id??""),X=f("users"),B=f(!1),C=f(!1),M=f(null),S=f([]),j=f([]);function me(a){return S.value.find(e=>e.id===a)?.name??a}function A(a){return a==="*"?"通用":a==="Platform"?"管理端":a==="RCSMonitor"?"运营端":a}function fe(a){return a==="*"?"danger":a==="Platform"?"warning":"success"}async function N(){B.value=!0;try{const[a,e,o]=await Promise.all([ul(),il(),pl()]);M.value=a,S.value=e,j.value=o}catch(a){c.error(`加载失败:${$(a)}`)}finally{B.value=!1}}const h=f(!1),n=oe({id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0});function ve(){Object.assign(n,{id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0}),h.value=!0}function be(a){Object.assign(n,{id:a.id,username:a.username,displayName:a.displayName,password:"",roleIds:[...a.roleIds],enabled:a.enabled}),h.value=!0}async function ge(){C.value=!0;try{n.id?(await ce(n.id,{displayName:n.displayName,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已更新")):(await cl({username:n.username,displayName:n.displayName,password:n.password,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已创建")),h.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function ye(a,e){a._busy=!0;try{await ce(a.id,{enabled:e}),a.enabled=e,c.success(e?"已启用":"已停用")}catch(o){c.error($(o))}finally{a._busy=!1}}async function _e(a){try{await pe.confirm(`确定删除用户「${a.username}」?此操作不可恢复。`,"删除确认",{type:"warning"})}catch{return}try{await fl(a.id),c.success("用户已删除"),await N()}catch(e){c.error($(e))}}const T=f(!1),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 I=f(!1),p=oe({id:null,name:"",description:"",scope:"Platform"}),y=f([]),U=f(!1),F=f([]),L=f([]),Y=J(()=>(M.value?.pages??[]).filter(a=>p.scope==="*"||a.scope===p.scope)),Z=J(()=>{const a=new Map;for(const e of Y.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,F.value=[],L.value=[],I.value=!0}function Ce(a){Object.assign(p,{id:a.id,name:a.name,description:a.description,scope:a.scope}),U.value=a.pages.includes("*"),y.value=U.value?[]:[...a.pages],F.value=[...a.ops],L.value=a.widgetGrants.map(e=>({...e})),I.value=!0}function Ee(){const a=new Set(Y.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:F.value,widgetGrants:L.value}),c.success(p.id?"角色已更新":"角色已创建"),I.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function $e(a){try{await pe.confirm(`确定删除角色「${a.name}」?`,"删除确认",{type:"warning"})}catch{return}try{await rl(a.id),c.success("角色已删除"),await N()}catch(e){c.error($(e))}}function $(a){return a instanceof Error?a.message:String(a)}return Te(N),(a,e)=>{const o=Ge,m=je,q=Fe,H=Le,ee=Me,le=Ae,xe=qe,Ne=De,P=Ye,_=Xe,ae=Qe,te=Ze,K=Je,W=Oe,se=ll,he=el,Ie=al,Pe=sl,Re=tl,ze=nl,ne=Ke;return u(),b(x,null,[t(Ne,{shadow:"never",class:"rbac-card"},{header:s(()=>[v("div",vl,[e[19]||(e[19]=v("div",{class:"rbac-title-wrap"},[v("span",{class:"rbac-title"},"权限与角色管理"),v("span",{class:"rbac-desc"},"为角色分配可访问页面、操作与控件,并为用户指派角色(标准 RBAC)。")],-1)),t(o,{icon:E(We),loading:B.value,onClick:N},{default:s(()=>[...e[18]||(e[18]=[i("刷新",-1)])]),_:1},8,["icon","loading"])])]),default:s(()=>[t(xe,{modelValue:X.value,"onUpdate:modelValue":e[0]||(e[0]=l=>X.value=l),class:"rbac-tabs"},{default:s(()=>[t(le,{label:"用户管理",name:"users"},{default:s(()=>[v("div",bl,[v("span",gl,"共 "+g(j.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:j.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"用户名",prop:"username",width:"140"}),t(m,{label:"显示名",prop:"displayName",width:"150"}),t(m,{label:"角色","min-width":"200"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.roleIds,r=>(u(),w(q,{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(x,null,R(l.scopes,r=>(u(),w(q,{key:r,size:"small",type:"info",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(A(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,B.value]])]),_:1}),t(le,{label:"角色与页面权限",name:"roles"},{default:s(()=>[v("div",_l,[v("span",wl,"共 "+g(S.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:S.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(q,{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(q,{size:"small",type:fe(l.scope),effect:"plain"},{default:s(()=>[i(g(A(l.scope)),1)]),_:2},1032,["type"])]),_:1}),t(m,{label:"可访问页面",width:"130",align:"center"},{default:s(({row:l})=>[l.pages.includes("*")?(u(),w(q,{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,B.value]])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(W,{modelValue:h.value,"onUpdate:modelValue":e[7]||(e[7]=l=>h.value=l),title:n.id?"编辑用户":"新增用户",width:"480px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[6]||(e[6]=l=>h.value=!1)},{default:s(()=>[...e[29]||(e[29]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ge},{default:s(()=>[...e[30]||(e[30]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(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(x,null,R(S.value,l=>(u(),w(ae,{key:l.id,label:`${l.name}(${A(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:I.value,"onUpdate:modelValue":e[17]||(e[17]=l=>I.value=l),title:p.id?"编辑角色":"新增角色",width:"760px",top:"6vh","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[16]||(e[16]=l=>I.value=!1)},{default:s(()=>[...e[36]||(e[36]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:Ue},{default:s(()=>[...e[37]||(e[37]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"92px","label-position":"right"},{default:s(()=>[t(he,{gutter:12},{default:s(()=>[t(se,{span:12},{default:s(()=>[t(_,{label:"角色名称",required:""},{default:s(()=>[t(P,{modelValue:p.name,"onUpdate:modelValue":e[11]||(e[11]=l=>p.name=l),placeholder:"如:场景设计员"},null,8,["modelValue"])]),_:1})]),_:1}),t(se,{span:12},{default:s(()=>[t(_,{label:"归属域",required:""},{default:s(()=>[t(te,{modelValue:p.scope,"onUpdate:modelValue":e[12]||(e[12]=l=>p.scope=l),style:{width:"100%"},onChange:Ee},{default:s(()=>[(u(!0),b(x,null,R(M.value?.scopes??[],l=>(u(),w(ae,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),t(_,{label:"描述"},{default:s(()=>[t(P,{modelValue:p.description,"onUpdate:modelValue":e[13]||(e[13]=l=>p.description=l),placeholder:"角色用途说明"},null,8,["modelValue"])]),_:1}),t(Ie,{"content-position":"left"},{default:s(()=>[...e[33]||(e[33]=[i("可访问页面",-1)])]),_:1}),t(_,{label:"授权方式"},{default:s(()=>[t(H,{modelValue:U.value,"onUpdate:modelValue":e[14]||(e[14]=l=>U.value=l),"active-text":"该域全部页面(含未来新增)","inactive-text":"按页面精确勾选","inline-prompt":"",style:{"--el-switch-on-color":"var(--mg-primary, #6366f1)"}},null,8,["modelValue"])]),_:1}),U.value?(u(),b("div",$l,"已授予「"+g(A(p.scope))+"」下的全部页面(包括未来新增的页面)。",1)):(u(),b("div",Vl,[(u(!0),b(x,null,R(Z.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(x,null,R(l.pages,r=>(u(),w(Pe,{key:r.key,value:r.key,label:r.key},{default:s(()=>[i(g(r.label),1)]),_:2},1032,["value","label"]))),128))]),_:2},1032,["modelValue"])]))),128)),Z.value.length?G("",!0):(u(),w(ze,{key:0,description:"该域暂无可分配页面","image-size":60}))]))]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Jl=ol(xl,[["__scopeId","data-v-2392979d"]]);export{Jl as default}; +import{aU as k,aI as Be,bv as Se,b7 as Te,aE as b,aH as t,bJ as s,ai as x,X as c,bh as f,bg as oe,t as De,G as Oe,b9 as u,ac as qe,a9 as Ae,aB as v,bq as g,r as Ge,bt as E,bc as ue,aG as i,bK as ie,aC as w,aa as Me,ab as je,bj as R,ad as Fe,aD as G,a8 as Le,aM as de,aW as He,aK as re,bA as Ke,bi as We,N as Je,O as Xe,R as Ye,a4 as Ze,Z as Qe,a2 as el,w as ll,H as al,v as tl,u as sl,L as nl,ax as J,Y as pe,ak as ol}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */async function ul(){const{data:d}=await k.get("/rbac/catalog");return d}async function il(){const{data:d}=await k.get("/rbac/roles");return d}async function dl(d){if(d.id){const{data:z}=await k.put(`/rbac/roles/${d.id}`,d);return z}const{data:V}=await k.post("/rbac/roles",d);return V}async function rl(d){await k.delete(`/rbac/roles/${d}`)}async function pl(){const{data:d}=await k.get("/rbac/users");return d}async function cl(d){const{data:V}=await k.post("/rbac/users",d);return V}async function ce(d,V){const{data:z}=await k.put(`/rbac/users/${d}`,V);return z}async function ml(d,V){await k.put(`/rbac/users/${d}/password`,{password:V})}async function fl(d){await k.delete(`/rbac/users/${d}`)}const vl={class:"rbac-header"},bl={class:"tab-toolbar"},gl={class:"toolbar-hint"},yl={key:0,class:"muted"},_l={class:"tab-toolbar"},wl={class:"toolbar-hint"},kl={key:1},Vl={key:0,class:"page-picker"},Cl={class:"page-group-head"},El={class:"page-group-title"},Ul={class:"page-group-actions"},$l={key:1,class:"wildcard-hint"},xl=Be({__name:"AuthRoleView",setup(d){const V=Se(),z=J(()=>V.user?.id??""),X=f("users"),B=f(!1),C=f(!1),M=f(null),S=f([]),j=f([]);function me(a){return S.value.find(e=>e.id===a)?.name??a}function A(a){return a==="*"?"通用":a==="Platform"?"管理端":a==="RCSMonitor"?"运营端":a}function fe(a){return a==="*"?"danger":a==="Platform"?"warning":"success"}async function N(){B.value=!0;try{const[a,e,o]=await Promise.all([ul(),il(),pl()]);M.value=a,S.value=e,j.value=o}catch(a){c.error(`加载失败:${$(a)}`)}finally{B.value=!1}}const h=f(!1),n=oe({id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0});function ve(){Object.assign(n,{id:null,username:"",displayName:"",password:"",roleIds:[],enabled:!0}),h.value=!0}function be(a){Object.assign(n,{id:a.id,username:a.username,displayName:a.displayName,password:"",roleIds:[...a.roleIds],enabled:a.enabled}),h.value=!0}async function ge(){C.value=!0;try{n.id?(await ce(n.id,{displayName:n.displayName,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已更新")):(await cl({username:n.username,displayName:n.displayName,password:n.password,roleIds:n.roleIds,enabled:n.enabled}),c.success("用户已创建")),h.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function ye(a,e){a._busy=!0;try{await ce(a.id,{enabled:e}),a.enabled=e,c.success(e?"已启用":"已停用")}catch(o){c.error($(o))}finally{a._busy=!1}}async function _e(a){try{await pe.confirm(`确定删除用户「${a.username}」?此操作不可恢复。`,"删除确认",{type:"warning"})}catch{return}try{await fl(a.id),c.success("用户已删除"),await N()}catch(e){c.error($(e))}}const T=f(!1),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 I=f(!1),p=oe({id:null,name:"",description:"",scope:"Platform"}),y=f([]),U=f(!1),F=f([]),L=f([]),Y=J(()=>(M.value?.pages??[]).filter(a=>p.scope==="*"||a.scope===p.scope)),Z=J(()=>{const a=new Map;for(const e of Y.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,F.value=[],L.value=[],I.value=!0}function Ce(a){Object.assign(p,{id:a.id,name:a.name,description:a.description,scope:a.scope}),U.value=a.pages.includes("*"),y.value=U.value?[]:[...a.pages],F.value=[...a.ops],L.value=a.widgetGrants.map(e=>({...e})),I.value=!0}function Ee(){const a=new Set(Y.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:F.value,widgetGrants:L.value}),c.success(p.id?"角色已更新":"角色已创建"),I.value=!1,await N()}catch(a){c.error($(a))}finally{C.value=!1}}async function $e(a){try{await pe.confirm(`确定删除角色「${a.name}」?`,"删除确认",{type:"warning"})}catch{return}try{await rl(a.id),c.success("角色已删除"),await N()}catch(e){c.error($(e))}}function $(a){return a instanceof Error?a.message:String(a)}return Te(N),(a,e)=>{const o=Ge,m=je,q=Fe,H=Le,ee=Me,le=Ae,xe=qe,Ne=De,P=Ye,_=Xe,ae=Qe,te=Ze,K=Je,W=Oe,se=ll,he=el,Ie=al,Pe=sl,Re=tl,ze=nl,ne=Ke;return u(),b(x,null,[t(Ne,{shadow:"never",class:"rbac-card"},{header:s(()=>[v("div",vl,[e[19]||(e[19]=v("div",{class:"rbac-title-wrap"},[v("span",{class:"rbac-title"},"权限与角色管理"),v("span",{class:"rbac-desc"},"为角色分配可访问页面、操作与控件,并为用户指派角色(标准 RBAC)。")],-1)),t(o,{icon:E(We),loading:B.value,onClick:N},{default:s(()=>[...e[18]||(e[18]=[i("刷新",-1)])]),_:1},8,["icon","loading"])])]),default:s(()=>[t(xe,{modelValue:X.value,"onUpdate:modelValue":e[0]||(e[0]=l=>X.value=l),class:"rbac-tabs"},{default:s(()=>[t(le,{label:"用户管理",name:"users"},{default:s(()=>[v("div",bl,[v("span",gl,"共 "+g(j.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:j.value,size:"default",border:"",stripe:""},{default:s(()=>[t(m,{label:"用户名",prop:"username",width:"140"}),t(m,{label:"显示名",prop:"displayName",width:"150"}),t(m,{label:"角色","min-width":"200"},{default:s(({row:l})=>[(u(!0),b(x,null,R(l.roleIds,r=>(u(),w(q,{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(x,null,R(l.scopes,r=>(u(),w(q,{key:r,size:"small",type:"info",effect:"plain",class:"mg-tag"},{default:s(()=>[i(g(A(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,B.value]])]),_:1}),t(le,{label:"角色与页面权限",name:"roles"},{default:s(()=>[v("div",_l,[v("span",wl,"共 "+g(S.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:S.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(q,{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(q,{size:"small",type:fe(l.scope),effect:"plain"},{default:s(()=>[i(g(A(l.scope)),1)]),_:2},1032,["type"])]),_:1}),t(m,{label:"可访问页面",width:"130",align:"center"},{default:s(({row:l})=>[l.pages.includes("*")?(u(),w(q,{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,B.value]])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(W,{modelValue:h.value,"onUpdate:modelValue":e[7]||(e[7]=l=>h.value=l),title:n.id?"编辑用户":"新增用户",width:"480px","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[6]||(e[6]=l=>h.value=!1)},{default:s(()=>[...e[29]||(e[29]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:ge},{default:s(()=>[...e[30]||(e[30]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(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(x,null,R(S.value,l=>(u(),w(ae,{key:l.id,label:`${l.name}(${A(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:I.value,"onUpdate:modelValue":e[17]||(e[17]=l=>I.value=l),title:p.id?"编辑角色":"新增角色",width:"760px",top:"6vh","destroy-on-close":""},{footer:s(()=>[t(o,{onClick:e[16]||(e[16]=l=>I.value=!1)},{default:s(()=>[...e[36]||(e[36]=[i("取消",-1)])]),_:1}),t(o,{type:"primary",loading:C.value,onClick:Ue},{default:s(()=>[...e[37]||(e[37]=[i("保存",-1)])]),_:1},8,["loading"])]),default:s(()=>[t(K,{"label-width":"92px","label-position":"right"},{default:s(()=>[t(he,{gutter:12},{default:s(()=>[t(se,{span:12},{default:s(()=>[t(_,{label:"角色名称",required:""},{default:s(()=>[t(P,{modelValue:p.name,"onUpdate:modelValue":e[11]||(e[11]=l=>p.name=l),placeholder:"如:场景设计员"},null,8,["modelValue"])]),_:1})]),_:1}),t(se,{span:12},{default:s(()=>[t(_,{label:"归属域",required:""},{default:s(()=>[t(te,{modelValue:p.scope,"onUpdate:modelValue":e[12]||(e[12]=l=>p.scope=l),style:{width:"100%"},onChange:Ee},{default:s(()=>[(u(!0),b(x,null,R(M.value?.scopes??[],l=>(u(),w(ae,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),t(_,{label:"描述"},{default:s(()=>[t(P,{modelValue:p.description,"onUpdate:modelValue":e[13]||(e[13]=l=>p.description=l),placeholder:"角色用途说明"},null,8,["modelValue"])]),_:1}),t(Ie,{"content-position":"left"},{default:s(()=>[...e[33]||(e[33]=[i("可访问页面",-1)])]),_:1}),t(_,{label:"授权方式"},{default:s(()=>[t(H,{modelValue:U.value,"onUpdate:modelValue":e[14]||(e[14]=l=>U.value=l),"active-text":"该域全部页面(含未来新增)","inactive-text":"按页面精确勾选","inline-prompt":"",style:{"--el-switch-on-color":"var(--mg-primary, #6366f1)"}},null,8,["modelValue"])]),_:1}),U.value?(u(),b("div",$l,"已授予「"+g(A(p.scope))+"」下的全部页面(包括未来新增的页面)。",1)):(u(),b("div",Vl,[(u(!0),b(x,null,R(Z.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(x,null,R(l.pages,r=>(u(),w(Pe,{key:r.key,value:r.key,label:r.key},{default:s(()=>[i(g(r.label),1)]),_:2},1032,["value","label"]))),128))]),_:2},1032,["modelValue"])]))),128)),Z.value.length?G("",!0):(u(),w(ze,{key:0,description:"该域暂无可分配页面","image-size":60}))]))]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Jl=ol(xl,[["__scopeId","data-v-2392979d"]]);export{Jl as default}; diff --git a/MiGu.Server/wwwroot/assets/CarPanelView-DpfkXBoo.js b/MiGu.Server/wwwroot/assets/CarPanelView-DfcvV1b9.js similarity index 97% rename from MiGu.Server/wwwroot/assets/CarPanelView-DpfkXBoo.js rename to MiGu.Server/wwwroot/assets/CarPanelView-DfcvV1b9.js index 84e76f1..b33c7b7 100644 --- a/MiGu.Server/wwwroot/assets/CarPanelView-DpfkXBoo.js +++ b/MiGu.Server/wwwroot/assets/CarPanelView-DfcvV1b9.js @@ -1 +1 @@ -import{aI as H,b9 as y,aC as $,N as ae,bJ as l,aH as a,a2 as se,w as oe,O as ne,S as re,a8 as ie,z as J,aB as r,bq as w,R as de,r as Q,aG as f,aD as P,ax as X,bh as N,ak as W,b7 as Y,bK as ue,bA as ce,aE as j,t as pe,ad as me,ai as q,bj as G,x as fe,Q as ye,bt as ve,bi as _e,bg as K,X as V,Y as be,y as ge,L as ke,ac as Ce,a9 as Ee}from"./index-368apsQG.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-CKQWtKhJ.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 L}from"./reflection-C0K7EJ_N.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-CoKaGT-a.js";import"./useProjectionStream-C94Y5UgX.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=X(()=>x.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const I=N(null);function g(){I.value?.click()}function M(n){const t=n.target,v=t.files?.[0];v&&(m({modelPath:v.name}),t.value="")}function T(n){const t=n>>>24&255,v=n>>>16&255,p=n>>>8&255,_=n&255,E=z=>z.toString(16).padStart(2,"0");return`${E(v)}${E(p)}${E(_)}${E(t)}`}function h(n){const t=n.replace(/^#/,"");if(t.length===6){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(255<<24|v<<16|p<<8|_)>>>0}if(t.length===8){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(parseInt(t.slice(6,8),16)<<24|v<<16|p<<8|_)>>>0}return 0}return(n,t)=>{const v=re,p=ne,_=oe,E=ie,z=se,S=J,B=Q,R=de,F=ae;return y(),$(F,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.bodyColorArgb),"show-alpha":"","onUpdate:modelValue":t[3]||(t[3]=u=>m({bodyColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",$e,"#"+w(T(c.value.bodyColorArgb).toUpperCase()),1),t[9]||(t[9]=r("span",{class:"cse-color-hint"},"无报警/上线时生效",-1))]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"描边颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.outlineColorArgb),"show-alpha":"","onUpdate:modelValue":t[4]||(t[4]=u=>m({outlineColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ie,"#"+w(T(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.labelColorArgb),"show-alpha":"","onUpdate:modelValue":t[5]||(t[5]=u=>m({labelColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Se,"#"+w(T(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Ae,[a(R,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(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"},we={class:"cse-desc"},he={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},Oe={class:"cse-palette-pickers"},Be={class:"cse-color-code"},De={class:"cse-card-header"},Le={class:"cse-row-title"},je={class:"cse-row-name"},Me={class:"cse-row-fqn"},Re=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([]),h=N([]),n=K({}),t=K({}),v=X(()=>{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 L.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await L.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];I.value=i;for(const o of i)g[o.typeName]={...o.style};for(const o of Object.keys(g))i.find(U=>U.typeName===o)||delete g[o];const k=Array.isArray(e?.entries)?e.entries:[],A=Array.isArray(e?.defaultKeys)?e.defaultKeys:[];T.value=A,h.value=k;for(const o of Object.keys(n))delete n[o];for(const o of Object.keys(t))delete t[o];for(const o of k){if(!o?.key)continue;const U=Number(o.colorArgb)>>>0;n[o.key]=U,t[o.key]=U}(!s||!e)&&V.warning("车型样式 / 报警颜色加载部分失败,请确认 SimpleLite 已启动(端口 8222)。")}catch(s){V.error(`加载车型样式失败:${s.message}`)}finally{x.value=!1}}async function B(){if(v.value){b.value=!0;try{await L.putAlarmColors({...n}),V.success("调色板已写入并生效"),await S()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function R(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function F(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await L.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 L.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await S()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return Y(S),C({refresh:S}),(s,e)=>{const i=me,k=Q,A=J,o=pe,U=ye,Z=ge,ee=fe,te=ke,le=ce;return ue((y(),j("div",Te,[a(o,{shadow:"never",class:"cse-card"},{header:l(()=>[r("div",Ue,[e[4]||(e[4]=r("span",{class:"cse-card-title"},"报警 / 状态调色板",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[1]||(e[1]=[f("7 种默认状态",-1)])]),_:1}),e[5]||(e[5]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",loading:c.value,onClick:R},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(k,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:B},{default:l(()=>[...e[3]||(e[3]=[f(" 保存调色板(写入 simple.json) ",-1)])]),_:1},8,["disabled","loading"])])]),default:l(()=>[r("p",we,[e[9]||(e[9]=f(" 车体颜色的判定优先级: ",-1)),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[6]||(e[6]=[f("1. AlarmInfo 非空 → 「报警」",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[7]||(e[7]=[f("2. lstatus 包含关键字 → 对应键",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[8]||(e[8]=[f("3. 兜底 → 上下线默认色",-1)])]),_:1}),e[10]||(e[10]=f(" 修改下方颜色 + 「保存调色板」即时生效。 ",-1))]),r("div",he,[(y(!0),j(q,null,G(h.value,d=>(y(),j("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,w(d.key),1),d.isDefault?P("",!0):(y(),$(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",Oe,[a(A,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":D=>_(d.key,D)},null,8,["model-value","onUpdate:modelValue"]),r("code",Be,"#"+w(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",De,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(w(I.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",onClick:S},{default:l(()=>[a(U,null,{default:l(()=>[a(ve(_e))]),_:1}),e[12]||(e[12]=r("span",{class:"cse-btn-text"},"刷新",-1))]),_:1})])]),default:l(()=>[e[17]||(e[17]=r("p",{class:"cse-desc"}," 点击车型行展开编辑:尺寸(米)、车体 / 描边 / 标签颜色、是否显示名称、3D 模型文件路径。 每辆车按 .NET 类型 (`assemblyName::shortName`) 索引样式。修改后点行内「保存」即时写入并生效。 ",-1)),a(ee,{modelValue:M.value,"onUpdate:modelValue":e[0]||(e[0]=d=>M.value=d),accordion:""},{default:l(()=>[(y(!0),j(q,null,G(I.value,d=>(y(),$(Z,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",Le,[r("span",je,w(d.label),1),r("code",Me,w(d.typeName),1),d.hasOverride?(y(),$(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),$(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),$(xe,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":D=>g[d.typeName]=D,onSave:D=>F(d),onReset:D=>u(d)},null,8,["type-full-name","model-value","has-override","saving","onUpdate:modelValue","onSave","onReset"])):P("",!0)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),!x.value&&I.value.length===0?(y(),$(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,x.value]])}}}),Fe=W(Re,[["__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 Y(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(C.value=b)}),(b,c)=>{const m=Ee,I=Ce;return y(),j("div",Ke,[a(I,{modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=g=>C.value=g),type:"border-card",class:"car-tabs admin-tabs",onTabChange:x},{default:l(()=>[a(m,{label:"车辆列表",name:"list"},{default:l(()=>[C.value==="list"?(y(),$(Ne,{key:0,kind:"car","kind-label":"车辆",title:"车辆管理(Car / AbstractCar,含模拟车、插件车型 reflectionApi 实例化)","empty-text":"当前没有车辆;点击右上角「新建车辆」从已加载的 CarType 中选一个实例化。"})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[C.value==="style"?(y(),$(Fe,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ct=W(He,[["__scopeId","data-v-c3733824"]]);export{Ct as default}; +import{aI as H,b9 as y,aC as $,N as ae,bJ as l,aH as a,a2 as se,w as oe,O as ne,S as re,a8 as ie,z as J,aB as r,bq as w,R as de,r as Q,aG as f,aD as P,ax as X,bh as N,ak as W,b7 as Y,bK as ue,bA as ce,aE as j,t as pe,ad as me,ai as q,bj as G,x as fe,Q as ye,bt as ve,bi as _e,bg as K,X as V,Y as be,y as ge,L as ke,ac as Ce,a9 as Ee}from"./index-Dg4NaXsE.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-BZQZIz4T.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 L}from"./reflection-B_glb6eT.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-BgR6WvRg.js";import"./useProjectionStream-BBHmpNXC.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=X(()=>x.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const I=N(null);function g(){I.value?.click()}function M(n){const t=n.target,v=t.files?.[0];v&&(m({modelPath:v.name}),t.value="")}function T(n){const t=n>>>24&255,v=n>>>16&255,p=n>>>8&255,_=n&255,E=z=>z.toString(16).padStart(2,"0");return`${E(v)}${E(p)}${E(_)}${E(t)}`}function h(n){const t=n.replace(/^#/,"");if(t.length===6){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(255<<24|v<<16|p<<8|_)>>>0}if(t.length===8){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(parseInt(t.slice(6,8),16)<<24|v<<16|p<<8|_)>>>0}return 0}return(n,t)=>{const v=re,p=ne,_=oe,E=ie,z=se,S=J,B=Q,R=de,F=ae;return y(),$(F,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.bodyColorArgb),"show-alpha":"","onUpdate:modelValue":t[3]||(t[3]=u=>m({bodyColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",$e,"#"+w(T(c.value.bodyColorArgb).toUpperCase()),1),t[9]||(t[9]=r("span",{class:"cse-color-hint"},"无报警/上线时生效",-1))]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"描边颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.outlineColorArgb),"show-alpha":"","onUpdate:modelValue":t[4]||(t[4]=u=>m({outlineColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ie,"#"+w(T(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(S,{"model-value":T(c.value.labelColorArgb),"show-alpha":"","onUpdate:modelValue":t[5]||(t[5]=u=>m({labelColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Se,"#"+w(T(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Ae,[a(R,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(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"},we={class:"cse-desc"},he={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},Oe={class:"cse-palette-pickers"},Be={class:"cse-color-code"},De={class:"cse-card-header"},Le={class:"cse-row-title"},je={class:"cse-row-name"},Me={class:"cse-row-fqn"},Re=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([]),h=N([]),n=K({}),t=K({}),v=X(()=>{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 L.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await L.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];I.value=i;for(const o of i)g[o.typeName]={...o.style};for(const o of Object.keys(g))i.find(U=>U.typeName===o)||delete g[o];const k=Array.isArray(e?.entries)?e.entries:[],A=Array.isArray(e?.defaultKeys)?e.defaultKeys:[];T.value=A,h.value=k;for(const o of Object.keys(n))delete n[o];for(const o of Object.keys(t))delete t[o];for(const o of k){if(!o?.key)continue;const U=Number(o.colorArgb)>>>0;n[o.key]=U,t[o.key]=U}(!s||!e)&&V.warning("车型样式 / 报警颜色加载部分失败,请确认 SimpleLite 已启动(端口 8222)。")}catch(s){V.error(`加载车型样式失败:${s.message}`)}finally{x.value=!1}}async function B(){if(v.value){b.value=!0;try{await L.putAlarmColors({...n}),V.success("调色板已写入并生效"),await S()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function R(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function F(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await L.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 L.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await S()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return Y(S),C({refresh:S}),(s,e)=>{const i=me,k=Q,A=J,o=pe,U=ye,Z=ge,ee=fe,te=ke,le=ce;return ue((y(),j("div",Te,[a(o,{shadow:"never",class:"cse-card"},{header:l(()=>[r("div",Ue,[e[4]||(e[4]=r("span",{class:"cse-card-title"},"报警 / 状态调色板",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[1]||(e[1]=[f("7 种默认状态",-1)])]),_:1}),e[5]||(e[5]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",loading:c.value,onClick:R},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(k,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:B},{default:l(()=>[...e[3]||(e[3]=[f(" 保存调色板(写入 simple.json) ",-1)])]),_:1},8,["disabled","loading"])])]),default:l(()=>[r("p",we,[e[9]||(e[9]=f(" 车体颜色的判定优先级: ",-1)),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[6]||(e[6]=[f("1. AlarmInfo 非空 → 「报警」",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[7]||(e[7]=[f("2. lstatus 包含关键字 → 对应键",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[8]||(e[8]=[f("3. 兜底 → 上下线默认色",-1)])]),_:1}),e[10]||(e[10]=f(" 修改下方颜色 + 「保存调色板」即时生效。 ",-1))]),r("div",he,[(y(!0),j(q,null,G(h.value,d=>(y(),j("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,w(d.key),1),d.isDefault?P("",!0):(y(),$(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",Oe,[a(A,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":D=>_(d.key,D)},null,8,["model-value","onUpdate:modelValue"]),r("code",Be,"#"+w(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",De,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(w(I.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",onClick:S},{default:l(()=>[a(U,null,{default:l(()=>[a(ve(_e))]),_:1}),e[12]||(e[12]=r("span",{class:"cse-btn-text"},"刷新",-1))]),_:1})])]),default:l(()=>[e[17]||(e[17]=r("p",{class:"cse-desc"}," 点击车型行展开编辑:尺寸(米)、车体 / 描边 / 标签颜色、是否显示名称、3D 模型文件路径。 每辆车按 .NET 类型 (`assemblyName::shortName`) 索引样式。修改后点行内「保存」即时写入并生效。 ",-1)),a(ee,{modelValue:M.value,"onUpdate:modelValue":e[0]||(e[0]=d=>M.value=d),accordion:""},{default:l(()=>[(y(!0),j(q,null,G(I.value,d=>(y(),$(Z,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",Le,[r("span",je,w(d.label),1),r("code",Me,w(d.typeName),1),d.hasOverride?(y(),$(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),$(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),$(xe,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":D=>g[d.typeName]=D,onSave:D=>F(d),onReset:D=>u(d)},null,8,["type-full-name","model-value","has-override","saving","onUpdate:modelValue","onSave","onReset"])):P("",!0)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),!x.value&&I.value.length===0?(y(),$(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,x.value]])}}}),Fe=W(Re,[["__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 Y(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(C.value=b)}),(b,c)=>{const m=Ee,I=Ce;return y(),j("div",Ke,[a(I,{modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=g=>C.value=g),type:"border-card",class:"car-tabs admin-tabs",onTabChange:x},{default:l(()=>[a(m,{label:"车辆列表",name:"list"},{default:l(()=>[C.value==="list"?(y(),$(Ne,{key:0,kind:"car","kind-label":"车辆",title:"车辆管理(Car / AbstractCar,含模拟车、插件车型 reflectionApi 实例化)","empty-text":"当前没有车辆;点击右上角「新建车辆」从已加载的 CarType 中选一个实例化。"})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[C.value==="style"?(y(),$(Fe,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ct=W(He,[["__scopeId","data-v-c3733824"]]);export{Ct as default}; diff --git a/MiGu.Server/wwwroot/assets/ChargePolicyView-BMq754im.js b/MiGu.Server/wwwroot/assets/ChargePolicyView-fgYXxU-T.js similarity index 83% rename from MiGu.Server/wwwroot/assets/ChargePolicyView-BMq754im.js rename to MiGu.Server/wwwroot/assets/ChargePolicyView-fgYXxU-T.js index a4a5c0a..cb54a76 100644 --- a/MiGu.Server/wwwroot/assets/ChargePolicyView-BMq754im.js +++ b/MiGu.Server/wwwroot/assets/ChargePolicyView-fgYXxU-T.js @@ -1 +1 @@ -import{aI as s,aC as c,bJ as t,bt as d,b9 as u,aH as e,N as f,O as b,a8 as h,S as C,aa as g,ab as w,D as E}from"./index-368apsQG.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-CT6BdvCe.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DUg2FNrM.js";/* empty css */import"./reflection-C0K7EJ_N.js";import"./monitorConfigCache-BtW5W6GI.js";const K=s({__name:"ChargePolicyView",setup(x){return(T,U)=>{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{aI as s,aC as c,bJ as t,bt as d,b9 as u,aH as e,N as f,O as b,a8 as h,S as C,aa as g,ab as w,D as E}from"./index-Dg4NaXsE.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-MHa7yfOO.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-BlMEkqrL.js";/* empty css */import"./reflection-B_glb6eT.js";import"./monitorConfigCache-BigdkiFw.js";const K=s({__name:"ChargePolicyView",setup(x){return(T,U)=>{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-CT6BdvCe.js b/MiGu.Server/wwwroot/assets/ConfigPageBase-MHa7yfOO.js similarity index 95% rename from MiGu.Server/wwwroot/assets/ConfigPageBase-CT6BdvCe.js rename to MiGu.Server/wwwroot/assets/ConfigPageBase-MHa7yfOO.js index ee067f1..65dcc8c 100644 --- a/MiGu.Server/wwwroot/assets/ConfigPageBase-CT6BdvCe.js +++ b/MiGu.Server/wwwroot/assets/ConfigPageBase-MHa7yfOO.js @@ -1 +1 @@ -import{aU as E,e as z,aJ as L,aI as R,bh as h,bI as V,b7 as D,aC as O,bJ as r,b9 as k,aH as l,aE as I,bq as y,aD as w,aB as p,a2 as j,w as G,t as U,bk as q,aG as u,ad as H,r as W,bt as J,bi as X,as as Q,ax as T,X as m,ak as Y}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Z}from"./PermissionGuard-DUg2FNrM.js";import{b as tt,r as C}from"./reflection-C0K7EJ_N.js";import{i as et}from"./monitorConfigCache-BtW5W6GI.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 S(){return JSON.parse(JSON.stringify(z.monitor))}function b(t){const e=JSON.parse(JSON.stringify(z));if(!t)return e;const a={...S(),...t.monitor??{},car:{...S().car,...t.monitor?.car??{}},site:{...S().site,...t.monitor?.site??{}},track:{...S().track,...t.monitor?.track??{}},carActionByType:{...t.monitor?.carActionByType??{}}};return{...e,...t,playback:{...e.playback,...t.playback??{}},logRetention:{...e.logRetention,...t.logRetention??{}},version:{...e.version,...t.version??{}},monitor:a}}function 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=h(null),c=h(JSON.parse(JSON.stringify(e.defaults))),d=h(!1),v=h(!1),P=T(()=>JSON.stringify(c.value,null,2)),$=T(()=>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 K(){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,()=>_()),D(()=>_()),(i,n)=>{const s=H,g=W,f=U,N=G,F=j;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:J(X),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:J(Q),loading:v.value,onClick:K},{default:r(()=>[...n[2]||(n[2]=[u("保存",-1)])]),_:1},8,["icon","loading"])])]),default:r(()=>[t.description?(k(),I("p",ct,y(t.description),1)):w("",!0),p("div",lt,[l(F,{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(()=>[q(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,S as d,kt as l,b as n,Ct as s,st as u}; +import{aU as E,e as z,aJ as L,aI as R,bh as h,bI as V,b7 as D,aC as O,bJ as r,b9 as k,aH as l,aE as I,bq as y,aD as w,aB as p,a2 as j,w as G,t as U,bk as q,aG as u,ad as H,r as W,bt as J,bi as X,as as Q,ax as T,X as m,ak as Y}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Z}from"./PermissionGuard-BlMEkqrL.js";import{b as tt,r as C}from"./reflection-B_glb6eT.js";import{i as et}from"./monitorConfigCache-BigdkiFw.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 S(){return JSON.parse(JSON.stringify(z.monitor))}function b(t){const e=JSON.parse(JSON.stringify(z));if(!t)return e;const a={...S(),...t.monitor??{},car:{...S().car,...t.monitor?.car??{}},site:{...S().site,...t.monitor?.site??{}},track:{...S().track,...t.monitor?.track??{}},carActionByType:{...t.monitor?.carActionByType??{}}};return{...e,...t,playback:{...e.playback,...t.playback??{}},logRetention:{...e.logRetention,...t.logRetention??{}},version:{...e.version,...t.version??{}},monitor:a}}function 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=h(null),c=h(JSON.parse(JSON.stringify(e.defaults))),d=h(!1),v=h(!1),P=T(()=>JSON.stringify(c.value,null,2)),$=T(()=>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 K(){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,()=>_()),D(()=>_()),(i,n)=>{const s=H,g=W,f=U,N=G,F=j;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:J(X),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:J(Q),loading:v.value,onClick:K},{default:r(()=>[...n[2]||(n[2]=[u("保存",-1)])]),_:1},8,["icon","loading"])])]),default:r(()=>[t.description?(k(),I("p",ct,y(t.description),1)):w("",!0),p("div",lt,[l(F,{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(()=>[q(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,S as d,kt as l,b as n,Ct as s,st as u}; diff --git a/MiGu.Server/wwwroot/assets/CustomWidgetView-BKa7U3FY.js b/MiGu.Server/wwwroot/assets/CustomWidgetView-Ch7DIGUj.js similarity index 80% rename from MiGu.Server/wwwroot/assets/CustomWidgetView-BKa7U3FY.js rename to MiGu.Server/wwwroot/assets/CustomWidgetView-Ch7DIGUj.js index d277b64..6f93718 100644 --- a/MiGu.Server/wwwroot/assets/CustomWidgetView-BKa7U3FY.js +++ b/MiGu.Server/wwwroot/assets/CustomWidgetView-Ch7DIGUj.js @@ -1 +1 @@ -import{aI as _,aC as i,bJ as e,bt as d,b9 as s,aH as t,aa as u,ab as f,aB as n,bq as r,aE as b,ai as g,bj as h,ad as w,aG as C,l as E,ak as T}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as y}from"./ConfigPageBase-CT6BdvCe.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DUg2FNrM.js";/* empty css */import"./reflection-C0K7EJ_N.js";import"./monitorConfigCache-BtW5W6GI.js";const B={class:"js-mini"},k={class:"js-mini"},x=_({__name:"CustomWidgetView",setup(J){return(S,V)=>{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",B,r(o.row.schemaJson),1)]),_:1}),t(a,{label:"Layout",prop:"layoutJson"},{default:e(o=>[n("pre",k,r(o.row.layoutJson),1)]),_:1}),t(a,{label:"绑定 Scope"},{default:e(o=>[(s(!0),b(g,null,h(o.row.bindToScopes,l=>(s(),i(p,{key:l,size:"small",effect:"plain",style:{"margin-right":"4px"}},{default:e(()=>[C(r(l),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:1},8,["defaults"])}}}),M=T(x,[["__scopeId","data-v-96b90481"]]);export{M as default}; +import{aI as _,aC as i,bJ as e,bt as d,b9 as s,aH as t,aa as u,ab as f,aB as n,bq as r,aE as b,ai as g,bj as h,ad as w,aG as C,l as E,ak as T}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{C as y}from"./ConfigPageBase-MHa7yfOO.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-BlMEkqrL.js";/* empty css */import"./reflection-B_glb6eT.js";import"./monitorConfigCache-BigdkiFw.js";const B={class:"js-mini"},k={class:"js-mini"},x=_({__name:"CustomWidgetView",setup(J){return(S,V)=>{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",B,r(o.row.schemaJson),1)]),_:1}),t(a,{label:"Layout",prop:"layoutJson"},{default:e(o=>[n("pre",k,r(o.row.layoutJson),1)]),_:1}),t(a,{label:"绑定 Scope"},{default:e(o=>[(s(!0),b(g,null,h(o.row.bindToScopes,l=>(s(),i(p,{key:l,size:"small",effect:"plain",style:{"margin-right":"4px"}},{default:e(()=>[C(r(l),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:1},8,["defaults"])}}}),M=T(x,[["__scopeId","data-v-96b90481"]]);export{M as default}; diff --git a/MiGu.Server/wwwroot/assets/DashboardView-fmEPf2c4.js b/MiGu.Server/wwwroot/assets/DashboardView-C5o_Ttf4.js similarity index 99% rename from MiGu.Server/wwwroot/assets/DashboardView-fmEPf2c4.js rename to MiGu.Server/wwwroot/assets/DashboardView-C5o_Ttf4.js index cbc26d8..32c5e48 100644 --- a/MiGu.Server/wwwroot/assets/DashboardView-fmEPf2c4.js +++ b/MiGu.Server/wwwroot/assets/DashboardView-C5o_Ttf4.js @@ -1,4 +1,4 @@ -import{aI as iL,bh as yr,b7 as oL,b2 as sL,b8 as lL,aE as Kt,aB as $,b3 as mr,bq as Wt,aG as Da,ai as Ma,bj as La,aF as pm,aH as me,bJ as fe,ax as _e,t as uL,bx as fL,b9 as $t,b4 as Yh,aC as $h,bm as gm,Q as hL,bt as Vl,bs as vL,bC as ym,aD as mm,bb as cL,ac as dL,a9 as pL,ap as gL,T as yL,bo as mL,ba as Xh,ao as _L,br as SL,bH as xL,aY as bL,bc as wL,X as TL,aA as AL,az as CL,aq as DL,aX as ML,ak as LL}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as IL,c as PL,l as RL,a as EL}from"./projection-nWPnmoX1.js";import"./reflection-C0K7EJ_N.js";/*! ***************************************************************************** +import{aI as iL,bh as yr,b7 as oL,b2 as sL,b8 as lL,aE as Kt,aB as $,b3 as mr,bq as Wt,aG as Da,ai as Ma,bj as La,aF as pm,aH as me,bJ as fe,ax as _e,t as uL,bx as fL,b9 as $t,b4 as Yh,aC as $h,bm as gm,Q as hL,bt as Vl,bs as vL,bC as ym,aD as mm,bb as cL,ac as dL,a9 as pL,ap as gL,T as yL,bo as mL,ba as Xh,ao as _L,br as SL,bH as xL,aY as bL,bc as wL,X as TL,aA as AL,az as CL,aq as DL,aX as ML,ak as LL}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as IL,c as PL,l as RL,a as EL}from"./projection-BMms551H.js";import"./reflection-B_glb6eT.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-6kHSU9g1.js b/MiGu.Server/wwwroot/assets/DeviceHubView-D6W4gbr_.js similarity index 90% rename from MiGu.Server/wwwroot/assets/DeviceHubView-6kHSU9g1.js rename to MiGu.Server/wwwroot/assets/DeviceHubView-D6W4gbr_.js index b6fdc68..f42b393 100644 --- a/MiGu.Server/wwwroot/assets/DeviceHubView-6kHSU9g1.js +++ b/MiGu.Server/wwwroot/assets/DeviceHubView-D6W4gbr_.js @@ -1 +1 @@ -import{aI as b,aC as u,bJ as a,bt as f,b9 as h,aH as e,ac as w,a9 as v,aa as C,ab as E,a8 as D,C as P,F as T,aG as i,bq as r,a as V}from"./index-368apsQG.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-CT6BdvCe.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DUg2FNrM.js";/* empty css */import"./reflection-C0K7EJ_N.js";import"./monitorConfigCache-BtW5W6GI.js";const W=b({__name:"DeviceHubView",setup(I){return(x,S)=>{const l=E,s=C,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{aI as b,aC as u,bJ as a,bt as f,b9 as h,aH as e,ac as w,a9 as v,aa as C,ab as E,a8 as D,C as P,F as T,aG as i,bq as r,a as V}from"./index-Dg4NaXsE.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-MHa7yfOO.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-BlMEkqrL.js";/* empty css */import"./reflection-B_glb6eT.js";import"./monitorConfigCache-BigdkiFw.js";const W=b({__name:"DeviceHubView",setup(I){return(x,S)=>{const l=E,s=C,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-CRYMen0m.js b/MiGu.Server/wwwroot/assets/ExternalIntegrationView-CVrzHPs8.js similarity index 88% rename from MiGu.Server/wwwroot/assets/ExternalIntegrationView-CRYMen0m.js rename to MiGu.Server/wwwroot/assets/ExternalIntegrationView-CVrzHPs8.js index 1b1a514..546e051 100644 --- a/MiGu.Server/wwwroot/assets/ExternalIntegrationView-CRYMen0m.js +++ b/MiGu.Server/wwwroot/assets/ExternalIntegrationView-CVrzHPs8.js @@ -1 +1 @@ -import{aI as U,aC as x,bJ as a,bt as c,b9 as b,aH as t,ac as g,aE as T,ai as h,bj as I,a9 as S,aa as B,ab as $,R as v,a8 as D,r as L,aG as f,bc as N,bq as R,c as z}from"./index-368apsQG.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 P}from"./ConfigPageBase-CT6BdvCe.js";/* empty css *//* empty css */import"./PermissionGuard-DUg2FNrM.js";/* empty css */import"./reflection-C0K7EJ_N.js";import"./monitorConfigCache-BtW5W6GI.js";const le=U({__name:"ExternalIntegrationView",setup(A){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,p)=>p!==o)};s(i)}return(r,s)=>{const l=v,o=$,i=D,u=L,p=B,E=S,C=g;return b(),x(P,{section:"integrations",title:"外部系统对接",description:"MES / WMS / RCS / PTL 等标准接口配置(ExternalIntegrations)",defaults:c(z)},{default:a(({payload:d,update:_})=>[t(C,{"model-value":"mes"},{default:a(()=>[(b(),T(h,null,I(["mes","wms","rcs","ptl"],m=>t(E,{key:m,name:m,label:m.toUpperCase()},{default:a(()=>[t(p,{data:d[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(d,_,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(N),style:{"margin-top":"8px"},onClick:e=>w(d,_,m)},{default:a(()=>[f("新增 "+R(m.toUpperCase())+" 端点",1)]),_:2},1032,["icon","onClick"])]),_:2},1032,["name","label"])),64))]),_:2},1024)]),_:1},8,["defaults"])}}});export{le as default}; +import{aI as U,aC as x,bJ as a,bt as c,b9 as b,aH as t,ac as g,aE as T,ai as h,bj as I,a9 as S,aa as B,ab as $,R as v,a8 as D,r as L,aG as f,bc as N,bq as R,c as z}from"./index-Dg4NaXsE.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 P}from"./ConfigPageBase-MHa7yfOO.js";/* empty css *//* empty css */import"./PermissionGuard-BlMEkqrL.js";/* empty css */import"./reflection-B_glb6eT.js";import"./monitorConfigCache-BigdkiFw.js";const le=U({__name:"ExternalIntegrationView",setup(A){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,p)=>p!==o)};s(i)}return(r,s)=>{const l=v,o=$,i=D,u=L,p=B,E=S,C=g;return b(),x(P,{section:"integrations",title:"外部系统对接",description:"MES / WMS / RCS / PTL 等标准接口配置(ExternalIntegrations)",defaults:c(z)},{default:a(({payload:d,update:_})=>[t(C,{"model-value":"mes"},{default:a(()=>[(b(),T(h,null,I(["mes","wms","rcs","ptl"],m=>t(E,{key:m,name:m,label:m.toUpperCase()},{default:a(()=>[t(p,{data:d[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(d,_,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(N),style:{"margin-top":"8px"},onClick:e=>w(d,_,m)},{default:a(()=>[f("新增 "+R(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/LocationView-BH1yvcsy.js b/MiGu.Server/wwwroot/assets/LocationView-r0d4EkyN.js similarity index 86% rename from MiGu.Server/wwwroot/assets/LocationView-BH1yvcsy.js rename to MiGu.Server/wwwroot/assets/LocationView-r0d4EkyN.js index 731ba25..e8f75b4 100644 --- a/MiGu.Server/wwwroot/assets/LocationView-BH1yvcsy.js +++ b/MiGu.Server/wwwroot/assets/LocationView-r0d4EkyN.js @@ -1 +1 @@ -import{aI as s,aC as m,bJ as t,bt as c,b9 as d,aH as e,ac as _,a9 as b,aa as u,ab as f,$ as w,d as h}from"./index-368apsQG.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-CT6BdvCe.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-DUg2FNrM.js";/* empty css */import"./reflection-C0K7EJ_N.js";import"./monitorConfigCache-BtW5W6GI.js";const J=s({__name:"LocationView",setup(C){return(T,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:p})=>[e(n,{"model-value":"locs"},{default:t(()=>[e(l,{name:"locs",label:"库位"},{default:t(()=>[e(o,{data:p.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(r=>[e(i,{percentage:Math.round(r.row.occupied/r.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:p.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{J as default}; +import{aI as s,aC as m,bJ as t,bt as c,b9 as d,aH as e,ac as _,a9 as b,aa as u,ab as f,$ as w,d as h}from"./index-Dg4NaXsE.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-MHa7yfOO.js";/* empty css *//* empty css *//* empty css */import"./PermissionGuard-BlMEkqrL.js";/* empty css */import"./reflection-B_glb6eT.js";import"./monitorConfigCache-BigdkiFw.js";const J=s({__name:"LocationView",setup(C){return(T,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:p})=>[e(n,{"model-value":"locs"},{default:t(()=>[e(l,{name:"locs",label:"库位"},{default:t(()=>[e(o,{data:p.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(r=>[e(i,{percentage:Math.round(r.row.occupied/r.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:p.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{J as default}; diff --git a/MiGu.Server/wwwroot/assets/LoginView-Bg_Hrmmj.js b/MiGu.Server/wwwroot/assets/LoginView-0TaDlGzh.js similarity index 99% rename from MiGu.Server/wwwroot/assets/LoginView-Bg_Hrmmj.js rename to MiGu.Server/wwwroot/assets/LoginView-0TaDlGzh.js index a3dbb69..9a14da0 100644 --- a/MiGu.Server/wwwroot/assets/LoginView-Bg_Hrmmj.js +++ b/MiGu.Server/wwwroot/assets/LoginView-0TaDlGzh.js @@ -1 +1 @@ -import{aI as H,bw as j,bx as J,bv as Q,b9 as u,aE as m,aF as C,aB as a,ai as h,bj as k,b4 as S,bt as r,bq as M,aH as s,bJ as o,O as X,R as Y,Q as K,bz as Z,a_ as ee,b3 as f,bo as ae,b0 as se,ag as te,bf as oe,aG as p,aA as le,ay as ne,u as re,T as de,x as ie,y as ue,S as me,r as pe,N as ce,bh as P,bg as W,ax as ve,X as b,ak as fe}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";import{_ as be}from"./FRLD-logo-white-no_title-BE78iS6n.js";const ge={class:"login-page"},_e={class:"bg-stars","aria-hidden":"true"},ye={class:"login-card"},Ve={class:"hero"},we={class:"hero-stars","aria-hidden":"true"},he={class:"hero-points"},ke={class:"feat"},Me={class:"feat-title"},Pe={class:"feat-desc"},Ee={class:"panel"},xe={class:"scope-wrap"},Ce={class:"launch-mode-head"},Se={class:"scope-wrap launch-wrap"},We={class:"row row-between"},$e={class:"adv-grid"},ze={class:"footer-stamp"},Ie=H({__name:"LoginView",setup(Ae){const $=j(),z=J(),E=Q(),I=[{title:"路径规划与导航",desc:"全局 + 实时双层路径算法,智能寻优路线"},{title:"交通管制",desc:"任务队列 + 优先级动态调度,提前规避路口拥堵冲突"},{title:"安全可靠性",desc:"约束设备运行规范,实现 AGV 与产线设备协同安全作业"},{title:"高级任务调度",desc:"按任务优先级、现场资源动态分配搬运任务"},{title:"插件扩展",desc:"插件化架构,支持功能定制、二次开发适配场景"}],g=P(),_=P(!1),c=P([]),l=W({username:"admin",password:"admin",scope:"Platform",launchMode:"DesktopAndWeb",remember:!0}),d=W({host:"0.0.0.0",apiPort:7001,platformPort:8080,vrPort:8223}),A={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"}]},L=ve(()=>new Date().getFullYear());function x(v){return Array.from({length:v},()=>{const e=1.5+Math.random()*2.8;return{top:`${Math.random()*100}%`,left:`${Math.random()*100}%`,width:`${e}px`,height:`${e}px`,opacity:`${.35+Math.random()*.5}`,animationDelay:`${-Math.random()*6}s`,animationDuration:`${2.6+Math.random()*3.4}s`}})}const R=x(48),D=x(22);async function N(){g.value&&await g.value.validate(async v=>{if(v){_.value=!0;try{const e=await E.login({username:l.username,password:l.password,scope:l.scope,launchMode:l.launchMode});b.success(`欢迎,${E.user?.displayName??l.username}`),e.launchWarning?b({message:e.launchWarning,type:"warning",duration:6e3,showClose:!0}):e.runMode==="Detached"&&b({message:"SimpleLite 未启动(Platform.Server 单独运行),/api/sl/* 相关功能将不可用。",type:"warning",duration:6e3,showClose:!0});const n=$.query.redirect??(l.scope==="Platform"?"/admin/dashboard":"/monitor/map");z.push(n)}catch(e){const n=e instanceof Error?e.message:String(e);b.error(`登录失败:${n}`)}finally{_.value=!1}}})}return(v,e)=>{const n=K,y=Y,i=X,q=te,T=re,U=de,V=me,F=ue,B=ie,G=pe,O=ce;return u(),m("div",ge,[e[28]||(e[28]=C('',5)),a("div",_e,[(u(!0),m(h,null,k(r(R),(t,w)=>(u(),m("span",{key:w,style:S(t)},null,4))),128))]),a("div",ye,[a("div",Ve,[a("div",we,[(u(!0),m(h,null,k(r(D),(t,w)=>(u(),m("span",{key:w,style:S(t)},null,4))),128))]),e[14]||(e[14]=C('{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 Eae(e){return function(n){return e.apply(null,n)}}function xae(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=kae;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=Eae;An.isAxiosError=xae;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:Xoe,AxiosError:Joe,CanceledError:Zoe,isCancel:Qoe,CancelToken:ere,VERSION:tre,all:nre,Cancel:are,isAxiosError:ore,spread:rre,toFormData:sre,AxiosHeaders:lre,HttpStatusCode:ire,formToJSON:ure,getAdapter:cre,mergeConfig:dre,create:fre}=An,Tae="/api",Xl=An.create({baseURL:Tae,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 Oae(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=Oae(e);try{Object.defineProperty(e,"message",{value:t,configurable:!0})}catch{}return Promise.reject(e)});new Date().toISOString();new Date().toISOString();const _ae={dispatchLoopHz:50,log:{level:"info",rollDays:7,maxSizeMB:256},security:{jwtExpireMin:1440,enableSwagger:!1,corsWhitelist:["http://localhost:5173","https://*.intra"]}},Rae={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:[],ptl:[{id:"ptl-1",name:"PTL 拣选",url:"http://ptl.lan/api",enabled:!0}]},Iae={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}]},$ae={lowBatteryThreshold:.3,criticalBatteryThreshold:.15,faultReport:{enabled:!0,emailTo:["ops@example.com"]},autoRepair:{enabled:!1,cooldownSec:600}},Nae={allowMidTaskCharge:!1,idleChargeAfterSec:300,priority:[{id:"CP1",condition:"soc<0.2",weight:100},{id:"CP2",condition:"idle>5min",weight:30}]},Mae={mode:"leastLoad",loadBalance:!0,maxQueuePerCar:3},Pae={intersections:[{id:"IX1",siteIds:["S006","S007"],mode:"mutex"}],mutex:[{id:"MZ1",zoneIds:["Z-CROSS"]}],yields:[{id:"YD1",from:"A 区",to:"B 区",condition:"priority {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 Eae(e){return function(n){return e.apply(null,n)}}function xae(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=kae;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=Eae;An.isAxiosError=xae;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:Xoe,AxiosError:Joe,CanceledError:Zoe,isCancel:Qoe,CancelToken:ere,VERSION:tre,all:nre,Cancel:are,isAxiosError:ore,spread:rre,toFormData:sre,AxiosHeaders:lre,HttpStatusCode:ire,formToJSON:ure,getAdapter:cre,mergeConfig:dre,create:fre}=An,Tae="/api",Xl=An.create({baseURL:Tae,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 Oae(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=Oae(e);try{Object.defineProperty(e,"message",{value:t,configurable:!0})}catch{}return Promise.reject(e)});new Date().toISOString();new Date().toISOString();const _ae={dispatchLoopHz:50,log:{level:"info",rollDays:7,maxSizeMB:256},security:{jwtExpireMin:1440,enableSwagger:!1,corsWhitelist:["http://localhost:5173","https://*.intra"]}},Rae={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:[],ptl:[{id:"ptl-1",name:"PTL 拣选",url:"http://ptl.lan/api",enabled:!0}]},Iae={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}]},$ae={lowBatteryThreshold:.3,criticalBatteryThreshold:.15,faultReport:{enabled:!0,emailTo:["ops@example.com"]},autoRepair:{enabled:!1,cooldownSec:600}},Nae={allowMidTaskCharge:!1,idleChargeAfterSec:300,priority:[{id:"CP1",condition:"soc<0.2",weight:100},{id:"CP2",condition:"idle>5min",weight:30}]},Mae={mode:"leastLoad",loadBalance:!0,maxQueuePerCar:3},Pae={intersections:[{id:"IX1",siteIds:["S006","S007"],mode:"mutex"}],mutex:[{id:"MZ1",zoneIds:["Z-CROSS"]}],yields:[{id:"YD1",from:"A 区",to:"B 区",condition:"priority