Files
Migu2.0/MiGu.Server/wwwroot/assets/MapMonitorView-BSY4Dsk8.js
T

3 lines
54 KiB
JavaScript
Raw Normal View History

2026-05-31 00:16:56 +08:00
import{aG as Ce,b7 as d,aC as k,az as n,bo as p,aF as a,R as Ke,a3 as ut,bH as s,ah as Z,bh as ie,Z as dt,b1 as ye,ac as Ge,aE as G,_ as ft,aB as we,bf as I,av as E,aj as Ie,aS as ae,b5 as Xe,b6 as Qe,u as et,a9 as tt,aa as nt,bI as We,bz as je,bK as ge,b2 as at,Y as Pe,X as M,bG as lt,aA as me,a2 as vt,r as Ae,G as st,bt as it,Q as He,br as X,aX as mt,b4 as ot,at as pt,o as gt,I as yt,b8 as _t,am as Ve,K as ht,bb as kt,aO as bt,J as wt,aM as $t,bE as qe,bC as St,bB as Ct,as as It,bD as Nt,aJ as xt,ak as Lt,af as Tt,be as Mt,L as Et,a1 as Vt,w as At,a5 as Pt,t as Dt,ab as Ft,a8 as Ot}from"./index-D5OuyicD.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{W as zt}from"./Workspace3D-PfDes8bN.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css */import{r as _e}from"./reflection-BmVSriDn.js";import{m as Rt}from"./mapEdit-Di5ggA7K.js";import{O as Bt}from"./ops-BCeFEEjY.js";import{e as Ut}from"./ops-DFVCciZx.js";import{f as rt,i as Wt}from"./monitorConfigCache-deAxNrzx.js";/* empty css *//* empty css *//* empty css */import{l as jt,a as Kt}from"./projection-BVk2tEkj.js";import{u as Gt}from"./useProjectionStream-DvMLcpMm.js";const Xt={class:"vehicle-monitor"},Ht={class:"overview-row"},Yt={class:"overview-item"},qt={class:"overview-num"},Zt={class:"overview-item"},Jt={class:"overview-num online"},Qt={class:"overview-item"},en={class:"overview-num running"},tn={class:"overview-item"},nn={class:"overview-num charging"},an={class:"overview-item"},ln={class:"overview-num fault"},sn={class:"toolbar"},on={class:"vehicle-list"},rn=["onClick"],cn={class:"vehicle-head"},un={class:"vid"},dn=["title"],fn={class:"vehicle-sub"},vn=["title"],mn={class:"mission-mini"},pn=["title"],gn={key:1,class:"mission-name muted"},yn={key:0,class:"empty muted"},_n=Ce({__name:"VehicleMonitorPanel",props:{cars:{},missions:{},selectedId:{}},emits:["select"],setup(i,{emit:w}){const f=i,x=w,T=I(""),o=I(""),y=[{value:"idle",label:"空闲"},{value:"running",label:"运行中"},{value:"charging",label:"充电中"},{value:"paused",label:"已暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],S=y.reduce((_,L)=>(_[L.value]=L.label,_),{});function O(_){return S[_]??_}function B(_){switch(_){case"running":return"success";case"charging":return"primary";case"paused":return"warning";case"fault":return"danger";case"offline":return"info";case"idle":default:return"info"}}const U={queued:"排队",assigned:"已分配",running:"执行中",paused:"暂停",completed:"已完成",cancelled:"已取消",failed:"失败"};function j(_){return U[_]??_}function W(_){switch(_){case"running":return"success";case"assigned":return"primary";case"queued":return"info";case"paused":return"warning";case"completed":return"success";case"cancelled":return"info";case"failed":return"danger";default:return"info"}}const V=E(()=>f.cars.filter(_=>_.state!=="offline").length),b=E(()=>f.cars.filter(_=>_.state==="running").length),J=E(()=>f.cars.filter(_=>_.state==="charging").length),Y=E(()=>f.cars.filter(_=>_.state==="fault").length),H=E(()=>{const _=r=>r==="running"?0:r==="paused"?1:r==="assigned"?2:3,L=new Map;for(const r of f.missions){if(!r.carId||r.status!=="running"&&r.status!=="paused"&&r.status!=="assigned")continue;const v=L.get(r.carId);(!v||_(r.status)<_(v.status))&&L.set(r.carId,r)}return L});function F(_){if(_.missionId){const L=f.missions.find(r=>r.id===_.missionId);if(L)return L}return H.value.get(_.id)}function P(_){const L=_.batterySoc??0,r=L>1?L:L*100;return Math.max(0,Math.min(100,Math.round(r)))}function ee(_){return _<20?"#f56c6c":_<50?"#e6a23c":"#67c23a"}function de(_){return _<20?
目标车辆${f.selection?.id}`,"二次确认",{type:"warning"})}catch{return}S.value=t.code;try{const m=await Ut({opCode:t.code,targetId:String(l),reason:""});m.ok?M.success(`已执行 ${t.label}auditId=${m.auditId}`):M.warning(m.message||`执行未成功${t.label}`)}catch(m){M.error(`执行失败${m.message}`)}finally{S.value=null}}}const oe=E(()=>F.value?Object.keys(J.value).length?e.value.length?"当前车型无可执行动作。":"当前车型未配置动作,或方法名与运营维护中勾选的不一致。":"未配置动作。请在「配置中心 → 运营维护」按车型勾选动作并保存。":"加载配置中…"),se=E(()=>({name:r("name")||B.value||f.selection?.name||`路径 ${_.value}`})),Q=E(()=>[{key:"layer",label:"图层",value:r("layerName","layer")||"—"},{key:"type",label:"类型",value:U.value||"—"}]);function Se(t){return t?`${t.kind}:${t.id}`:""}async function be(t=!1){if(!(F.value&&!t))try{const l=await rt(t);J.value={...l.config.carActionByType??{}},Y.value=[...l.config.site?.methods??[]],H.value=[...l.config.track?.methods??[]]}catch{J.value={},Y.value=[],H.value=[]}finally{F.value=!0}}function xe(t,l){B.value=t.summary?.name??l??"",U.value=t.typeName??"",j.value="fullTypeName"in t&&t.fullTypeName?t.fullTypeName:t.typeName??"",W.value={...t.fields};for(const m of t.fieldList??[])W.value[m.key]=m.value;V.value=t.status??[],b.value=t.methods??[]}function Te(){const t=C();if(!t)return!1;B.value=t.name,U.value=t.typeName??"",j.value=t.typeName??"";const l=Math.round(t.batterySoc<=1?t.batterySoc*100:t.batterySoc);return W.value={x:String(t.x),y:String(t.y),th:String(t.theta),batterySoc:String(l)},V.value=[],b.value=[],!0}async function Fe(){if(!f.selection){B.value="",W.value={},V.value=[],b.value=[],o.value=!1;return}const t=K.value,l=Number(f.selection.id);if(!t||!Number.isFinite(l))return;const m=o.value,A=!m&&te.value==="vehicle"&&Te();A&&(o.value=!0),m?y.value=!0:T.value=!A;try{if(f.readOnly){const ce=await _e.getBundle(t,l);xe(ce,f.selection.name??""),b.value=[],o.value=!0;return}await be(!1);const $=await _e.getBundle(t,l);xe($,f.selection.name??""),o.value=!0}catch($){f.readOnly?console.warn("[MonitorSelection] 只读详情加载失败,降级用列表数据",$):M.error(`加载选中信息失败${$.message}`)}finally{T.value=!1,y.value=!1}}async function Oe(t){const l=K.value;if(!l||!f.selection||!t.methodName)return;const m=Number(f.selection.id);if(Number.isFinite(m)){if(l==="car"&&Ze(t)){O.value=t,de.value=`选择目标站点 ${t.label||t.methodName}`,S.value=t.methodName;try{const A=await Je();if(A!=null){await ze(A);return}ee.value=await jn(),P.value=!0}catch(A){M.error(`加载站点列表失败${A.message}`)}finally{P.value||(S.value=null)}return}S.value=t.methodName;try{await Xn(l,m,t)&&await Fe()}finally{S.value=null}}}async function ze(t){const l=Number(f.selection?.id);if(Number.isFinite(l)){S.value=O.value?.methodName??"goto";try{await Gn(l,t)&&await Fe()}finally{S.value=null,O.value=null}}}async function ct(){const t=await Je();P.value=!1,t!=null&&await ze(t)}let Re=0,Ye="";return lt(()=>[Se(f.selection),f.refreshKey],async(t,l)=>{const m=++Re;if(l&&t[0]===l[0]&&t[0]&&t[1]!==l[1])return await be(!0),void 0;t[0]!==Ye&&(o.value=!1,Ye=t[0]),await Fe()},{immediate:!0}),(t,l)=>{const m=He,A=Ge;return d(),k("div",Hn,[i.selection?(d(),k("div",qn,[T.value?(d(),k("div",Zn,[a(m,{class:"is-loading"},{default:s(()=>[a(X(mt))]),_:1}),l[2]||(l[2]=n("span",null,"加载中…",-1))])):te.value==="site"?(d(),k(Z,{key:1},[n("section",Jn,[n("div",Qn,[n("span",ea,"#"+p(_.value),1),l[3]||(l[3]=n("span",{class:"type-tag"},"站点",-1))]),n("div",ta,p(u.value.name),1)]),n("section",na,[l[7]||(l[7]=n("header",{class:"card-hd"},[n("span",null,"位置")],-1)),n("div",aa,[n("div",la,[l[4]||(l[4]=n("span",{class:"k"},"X",-1)),n("span",sa,p(u.value.x),1)]),n("div",ia,[l[5]||(l[5]=n("span",{class:"k"},"Y",-1)),n("span",oa,p(u.value.y),1)]),n("div",ra,[l[6]||(l[6]=n("span",{class:"k"},"Z",-1)),n("span",ca,p(u.value.z),1)])])]),re.value.length?(d(),k("section",ua,[n("header",d