将维护策略与车队生命周期并入车辆运维 Tab,补充旧路由重定向与 RBAC 页面 key 迁移;改进 Workspace3D 就绪探测与 wwwroot 静态资源。 Co-authored-by: Cursor <cursoragent@cursor.com>
3 lines
8.6 KiB
JavaScript
3 lines
8.6 KiB
JavaScript
import{aG as R,bG as se,b5 as ie,b7 as l,aC as C,az as V,bo as h,aA as i,bH as o,ah as re,bh as ce,F as ue,aB as L,aF as n,R as de,Q as pe,br as O,bl as me,r as fe,bg as _e,aJ as ve,aE as N,bI as ye,by as be,a9 as ge,aa as ke,a7 as he,S as Ee,ac as Ce,L as we,bf as d,av as M,X as P,Y as je,C as Fe,t as Se,be as Ve,aj as q,ab as Le,a8 as Be}from"./index-CC_hCGHZ.js";/* 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 *//* empty css *//* empty css *//* empty css *//* empty css */import{r as E}from"./reflection-CTDOoTn5.js";const $e={class:"fme-root"},Ie={class:"fme-header"},xe={class:"fme-desc"},Ne={key:0,class:"fme-path"},Pe={key:1,class:"fme-path-empty"},ze={class:"fme-toolbar"},Te={class:"fme-btn-text"},Ue={key:0,class:"fme-locked"},Ae=R({__name:"FieldMemberEditor",props:{targetLabel:{},description:{},loader:{type:Function},onSet:{type:Function},onSave:{type:Function}},setup(B,{expose:f}){const _=B,v=d(!1),y=d(!1),w=d(""),p=d([]),j=d([]),$=d("保存"),c=Ve({}),z=d(!1),s=M(()=>{const e=w.value.trim().toLowerCase();return e?p.value.filter(t=>t.key.toLowerCase().includes(e)||t.label.toLowerCase().includes(e)):p.value}),m=M(()=>p.value.reduce((e,t)=>t.locked?e:c[t.key]!==t.value?e+1:e,0)),g=M(()=>m.value>0);function T(e){return e==="Boolean"}function U(e){return e==="Int32"||e==="Int64"||e==="Int16"||e==="Byte"}function Q(e){return e==="Single"||e==="Double"||e==="Decimal"}function X(e){const t=(e??"").trim().toLowerCase();return t==="true"||t==="1"||t==="yes"}function Y(e){const t=parseInt(e,10);return Number.isFinite(t)?t:0}function K(e){const t=parseFloat(e);return Number.isFinite(t)?t:0}function I(e){return c[e.key]??e.value}function x(e,t){c[e.key]=t}function W(e){if(e.locked)return!1;const t=c[e.key];return t!==void 0&&t!==e.value}async function k(){v.value=!0;try{const e=await _.loader();p.value=e.fields,j.value=e.pathInfos??[],e.saveButtonLabel&&($.value=e.saveButtonLabel);for(const t of e.fields)c[t.key]=t.value;for(const t of Object.keys(c))e.fields.find(u=>u.key===t)||delete c[t]}catch(e){P.error(`加载${_.targetLabel}失败:${e.message}`)}finally{v.value=!1}}function Z(){for(const e of p.value)c[e.key]=e.value}async function ee(){const e=p.value.filter(r=>!r.locked&&c[r.key]!==r.value);y.value=!0;let t=0;const u=[];for(const r of e)try{await _.onSet(r.key,c[r.key]??""),t+=1}catch(F){u.push({key:r.key,reason:F.message})}if(u.length>0){y.value=!1;try{await je.confirm(`共 ${e.length} 项改动:成功 ${t},失败 ${u.length}(首项: ${u[0].key} → ${u[0].reason})。
|
||
是否仍要把已成功应用的改动持久化到磁盘?`,"部分字段写入失败",{confirmButtonText:"仍然保存",cancelButtonText:"取消",type:"warning"})}catch{P.warning(`已取消保存(${t} 项已写入内存,${u.length} 项未生效)`),await k();return}y.value=!0}try{const r=await _.onSave();P.success(`已保存到:${r.path}(应用 ${t} 项改动${u.length>0?`;${u.length} 项失败已忽略`:""})`),await k()}catch(r){P.error(`保存失败:${r.message}`)}finally{y.value=!1}}return se(()=>_.loader,()=>{k()}),ie(k),f({refresh:k}),(e,t)=>{const u=ue,r=Fe,F=pe,H=de,A=fe,S=ke,te=he,J=Ee,D=Ce,ae=ge,le=we,oe=Se,ne=be;return l(),C("div",$e,[V("div",Ie,[V("p",xe,h(B.description),1),j.value.length>0?(l(),i(r,{key:0,column:1,size:"small",border:"",class:"fme-paths"},{default:o(()=>[(l(!0),C(re,null,ce(j.value,a=>(l(),i(u,{key:a.label,label:a.label},{default:o(()=>[a.value?(l(),C("code",Ne,h(a.value),1)):(l(),C("span",Pe,"("+h(a.emptyHint??"空")+")",1))]),_:2},1032,["label"]))),128))]),_:1})):L("",!0),V("div",ze,[n(H,{modelValue:w.value,"onUpdate:modelValue":t[0]||(t[0]=a=>w.value=a),placeholder:"按中文/英文键过滤",size:"small",clearable:"",class:"fme-search"},{prefix:o(()=>[n(F,null,{default:o(()=>[n(O(me))]),_:1})]),_:1},8,["modelValue"]),n(A,{size:"small",loading:v.value,onClick:k},{default:o(()=>[n(F,null,{default:o(()=>[n(O(_e))]),_:1}),t[1]||(t[1]=V("span",{class:"fme-btn-text"},"刷新",-1))]),_:1},8,["loading"]),n(A,{size:"small",type:"primary",disabled:!g.value&&!z.value,loading:y.value,onClick:ee},{default:o(()=>[n(F,null,{default:o(()=>[n(O(ve))]),_:1}),V("span",Te,h($.value)+h(g.value?`(${m.value} 项未应用)`:""),1)]),_:1},8,["disabled","loading"]),g.value?(l(),i(A,{key:0,size:"small",link:"",type:"warning",onClick:Z},{default:o(()=>[...t[2]||(t[2]=[N(" 放弃未应用的改动 ",-1)])]),_:1})):L("",!0)])]),ye((l(),i(oe,{shadow:"never",class:"fme-table-card"},{default:o(()=>[n(ae,{data:s.value,stripe:"",border:"",size:"small",height:"100%",class:"fme-table","row-key":"key"},{default:o(()=>[n(S,{label:"中文说明",prop:"label","min-width":"240","show-overflow-tooltip":""}),n(S,{label:"英文键",prop:"key",width:"240","show-overflow-tooltip":""}),n(S,{label:"类型",prop:"typeName",width:"100"}),n(S,{label:"当前值(可编辑)","min-width":"260"},{default:o(({row:a})=>[a.locked?(l(),C("span",Ue,h(a.value)+"(🔒 锁定)",1)):T(a.typeName)?(l(),i(te,{key:1,"model-value":X(I(a)),"onUpdate:modelValue":b=>x(a,String(!!b))},null,8,["model-value","onUpdate:modelValue"])):U(a.typeName)?(l(),i(J,{key:2,"model-value":Y(I(a)),controls:!1,step:1,precision:0,size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,String(b??0))},null,8,["model-value","onUpdate:modelValue"])):Q(a.typeName)?(l(),i(J,{key:3,"model-value":K(I(a)),controls:!1,step:.1,size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,String(b??0))},null,8,["model-value","onUpdate:modelValue"])):(l(),i(H,{key:4,"model-value":I(a),size:"small",class:"fme-input","onUpdate:modelValue":b=>x(a,b)},null,8,["model-value","onUpdate:modelValue"]))]),_:1}),n(S,{label:"状态",width:"100",align:"center"},{default:o(({row:a})=>[a.locked?(l(),i(D,{key:0,size:"small",type:"info",effect:"plain"},{default:o(()=>[...t[3]||(t[3]=[N("只读",-1)])]),_:1})):W(a)?(l(),i(D,{key:1,size:"small",type:"warning",effect:"dark"},{default:o(()=>[...t[4]||(t[4]=[N("已修改",-1)])]),_:1})):(l(),i(D,{key:2,size:"small",type:"success",effect:"plain"},{default:o(()=>[...t[5]||(t[5]=[N("同步",-1)])]),_:1}))]),_:1})]),_:1},8,["data"]),!v.value&&p.value.length===0?(l(),i(le,{key:0,description:`未发现可编辑的 [FieldMember] 字段(target: ${B.targetLabel})`},null,8,["description"])):L("",!0)]),_:1})),[[ne,v.value]])])}}}),G=q(Ae,[["__scopeId","data-v-708f3ec1"]]),De={class:"pp-page"},Oe=R({__name:"ProjectPropertiesView",setup(B){const f=d("project"),_=d(null),v=d(null);function y(s){f.value=s}async function w(){const s=await E.getProjectFields();return{fields:s.fields,pathInfos:[{label:"最近加载/保存的项目 JSON",value:s.lastLoadedPath,emptyHint:"尚未通过 SimpleLite 加载或保存过项目"},{label:"simple.json autoload",value:s.autoloadPath,emptyHint:"未配置"}],saveButtonLabel:"保存(写回项目 JSON)"}}function p(s,m){return E.setProjectField(s,m)}async function j(){return{path:(await E.saveProject()).path}}async function $(){const s=await E.getAppConfigFields();return{fields:s.fields,pathInfos:[{label:"保存目标",value:s.savePath,emptyHint:"simple.json"}],saveButtonLabel:"保存(写入 simple.json)"}}function c(s,m){return E.setAppConfigField(s,m)}async function z(){return{path:(await E.saveAppConfig()).path}}return(s,m)=>{const g=Be,T=Le;return l(),C("div",De,[n(T,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=U=>f.value=U),type:"border-card",class:"pp-tabs admin-tabs",onTabChange:y},{default:o(()=>[n(g,{label:"项目属性 (Scene.conf)",name:"project"},{default:o(()=>[f.value==="project"?(l(),i(G,{key:0,ref_key:"projectEditor",ref:_,"target-label":"项目属性",description:"对应 SimpleLite 桌面端主菜单「项目属性…」。编辑字段后点「保存」即可一次完成内存生效 + 写回项目 JSON 文件(含全部场景/车辆/路径/属性)。",loader:w,"on-set":p,"on-save":j},null,512)):L("",!0)]),_:1}),n(g,{label:"核心配置 (simple.json)",name:"app-config"},{default:o(()=>[f.value==="app-config"?(l(),i(G,{key:0,ref_key:"appConfigEditor",ref:v,"target-label":"核心配置",description:"对应 SimpleLite 桌面端主菜单「核心配置 → 编辑配置…」。修改后点「保存」即可一次完成内存生效 + 写入可执行目录下的 simple.json。",loader:$,"on-set":c,"on-save":z},null,512)):L("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),st=q(Oe,[["__scopeId","data-v-b5a5a932"]]);export{st as default};
|