diff --git a/MiGu.Server/wwwroot/FRLD-logo-white-no_title.png b/MiGu.Server/wwwroot/FRLD-logo-white-no_title.png deleted file mode 100644 index 23af5a5..0000000 Binary files a/MiGu.Server/wwwroot/FRLD-logo-white-no_title.png and /dev/null differ diff --git a/MiGu.Server/wwwroot/FRLD-logo-white.png b/MiGu.Server/wwwroot/FRLD-logo-white.png deleted file mode 100644 index bc6af75..0000000 Binary files a/MiGu.Server/wwwroot/FRLD-logo-white.png and /dev/null differ diff --git a/MiGu.Server/wwwroot/assets/AnnotationView-BCpnjaJW.js b/MiGu.Server/wwwroot/assets/AnnotationView-BCpnjaJW.js deleted file mode 100644 index a6db7ae..0000000 --- a/MiGu.Server/wwwroot/assets/AnnotationView-BCpnjaJW.js +++ /dev/null @@ -1 +0,0 @@ -import{aN as S,bV as N,aE as f,c8 as a,t as z,bs as p,aK as e,N as A,cb as B,O,R as T,a4 as D,aG as M,ai as U,bE as F,Z as G,r as L,bS as b,aJ as d,G as I,aa as J,ab as K,ad as R,bL as X,aD as c,bA as Z,bC as $,X as g}from"./index-D5GfLbIx.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const j={style:{display:"flex","align-items":"center",gap:"8px"}},pe=S({__name:"AnnotationView",setup(q){const s=N(),l=Z({title:"",target:"",level:"info",content:""}),m=$([{id:"N001",ts:"2026-05-19 10:25",author:"ops",target:"C05",level:"warn",title:"AGV-005 故障观察",content:"出库点附近频繁停顿,怀疑激光被遮挡"}]);function w(r){return r==="error"?"danger":r==="warn"?"warning":"info"}function v(){if(!l.title){g.warning("请填写标题");return}const r=`N${String(m.value.length+1).padStart(3,"0")}`;m.value.unshift({id:r,ts:new Date().toLocaleString("zh-CN"),author:s.user?.username??"mock",target:l.target,level:l.level,title:l.title,content:l.content}),g.success("已记录(Mock,未写入数据库)"),l.title="",l.content="",l.target=""}return(r,t)=>{const u=R,_=T,i=O,V=G,y=D,E=L,x=A,h=I,n=K,k=J,C=z;return p(),f(C,{shadow:"never"},{header:a(()=>[c("div",j,[t[7]||(t[7]=c("span",null,"运营备注(monitor.note.write · 写 platform.db.Annotations)",-1)),b(s).hasOp("monitor.note.write")?(p(),f(u,{key:0,size:"small",type:"success"},{default:a(()=>[...t[5]||(t[5]=[d("可写",-1)])]),_:1})):(p(),f(u,{key:1,size:"small",type:"danger"},{default:a(()=>[...t[6]||(t[6]=[d("只读",-1)])]),_:1}))])]),default:a(()=>[e(x,{inline:"",onSubmit:t[3]||(t[3]=B(()=>{},["prevent"]))},{default:a(()=>[e(i,{label:"标题"},{default:a(()=>[e(_,{modelValue:l.title,"onUpdate:modelValue":t[0]||(t[0]=o=>l.title=o),style:{width:"240px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"关联目标"},{default:a(()=>[e(_,{modelValue:l.target,"onUpdate:modelValue":t[1]||(t[1]=o=>l.target=o),placeholder:"例如 C01 / M02 / S006",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),e(i,{label:"层级"},{default:a(()=>[e(y,{modelValue:l.level,"onUpdate:modelValue":t[2]||(t[2]=o=>l.level=o),style:{width:"120px"}},{default:a(()=>[(p(),M(U,null,F(["info","warn","error"],o=>e(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(h),e(k,{data:m.value,size:"small","max-height":"400"},{default:a(()=>[e(n,{prop:"ts",label:"时间",width:"180"}),e(n,{prop:"author",label:"作者",width:"100"}),e(n,{prop:"target",label:"目标",width:"100"}),e(n,{prop:"level",label:"层级",width:"80"},{default:a(o=>[e(u,{size:"small",type:w(o.row.level)},{default:a(()=>[d(X(o.row.level),1)]),_:2},1032,["type"])]),_:1}),e(n,{prop:"title",label:"标题"}),e(n,{prop:"content",label:"内容"})]),_:1},8,["data"])]),_:1})}}});export{pe as default}; diff --git a/MiGu.Server/wwwroot/assets/AppShell-CFoRRXmz.css b/MiGu.Server/wwwroot/assets/AppShell-CFoRRXmz.css deleted file mode 100644 index 322e8e8..0000000 --- a/MiGu.Server/wwwroot/assets/AppShell-CFoRRXmz.css +++ /dev/null @@ -1 +0,0 @@ -.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;height:var(--el-footer-height);flex-shrink:0}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;height:var(--el-header-height);flex-shrink:0}.el-main{--el-main-padding:20px;box-sizing:border-box;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size:40px;--el-avatar-size-small:24px;box-sizing:border-box;text-align:center;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size);outline:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.el-avatar>img{width:100%;height:100%;display:block}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-leave-active,.el-collapse-transition-enter-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);background-color:var(--el-menu-bg-color);box-sizing:border-box;margin:0;padding-left:0;list-style:none;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{height:var(--el-menu-horizontal-height);border-right:none;flex-wrap:nowrap;display:flex}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:solid 1px var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000;justify-content:center;align-items:center;margin:0;display:inline-flex}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);color:var(--el-menu-text-color);align-items:center;padding:0 10px;display:flex}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal .el-menu-item:not(.is-disabled):focus{color:var(--el-menu-active-color,var(--el-menu-hover-text-color));background-color:var(--el-menu-hover-bg-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin:0}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span{visibility:hidden;width:0;height:0;display:inline-block;overflow:hidden}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{z-index:100;border-radius:var(--el-border-radius-small);min-width:200px;box-shadow:var(--el-box-shadow-light);border:none;padding:5px 0}.el-menu .el-icon{flex-shrink:0}.el-menu-item{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:hover,.el-menu-item:focus{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{width:var(--el-menu-icon-width);text-align:center;vertical-align:middle;margin-right:5px;font-size:18px}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{box-sizing:border-box;width:100%;height:100%;padding:0 var(--el-menu-base-level-padding);align-items:center;display:inline-flex;position:absolute;top:0;left:0}.el-sub-menu{margin:0;padding-left:0;list-style:none}.el-sub-menu__title{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:hover,.el-sub-menu__title:focus{outline:none}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-sub-menu__title,.el-sub-menu.is-disabled .el-menu-item{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin-right:5px;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{top:50%;right:var(--el-menu-base-level-padding);transition:transform var(--el-transition-duration);width:inherit;margin-top:-6px;margin-right:0;font-size:12px;position:absolute}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);color:var(--el-text-color-secondary);font-size:12px;line-height:normal}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-popper,.el-menu--popup-container,.el-menu{outline:none}.theme-trigger[data-v-28ea4aeb]{appearance:none;display:inline-flex;align-items:center;gap:8px;padding:4px 12px 4px 8px;border-radius:999px;border:1px solid var(--mg-glass-border, rgba(255, 255, 255, .18));background:var(--mg-glass-bg, rgba(255, 255, 255, .05));color:var(--mg-text-light, rgba(255, 255, 255, .9));cursor:pointer;transition:var(--mg-transition, all .25s ease);font-size:12.5px}.theme-trigger[data-v-28ea4aeb]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.45);color:var(--mg-text-light, #fff)}.swatch[data-v-28ea4aeb]{width:18px;height:18px;border-radius:50%;box-shadow:0 0 0 2px var(--mg-glass-border-hi, rgba(255, 255, 255, .25));flex-shrink:0}.theme-label[data-v-28ea4aeb]{font-weight:600;letter-spacing:.3px;white-space:nowrap}.caret[data-v-28ea4aeb]{font-size:12px;opacity:.7}.theme-menu .el-dropdown-menu__item{display:flex!important;align-items:center;gap:12px;min-width:240px;padding:10px 16px!important}.theme-menu .el-dropdown-menu__item.is-active{background:rgba(var(--mg-accent-rgb),.22)!important}.theme-menu .option-swatch{width:28px;height:28px;border-radius:8px;flex-shrink:0;box-shadow:0 2px 8px #00000059}.theme-menu .option-text{flex:1;display:flex;flex-direction:column;gap:2px;line-height:1.3}.theme-menu .option-name{font-weight:600;font-size:13px}.theme-menu .option-desc{font-size:11px;opacity:.65}.theme-menu .check{color:var(--mg-accent);font-size:16px}.app-shell[data-v-811456ba]{position:relative;height:100vh;overflow:hidden}.bg-orbs[data-v-811456ba]{position:absolute;inset:0;pointer-events:none;z-index:0}.bg-orb[data-v-811456ba]{position:absolute;border-radius:50%;filter:blur(120px);animation:drift-811456ba 24s ease-in-out infinite;will-change:transform}.bg-orb-a[data-v-811456ba]{width:520px;height:520px;top:-240px;left:-220px;background:radial-gradient(circle,var(--mg-primary-hover) 0%,var(--mg-primary) 55%,transparent 85%);opacity:var(--mg-orb-a-opacity, .55)}.bg-orb-b[data-v-811456ba]{width:640px;height:640px;bottom:-280px;right:-260px;background:radial-gradient(circle,var(--mg-primary) 0%,var(--mg-primary-active) 55%,transparent 90%);opacity:var(--mg-orb-b-opacity, .5);animation-delay:-7s}.bg-orb-c[data-v-811456ba]{width:320px;height:320px;top:58%;right:-140px;background:radial-gradient(circle,var(--mg-accent) 0%,var(--mg-primary-hover) 55%,transparent 95%);opacity:var(--mg-orb-c-opacity, .4);animation-delay:-14s}.bg-orb-d[data-v-811456ba]{width:380px;height:380px;top:12%;right:28%;background:radial-gradient(circle,rgba(99,102,241,.85) 0%,var(--mg-primary) 60%,transparent 92%);opacity:.3;animation-delay:-18s;filter:blur(140px)}@keyframes drift-811456ba{0%,to{transform:translate(0) scale(1)}50%{transform:translate(36px,-42px) scale(1.08)}}.app-container[data-v-811456ba]{position:relative;z-index:1;height:100vh}.aside[data-v-811456ba]{position:relative;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.78),rgba(var(--mg-bg-app-deep-rgb),.85));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-right:1px solid rgba(var(--mg-accent-rgb),.18);display:flex;flex-direction:column;transition:width .28s cubic-bezier(.25,.8,.25,1);overflow:hidden;flex-shrink:0;box-shadow:inset -1px 0 #ffffff0a,4px 0 32px #00000073}.aside[data-v-811456ba]:before{content:"";position:absolute;top:0;right:0;width:1px;height:100%;background:linear-gradient(180deg,transparent 0%,rgba(var(--mg-accent-rgb),.6) 50%,transparent 100%);pointer-events:none;opacity:.4}.logo[data-v-811456ba]{flex-shrink:0;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:22px 14px 18px;border-bottom:1px solid rgba(var(--mg-accent-rgb),.16);background:radial-gradient(ellipse at center top,rgba(var(--mg-primary-hover-rgb),.3) 0%,transparent 70%),linear-gradient(180deg,rgba(var(--mg-primary-rgb),.16) 0%,transparent 100%)}.logo.collapsed[data-v-811456ba]{padding:18px 4px 14px}.logo-img-full[data-v-811456ba]{height:36px;margin-bottom:12px;filter:drop-shadow(0 2px 10px rgba(var(--mg-accent-rgb),.5))}.logo-img-small[data-v-811456ba]{height:26px;margin-bottom:4px;filter:drop-shadow(0 2px 8px rgba(var(--mg-accent-rgb),.5))}.logo-titles[data-v-811456ba]{display:flex;flex-direction:column;align-items:center;gap:3px}.logo-title-zh[data-v-811456ba]{font-size:13px;font-weight:700;letter-spacing:2.5px;background:linear-gradient(90deg,#ffffff 0%,var(--mg-accent) 60%,#ffffff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap;text-shadow:0 0 18px rgba(var(--mg-accent-rgb),.3)}.logo-title-en[data-v-811456ba]{color:#e8d7f573;font-size:7.5px;letter-spacing:.3px;white-space:nowrap;text-align:center}.logo-title-en b[data-v-811456ba]{color:#ffffffe6;font-weight:700;font-size:8.5px}.logo-abbr[data-v-811456ba]{color:#ffffffd9;font-size:10.5px;font-weight:700;letter-spacing:1.5px}.menu[data-v-811456ba]{flex:1;overflow-y:auto;overflow-x:hidden;border-right:none!important;padding:8px 0;scrollbar-width:thin;scrollbar-color:rgba(var(--mg-accent-rgb),.3) transparent}.menu[data-v-811456ba]::-webkit-scrollbar{width:4px}.menu[data-v-811456ba]::-webkit-scrollbar-thumb{background:rgba(var(--mg-accent-rgb),.25);border-radius:2px}.menu[data-v-811456ba]::-webkit-scrollbar-thumb:hover{background:rgba(var(--mg-accent-rgb),.55)}[data-v-811456ba] .el-menu{border-right:none;background:transparent!important}[data-v-811456ba] .el-menu-item,[data-v-811456ba] .el-sub-menu__title{background:transparent!important;margin:2px 10px;border-radius:10px;height:42px;line-height:42px;transition:background .2s ease,color .2s ease,box-shadow .2s ease}[data-v-811456ba] .el-menu--collapse .el-menu-item,[data-v-811456ba] .el-menu--collapse .el-sub-menu__title{margin:2px 8px;padding:0!important;justify-content:center}[data-v-811456ba] .el-menu-item:hover,[data-v-811456ba] .el-sub-menu__title:hover{background:rgba(var(--mg-primary-rgb),.2)!important;color:#fff!important;box-shadow:inset 0 0 0 1px rgba(var(--mg-accent-rgb),.18)}[data-v-811456ba] .el-menu-item.is-active{background:linear-gradient(90deg,rgba(var(--mg-primary-rgb),.55) 0%,rgba(var(--mg-primary-hover-rgb),.2) 70%,transparent 100%)!important;color:#fff!important;font-weight:600;box-shadow:inset 3px 0 0 var(--mg-accent),0 4px 14px rgba(var(--mg-primary-rgb),.25)}[data-v-811456ba] .el-sub-menu.is-active>.el-sub-menu__title{color:#fff!important;font-weight:600}[data-v-811456ba] .el-sub-menu .el-menu{background:#0000002e!important;border-radius:8px;margin:0 12px;padding:4px 0}[data-v-811456ba] .el-sub-menu .el-menu .el-menu-item{margin:1px 4px;border-radius:6px;font-size:13px;height:36px;line-height:36px}[data-v-811456ba] .el-sub-menu .el-menu .el-menu-item.is-active{background:rgba(var(--mg-accent-rgb),.18)!important;box-shadow:inset 2px 0 0 var(--mg-primary-hover);color:#fff!important}.aside-footer[data-v-811456ba]{flex-shrink:0;padding:12px 16px;border-top:1px solid rgba(var(--mg-accent-rgb),.14);display:flex;align-items:center;gap:8px;font-size:10.5px;color:#ffffff8c;letter-spacing:.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aside-footer-badge[data-v-811456ba]{padding:2px 7px;border-radius:8px;background:linear-gradient(135deg,rgba(var(--mg-primary-rgb),.35),rgba(var(--mg-accent-rgb),.2));border:1px solid rgba(var(--mg-accent-rgb),.36);color:#fff;font-weight:600;font-size:10px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:0;box-shadow:0 0 12px rgba(var(--mg-primary-hover-rgb),.35)}.container-right[data-v-811456ba]{background:transparent;flex:1;min-height:0;display:flex;flex-direction:column}.header[data-v-811456ba]{position:relative;display:flex;justify-content:space-between;align-items:center;background:linear-gradient(180deg,rgba(var(--mg-bg-aside-rgb),.72),rgba(var(--mg-bg-aside-rgb),.55));backdrop-filter:blur(24px) saturate(170%);-webkit-backdrop-filter:blur(24px) saturate(170%);border-bottom:1px solid rgba(var(--mg-accent-rgb),.18);padding:0 20px}.header[data-v-811456ba]:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(var(--mg-accent-rgb),.45) 30%,rgba(var(--mg-primary-hover-rgb),.6) 50%,rgba(var(--mg-accent-rgb),.45) 70%,transparent 100%);opacity:.55}.header-left[data-v-811456ba],.header-right[data-v-811456ba]{display:flex;align-items:center;gap:14px}.icon-btn[data-v-811456ba]{appearance:none;background:transparent;border:1px solid rgba(255,255,255,.18);color:#ffffffbf;border-radius:8px;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.icon-btn[data-v-811456ba]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.5);color:#fff}[data-v-811456ba] .el-breadcrumb__inner{color:#ffffffc7;font-weight:500}[data-v-811456ba] .el-breadcrumb__separator{color:#ffffff59}[data-v-811456ba] .el-breadcrumb__item:last-child .el-breadcrumb__inner{color:#fff;font-weight:600}.runmode-tag[data-v-811456ba]{padding:4px 10px;border-radius:999px;font-size:11.5px;letter-spacing:.5px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;border:1px solid rgba(255,255,255,.18);background:#ffffff0d;color:#ffffffd9}.runmode-tag.WebEnabled[data-v-811456ba]{background:rgba(var(--mg-status-success-rgb),.18);border-color:rgba(var(--mg-status-success-rgb),.45);color:var(--mg-status-success)}.runmode-tag.WebOnly[data-v-811456ba]{background:rgba(var(--mg-primary-hover-rgb),.18);border-color:rgba(var(--mg-primary-hover-rgb),.45);color:var(--mg-accent)}.runmode-tag.Detached[data-v-811456ba]{background:rgba(var(--mg-status-warning-rgb),.18);border-color:rgba(var(--mg-status-warning-rgb),.45);color:var(--mg-status-warning)}.user-link[data-v-811456ba]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:#ffffffd9;padding:4px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#ffffff0a;transition:all .2s}.user-link[data-v-811456ba]:hover{background:rgba(var(--mg-accent-rgb),.18);border-color:rgba(var(--mg-accent-rgb),.4)}.user-name[data-v-811456ba]{font-size:13px;color:#fff;font-weight:500}[data-v-811456ba] .el-avatar{background:linear-gradient(135deg,var(--mg-accent) 0%,var(--mg-primary) 60%,var(--mg-primary-active) 100%);color:#fff;font-weight:700;box-shadow:0 0 0 1px #fff3}.main[data-v-811456ba]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;padding:24px;background:transparent;color:#fff}.footer[data-v-811456ba]{background:rgba(var(--mg-bg-aside-rgb),.25);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;color:#ffffff8c;font-size:12px;font-family:var(--mg-font-mono);font-variant-numeric:tabular-nums;letter-spacing:.3px;height:32px!important;line-height:32px}.route-page[data-v-811456ba]{min-height:0;flex:1;display:flex;flex-direction:column} diff --git a/MiGu.Server/wwwroot/assets/AppShell-CsAf-EtY.js b/MiGu.Server/wwwroot/assets/AppShell-CsAf-EtY.js deleted file mode 100644 index 6047778..0000000 --- a/MiGu.Server/wwwroot/assets/AppShell-CsAf-EtY.js +++ /dev/null @@ -1 +0,0 @@ -import{aN as R,bV as G,bX as O,bs as n,aE as p,c8 as e,aK as t,a0 as ce,aJ as u,ay as f,a1 as ue,X as pe,bZ as J,aD as a,bl as F,bL as i,bS as s,Q as j,as as H,K,aG as y,ai as x,bE as N,J as Q,bk as A,at as me,aF as T,I as X,ak as q,aI as _e,A as be,bW as fe,bG as he,m as ge,V as ve,a7 as ke,W as ye,bH as D,P as we,aY as Ee,aU as Se,p as Me,q as xe,n as Ce,U as Ie,M as Pe,b3 as Te,be as W,bQ as $e,bJ as De,bh as Ne,c1 as Ae,bx as Re,bm as ze}from"./index-D5GfLbIx.js";/* 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";/* empty css */const Le="/FRLD-logo-white.png",Ue=R({__name:"ScopeSwitcher",setup(z){const r=G(),w=O(),l=f(()=>r.scope??"Platform");let d=!1;async function v(_){if(!d){d=!0;try{await E(_)}finally{d=!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 S=ce,C=ue;return n(),p(C,{"model-value":l.value,size:"small",onChange:v},{default:e(()=>[t(S,{value:"Platform"},{default:e(()=>[...b[0]||(b[0]=[u("管理员",-1)])]),_:1}),t(S,{value:"RCSMonitor"},{default:e(()=>[...b[1]||(b[1]=[u("运营",-1)])]),_:1})]),_:1},8,["model-value"])}}}),Ve=["title"],Fe={class:"theme-label"},We={class:"option-text"},Ge={class:"option-name"},Oe={class:"option-desc"},Je=R({__name:"ThemeSwitcher",setup(z){const r=J(),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 d(v){r.setThemeId(v)}return(v,E)=>{const _=j,b=Q,S=K,C=X;return n(),p(C,{trigger:"click",onCommand:d},{dropdown:e(()=>[t(S,{class:"theme-menu"},{default:e(()=>[(n(!0),y(x,null,N(s(r).availableThemes,h=>(n(),p(b,{key:h.id,command:h.id,class:A({"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",Ge,i(h.name),1),a("span",Oe,i(h.description),1)]),h.id===s(r).themeId?(n(),p(_,{key:0,class:"check"},{default:e(()=>[t(s(me))]),_: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(H))]),_:1})],8,Ve)]),_:1})}}}),je=q(Je,[["__scopeId","data-v-28ea4aeb"]]),He={class:"app-shell"},Ke={class:"aside-footer"},Qe={key:0},Xe={class:"header-left"},qe={class:"header-right"},Ye={class:"user-link"},Ze={class:"user-name"},ea=R({__name:"AppShell",setup(z){const r=fe(),w=O(),l=G(),d=J(),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)"),S=f(()=>{switch(l.runMode){case"WebOnly":return"Web-Only";case"WebEnabled":return"Web + Desktop";case"Detached":return"SimpleLite 未连接";default:return String(l.runMode??"Unknown")}}),C=[{path:"/admin/dashboard",label:"总览",icon:Te,key:"admin-dashboard"},{path:"/admin/map-monitor",label:"地图监控",icon:W,key:"admin-map-monitor"},{path:"/admin/design",label:"设计与编排",icon:$e,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/task-templates",label:"任务编排",key:"admin-task-templates"}]},{path:"/admin/config",label:"平台配置中心",icon:De,children:[{path:"/admin/config/strategy",label:"调度策略",key:"admin-config-strategy"},{path:"/admin/config/vehicle-hub",label:"车辆运维",key:"admin-vehicle-hub"},{path:"/admin/config/facility",label:"设备与库位",key:"admin-config-facility"},{path:"/admin/config/business",label:"业务与集成",key:"admin-config-business"},{path:"/admin/config/ops-center",label:"运维与回放",key:"admin-config-ops-center"},{path:"/admin/config/system-center",label:"系统与权限",key:"admin-config-system-center"}]}],h=[{path:"/monitor/dashboard",label:"运营总览",icon:Ne,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:Re,key:"monitor-ops"},{path:"/monitor/notes",label:"运营备注",icon:ze,key:"monitor-notes"}];function Y(g){const o=[];for(const c of g)if(c.children){const M=c.children.filter(k=>!k.key||l.hasPage(k.key));M.length&&o.push({...c,children:M})}else(!c.key||l.hasPage(c.key))&&o.push(c);return o}const B=f(()=>Y(l.scope==="Platform"?C:h)),Z=f(()=>{const g=r.path,o=[],c=k=>{k.forEach(I=>{o.push(I),I.children&&c(I.children)})};return c(B.value),o.find(k=>k.path===g)?.path??g}),L=f(()=>r.meta.title??"");function ee(g){g==="logout"?(l.logout(),w.push("/login")):g==="status"?w.push("/status"):g==="wizard"&&w.push("/wizard")}return(g,o)=>{const c=j,M=ye,k=ke,I=ve,ae=ge,U=xe,te=Me,oe=Ce,$=Q,ne=K,se=X,le=we,ie=he("router-view"),re=Ie,de=Pe,V=be;return n(),y("div",He,[o[9]||(o[9]=_e('
',1)),t(V,{class:"app-container"},{default:e(()=>[t(ae,{width:s(d).sidebarCollapsed?"76px":"240px",class:"aside"},{default:e(()=>[a("div",{class:A(["logo",{collapsed:s(d).sidebarCollapsed}])},[s(d).sidebarCollapsed?(n(),y(x,{key:0},[o[1]||(o[1]=a("img",{src:Be,alt:"FRLD",class:"logo-img-small"},null,-1)),o[2]||(o[2]=a("span",{class:"logo-abbr"},"迷毂",-1))],64)):(n(),y(x,{key:1},[o[3]||(o[3]=a("img",{src:Le,alt:"FRLD",class:"logo-img-full"},null,-1)),o[4]||(o[4]=a("div",{class:"logo-titles"},[a("span",{class:"logo-title-zh"},"迷 毂 · 智能调度平台"),a("span",{class:"logo-title-en"},[a("b",null,"M"),u("i "),a("b",null,"G"),u("u · "),a("b",null,"I"),u("ntelligent "),a("b",null,"D"),u("ispatch "),a("b",null,"P"),u("latform ")])],-1))],64))],2),t(I,{"default-active":Z.value,collapse:s(d).sidebarCollapsed,"collapse-transition":!1,"background-color":"transparent","text-color":"rgba(255, 255, 255, 0.72)","active-text-color":"#fff",router:"",class:"menu"},{default:e(()=>[(n(!0),y(x,null,N(B.value,m=>(n(),y(x,{key:m.path},[m.children?(n(),p(k,{key:0,index:m.path},{title:e(()=>[t(c,null,{default:e(()=>[(n(),p(D(m.icon)))]),_:2},1024),a("span",null,i(m.label),1)]),default:e(()=>[(n(!0),y(x,null,N(m.children,P=>(n(),p(M,{key:P.path,index:P.path},{default:e(()=>[a("span",null,i(P.label),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(n(),p(M,{key:1,index:m.path},{title:e(()=>[u(i(m.label),1)]),default:e(()=>[t(c,null,{default:e(()=>[(n(),p(D(m.icon)))]),_:2},1024)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse"]),a("div",Ke,[o[5]||(o[5]=a("span",{class:"aside-footer-badge"},"v1.6",-1)),s(d).sidebarCollapsed?T("",!0):(n(),y("span",Qe,i(s(d).activeTheme.name)+" · "+i(s(d).activeTheme.preview),1))])]),_:1},8,["width"]),t(V,{class:"container-right"},{default:e(()=>[t(le,{class:"header"},{default:e(()=>[a("div",Xe,[a("button",{class:"icon-btn",onClick:o[0]||(o[0]=m=>s(d).toggleSidebar()),title:"切换侧栏"},[t(c,{size:"18"},{default:e(()=>[s(d).sidebarCollapsed?(n(),p(s(Se),{key:1})):(n(),p(s(Ee),{key:0}))]),_:1})]),t(te,{separator:"/"},{default:e(()=>[t(U,null,{default:e(()=>[u(i(b.value),1)]),_:1}),L.value?(n(),p(U,{key:0},{default:e(()=>[u(i(L.value),1)]),_:1})):T("",!0)]),_:1})]),a("div",qe,[t(je),t(Ue),a("span",{class:A(["runmode-tag",s(l).runMode])},i(S.value),3),t(se,{trigger:"click",onCommand:ee},{dropdown:e(()=>[t(ne,null,{default:e(()=>[s(l).scope==="Platform"?(n(),p($,{key:0,command:"wizard"},{default:e(()=>[...o[6]||(o[6]=[u("配置向导",-1)])]),_:1})):T("",!0),t($,{command:"status"},{default:e(()=>[...o[7]||(o[7]=[u("服务状态",-1)])]),_:1}),t($,{command:"logout",divided:""},{default:e(()=>[...o[8]||(o[8]=[u("退出登录",-1)])]),_:1})]),_:1})]),default:e(()=>[a("span",Ye,[t(oe,{size:"small"},{default:e(()=>[u(i(_.value),1)]),_:1}),a("span",Ze,i(s(l).user?.displayName??"未登录"),1),t(c,null,{default:e(()=>[t(s(H))]),_:1})])]),_:1})])]),_:1}),t(re,{class:"main mg-content"},{default:e(()=>[t(ie,null,{default:e(({Component:m,route:P})=>[m?(n(),p(D(m),{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})])}}}),pa=q(ea,[["__scopeId","data-v-811456ba"]]);export{pa as default}; diff --git a/MiGu.Server/wwwroot/assets/BusinessConfigView-BfBO4uM6.js b/MiGu.Server/wwwroot/assets/BusinessConfigView-BfBO4uM6.js deleted file mode 100644 index 8d14125..0000000 --- a/MiGu.Server/wwwroot/assets/BusinessConfigView-BfBO4uM6.js +++ /dev/null @@ -1 +0,0 @@ -import{aN as E,bs as u,aE as V,c8 as t,aK as e,ac as B,aG as C,ai as x,bE as U,a9 as L,aa as z,ab as P,R as N,a8 as A,r as q,aJ as d,bS as v,bv as J,bL as c,c as k,a2 as W,w as F,t as G,aD as f,ad as R,G as M,B as j,C as O,g as K,ak as y,l as X,bC as H,c7 as $,bW as Q,bX as Y}from"./index-D5GfLbIx.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 D}from"./ConfigPageBase-CgfsngDp.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./PermissionGuard-CR4qtxrh.js";/* empty css */import"./reflection-BwOBPyb9.js";import"./monitorConfigCache-DXn96T8F.js";const Z=E({__name:"ExternalIntegrationView",setup(S){function m(l,_,o){const a=`${o}-${Date.now()}`,s={...l,[o]:[...l[o]??[],{id:a,name:"新端点",url:"http://",enabled:!1}]};_(s)}function h(l,_,o,a){const s={...l,[o]:(l[o]??[]).filter((n,b)=>b!==a)};_(s)}return(l,_)=>{const o=N,a=P,s=A,n=q,b=z,r=L,w=B;return u(),V(D,{section:"integrations",title:"外部系统对接",description:"MES / WMS / RCS / PTL 等标准接口配置(ExternalIntegrations)",defaults:v(k)},{default:t(({payload:T,update:I})=>[e(w,{"model-value":"mes"},{default:t(()=>[(u(),C(x,null,U(["mes","wms","rcs","ptl"],g=>e(r,{key:g,name:g,label:g.toUpperCase()},{default:t(()=>[e(b,{data:T[g]??[],size:"small",border:""},{default:t(()=>[e(a,{label:"ID",width:"120"},{default:t(i=>[e(o,{modelValue:i.row.id,"onUpdate:modelValue":p=>i.row.id=p},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),e(a,{label:"名称","min-width":"160"},{default:t(i=>[e(o,{modelValue:i.row.name,"onUpdate:modelValue":p=>i.row.name=p},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),e(a,{label:"URL","min-width":"260"},{default:t(i=>[e(o,{modelValue:i.row.url,"onUpdate:modelValue":p=>i.row.url=p},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),e(a,{label:"启用",width:"80"},{default:t(i=>[e(s,{modelValue:i.row.enabled,"onUpdate:modelValue":p=>i.row.enabled=p},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),e(a,{label:"操作",width:"80"},{default:t(i=>[e(n,{text:"",type:"danger",size:"small",onClick:p=>h(T,I,g,i.$index)},{default:t(()=>[..._[0]||(_[0]=[d("删除",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1032,["data"]),e(n,{size:"small",icon:v(J),style:{"margin-top":"8px"},onClick:i=>m(T,I,g)},{default:t(()=>[d("新增 "+c(g.toUpperCase())+" 端点",1)]),_:2},1032,["icon","onClick"])]),_:2},1032,["name","label"])),64))]),_:2},1024)]),_:1},8,["defaults"])}}}),ee={class:"tpl-title"},te={class:"tpl-meta"},ae={class:"tpl-baseline"},oe=E({__name:"ScenarioTemplateView",setup(S){return(m,h)=>{const l=R,_=G,o=F,a=W,s=M,n=O,b=j;return u(),V(D,{section:"scenario",title:"业务场景模板化",description:"SPS / Pack / 环线 / 点对点;DSL/低代码扩展(ScenarioTemplateConfig)",defaults:v(K)},{default:t(({payload:r})=>[e(a,{gutter:12},{default:t(()=>[(u(!0),C(x,null,U(r.templates,w=>(u(),V(o,{key:w.id,span:6},{default:t(()=>[e(_,{shadow:"hover",class:"tpl-card"},{default:t(()=>[f("div",ee,c(w.name),1),f("div",te,[e(l,{size:"small"},{default:t(()=>[d(c(w.category),1)]),_:2},1024),e(l,{size:"small",type:"info"},{default:t(()=>[d("v"+c(w.version),1)]),_:2},1024)]),f("pre",ae,c(w.baselineJson||"{}"),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024),e(s),e(b,{column:2,border:""},{default:t(()=>[e(n,{label:"DSL 启用"},{default:t(()=>[d(c(r.dslPolicy.enabled?"是":"否"),1)]),_:2},1024),e(n,{label:"Schema 版本"},{default:t(()=>[d(c(r.dslPolicy.schemaVersion),1)]),_:2},1024),e(n,{label:"低代码"},{default:t(()=>[d(c(r.lowCode.enabled?"启用":"关闭"),1)]),_:2},1024),e(n,{label:"编辑器"},{default:t(()=>[d(c(r.lowCode.editor),1)]),_:2},1024),e(n,{label:"保留版本"},{default:t(()=>[d(c(r.versionPolicy.keepVersions),1)]),_:2},1024),e(n,{label:"允许回滚"},{default:t(()=>[d(c(r.versionPolicy.allowRollback?"是":"否"),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["defaults"])}}}),le=y(oe,[["__scopeId","data-v-4faf66a8"]]),ne={class:"js-mini"},se={class:"js-mini"},ie=E({__name:"CustomWidgetView",setup(S){return(m,h)=>{const l=P,_=R,o=z;return u(),V(D,{section:"widget",title:"自定义控件",description:"呼叫/展示界面可自由定义(platform-vue + rcsmonitor-vue 双渲染器)",defaults:v(X)},{default:t(({payload:a})=>[e(o,{data:a.items,size:"small",border:""},{default:t(()=>[e(l,{label:"ID",prop:"id",width:"180"}),e(l,{label:"名称",prop:"name",width:"140"}),e(l,{label:"Schema",prop:"schemaJson"},{default:t(s=>[f("pre",ne,c(s.row.schemaJson),1)]),_:1}),e(l,{label:"Layout",prop:"layoutJson"},{default:t(s=>[f("pre",se,c(s.row.layoutJson),1)]),_:1}),e(l,{label:"绑定 Scope"},{default:t(s=>[(u(!0),C(x,null,U(s.row.bindToScopes,n=>(u(),V(_,{key:n,size:"small",effect:"plain",style:{"margin-right":"4px"}},{default:t(()=>[d(c(n),1)]),_:2},1024))),128))]),_:1})]),_:1},8,["data"])]),_:1},8,["defaults"])}}}),ce=y(ie,[["__scopeId","data-v-96b90481"]]),_e={class:"config-hub-page"},re={class:"config-pane"},de={class:"config-pane"},ue={class:"config-pane"},me=E({__name:"BusinessConfigView",setup(S){const m=Q(),h=Y(),l=["integrations","scenario","widget"];function _(){const a=m.query.tab;return typeof a=="string"&&l.includes(a)?a:"integrations"}const o=H(_());return $(o,a=>{m.query.tab!==a&&h.replace({query:{...m.query,tab:a}})}),$(()=>m.query.tab,()=>{const a=_();a!==o.value&&(o.value=a)}),(a,s)=>{const n=L,b=B;return u(),C("div",_e,[e(b,{modelValue:o.value,"onUpdate:modelValue":s[0]||(s[0]=r=>o.value=r),class:"hub-tabs"},{default:t(()=>[e(n,{name:"integrations",label:"外部系统对接"},{default:t(()=>[f("div",re,[e(Z)])]),_:1}),e(n,{name:"scenario",label:"场景模板",lazy:""},{default:t(()=>[f("div",de,[e(le)])]),_:1}),e(n,{name:"widget",label:"自定义控件",lazy:""},{default:t(()=>[f("div",ue,[e(ce)])]),_:1})]),_:1},8,["modelValue"])])}}}),Pe=y(me,[["__scopeId","data-v-aaea055a"]]);export{Pe as default}; diff --git a/MiGu.Server/wwwroot/assets/BusinessConfigView-mcy1bFqR.css b/MiGu.Server/wwwroot/assets/BusinessConfigView-mcy1bFqR.css deleted file mode 100644 index 170d9c1..0000000 --- a/MiGu.Server/wwwroot/assets/BusinessConfigView-mcy1bFqR.css +++ /dev/null @@ -1 +0,0 @@ -.tpl-card[data-v-4faf66a8]{margin-bottom:12px}.tpl-title[data-v-4faf66a8]{font-weight:600;margin-bottom:6px}.tpl-meta[data-v-4faf66a8]{display:flex;gap:6px;margin-bottom:8px}.tpl-baseline[data-v-4faf66a8]{margin:0;font-size:11px;background:#f5f7fa;padding:6px;border-radius:4px;max-height:80px;overflow:auto}.js-mini[data-v-96b90481]{margin:0;font-size:11px;background:#f5f7fa;padding:4px 6px;border-radius:4px;max-height:60px;overflow:auto}.config-hub-page[data-v-aaea055a]{padding:16px;height:100%;display:flex;flex-direction:column;overflow:hidden}.hub-tabs[data-v-aaea055a]{flex:1;min-height:0;display:flex;flex-direction:column}[data-v-aaea055a] .el-tabs__content{flex:1;min-height:0;overflow:auto}[data-v-aaea055a] .el-tab-pane{height:100%}.config-pane[data-v-aaea055a]{height:100%;overflow:auto}[data-v-aaea055a] .el-tabs__item{color:var(--mg-text-muted, rgba(255, 255, 255, .65))}[data-v-aaea055a] .el-tabs__item.is-active{color:var(--mg-text-light, #fff)}[data-v-aaea055a] .el-tabs__active-bar{background-color:var(--mg-accent, var(--el-color-primary))}[data-v-aaea055a] .el-tabs__nav-wrap:after{background-color:#ffffff14} diff --git a/MiGu.Server/wwwroot/assets/CarPanelView-BiDARL2O.js b/MiGu.Server/wwwroot/assets/CarPanelView-BiDARL2O.js deleted file mode 100644 index e6d2a2a..0000000 --- a/MiGu.Server/wwwroot/assets/CarPanelView-BiDARL2O.js +++ /dev/null @@ -1 +0,0 @@ -import{aN as W,bs as y,aE as $,N as ae,c8 as l,aK as a,a2 as se,w as oe,O as ne,S as re,a8 as ie,z as J,aD as r,bL as w,R as de,r as Q,aJ as f,aF as P,ay as X,bC as N,ak as G,bp as Y,c9 as ue,b$ as ce,aG as j,t as pe,ad as me,ai as H,bE as q,x as fe,Q as ye,bS as ve,bD as _e,bA as K,X as V,Y as be,y as ge,L as ke,ac as Ce,a9 as Ee}from"./index-D5GfLbIx.js";/* empty css *//* empty css */import{R as Ne}from"./ReflectionManagerPanel-CqcqGxZI.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as B}from"./reflection-BwOBPyb9.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"./projectSaveFlow-BOHSv3Vc.js";import"./useProjectionStream-ayb6RvWW.js";import"./mapEdit-BXIATxCI.js";const $e={class:"cse-color-code"},Se={class:"cse-color-code"},Ie={class:"cse-color-code"},Ae={class:"cse-model-row"},Ve=W({__name:"CarStyleEditorForm",props:{typeFullName:{},modelValue:{},hasOverride:{type:Boolean},saving:{type:Boolean}},emits:["update:modelValue","save","reset"],setup(D,{emit:C}){const x=D,b=C,c=X(()=>x.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const S=N(null);function g(){S.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,I=J,L=Q,F=de,R=ae;return y(),$(R,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(I,{"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(I,{"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",Se,"#"+w(T(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(I,{"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",Ie,"#"+w(T(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Ae,[a(F,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(L,{onClick:g},{default:l(()=>[...t[10]||(t[10]=[f("浏览…",-1)])]),_:1})]),_:1},8,["model-value"]),r("input",{ref_key:"fileInput",ref:S,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(L,{type:"primary",loading:D.saving,onClick:t[7]||(t[7]=u=>n.$emit("save"))},{default:l(()=>[...t[12]||(t[12]=[f("保存此车型",-1)])]),_:1},8,["loading"]),D.hasOverride?(y(),$(L,{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=G(Ve,[["__scopeId","data-v-3cdad944"]]),Te={class:"cse-root"},Ue={class:"cse-card-header"},we={class:"cse-desc"},he={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},De={class:"cse-palette-pickers"},Le={class:"cse-color-code"},Oe={class:"cse-card-header"},Be={class:"cse-row-title"},je={class:"cse-row-name"},Me={class:"cse-row-fqn"},Fe=W({__name:"CarStyleEditor",setup(D,{expose:C}){const x=N(!1),b=N(!1),c=N(!1),m=N(null),S=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 I(){x.value=!0;try{const s=await B.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await B.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];S.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 L(){if(v.value){b.value=!0;try{await B.putAlarmColors({...n}),V.success("调色板已写入并生效"),await I()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function F(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function R(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await B.putCarStyle(s.typeName,e);g[s.typeName]={...i},s.hasOverride=!0,V.success(`已保存 ${s.label} 车型样式`)}catch(i){V.error(`保存 ${s.label} 失败:${i.message}`)}finally{m.value=null}}}async function u(s){try{await be.confirm(`把 ${s.label} (${s.typeName}) 的样式恢复为全局默认?删除条目后将与未覆盖车型一致。`,"恢复默认",{confirmButtonText:"恢复",cancelButtonText:"取消",type:"warning"})}catch{return}try{await B.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await I()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return Y(I),C({refresh:I}),(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:F},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(k,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:L},{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(H,null,q(h.value,d=>(y(),j("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,w(d.key),1),d.isDefault?P("",!0):(y(),$(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",De,[a(A,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":O=>_(d.key,O)},null,8,["model-value","onUpdate:modelValue"]),r("code",Le,"#"+w(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",Oe,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(w(S.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(k,{size:"small",onClick:I},{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(H,null,q(S.value,d=>(y(),$(Z,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",Be,[r("span",je,w(d.label),1),r("code",Me,w(d.typeName),1),d.hasOverride?(y(),$(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),$(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),$(xe,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":O=>g[d.typeName]=O,onSave:O=>R(d),onReset:O=>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&&S.value.length===0?(y(),$(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,x.value]])}}}),Re=G(Fe,[["__scopeId","data-v-3af8f925"]]),Ke={class:"car-page"},We=W({__name:"CarPanelView",setup(D){const C=N("list");function x(b){C.value=b,sessionStorage.setItem("admin.cars.tab",C.value)}return Y(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(C.value=b)}),(b,c)=>{const m=Ee,S=Ce;return y(),j("div",Ke,[a(S,{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 中选一个实例化。","enable-project-save":""})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[C.value==="style"?(y(),$(Re,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Et=G(We,[["__scopeId","data-v-a07bde0e"]]);export{Et as default}; diff --git a/MiGu.Server/wwwroot/assets/CarPanelView-CyQ-iKoo.css b/MiGu.Server/wwwroot/assets/CarPanelView-CyQ-iKoo.css deleted file mode 100644 index fc799d0..0000000 --- a/MiGu.Server/wwwroot/assets/CarPanelView-CyQ-iKoo.css +++ /dev/null @@ -1 +0,0 @@ -.cse-form[data-v-3cdad944]{padding:8px 4px}.cse-color-code[data-v-3cdad944]{font-family:JetBrains Mono,Consolas,monospace;font-size:12px;color:var(--el-text-color-secondary);margin-left:8px}.cse-color-hint[data-v-3cdad944]{font-size:12px;color:var(--el-text-color-secondary);margin-left:8px}.cse-model-row[data-v-3cdad944]{display:flex;align-items:center;gap:8px;width:100%}.cse-model-hint[data-v-3cdad944]{margin:6px 0 0;font-size:12px;color:var(--el-text-color-secondary);line-height:1.55}.cse-root[data-v-3af8f925]{height:100%;display:flex;flex-direction:column;gap:12px;padding:12px;box-sizing:border-box;overflow:auto}.cse-card[data-v-3af8f925] .el-card__body{padding:12px 16px}.cse-card-header[data-v-3af8f925]{display:flex;align-items:center;gap:10px}.cse-card-title[data-v-3af8f925]{font-weight:600}.cse-card-spacer[data-v-3af8f925]{flex:1}.cse-desc[data-v-3af8f925]{margin:0 0 12px;color:var(--el-text-color-primary);font-size:13px;line-height:1.65;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.cse-palette[data-v-3af8f925]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.cse-palette-item[data-v-3af8f925]{border:1px solid var(--el-border-color);background:var(--el-fill-color-light);border-radius:6px;padding:10px 12px;display:flex;flex-direction:column;gap:8px}.cse-palette-label[data-v-3af8f925]{display:flex;align-items:center;gap:6px}.cse-palette-key[data-v-3af8f925]{font-weight:600;color:var(--el-text-color-primary)}.cse-palette-pickers[data-v-3af8f925]{display:flex;align-items:center;gap:8px}.cse-color-code[data-v-3af8f925]{font-family:JetBrains Mono,Consolas,monospace;font-size:12px;color:var(--el-text-color-secondary)}.cse-types-card[data-v-3af8f925]{flex:1}.cse-row-title[data-v-3af8f925]{display:flex;align-items:center;gap:8px;width:100%}.cse-row-name[data-v-3af8f925]{font-weight:600}.cse-row-fqn[data-v-3af8f925]{font-family:JetBrains Mono,Consolas,monospace;font-size:12px;color:var(--el-text-color-secondary);flex:1;text-align:left;word-break:break-all}.cse-btn-text[data-v-3af8f925]{margin-left:4px}.car-page[data-v-a07bde0e]{height:calc(100vh - 56px);padding:12px 14px;box-sizing:border-box;display:flex;flex-direction:column}.car-tabs[data-v-a07bde0e]{flex:1;display:flex;flex-direction:column;overflow:hidden}.car-tabs[data-v-a07bde0e] .el-tabs__content{flex:1;overflow:hidden;padding:0}.car-tabs[data-v-a07bde0e] .el-tab-pane{height:100%;overflow:hidden} diff --git a/MiGu.Server/wwwroot/assets/ConfigPageBase-CgfsngDp.js b/MiGu.Server/wwwroot/assets/ConfigPageBase-CgfsngDp.js deleted file mode 100644 index bbc6875..0000000 --- a/MiGu.Server/wwwroot/assets/ConfigPageBase-CgfsngDp.js +++ /dev/null @@ -1 +0,0 @@ -import{b4 as J,e as z,aO as L,aN as R,bC as S,c7 as D,bp as V,bs as k,aE as B,c8 as r,aK as l,t as j,aG as G,bL as y,aF as w,aD as p,a2 as I,w as U,bF as W,aJ as u,ad as X,r as q,bS as T,bD as H,at as Q,ay as E,X as m,ak as Y}from"./index-D5GfLbIx.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as Z}from"./PermissionGuard-CR4qtxrh.js";import{b as tt,r as C}from"./reflection-BwOBPyb9.js";import{i as et}from"./monitorConfigCache-DXn96T8F.js";async function at(t){const{data:e}=await J.get(`/config/${t}`);return e}async function ot(t,e){const{data:a}=await J.put(`/config/${t}`,e);return a}function h(){return JSON.parse(JSON.stringify(z.monitor))}function b(t){const e=JSON.parse(JSON.stringify(z));if(!t)return e;const a={...h(),...t.monitor??{},car:{...h().car,...t.monitor?.car??{}},site:{...h().site,...t.monitor?.site??{}},track:{...h().track,...t.monitor?.track??{}},carActionByType:{...t.monitor?.carActionByType??{}}};return{...e,...t,playback:{...e.playback,...t.playback??{}},logRetention:{...e.logRetention,...t.logRetention??{}},version:{...e.version,...t.version??{}},monitor:a}}function M(t){const e={};if(!t)return e;for(const[a,o]of Object.entries(t))!a||!Array.isArray(o)||(e[a]=[...o]);return e}function nt(t){return{carActionByType:M(t.carActionByType),siteActionKeys:[...t.site?.methods??[]],trackActionKeys:[...t.track?.methods??[]]}}async function kt(t,e){const a=b(t);let o=null;try{o=(e??await C.getMonitorConfig()).config;const d=nt(o);a.monitor.carActionByType=d.carActionByType,a.monitor.site.actionKeys=d.siteActionKeys,a.monitor.track.actionKeys=d.trackActionKeys}catch{}return{config:a,cache:o}}async function Ct(t,e){const a=b(t).monitor;let o=e?.cachedRoot??tt();if(!e?.cachedRoot)try{o=(await C.getMonitorConfig()).config}catch{}const c=await C.saveMonitorConfig({car:{fields:[...o.car?.fields??[]],status:[...o.car?.status??[]],methods:[...o.car?.methods??[]]},site:{fields:[...o.site?.fields??[]],status:[...o.site?.status??[]],methods:[...a.site.actionKeys]},track:{fields:[...o.track?.fields??[]],status:[...o.track?.status??[]],methods:[...a.track.actionKeys]},carActionByType:M(a.carActionByType)});return et(),c}const st=L("config",{state:()=>({cache:{},loading:{}}),actions:{async load(t,e=!1){if(!e&&this.cache[t])return this.cache[t];this.loading[t]=!0;try{const a=await at(t);return t==="ops"&&a.payload&&(a.payload=b(a.payload)),this.cache[t]=a,a}finally{this.loading[t]=!1}},async save(t,e){this.loading[t]=!0;try{const a=t==="ops"?b(e):e,o=await ot(t,a);return this.cache[t]=o,o}finally{this.loading[t]=!1}}}}),it={class:"cpb-header"},rt={class:"cpb-title"},ct={key:0,class:"cpb-desc"},lt={class:"cpb-body"},dt={class:"cpb-json"},ft=R({__name:"ConfigPageBase",props:{section:{},title:{},description:{},defaults:{},normalizePayload:{type:Function},afterLoad:{type:Function},beforeSave:{type:Function},afterSave:{type:Function}},setup(t){const e=t,a=st(),o=S(null),c=S(JSON.parse(JSON.stringify(e.defaults))),d=S(!1),v=S(!1),P=E(()=>JSON.stringify(c.value,null,2)),$=E(()=>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 N(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 N(i,i)}async function F(){v.value=!0;let i=c.value;if(e.normalizePayload&&(i=e.normalizePayload(i)),e.beforeSave)try{await e.beforeSave(i)}catch(s){m.error(`地图监控配置保存失败:${s instanceof Error?s.message:String(s)}`),v.value=!1;return}let n="";try{const s=await a.save(e.section,i);if(o.value=s,c.value=i,e.afterSave)try{await e.afterSave(i)}catch(f){n=`(平台配置已保存,但 SimpleLite 同步失败:${f instanceof Error?f.message:String(f)})`}await N(!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 D(()=>e.section,()=>_()),V(()=>_()),(i,n)=>{const s=X,g=q,f=j,O=U,K=I;return k(),B(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(),B(s,{key:0,size:"small",type:"success",effect:"plain"},{default:r(()=>[u(y($.value),1)]),_:1})):w("",!0),n[3]||(n[3]=p("div",{class:"spacer"},null,-1)),l(g,{size:"small",icon:T(H),loading:d.value,onClick:n[0]||(n[0]=ut=>_(!0))},{default:r(()=>[...n[1]||(n[1]=[u("重载",-1)])]),_:1},8,["icon","loading"]),l(g,{size:"small",type:"primary",icon:T(Q),loading:v.value,onClick:F},{default:r(()=>[...n[2]||(n[2]=[u("保存",-1)])]),_:1},8,["icon","loading"])])]),default:r(()=>[t.description?(k(),G("p",ct,y(t.description),1)):w("",!0),p("div",lt,[l(K,{gutter:12},{default:r(()=>[l(O,{span:14},{default:r(()=>[l(f,{shadow:"never","body-style":"padding: 12px"},{header:r(()=>[...n[4]||(n[4]=[u("表单",-1)])]),default:r(()=>[W(i.$slots,"default",{payload:c.value,update:A},void 0,!0)]),_:3})]),_:3}),l(O,{span:10},{default:r(()=>[l(f,{shadow:"never","body-style":"padding: 0"},{header:r(()=>[...n[5]||(n[5]=[u("JSON 预览(保存即下发占位)",-1)])]),default:r(()=>[p("pre",dt,y(P.value),1)]),_:1})]),_:1})]),_:3})])]),_:3})]),_:3})}}}),At=Y(ft,[["__scopeId","data-v-1d51a575"]]);export{At as C,M as c,h as d,kt as l,b as n,Ct as s,st as u}; diff --git a/MiGu.Server/wwwroot/assets/ConfigPageBase-DOgE48Ff.css b/MiGu.Server/wwwroot/assets/ConfigPageBase-DOgE48Ff.css deleted file mode 100644 index f529b76..0000000 --- a/MiGu.Server/wwwroot/assets/ConfigPageBase-DOgE48Ff.css +++ /dev/null @@ -1 +0,0 @@ -.cpb-header[data-v-1d51a575]{display:flex;align-items:center;gap:8px}.cpb-title[data-v-1d51a575]{font-weight:600;font-size:15px;color:var(--mg-text-light)}.cpb-header .spacer[data-v-1d51a575]{flex:1}.cpb-desc[data-v-1d51a575]{color:var(--mg-text-muted);font-size:12.5px;margin:0 0 14px;line-height:1.6}.cpb-body[data-v-1d51a575]{margin-top:4px}.cpb-json[data-v-1d51a575]{margin:0;padding:14px;font-size:12px;line-height:1.55;font-family:ui-monospace,Menlo,Consolas,monospace;background:var(--mg-veil-2);color:var(--mg-text-light);max-height:520px;overflow:auto} diff --git a/MiGu.Server/wwwroot/assets/DashboardView-Rj8saK5Q.js b/MiGu.Server/wwwroot/assets/DashboardView-Rj8saK5Q.js deleted file mode 100644 index 49a6062..0000000 --- a/MiGu.Server/wwwroot/assets/DashboardView-Rj8saK5Q.js +++ /dev/null @@ -1,22 +0,0 @@ -import{aN as cd,bC as me,bp as fd,bj as hd,br as pd,aG as Lt,aD as z,bk as Se,bL as yt,aJ as $e,ai as Ye,bE as Ze,aI as xl,aK as $t,c8 as Ht,ay as Yt,t as dd,bX as gd,bs as bt,bl as ui,aE as vi,bH as bl,Q as yd,bS as Oa,bR as md,c1 as _l,aF as wl,bu as Sd,ac as xd,a9 as bd,aq as _d,T as wd,bJ as Ad,bt as ci,ao as Td,bQ as Cd,c6 as Dd,bb as Ld,bv as Id,X as Md,aC as Pd,aA as Ed,ar as Rd,ba as kd,ak as Vd}from"./index-D5GfLbIx.js";/* empty css *//* empty css *//* empty css *//* empty css */import{es as Al,ac as V,c6 as Nd,dd as mo,cn as os,ah as fa,ba as D,f as Tt,d9 as lf,d4 as uf,d2 as $,bm as Gt,z as mt,n as So,dS as Rt,J as Te,b6 as ot,X as ha,b8 as dr,cP as sn,P as Wt,y as ss,dF as zd,b1 as Gd,dl as Ne,cV as Dt,a8 as kr,cv as gt,cI as Mt,bz as ht,dw as U,dB as Od,ea as Bd,eb as vf,c5 as Fd,cu as Hd,cJ as Wd,ca as Ut,c7 as Pt,eq as xt,ag as cf,co as qe,aa as Re,di as pa,bI as Ud,m as Tl,bf as $d,j as ff,cH as lt,aL as Yd,aH as Zd,bk as K,bR as hf,cA as le,bN as pf,cR as Xd,a6 as df,bC as Fn,D as qd,ae as Kd,bJ as jd,a4 as Jd,c3 as Qd,dv as tg,l as eg,cz as rg,cE as ag,dX as ng,cy as ig,ak as da,aT as og,au as pt,bL as sg,cw as gf,cD as ls,bA as lg,c4 as ug,bT as vg,cp as q,cC as Zt,bV as Cl,be as cg,df as yr,dh as yf,cT as Nt,bH as fe,Z as Be,dQ as mf,C as kt,ab as St,bS as Vr,dY as Fe,e8 as ae,el as Et,e5 as ue,bE as Qt,dT as Ur,dC as Hn,_ as re,an as at,b3 as st,d0 as us,bO as fg,b4 as La,$ as Ft,aR as Sf,aY as $r,G as nt,aZ as ve,dz as Wn,a3 as Un,er as it,cb as hg,bn as pg,F as Ae,b$ as Yr,dn as Ia,dU as dg,b0 as ne,d5 as Ct,x as ce,da as Ce,b as $n,al as gg,h as Xt,a as mr,g as Ma,N as xf,d8 as be,i as te,A as ke,I as xo,af as yg,K as Bt,c2 as Z,aO as mg,t as Sg,v as _e,R as xg,w as vs,ep as bg,dV as Yn,dZ as bf,en as Sr,aI as Zr,aP as ut,bZ as _f,Q as Zn,s as xr,e3 as Br,aU as cs,e9 as fs,bb as _g,a9 as Pa,e7 as wf,aE as wg,aF as Kt,U as Ar,d6 as hs,dR as se,dK as Af,bo as Tf,bq as Xn,a2 as Cf,aA as fn,H as Ag,dP as hn,e as Df,aD as ze,bw as bo,dp as Jt,dA as ps,bs as Tg,a$ as At,o as Qe,et as pn,cx as Dl,e1 as ra,bd as Ll,dj as Cg,d1 as Lf,dr as Dg,ef as fi,bl as hi,db as dn,dc as la,M as Il,av as je,dg as Ea,d_ as Lg,aJ as Ig,eg as Nr,cO as Ml,e0 as Mg,d$ as _o,dW as ds,bh as ga,cN as ya,dm as Ra,eo as qn,dG as Pg,dD as If,b9 as Eg,k as Mf,b5 as Rg,Y as Pl,e2 as El,e6 as kg,dq as Vg,bj as Ng,aS as Pf,as as zg,aX as gs,de as gn,ai as Gr,ed as ys,aj as br,ej as Gg,dO as Og,u as Bg,em as Ef,bX as ua,at as Fg,c1 as ms,am as yn,c0 as wo,by as Ao,c$ as Hg,dH as pi,V as Rf,ek as It,aW as Ss,aK as Kn,eh as di,aN as Wg,aw as Ug,dE as $g,aB as Rl,aC as Yg,dy as kl,cr as jn,bx as To,cB as Zg,c8 as Jn,d as Vl,cK as Xg,aV as qg,E as Kg,cF as jg,cQ as Jg,br as ka,a5 as ma,ay as Qg,cq as kf,a_ as Nl,bF as ty,bB as Vf,cY as ey,bU as Nf,aq as zf,ar as ry,B as Gf,c_ as zl,cX as Of,bt as Bf,bu as Gl,c as Va,cs as Ff,cc as xs,dJ as ay,dI as ny,ei as iy,ap as oy,bY as sy,cZ as ly,bG as uy,ec as vy,d7 as Hf,bp as cy,bK as Ol,dt as fy,d3 as hy,aG as py,L as dy,q as gy,r as yy,cm as my,aQ as Wf,cL as Sy,cU as xy,bi as Uf,dM as bs,ct as by,ad as Bl,du as $f,dN as _y,cW as wy,bD as Yf,e4 as Zf,cS as Ba,bv as Ay,p as _s,bc as gi,dx as Co,a7 as Ty,O as Cy,ds as mn,bP as Dy,bg as Ly,cM as Iy,b_ as Qn,bW as My,dk as Py,ee as Do,az as Ey,dL as Fl,ao as Ry,bQ as Xf,aM as ky,cG as Vy,a0 as Ny,W as zy,a1 as Gy,b7 as Hl,S as Oy,b2 as Sn,ax as ws,T as yi,bM as By,cd as Fy,ce as Hy,cf as Wy,cg as Uy,ch as $y,ci as Yy,cj as Zy,ck as Xy,cl as qy,c9 as Wl}from"./install-D_iTbSFG.js";import{b as Ky,c as jy,l as Jy,a as Qy}from"./projection-BHFE6Meg.js";import"./reflection-BwOBPyb9.js";var tm=1e-8;function Ul(a,e){return Math.abs(a-e)P&&!jg(R-P)&&R 1;)o=o.parentNode;var s=n.getColorFromPalette(o.name||o.dataIndex+"",e);return r.depth>1&<(s)&&(s=Jg(s,(r.depth-1)/(i-1)*.5)),s}a.eachSeriesByType("sunburst",function(r){var n=r.getData(),i=n.tree;i.eachNode(function(o){var s=o.getModel(),l=s.getModel("itemStyle").getItemStyle();l.fill||(l.fill=t(o,r,i.root.height));var u=n.ensureUniqueItemVisual(o.dataIndex,"style");K(u,l)})})}function H_(a){a.registerChartView(z_),a.registerSeriesModel(G_),a.registerLayout(st(O_,"sunburst")),a.registerProcessor(st(Na,"sunburst")),a.registerVisual(F_),N_(a)}var Nv={color:"fill",borderColor:"stroke"},W_={symbol:1,symbolSize:1,symbolKeepAspect:1,legendIcon:1,visualMeta:1,liftZ:1,decal:1},Ge=Dt(),U_=function(a){V(e,a);function e(){var t=a!==null&&a.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},e.prototype.getInitialData=function(t,r){return $r(null,this)},e.prototype.getDataParams=function(t,r,n){var i=a.prototype.getDataParams.call(this,t,r);return n&&(i.info=Ge(n).info),i},e.type="series.custom",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,clip:!1},e}(Ft);function $_(a,e){return e=e||[0,0],$(["x","y"],function(t,r){var n=this.getAxis(t),i=e[r],o=a[r]/2;return n.type==="category"?n.getBandWidth():Math.abs(n.dataToCoord(i-o)-n.dataToCoord(i+o))},this)}function Y_(a){var e=a.master.getRect();return{coordSys:{type:"cartesian2d",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(t){return a.dataToPoint(t)},size:at($_,a)}}}function Z_(a,e){return e=e||[0,0],$([0,1],function(t){var r=e[t],n=a[t]/2,i=[],o=[];return i[t]=r-n,o[t]=r+n,i[1-t]=o[1-t]=e[1-t],Math.abs(this.dataToPoint(i)[t]-this.dataToPoint(o)[t])},this)}function X_(a){var e=a.getBoundingRect();return{coordSys:{type:"geo",x:e.x,y:e.y,width:e.width,height:e.height,zoom:a.getZoom()},api:{coord:function(t){return a.dataToPoint(t)},size:at(Z_,a)}}}function q_(a,e){var t=this.getAxis(),r=e instanceof Array?e[0]:e,n=(a instanceof Array?a[0]:a)/2;return t.type==="category"?t.getBandWidth():Math.abs(t.dataToCoord(r-n)-t.dataToCoord(r+n))}function K_(a){var e=a.getRect();return{coordSys:{type:"singleAxis",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(t){return a.dataToPoint(t)},size:at(q_,a)}}}function j_(a,e){return e=e||[0,0],$(["Radius","Angle"],function(t,r){var n="get"+t+"Axis",i=this[n](),o=e[r],s=a[r]/2,l=i.type==="category"?i.getBandWidth():Math.abs(i.dataToCoord(o-s)-i.dataToCoord(o+s));return t==="Angle"&&(l=l*Math.PI/180),l},this)}function J_(a){var e=a.getRadiusAxis(),t=a.getAngleAxis(),r=e.getExtent();return r[0]>r[1]&&r.reverse(),{coordSys:{type:"polar",cx:a.cx,cy:a.cy,r:r[1],r0:r[0]},api:{coord:function(n){var i=e.dataToRadius(n[0]),o=t.dataToAngle(n[1]),s=a.coordToPoint([i,o]);return s.push(i,o*Math.PI/180),s},size:at(j_,a)}}}function Q_(a){var e=a.getRect(),t=a.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:a.getCellWidth(),cellHeight:a.getCellHeight(),rangeInfo:{start:t.start,end:t.end,weeks:t.weeks,dayCount:t.allDay}},api:{coord:function(r,n){return a.dataToPoint(r,n)}}}}function Ip(a,e,t,r){return a&&(a.legacy||a.legacy!==!1&&!t&&!r&&e!=="tspan"&&(e==="text"||Z(a,"text")))}function Mp(a,e,t){var r=a,n,i,o;if(e==="text")o=r;else{o={},Z(r,"text")&&(o.text=r.text),Z(r,"rich")&&(o.rich=r.rich),Z(r,"textFill")&&(o.fill=r.textFill),Z(r,"textStroke")&&(o.stroke=r.textStroke),Z(r,"fontFamily")&&(o.fontFamily=r.fontFamily),Z(r,"fontSize")&&(o.fontSize=r.fontSize),Z(r,"fontStyle")&&(o.fontStyle=r.fontStyle),Z(r,"fontWeight")&&(o.fontWeight=r.fontWeight),i={type:"text",style:o,silent:!0},n={};var s=Z(r,"textPosition");t?n.position=s?r.textPosition:"inside":s&&(n.position=r.textPosition),Z(r,"textPosition")&&(n.position=r.textPosition),Z(r,"textOffset")&&(n.offset=r.textOffset),Z(r,"textRotation")&&(n.rotation=r.textRotation),Z(r,"textDistance")&&(n.distance=r.textDistance)}return zv(o,a),D(o.rich,function(l){zv(l,l)}),{textConfig:n,textContent:i}}function zv(a,e){e&&(e.font=e.textFont||e.font,Z(e,"textStrokeWidth")&&(a.lineWidth=e.textStrokeWidth),Z(e,"textAlign")&&(a.align=e.textAlign),Z(e,"textVerticalAlign")&&(a.verticalAlign=e.textVerticalAlign),Z(e,"textLineHeight")&&(a.lineHeight=e.textLineHeight),Z(e,"textWidth")&&(a.width=e.textWidth),Z(e,"textHeight")&&(a.height=e.textHeight),Z(e,"textBackgroundColor")&&(a.backgroundColor=e.textBackgroundColor),Z(e,"textPadding")&&(a.padding=e.textPadding),Z(e,"textBorderColor")&&(a.borderColor=e.textBorderColor),Z(e,"textBorderWidth")&&(a.borderWidth=e.textBorderWidth),Z(e,"textBorderRadius")&&(a.borderRadius=e.textBorderRadius),Z(e,"textBoxShadowColor")&&(a.shadowColor=e.textBoxShadowColor),Z(e,"textBoxShadowBlur")&&(a.shadowBlur=e.textBoxShadowBlur),Z(e,"textBoxShadowOffsetX")&&(a.shadowOffsetX=e.textBoxShadowOffsetX),Z(e,"textBoxShadowOffsetY")&&(a.shadowOffsetY=e.textBoxShadowOffsetY))}function Gv(a,e,t){var r=a;r.textPosition=r.textPosition||t.position||"inside",t.offset!=null&&(r.textOffset=t.offset),t.rotation!=null&&(r.textRotation=t.rotation),t.distance!=null&&(r.textDistance=t.distance);var n=r.textPosition.indexOf("inside")>=0,i=a.fill||"#000";Ov(r,e);var o=r.textFill==null;return n?o&&(r.textFill=t.insideFill||"#fff",!r.textStroke&&t.insideStroke&&(r.textStroke=t.insideStroke),!r.textStroke&&(r.textStroke=i),r.textStrokeWidth==null&&(r.textStrokeWidth=2)):(o&&(r.textFill=a.fill||t.outsideFill||"#000"),!r.textStroke&&t.outsideStroke&&(r.textStroke=t.outsideStroke)),r.text=e.text,r.rich=e.rich,D(e.rich,function(s){Ov(s,s)}),r}function Ov(a,e){e&&(Z(e,"fill")&&(a.textFill=e.fill),Z(e,"stroke")&&(a.textStroke=e.fill),Z(e,"lineWidth")&&(a.textStrokeWidth=e.lineWidth),Z(e,"font")&&(a.font=e.font),Z(e,"fontStyle")&&(a.fontStyle=e.fontStyle),Z(e,"fontWeight")&&(a.fontWeight=e.fontWeight),Z(e,"fontSize")&&(a.fontSize=e.fontSize),Z(e,"fontFamily")&&(a.fontFamily=e.fontFamily),Z(e,"align")&&(a.textAlign=e.align),Z(e,"verticalAlign")&&(a.textVerticalAlign=e.verticalAlign),Z(e,"lineHeight")&&(a.textLineHeight=e.lineHeight),Z(e,"width")&&(a.textWidth=e.width),Z(e,"height")&&(a.textHeight=e.height),Z(e,"backgroundColor")&&(a.textBackgroundColor=e.backgroundColor),Z(e,"padding")&&(a.textPadding=e.padding),Z(e,"borderColor")&&(a.textBorderColor=e.borderColor),Z(e,"borderWidth")&&(a.textBorderWidth=e.borderWidth),Z(e,"borderRadius")&&(a.textBorderRadius=e.borderRadius),Z(e,"shadowColor")&&(a.textBoxShadowColor=e.shadowColor),Z(e,"shadowBlur")&&(a.textBoxShadowBlur=e.shadowBlur),Z(e,"shadowOffsetX")&&(a.textBoxShadowOffsetX=e.shadowOffsetX),Z(e,"shadowOffsetY")&&(a.textBoxShadowOffsetY=e.shadowOffsetY),Z(e,"textShadowColor")&&(a.textShadowColor=e.textShadowColor),Z(e,"textShadowBlur")&&(a.textShadowBlur=e.textShadowBlur),Z(e,"textShadowOffsetX")&&(a.textShadowOffsetX=e.textShadowOffsetX),Z(e,"textShadowOffsetY")&&(a.textShadowOffsetY=e.textShadowOffsetY))}var Pp={position:["x","y"],scale:["scaleX","scaleY"],origin:["originX","originY"]},Bv=Mt(Pp);Af(ma,function(a,e){return a[e]=1,a},{});ma.join(", ");var In=["","style","shape","extra"],Hr=Dt();function el(a,e,t,r,n){var i=a+"Animation",o=ka(a,r,n)||{},s=Hr(e).userDuring;return o.duration>0&&(o.during=s?at(nw,{el:e,userDuring:s}):null,o.setToFinal=!0,o.scope=a),K(o,t[i]),o}function ln(a,e,t,r){r=r||{};var n=r.dataIndex,i=r.isInit,o=r.clearStyle,s=t.isAnimationEnabled(),l=Hr(a),u=e.style;l.userDuring=e.during;var v={},c={};if(ow(a,e,c),Hv("shape",e,c),Hv("extra",e,c),!i&&s&&(iw(a,e,v),Fv("shape",a,e,v),Fv("extra",a,e,v),sw(a,e,u,v)),c.style=u,tw(a,c,o),rw(a,e),s)if(i){var f={};D(In,function(p){var d=p?e[p]:e;d&&d.enterFrom&&(p&&(f[p]=f[p]||{}),K(p?f[p]:f,d.enterFrom))});var h=el("enter",a,e,t,n);h.duration>0&&a.animateFrom(f,h)}else ew(a,e,n||0,t,v);Ep(a,e),u?a.dirty():a.markRedraw()}function Ep(a,e){for(var t=Hr(a).leaveToProps,r=0;r',A=window.open();A.document.write(w),A.document.title=i}},e.getDefaultOption=function(t){var r={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])};return r},e}(ge),nc="__ec_magicType_stack__",PA=[["line","bar"],["stack"]],EA=function(a){V(e,a);function e(){return a!==null&&a.apply(this,arguments)||this}return e.prototype.getIcons=function(){var t=this.model,r=t.get("icon"),n={};return D(t.get("type"),function(i){r[i]&&(n[i]=r[i])}),n},e.getDefaultOption=function(t){var r={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}};return r},e.prototype.onclick=function(t,r,n){var i=this.model,o=i.get(["seriesIndex",n]);if(ic[n]){var s={series:[]},l=function(c){var f=c.subType,h=c.id,p=ic[n](f,h,c,i);p&&(ot(p,c.option),s.series.push(p));var d=c.coordinateSystem;if(d&&d.type==="cartesian2d"&&(n==="line"||n==="bar")){var g=d.getAxesByScale("ordinal")[0];if(g){var y=g.dim,S=y+"Axis",m=c.getReferringComponents(S,Ar).models[0],x=m.componentIndex;s[S]=s[S]||[];for(var b=0;b<=x;b++)s[S][x]=s[S][x]||{};s[S][x].boundaryGap=n==="bar"}}};D(PA,function(c){Pt(c,n)>=0&&D(c,function(f){i.setIconStatus(f,"normal")})}),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:o==null?null:{seriesIndex:o}},l);var u,v=n;n==="stack"&&(u=Ct({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),i.get(["iconStatus",n])!=="emphasis"&&(v="tiled")),r.dispatchAction({type:"changeMagicType",currentType:v,newOption:s,newTitle:u,featureName:"magicType"})}},e}(ge),ic={line:function(a,e,t,r){if(a==="bar")return Ct({id:e,type:"line",data:t.get("data"),stack:t.get("stack"),markPoint:t.get("markPoint"),markLine:t.get("markLine")},r.get(["option","line"])||{},!0)},bar:function(a,e,t,r){if(a==="line")return Ct({id:e,type:"bar",data:t.get("data"),stack:t.get("stack"),markPoint:t.get("markPoint"),markLine:t.get("markLine")},r.get(["option","bar"])||{},!0)},stack:function(a,e,t,r){var n=t.get("stack")===nc;if(a==="line"||a==="bar")return r.setIconStatus("stack",n?"normal":"emphasis"),Ct({id:e,stack:n?"":nc},r.get(["option","stack"])||{},!0)}};bs({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(a,e){e.mergeOption(a.newOption)});var si=new Array(60).join("-"),Wr=" ";function RA(a){var e={},t=[],r=[];return a.eachRawSeries(function(n){var i=n.coordinateSystem;if(i&&(i.type==="cartesian2d"||i.type==="polar")){var o=i.getBaseAxis();if(o.type==="category"){var s=o.dim+"_"+o.index;e[s]||(e[s]={categoryAxis:o,valueAxis:i.getOtherAxis(o),series:[]},r.push({axisDim:o.dim,axisIndex:o.index})),e[s].series.push(n)}else t.push(n)}else t.push(n)}),{seriesGroupByCategoryAxis:e,other:t,meta:r}}function kA(a){var e=[];return D(a,function(t,r){var n=t.categoryAxis,i=t.valueAxis,o=i.dim,s=[" "].concat($(t.series,function(h){return h.name})),l=[n.model.getCategories()];D(t.series,function(h){var p=h.getRawData();l.push(h.getRawData().mapArray(p.mapDimension(o),function(d){return d}))});for(var u=[s.join(Wr)],v=0;v
e[0][1]&&(e[0][1]=i[0]),i[1]m[1]||y[1]
")+`
${ct}`}},legend:{show:!1},xAxis:{type:"time",axisLine:{lineStyle:{color:Y}},axisLabel:{color:J,fontSize:11,formatter:Q=>{const et=new Date(Q);return`${String(et.getHours()).padStart(2,"0")}:00`}},splitLine:{show:!1}},yAxis:{type:"value",axisLine:{show:!1},axisLabel:{color:J,fontSize:11,fontFamily:"JetBrains Mono, monospace"},splitLine:{lineStyle:{color:Y,type:"dashed"}}},series:[{name:"已完成",type:"line",smooth:!0,showSymbol:!1,data:W.map(Q=>[Q[0],Q[1]]),lineStyle:{width:2,color:G},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:`${G}55`},{offset:1,color:`${G}00`}]}},itemStyle:{color:G}},{name:"执行中",type:"line",smooth:!0,showSymbol:!1,data:W.map(Q=>[Q[0],Q[2]]),lineStyle:{width:2,color:O},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:`${O}55`},{offset:1,color:`${O}00`}]}},itemStyle:{color:O}}]})}let j=null;function rt(){if(!s.value)return;j?.dispose(),j=Wl(s.value,void 0,{renderer:"canvas"});const O=u("--mg-text-light","#1a0f3d"),J=!O.startsWith("rgba(255")&&O.toLowerCase()!=="#fff"&&O.toLowerCase()!=="#ffffff"?"#ffffff":"rgba(28,14,62,0.95)",Y=P.value;j.setOption({backgroundColor:"transparent",tooltip:{trigger:"item",formatter:"{b}: {c} 台 ({d}%)"},color:Y.map(W=>W.color),series:[{name:"AGV 状态",type:"pie",radius:["62%","88%"],center:["50%","50%"],avoidLabelOverlap:!1,itemStyle:{borderColor:J,borderWidth:2,borderRadius:3},emphasis:{itemStyle:{shadowBlur:12,shadowColor:"rgba(124, 58, 237, 0.30)"},scale:!0,scaleSize:4},label:{show:!1},labelLine:{show:!1},data:Y.map(W=>({name:W.label,value:W.value}))}]})}function tt(){H?.resize(),j?.resize()}return fd(async()=>{[t.value,r.value,n.value,i.value]=await Promise.all([Ky(),jy(),Jy(),Qy()]),r.value,await hd(),X(),rt(),window.addEventListener("resize",tt),f=setInterval(h,1e3)}),pd(()=>{window.removeEventListener("resize",tt),f&&clearInterval(f),H?.dispose(),H=null,j?.dispose(),j=null}),(O,G)=>{const J=yd,Y=dd,W=wd,Q=bd,et=xd;return bt(),Lt("div",fC,[z("section",hC,[z("div",pC,[z("span",{class:Se(["status-conn",p.value])},[z("span",{class:Se(["mg-live-dot",d.value])},null,2),z("span",null,yt(g.value),1)],2),G[4]||(G[4]=z("span",{class:"status-divider"},null,-1)),z("span",dC,[G[1]||(G[1]=z("span",{class:"status-stat-label"},"在线 AGV",-1)),z("span",gC,[$e(yt(y.value)+" ",1),z("span",yC,"/ "+yt(n.value.length||"—"),1)])]),G[5]||(G[5]=z("span",{class:"status-divider"},null,-1)),z("span",mC,[G[2]||(G[2]=z("span",{class:"status-stat-label"},"告警",-1)),z("span",{class:Se(["status-stat-value mg-num",{"is-danger":F.value>0}])},yt(F.value),3)]),G[6]||(G[6]=z("span",{class:"status-divider"},null,-1)),z("span",SC,[G[3]||(G[3]=z("span",{class:"status-stat-label"},"活跃任务",-1)),z("span",xC,yt(S.value),1)])]),z("div",bC,[z("span",_C,[z("span",wC,yt(c.value),1),z("span",AC,yt(v.value),1)])])]),z("section",TC,[G[13]||(G[13]=z("div",{class:"hero-bg","aria-hidden":"true"},[z("div",{class:"hero-orb hero-orb-a"}),z("div",{class:"hero-orb hero-orb-b"}),z("div",{class:"hero-grid"})],-1)),z("div",CC,[G[7]||(G[7]=z("div",{class:"hero-tag"},[z("span",{class:"tag-dot"}),z("span",null,"智能调度 · 一站式平台")],-1)),G[8]||(G[8]=z("h1",{class:"hero-title"},"迷毂智能调度平台",-1)),G[9]||(G[9]=z("p",{class:"hero-desc"},"以下是系统快捷入口,也可以通过点击「添加」功能进行调整",-1)),z("div",DC,[(bt(!0),Lt(Ye,null,Ze(m.value,(B,ct)=>(bt(),Lt("button",{key:B.key,class:Se(["quick-item",{primary:B.primary}]),style:ui({animationDelay:`${ct*60}ms`}),title:B.hint??B.label,onClick:vt=>x(B)},[z("span",IC,[$t(J,{size:22},{default:Ht(()=>[(bt(),vi(bl(B.icon)))]),_:2},1024)]),z("span",MC,yt(B.label),1)],14,LC))),128))])]),z("div",PC,[G[12]||(G[12]=z("div",{class:"hero-glow"},null,-1)),(bt(),Lt("svg",EC,[G[10]||(G[10]=xl('0?-S/I:0,va=I>0?f/I:0,St=s==="left"?1:-1,nt=(e.x+t.x)/2+St*le*ya,ot=(e.y+t.y)/2+St*le*va,ba=Math.atan2(e.y-ot,e.x-nt)*180/Math.PI,ga=Math.atan2(t.y-ot,t.x-nt)*180/Math.PI;return["1",nt.toFixed(3),ot.toFixed(3),n.toFixed(3),ba.toFixed(3),ga.toFixed(3)].join(",")}function Ue(e){e&&(x.site.layer=e,x.track.layer=e,A.success(`默认图层已切到 "${e}"`))}async function Le(){try{const t=((await K.prompt("请输入新图层名(同名会被忽略)","新建图层",{inputValue:""})).value??"").trim();if(!t)return;if(B.value.includes(t)){x.site.layer=t,x.track.layer=t,A.info(`图层 "${t}" 已存在,已切到该层`);return}gt(t),x.site.layer=t,x.track.layer=t,A.success(`已创建图层 "${t}",下次创建对象会落到该层`)}catch{}}async function et(e){if($.setTool(e),ae.value.siteA=null,xe.value=!1,e==="select.clear"){p.clear(),await J.clearSelection().catch(()=>{});return}if(Ie.includes(e)&&g(),e.startsWith("align.")){await Xt(e.replace("align.",""));return}if(e.startsWith("batch.")){await Ht(e);return}if(e==="transform.delete"){await R();return}if(e.startsWith("select.byType.")){const t=e.replace("select.byType.","");X(t);return}if(e==="show.controlPoints"&&($.showControlPoints.value=!$.showControlPoints.value),e==="show.controlHandles"&&($.showControlHandles.value=!$.showControlHandles.value),e==="draw.image"&&Ze("image"),e==="draw.model"&&Ze("model"),e==="transform.copyFields"){await Gt();return}}function X(e){e==="site"?p.filterByKind("site"):e==="polyline"||e==="bezier"||e==="arc"?p.items.value=p.items.value.filter(t=>{if(t.kind!=="track")return!1;const n=t.typeName.toLowerCase();return e==="polyline"?n==="uitrack":e==="bezier"?n.includes("bezier"):e==="arc"?n.includes("arc"):!1}):e==="decor"?p.filterByKind("special"):e==="currentLayer"&&O.value?.layer&&(p.items.value=p.items.value.filter(t=>t.layer===O.value.layer))}async function Ve(e){M.x=e.x,M.y=e.y;const t=$.activeTool.value;if(!(xe.value&&Ie.includes(t))&&!Ke.value){if(t==="draw.site"||t==="draw.sites.continuous"){await c(e.x,e.y);return}if(t==="draw.track.polyline"||t==="draw.track.bezier"||t==="draw.track.arc"||t==="draw.track.nurbs"){try{const n=await j.pick();await qe(n.siteId)}catch{}return}}}function Be(e){p.set(Ce(e))}function Ce(e){const t=[],n=Z.selectFilter;for(const s of e){const f=/^UI([A-Za-z]+)-(\d+)$/.exec(s)??/^([A-Za-z]+)-(\d+)$/.exec(s);if(!f)continue;const S=f[1],I=Number(f[2]),L=S.toLowerCase();let P;L==="site"?P="site":L==="car"||L==="vehicle"?P="car":L.includes("track")?P="track":P="special",!(P==="site"&&!n.sites)&&(P==="track"&&!n.tracks||P==="car"&&!n.cars||P==="special"&&!n.decor||t.push({kind:P,id:I,name:s,typeName:s.startsWith("UI")?`UI${S}`:S}))}return t}async function qe(e){if(e<=0){A.warning("请先拾取一个站点");return}if(ae.value.siteA==null){ae.value.siteA=e,A.success(`已选起点站 #${e},请再拾取终点站`);return}const t=ae.value.siteA,n=e;if(ae.value.siteA=null,t===n){A.warning("起止站点不能相同");return}const s=$.activeTool.value==="draw.track.bezier"?"bezier":$.activeTool.value==="draw.track.arc"?"arc":$.activeTool.value==="draw.track.nurbs"?"nurbs":"track";let f,S="";if(s==="bezier"||s==="nurbs"){const L=await tt(t,n,s);if(L==="cancelled")return;L!=null&&(f=L.typeInfo,S=`(控制点 ${L.midCount})`)}else if(s==="arc"){const L=await be(t,n);if(L==="cancelled")return;L!=null&&(f=L.typeInfo,S=`(半径 ${L.radius.toFixed(0)})`)}let I=-1;await m.run({label:`新建${Pe(s)} (${t}→${n})${S}`,apply:async()=>{const L={siteA:t,siteB:n,layer:x.track.layer};f&&(L.typeInfo=f),I=(await j.createTrack(s,L)).id},revert:async()=>{I>0&&await j.deleteObject("track",I)}}),Ge(s)}async function tt(e,t,n){const s=await Me(e),f=await Me(t);if(!s||!f)return A.warning(`无法拉到 site #${e} / #${t} 的 x,y,将不带 typeInfo 创建 track(控制点会用兜底直线)`),null;const S=Pe(n);let I;try{const P=await K.prompt("请输入中间控制点个数(不含起止站点;默认 2,输入 0 则不带控制点直接连接两站点)",`创建${S}`,{inputValue:"2",inputPattern:/^\d+$/,inputErrorMessage:"请输入非负整数"});I=Math.max(0,Math.floor(Number(P.value)))}catch{return"cancelled"}if(I===0)return{typeInfo:pe([s,f],n==="bezier"?2:3),midCount:0};A.info(`请在画布上依次点选 ${I} 个中间控制点(任意位置;右键取消创建)`),Ke.value=!0;const L=[];try{for(let P=0;P{n=(await j.createSite({x:e,y:t,layer:x.site.layer,name:`${x.site.namePrefix}-${Date.now()%1e5}`})).id},revert:async()=>{n>0&&await j.deleteObject("site",n)}})}async function R(){const e=[...p.items.value];if(e.length===0)return;const t=[];for(const n of e)try{const s=await J.getBundle(n.kind,n.id);t.push({kind:n.kind,typeName:s.typeName,data:{...s.fields??{}}})}catch{}await m.run({label:`删除 ${e.length} 个对象`,apply:async()=>{const n=e.map(s=>({action:"delete",kind:s.kind,id:s.id}));await j.batch(n),p.clear()},revert:async()=>{const n=t.map(s=>({action:"create",kind:Yt(s.kind,s.typeName),data:s.data}));n.length&&(await j.batch(n),A.success(`已恢复 ${n.length} 个对象(注意:id 已重排)`))}})}function Yt(e,t){const n=(t??"").toLowerCase();if(e==="track")return n.includes("bezier")?"bezier":n.includes("arc")?"arc":n.includes("nurbs")?"nurbs":"track";if(e==="special"){if(n.includes("image"))return"image";if(n.includes("text"))return"text";if(n.includes("model"))return"model"}return e}async function Xt(e){const t=[];for(const s of p.items.value)if(s.kind!=="track")try{const f=await J.getBundle(s.kind,s.id),S=Number(f.fields?.x??0),I=Number(f.fields?.y??0);t.push({kind:s.kind,id:s.id,x:S,y:I})}catch{}if(t.length<2){A.warning("对齐需要选中至少 2 个对象");return}const n=Bn(t,e);if(n.length===0){A.info("对齐无变化");return}await m.run({label:`对齐 (${e})`,apply:async()=>{await j.batch(n)},revert:async()=>{const s=t.map(f=>({action:"patch",kind:f.kind,id:f.id,data:{x:f.x,y:f.y}}));await j.batch(s)}})}async function Ht(e){if(e==="batch.linearH"||e==="batch.linearV"){const t=e==="batch.linearH"?"横向":"纵向";try{const{value:n}=await K.prompt(`输入 ${t}站点数量`,"批量生成",{inputValue:"5",inputType:"number"}),s=Math.max(2,Math.floor(Number(n))),f=await K.prompt("起点 X","批量生成",{inputValue:"0"}),S=await K.prompt("起点 Y","批量生成",{inputValue:"0"}),I=await K.prompt("终点 X","批量生成",{inputValue:"5000"}),L=await K.prompt("终点 Y","批量生成",{inputValue:"0"}),P=e==="batch.linearH"?Dn(Number(f.value),Number(I.value),Number(S.value),{count:s,layer:x.site.layer}):Rn(Number(f.value),Number(S.value),Number(L.value),{count:s,layer:x.site.layer});await at(`${t}间隔生成 ${s}`,P)}catch{}return}if(e==="batch.matrix"){try{const t=Number((await K.prompt("行数","矩阵生成",{inputValue:"3"})).value),n=Number((await K.prompt("列数","矩阵生成",{inputValue:"3"})).value),s=Number((await K.prompt("x1","矩阵生成",{inputValue:"0"})).value),f=Number((await K.prompt("y1","矩阵生成",{inputValue:"0"})).value),S=Number((await K.prompt("x2","矩阵生成",{inputValue:"5000"})).value),I=Number((await K.prompt("y2","矩阵生成",{inputValue:"5000"})).value),L=jn(s,f,S,I,{rows:t,cols:n,layer:x.site.layer});await at(`矩阵生成 ${t}×${n}`,L)}catch{}return}if(e==="batch.circular"){try{const t=Number((await K.prompt("圆心 X","环形阵列",{inputValue:"0"})).value),n=Number((await K.prompt("圆心 Y","环形阵列",{inputValue:"0"})).value),s=Number((await K.prompt("半径 (mm)","环形阵列",{inputValue:"2000"})).value),f=Number((await K.prompt("站点数量","环形阵列",{inputValue:"8"})).value),S=On(t,n,s,{count:f,layer:x.site.layer});await at(`环形阵列 r=${s} n=${f}`,S)}catch{}return}if(e==="batch.alongPath"){await Wt();return}}async function Wt(){const e=p.items.value.filter(f=>f.kind==="track");if(e.length===0){A.warning("请先选中至少 1 条路径");return}let t=500,n=!1;try{const{value:f}=await K.prompt("输入采样间距 (mm)","沿路径采样",{inputValue:"500",inputType:"number"});t=Math.max(10,Math.floor(Number(f)));const{value:S}=await K.prompt("是否包含端点?输入 1 包含,0 不包含","沿路径采样",{inputValue:"0"});n=Number(S)===1}catch{return}const s=[];await m.run({label:`沿 ${e.length} 条路径间距 ${t}mm 采样`,apply:async()=>{for(const f of e){const S=await j.sampleSitesAlongTrack(f.id,{spacingMm:t,includeEndpoints:n,layer:x.site.layer});s.push(...S.ids)}A.success(`已采样生成 ${s.length} 个站点`)},revert:async()=>{if(!s.length)return;const f=s.map(S=>({action:"delete",kind:"site",id:S}));await j.batch(f)}})}async function Gt(){if(p.items.value.length<2){A.warning("字段复制需要 ≥ 2 个选中对象(第 1 个为源,其余为目标)");return}const[e,...t]=p.items.value;try{const{value:n}=await K.prompt("输入要复制的字段名(逗号分隔),例如:x,y,layerName","字段复制",{inputValue:"x,y"}),s=n.split(",").map(S=>S.trim()).filter(Boolean);if(!s.length)return;const f=new Map;for(const S of t)try{const I=await J.getBundle(S.kind,S.id),L={};for(const P of s)L[P]=String(I.fields?.[P]??"");f.set(`${S.kind}:${S.id}`,L)}catch{}await m.run({label:`字段复制 ${s.join(",")} → ${t.length} 个`,apply:async()=>{const S=await j.copyFieldsTo(e.kind,e.id,s,t.map(I=>({kind:I.kind,id:I.id})));A.success(`已复制 ${S.copied} 项字段`)},revert:async()=>{const S=t.flatMap(I=>{const L=f.get(`${I.kind}:${I.id}`);return L?[{action:"patch",kind:I.kind,id:I.id,data:L}]:[]});S.length&&await j.batch(S)}})}catch{}}async function at(e,t){if(t.length===0)return;let n=[];await m.run({label:e,apply:async()=>{n=(await j.batch(t)).results.filter(f=>f.ok&&f.action==="create"&&f.result?.id).map(f=>({kind:f.result.kind,id:f.result.id}))},revert:async()=>{const s=n.map(f=>({action:"delete",kind:f.kind,id:f.id}));s.length&&await j.batch(s)}}),A.success(`${e} 完成`)}async function Ye(){if(p.items.value.length===0){O.value=null,se.value=[],ie.value=[],te.value=[];return}const e=p.items.value[0];qt();try{const t=await J.getBundle(e.kind,e.id);O.value=t.summary,se.value=Object.entries(t.fields).map(([n,s])=>({key:n,value:String(s)})),ie.value=t.methods,te.value=(t.status??[]).map(n=>({key:n.key,value:n.value}))}catch(t){A.error(`加载属性失败:${t.message}`)}finally{Zt()}}function qt(){ve.value=!0}function Zt(){ve.value=!1}async function Jt(e){if(!O.value||p.items.value.length===0)return;const t=p.items.value[0],n=O.value.id,s=O.value.name??"";s!==e&&(await m.run({label:`重命名 ${s||"(无)"} → ${e}`,apply:async()=>{await J.setField(t.kind,n,"name",e)},revert:async()=>{try{await J.setField(t.kind,n,"name",s)}catch(f){A.warning(`回滚名称失败:${f.message}`)}}}),A.success("名称已更新"))}async function Qt(e){if(!O.value||p.items.value.length===0)return;const t=p.items.value[0],n=O.value.id,s=O.value.layer??"";s!==e&&(await m.run({label:`修改图层 ${s||"(无)"} → ${e}`,apply:async()=>{await J.setField(t.kind,n,"layerName",e)},revert:async()=>{try{await J.setField(t.kind,n,"layerName",s)}catch(f){A.warning(`回滚图层失败:${f.message}`)}}}),await Ye())}async function vt(e,t){if(!O.value)return;const n=p.items.value[0];let s;try{const f=await J.getBundle(n.kind,O.value.id);s=f.fields?.[e]!=null?String(f.fields[e]):void 0}catch{}await m.run({label:`修改 ${e}`,apply:async()=>{await J.setField(n.kind,O.value.id,e,t)},revert:async()=>{if(s!==void 0)try{await J.setField(n.kind,O.value.id,e,s)}catch(f){A.warning(`回滚 ${e} 失败:${f.message}`)}else A.warning(`回滚 ${e}:没拿到原值快照,仅本地撤销`)}}),await Ye()}async function ea(){try{const e=(await K.prompt("字段名","新增字段",{inputPattern:/^[A-Za-z0-9_]+$/})).value,t=(await K.prompt("字段值","新增字段",{inputValue:""})).value;await vt(e,t)}catch{}}async function ta(e){if(O.value)try{await J.execute(p.items.value[0].kind,O.value.id,e),A.success(`已执行 ${e}`),await Ye()}catch(t){A.error(`执行失败:${t.message}`)}}function aa(){localStorage.setItem("mapEditor.defaults",JSON.stringify(x)),A.success("新建默认已保存(下次创建对象时生效)")}function bt(e){const t=e.site??e.Site,n=e.track??e.Track,s=(S,I,L)=>Number(S?.[I]??S?.[L]??0),f=(S,I,L)=>!!(S?.[I]??S?.[L]);return Ua({site:{drawScale:s(t,"drawScale","DrawScale"),dotRadiusNormal:s(t,"dotRadiusNormal","DotRadiusNormal"),dotRadiusSelected:s(t,"dotRadiusSelected","DotRadiusSelected"),selectionRingM:s(t,"selectionRingM","SelectionRingM"),colorNormalArgb:s(t,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:s(t,"colorSelectedArgb","ColorSelectedArgb"),labelColorNormalArgb:s(t,"labelColorNormalArgb","LabelColorNormalArgb"),labelColorSelectedArgb:s(t,"labelColorSelectedArgb","LabelColorSelectedArgb")},track:{drawScale:s(n,"drawScale","DrawScale"),widthNormal:s(n,"widthNormal","WidthNormal"),widthSelected:s(n,"widthSelected","WidthSelected"),showDirectionArrows:f(n,"showDirectionArrows","ShowDirectionArrows"),colorNormalArgb:s(n,"colorNormalArgb","ColorNormalArgb"),colorSelectedArgb:s(n,"colorSelectedArgb","ColorSelectedArgb")}})}async function lt(){G.value=!0;try{const e=await J.getViewportStyle();C.value=bt(e)}catch(e){console.warn("[MapEditor] 加载视口样式失败:",e)}finally{G.value=!1}}function la(e){e.site&&(ce.site=e.site,C.value&&(C.value={...C.value,site:{...e.site}})),e.track&&(ce.track=e.track,C.value&&(C.value={...C.value,track:{...e.track}})),ke&&clearTimeout(ke),ke=setTimeout(()=>{const t={...ce};ce={},na(t)},350)}async function na(e){const t=++re;oe.value=!0;try{const n={};e.site&&(n.site=e.site),e.track&&(n.track=e.track);const s=await J.patchViewportStyle(n);if(t!==re)return;C.value=bt(s)}catch(n){A.error(`视口样式更新失败:${n.message}`),await lt()}finally{t===re&&(oe.value=!1)}}function oa(e){A.info("图层可见 / 可选切换暂时仅本地生效,后续接入反射 API")}function gt(e){Y.value.find(t=>t.name===e)||(Y.value=[...Y.value,{name:e,visible:!0,selectable:!0,color:"#cccccc"}],B.value=[...B.value,e])}async function wt(){try{const e=await st.get();Q.value=!!e.configured}catch{Q.value=!1}E.value=!0}function sa(){try{b.value=localStorage.getItem(Nt)==="1";const e=Number(localStorage.getItem(Ft));Number.isFinite(e)&&e>=300&&e<=720&&(q.value=e)}catch{}}fe(b,e=>{try{localStorage.setItem(Nt,e?"1":"0")}catch{}}),fe(q,e=>{try{localStorage.setItem(Ft,String(Math.round(e)))}catch{}});async function ia(){if(!b.value)try{const e=await st.get();Q.value=!!e.configured}catch{Q.value=!1}b.value=!b.value}async function kt(e){De();const t=(e.created??[]).filter(s=>typeof s=="object"&&s!=null&&typeof s.id=="number"&&!s.error);if(t.length===0)return;const n={label:`AI 生图:落地 ${t.length} 个对象`,apply:async()=>{},revert:async()=>{const s=t.map(f=>({action:"delete",kind:f.kind,id:f.id}));await j.batch(s),A.success(`已撤销 AI 生图(删除 ${s.length} 个对象)`)}};await m.run(n)}async function ra(){const e=await Ba();if(e==="cancel")return;let t=_.value.trim();t||(t=await Vt(),t&&(_.value=t));let n,s=!1;if(e==="replace"){if(!t){A.warning("未找到可覆盖的原地图,请选择「保存成新项目」");return}n=t,s=!0}else{const f=await Da("保存成新地图",t);if(!f)return;n=f}W.value=!0;try{let f=await it.save(n,s);if(!f.ok&&f.conflict&&e==="new"){try{await K.confirm(`服务器已存在地图「${n}」,是否覆盖该文件?`,"覆盖确认",{type:"warning",confirmButtonText:"覆盖",cancelButtonText:"取消"})}catch{return}f=await it.save(n,!0)}if(!f.ok){A.error(`保存失败:${f.message}`);return}e==="replace"?A.success(`已覆盖保存地图「${n}」`):(_.value=f.data.name,A.success(`新地图「${f.data.name}」已保存到服务器`)),await y.push({path:"/admin/maps"})}catch(f){A.error(`保存失败:${f.message}`)}finally{W.value=!1}}function Ze(e){z.value=e,u.value=e==="image"?"image/*":".obj,.glb,.gltf,.fbx,.cyclemodel",k.value?.click()}async function ua(e){const t=e.target,n=t.files?.[0];if(n)try{const s=await n.arrayBuffer(),f=da(s),S=await j.uploadAsset(n.name,f);A.success(`已上传:${S.fileName}`),z.value==="image"?await j.createImage({x:0,y:0,imagePath:S.savedPath,size:1e3}):await j.createModel({x:0,y:0,modelPath:S.savedPath,scale:1}),De()}catch(s){A.error(`上传失败:${s.message}`)}finally{t.value=""}}function da(e){let t="";const n=new Uint8Array(e);for(let s=0;sl&&(e.scrollTop=r-e.clientHeight)}function z$(e,t,n,a,o){const r=Date.now();let s;const l=()=>{const u=Date.now()-r,c=V$(u>a?a:u,t,n,a);Eu(e)?e.scrollTo(window.pageXOffset,c):e.scrollTop=c,u{s&&fo(s)}}const p0=(e,t)=>Eu(t)?e.ownerDocument.documentElement:t,h0=e=>Eu(e)?window.scrollY:e.scrollTop,sf=(e,t={})=>{Gt(e)||rn("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||ge("popup"),a=C(()=>n.bm("parent","hidden"));let o=0,r=!1,s="0",l=!1;const u=()=>{l||(l=!0,setTimeout(()=>{typeof document>"u"||r&&document&&(document.body.style.width=s,ra(document.body,a.value))},200))};pe(e,c=>{if(!c){u();return}l=!1,r=!Ao(document.body,a.value),r&&(s=document.body.style.width,Ua(document.body,a.value)),o=WS(n.namespace.value);const d=document.documentElement.clientHeight