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

3 lines
54 KiB
JavaScript
Raw Normal View History

import{aI as Ie,b9 as d,aE as h,aB as t,bq as p,aH as a,R as Ke,a4 as ut,bJ as i,ai as J,bj as oe,Z as dt,b3 as _e,ad as Ge,aG as H,$ as ft,aD as $e,bh as N,ax as M,ak as Ne,aU as le,b7 as He,b8 as Qe,u as et,aa as tt,ab as nt,bK as We,bB as je,bL as ye,b4 as at,Y as De,X as E,bI as lt,aC as ge,a3 as vt,r as Pe,G as st,bv as it,Q as Xe,bt as X,aZ as mt,b6 as ot,au as pt,o as gt,I as yt,ba as _t,an as Ae,K as ht,bd as kt,aQ as bt,J as wt,aO as $t,bG as qe,bE as Ct,bD as St,at as It,bF as Nt,aL as xt,al as Lt,ag as Tt,bg as Vt,L as Et,a2 as Mt,w as At,a6 as Pt,t as Dt,ac as Ft,a9 as Ot}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{W as Rt}from"./Workspace3D-B2WrMPji.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 Se}from"./reflection-C0K7EJ_N.js";import{m as zt}from"./mapEdit-BiAzHHno.js";import{O as Bt}from"./ops-BCeFEEjY.js";import{e as Ut}from"./ops-DA63t9Ed.js";import{f as rt,i as Wt}from"./monitorConfigCache-BtW5W6GI.js";/* empty css *//* empty css *//* empty css */import{l as jt,a as Kt}from"./projection-nWPnmoX1.js";import{u as Gt}from"./useProjectionStream-C94Y5UgX.js";const Ht={class:"vehicle-monitor"},Xt={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=Ie({__name:"VehicleMonitorPanel",props:{cars:{},missions:{},selectedId:{}},emits:["select"],setup(s,{emit:b}){const f=s,x=b,V=N(""),o=N(""),g=[{value:"idle",label:"空闲"},{value:"running",label:"运行中"},{value:"charging",label:"充电中"},{value:"paused",label:"已暂停"},{value:"fault",label:"故障"},{value:"offline",label:"离线"}],C=g.reduce((y,L)=>(y[L.value]=L.label,y),{});function R(y){return C[y]??y}function U(y){switch(y){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 W={queued:"排队",assigned:"已分配",running:"执行中",paused:"暂停",completed:"已完成",cancelled:"已取消",failed:"失败"};function K(y){return W[y]??y}function j(y){switch(y){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(y=>y.state!=="offline").length),k=M(()=>f.cars.filter(y=>y.state==="running").length),Q=M(()=>f.cars.filter(y=>y.state==="charging").length),Z=M(()=>f.cars.filter(y=>y.state==="fault").length),Y=M(()=>{const y=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||y(r.status)<y(v.status))&&L.set(r.carId,r)}return L});function O(y){if(y.missionId){const L=f.missions.find(r=>r.id===y.missionId);if(L)return L}return Y.value.get(y.id)}function D(y){const L=y.batterySoc??0,r=L>1?L:L*100;return Math.max(0,Math.min(100,Math.round(r)))}function te(y){return y<20?"#f56c6c":y<50?"#e6a23c":"#67c23a"}function me(y){return y<20?
目标车辆${f.selection?.id}`,"二次确认",{type:"warning"})}catch{return}C.value=e.code;try{const m=await Ut({opCode:e.code,targetId:String(l),reason:""});m.ok?E.success(`已执行 ${e.label}auditId=${m.auditId}`):E.warning(m.message||`执行未成功${e.label}`)}catch(m){E.error(`执行失败${m.message}`)}finally{C.value=null}}}const B=M(()=>O.value?Object.keys(Q.value).length?I.value.length?"当前车型无可执行动作。":"当前车型未配置动作,或方法名与运营维护中勾选的不一致。":"未配置动作。请在「配置中心 → 运营维护」按车型勾选动作并保存。":"加载配置中…"),ce=M(()=>({name:r("name")||U.value||f.selection?.name||`路径 ${y.value}`})),se=M(()=>[{key:"layer",label:"图层",value:r("layerName","layer")||"—"},{key:"type",label:"类型",value:W.value||"—"}]);function ae(e){return e?`${e.kind}:${e.id}`:""}async function be(e=!1){if(!(O.value&&!e))try{const l=await rt(e);Q.value={...l.config.carActionByType??{}},Z.value=[...l.config.site?.methods??[]],Y.value=[...l.config.track?.methods??[]]}catch{Q.value={},Z.value=[],Y.value=[]}finally{O.value=!0}}function we(e,l){U.value=e.summary?.name??l??"",W.value=e.typeName??"",K.value="fullTypeName"in e&&e.fullTypeName?e.fullTypeName:e.typeName??"",j.value={...e.fields};for(const m of e.fieldList??[])j.value[m.key]=m.value;A.value=e.status??[],k.value=e.methods??[]}function Te(){const e=S();if(!e)return!1;U.value=e.name,W.value=e.typeName??"",K.value=e.typeName??"";const l=Math.round(e.batterySoc<=1?e.batterySoc*100:e.batterySoc);return j.value={x:String(e.x),y:String(e.y),th:String(e.theta),batterySoc:String(l)},A.value=[],k.value=[],!0}async function Ce(){if(!f.selection){U.value="",j.value={},A.value=[],k.value=[],o.value=!1;return}const e=G.value,l=Number(f.selection.id);if(!e||!Number.isFinite(l))return;const m=o.value,P=!m&&ne.value==="vehicle"&&Te();P&&(o.value=!0),m?g.value=!0:V.value=!P;try{if(f.readOnly){const de=await Se.getBundle(e,l);we(de,f.selection.name??""),k.value=[],o.value=!0;return}await be(!1);const w=await Se.getBundle(e,l);we(w,f.selection.name??""),o.value=!0}catch(w){f.readOnly?console.warn("[MonitorSelection] 只读详情加载失败,降级用列表数据",w):E.error(`加载选中信息失败${w.message}`)}finally{V.value=!1,g.value=!1}}async function Oe(e){const l=G.value;if(!l||!f.selection||!e.methodName)return;const m=Number(f.selection.id);if(Number.isFinite(m)){if(l==="car"&&Ze(e)){R.value=e,me.value=`选择目标站点 ${e.label||e.methodName}`,C.value=e.methodName;try{const P=await Je();if(P!=null){await Re(P);return}te.value=await jn(),D.value=!0}catch(P){E.error(`加载站点列表失败${P.message}`)}finally{D.value||(C.value=null)}return}C.value=e.methodName;try{await Hn(l,m,e)&&await Ce()}finally{C.value=null}}}async function Re(e){const l=Number(f.selection?.id);if(Number.isFinite(l)){C.value=R.value?.methodName??"goto";try{await Gn(l,e)&&await Ce()}finally{C.value=null,R.value=null}}}async function ct(){const e=await Je();D.value=!1,e!=null&&await Re(e)}let ze=0,Ye="";return lt(()=>[ae(f.selection),f.refreshKey],async(e,l)=>{const m=++ze;if(l&&e[0]===l[0]&&e[0]&&e[1]!==l[1])return await be(!0),void 0;e[0]!==Ye&&(o.value=!1,Ye=e[0]),await Ce()},{immediate:!0}),(e,l)=>{const m=Xe,P=Ge;return d(),h("div",Xn,[s.selection?(d(),h("div",qn,[V.value?(d(),h("div",Zn,[a(m,{class:"is-loading"},{default:i(()=>[a(X(mt))]),_:1}),l[2]||(l[2]=t("span",null,"加载中…",-1))])):ne.value==="site"?(d(),h(J,{key:1},[t("section",Jn,[t("div",Qn,[t("span",ea,"#"+p(y.value),1),l[3]||(l[3]=t("span",{class:"type-tag"},"站点",-1))]),t("div",ta,p(u.value.name),1)]),t("section",na,[l[7]||(l[7]=t("header",{class:"card-hd"},[t("span",null,"位置")],-1)),t("div",aa,[t("div",la,[l[4]||(l[4]=t("span",{class:"k"},"X",-1)),t("span",sa,p(u.value.x),1)]),t("div",ia,[l[5]||(l[5]=t("span",{class:"k"},"Y",-1)),t("span",oa,p(u.value.y),1)]),t("div",ra,[l[6]||(l[6]=t("span",{class:"k"},"Z",-1)),t("span",ca,p(u.value.z),1)])])]),re.value.length?(d(),h("section",ua,[t("header",d