import{aG as W,b3 as y,aA as N,O as ae,bB as l,aF as a,a2 as se,x as oe,P as ne,T as re,a8 as ie,A as Y,az as r,bj as w,S as de,s as Z,aE as f,aB as P,av as J,bb as $,al as G,b1 as Q,bC as ue,bt as ce,aC as M,u as pe,ad as me,ai as H,bd as q,y as fe,R as ye,bm as ve,bc as _e,ba as K,Y as V,Z as be,z as ge,M as Ce,ac as ke,a9 as Ee}from"./index-DrvLDslf.js";/* empty css *//* empty css */import{R as $e}from"./ReflectionManagerPanel-BP1OYef-.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{r as L}from"./reflection-Dr3WM5Rz.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./useMapEditStream-DPAdbySW.js";import"./useProjectionStream-DMf_8m8X.js";const Ne={class:"cse-color-code"},Ae={class:"cse-color-code"},Ie={class:"cse-color-code"},Se={class:"cse-model-row"},Ve=W({__name:"CarStyleEditorForm",props:{typeFullName:{},modelValue:{},hasOverride:{type:Boolean},saving:{type:Boolean}},emits:["update:modelValue","save","reset"],setup(B,{emit:k}){const T=B,b=k,c=J(()=>T.modelValue);function m(n){b("update:modelValue",{...c.value,...n})}const A=$(null);function g(){A.value?.click()}function j(n){const t=n.target,v=t.files?.[0];v&&(m({modelPath:v.name}),t.value="")}function x(n){const t=n>>>24&255,v=n>>>16&255,p=n>>>8&255,_=n&255,E=z=>z.toString(16).padStart(2,"0");return`${E(v)}${E(p)}${E(_)}${E(t)}`}function h(n){const t=n.replace(/^#/,"");if(t.length===6){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(255<<24|v<<16|p<<8|_)>>>0}if(t.length===8){const v=parseInt(t.slice(0,2),16),p=parseInt(t.slice(2,4),16),_=parseInt(t.slice(4,6),16);return(parseInt(t.slice(6,8),16)<<24|v<<16|p<<8|_)>>>0}return 0}return(n,t)=>{const v=re,p=ne,_=oe,E=ie,z=se,I=Y,O=Z,F=de,R=ae;return y(),N(R,{"label-width":"120px",size:"default",class:"cse-form",model:c.value},{default:l(()=>[a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"长度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyLengthM,min:.12,max:4,step:.01,precision:2,"onUpdate:modelValue":t[0]||(t[0]=u=>m({bodyLengthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"宽度 (m)"},{default:l(()=>[a(v,{"model-value":c.value.bodyWidthM,min:.08,max:3,step:.01,precision:2,"onUpdate:modelValue":t[1]||(t[1]=u=>m({bodyWidthM:Number(u??0)}))},null,8,["model-value"])]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"显示名称"},{default:l(()=>[a(E,{"model-value":c.value.showLabel,"onUpdate:modelValue":t[2]||(t[2]=u=>m({showLabel:!!u}))},null,8,["model-value"])]),_:1})]),_:1})]),_:1}),a(z,{gutter:16},{default:l(()=>[a(_,{span:8},{default:l(()=>[a(p,{label:"车体颜色"},{default:l(()=>[a(I,{"model-value":x(c.value.bodyColorArgb),"show-alpha":"","onUpdate:modelValue":t[3]||(t[3]=u=>m({bodyColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ne,"#"+w(x(c.value.bodyColorArgb).toUpperCase()),1),t[9]||(t[9]=r("span",{class:"cse-color-hint"},"无报警/上线时生效",-1))]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"描边颜色"},{default:l(()=>[a(I,{"model-value":x(c.value.outlineColorArgb),"show-alpha":"","onUpdate:modelValue":t[4]||(t[4]=u=>m({outlineColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ae,"#"+w(x(c.value.outlineColorArgb).toUpperCase()),1)]),_:1})]),_:1}),a(_,{span:8},{default:l(()=>[a(p,{label:"标签颜色"},{default:l(()=>[a(I,{"model-value":x(c.value.labelColorArgb),"show-alpha":"","onUpdate:modelValue":t[5]||(t[5]=u=>m({labelColorArgb:u?h(u):0}))},null,8,["model-value"]),r("code",Ie,"#"+w(x(c.value.labelColorArgb).toUpperCase()),1)]),_:1})]),_:1})]),_:1}),a(p,{label:"3D 模型路径"},{default:l(()=>[r("div",Se,[a(F,{"model-value":c.value.modelPath,placeholder:"如 ./models/agv-base.glb(路径仅保存,3D 替换矩形渲染由后续阶段接入)",clearable:"","onUpdate:modelValue":t[6]||(t[6]=u=>m({modelPath:u??""}))},{append:l(()=>[a(O,{onClick:g},{default:l(()=>[...t[10]||(t[10]=[f("浏览…",-1)])]),_:1})]),_:1},8,["model-value"]),r("input",{ref_key:"fileInput",ref:A,type:"file",accept:".glb,.gltf,.obj,.fbx",style:{display:"none"},onChange:j},null,544)]),t[11]||(t[11]=r("p",{class:"cse-model-hint"}," 现版本仅记录文件路径作为元信息。3D 渲染替代矩形将在后续阶段实现(CycleGUI Workspace LoadModel)。 如需上传文件到服务器请先用其它方式将模型放到 SimpleLite 可访问的相对路径。 ",-1))]),_:1}),a(p,null,{default:l(()=>[a(O,{type:"primary",loading:B.saving,onClick:t[7]||(t[7]=u=>n.$emit("save"))},{default:l(()=>[...t[12]||(t[12]=[f("保存此车型",-1)])]),_:1},8,["loading"]),B.hasOverride?(y(),N(O,{key:0,type:"warning",plain:"",onClick:t[8]||(t[8]=u=>n.$emit("reset"))},{default:l(()=>[...t[13]||(t[13]=[f("恢复为默认",-1)])]),_:1})):P("",!0)]),_:1})]),_:1},8,["model"])}}}),Te=G(Ve,[["__scopeId","data-v-3cdad944"]]),xe={class:"cse-root"},Ue={class:"cse-card-header"},we={class:"cse-desc"},he={class:"cse-palette"},ze={class:"cse-palette-label"},Pe={class:"cse-palette-key"},Be={class:"cse-palette-pickers"},Oe={class:"cse-color-code"},De={class:"cse-card-header"},Le={class:"cse-row-title"},Me={class:"cse-row-name"},je={class:"cse-row-fqn"},Fe=W({__name:"CarStyleEditor",setup(B,{expose:k}){const T=$(!1),b=$(!1),c=$(!1),m=$(null),A=$([]),g=K({}),j=$(void 0),x=$([]),h=$([]),n=K({}),t=K({}),v=J(()=>{const s=new Set([...Object.keys(n),...Object.keys(t)]);for(const e of s)if(n[e]!==t[e])return!0;return!1});function p(s){return n[s]??0}function _(s,e){n[s]=e?z(e):0}function E(s){const e=s>>>24&255,i=s>>>16&255,C=s>>>8&255,S=s&255,o=U=>U.toString(16).padStart(2,"0");return`${o(i)}${o(C)}${o(S)}${o(e)}`}function z(s){const e=s.replace(/^#/,"");if(e.length===6){const i=parseInt(e.slice(0,2),16),C=parseInt(e.slice(2,4),16),S=parseInt(e.slice(4,6),16);return(255<<24|i<<16|C<<8|S)>>>0}if(e.length===8){const i=parseInt(e.slice(0,2),16),C=parseInt(e.slice(2,4),16),S=parseInt(e.slice(4,6),16);return(parseInt(e.slice(6,8),16)<<24|i<<16|C<<8|S)>>>0}return 0}async function I(){T.value=!0;try{const s=await L.getCarStyleTypes().catch(o=>(console.warn("[CarStyleEditor] getCarStyleTypes failed:",o),null)),e=await L.getAlarmColors().catch(o=>(console.warn("[CarStyleEditor] getAlarmColors failed:",o),null)),i=Array.isArray(s?.types)?s.types:[];A.value=i;for(const o of i)g[o.typeName]={...o.style};for(const o of Object.keys(g))i.find(U=>U.typeName===o)||delete g[o];const C=Array.isArray(e?.entries)?e.entries:[],S=Array.isArray(e?.defaultKeys)?e.defaultKeys:[];x.value=S,h.value=C;for(const o of Object.keys(n))delete n[o];for(const o of Object.keys(t))delete t[o];for(const o of C){if(!o?.key)continue;const U=Number(o.colorArgb)>>>0;n[o.key]=U,t[o.key]=U}(!s||!e)&&V.warning("车型样式 / 报警颜色加载部分失败,请确认 SimpleLite 已启动(端口 8222)。")}catch(s){V.error(`加载车型样式失败:${s.message}`)}finally{T.value=!1}}async function O(){if(v.value){b.value=!0;try{await L.putAlarmColors({...n}),V.success("调色板已写入并生效"),await I()}catch(s){V.error(`保存调色板失败:${s.message}`)}finally{b.value=!1}}}function F(){c.value=!0;const s={避障:4294940672,运行:4283215696,上线:4280391411,下线:4288585374,导航失联:4288423856,报警:4294198070,低电量:4294951175};for(const e of Object.keys(n))delete n[e];for(const e of Object.keys(s))n[e]=s[e];c.value=!1,V.info("已恢复为 7 种默认颜色,未写入。点「保存调色板」生效。")}async function R(s){const e=g[s.typeName];if(e){m.value=s.typeName;try{const i=await L.putCarStyle(s.typeName,e);g[s.typeName]={...i},s.hasOverride=!0,V.success(`已保存 ${s.label} 车型样式`)}catch(i){V.error(`保存 ${s.label} 失败:${i.message}`)}finally{m.value=null}}}async function u(s){try{await be.confirm(`把 ${s.label} (${s.typeName}) 的样式恢复为全局默认?删除条目后将与未覆盖车型一致。`,"恢复默认",{confirmButtonText:"恢复",cancelButtonText:"取消",type:"warning"})}catch{return}try{await L.deleteCarStyle(s.typeName),V.success(`已恢复 ${s.label} 为默认样式`),await I()}catch(e){V.error(`恢复默认失败:${e.message}`)}}return Q(I),k({refresh:I}),(s,e)=>{const i=me,C=Z,S=Y,o=pe,U=ye,X=ge,ee=fe,te=Ce,le=ce;return ue((y(),M("div",xe,[a(o,{shadow:"never",class:"cse-card"},{header:l(()=>[r("div",Ue,[e[4]||(e[4]=r("span",{class:"cse-card-title"},"报警 / 状态调色板",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[1]||(e[1]=[f("7 种默认状态",-1)])]),_:1}),e[5]||(e[5]=r("span",{class:"cse-card-spacer"},null,-1)),a(C,{size:"small",loading:c.value,onClick:F},{default:l(()=>[...e[2]||(e[2]=[f("恢复默认",-1)])]),_:1},8,["loading"]),a(C,{size:"small",type:"primary",disabled:!v.value,loading:b.value,onClick:O},{default:l(()=>[...e[3]||(e[3]=[f(" 保存调色板(写入 simple.json) ",-1)])]),_:1},8,["disabled","loading"])])]),default:l(()=>[r("p",we,[e[9]||(e[9]=f(" 车体颜色的判定优先级: ",-1)),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[6]||(e[6]=[f("1. AlarmInfo 非空 → 「报警」",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[7]||(e[7]=[f("2. lstatus 包含关键字 → 对应键",-1)])]),_:1}),a(i,{size:"small",effect:"plain"},{default:l(()=>[...e[8]||(e[8]=[f("3. 兜底 → 上下线默认色",-1)])]),_:1}),e[10]||(e[10]=f(" 修改下方颜色 + 「保存调色板」即时生效。 ",-1))]),r("div",he,[(y(!0),M(H,null,q(h.value,d=>(y(),M("div",{key:d.key,class:"cse-palette-item"},[r("div",ze,[r("span",Pe,w(d.key),1),d.isDefault?P("",!0):(y(),N(i,{key:0,size:"small",type:"warning",effect:"plain"},{default:l(()=>[...e[11]||(e[11]=[f("自定义",-1)])]),_:1}))]),r("div",Be,[a(S,{"model-value":E(p(d.key)),"show-alpha":"",size:"small","onUpdate:modelValue":D=>_(d.key,D)},null,8,["model-value","onUpdate:modelValue"]),r("code",Oe,"#"+w(E(p(d.key)).toUpperCase()),1)])]))),128))])]),_:1}),a(o,{shadow:"never",class:"cse-card cse-types-card"},{header:l(()=>[r("div",De,[e[13]||(e[13]=r("span",{class:"cse-card-title"},"车型样式",-1)),a(i,{size:"small",type:"info",effect:"plain"},{default:l(()=>[f(w(A.value.length)+" 个已加载车型",1)]),_:1}),e[14]||(e[14]=r("span",{class:"cse-card-spacer"},null,-1)),a(C,{size:"small",onClick:I},{default:l(()=>[a(U,null,{default:l(()=>[a(ve(_e))]),_:1}),e[12]||(e[12]=r("span",{class:"cse-btn-text"},"刷新",-1))]),_:1})])]),default:l(()=>[e[17]||(e[17]=r("p",{class:"cse-desc"}," 点击车型行展开编辑:尺寸(米)、车体 / 描边 / 标签颜色、是否显示名称、3D 模型文件路径。 每辆车按 .NET 类型 (`assemblyName::shortName`) 索引样式。修改后点行内「保存」即时写入并生效。 ",-1)),a(ee,{modelValue:j.value,"onUpdate:modelValue":e[0]||(e[0]=d=>j.value=d),accordion:""},{default:l(()=>[(y(!0),M(H,null,q(A.value,d=>(y(),N(X,{key:d.typeName,name:d.typeName},{title:l(()=>[r("div",Le,[r("span",Me,w(d.label),1),r("code",je,w(d.typeName),1),d.hasOverride?(y(),N(i,{key:0,size:"small",type:"success",effect:"plain"},{default:l(()=>[...e[15]||(e[15]=[f("已覆盖",-1)])]),_:1})):(y(),N(i,{key:1,size:"small",type:"info",effect:"plain"},{default:l(()=>[...e[16]||(e[16]=[f("默认",-1)])]),_:1}))])]),default:l(()=>[g[d.typeName]?(y(),N(Te,{key:0,"type-full-name":d.typeName,"model-value":g[d.typeName],"has-override":d.hasOverride,saving:m.value===d.typeName,"onUpdate:modelValue":D=>g[d.typeName]=D,onSave:D=>R(d),onReset:D=>u(d)},null,8,["type-full-name","model-value","has-override","saving","onUpdate:modelValue","onSave","onReset"])):P("",!0)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]),!T.value&&A.value.length===0?(y(),N(te,{key:0,description:"未发现任何 Car 子类(请确认 SimpleLite 已加载相应插件 dll)"})):P("",!0)]),_:1})])),[[le,T.value]])}}}),Re=G(Fe,[["__scopeId","data-v-3af8f925"]]),Ke={class:"car-page"},We=W({__name:"CarPanelView",setup(B){const k=$("list");function T(b){k.value=b,sessionStorage.setItem("admin.cars.tab",k.value)}return Q(()=>{const b=sessionStorage.getItem("admin.cars.tab");(b==="list"||b==="style")&&(k.value=b)}),(b,c)=>{const m=Ee,A=ke;return y(),M("div",Ke,[a(A,{modelValue:k.value,"onUpdate:modelValue":c[0]||(c[0]=g=>k.value=g),type:"border-card",class:"car-tabs admin-tabs",onTabChange:T},{default:l(()=>[a(m,{label:"车辆列表",name:"list"},{default:l(()=>[k.value==="list"?(y(),N($e,{key:0,kind:"car","kind-label":"车辆",title:"车辆管理(Car / AbstractCar,含模拟车、插件车型 reflectionApi 实例化)","empty-text":"当前没有车辆;点击右上角「新建车辆」从已加载的 CarType 中选一个实例化。"})):P("",!0)]),_:1}),a(m,{label:"车型样式 / 报警颜色",name:"style"},{default:l(()=>[k.value==="style"?(y(),N(Re,{key:0})):P("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),kt=G(We,[["__scopeId","data-v-c3733824"]]);export{kt as default};