import{aG as P,b7 as d,aC as f,az as r,bo as S,aF as c,bH as s,aE as i,ac as D,aA as g,s as H,r as F,aB as B,v as X,ah as G,bh as O,u as q,E as Q,av as $,aj as K,bf as V,b5 as R,X as k,be as j,t as W,ab as Y,a8 as Z,bI as ee,by as te,br as I,bg as ae,ar as le}from"./index-CC_hCGHZ.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as se}from"./PermissionGuard-DxbOGfWF.js";/* empty css *//* empty css *//* empty css *//* empty css */import{b as J,r as L,e as ne}from"./reflection-CTDOoTn5.js";/* empty css */const oe={class:"mmcg"},ie={class:"mmcg-head"},ce={class:"mmcg-title"},de={key:0,class:"mmcg-empty muted"},re={key:2,class:"mmcg-orphans"},ue={class:"orphan-list"},me=P({__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 w(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=D,l=F,x=H,N=q,T=X,U=Q;return d(),f("section",oe,[r("header",ie,[r("span",ce,S(p.title),1),c(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?(d(),g(x,{key:0},{default:s(()=>[c(l,{size:"small",disabled:!b.value,onClick:E},{default:s(()=>[...t[0]||(t[0]=[i("全选",-1)])]),_:1},8,["disabled"]),c(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?(d(),g(T,{key:1,"model-value":p.selected,class:"mmcg-grid","onUpdate:modelValue":y},{default:s(()=>[(d(!0),f(G,null,O(p.available,v=>(d(),g(N,{key:v,value:v,label:v,class:"mmcg-cb"},null,8,["value","label"]))),128))]),_:1},8,["model-value"])):(d(),f("p",de,S(p.emptyTip),1)),a.value.length?(d(),f("div",re,[c(U,{type:"warning",closable:!1,"show-icon":"",title:`检测到 ${a.value.length} 个残留键(后端已经不再暴露,但仍在白名单中)`},{default:s(()=>[r("div",ue,[(d(!0),f(G,null,O(a.value,v=>(d(),g(e,{key:v,type:"warning",size:"small",closable:"",onClose:o=>w(v)},{default:s(()=>[i(S(v),1)]),_:2},1032,["onClose"]))),128)),c(l,{link:"",type:"warning",size:"small",onClick:z},{default:s(()=>[...t[3]||(t[3]=[i("一键清理全部残留",-1)])]),_:1})])]),_:1},8,["title"])])):B("",!0)])}}}),A=K(me,[["__scopeId","data-v-242bdaa0"]]),pe={class:"mmc-header"},ve={class:"mmc-tab-body"},fe=P({__name:"MapMonitorConfigView",setup(p){const M=[{value:"car",label:"车辆 (Car)"},{value:"site",label:"站点 (Site)"},{value:"track",label:"路径 (Track)"}],n=V("car"),m=V(!1),_=V(!1),a=j(J()),b=j(ne()),y=V(JSON.stringify(J())),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 w(t=!1){m.value=!0;try{const e=await L.getMonitorConfig();h(a,e.config),h(b,e.available),y.value=JSON.stringify(a),t&&k.success("已重载")}catch(e){k.error(`加载失败:${e instanceof Error?e.message:String(e)}`)}finally{m.value=!1}}async function z(){_.value=!0;try{const t=await L.saveMonitorConfig({car:{...a.car},site:{...a.site},track:{...a.track}});h(a,t),y.value=JSON.stringify(a),k.success("已保存(已写入 simple.json)")}catch(t){k.error(`保存失败:${t instanceof Error?t.message:String(t)}`)}finally{_.value=!1}}function u(t,e,l){a[t][e]=[...l]}return R(()=>w()),(t,e)=>{const l=D,x=F,N=Z,T=Y,U=W,v=te;return d(),g(se,{"widget-id":"ConfigCenter"},{default:s(()=>[c(U,{shadow:"never",class:"mmc-card"},{header:s(()=>[r("div",pe,[e[6]||(e[6]=r("span",{class:"mmc-title"},"地图监控配置",-1)),c(l,{size:"small",effect:"plain"},{default:s(()=>[...e[2]||(e[2]=[i("section=map-monitor",-1)])]),_:1}),E.value?(d(),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)),c(x,{size:"small",icon:I(ae),loading:m.value,onClick:e[0]||(e[0]=o=>w(!0))},{default:s(()=>[...e[4]||(e[4]=[i("重载",-1)])]),_:1},8,["icon","loading"]),c(x,{size:"small",type:"primary",icon:I(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)),c(T,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=o=>n.value=o),class:"mmc-tabs"},{default:s(()=>[(d(),f(G,null,O(M,o=>c(N,{key:o.value,label:o.label,name:o.value},{default:s(()=>[ee((d(),f("div",ve,[c(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"]),c(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"]),c(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=K(fe,[["__scopeId","data-v-4d3be43b"]]);export{ze as default};