Files
Migu2.0/MiGu.Server/wwwroot/assets/MapMonitorConfigView-16D4TNib.js
T
zhaowei.huangandCursor 7382e85598 feat(platform): 部署配置向导 + 地图管理,地图编辑器接入统一存取与 AI 助手
- 配置向导:登录按 deployment 画像引导平台选型(导航方式/模块/场景),未完成则路由守卫强制进入 /wizard;选型驱动菜单按需裁剪,并联动 SimpleLite 写 plugins/active-scenes.json + 透传 --scenes 选择性加载导航场景插件
- 地图管理页:服务器地图列表/使用/重命名/删除、地图合并、多地图连接管理
- 地图编辑器:项目存取改为存入地图管理统一目录(同名替换确认),支持 ?map=/?new= 进入,新增右侧可停靠 AI 助手面板
- 集成 PTL 拣选模块;新增车队分配面板(运维总览/筛选联动)
- SimpleLiteBuildSync 同步运行时依赖 DLL;重新构建前端静态资源

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 09:37:07 +08:00

2 lines
6.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{aI as K,b9 as c,aE as f,aB as r,bq as S,aH as d,bJ as s,aG as i,ad as L,aC as g,s as q,r as P,aD as B,v as H,ai as G,bj as O,u as X,E as Q,ax as $,ak as F,bh as k,b7 as R,X as V,bg as J,t as W,ac as Y,a9 as Z,bK as ee,bA as te,bt as j,bi as ae,as as le}from"./index-368apsQG.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as se}from"./PermissionGuard-DUg2FNrM.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as D,r as I,e as ne}from"./reflection-C0K7EJ_N.js";/* empty css */const oe={class:"mmcg"},ie={class:"mmcg-head"},de={class:"mmcg-title"},ce={key:0,class:"mmcg-empty muted"},re={key:2,class:"mmcg-orphans"},ue={class:"orphan-list"},me=K({__name:"MapMonitorConfigGroup",props:{title:{},available:{},selected:{},emptyTip:{}},emits:["update:selected"],setup(p,{emit:M}){const n=p,m=M,_=$(()=>n.available.length?n.selected.length?`${n.selected.length} / ${n.available.length}`:`白名单空 = 显示全部 (${n.available.length})`:"空"),a=$(()=>n.selected.filter(u=>!n.available.includes(u))),b=$(()=>n.available.length>n.selected.length);function y(u){const e=[...u.filter(l=>typeof l=="string"),...a.value];m("update:selected",e)}function E(){m("update:selected",[...n.available,...a.value])}function h(){m("update:selected",[...a.value])}function x(u){m("update:selected",n.selected.filter(t=>t!==u))}function z(){m("update:selected",n.selected.filter(u=>n.available.includes(u)))}return(u,t)=>{const e=L,l=P,w=q,N=X,T=H,U=Q;return c(),f("section",oe,[r("header",ie,[r("span",de,S(p.title),1),d(e,{size:"small",effect:"plain",type:"info"},{default:s(()=>[i(S(_.value),1)]),_:1}),t[2]||(t[2]=r("div",{class:"spacer"},null,-1)),p.available.length?(c(),g(w,{key:0},{default:s(()=>[d(l,{size:"small",disabled:!b.value,onClick:E},{default:s(()=>[...t[0]||(t[0]=[i("全选",-1)])]),_:1},8,["disabled"]),d(l,{size:"small",disabled:!p.selected.length,onClick:h},{default:s(()=>[...t[1]||(t[1]=[i("清空",-1)])]),_:1},8,["disabled"])]),_:1})):B("",!0)]),p.available.length?(c(),g(T,{key:1,"model-value":p.selected,class:"mmcg-grid","onUpdate:modelValue":y},{default:s(()=>[(c(!0),f(G,null,O(p.available,v=>(c(),g(N,{key:v,value:v,label:v,class:"mmcg-cb"},null,8,["value","label"]))),128))]),_:1},8,["model-value"])):(c(),f("p",ce,S(p.emptyTip),1)),a.value.length?(c(),f("div",re,[d(U,{type:"warning",closable:!1,"show-icon":"",title:`检测到 ${a.value.length} 个残留键(后端已经不再暴露,但仍在白名单中)`},{default:s(()=>[r("div",ue,[(c(!0),f(G,null,O(a.value,v=>(c(),g(e,{key:v,type:"warning",size:"small",closable:"",onClose:o=>x(v)},{default:s(()=>[i(S(v),1)]),_:2},1032,["onClose"]))),128)),d(l,{link:"",type:"warning",size:"small",onClick:z},{default:s(()=>[...t[3]||(t[3]=[i("一键清理全部残留",-1)])]),_:1})])]),_:1},8,["title"])])):B("",!0)])}}}),A=F(me,[["__scopeId","data-v-242bdaa0"]]),pe={class:"mmc-header"},ve={class:"mmc-tab-body"},fe=K({__name:"MapMonitorConfigView",setup(p){const M=[{value:"car",label:"车辆 (Car)"},{value:"site",label:"站点 (Site)"},{value:"track",label:"路径 (Track)"}],n=k("car"),m=k(!1),_=k(!1),a=J(D()),b=J(ne()),y=k(JSON.stringify(D())),E=$(()=>y.value!==JSON.stringify(a));function h(t,e){for(const l of M)t[l.value].fields=[...e[l.value]?.fields??[]],t[l.value].status=[...e[l.value]?.status??[]],t[l.value].methods=[...e[l.value]?.methods??[]]}async function x(t=!1){m.value=!0;try{const e=await I.getMonitorConfig();h(a,e.config),h(b,e.available),y.value=JSON.stringify(a),t&&V.success("已重载")}catch(e){V.error(`加载失败:${e instanceof Error?e.message:String(e)}`)}finally{m.value=!1}}async function z(){_.value=!0;try{const t=await I.saveMonitorConfig({car:{...a.car},site:{...a.site},track:{...a.track}});h(a,t),y.value=JSON.stringify(a),V.success("已保存(已写入 simple.json")}catch(t){V.error(`保存失败:${t instanceof Error?t.message:String(t)}`)}finally{_.value=!1}}function u(t,e,l){a[t][e]=[...l]}return R(()=>x()),(t,e)=>{const l=L,w=P,N=Z,T=Y,U=W,v=te;return c(),g(se,{"widget-id":"ConfigCenter"},{default:s(()=>[d(U,{shadow:"never",class:"mmc-card"},{header:s(()=>[r("div",pe,[e[6]||(e[6]=r("span",{class:"mmc-title"},"地图监控配置",-1)),d(l,{size:"small",effect:"plain"},{default:s(()=>[...e[2]||(e[2]=[i("section=map-monitor",-1)])]),_:1}),E.value?(c(),g(l,{key:0,size:"small",type:"warning",effect:"dark"},{default:s(()=>[...e[3]||(e[3]=[i("未保存",-1)])]),_:1})):B("",!0),e[7]||(e[7]=r("div",{class:"spacer"},null,-1)),d(w,{size:"small",icon:j(ae),loading:m.value,onClick:e[0]||(e[0]=o=>x(!0))},{default:s(()=>[...e[4]||(e[4]=[i("重载",-1)])]),_:1},8,["icon","loading"]),d(w,{size:"small",type:"primary",icon:j(le),loading:_.value,disabled:!E.value,onClick:z},{default:s(()=>[...e[5]||(e[5]=[i(" 保存 ",-1)])]),_:1},8,["icon","loading","disabled"])])]),default:s(()=>[e[8]||(e[8]=r("p",{class:"mmc-desc"},[i(" 勾选「地图监控」右侧选中信息面板要展示的内容白名单(按对象类型 - 车辆 / 站点 / 路径 分组)。 三组分别控制 "),r("b",null,"属性"),i("、"),r("b",null,"状态"),i("、"),r("b",null,"动作"),i(" Tab 里可见的字段 / 状态项 / 可执行方法。 每组留空 = 显示全部;勾选任何一项即进入白名单模式(仅显示已勾选)。保存后直接写入 SimpleLite 的 "),r("code",null,"simple.json"),i(" "),r("code",null,"Configuration.conf.monitorVisibility"),i(")。 ")],-1)),d(T,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=o=>n.value=o),class:"mmc-tabs"},{default:s(()=>[(c(),f(G,null,O(M,o=>d(N,{key:o.value,label:o.label,name:o.value},{default:s(()=>[ee((c(),f("div",ve,[d(A,{title:"属性字段(Properties",available:b[o.value].fields,selected:a[o.value].fields,"empty-tip":"该类型暂未发现任何 [FieldMember]。在 SimpleLite 端添加字段后点重载会刷新。","onUpdate:selected":C=>u(o.value,"fields",C)},null,8,["available","selected","onUpdate:selected"]),d(A,{title:"状态项(Status",available:b[o.value].status,selected:a[o.value].status,"empty-tip":"该类型暂未发现任何 status 字段(来自 obj.status 反射)。","onUpdate:selected":C=>u(o.value,"status",C)},null,8,["available","selected","onUpdate:selected"]),d(A,{title:"可执行动作(Methods",available:b[o.value].methods,selected:a[o.value].methods,"empty-tip":"该类型暂未发现任何 [MethodMember] 方法。","onUpdate:selected":C=>u(o.value,"methods",C)},null,8,["available","selected","onUpdate:selected"])])),[[v,m.value]])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1})}}}),ze=F(fe,[["__scopeId","data-v-4d3be43b"]]);export{ze as default};