5 lines
29 KiB
JavaScript
5 lines
29 KiB
JavaScript
import{aN as Me,c7 as Ue,bp as Oe,bs as o,aE as c,c8 as a,aG as v,L as We,c9 as Je,b$ as qe,aa as Xe,aK as n,ab as Ye,ad as Qe,aJ as g,bL as h,ag as Ze,r as Ge,aF as _,aD as b,bS as M,am as Kt,bD as He,ay as N,bC as p,X as f,Y as G,t as et,ak as tt,bX as Ft,R as Rt,Q as It,bI as At,ai as z,bv as Ae,as as jt,K as Mt,bE as de,J as Ut,az as Ot,aQ as Wt,cb as ce,ac as Jt,a9 as qt,C as Xt,a8 as Yt,z as Qt,S as Zt,bk as Gt,F as Ht,N as el,a1 as tl,a0 as ll,O as al,bA as nl,I as ol,B as sl,bj as il}from"./index-D5GfLbIx.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 *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import{r as $}from"./reflection-BwOBPyb9.js";import{u as ul,a as rl,e as dl}from"./projectSaveFlow-BOHSv3Vc.js";const cl=new Set(["car","vehicle","site","track","special"]);function ml(y){return cl.has(y)}function pl(y){return y==="vehicle"||y==="car"?"car":y==="site"||y==="track"||y==="special"?y:null}const vl="/admin/map-monitor";function fl(y,le){return{focusKind:y,focusId:String(le)}}const yl=new Set(["car","site","track","special","process"]);function je(y){return yl.has(y)}const bl={class:"plg-header"},gl={class:"plg-title"},_l={key:0},kl=Me({__name:"PluginListPanel",props:{visible:{type:Boolean}},emits:["changed"],setup(y,{expose:le,emit:ge}){const m=y,Q=ge,H=N(()=>m.visible!==!1),L=p([]),R=p(!1),U=p(!0),E=p(null);async function I(){R.value=!0;try{L.value=await $.listPlugins()}catch(x){f.warning(`插件列表加载失败:${x.message}(旧版 SimpleLite 可能未带 /plugins 接口,请重启)`)}finally{R.value=!1}}async function A(x){try{await G.confirm(`确认卸载插件 ${x.name}?
|
||
|
||
此插件贡献了 ${x.missionTypes} 个进程类型 / ${x.carTypes} 个车/脚本类型;如果当前还有这些类型的实例存在,卸载会失败(请先在管理面板里删除)。`,"卸载插件",{type:"warning",confirmButtonText:"卸载",cancelButtonText:"取消"})}catch{return}E.value=x.name;try{const w=await $.unloadPlugin(x.name);f.success(w.message??`已卸载 ${x.name}`),Q("changed"),await I()}catch(w){f.error(`卸载失败:${w.message}`)}finally{E.value=null}}return Ue(()=>m.visible,x=>{x&&I()}),Oe(()=>{H.value&&I()}),le({refresh:I}),(x,w)=>{const Z=Ge,V=We,T=Ye,D=Qe,ae=Ze,ee=Xe,me=et,pe=qe;return H.value?(o(),c(me,{key:0,shadow:"never",class:"plugin-list-card"},{header:a(()=>[b("div",bl,[b("span",gl,"已加载插件 ("+h(L.value.length)+")",1),n(Z,{text:"",size:"small",icon:M(Kt),class:"plg-collapse",onClick:w[0]||(w[0]=C=>U.value=!U.value)},{default:a(()=>[g(h(U.value?"展开":"折叠"),1)]),_:1},8,["icon"]),n(Z,{size:"small",loading:R.value,icon:M(He),onClick:I},{default:a(()=>[...w[1]||(w[1]=[g("刷新",-1)])]),_:1},8,["loading","icon"])])]),default:a(()=>[U.value?_("",!0):(o(),v("div",_l,[!R.value&&L.value.length===0?(o(),c(V,{key:0,description:"尚未通过 PluginManager 加载任何插件 (重启 SimpleLite 后会自动迁移现有 plugins/ 内的 dll)"})):Je((o(),c(ee,{key:1,data:L.value,size:"small",stripe:"",border:"",class:"plg-table"},{default:a(()=>[n(T,{prop:"name",label:"插件名",width:"200","show-overflow-tooltip":""}),n(T,{prop:"assemblyVersion",label:"版本",width:"120"}),n(T,{label:"类型贡献",width:"200"},{default:a(({row:C})=>[n(D,{size:"small",type:"success",effect:"plain",class:"plg-tag"},{default:a(()=>[g(" 进程 "+h(C.missionTypes),1)]),_:2},1024),n(D,{size:"small",type:"primary",effect:"plain",class:"plg-tag"},{default:a(()=>[g(" 车/脚本 "+h(C.carTypes),1)]),_:2},1024),n(D,{size:"small",type:"info",effect:"plain",class:"plg-tag"},{default:a(()=>[g(" 共 "+h(C.loadedTypes)+" type ",1)]),_:2},1024)]),_:1}),n(T,{prop:"dllPath",label:"路径","min-width":"240","show-overflow-tooltip":""}),n(T,{label:"状态",width:"120"},{default:a(({row:C})=>[C.collectible?(o(),c(D,{key:0,size:"small",type:"success"},{default:a(()=>[...w[2]||(w[2]=[g("可卸载",-1)])]),_:1})):(o(),c(ae,{key:1,content:"此插件被加到 default ALC(旧路径加载),重启 SimpleLite 后会自动迁移到 collectible",placement:"top"},{default:a(()=>[n(D,{size:"small",type:"warning"},{default:a(()=>[...w[3]||(w[3]=[g("不可卸载",-1)])]),_:1})]),_:1}))]),_:1}),n(T,{label:"操作",width:"100"},{default:a(({row:C})=>[n(Z,{text:"",size:"small",type:"danger",disabled:!C.collectible,loading:E.value===C.name,onClick:K=>A(C)},{default:a(()=>[...w[4]||(w[4]=[g(" 卸载 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1},8,["data"])),[[pe,R.value]])]))]),_:1})):_("",!0)}}}),hl=tt(kl,[["__scopeId","data-v-d89a2aa6"]]),wl={class:"ref-mgr-page"},$l={class:"ref-mgr-header"},xl={class:"ref-mgr-title"},Cl={class:"ref-mgr-actions"},Vl={class:"ref-type-asm"},Sl={class:"ref-mgr-body"},Pl={class:"detail-header"},Nl={class:"detail-title"},Tl={class:"detail-id"},Bl={class:"detail-name"},zl={key:0,class:"detail-actions"},Ll={class:"detail-tab-body"},El={class:"field-section field-section--first"},Dl={class:"field-section-title"},Kl={key:1,class:"field-empty"},Fl={class:"field-section"},Rl={class:"field-section-title"},Il={class:"dyn-row"},Al={key:1,class:"field-empty"},jl={key:1,class:"field-section field-section--first"},Ml={class:"field-section-title"},Ul=["title"],Ol={key:1,class:"field-empty"},Wl={key:2,class:"field-section field-section--first"},Jl={class:"field-section-title"},ql={key:0,class:"field-empty"},Xl={key:0,class:"method-grid script-method-grid"},Yl=["disabled"],Ql={key:0,class:"method-btn-spin"},Zl={key:1,class:"method-btn-icon"},Gl=["disabled"],Hl={key:0,class:"method-btn-spin"},ea={key:1,class:"method-btn-icon"},ta={key:1,class:"field-empty"},la={key:2,class:"method-grid"},aa=["disabled","onClick"],na={key:0,class:"method-btn-spin"},oa={key:1,class:"method-btn-icon"},sa={class:"method-btn-label"},ia={key:2,class:"method-btn-tag"},ua=Me({__name:"ReflectionManagerPanel",props:{kind:{},kindLabel:{},title:{},emptyText:{},disableCreate:{type:Boolean},disableDelete:{type:Boolean},showSummaryColumn:{type:Boolean},summaryLabel:{},showStatusColumn:{type:Boolean},statusLabel:{},statusReflectionKey:{},showScriptActions:{type:Boolean},autoSaveProject:{type:Boolean},enableProjectSave:{type:Boolean},saveButtonLabel:{}},setup(y,{expose:le}){const ge=Ft(),m=y,Q=p(!1),H=p(!1),L=p(null),R=p(null),U=p(null),E=p(null),I=p(!1),A=p(!1),x=p(null),w=p(!1),Z=p(""),V=p(null),T=p(null),D=p(!1),ae=p(""),ee=p(""),me=p(null),pe=p(null),C=p(null),K=p([]),ne=p([]),d=p(null),oe=p("properties"),O=p([]),W=p([]),J=p([]),_e=N(()=>O.value.filter(t=>t.source!=="dynamic")),ke=N(()=>O.value.filter(t=>t.source==="dynamic")),he=N(()=>!!m.showScriptActions&&m.kind==="script"&&!!d.value),lt=N(()=>J.value.length+(he.value?2:0)),ve=N(()=>ml(m.kind)),Ce=N(()=>m.enableProjectSave??je(m.kind)),Ve=N(()=>m.autoSaveProject??je(m.kind)),Se=N(()=>m.saveButtonLabel??"保存"),at=N(()=>x.value?`将当前内存项目写回 JSON;上次保存:${x.value}`:"将场景/车辆/进程等修改写回项目 JSON,下次启动可自动加载"),nt=N(()=>{let t=0;return ve.value&&(t+=90),m.showScriptActions&&m.kind==="script"&&(t+=130),m.disableDelete||(t+=60),Math.max(t,72)}),Pe=N(()=>{const t=Z.value.trim().toLowerCase();return t?K.value.filter(e=>String(e.id).includes(t)||(e.name??"").toLowerCase().includes(t)||(e.typeName??"").toLowerCase().includes(t)):K.value}),ot=new Set(["process","mission","car","vehicle"]),st=N(()=>ot.has(m.kind));function Ne(t,e){const u=t.find(r=>r.key===e)?.value?.trim();return u||null}async function it(t){const e=m.statusReflectionKey;if(!m.showStatusColumn||!e||t.length===0)return t;const s=6,u=t.slice();let r=0;const F=async()=>{for(;r<t.length;){const fe=r++,re=t[fe];try{const q=re.subKind??m.kind,X=await $.getStatus(q,re.id),ye=Ne(X,e);ye&&(u[fe]={...re,status:ye})}catch{}}};return await Promise.all(Array.from({length:Math.min(s,t.length)},F)),u}function ut(t,e){const s=m.statusReflectionKey;if(!m.showStatusColumn||!s)return;const u=Ne(e,s);if(!u)return;const r=K.value.findIndex(F=>F.id===t);r<0||K.value[r].status!==u&&(K.value[r].status=u)}function Te(t){if(t==null)return;const e=K.value.find(s=>s.id===t);e&&il(()=>pe.value?.setCurrentRow(e))}async function B(){Q.value=!0;const t=d.value?.id??null;try{const[e,s]=await Promise.all([$.listObjects(m.kind),$.listCreatableTypes(m.kind).catch(()=>[])]);K.value=await it(e),ne.value=s;const u=t!=null?K.value.find(r=>r.id===t):void 0;u?(d.value=u,Te(u.id)):t!=null&&(d.value=null,O.value=[],J.value=[],W.value=[])}catch(e){f.error(`加载 ${m.kindLabel} 失败:${e.message}`)}finally{Q.value=!1}}async function j(t){if(!t){if(C.value!=null)return;d.value=null,O.value=[],J.value=[],W.value=[];return}const e=d.value?.id===t.id;d.value=t,e||(oe.value="properties"),O.value=[],J.value=[],W.value=[],C.value=t.id,H.value=!0;try{const s=t.subKind??m.kind,u=await $.getBundle(s,t.id);u.fieldList&&u.fieldList.length>0?O.value=u.fieldList.map(r=>({...r})):O.value=Object.entries(u.fields??{}).map(([r,F])=>({key:r,value:String(F),source:"dynamic"})),J.value=u.methods??[],W.value=u.status??[],ut(t.id,W.value),Te(t.id)}catch(s){f.error(`加载详情失败:${s.message}`)}finally{H.value=!1,C.value=null}}function se(t){return t?.subKind??m.kind}async function rt(t){if(!Ce.value&&!Ve.value)return!0;if(A.value)return!1;A.value=!0;try{const e=await $.saveProject();return x.value=e.path,t?.quiet,!0}catch(e){return f.warning({message:`保存项目到本地失败:${e.message}`,grouping:!0}),!1}finally{A.value=!1}}async function ie(){if(!Ve.value)return;await rt({quiet:!0})||f.warning({message:`变更已生效于内存,但未能写入项目文件,请稍后点击「${Se.value}」重试`,grouping:!0,duration:5e3})}async function dt(){const t=await rl();if(t!=="cancel"&&!A.value){A.value=!0;try{const e=await dl(t);e&&(x.value=e,f.success({message:`项目已保存:${e}`,grouping:!0}))}catch(e){f.warning({message:`保存项目到本地失败:${e.message}`,grouping:!0})}finally{A.value=!1}}}async function ct(){I.value=!0;try{const t=await $.reloadPlugins();f.success(`已扫描 plugins/ 目录:发现 ${t.totalDlls} dll,新加载 ${t.newlyLoaded};进程类型 ${t.missionTypes}、车辆/脚本类型 ${t.carTypes}`),await B(),me.value?.refresh()}catch(t){f.error(`刷新插件失败:${t.message}`)}finally{I.value=!1}}const ue=p(!1),S=p(""),i=nl({name:"",layer:"",x:0,y:0,z:0,siteA:0,siteB:0,trackKind:"line",imagePath:"",modelPath:"",content:"Text"});function mt(t){switch(t){case"site":return"站点";case"track":return"路径";case"image":return"图片";case"text":return"文本";case"model":return"模型";case"car":return"车辆";default:return t}}function Be(t){const e=t??(m.kind==="special"?"image":m.kind==="scene"?"site":m.kind==="vehicle"?"car":m.kind);S.value=e,i.name="",i.layer="",i.x=0,i.y=0,i.z=0,i.siteA=0,i.siteB=0,i.trackKind="line",i.imagePath="",i.modelPath="",i.content="Text",ue.value=!0}le({openCreateForm:Be,refresh:B});async function ze(){w.value=!0;try{const t=S.value;let e=t;const s={name:i.name||void 0,layer:i.layer||void 0};t==="site"?(s.x=i.x,s.y=i.y,s.z=i.z):t==="track"?(e=i.trackKind==="line"?"track":i.trackKind,s.siteA=i.siteA,s.siteB=i.siteB):t==="image"?(s.x=i.x,s.y=i.y,s.imagePath=i.imagePath):t==="text"?(s.x=i.x,s.y=i.y,s.content=i.content):t==="model"?(s.x=i.x,s.y=i.y,s.modelPath=i.modelPath):t==="car"&&(s.x=i.x,s.y=i.y);const u=await $.createObject(e,"",s);f.success(`已创建 ${u.typeName??t} #${u.id}`),ue.value=!1,await B();const r=K.value.find(F=>F.id===u.id);r&&await j(r),await ie()}catch(t){f.error(`创建失败:${t.message}`)}finally{w.value=!1}}async function pt(t){try{let e;try{e=(await G.prompt(`为新${m.kindLabel}指定名称(可空,留空使用默认名)`,`新建${m.kindLabel}`,{inputValue:"",confirmButtonText:"创建",cancelButtonText:"取消"})).value||void 0}catch{return}const s=await $.createObject(m.kind,t,{name:e});f.success(`已创建 ${s.typeName} #${s.id}`),await B();const u=K.value.find(r=>r.id===s.id);u&&await j(u),await ie()}catch(e){f.error(`创建失败:${e.message}`)}}async function vt(t){try{await G.confirm(`确认删除 ${t.typeName} #${t.id} (${t.name})?该操作无法撤销。`,`删除${m.kindLabel}`,{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"})}catch{return}R.value=t.id;try{const e=se(t);await $.deleteObject(e,t.id),f.success(`已删除 ${t.typeName} #${t.id}`),d.value?.id===t.id&&(d.value=null),await B(),await ie()}catch(e){f.error(`删除失败:${e.message}`)}finally{R.value=null}}async function te(t,e){if(d.value){E.value=t;try{const s=se(d.value);await $.setField(s,d.value.id,t,e),f.success(`已更新 ${t}`),await ie()}catch(s){f.error(`更新 ${t} 失败:${s.message}`),await j(d.value)}finally{E.value=null}}}async function ft(t){if(d.value){try{await G.confirm(`确认删除动态字段 "${t}"?`,"删除字段",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"})}catch{return}U.value=t;try{const e=se(d.value);await $.deleteField(e,d.value.id,t),f.success(`已删除字段 ${t}`),await j(d.value),await ie()}catch(e){f.error(`删除字段失败:${e.message}`)}finally{U.value=null}}}async function yt(){if(!d.value)return;let t="";try{t=(await G.prompt("字段名(key)","添加动态字段",{inputValidator:u=>!!u&&/^[A-Za-z_][A-Za-z0-9_\-]*$/.test(u)||"只允许字母/数字/下划线/横线,且首字符非数字",confirmButtonText:"下一步",cancelButtonText:"取消"})).value}catch{return}let e="";try{e=(await G.prompt(`字段 "${t}" 的初始值(可空)`,"添加动态字段",{inputValue:"",confirmButtonText:"保存",cancelButtonText:"取消"})).value}catch{return}if(O.value.find(s=>s.key===t)){f.warning(`字段 ${t} 已存在,请直接编辑`);return}await te(t,e),await j(d.value)}async function Le(t){if(!t||!ve.value)return;const e=se(t),s=pl(e);if(s)try{await ge.push({path:vl,query:fl(s,t.id)})}catch(u){f.error(`跳转地图失败:${u.message}`)}}async function Ee(t){if(t){V.value="source",T.value=t.id;try{const e=await $.getScriptSource(t.id);ae.value=`脚本 ${e.name||e.typeName}(#${e.id}) 内容`,ee.value=e.script||"(无脚本)",D.value=!0}catch(e){f.error(`查看脚本失败:${e.message}`)}finally{V.value=null,T.value=null}}}async function De(t){if(t){V.value="status",T.value=t.id;try{const e=await $.getScriptExceptionStatus(t.id);ae.value=`脚本 ${e.name||e.typeName}(#${e.id}) 异常状态`,ee.value=e.report||"(无异常状态)",D.value=!0}catch(e){f.error(`查看异常状态失败:${e.message}`)}finally{V.value=null,T.value=null}}}function bt(){d.value&&Ee(d.value)}function gt(){d.value&&De(d.value)}function Ke(t,e){return T.value===t.id&&V.value===e}async function _t(){try{await navigator.clipboard.writeText(ee.value),f.success("已复制到剪贴板")}catch{f.warning("复制失败,请手动选择文本复制")}}async function kt(t){if(!d.value)return;const e=se(d.value);if(t.hasParams){const s={};for(const u of t.params)try{const r=await G.prompt(`参数 ${u.name} (${u.typeName})`+(u.hasDefault?`
|
||
默认: ${u.defaultValue}`:""),`调用 ${t.label??t.methodName}`,{inputValue:u.defaultValue??""});s[u.name]=r.value}catch{return}L.value=t.methodName;try{const u=await $.execute(e,d.value.id,t.methodName,s);f.success(`${t.label??t.methodName} 完成${u.returnValue?`:${u.returnValue}`:""}`),await j(d.value)}catch(u){f.error(`执行失败:${u.message}`)}finally{L.value=null}return}L.value=t.methodName;try{const s=await $.execute(e,d.value.id,t.methodName);f.success(`${t.label??t.methodName} 完成${s.returnValue?`:${s.returnValue}`:""}`),await j(d.value)}catch(s){f.error(`执行失败:${s.message}`)}finally{L.value=null}}function ht(t){return t.typeName==="Boolean"?!0:t.value==="true"||t.value==="false"||t.value==="True"||t.value==="False"}function wt(t){return t.key==="color"||t.key==="textColor"?!0:/^#[0-9a-fA-F]{3,8}$/.test(t.value)}function $t(t){return t.typeName?["Int32","Int64","Single","Double","Decimal","UInt32","UInt64"].includes(t.typeName):!1}function xt(t){return t==="true"||t==="True"||t==="1"}function Ct(t){if(t==null||t==="")return;const e=Number(t);return Number.isFinite(e)?e:void 0}function Vt(t){const e=t.typeName?.trim();return e&&e!=="String"?`${t.key} (${e})`:t.key}function St(t){const e=(t.value??"").trim();return e||(t.typeName?`(空 · ${t.typeName})`:"(空)")}function Pt(t){if((t.typeName??"").endsWith("[]"))return!0;const s=(t.value??"").trim();return s.startsWith("[")||s.startsWith("{")}return ul({onObjectCreated:()=>B(),onObjectDeleted:()=>B(),onObjectPatched:()=>{d.value&&j(d.value)},onObjectBatchChanged:()=>B()}),Ue(()=>m.kind,B),Oe(B),(t,e)=>{const s=It,u=Rt,r=Ge,F=Ut,fe=Mt,re=ol,q=Ze,X=Ye,ye=Xe,Fe=We,Re=et,Nt=Qe,we=qt,Tt=Jt,Bt=Yt,zt=Qt,Y=Zt,$e=Xt,xe=sl,be=ll,Lt=tl,P=al,Et=el,Ie=Ht,Dt=qe;return o(),v("div",wl,[n(hl,{ref_key:"pluginPanelRef",ref:me,visible:!0,onChanged:B},null,512),b("div",$l,[b("h2",xl,h(y.title),1),b("div",Cl,[n(u,{modelValue:Z.value,"onUpdate:modelValue":e[0]||(e[0]=l=>Z.value=l),placeholder:`搜索 ${y.kindLabel} (id / 名称 / 类型)`,size:"small",clearable:"",class:"ref-mgr-search"},{prefix:a(()=>[n(s,null,{default:a(()=>[n(M(At))]),_:1})]),_:1},8,["modelValue","placeholder"]),y.disableCreate?_("",!0):(o(),v(z,{key:0},[st.value?(o(),c(re,{key:0,trigger:"click",disabled:ne.value.length===0,onCommand:pt},{dropdown:a(()=>[n(fe,null,{default:a(()=>[(o(!0),v(z,null,de(ne.value,l=>(o(),c(F,{key:l.typeName,command:l.typeName},{default:a(()=>[g(h(l.label)+" ",1),b("span",Vl,"· "+h(l.shortName),1)]),_:2},1032,["command"]))),128)),ne.value.length===0?(o(),c(F,{key:0,disabled:""},{default:a(()=>[...e[21]||(e[21]=[g(" 未发现可创建的子类型 ",-1)])]),_:1})):_("",!0)]),_:1})]),default:a(()=>[n(r,{type:"primary",size:"small",icon:M(Ae),disabled:ne.value.length===0},{default:a(()=>[g(" 新建"+h(y.kindLabel),1),n(s,{class:"el-icon--right"},{default:a(()=>[n(M(jt))]),_:1})]),_:1},8,["icon","disabled"])]),_:1},8,["disabled"])):(o(),c(r,{key:1,type:"primary",size:"small",icon:M(Ae),onClick:e[1]||(e[1]=l=>Be())},{default:a(()=>[g(" 新建"+h(y.kindLabel),1)]),_:1},8,["icon"]))],64)),n(q,{content:"重新扫描 ./plugins 目录加载新增 .dll,并重建可创建类型列表",placement:"bottom"},{default:a(()=>[n(r,{size:"small",loading:I.value,icon:M(Ot),onClick:ct},{default:a(()=>[...e[22]||(e[22]=[g(" 刷新插件 ",-1)])]),_:1},8,["loading","icon"])]),_:1}),n(r,{size:"small",loading:Q.value,icon:M(He),onClick:B},{default:a(()=>[...e[23]||(e[23]=[g("刷新",-1)])]),_:1},8,["loading","icon"]),Ce.value?(o(),c(q,{key:1,content:at.value,placement:"bottom"},{default:a(()=>[n(r,{size:"small",type:"primary",loading:A.value,icon:M(Wt),onClick:dt},{default:a(()=>[g(h(Se.value),1)]),_:1},8,["loading","icon"])]),_:1},8,["content"])):_("",!0)])]),b("div",Sl,[n(Re,{shadow:"never",class:"ref-mgr-list-card"},{default:a(()=>[Je((o(),c(ye,{ref_key:"tableRef",ref:pe,data:Pe.value,"row-key":"id",stripe:"",border:"",size:"small","highlight-current-row":"",class:"ref-mgr-table",onCurrentChange:j},{default:a(()=>[n(X,{prop:"id",label:"ID",width:"70"}),n(X,{prop:"name",label:"名称","min-width":"160"}),n(X,{prop:"typeName",label:"类型",width:"160","show-overflow-tooltip":""}),y.showSummaryColumn?(o(),c(X,{key:0,prop:"summary",label:y.summaryLabel??"概况","min-width":"160","show-overflow-tooltip":""},null,8,["label"])):_("",!0),y.showStatusColumn?(o(),c(X,{key:1,prop:"status",label:y.statusLabel??"状态",width:"120","show-overflow-tooltip":""},null,8,["label"])):_("",!0),n(X,{label:"操作",width:nt.value},{default:a(({row:l})=>[ve.value?(o(),c(r,{key:0,text:"",size:"small",onClick:ce(k=>Le(l),["stop"])},{default:a(()=>[...e[24]||(e[24]=[g(" 查看对象 ",-1)])]),_:1},8,["onClick"])):_("",!0),y.showScriptActions&&y.kind==="script"?(o(),v(z,{key:1},[n(r,{text:"",size:"small",loading:Ke(l,"source"),disabled:V.value!==null,onClick:ce(k=>Ee(l),["stop"])},{default:a(()=>[...e[25]||(e[25]=[g(" 查看脚本 ",-1)])]),_:1},8,["loading","disabled","onClick"]),n(r,{text:"",size:"small",loading:Ke(l,"status"),disabled:V.value!==null,onClick:ce(k=>De(l),["stop"])},{default:a(()=>[...e[26]||(e[26]=[g(" 异常状态 ",-1)])]),_:1},8,["loading","disabled","onClick"])],64)):_("",!0),y.disableDelete?_("",!0):(o(),c(r,{key:2,text:"",size:"small",type:"danger",loading:R.value===l.id,onClick:ce(k=>vt(l),["stop"])},{default:a(()=>[...e[27]||(e[27]=[g(" 删除 ",-1)])]),_:1},8,["loading","onClick"]))]),_:1},8,["width"])]),_:1},8,["data"])),[[Dt,Q.value]]),!Q.value&&Pe.value.length===0?(o(),c(Fe,{key:0,description:y.emptyText},null,8,["description"])):_("",!0)]),_:1}),n(Re,{shadow:"never",class:"ref-mgr-detail-card"},{default:a(()=>[d.value?(o(),v(z,{key:1},[b("div",Pl,[b("div",Nl,[n(Nt,{size:"small",type:"info"},{default:a(()=>[g(h(d.value.typeName),1)]),_:1}),b("span",Tl,"#"+h(d.value.id),1),b("span",Bl,h(d.value.name),1)]),ve.value?(o(),v("div",zl,[b("button",{class:"header-action-btn",onClick:e[2]||(e[2]=l=>Le(d.value))},"查看对象")])):_("",!0)]),n(Tt,{modelValue:oe.value,"onUpdate:modelValue":e[3]||(e[3]=l=>oe.value=l),class:"detail-tabs"},{default:a(()=>[n(we,{label:"属性",name:"properties"}),n(we,{label:"状态",name:"status"}),n(we,{label:"动作",name:"action"})]),_:1},8,["modelValue"]),b("div",Ll,[oe.value==="properties"?(o(),v(z,{key:0},[b("div",El,[b("div",Dl,"强类型字段 ("+h(_e.value.length)+")",1),_e.value.length>0?(o(),c(xe,{key:0,column:2,border:"",size:"small"},{default:a(()=>[(o(!0),v(z,null,de(_e.value,l=>(o(),c($e,{key:l.key,label:l.key,"label-style":l.locked?{color:"#aaa"}:void 0},{default:a(()=>[ht(l)?(o(),c(Bt,{key:0,"model-value":xt(l.value),disabled:!!l.locked||E.value===l.key,size:"small",onChange:k=>te(l.key,k?"true":"false")},null,8,["model-value","disabled","onChange"])):wt(l)?(o(),c(zt,{key:1,"model-value":l.value||"#ffffff",disabled:!!l.locked||E.value===l.key,"show-alpha":"",size:"small",onChange:k=>te(l.key,k??"")},null,8,["model-value","disabled","onChange"])):$t(l)?(o(),c(Y,{key:2,"model-value":Ct(l.value),controls:!1,disabled:!!l.locked||E.value===l.key,size:"small",class:"field-num",onChange:k=>te(l.key,k==null?"":String(k))},null,8,["model-value","disabled","onChange"])):(o(),c(u,{key:3,modelValue:l.value,"onUpdate:modelValue":k=>l.value=k,size:"small",disabled:!!l.locked||E.value===l.key,onChange:k=>te(l.key,k)},null,8,["modelValue","onUpdate:modelValue","disabled","onChange"]))]),_:2},1032,["label","label-style"]))),128))]),_:1})):(o(),v("div",Kl,"该对象未声明任何 [FieldMember]"))]),b("div",Fl,[b("div",Rl,[b("span",null,"动态字段 ("+h(ke.value.length)+")",1),b("button",{class:"add-field-btn",onClick:yt},"+ 添加字段")]),ke.value.length>0?(o(),c(xe,{key:0,column:1,border:"",size:"small"},{default:a(()=>[(o(!0),v(z,null,de(ke.value,l=>(o(),c($e,{key:l.key,label:l.key},{default:a(()=>[b("div",Il,[n(u,{modelValue:l.value,"onUpdate:modelValue":k=>l.value=k,size:"small",disabled:E.value===l.key,onChange:k=>te(l.key,k)},null,8,["modelValue","onUpdate:modelValue","disabled","onChange"]),n(q,{content:"删除该字段",placement:"top"},{default:a(()=>[n(r,{size:"small",text:"",type:"danger",loading:U.value===l.key,onClick:k=>ft(l.key)},{default:a(()=>[...e[28]||(e[28]=[g(" 删除 ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)])]),_:2},1032,["label"]))),128))]),_:1})):(o(),v("div",Al,"尚无动态字段;点击右上角「+ 添加字段」"))])],64)):oe.value==="status"?(o(),v("div",jl,[b("div",Ml,"运行状态 (只读, "+h(W.value.length)+")",1),W.value.length>0?(o(),c(xe,{key:0,column:1,border:"",size:"small"},{default:a(()=>[(o(!0),v(z,null,de(W.value,l=>(o(),c($e,{key:l.key,label:Vt(l)},{default:a(()=>[b("span",{class:Gt(["status-value",{"status-value--array":Pt(l)}]),title:l.typeName},h(St(l)),11,Ul)]),_:2},1032,["label"]))),128))]),_:1})):(o(),v("div",Ol,"暂无运行状态信息"))])):(o(),v("div",Wl,[b("div",Jl,"动作 / 方法 ("+h(lt.value)+")",1),H.value?(o(),v("div",ql,"加载方法中…")):(o(),v(z,{key:1},[he.value?(o(),v("div",Xl,[n(q,{content:"弹窗展示当前 CarProgram 的完整 script 内容",placement:"top"},{default:a(()=>[b("button",{class:"method-btn",disabled:V.value!==null,onClick:bt},[V.value==="source"?(o(),v("span",Ql,"⟳")):(o(),v("span",Zl,"▶")),e[29]||(e[29]=b("span",{class:"method-btn-label"},"查看脚本",-1))],8,Yl)]),_:1}),n(q,{content:"弹窗展示 state、exception、notifies 等异常状态报告",placement:"top"},{default:a(()=>[b("button",{class:"method-btn",disabled:V.value!==null,onClick:gt},[V.value==="status"?(o(),v("span",Hl,"⟳")):(o(),v("span",ea,"▶")),e[30]||(e[30]=b("span",{class:"method-btn-label"},"查看异常状态",-1))],8,Gl)]),_:1})])):_("",!0),J.value.length===0&&!he.value?(o(),v("div",ta,"该类型未暴露 [MethodMember]")):J.value.length>0?(o(),v("div",la,[(o(!0),v(z,null,de(J.value,l=>(o(),c(q,{key:l.methodName,content:l.description??l.hint??"",disabled:!l.description&&!l.hint,placement:"top"},{default:a(()=>[b("button",{class:"method-btn",disabled:L.value===l.methodName,onClick:k=>kt(l)},[L.value===l.methodName?(o(),v("span",na,"⟳")):(o(),v("span",oa,"▶")),b("span",sa,h(l.label??l.methodName),1),l.hasParams?(o(),v("span",ia,"带参")):_("",!0)],8,aa)]),_:2},1032,["content","disabled"]))),128))])):_("",!0)],64))]))])],64)):(o(),c(Fe,{key:0,description:"左侧选中一行查看 / 编辑详情"}))]),_:1})]),n(Ie,{modelValue:ue.value,"onUpdate:modelValue":e[18]||(e[18]=l=>ue.value=l),title:`新建 ${y.kindLabel}${S.value?" · "+mt(S.value):""}`,width:"480px","append-to-body":""},{footer:a(()=>[n(r,{onClick:e[17]||(e[17]=l=>ue.value=!1)},{default:a(()=>[...e[35]||(e[35]=[g("取消",-1)])]),_:1}),n(r,{type:"primary",loading:w.value,onClick:ze},{default:a(()=>[...e[36]||(e[36]=[g("创建",-1)])]),_:1},8,["loading"])]),default:a(()=>[n(Et,{model:i,size:"small","label-width":"100px",onSubmit:ce(ze,["prevent"])},{default:a(()=>[S.value==="track"?(o(),c(P,{key:0,label:"路径类型"},{default:a(()=>[n(Lt,{modelValue:i.trackKind,"onUpdate:modelValue":e[4]||(e[4]=l=>i.trackKind=l)},{default:a(()=>[n(be,{value:"line"},{default:a(()=>[...e[31]||(e[31]=[g("直线",-1)])]),_:1}),n(be,{value:"bezier"},{default:a(()=>[...e[32]||(e[32]=[g("贝塞尔",-1)])]),_:1}),n(be,{value:"arc"},{default:a(()=>[...e[33]||(e[33]=[g("圆弧",-1)])]),_:1}),n(be,{value:"nurbs"},{default:a(()=>[...e[34]||(e[34]=[g("NURBS",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):_("",!0),n(P,{label:"名称"},{default:a(()=>[n(u,{modelValue:i.name,"onUpdate:modelValue":e[5]||(e[5]=l=>i.name=l),placeholder:"(可空,留空走默认名)"},null,8,["modelValue"])]),_:1}),n(P,{label:"图层"},{default:a(()=>[n(u,{modelValue:i.layer,"onUpdate:modelValue":e[6]||(e[6]=l=>i.layer=l),placeholder:"g / main / ..."},null,8,["modelValue"])]),_:1}),["site","image","text","model"].includes(S.value)?(o(),v(z,{key:1},[n(P,{label:"X (mm)"},{default:a(()=>[n(Y,{modelValue:i.x,"onUpdate:modelValue":e[7]||(e[7]=l=>i.x=l),controls:!1},null,8,["modelValue"])]),_:1}),n(P,{label:"Y (mm)"},{default:a(()=>[n(Y,{modelValue:i.y,"onUpdate:modelValue":e[8]||(e[8]=l=>i.y=l),controls:!1},null,8,["modelValue"])]),_:1}),S.value==="site"?(o(),c(P,{key:0,label:"Z (mm)"},{default:a(()=>[n(Y,{modelValue:i.z,"onUpdate:modelValue":e[9]||(e[9]=l=>i.z=l),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0)],64)):_("",!0),S.value==="track"?(o(),v(z,{key:2},[n(P,{label:"起点站 ID"},{default:a(()=>[n(Y,{modelValue:i.siteA,"onUpdate:modelValue":e[10]||(e[10]=l=>i.siteA=l),controls:!1,min:1},null,8,["modelValue"])]),_:1}),n(P,{label:"终点站 ID"},{default:a(()=>[n(Y,{modelValue:i.siteB,"onUpdate:modelValue":e[11]||(e[11]=l=>i.siteB=l),controls:!1,min:1},null,8,["modelValue"])]),_:1})],64)):_("",!0),S.value==="image"?(o(),c(P,{key:3,label:"图片路径"},{default:a(()=>[n(u,{modelValue:i.imagePath,"onUpdate:modelValue":e[12]||(e[12]=l=>i.imagePath=l),placeholder:"/uploads/xxxxx.png"},null,8,["modelValue"])]),_:1})):_("",!0),S.value==="model"?(o(),c(P,{key:4,label:"模型路径"},{default:a(()=>[n(u,{modelValue:i.modelPath,"onUpdate:modelValue":e[13]||(e[13]=l=>i.modelPath=l),placeholder:"/uploads/xxxxx.glb"},null,8,["modelValue"])]),_:1})):_("",!0),S.value==="text"?(o(),c(P,{key:5,label:"文本"},{default:a(()=>[n(u,{modelValue:i.content,"onUpdate:modelValue":e[14]||(e[14]=l=>i.content=l),placeholder:"Text"},null,8,["modelValue"])]),_:1})):_("",!0),S.value==="car"?(o(),c(P,{key:6,label:"X (mm)"},{default:a(()=>[n(Y,{modelValue:i.x,"onUpdate:modelValue":e[15]||(e[15]=l=>i.x=l),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0),S.value==="car"?(o(),c(P,{key:7,label:"Y (mm)"},{default:a(()=>[n(Y,{modelValue:i.y,"onUpdate:modelValue":e[16]||(e[16]=l=>i.y=l),controls:!1},null,8,["modelValue"])]),_:1})):_("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),n(Ie,{modelValue:D.value,"onUpdate:modelValue":e[20]||(e[20]=l=>D.value=l),title:ae.value,width:"720px","append-to-body":""},{footer:a(()=>[n(r,{onClick:_t},{default:a(()=>[...e[37]||(e[37]=[g("复制",-1)])]),_:1}),n(r,{type:"primary",onClick:e[19]||(e[19]=l=>D.value=!1)},{default:a(()=>[...e[38]||(e[38]=[g("关闭",-1)])]),_:1})]),default:a(()=>[n(u,{"model-value":ee.value,type:"textarea",autosize:{minRows:16,maxRows:26},readonly:"",class:"script-dialog-textarea"},null,8,["model-value"])]),_:1},8,["modelValue","title"])])}}}),Ea=tt(ua,[["__scopeId","data-v-19454213"]]);export{Ea as R};
|