3 lines
52 KiB
JavaScript
3 lines
52 KiB
JavaScript
import{aE as Se,b4 as d,aA as g,ax as e,bk as p,aD as l,R as Ue,a3 as st,bD as o,ah as J,be as ie,Z as it,a_ as ye,ac as We,aC as W,_ as ot,az as be,bc as C,at as M,aj as Ce,aQ as re,b2 as je,b3 as Ye,u as qe,a9 as Ze,aa as Je,bE as Fe,bv as Be,bG as _e,a$ as Qe,Y as Me,X as P,bC as et,ay as ue,a2 as rt,r as Ae,G as tt,bp as nt,Q as Ke,bn as Z,aV as ct,b1 as at,as as ut,o as dt,I as ft,b5 as vt,al as Ve,K as mt,b8 as pt,aM as _t,J as yt,aK as gt,bA as ht,by as kt,bx as bt,ar as wt,bz as $t,aH as St,af as Ct,bb as It,L as Nt,a1 as xt,w as Tt,a5 as Lt,t as Et,ab as Vt,a8 as At}from"./index-C6ULY2Si.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{W as Mt}from"./Workspace3D-CHeE5zz3.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 de}from"./reflection-CKXyOCM_.js";import{m as Pt}from"./mapEdit-D6_KBS33.js";import{O as Dt}from"./ops-BCeFEEjY.js";import{e as Ot}from"./ops-BCWJhnEq.js";/* empty css *//* empty css *//* empty css */import{l as zt,a as Rt}from"./projection-b1x6abrR.js";import{u as Ft}from"./useProjectionStream-BoSdoSNC.js";const Bt={class:"vehicle-monitor"},Ut={class:"overview-row"},Wt={class:"overview-item"},jt={class:"overview-num"},Kt={class:"overview-item"},Gt={class:"overview-num online"},Ht={class:"overview-item"},Xt={class:"overview-num running"},Yt={class:"overview-item"},qt={class:"overview-num charging"},Zt={class:"overview-item"},Jt={class:"overview-num fault"},Qt={class:"toolbar"},en={class:"vehicle-list"},tn=["onClick"],nn={class:"vehicle-head"},an={class:"vid"},ln=["title"],sn={class:"vehicle-sub"},on=["title"],rn={class:"mission-mini"},cn=["title"],un={key:1,class:"mission-name muted"},dn={key:0,class:"empty muted"},fn=Se({__name:"VehicleMonitorPanel",props:{cars:{},missions:{},selectedId:{}},emits:["select"],setup(r,{emit:k}){const f=r,I=k,c=C(""),v=C(""),L=[{value:"idle",label:"空闲"},{value:"running",label:"运行中"},{value:"charging",label:"充电中"},{value:"paused",label:"已暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],$=L.reduce((t,m)=>(t[m.value]=m.label,t),{});function V(t){return $[t]??t}function j(t){switch(t){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 z={queued:"排队",assigned:"已分配",running:"执行中",paused:"暂停",completed:"已完成",cancelled:"已取消",failed:"失败"};function K(t){return z[t]??t}function X(t){switch(t){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 A=M(()=>f.cars.filter(t=>t.state!=="offline").length),h=M(()=>f.cars.filter(t=>t.state==="running").length),Q=M(()=>f.cars.filter(t=>t.state==="charging").length),q=M(()=>f.cars.filter(t=>t.state==="fault").length),Y=M(()=>{const t=i=>i==="running"?0:i==="paused"?1:i==="assigned"?2:3,m=new Map;for(const i of f.missions){if(!i.carId||i.status!=="running"&&i.status!=="paused"&&i.status!=="assigned")continue;const u=m.get(i.carId);(!u||t(i.status)<t(u.status))&&m.set(i.carId,i)}return m});function R(t){if(t.missionId){const m=f.missions.find(i=>i.id===t.missionId);if(m)return m}return Y.value.get(t.id)}function D(t){const m=t.batterySoc??0,i=m>1?m:m*100;return Math.max(0,Math.min(100,Math.round(i)))}function ee(t){return t<20?"#f56c6c":t<50?"#e6a23c":"#67c23a"}function ce(t){return t<20?"low":t<50?"mid":"high"}const F=M(()=>{const t=c.value.trim().toLowerCa
|
||||
|
|
目标车辆:${f.selection?.id}`,"二次确认",{type:"warning"})}catch{return}$.value=n.code;try{const y=await Ot({opCode:n.code,targetId:String(s),reason:""});y.ok?P.success(`已执行 ${n.label}(auditId=${y.auditId})`):P.warning(y.message||`执行未成功:${n.label}`)}catch(y){P.error(`执行失败:${y.message}`)}finally{$.value=null}}}const se=M(()=>R.value?Object.keys(Q.value).length?w.value.length?"当前车型无可执行动作。":"当前车型未配置动作,或方法名与运营维护中勾选的不一致。":"未配置动作。请在「配置中心 → 运营维护」按车型勾选动作并保存。":"加载配置中…"),ae=M(()=>({name:i("name")||j.value||f.selection?.name||`路径 ${t.value}`})),he=M(()=>[{key:"layer",label:"图层",value:i("layerName","layer")||"—"},{key:"type",label:"类型",value:z.value||"—"}]);function we(n){return n?`${n.kind}:${n.id}`:""}async function Te(n=!1){if(!(R.value&&!n))try{const s=await de.getMonitorConfig();Q.value={...s.config.carActionByType??{}},q.value=[...s.config.site?.methods??[]],Y.value=[...s.config.track?.methods??[]]}catch{Q.value={},q.value=[],Y.value=[]}finally{R.value=!0}}async function $e(){if(!f.selection){j.value="",X.value={},A.value=[],h.value=[],v.value=!1;return}const n=U.value,s=Number(f.selection.id);if(!n||!Number.isFinite(s))return;const y=v.value;y?L.value=!0:c.value=!0;try{if(f.readOnly){const H=await de.getBundle(n,s);j.value=H.summary?.name??f.selection.name??"",z.value=H.typeName??"",K.value="fullTypeName"in H&&H.fullTypeName?H.fullTypeName:H.typeName??"",X.value={...H.fields};for(const ke of H.fieldList??[])X.value[ke.key]=ke.value;A.value=H.status??[],h.value=[],v.value=!0;return}await Te(!y);const[x,b]=await Promise.all([de.getBundle(n,s),de.listMethods(n,s)]);j.value=x.summary?.name??f.selection.name??"",z.value=x.typeName??"",K.value="fullTypeName"in x&&x.fullTypeName?x.fullTypeName:x.typeName??"",X.value={...x.fields};for(const H of x.fieldList??[])X.value[H.key]=H.value;A.value=x.status??[],h.value=b,v.value=!0}catch(x){f.readOnly?console.warn("[MonitorSelection] 只读详情加载失败,降级用列表数据",x):P.error(`加载选中信息失败:${x.message}`)}finally{c.value=!1,L.value=!1}}async function De(n){const s=U.value;if(!s||!f.selection||!n.methodName)return;const y=Number(f.selection.id);if(Number.isFinite(y)){if(s==="car"&&He(n)){V.value=n,ce.value=`选择目标站点 — ${n.label||n.methodName}`,$.value=n.methodName;try{const x=await Xe();if(x!=null){await Oe(x);return}ee.value=await zn(),D.value=!0}catch(x){P.error(`加载站点列表失败:${x.message}`)}finally{D.value||($.value=null)}return}$.value=n.methodName;try{await Bn(s,y,n)&&await $e()}finally{$.value=null}}}async function Oe(n){const s=Number(f.selection?.id);if(Number.isFinite(s)){$.value=V.value?.methodName??"goto";try{await Fn(s,n)&&await $e()}finally{$.value=null,V.value=null}}}async function lt(){const n=await Xe();D.value=!1,n!=null&&await Oe(n)}let Ge=0;return et(()=>[we(f.selection),f.refreshKey],()=>{const n=++Ge;(async()=>await $e())()},{immediate:!0}),(n,s)=>{const y=Ke,x=We;return d(),g("div",Un,[r.selection?(d(),g("div",jn,[c.value?(d(),g("div",Kn,[l(y,{class:"is-loading"},{default:o(()=>[l(Z(ct))]),_:1}),s[2]||(s[2]=e("span",null,"加载中…",-1))])):_.value==="site"?(d(),g(J,{key:1},[e("section",Gn,[e("div",Hn,[e("span",Xn,"#"+p(t.value),1),s[3]||(s[3]=e("span",{class:"type-tag"},"站点",-1))]),e("div",Yn,p(B.value.name),1)]),e("section",qn,[s[7]||(s[7]=e("header",{class:"card-hd"},[e("span",null,"位置")],-1)),e("div",Zn,[e("div",Jn,[s[4]||(s[4]=e("span",{class:"k"},"X",-1)),e("span",Qn,p(B.value.x),1)]),e("div",ea,[s[5]||(s[5]=e("span",{class:"k"},"Y",-1)),e("span",ta,p(B.value.y),1)]),e("div",na,[s[6]||(s[6]=e("span",{class:"k"},"Z",-1)),e("span",aa,p(B.value.z),1)])])]),fe.value.length?(d(),g("section",la,[e("header",sa,[s[8]||(s[8]=e("span",null,"状态",-1)),e("span",ia,p(fe.value.length),1)]),e("div",oa,[(d(!0),g(J,null,ie(fe.value,b=>(d(),g("div",{key:b.key,class:"kv-row"},[e("span",ra,p(b.key),1),e("span",{c
|