Files
Migu2.0/MiGu.Server/wwwroot/assets/MapManagementView-CccyKhbv.js
T
zhaowei.huangandCursor 7db98c18b2 chore(web): 重新构建前端静态资源
同步工作流编辑器组件的 Vite 构建产物与 components.d.ts 自动声明。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 18:40:52 +08:00

5 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{aI as te,bI as he,b7 as ae,b9 as d,aE as h,aB as _,aH as t,R as se,bt as oe,bn as xe,r as le,bc as Ve,bJ as n,aG as g,bK as re,bA as ie,aC as E,ab as ue,bq as B,_ as Ee,G as Ie,N as ce,O as de,a4 as pe,ai as L,bj as J,S as Te,bh as p,bg as Be,ax as Q,X as M,Y as j,aa as me,Z as fe,ak as ne,E as ge,aD as W,bL as Ne,ad as ve,ac as ze,bx as Oe,a9 as Ue}from"./index-Dg4NaXsE.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{b as A}from"./mapEdit-TNAQr3Be.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */const _e="mapEditor.mapConnections.v1",be="mapEditor.mapIdRegistry.v1";function K(){try{const i=localStorage.getItem(_e);if(!i)return[];const s=JSON.parse(i);return Array.isArray(s)?s:[]}catch{return[]}}function ee(i){localStorage.setItem(_e,JSON.stringify(i))}function Ae(){try{return JSON.parse(localStorage.getItem(be)??"{}")||{}}catch{return{}}}function De(i){localStorage.setItem(be,JSON.stringify(i))}function X(i){if(!i)return 0;const s=Ae();if(s[i]!=null)return s[i];const b=Object.values(s).reduce((S,v)=>Math.max(S,v),0)+1;return s[i]=b,De(s),b}function Z(i){return new Promise(s=>setTimeout(()=>s(i),60))}const P={list(){return Z(K().slice().sort((i,s)=>s.id-i.id))},create(i){const s=K(),S={id:s.reduce((v,$)=>Math.max(v,$.id),0)+1,...i,sourceMapId:X(i.sourceMap),targetMapId:X(i.targetMap)};return s.push(S),ee(s),Z(S)},update(i,s){const b=K(),S=b.findIndex($=>$.id===i);if(S<0)return Promise.reject(new Error("连接不存在或已被删除"));const v={id:i,...s,sourceMapId:X(s.sourceMap),targetMapId:X(s.targetMap)};return b[S]=v,ee(b),Z(v)},remove(i){return ee(K().filter(s=>s.id!==i)),Z({id:i,deleted:!0})},stationSuggestions(){const i=new Set;for(const s of K())s.sourceStation&&i.add(s.sourceStation),s.targetStation&&i.add(s.targetStation);return Array.from(i)}},Pe={class:"mc-panel"},Re={class:"mc-toolbar"},qe={class:"mc-cost mg-mono"},Le={class:"mc-pager"},Je=te({__name:"MapConnectionPanel",setup(i,{expose:s}){const b=p(!1),S=p(!1),v=p([]),$=p([]),V=p([]),f=p(""),m=p(1),x=p(10),y=p(!1),I=p(null),T=p(),u=Be({sourceMap:"",sourceStation:"",targetMap:"",targetStation:"",cost:1e3}),R={sourceMap:[{required:!0,message:"请选择起始地图",trigger:"change"}],sourceStation:[{required:!0,message:"请选择起始切换点站点",trigger:"change"}],targetMap:[{required:!0,message:"请选择目的地图",trigger:"change"}],targetStation:[{required:!0,message:"请选择目的切换点站点",trigger:"change"}],cost:[{required:!0,message:"请输入转移代价",trigger:"blur"}]},q=Q(()=>{const c=f.value.trim().toLowerCase();return c?v.value.filter(e=>e.sourceMap.toLowerCase().includes(c)||e.targetMap.toLowerCase().includes(c)):v.value}),k=Q(()=>{const c=(m.value-1)*x.value;return q.value.slice(c,c+x.value)});he([f,x],()=>{m.value=1});async function a(){b.value=!0;try{v.value=await P.list(),V.value=P.stationSuggestions()}catch(c){M.error(`加载地图连接失败:${c.message}`)}finally{b.value=!1}}async function l(){try{const c=await A.list();$.value=c.maps.map(e=>e.name)}catch{$.value=[]}}function r(){u.sourceMap="",u.sourceStation="",u.targetMap="",u.targetStation="",u.cost=1e3}function C(){I.value=null,r(),V.value=P.stationSuggestions(),y.value=!0}function N(c){I.value=c.id,u.sourceMap=c.sourceMap,u.sourceStation=c.sourceStation,u.targetMap=c.targetMap,u.targetStation=c.targetStation,u.cost=c.cost,V.value=P.stationSuggestions(),y.value=!0}function D(){T.value?.clearValidate()}async function F(){T.value&&await T.value.validate(async c=>{if(c){S.value=!0;try{const e={sourceMap:u.sourceMap,sourceStation:u.sourceStation,targetMap:u.targetMap,targetStation:u.targetStation,cost:u.cost};I.value===null?(await P.create(e),M.success("已添加地图连接")):(await P.update(I.value,e),M.success("已更新地图连接")),y.value=!1,await a()}catch(e){M.error(`保存失败:${e.message}`)}finally{S.value=!1}}})}async function U(c){try{await j.confirm(`确认删除「${c.sourceMap}${c.targetMap}」这条地图连接?`,"删除地图连接",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger"}),await P.remove(c.id),M.success("已删除"),k.value.length===1&&m.value>1&&(m.value-=1),await a()}catch(e){if(e==="cancel"||e==="close")return;M.error(`删除失败:${e.message}`)}}return ae(()=>{a(),l()}),s({refresh:a}),(c,e)=>{const w=se,z=le,O=ue,ye=me,we=Ee,Y=fe,H=pe,G=de,Me=Te,Se=ce,$e=Ie,ke=ie;return d(),h("div",Pe,[_("div",Re,[t(w,{modelValue:f.value,"onUpdate:modelValue":e[0]||(e[0]=o=>f.value=o),class:"mc-search",placeholder:"请输入地图名称搜索",clearable:"","prefix-icon":oe(xe)},null,8,["modelValue","prefix-icon"]),t(z,{type:"primary",icon:oe(Ve),onClick:C},{default:n(()=>[...e[10]||(e[10]=[g("添加地图关系",-1)])]),_:1},8,["icon"])]),re((d(),E(ye,{data:k.value,class:"mc-table",border:"","empty-text":"还没有地图连接关系,点击右上角「添加地图关系」创建跨楼层 / 拼接连接。"},{default:n(()=>[t(O,{prop:"id",label:"ID",width:"80",sortable:""}),t(O,{prop:"sourceMap",label:"起始地图名称","min-width":"160","show-overflow-tooltip":""}),t(O,{prop:"sourceMapId",label:"起始地图ID",width:"110"}),t(O,{prop:"sourceStation",label:"起始切换点站点","min-width":"150","show-overflow-tooltip":""}),t(O,{prop:"targetMap",label:"目的地图名称","min-width":"160","show-overflow-tooltip":""}),t(O,{prop:"targetMapId",label:"目的地图ID",width:"110"}),t(O,{prop:"targetStation",label:"目的切换点站点","min-width":"150","show-overflow-tooltip":""}),t(O,{label:"转移代价(cm",width:"130"},{default:n(({row:o})=>[_("span",qe,B(o.cost),1)]),_:1}),t(O,{label:"操作",width:"130",align:"right",fixed:"right"},{default:n(({row:o})=>[t(z,{link:"",type:"primary",onClick:Ce=>N(o)},{default:n(()=>[...e[11]||(e[11]=[g("编辑",-1)])]),_:1},8,["onClick"]),t(z,{link:"",type:"danger",onClick:Ce=>U(o)},{default:n(()=>[...e[12]||(e[12]=[g("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ke,b.value]]),_("div",Le,[t(we,{"current-page":m.value,"onUpdate:currentPage":e[1]||(e[1]=o=>m.value=o),"page-size":x.value,"onUpdate:pageSize":e[2]||(e[2]=o=>x.value=o),total:q.value.length,"page-sizes":[10,20,50],layout:"total, sizes, prev, pager, next, jumper",background:""},null,8,["current-page","page-size","total"])]),t($e,{modelValue:y.value,"onUpdate:modelValue":e[9]||(e[9]=o=>y.value=o),title:I.value===null?"添加地图关系":"编辑地图关系",width:"520px",class:"map-conn-dialog","append-to-body":"",onClosed:D},{footer:n(()=>[t(z,{onClick:e[8]||(e[8]=o=>y.value=!1)},{default:n(()=>[...e[13]||(e[13]=[g("取消",-1)])]),_:1}),t(z,{type:"primary",loading:S.value,onClick:F},{default:n(()=>[...e[14]||(e[14]=[g("确定",-1)])]),_:1},8,["loading"])]),default:n(()=>[t(Se,{ref_key:"formRef",ref:T,model:u,rules:R,"label-width":"120px","label-position":"right"},{default:n(()=>[t(G,{label:"起始地图",prop:"sourceMap"},{default:n(()=>[t(H,{modelValue:u.sourceMap,"onUpdate:modelValue":e[3]||(e[3]=o=>u.sourceMap=o),placeholder:"请选择起始地图",filterable:"",style:{width:"100%"}},{default:n(()=>[(d(!0),h(L,null,J($.value,o=>(d(),E(Y,{key:o,label:o,value:o},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(G,{label:"起始切换点站点",prop:"sourceStation"},{default:n(()=>[t(H,{modelValue:u.sourceStation,"onUpdate:modelValue":e[4]||(e[4]=o=>u.sourceStation=o),placeholder:"请选择起始切换点站点",filterable:"","allow-create":"","default-first-option":"",style:{width:"100%"}},{default:n(()=>[(d(!0),h(L,null,J(V.value,o=>(d(),E(Y,{key:o,label:o,value:o},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(G,{label:"目的地图",prop:"targetMap"},{default:n(()=>[t(H,{modelValue:u.targetMap,"onUpdate:modelValue":e[5]||(e[5]=o=>u.targetMap=o),placeholder:"请选择目的地图",filterable:"",style:{width:"100%"}},{default:n(()=>[(d(!0),h(L,null,J($.value,o=>(d(),E(Y,{key:o,label:o,value:o},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(G,{label:"目的切换点站点",prop:"targetStation"},{default:n(()=>[t(H,{modelValue:u.targetStation,"onUpdate:modelValue":e[6]||(e[6]=o=>u.targetStation=o),placeholder:"请选择目的切换点站点",filterable:"","allow-create":"","default-first-option":"",style:{width:"100%"}},{default:n(()=>[(d(!0),h(L,null,J(V.value,o=>(d(),E(Y,{key:o,label:o,value:o},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(G,{label:"转移代价(cm)",prop:"cost"},{default:n(()=>[t(Me,{modelValue:u.cost,"onUpdate:modelValue":e[7]||(e[7]=o=>u.cost=o),min:0,step:100,controls:!1,style:{width:"100%"}},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),je=ne(Je,[["__scopeId","data-v-bad72017"]]),Fe={class:"mm-merge"},Ge={class:"merge-body"},Ke={key:1,class:"merge-hint"},Ye={class:"merge-hint"},He={key:0,class:"merge-order"},Xe={class:"order-list"},Ze={class:"order-item"},Qe={class:"order-name"},We={class:"order-name"},et=te({__name:"MapMergePanel",emits:["merged"],setup(i,{expose:s,emit:b}){const S=b,v=p(!1),$=p(!1),V=p([]),f=p(""),m=p([]),x=p(""),y=Q(()=>V.value.filter(k=>k!==f.value)),I=Q(()=>!!f.value&&m.value.length>=1&&x.value.trim().length>0);async function T(){v.value=!0;try{const k=await A.list();V.value=k.maps.map(a=>a.name),f.value=k.maps.find(a=>a.isCurrent)?.name??"",m.value=m.value.filter(a=>y.value.includes(a))}catch(k){M.error(`加载地图列表失败:${k.message}`)}finally{v.value=!1}}function u(){m.value=[],x.value=""}async function R(k){const a=[...m.value],l=x.value.trim(),r=await A.merge(a,l,k);if(r.ok){const C=r.data.overwroteCurrent?"(已覆盖当前地图)":"";M.success(`已把 ${r.data.sourceCount} 张地图合并进「${r.data.baseMap}」并另存为「${r.data.name}${C}(站点 ${r.data.sites} · 路径 ${r.data.tracks}`),u(),await T(),S("merged",l);return}if(r.conflict){const C=l===f.value?`目标与当前地图「${l}」同名,将用合并结果覆盖当前地图,是否继续?`:`地图「${l}」已存在,是否替换原地图?`;try{await j.confirm(C,"目标地图已存在",{type:"warning",confirmButtonText:"替换",cancelButtonText:"取消"})}catch{return}await R(!0);return}M.error(r.message)}async function q(){if(I.value){$.value=!0;try{await R(!1)}finally{$.value=!1}}}return ae(T),s({refresh:T}),(k,a)=>{const l=ge,r=ve,C=de,N=fe,D=pe,F=se,U=le,c=ce;return d(),h("div",Fe,[t(l,{class:"merge-tip",type:"info",closable:!1,"show-icon":""},{title:n(()=>[...a[3]||(a[3]=[g(" 与桌面端「合并」一致:以",-1),_("strong",null,"当前使用地图",-1),g("为底图,把选中的地图依次合并进来(自动分配独立图层、 站点 / 路径 ID 自动避让,互不冲突),再另存为目标地图。可用于多楼层汇总、多区域拼接。 ",-1)])]),_:1}),!v.value&&!f.value?(d(),E(l,{key:0,class:"merge-tip",type:"warning",closable:!1,"show-icon":"",title:"当前未设置「使用中」地图。请先到「服务器地图」页对某张地图点「使用」,再来执行合并。"})):W("",!0),_("div",Ge,[t(c,{"label-width":"120px","label-position":"right",class:"merge-form",onSubmit:a[2]||(a[2]=Ne(()=>{},["prevent"]))},{default:n(()=>[t(C,{label:"底图(当前地图)"},{default:n(()=>[f.value?(d(),E(r,{key:0,type:"success",effect:"plain"},{default:n(()=>[g(B(f.value),1)]),_:1})):(d(),h("span",Ke,"未设置"))]),_:1}),t(C,{label:"合并进来的地图",required:""},{default:n(()=>[t(D,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=e=>m.value=e),multiple:"",filterable:"",loading:v.value,disabled:!f.value,placeholder:"选择 1 张及以上要合并进当前地图的地图",style:{width:"100%"}},{default:n(()=>[(d(!0),h(L,null,J(y.value,e=>(d(),E(N,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading","disabled"])]),_:1}),t(C,{label:"另存为",required:""},{default:n(()=>[t(F,{modelValue:x.value,"onUpdate:modelValue":a[1]||(a[1]=e=>x.value=e),disabled:!f.value,placeholder:"目标地图名称(与当前地图同名则覆盖当前地图)",clearable:"",maxlength:"60"},null,8,["modelValue","disabled"])]),_:1}),t(C,null,{default:n(()=>[t(U,{type:"primary",loading:$.value,disabled:!I.value,onClick:q},{default:n(()=>[...a[4]||(a[4]=[g("开始合并",-1)])]),_:1},8,["loading","disabled"]),t(U,{text:"",disabled:!f.value,onClick:u},{default:n(()=>[...a[5]||(a[5]=[g("重置",-1)])]),_:1},8,["disabled"]),_("span",Ye,"已选 "+B(m.value.length)+" 张",1)]),_:1})]),_:1}),f.value?(d(),h("div",He,[a[7]||(a[7]=_("div",{class:"order-title"},"叠加顺序",-1)),_("ol",Xe,[_("li",Ze,[t(r,{size:"small",type:"success",effect:"plain"},{default:n(()=>[...a[6]||(a[6]=[g("底图",-1)])]),_:1}),_("span",Qe,B(f.value),1)]),(d(!0),h(L,null,J(m.value,(e,w)=>(d(),h("li",{key:e,class:"order-item"},[t(r,{size:"small",type:"info",effect:"plain"},{default:n(()=>[g("叠加 "+B(w+1),1)]),_:2},1024),_("span",We,B(e),1)]))),128))])])):W("",!0)])])}}}),tt=ne(et,[["__scopeId","data-v-bd67282a"]]),at={class:"map-mgr-page"},lt={class:"mm-section"},nt={class:"map-mgr-header"},ot={class:"actions"},st={key:0},rt={key:1},it={class:"map-name"},ut=te({__name:"MapManagementView",setup(i){const s=Oe(),b=p("maps");function S(){b.value="maps",y()}const v=p(!1),$=p([]),V=p(""),f=p(""),m=p("");function x({row:a}){return a.isCurrent?"current-row":""}async function y(){v.value=!0;try{const a=await A.list();$.value=a.maps,V.value=a.directory;const l=a.maps.find(r=>r.isCurrent);f.value=l?.name??""}catch(a){M.error(`加载地图列表失败:${a.message}`)}finally{v.value=!1}}function I(){s.push({path:"/admin/map-editor",query:{new:"1"}})}function T(a){s.push({path:"/admin/map-editor",query:{map:a.name}})}async function u(a){if(!a.isCurrent){m.value=a.name;try{const l=await A.sceneTaskStatus();if(l.hasTask){const C=l.busyCars.slice(0,5).map(N=>`${N.name}(#${N.id})${N.reasons.join("、")}`).join(`
`);await j.alert(`场景内仍有 ${l.busyCount} 台车辆存在任务,无法切换当前地图。
${C}`,"禁止切换地图",{type:"warning",confirmButtonText:"我知道了"});return}await j.confirm(`确认将「${a.name}」设为当前项目默认使用的地图?切换会重新加载场景。`,"切换使用地图",{type:"warning",confirmButtonText:"确认切换",cancelButtonText:"取消"});const r=await A.use(a.name);M.success(`已切换到「${r.name}」:${r.sites} 站点 / ${r.tracks} 路径`),await y()}catch(l){if(l==="cancel"||l==="close")return;M.error(`切换失败:${l.message}`)}finally{m.value=""}}}const R=/^[^\\/:*?"<>|]+$/;async function q(a){try{const r=((await j.prompt("请输入新的地图名称","重命名地图",{inputValue:a.name,inputPattern:R,inputErrorMessage:'名称不能包含 \\ / : * ? " < > | 等字符',confirmButtonText:"确定",cancelButtonText:"取消"})).value??"").trim();if(!r||r===a.name)return;m.value=a.name,await A.rename(a.name,r),M.success(`已重命名为「${r}」`),await y()}catch(l){if(l==="cancel"||l==="close")return;M.error(`重命名失败:${l.message}`)}finally{m.value=""}}async function k(a){try{await j.confirm(`确认删除地图「${a.name}」?该操作会从固定文件夹中移除对应 JSON 文件,不可恢复。`,"删除地图",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger"}),await A.delete(a.name),M.success(`已删除「${a.name}」`),await y()}catch(l){if(l==="cancel"||l==="close")return;M.error(`删除失败:${l.message}`)}}return ae(y),(a,l)=>{const r=le,C=ge,N=ve,D=ue,F=me,U=Ue,c=ze,e=ie;return d(),h("div",at,[t(c,{modelValue:b.value,"onUpdate:modelValue":l[0]||(l[0]=w=>b.value=w),type:"border-card",class:"map-mgr-tabs admin-tabs"},{default:n(()=>[t(U,{label:"服务器地图",name:"maps"},{default:n(()=>[_("div",lt,[_("div",nt,[l[3]||(l[3]=_("span",{class:"subtitle"}," 统一维护后台所有地图资源(固定文件夹 / JSON),可新增 / 使用 / 重命名 / 编辑 / 删除。 ",-1)),_("div",ot,[t(r,{loading:v.value,onClick:y},{default:n(()=>[...l[1]||(l[1]=[g("刷新",-1)])]),_:1},8,["loading"]),t(r,{type:"primary",onClick:I},{default:n(()=>[...l[2]||(l[2]=[g("新增地图",-1)])]),_:1})])]),V.value?(d(),E(C,{key:0,class:"dir-tip",type:"info",closable:!1,"show-icon":""},{title:n(()=>[l[5]||(l[5]=g(" 地图文件夹:",-1)),_("code",null,B(V.value),1),f.value?(d(),h("span",st,[l[4]||(l[4]=g(" · 当前使用:",-1)),_("strong",null,B(f.value),1)])):(d(),h("span",rt," · 当前未设置默认使用地图"))]),_:1})):W("",!0),re((d(),E(F,{data:$.value,class:"map-table",border:"","row-class-name":x,"empty-text":"固定文件夹内还没有地图,点击右上角「新增地图」创建。"},{default:n(()=>[t(D,{label:"地图名称","min-width":"220"},{default:n(({row:w})=>[_("span",it,B(w.name),1),w.isCurrent?(d(),E(N,{key:0,size:"small",type:"success",effect:"dark",class:"current-tag"},{default:n(()=>[...l[6]||(l[6]=[g(" 使用中 ",-1)])]),_:1})):W("",!0)]),_:1}),t(D,{label:"修改时间",prop:"modified",width:"190"}),t(D,{label:"操作",width:"360",align:"right"},{default:n(({row:w})=>[t(r,{size:"small",type:"primary",disabled:w.isCurrent,loading:m.value===w.name,onClick:z=>u(w)},{default:n(()=>[g(B(w.isCurrent?"使用中":"使用"),1)]),_:2},1032,["disabled","loading","onClick"]),t(r,{size:"small",onClick:z=>q(w)},{default:n(()=>[...l[7]||(l[7]=[g("重命名",-1)])]),_:1},8,["onClick"]),t(r,{size:"small",onClick:z=>T(w)},{default:n(()=>[...l[8]||(l[8]=[g("编辑",-1)])]),_:1},8,["onClick"]),t(r,{size:"small",type:"danger",plain:"",onClick:z=>k(w)},{default:n(()=>[...l[9]||(l[9]=[g("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[e,v.value]])])]),_:1}),t(U,{label:"多地图连接管理",name:"connections"},{default:n(()=>[t(je)]),_:1}),t(U,{label:"地图合并",name:"merge"},{default:n(()=>[t(tt,{onMerged:S})]),_:1})]),_:1},8,["modelValue"])])}}}),Vt=ne(ut,[["__scopeId","data-v-9727d426"]]);export{Vt as default};