Files
Migu2.0/MiGu.Server/wwwroot/assets/WorkspaceCanvasToolbar-1mCqpdq_.js
T
zhaowei.huangandCursor 42978930ca feat: 迁入 MiGu.Server、平台前端与车辆列表 reflection 回退
从 Simple-FR 拆出 Platform.Server 并重命名为 MiGu.Server;frontends 源码与构建脚本迁入本仓库。地图监控在 projection/cars 失败或为空时回退 reflection 车辆列表;Simple 仓库已移除旧 Platform.Server。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 18:16:34 +08:00

2 lines
12 KiB
JavaScript

import{aQ as b,aG as oe,b1 as re,b0 as ie,b3 as p,aC as h,aF as e,J as de,bB as l,s as ue,R as ce,bm as f,b4 as pe,az as u,an as R,L as fe,ai as V,bd as x,bE as z,v as ge,bj as y,b7 as me,aM as ye,K as _e,aE as _,aK as be,by as ke,aA as k,bw as ve,bv as we,at as $e,bx as he,aI as Ce,H as Se,ab as Ee,ad as Pe,ag as Re,bb as B,ba as Me,av as De,Y as g,Z as Te,aa as Ve,M as xe,al as ze}from"./index-DrvLDslf.js";/* 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 *//* empty css */const v="/sl/projection/toolbar";function I(o,i){return{key:o,value:i,Key:o,Value:i}}function Ne(o,i){return{name:o,visible:i,Name:o,Visible:i}}function Be(o){return{note:o,Note:o}}function Ie(o){return{fileName:o,FileName:o}}async function w(o){const i=(await o).data;if(!i?.success)throw new Error(i?.message??"请求失败");if(i.data==null)throw new Error("服务端返回空数据");return i.data}const $={getState:()=>w(b.get(`${v}/state`)),setAlign:(o,i)=>w(b.post(`${v}/align`,I(o,i))),setSelect:(o,i)=>w(b.post(`${v}/select`,I(o,i))),setDisplay:(o,i)=>w(b.post(`${v}/display`,I(o,i))),setLayerVisibility:(o,i)=>w(b.post(`${v}/layer`,Ne(o,i))),startRecording:o=>w(b.post(`${v}/recording/start`,Be(o??""))),stopRecording:()=>w(b.post(`${v}/recording/stop`)),deleteRecording:o=>w(b.delete(`${v}/recording/${encodeURIComponent(o)}`)),startPlayback:o=>w(b.post(`${v}/playback/start`,Ie(o))),stopPlayback:()=>w(b.post(`${v}/playback/stop`))},Le={class:"canvas-toolbar"},Ae=["onClick"],Fe=["onClick"],Oe={key:0,class:"menu-empty"},We=["onClick"],Ge=["onClick"],Ke={class:"btn-label"},Ue={class:"btn-label"},Ye={class:"muted-hint"},je=oe({__name:"WorkspaceCanvasToolbar",setup(o){const i=[{key:"sites",label:"站点"},{key:"cars",label:"AGV"},{key:"tracks",label:"路径"}],Y=[{key:"tracks",label:"路径"},{key:"cars",label:"AGV"},{key:"decor",label:"区域/装饰"},{key:"sites",label:"站点"}],j=[{key:"labels",label:"场景图元标记"},{key:"primitives",label:"场景图元"},{key:"cars",label:"车辆"}],s=B(null),d=Me({align:!1,select:!1,display:!1,layer:!1,recording:!1,playback:!1}),M=B(!1),D=B(!1);let N=null;const H=De(()=>{const t=s.value?.recording;if(!t?.isRecording)return"录制";const a=Math.floor((t.elapsedMs??0)/1e3),r=String(Math.floor(a/60)).padStart(2,"0"),c=String(a%60).padStart(2,"0");return`停止 ${r}:${c}`});async function T(){try{s.value=await $.getState()}catch(t){g.error(`同步工具栏状态失败:${t.message}`)}}async function J(t){if(s.value){d.align=!0;try{s.value=await $.setAlign(t,!s.value.align[t])}catch(a){g.error(`切换对齐失败:${a.message}`)}finally{d.align=!1}}}async function Q(t){if(s.value){d.select=!0;try{s.value=await $.setSelect(t,!s.value.select[t])}catch(a){g.error(`切换选择过滤失败:${a.message}`)}finally{d.select=!1}}}async function Z(t){if(s.value){d.display=!0;try{s.value=await $.setDisplay(t,!s.value.display[t])}catch(a){g.error(`切换显示内容失败:${a.message}`)}finally{d.display=!1}}}async function q(t,a){d.layer=!0;try{s.value=await $.setLayerVisibility(t,a)}catch(r){g.error(`切换图层失败:${r.message}`)}finally{d.layer=!1}}function X(){g.info("寻路右键动作尚未接入 SimpleLite;请使用 SegmentPlan.FindRoute / 工作台脚本。")}async function ee(){const t=s.value?.recording;if(t){if(t.isPlaying){g.warning("当前在回放中,请先停止回放。");return}d.recording=!0;try{s.value=t.isRecording?await $.stopRecording():await $.startRecording("")}catch(a){g.error(`录制操作失败:${a.message}`)}finally{d.recording=!1}}}async function ae(){const t=s.value?.recording;if(t){if(t.isRecording){g.warning("录制中无法进入回放,请先停止录制。");return}if(t.isPlaying){d.playback=!0;try{s.value=await $.stopPlayback()}catch(a){g.error(`停止回放失败:${a.message}`)}finally{d.playback=!1}return}await T(),M.value=!0}}async function L(t){d.playback=!0;try{s.value=await $.startPlayback(t),M.value=!1,D.value=!1,g.success(`已开始回放 ${t}`)}catch(a){g.error(`启动回放失败:${a.message}`)}finally{d.playback=!1}}async function le(t){try{await Te.confirm(`确认删除录像 ${t}?此操作不可恢复。`,"删除录像",{type:"warning"})}catch{return}try{s.value=await $.deleteRecording(t),g.success(`已删除 ${t}`)}catch(a){g.error(`删除失败:${a.message}`)}}async function te(){await T(),D.value=!0}function A(t){if(!Number.isFinite(t)||t<=0)return"0 B";if(t<1024)return`${t} B`;const a=t/1024;return a<1024?`${a.toFixed(0)} KB`:`${(a/1024).toFixed(1)} MB`}function F(t){if(!Number.isFinite(t)||t<=0)return"00:00:00";const a=Math.floor(t/1e3),r=String(Math.floor(a/3600)).padStart(2,"0"),c=String(Math.floor(a%3600/60)).padStart(2,"0"),C=String(a%60).padStart(2,"0");return`${r}:${c}:${C}`}function O(t){if(!t)return"—";const a=new Date(t);if(isNaN(a.getTime()))return t;const r=c=>String(c).padStart(2,"0");return`${a.getFullYear()}-${r(a.getMonth()+1)}-${r(a.getDate())} ${r(a.getHours())}:${r(a.getMinutes())}`}return re(()=>{T(),N=setInterval(()=>{const t=s.value?.recording;(t?.isRecording||t?.isPlaying)&&T()},1e3)}),ie(()=>{N&&clearInterval(N)}),(t,a)=>{const r=ce,c=ue,C=ge,E=fe,P=de,ne=_e,W=xe,m=Ee,G=Ve,K=Se,U=Pe,se=Re;return p(),h("div",Le,[e(P,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:l(()=>[e(E,{class:"toolbar-menu"},{default:l(()=>[(p(),h(V,null,x(i,n=>u("div",{key:n.key,class:"menu-row",onClick:z(S=>J(n.key),["stop"])},[e(C,{"model-value":s.value?.align[n.key]??!1},null,8,["model-value"]),u("span",null,y(n.label),1)],8,Ae)),64))]),_:1})]),default:l(()=>[e(c,{size:"small",loading:d.align},{default:l(()=>[e(r,null,{default:l(()=>[e(f(pe))]),_:1}),a[2]||(a[2]=u("span",{class:"btn-label"},"对齐",-1)),e(r,{class:"caret"},{default:l(()=>[e(f(R))]),_:1})]),_:1},8,["loading"])]),_:1}),e(P,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:l(()=>[e(E,{class:"toolbar-menu"},{default:l(()=>[(p(),h(V,null,x(Y,n=>u("div",{key:n.key,class:"menu-row",onClick:z(S=>Q(n.key),["stop"])},[e(C,{"model-value":s.value?.select[n.key]??!1},null,8,["model-value"]),u("span",null,y(n.label),1)],8,Fe)),64))]),_:1})]),default:l(()=>[e(c,{size:"small",loading:d.select},{default:l(()=>[e(r,null,{default:l(()=>[e(f(me))]),_:1}),a[3]||(a[3]=u("span",{class:"btn-label"},"选择",-1)),e(r,{class:"caret"},{default:l(()=>[e(f(R))]),_:1})]),_:1},8,["loading"])]),_:1}),e(P,{trigger:"click",placement:"top-start"},{dropdown:l(()=>[e(E,{class:"toolbar-menu"},{default:l(()=>[e(ne,{onClick:X},{default:l(()=>[...a[5]||(a[5]=[_("寻路",-1)])]),_:1})]),_:1})]),default:l(()=>[e(c,{size:"small"},{default:l(()=>[e(r,null,{default:l(()=>[e(f(ye))]),_:1}),a[4]||(a[4]=u("span",{class:"btn-label"},"右击功能",-1)),e(r,{class:"caret"},{default:l(()=>[e(f(R))]),_:1})]),_:1})]),_:1}),a[14]||(a[14]=u("span",{class:"separator"},null,-1)),e(P,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:l(()=>[e(E,{class:"toolbar-menu layer-menu"},{default:l(()=>[!s.value||s.value.layers.length===0?(p(),h("div",Oe,"(无图层)")):(p(!0),h(V,{key:1},x(s.value.layers,n=>(p(),h("div",{key:n.name,class:"menu-row",onClick:z(S=>q(n.name,!n.visible),["stop"])},[e(C,{"model-value":n.visible},null,8,["model-value"]),u("span",null,"图层 "+y(n.name),1)],8,We))),128))]),_:1})]),default:l(()=>[e(c,{size:"small",loading:d.layer},{default:l(()=>[e(r,null,{default:l(()=>[e(f(be))]),_:1}),a[6]||(a[6]=u("span",{class:"btn-label"},"显示图层",-1)),e(r,{class:"caret"},{default:l(()=>[e(f(R))]),_:1})]),_:1},8,["loading"])]),_:1}),e(P,{trigger:"click","hide-on-click":!1,placement:"top-start"},{dropdown:l(()=>[e(E,{class:"toolbar-menu"},{default:l(()=>[(p(),h(V,null,x(j,n=>u("div",{key:n.key,class:"menu-row",onClick:z(S=>Z(n.key),["stop"])},[e(C,{"model-value":s.value?.display[n.key]??!1},null,8,["model-value"]),u("span",null,y(n.label),1)],8,Ge)),64))]),_:1})]),default:l(()=>[e(c,{size:"small",loading:d.display},{default:l(()=>[e(r,null,{default:l(()=>[e(f(ke))]),_:1}),a[7]||(a[7]=u("span",{class:"btn-label"},"显示内容",-1)),e(r,{class:"caret"},{default:l(()=>[e(f(R))]),_:1})]),_:1},8,["loading"])]),_:1}),a[15]||(a[15]=u("span",{class:"separator"},null,-1)),e(c,{size:"small",type:s.value?.recording.isRecording?"danger":"default",loading:d.recording,onClick:ee},{default:l(()=>[s.value?.recording.isRecording?(p(),k(r,{key:0},{default:l(()=>[e(f(ve))]),_:1})):(p(),k(r,{key:1},{default:l(()=>[e(f(we))]),_:1})),u("span",Ke,y(H.value),1)]),_:1},8,["type","loading"]),e(c,{size:"small",type:s.value?.recording.isPlaying?"warning":"default",loading:d.playback,onClick:ae},{default:l(()=>[s.value?.recording.isPlaying?(p(),k(r,{key:0},{default:l(()=>[e(f($e))]),_:1})):(p(),k(r,{key:1},{default:l(()=>[e(f(he))]),_:1})),u("span",Ue,y(s.value?.recording.isPlaying?"退出回放":"回放"),1)]),_:1},8,["type","loading"]),e(c,{size:"small",onClick:te},{default:l(()=>[e(r,null,{default:l(()=>[e(f(Ce))]),_:1}),a[8]||(a[8]=u("span",{class:"btn-label"},"录像管理",-1))]),_:1}),e(K,{modelValue:M.value,"onUpdate:modelValue":a[0]||(a[0]=n=>M.value=n),title:"选择录像回放",width:"640px","append-to-body":"","destroy-on-close":""},{default:l(()=>[!s.value||s.value.recording.entries.length===0?(p(),k(W,{key:0,description:"(无可用录像。点 ● 录制 创建首份录像。)"})):(p(),k(G,{key:1,data:s.value.recording.entries,size:"small",stripe:""},{default:l(()=>[e(m,{prop:"fileName",label:"文件名","min-width":"180"}),e(m,{label:"大小",width:"90"},{default:l(({row:n})=>[_(y(A(n.fileSizeBytes)),1)]),_:1}),e(m,{prop:"frameCount",label:"帧",width:"70"}),e(m,{label:"时长",width:"100"},{default:l(({row:n})=>[_(y(F(n.durationMs)),1)]),_:1}),e(m,{label:"时间",width:"160"},{default:l(({row:n})=>[_(y(O(n.fileWriteTime)),1)]),_:1}),e(m,{label:"操作",width:"100",fixed:"right"},{default:l(({row:n})=>[e(c,{link:"",type:"primary",disabled:!n.headerReadable,onClick:S=>L(n.fileName)},{default:l(()=>[...a[9]||(a[9]=[_("回放",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"]),e(K,{modelValue:D.value,"onUpdate:modelValue":a[1]||(a[1]=n=>D.value=n),title:"录像管理",width:"780px","append-to-body":"","destroy-on-close":""},{default:l(()=>[u("p",Ye,"目录:"+y(s.value?.recording.recordingsDirectory??"—"),1),!s.value||s.value.recording.entries.length===0?(p(),k(W,{key:0,description:"(无可用录像。)"})):(p(),k(G,{key:1,data:s.value.recording.entries,size:"small",stripe:""},{default:l(()=>[e(m,{prop:"fileName",label:"文件名","min-width":"200"}),e(m,{label:"大小",width:"90"},{default:l(({row:n})=>[_(y(A(n.fileSizeBytes)),1)]),_:1}),e(m,{prop:"frameCount",label:"帧",width:"70"}),e(m,{label:"时长",width:"100"},{default:l(({row:n})=>[_(y(F(n.durationMs)),1)]),_:1}),e(m,{label:"时间",width:"160"},{default:l(({row:n})=>[_(y(O(n.fileWriteTime)),1)]),_:1}),e(m,{label:"状态",width:"120"},{default:l(({row:n})=>[n.headerReadable?(p(),k(U,{key:0,type:"success",size:"small"},{default:l(()=>[...a[10]||(a[10]=[_("完整",-1)])]),_:1})):(p(),k(se,{key:1,content:n.error,placement:"top"},{default:l(()=>[e(U,{type:"danger",size:"small"},{default:l(()=>[...a[11]||(a[11]=[_("头部不可读",-1)])]),_:1})]),_:1},8,["content"]))]),_:1}),e(m,{label:"操作",width:"160",fixed:"right"},{default:l(({row:n})=>[e(c,{link:"",type:"primary",disabled:!n.headerReadable,onClick:S=>L(n.fileName)},{default:l(()=>[...a[12]||(a[12]=[_("回放",-1)])]),_:1},8,["disabled","onClick"]),e(c,{link:"",type:"danger",onClick:S=>le(n.fileName)},{default:l(()=>[...a[13]||(a[13]=[_("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))]),_:1},8,["modelValue"])])}}}),ra=ze(je,[["__scopeId","data-v-8e85cbc4"]]);export{ra as W};