Files
Migu2.0/MiGu.Server/wwwroot/assets/MapManagementView-D5EJh6kt.js
T

5 lines
18 KiB
JavaScript
Raw Normal View History

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-368apsQG.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-BiAzHHno.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===n
`);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-53fcec5b"]]);export{Vt as default};