znyg-frontend-common 1.0.95 → 1.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{isVNode as e,defineComponent as t,useModel as n,shallowRef as a,ref as r,computed as i,unref as l,getCurrentInstance as o,nextTick as d,provide as s,watch as u,markRaw as c,useSlots as p,withDirectives as h,createVNode as m,vShow as f,mergeProps as v,onMounted as y,onBeforeUnmount as g,createElementBlock as b,openBlock as w,normalizeClass as V,createCommentVNode as _,createBlock as C,createElementVNode as L,toDisplayString as $,mergeModels as I}from"vue";import"./components/ZnFormV2Item.vue.mjs";import{getFormProp as x,setFormProp as S,hyphenToCamelCase as F,getPx as R}from"./helper/index.mjs";import{formEnumMapKey as k,ComponentNameEnum as z}from"./interface/index.mjs";import{ElForm as q,ElRow as E,ElCol as M,ElFormItem as j,ElSkeleton as P}from"element-plus";import{withSmartCache as T,clearRelatedCache as A}from"./utils/smartCache.mjs";import D from"./components/ZnFormV2Item.vue2.mjs";var O=Object.defineProperty,U=(e,t)=>O(e,"name",{value:t,configurable:!0});const B={key:0,class:"performance-panel",style:{position:"fixed","z-index":"9999",top:"10px",right:"10px",padding:"10px","border-radius":"4px",background:"rgb(0 0 0 / 80%)",color:"white","font-size":"12px"}},N={key:0,class:"loading",style:{display:"flex",position:"absolute","z-index":"1000",top:"50%",left:"50%","align-items":"center",transform:"translate(-50%, -50%)",gap:"10px"}};function H(t){return"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!e(t)}U(H,"_isSlot");const W="zn-form-v2";var J=t({name:"ZnFormV2",__name:"index",props:I({modelValue:{type:Object,required:!1,default:U((()=>({})),"default")},schema:{type:Array,required:!1,default:U((()=>[]),"default")},elFormProps:{required:!1,default:U((()=>({})),"default")},useCol:{type:Boolean,required:!1,default:!0},rowProps:{type:Object,required:!1},onlyRenderComponent:{type:Boolean,required:!1,default:!1},dynamicModel:{type:Boolean,required:!1,default:!0},includeModelKeys:{type:Array,required:!1},enumMapProps:{type:Map,required:!1},isView:{type:Boolean,required:!1,default:!1},disableRulesInView:{type:Boolean,required:!1,default:!0},lazyLoad:{type:Boolean,required:!1,default:!0},lazyLoadDelay:{type:Number,required:!1,default:16},initialLoadCount:{type:Number,required:!1,default:20},batchLoadCount:{type:Number,required:!1,default:30},lazyLoadDebug:{type:Boolean,required:!1,default:!1},delayLoad:{type:Number,required:!1,default:500},performanceConfig:{required:!1,default:U((()=>({enableMonitoring:!1,enableDebug:!1,reportInterval:5e3})),"default")},enableVirtualScroll:{type:Boolean,required:!1,default:!1},virtualScrollConfig:{required:!1,default:U((()=>({enabled:!1,height:400,itemHeight:60,buffer:5})),"default")},timeSliceConfig:{required:!1,default:U((()=>({enabled:!0,sliceSize:5,batchSize:10})),"default")},maxSyncRenderCount:{type:Number,required:!1,default:20},renderBatchSize:{type:Number,required:!1,default:10},renderDelay:{type:Number,required:!1,default:0},enablePerformanceMonitoring:{type:Boolean,required:!1,default:!1},excludeHiddenFieldsValidation:{type:Boolean,required:!1,default:!0}},{modelValue:{default:U((()=>({})),"default")},modelModifiers:{}}),emits:I(["update:modelValue","update:schema","register","onSearch","onReset","onChange","onEnumChange","onSchemaChange","onPerformanceUpdate"],["update:modelValue"]),setup(e,{expose:I,emit:O}){const J=1e3,Z=3e4,K=16;class G{static{U(this,"PerformanceCache")}cache=new Map;timers=new Map;hitCount=0;missCount=0;has(e){const t=this.cache.get(e);return!!(t&&Date.now()-t.timestamp<Z)||(t&&this.delete(e),!1)}get(e){const t=this.cache.get(e);if(t&&Date.now()-t.timestamp<Z)return this.hitCount++,t.value;this.missCount++,this.delete(e)}set(e,t){if(this.cache.size>=J){const e=this.cache.keys().next().value;this.delete(e)}this.cache.set(e,{value:t,timestamp:Date.now()}),this.timers.has(e)&&clearTimeout(this.timers.get(e));const n=setTimeout((()=>{this.delete(e)}),Z);this.timers.set(e,n)}delete(e){this.cache.delete(e);const t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e))}clear(){this.cache.clear(),this.timers.forEach((e=>clearTimeout(e))),this.timers.clear()}getStats(){return{size:this.cache.size,hitRate:this.hitCount/(this.hitCount+this.missCount)||0,hitCount:this.hitCount,missCount:this.missCount}}}const Y=U((()=>{const e=new Map;return(t,n,a=K)=>{e.has(t)&&clearTimeout(e.get(t));const r=setTimeout((()=>{n(),e.delete(t)}),a);e.set(t,r)}}),"createDebouncer"),Q=U((()=>{let e=null,t="",n="";return a=>{if(a===e)return t;const r=JSON.stringify(a,Object.keys(a).sort());if(r===n)return t;let i=0;for(let e=0;e<r.length;e++){i=(i<<5)-i+r.charCodeAt(e),i|=0}const l=i.toString(36);return e=a,t=l,n=r,l}}),"createModelHasher"),X=e,ee=O,te=n(e,"modelValue"),ne=a(),ae=r({}),re=i((()=>{const e={...X};return Object.assign(e,l(ae)),e})),ie=r(X.enumMapProps||new Map),le=r(new Set),oe=r([]),de=r(!1),se=r(X.delayLoad>0),ue=r(null),ce=(r(0),r([])),pe=new G,he=Y(),me=Q(),fe=r({renderTime:0,componentCount:0,cacheHitRate:0,queueLength:0,cacheStats:{size:0,hitRate:0,hitCount:0,missCount:0}}),ve=r(!1),ye=r(!1),ge=U((()=>{pe.clear()}),"clearCache"),be=(o(),U((()=>{ue.value&&(clearInterval(ue.value),ue.value=null),pe.clear()}),"cleanup")),we=U((async({enum:e,prop:t,cacheEnum:n=!0})=>{if(!e)return;const a=l(ie);if("function"!=typeof e)return a.set(t,l(e)),void(ie.value=new Map(a));try{a.set(t,[]);let n=await e(l(te),a);n=n?.result||n,Array.isArray(n)||(console.warn(`警告: '${t}' 的enum函数返回值不是数组`,n),n=[]),a.set(t,n),ie.value=new Map(a),d((()=>{if(t){const e=l(re).schema?.find((e=>e.prop===t));e&&Le(e)}}))}catch(e){console.error(`添加enum函数参数失败: '${t}'`,e),a.set(t,[]),ie.value=new Map(a)}}),"setEnumMap");s(k,ie);const Ve={setComponentRef:U(((e,t)=>{Ke.value.set(e,t)}),"setComponentRef"),setFormItemRef:U(((e,t)=>{Ze.value.set(e,t)}),"setFormItemRef")};s("componentRefsCollector",Ve);const _e={
1
+ import{isVNode as e,defineComponent as t,useModel as n,shallowRef as a,ref as r,computed as i,unref as l,getCurrentInstance as o,nextTick as d,provide as s,watch as u,markRaw as c,useSlots as p,withDirectives as h,createVNode as m,vShow as f,mergeProps as v,onMounted as y,onBeforeUnmount as g,createElementBlock as V,openBlock as b,normalizeClass as w,createCommentVNode as _,createBlock as I,createElementVNode as $,toDisplayString as C,mergeModels as L}from"vue";import"./components/ZnFormV2Item.vue.mjs";import{getFormProp as x,setFormProp as F,hyphenToCamelCase as S,getPx as k}from"./helper/index.mjs";import{formEnumMapKey as R,ComponentNameEnum as E}from"./interface/index.mjs";import{ElForm as z,ElRow as P,ElCol as j,ElFormItem as q,ElSkeleton as M}from"element-plus";import{withSmartCache as T,clearRelatedCache as D}from"./utils/smartCache.mjs";import A from"./components/ZnFormV2Item.vue2.mjs";var O=Object.defineProperty,N=(e,t)=>O(e,"name",{value:t,configurable:!0});const H={key:0,class:"performance-panel",style:{position:"fixed","z-index":"9999",top:"10px",right:"10px",padding:"10px","border-radius":"4px",background:"rgb(0 0 0 / 80%)",color:"white","font-size":"12px"}},U={key:0,class:"loading",style:{display:"flex",position:"absolute","z-index":"1000",top:"50%",left:"50%","align-items":"center",transform:"translate(-50%, -50%)",gap:"10px"}};function B(t){return"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!e(t)}N(B,"_isSlot");const W="zn-form-v2";var Z=t({name:"ZnFormV2",__name:"index",props:L({modelValue:{type:Object,required:!1,default:N((()=>({})),"default")},schema:{type:Array,required:!1,default:N((()=>[]),"default")},elFormProps:{required:!1,default:N((()=>({})),"default")},useCol:{type:Boolean,required:!1,default:!0},rowProps:{type:Object,required:!1},onlyRenderComponent:{type:Boolean,required:!1,default:!1},dynamicModel:{type:Boolean,required:!1,default:!0},includeModelKeys:{type:Array,required:!1},enumMapProps:{type:Map,required:!1},isView:{type:Boolean,required:!1,default:!1},disableRulesInView:{type:Boolean,required:!1,default:!0},lazyLoad:{type:Boolean,required:!1,default:!0},lazyLoadDelay:{type:Number,required:!1,default:16},initialLoadCount:{type:Number,required:!1,default:20},batchLoadCount:{type:Number,required:!1,default:30},lazyLoadDebug:{type:Boolean,required:!1,default:!1},delayLoad:{type:Number,required:!1,default:500},performanceConfig:{required:!1,default:N((()=>({enableMonitoring:!1,enableDebug:!1,reportInterval:5e3})),"default")},enableVirtualScroll:{type:Boolean,required:!1,default:!1},virtualScrollConfig:{required:!1,default:N((()=>({enabled:!1,height:400,itemHeight:60,buffer:5})),"default")},timeSliceConfig:{required:!1,default:N((()=>({enabled:!0,sliceSize:5,batchSize:10})),"default")},maxSyncRenderCount:{type:Number,required:!1,default:20},renderBatchSize:{type:Number,required:!1,default:10},renderDelay:{type:Number,required:!1,default:0},enablePerformanceMonitoring:{type:Boolean,required:!1,default:!1},excludeHiddenFieldsValidation:{type:Boolean,required:!1,default:!0}},{modelValue:{default:N((()=>({})),"default")},modelModifiers:{}}),emits:L(["update:modelValue","update:schema","register","onSearch","onReset","onChange","onEnumChange","onSchemaChange","onPerformanceUpdate"],["update:modelValue"]),setup(e,{expose:L,emit:O}){const Z=1e3,J=3e4,K=16;class G{static{N(this,"PerformanceCache")}cache=new Map;timers=new Map;hitCount=0;missCount=0;has(e){const t=this.cache.get(e);return!!(t&&Date.now()-t.timestamp<J)||(t&&this.delete(e),!1)}get(e){const t=this.cache.get(e);if(t&&Date.now()-t.timestamp<J)return this.hitCount++,t.value;this.missCount++,this.delete(e)}set(e,t){if(this.cache.size>=Z){const e=this.cache.keys().next().value;this.delete(e)}this.cache.set(e,{value:t,timestamp:Date.now()}),this.timers.has(e)&&clearTimeout(this.timers.get(e));const n=setTimeout((()=>{this.delete(e)}),J);this.timers.set(e,n)}delete(e){this.cache.delete(e);const t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e))}clear(){this.cache.clear(),this.timers.forEach((e=>clearTimeout(e))),this.timers.clear()}getStats(){return{size:this.cache.size,hitRate:this.hitCount/(this.hitCount+this.missCount)||0,hitCount:this.hitCount,missCount:this.missCount}}}const Y=N((()=>{const e=new Map;return(t,n,a=K)=>{e.has(t)&&clearTimeout(e.get(t));const r=setTimeout((()=>{n(),e.delete(t)}),a);e.set(t,r)}}),"createDebouncer"),Q=N((()=>{let e=null,t="",n="";return a=>{if(a===e)return t;const r=JSON.stringify(a,Object.keys(a).sort());if(r===n)return t;let i=0;for(let e=0;e<r.length;e++){i=(i<<5)-i+r.charCodeAt(e),i|=0}const l=i.toString(36);return e=a,t=l,n=r,l}}),"createModelHasher"),X=e,ee=O,te=n(e,"modelValue"),ne=a(),ae=r({}),re=i((()=>{const e={...X};return Object.assign(e,l(ae)),e})),ie=r(X.enumMapProps||new Map),le=r(new Set),oe=r([]),de=r(!1),se=r(X.delayLoad>0),ue=r(null),ce=(r(0),r([])),pe=new G,he=Y(),me=Q(),fe=r({renderTime:0,componentCount:0,cacheHitRate:0,queueLength:0,cacheStats:{size:0,hitRate:0,hitCount:0,missCount:0}}),ve=r(!1),ye=r(!1),ge=N((()=>{pe.clear()}),"clearCache"),Ve=(o(),N((()=>{ue.value&&(clearInterval(ue.value),ue.value=null),pe.clear()}),"cleanup")),be=N((async({enum:e,prop:t,cacheEnum:n=!0})=>{if(!e)return;const a=l(ie);if("function"!=typeof e)return a.set(t,l(e)),void(ie.value=new Map(a));try{a.set(t,[]);let n=await e(l(te),a);n=n?.result||n,Array.isArray(n)||(console.warn(`警告: '${t}' 的enum函数返回值不是数组`,n),n=[]),a.set(t,n),ie.value=new Map(a),d((()=>{if(t){const e=l(re).schema?.find((e=>e.prop===t));e&&$e(e)}}))}catch(e){console.error(`添加enum函数参数失败: '${t}'`,e),a.set(t,[]),ie.value=new Map(a)}}),"setEnumMap");s(R,ie);const we={setComponentRef:N(((e,t)=>{Ke.value.set(e,t)}),"setComponentRef"),setFormItemRef:N(((e,t)=>{Je.value.set(e,t)}),"setFormItemRef")};s("componentRefsCollector",we);const _e={
2
2
  // 存储每个字段的render函数依赖关系
3
3
  dependencies:new Map,
4
4
  // prop -> Set of dependent fields
@@ -16,15 +16,15 @@ trackFieldAccess(e){this.currentTrackingRender&&(this.renderAccess.get(this.curr
16
16
  // 获取受某个字段变化影响的render函数
17
17
  getAffectedRenders(e){return this.dependencies.get(e)||new Set},
18
18
  // 清除某个字段的依赖
19
- clearDependencies(e){if(this.renderAccess.has(e)){this.renderAccess.get(e).forEach((t=>{const n=this.dependencies.get(t);n&&(n.delete(e),0===n.size&&this.dependencies.delete(t))})),this.renderAccess.delete(e)}this.dependencies.delete(e)}},Ce=U((e=>new Proxy(e,{get:(e,t)=>("string"==typeof t&&_e.currentTrackingRender&&_e.trackFieldAccess(t),e[t])})),"createTrackedModel");s("renderDependencyTracker",_e),s("createTrackedModel",Ce);const Le=U((async({defaultValue:e,fieldNames:t,prop:n})=>{const a=l(te),r=x(a,n);if(r||!1===r||0===r)return;const i=l(e);if(null!=i)return S(a,n,"function"!=typeof i?i:await i(a,l(ie)));const o=l(ie).get(n);if(o?.length){const e=o.filter((e=>"Y"===e.isDefault));return e.length&&S(a,n,e[0][t?.value??"value"])}}),"initDefaultValue"),$e=U((({prop:e,el:t,subProp:n,subEnum:a})=>{if(F(t)===z.EL_SELECT){if("string"!=typeof n)return;u((()=>x(l(te),e)),(async t=>{const r=l(ie);if(l(te)[n]&&(l(te)[n]=""),!a)return;if(!t)return r.set(n,[]);if(r.get(`${n}-${t}`))r.set(n,r.get(`${n}-${t}`)||[]);else if("function"==typeof a){const i=await a(t,r.get(e));r.set(`${n}-${t}`,i),r.set(n,i)}else Array.isArray(a)&&(r.set(`${n}-${t}`,a),r.set(n,a));const i=r.get(e)||[],[o]=i.filter((e=>e.value===t));o?.subValue&&(l(te)[n]=o.subValue)}),{immediate:!0})}}),"cascadeEnum"),Ie=U((e=>{if("boolean"==typeof e.hidden)return e.hidden;if("function"==typeof e.hidden){const t=e.hidden.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hidden(l(te));const n={prefix:"hidden",prop:e.prop};return T(e.hidden,n,te,pe)}return!1}),"getIsHidden"),xe=U((e=>{if(!X.isView)return!1;if("boolean"==typeof e.hiddenInView)return e.hiddenInView;if("function"==typeof e.hiddenInView){const t=e.hiddenInView.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hiddenInView(l(te));const n={prefix:"hiddenInView",prop:e.prop};return T(e.hiddenInView,n,te,pe,{isView:X.isView})}return!1}),"getIsHiddenInView"),Se=U((e=>{if("boolean"==typeof e.hiddenLabel)return e.hiddenLabel;if("function"==typeof e.hiddenLabel){const t=e.hiddenLabel.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hiddenLabel(l(te));const n={prefix:"hiddenLabel",prop:e.prop};return T(e.hiddenLabel,n,te,pe)}return!1}),"getIsHiddenLabel"),Fe=U((e=>{if("boolean"==typeof e.destroy)return e.destroy;if("function"==typeof e.destroy){const t=`destroy_${e.prop}_${me(l(te))}`;if(pe.has(t))return pe.get(t);const n=e.destroy(l(te));return pe.set(t,n),n}return!1}),"getIsDestroyed"),Re=i((()=>{if(X.delayLoad>0&&!de.value)return[];const e=l(re).schema||[],t=JSON.stringify(l(te)),n=e.map((e=>({prop:e.prop,hidden:Ie(e),hiddenInView:xe(e),hiddenLabel:Se(e)}))),a=`processedSchema_${e.map((e=>`${e.prop}_${e.el}_${!!e.render}_${!!e.renderInView}_${!!e.hidden}_${!!e.hiddenInView}_${!!e.hiddenLabel}`)).join("|")}_${t}_${JSON.stringify(n)}`;if(pe.has(a))return pe.get(a);const r=U((e=>e.filter((e=>!Fe(e))).sort(((e,t)=>(e.order||0)-(t.order||0))).map(((e,t)=>{const a=n.find((t=>t.prop===e.prop));return{...e,renderPriority:e.renderPriority||0,enableAsyncRender:!1!==e.enableAsyncRender,_index:t,_hidden:a?.hidden||!1,_hiddenInView:a?.hiddenInView||!1,_hiddenLabel:a?.hiddenLabel||!1}}))),"processSchema")(e);if(pe.getStats().size>100){const e=[];pe.cache.forEach(((t,n)=>{"string"==typeof n&&n.startsWith("processedSchema_")&&e.push(n)})),e.length>10&&e.slice(0,5).forEach((e=>pe.delete(e)))}return pe.set(a,r),r})),ke=i((()=>{const e=Re.value;if(!e.length)return[];if(Ye.value||e.length>X.maxSyncRenderCount){const t=Array.from(le.value);return e.filter(((e,n)=>t.includes(e.prop)||n<X.initialLoadCount))}return e})),ze=c(t({name:"RenderFormWrap",setup(){p();const e=new Map,t=U((e=>{const{useCol:t}=l(re),n=`${X.isView}_${Ye.value}_${t}`;if(Ye.value){const t=Array.from(le.value).sort(),a=e.map((e=>`${e.prop}:${e._hidden}:${e._hiddenInView}`)).join("|");return`lazy_${n}_${t.join("|")}_${a}`}return`full_${n}_${e.map((e=>`${e.prop}_${e._hidden}_${e._hiddenInView}_${e._index}`)).join("|")}`}),"getIncrementalCacheKey");return()=>{const{useCol:n,rowProps:a,onlyRenderComponent:r,elFormProps:i}=l(re),o=ke.value,d=t(o);if(e.has(d))return e.get(d);let s;s=r?o.map(((e,t)=>{const n=!e._hidden&&!e._hiddenInView;return h(m("div",{key:`${e.prop}_${t}`},[m(D,{column:e,modelValue:te.value,"onUpdate:modelValue":U((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),[[f,n]])})):m(q,v({ref:ne,model:te.value,class:[W,{"is-view":X.isView}]},i),{default:U((()=>[n?Ee(o):Me(o)]),"default")});const u=Ye.value?20:5;if(e.size>=u){const t=e.keys().next().value;e.delete(t)}return e.set(d,s),s}}})),qe=U(((e={})=>({
19
+ clearDependencies(e){if(this.renderAccess.has(e)){this.renderAccess.get(e).forEach((t=>{const n=this.dependencies.get(t);n&&(n.delete(e),0===n.size&&this.dependencies.delete(t))})),this.renderAccess.delete(e)}this.dependencies.delete(e)}},Ie=N((e=>new Proxy(e,{get:(e,t)=>("string"==typeof t&&_e.currentTrackingRender&&_e.trackFieldAccess(t),e[t])})),"createTrackedModel");s("renderDependencyTracker",_e),s("createTrackedModel",Ie);const $e=N((async({defaultValue:e,fieldNames:t,prop:n})=>{const a=l(te),r=x(a,n);if(r||!1===r||0===r)return;const i=l(e);if(null!=i)return F(a,n,"function"!=typeof i?i:await i(a,l(ie)));const o=l(ie).get(n);if(o?.length){const e=o.filter((e=>"Y"===e.isDefault));return e.length&&F(a,n,e[0][t?.value??"value"])}}),"initDefaultValue"),Ce=N((({prop:e,el:t,subProp:n,subEnum:a})=>{if(S(t)===E.EL_SELECT){if("string"!=typeof n)return;u((()=>x(l(te),e)),(async t=>{const r=l(ie);if(l(te)[n]&&(l(te)[n]=""),!a)return;if(!t)return r.set(n,[]);if(r.get(`${n}-${t}`))r.set(n,r.get(`${n}-${t}`)||[]);else if("function"==typeof a){const i=await a(t,r.get(e));r.set(`${n}-${t}`,i),r.set(n,i)}else Array.isArray(a)&&(r.set(`${n}-${t}`,a),r.set(n,a));const i=r.get(e)||[],[o]=i.filter((e=>e.value===t));o?.subValue&&(l(te)[n]=o.subValue)}),{immediate:!0})}}),"cascadeEnum"),Le=N((e=>{if("boolean"==typeof e.hidden)return e.hidden;if("function"==typeof e.hidden){const t=e.hidden.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hidden(l(te));try{return e.hidden(l(te))}catch(t){return console.warn(`Hidden function execution error for prop ${e.prop}:`,t),!1}}return!1}),"getIsHidden"),xe=N((e=>{if(!X.isView)return!1;if("boolean"==typeof e.hiddenInView)return e.hiddenInView;if("function"==typeof e.hiddenInView){const t=e.hiddenInView.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hiddenInView(l(te));try{return e.hiddenInView(l(te))}catch(t){return console.warn(`HiddenInView function execution error for prop ${e.prop}:`,t),!1}}return!1}),"getIsHiddenInView"),Fe=N((e=>{if("boolean"==typeof e.hiddenLabel)return e.hiddenLabel;if("function"==typeof e.hiddenLabel){const t=e.hiddenLabel.toString();if(!(t.includes("model.")||t.includes("formData.")))return e.hiddenLabel(l(te));const n={prefix:"hiddenLabel",prop:e.prop};return T(e.hiddenLabel,n,te,pe)}return!1}),"getIsHiddenLabel"),Se=N((e=>{if("boolean"==typeof e.destroy)return e.destroy;if("function"==typeof e.destroy){const t=`destroy_${e.prop}_${me(l(te))}`;if(pe.has(t))return pe.get(t);const n=e.destroy(l(te));return pe.set(t,n),n}return!1}),"getIsDestroyed"),ke=i((()=>{if(X.delayLoad>0&&!de.value)return[];const e=l(re).schema||[],t=JSON.stringify(l(te)),n=e.map((e=>({prop:e.prop,hidden:Le(e),hiddenInView:xe(e),hiddenLabel:Fe(e)}))),a=`processedSchema_${e.map((e=>`${e.prop}_${e.el}_${!!e.render}_${!!e.renderInView}_${!!e.hidden}_${!!e.hiddenInView}_${!!e.hiddenLabel}`)).join("|")}_${t}_${JSON.stringify(n)}`;if(pe.has(a))return pe.get(a);const r=N((e=>e.filter((e=>!Se(e))).sort(((e,t)=>(e.order||0)-(t.order||0))).map(((e,t)=>{const a=n.find((t=>t.prop===e.prop));return{...e,renderPriority:e.renderPriority||0,enableAsyncRender:!1!==e.enableAsyncRender,_index:t,_hidden:a?.hidden||!1,_hiddenInView:a?.hiddenInView||!1,_hiddenLabel:a?.hiddenLabel||!1}}))),"processSchema")(e);if(pe.getStats().size>100){const e=[];pe.cache.forEach(((t,n)=>{"string"==typeof n&&n.startsWith("processedSchema_")&&e.push(n)})),e.length>10&&e.slice(0,5).forEach((e=>pe.delete(e)))}return pe.set(a,r),r})),Re=i((()=>{const e=ke.value;if(!e.length)return[];if(Ye.value||e.length>X.maxSyncRenderCount){const t=Array.from(le.value);return e.filter(((e,n)=>t.includes(e.prop)||n<X.initialLoadCount))}return e})),Ee=c(t({name:"RenderFormWrap",setup(){p();const e=new Map,t=N((e=>{const{useCol:t}=l(re),n=`${X.isView}_${Ye.value}_${t}`;if(Ye.value){const t=Array.from(le.value).sort(),a=e.map((e=>`${e.prop}:${e._hidden}:${e._hiddenInView}`)).join("|");return`lazy_${n}_${t.join("|")}_${a}`}return`full_${n}_${e.map((e=>`${e.prop}_${e._hidden}_${e._hiddenInView}_${e._index}`)).join("|")}`}),"getIncrementalCacheKey");return()=>{const{useCol:n,rowProps:a,onlyRenderComponent:r,elFormProps:i}=l(re),o=Re.value,d=t(o);if(e.has(d))return e.get(d);let s;s=r?o.map(((e,t)=>{const n=!e._hidden&&!e._hiddenInView;return h(m("div",{key:`${e.prop}_${t}`},[m(A,{column:e,modelValue:te.value,"onUpdate:modelValue":N((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),[[f,n]])})):m(z,v({ref:ne,model:te.value,class:[W,{"is-view":X.isView}]},i),{default:N((()=>[n?Pe(o):je(o)]),"default")});const u=Ye.value?20:5;if(e.size>=u){const t=e.keys().next().value;e.delete(t)}return e.set(d,s),s}}})),ze=N(((e={})=>({
20
20
  // 如果有 span,代表用户优先级更高,所以不需要默认栅格
21
- ...e.span?{}:{xs:24,sm:12,md:12,lg:12,xl:12},...e})),"setGridProp"),Ee=U((e=>{let t;const{rowProps:n}=l(re);return m(E,v({gutter:20},n),H(t=e.map(((e,t)=>{const a=qe({...n?.col,...e.col}),r=!e._hidden&&!e._hiddenInView;return h(m(M,v({key:`${e.prop}_${t}`},a),{default:U((()=>[e._hiddenLabel?m(D,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":U((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null):m(j,v({prop:e.prop,label:"function"==typeof e.label?e.label(te.value):e.label,style:e.width?{width:R(e.width)}:{},ref:U((t=>{t&&Ve&&Ve.setFormItemRef(e.prop,t)}),"ref")},X.isView&&X.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:U((()=>[m(D,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":U((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),"default")})]),"default")}),[[f,r]])})))?t:{default:U((()=>[t]),"default")})}),"renderWithCol"),Me=U((e=>e.map(((e,t)=>e._hiddenLabel?m(D,{key:`${e.prop}_${t}`,column:e,modelValue:te.value,"onUpdate:modelValue":U((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null):m(j,v({key:`${e.prop}_${t}`,prop:e.prop,label:"function"==typeof e.label?e.label(te.value):e.label,style:e.width?{width:R(e.width)}:{},ref:U((t=>{t&&Ve&&Ve.setFormItemRef(e.prop,t)}),"ref")},X.isView&&X.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:U((()=>[m(D,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":U((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),"default")})))),"renderWithoutCol"),je=U((()=>{if(!Ye.value)return;const e=Re.value;for(let t=0;t<Math.min(X.initialLoadCount,e.length);t++)le.value.add(e[t].prop);oe.value=e.slice(X.initialLoadCount),oe.value.length>0&&Pe()}),"initializeLazyLoading"),Pe=U((()=>{if(0===oe.value.length)return void(ve.value=!1);ve.value=!0;const e=U((()=>{if(0===oe.value.length)return void(ve.value=!1);const t=performance.now(),n=oe.value.shift();n&&(le.value.add(n.prop),ce.value.push({prop:n.prop,time:t}),fe.value.componentCount=le.value.size,fe.value.renderTime=performance.now()-t,fe.value.queueLength=oe.value.length,X.enablePerformanceMonitoring&&ee("onPerformanceUpdate",fe.value)),oe.value.length>0?X.lazyLoadDelay<=16?requestAnimationFrame(e):setTimeout(e,X.lazyLoadDelay):ve.value=!1}),"renderNext");setTimeout(e,X.delayLoad)}),"startBatchRendering"),Te=U((()=>{(l(re).schema||[]).forEach((async e=>{e.enum&&await we(e),e.subProp&&e.subEnum&&$e(e),void 0!==e.defaultValue&&he(`init_${e.prop}`,(()=>Le(e)),50)}))}),"handleSchemaInit"),Ae=U(((e,t)=>{if(!t||t.length!==e.length)return!0;for(let n=0;n<e.length;n++){const a=e[n],r=t[n];if(!r||a.prop!==r.prop||a.el!==r.el||a.destroy!==r.destroy||a.order!==r.order)return!0}return!1}),"hasStructuralChanges");u((()=>l(re).schema),((e,t)=>{if((!(X.delayLoad>0)||de.value)&&(ye.value||t)&&e?.length){const n=Ae(e,t||[]);(!t||n||X.lazyLoad&&n||e.length>X.maxSyncRenderCount&&n)&&(Te(),n&&le.value.clear(),oe.value=[],ce.value=[],d((()=>{je()})))}}),{immediate:!1,deep:!0}),u((()=>l(re).schema?.map((e=>({prop:e.prop,enum:e.enum,dictCode:e.dictCode})))),((e,t)=>{if(!e||!t||e.length!==t.length)return;let n=!1;const a=[];e.forEach(((e,r)=>{const i=t[r];if(e.enum!==i?.enum||e.dictCode!==i?.dictCode){const t=l(re).schema?.find((t=>t.prop===e.prop));t&&(n=!0,a.push(e.prop),d((()=>{we(t)})))}})),n&&he("enum_change",(()=>{const e=[];pe.cache?.forEach(((t,n)=>{!n.startsWith("processedSchema_")&&a.some((e=>n.includes(e)))&&e.push(n)})),e.forEach((e=>pe.delete(e)))}),100)}),{deep:!0}),u([()=>X.isView,()=>l(re).schema?.map((e=>({prop:e.prop,hidden:e.hidden,hiddenInView:e.hiddenInView,hiddenLabel:e.hiddenLabel})))],((e,t)=>{if(!t)return;const[n,a]=e,[r,i]=t;let l=n!==r;!l&&a&&i&&(l=a.some(((e,t)=>{const n=i[t];return!n||e.hidden!==n.hidden||e.hiddenInView!==n.hiddenInView||e.hiddenLabel!==n.hiddenLabel}))),l&&he("view_hidden_change",(()=>{const e=[];pe.cache?.forEach(((t,n)=>{(n.startsWith("processedSchema_")||n.includes("_hidden_")||n.includes("_view_"))&&e.push(n)})),e.forEach((e=>pe.delete(e)))}),50)}),{deep:!0});const De=U((()=>Re.value.filter((e=>!e._hidden&&!e._hiddenInView)).map((e=>e.prop))),"getVisibleFormProps"),Oe={validate:U((e=>ne.value?e?void ne.value.validate(((t,n)=>{if(t)e(!0);else if(X.excludeHiddenFieldsValidation){const t=De(),a={};n&&Object.keys(n).forEach((e=>{t.includes(e)&&(a[e]=n[e])}));const r=Object.keys(a).length>0;e(!r,r?a:void 0)}else e(!1,n)})):new Promise(((e,t)=>{ne.value?.validate(((n,a)=>{if(n)e(!0);else if(X.excludeHiddenFieldsValidation){const n=De(),r={};a&&Object.keys(a).forEach((e=>{n.includes(e)&&(r[e]=a[e])}));Object.keys(r).length>0?t(r):e(!0)}else t(a)}))})):(e?.(!0),Promise.resolve(!0))),"validate"),validateField:U(((e,t)=>{if(re.value.excludeHiddenFieldsValidation){const n=De(),a=(Array.isArray(e)?e:[e]).filter((e=>n.includes(e)));if(0===a.length)return t?.(""),Promise.resolve("");const r=1===a.length?a[0]:a;return ne.value?.validateField(r,t)}return ne.value?.validateField(e,t)}),"validateField"),resetFields:U((()=>{ne.value?.resetFields()}),"resetFields"),resetForm:U((()=>{Object.keys(te.value).forEach((e=>{delete te.value[e]})),ne.value?.clearValidate(),d((()=>{Te()}))}),"resetForm"),clearValidate:U((e=>{ne.value?.clearValidate(e)}),"clearValidate"),scrollToField:U((e=>{ne.value?.scrollToField(e)}),"scrollToField"),setEnumMap:we,initDefaultValue:Le,clearCache:ge};y((()=>{if(X.delayLoad>0)setTimeout((()=>{se.value=!1,de.value=!0;const e=l(re).schema;e?.length&&(Te(),Ye.value&&je()),ye.value=!0,ee("register",Ge)}),X.delayLoad);else{se.value=!1,de.value=!0;const e=l(re).schema;e?.length&&(Te(),Ye.value&&je()),ye.value=!0,ee("register",Ge)}X.enablePerformanceMonitoring&&(ue.value=setInterval((()=>{fe.value.cacheStats=pe.getStats(),ee("onPerformanceUpdate",fe.value)}),X.performanceConfig.reportInterval||2e3))})),g((()=>{be()}));const Ue=U((e=>{Object.assign(ae.value,e),e.modelValue&&Object.assign(te.value,e.modelValue)}),"setProps"),Be=U((e=>{Object.assign(te.value,e)}),"setValues"),Ne=U((e=>{const{prop:t,field:n,value:a}=e,r=[...l(re).schema||[]];if("schema"===n)ae.value.schema=a;else{const e=r.find((e=>e.prop===t));e&&(e[n]=a,ae.value.schema=r)}}),"setSchema"),He=U(((e,t,n="after")=>{const a=[...l(re).schema||[]];if("number"==typeof t)a.splice(t,0,e);else if("string"==typeof t){const r=a.findIndex((e=>e.prop===t));if(-1!==r){const t="before"===n?r:r+1;a.splice(t,0,e)}else a.push(e)}else a.push(e);ae.value.schema=a}),"addSchema"),We=U((e=>{const t=(l(re).schema||[]).filter((t=>t.prop!==e));ae.value.schema=t}),"delSchema"),Je=U(((e=!0)=>{const t=te.value;return e?Object.keys(t).reduce(((e,n)=>{const a=t[n];return""!==a&&null!=a&&("object"==typeof a&&null!==a?Object.keys(a).length>0&&(e[n]=a):e[n]=a),e}),{}):t}),"getFormData"),Ze=r(new Map),Ke=r(new Map),Ge={...Oe,setProps:Ue,setValues:Be,setSchema:Ne,addSchema:He,delSchema:We,getFormData:Je,getComponentExpose:U((e=>Ke.value.get(e)||null),"getComponentExpose"),getFormItemExpose:U((e=>Ze.value.get(e)||null),"getFormItemExpose"),getSchema:U((()=>l(re).schema||[]),"getSchema"),refreshFormItem:U((async(e,t)=>{const{refreshEnum:n=!0,refreshDefaultValue:a=!1,clearValidate:r=!0}=t||{},i=l(re).schema?.find((t=>t.prop===e));if(!i)return void console.warn(`未找到prop为 "${e}" 的表单项`);const o=[];if(pe.cache?.forEach(((t,n)=>{n.includes(e)&&o.push(n)})),o.forEach((e=>pe.delete(e))),_e.clearDependencies(e),A(pe,"hidden",[e]),A(pe,"hiddenInView",[e]),A(pe,"hiddenLabel",[e]),n&&i.enum)try{await we(i)}catch(t){console.error(`刷新prop "${e}" 的枚举数据失败:`,t)}if(a&&void 0!==i.defaultValue)try{await Le(i)}catch(t){console.error(`刷新prop "${e}" 的默认值失败:`,t)}if(r&&ne.value?.clearValidate(e),Ye.value){le.value.delete(e);const t=Re.value.find((t=>t.prop===e));t&&!oe.value.some((t=>t.prop===e))&&(oe.value.unshift(t),ve.value||d((()=>{Pe()})))}await d(),console.log(`已刷新表单项: ${e}`)}),"refreshFormItem"),model:te.value};I({...Ge,form:ne,enumMap:ie,model:te.value});const Ye=i((()=>{const e=l(re).schema?.length||0,t=X.lazyLoad;if(!1===t)return!1;if(!0===t)return!0;if(e<5){if(0===(l(re).schema?.filter((e=>e.render||e.renderInView))?.length||0))return!1}return!0}));return(t,n)=>(w(),b("div",{class:V([W,"zn-znform-v2-container"]),ref:"containerRef"},[_(" 性能监控面板 "),e.performanceConfig.enableDebug&&fe.value?(w(),b("div",B,[L("div",null,"渲染耗时: "+$(fe.value.renderTime.toFixed(2))+"ms",1
22
- /* TEXT */),L("div",null,"组件数量: "+$(fe.value.componentCount),1
23
- /* TEXT */),L("div",null,"缓存命中率: "+$((100*fe.value.cacheHitRate).toFixed(1))+"%",1
24
- /* TEXT */),L("div",null,"队列长度: "+$(fe.value.queueLength),1
25
- /* TEXT */)])):_("v-if",!0),_(" 组件级别的骨架屏 - delayLoad期间显示 "),se.value?(w(),C(l(P),{key:1,rows:8,animated:""})):_("v-if",!0),_(" 表单容器 - 组件准备好后显示 "),h(L("div",null,[m(l(ze)),_(" 懒加载状态 "),ve.value&&e.enablePerformanceMonitoring?(w(),b("div",N,n[0]||(n[0]=[L("div",{style:{width:"16px",height:"16px",animation:"spin 1s linear infinite",border:"2px solid #409eff","border-top":"2px solid transparent","border-radius":"50%"}},null,-1
26
- /* HOISTED */),L("span",null,"正在渲染表单项...",-1
21
+ ...e.span?{}:{xs:24,sm:12,md:12,lg:12,xl:12},...e})),"setGridProp"),Pe=N((e=>{let t;const{rowProps:n}=l(re);return m(P,v({gutter:20},n),B(t=e.map(((e,t)=>{const a=ze({...n?.col,...e.col}),r=!e._hidden&&!e._hiddenInView;return h(m(j,v({key:`${e.prop}_${t}`},a),{default:N((()=>[e._hiddenLabel?m(A,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":N((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null):m(q,v({prop:e.prop,label:"function"==typeof e.label?e.label(te.value):e.label,style:e.width?{width:k(e.width)}:{},ref:N((t=>{t&&we&&we.setFormItemRef(e.prop,t)}),"ref")},X.isView&&X.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:N((()=>[m(A,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":N((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),"default")})]),"default")}),[[f,r]])})))?t:{default:N((()=>[t]),"default")})}),"renderWithCol"),je=N((e=>e.map(((e,t)=>{const n=!e._hidden&&!e._hiddenInView;return e._hiddenLabel?h(m("div",{key:`${e.prop}_${t}`},[m(A,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":N((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),[[f,n]]):h(m(q,v({key:`${e.prop}_${t}`,prop:e.prop,label:"function"==typeof e.label?e.label(te.value):e.label,style:e.width?{width:k(e.width)}:{},ref:N((t=>{t&&we&&we.setFormItemRef(e.prop,t)}),"ref")},X.isView&&X.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:N((()=>[m(A,{key:`${e.prop}_${e._index}`,column:e,modelValue:te.value,"onUpdate:modelValue":N((e=>te.value=e),"onUpdate:modelValue"),isView:X.isView,isLazyLoading:Ye.value,isReady:le.value.has(e.prop)},null)]),"default")}),[[f,n]])}))),"renderWithoutCol"),qe=N((()=>{if(!Ye.value)return;const e=ke.value;for(let t=0;t<Math.min(X.initialLoadCount,e.length);t++)le.value.add(e[t].prop);oe.value=e.slice(X.initialLoadCount),oe.value.length>0&&Me()}),"initializeLazyLoading"),Me=N((()=>{if(0===oe.value.length)return void(ve.value=!1);ve.value=!0;const e=N((()=>{if(0===oe.value.length)return void(ve.value=!1);const t=performance.now(),n=oe.value.shift();n&&(le.value.add(n.prop),ce.value.push({prop:n.prop,time:t}),fe.value.componentCount=le.value.size,fe.value.renderTime=performance.now()-t,fe.value.queueLength=oe.value.length,X.enablePerformanceMonitoring&&ee("onPerformanceUpdate",fe.value)),oe.value.length>0?X.lazyLoadDelay<=16?requestAnimationFrame(e):setTimeout(e,X.lazyLoadDelay):ve.value=!1}),"renderNext");setTimeout(e,X.delayLoad)}),"startBatchRendering"),Te=N((()=>{(l(re).schema||[]).forEach((async e=>{e.enum&&await be(e),e.subProp&&e.subEnum&&Ce(e),void 0!==e.defaultValue&&he(`init_${e.prop}`,(()=>$e(e)),50)}))}),"handleSchemaInit"),De=N(((e,t)=>{if(!t||t.length!==e.length)return!0;for(let n=0;n<e.length;n++){const a=e[n],r=t[n];if(!r||a.prop!==r.prop||a.el!==r.el||a.destroy!==r.destroy||a.order!==r.order)return!0}return!1}),"hasStructuralChanges");u((()=>l(re).schema),((e,t)=>{if((!(X.delayLoad>0)||de.value)&&(ye.value||t)&&e?.length){const n=De(e,t||[]);(!t||n||X.lazyLoad&&n||e.length>X.maxSyncRenderCount&&n)&&(Te(),n&&le.value.clear(),oe.value=[],ce.value=[],d((()=>{qe()})))}}),{immediate:!1,deep:!0}),u((()=>l(re).schema?.map((e=>({prop:e.prop,enum:e.enum,dictCode:e.dictCode})))),((e,t)=>{if(!e||!t||e.length!==t.length)return;let n=!1;const a=[];e.forEach(((e,r)=>{const i=t[r];if(e.enum!==i?.enum||e.dictCode!==i?.dictCode){const t=l(re).schema?.find((t=>t.prop===e.prop));t&&(n=!0,a.push(e.prop),d((()=>{be(t)})))}})),n&&he("enum_change",(()=>{const e=[];pe.cache?.forEach(((t,n)=>{!n.startsWith("processedSchema_")&&a.some((e=>n.includes(e)))&&e.push(n)})),e.forEach((e=>pe.delete(e)))}),100)}),{deep:!0}),u([()=>X.isView,()=>l(re).schema?.map((e=>({prop:e.prop,hidden:e.hidden,hiddenInView:e.hiddenInView,hiddenLabel:e.hiddenLabel})))],((e,t)=>{if(!t)return;const[n,a]=e,[r,i]=t;let l=n!==r;!l&&a&&i&&(l=a.some(((e,t)=>{const n=i[t];return!n||e.hidden!==n.hidden||e.hiddenInView!==n.hiddenInView||e.hiddenLabel!==n.hiddenLabel}))),l&&he("view_hidden_change",(()=>{const e=[];pe.cache?.forEach(((t,n)=>{(n.startsWith("processedSchema_")||n.includes("_hidden_")||n.includes("_view_"))&&e.push(n)})),e.forEach((e=>pe.delete(e)))}),50)}),{deep:!0});const Ae=N((()=>{const e=ke.value,t=e.filter((e=>!e._hidden&&!e._hiddenInView)).map((e=>e.prop));return"development"===process.env.NODE_ENV&&console.log("🔍 ZnFormV2 getVisibleFormProps 调试信息:",{allSchemaItems:e.map((e=>({prop:e.prop,_hidden:e._hidden,_hiddenInView:e._hiddenInView,"原始hidden":"function"==typeof e.hidden?"函数":e.hidden,"计算结果":e._hidden?"隐藏":"显示"}))),visibleProps:t,"当前model":l(te)}),t}),"getVisibleFormProps"),Oe={validate:N((e=>ne.value?e?void ne.value.validate(((t,n)=>{if(t)e(!0);else if(X.excludeHiddenFieldsValidation){const t=Ae(),a={};n&&Object.keys(n).forEach((e=>{t.includes(e)&&(a[e]=n[e])})),"development"===process.env.NODE_ENV&&console.log("🔍 ZnFormV2 validate (callback) 隐藏字段过滤调试:",{excludeHiddenFieldsValidation:X.excludeHiddenFieldsValidation,visibleProps:t,originalInvalidFields:n,filteredInvalidFields:a,"被过滤掉的隐藏字段":n?Object.keys(n).filter((e=>!t.includes(e))):[]});const r=Object.keys(a).length>0;e(!r,r?a:void 0)}else e(!1,n)})):new Promise(((e,t)=>{ne.value?.validate(((n,a)=>{if(n)e(!0);else if(X.excludeHiddenFieldsValidation){const n=Ae(),r={};a&&Object.keys(a).forEach((e=>{n.includes(e)&&(r[e]=a[e])})),"development"===process.env.NODE_ENV&&console.log("🔍 ZnFormV2 validate 隐藏字段过滤调试:",{excludeHiddenFieldsValidation:X.excludeHiddenFieldsValidation,visibleProps:n,originalInvalidFields:a,filteredInvalidFields:r,"被过滤掉的隐藏字段":a?Object.keys(a).filter((e=>!n.includes(e))):[]});Object.keys(r).length>0?t(r):e(!0)}else t(a)}))})):(e?.(!0),Promise.resolve(!0))),"validate"),validateField:N(((e,t)=>{if(re.value.excludeHiddenFieldsValidation){const n=Ae(),a=(Array.isArray(e)?e:[e]).filter((e=>n.includes(e)));if(0===a.length)return t?.(""),Promise.resolve("");const r=1===a.length?a[0]:a;return ne.value?.validateField(r,t)}return ne.value?.validateField(e,t)}),"validateField"),resetFields:N((()=>{ne.value?.resetFields()}),"resetFields"),resetForm:N((()=>{Object.keys(te.value).forEach((e=>{delete te.value[e]})),ne.value?.clearValidate(),d((()=>{Te()}))}),"resetForm"),clearValidate:N((e=>{ne.value?.clearValidate(e)}),"clearValidate"),scrollToField:N((e=>{ne.value?.scrollToField(e)}),"scrollToField"),setEnumMap:be,initDefaultValue:$e,clearCache:ge};y((()=>{if(X.delayLoad>0)setTimeout((()=>{se.value=!1,de.value=!0;const e=l(re).schema;e?.length&&(Te(),Ye.value&&qe()),ye.value=!0,ee("register",Ge)}),X.delayLoad);else{se.value=!1,de.value=!0;const e=l(re).schema;e?.length&&(Te(),Ye.value&&qe()),ye.value=!0,ee("register",Ge)}X.enablePerformanceMonitoring&&(ue.value=setInterval((()=>{fe.value.cacheStats=pe.getStats(),ee("onPerformanceUpdate",fe.value)}),X.performanceConfig.reportInterval||2e3))})),g((()=>{Ve()}));const Ne=N((e=>{Object.assign(ae.value,e),e.modelValue&&Object.assign(te.value,e.modelValue)}),"setProps"),He=N((e=>{Object.assign(te.value,e)}),"setValues"),Ue=N((e=>{const{prop:t,field:n,value:a}=e,r=[...l(re).schema||[]];if("schema"===n)ae.value.schema=a;else{const e=r.find((e=>e.prop===t));e&&(e[n]=a,ae.value.schema=r)}}),"setSchema"),Be=N(((e,t,n="after")=>{const a=[...l(re).schema||[]];if("number"==typeof t)a.splice(t,0,e);else if("string"==typeof t){const r=a.findIndex((e=>e.prop===t));if(-1!==r){const t="before"===n?r:r+1;a.splice(t,0,e)}else a.push(e)}else a.push(e);ae.value.schema=a}),"addSchema"),We=N((e=>{const t=(l(re).schema||[]).filter((t=>t.prop!==e));ae.value.schema=t}),"delSchema"),Ze=N(((e=!0)=>{const t=te.value;return e?Object.keys(t).reduce(((e,n)=>{const a=t[n];return""!==a&&null!=a&&("object"==typeof a&&null!==a?Object.keys(a).length>0&&(e[n]=a):e[n]=a),e}),{}):t}),"getFormData"),Je=r(new Map),Ke=r(new Map),Ge={...Oe,setProps:Ne,setValues:He,setSchema:Ue,addSchema:Be,delSchema:We,getFormData:Ze,getComponentExpose:N((e=>Ke.value.get(e)||null),"getComponentExpose"),getFormItemExpose:N((e=>Je.value.get(e)||null),"getFormItemExpose"),getSchema:N((()=>l(re).schema||[]),"getSchema"),refreshFormItem:N((async(e,t)=>{const{refreshEnum:n=!0,refreshDefaultValue:a=!1,clearValidate:r=!0}=t||{},i=l(re).schema?.find((t=>t.prop===e));if(!i)return void console.warn(`未找到prop为 "${e}" 的表单项`);const o=[];if(pe.cache?.forEach(((t,n)=>{n.includes(e)&&o.push(n)})),o.forEach((e=>pe.delete(e))),_e.clearDependencies(e),D(pe,"hidden",[e]),D(pe,"hiddenInView",[e]),D(pe,"hiddenLabel",[e]),n&&i.enum)try{await be(i)}catch(t){console.error(`刷新prop "${e}" 的枚举数据失败:`,t)}if(a&&void 0!==i.defaultValue)try{await $e(i)}catch(t){console.error(`刷新prop "${e}" 的默认值失败:`,t)}if(r&&ne.value?.clearValidate(e),Ye.value){le.value.delete(e);const t=ke.value.find((t=>t.prop===e));t&&!oe.value.some((t=>t.prop===e))&&(oe.value.unshift(t),ve.value||d((()=>{Me()})))}await d(),console.log(`已刷新表单项: ${e}`)}),"refreshFormItem"),model:te.value};L({...Ge,form:ne,enumMap:ie,model:te.value});const Ye=i((()=>{const e=l(re).schema?.length||0,t=X.lazyLoad;if(!1===t)return!1;if(!0===t)return!0;if(e<5){if(0===(l(re).schema?.filter((e=>e.render||e.renderInView))?.length||0))return!1}return!0}));return(t,n)=>(b(),V("div",{class:w([W,"zn-znform-v2-container"]),ref:"containerRef"},[_(" 性能监控面板 "),e.performanceConfig.enableDebug&&fe.value?(b(),V("div",H,[$("div",null,"渲染耗时: "+C(fe.value.renderTime.toFixed(2))+"ms",1
22
+ /* TEXT */),$("div",null,"组件数量: "+C(fe.value.componentCount),1
23
+ /* TEXT */),$("div",null,"缓存命中率: "+C((100*fe.value.cacheHitRate).toFixed(1))+"%",1
24
+ /* TEXT */),$("div",null,"队列长度: "+C(fe.value.queueLength),1
25
+ /* TEXT */)])):_("v-if",!0),_(" 组件级别的骨架屏 - delayLoad期间显示 "),se.value?(b(),I(l(M),{key:1,rows:8,animated:""})):_("v-if",!0),_(" 表单容器 - 组件准备好后显示 "),h($("div",null,[m(l(Ee)),_(" 懒加载状态 "),ve.value&&e.enablePerformanceMonitoring?(b(),V("div",U,n[0]||(n[0]=[$("div",{style:{width:"16px",height:"16px",animation:"spin 1s linear infinite",border:"2px solid #409eff","border-top":"2px solid transparent","border-radius":"50%"}},null,-1
26
+ /* HOISTED */),$("span",null,"正在渲染表单项...",-1
27
27
  /* HOISTED */)]))):_("v-if",!0)],512
28
28
  /* NEED_PATCH */),[[f,!se.value&&de.value]])],2
29
- /* CLASS */))}});export{J as default};
29
+ /* CLASS */))}});export{Z as default};
30
30
  //# sourceMappingURL=index.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znFormV2/src/index.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst prefixClass = 'zn-form-v2'\n</script>\n<template>\n <div :class=\"[prefixClass, 'zn-znform-v2-container']\" ref=\"containerRef\">\n <!-- 性能监控面板 -->\n <div\n v-if=\"performanceConfig.enableDebug && performanceStats\"\n class=\"performance-panel\"\n style=\"\n position: fixed;\n z-index: 9999;\n top: 10px;\n right: 10px;\n padding: 10px;\n border-radius: 4px;\n background: rgb(0 0 0 / 80%);\n color: white;\n font-size: 12px;\n \">\n <div>渲染耗时: {{ performanceStats.renderTime.toFixed(2) }}ms</div>\n <div>组件数量: {{ performanceStats.componentCount }}</div>\n <div>缓存命中率: {{ (performanceStats.cacheHitRate * 100).toFixed(1) }}%</div>\n <div>队列长度: {{ performanceStats.queueLength }}</div>\n </div>\n\n <!-- 组件级别的骨架屏 - delayLoad期间显示 -->\n <el-skeleton v-if=\"showComponentSkeleton\" :rows=\"8\" animated></el-skeleton>\n\n <!-- 表单容器 - 组件准备好后显示 -->\n <div v-show=\"!showComponentSkeleton && componentLoadReady\">\n <RenderFormWrap />\n\n <!-- 懒加载状态 -->\n <div\n v-if=\"isRendering && enablePerformanceMonitoring\"\n class=\"loading\"\n style=\"display: flex; position: absolute; z-index: 1000; top: 50%; left: 50%; align-items: center; transform: translate(-50%, -50%); gap: 10px\">\n <div\n style=\"\n width: 16px;\n height: 16px;\n animation: spin 1s linear infinite;\n border: 2px solid #409eff;\n border-top: 2px solid transparent;\n border-radius: 50%;\n \"></div>\n <span>正在渲染表单项...</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"tsx\">\n import {\n type ComponentPublicInstance,\n computed,\n defineComponent,\n markRaw,\n onMounted,\n onUnmounted,\n provide,\n ref,\n shallowRef,\n unref,\n useSlots,\n watch,\n nextTick,\n Fragment,\n onBeforeUnmount,\n getCurrentInstance\n } from 'vue'\n\n import ZnFormV2Item from './components/ZnFormV2Item.vue'\n\n import { deleteObjProperty, getFormProp, getPx, hyphenToCamelCase, isString, setFormProp } from './helper'\n import { componentMap } from './helper/componentMap'\n import { ComponentNameEnum, formEnumMapKey, type ZnFormV2SchemaProps, type FormSetProps, type ZnElFormProps, type ValueType } from './interface'\n import {\n type ColProps,\n ElCol,\n ElForm,\n ElFormItem,\n ElRow,\n ElSkeleton,\n ElSkeletonItem,\n type FormInstance,\n type FormItemInstance,\n type FormItemProp,\n type RowProps\n } from 'element-plus'\n import { PerformanceOptimizer, DEFAULT_PERFORMANCE_CONFIG } from './performance/PerformanceOptimizer'\n import { withSmartCache, clearRelatedCache, type SmartCacheConfig } from './utils/smartCache'\n\n defineOptions({ name: 'ZnFormV2' })\n\n \n\n // 添加性能优化相关的配置\n const PERFORMANCE_CONFIG = {\n CACHE_MAX_SIZE: 1000, // 最大缓存数量\n CACHE_TTL: 30000, // 缓存30秒过期\n DEBOUNCE_DELAY: 16, // 16ms防抖(60fps)\n BATCH_RENDER_SIZE: 10, // 每批渲染数量\n MAX_SYNC_RENDER: 50 // 超过50个组件强制异步\n }\n\n // 优化缓存系统\n class PerformanceCache {\n public cache = new Map()\n private timers = new Map()\n private hitCount = 0\n private missCount = 0\n\n has(key: string): boolean {\n const item = this.cache.get(key)\n if (item && Date.now() - item.timestamp < PERFORMANCE_CONFIG.CACHE_TTL) {\n return true\n }\n if (item) {\n this.delete(key) // 清理过期项\n }\n return false\n }\n\n get(key: string) {\n const item = this.cache.get(key)\n if (item && Date.now() - item.timestamp < PERFORMANCE_CONFIG.CACHE_TTL) {\n this.hitCount++\n return item.value\n }\n this.missCount++\n this.delete(key)\n return undefined\n }\n\n set(key: string, value: any) {\n // 限制缓存大小\n if (this.cache.size >= PERFORMANCE_CONFIG.CACHE_MAX_SIZE) {\n const firstKey = this.cache.keys().next().value\n this.delete(firstKey)\n }\n\n this.cache.set(key, {\n value,\n timestamp: Date.now()\n })\n\n // 设置过期定时器\n if (this.timers.has(key)) {\n clearTimeout(this.timers.get(key))\n }\n\n const timer = setTimeout(() => {\n this.delete(key)\n }, PERFORMANCE_CONFIG.CACHE_TTL)\n\n this.timers.set(key, timer)\n }\n\n delete(key: string) {\n this.cache.delete(key)\n const timer = this.timers.get(key)\n if (timer) {\n clearTimeout(timer)\n this.timers.delete(key)\n }\n }\n\n clear() {\n this.cache.clear()\n this.timers.forEach((timer) => clearTimeout(timer))\n this.timers.clear()\n }\n\n getStats() {\n return {\n size: this.cache.size,\n hitRate: this.hitCount / (this.hitCount + this.missCount) || 0,\n hitCount: this.hitCount,\n missCount: this.missCount\n }\n }\n }\n\n // 防抖函数优化\n const createDebouncer = () => {\n const timers = new Map()\n\n return (key: string, fn: Function, delay = PERFORMANCE_CONFIG.DEBOUNCE_DELAY) => {\n if (timers.has(key)) {\n clearTimeout(timers.get(key))\n }\n\n const timer = setTimeout(() => {\n fn()\n timers.delete(key)\n }, delay)\n\n timers.set(key, timer)\n }\n }\n\n // Model变化检测优化 - 更精确的哈希算法\n const createModelHasher = () => {\n let lastModel: any = null\n let lastHash = ''\n let lastStringified = ''\n\n return (model: any) => {\n if (model === lastModel) return lastHash\n\n // 使用 JSON.stringify 生成更精确的哈希\n const stringified = JSON.stringify(model, Object.keys(model).sort())\n\n if (stringified === lastStringified) {\n return lastHash\n }\n\n // 生成简单但有效的哈希\n let hash = 0\n for (let i = 0; i < stringified.length; i++) {\n const char = stringified.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n\n const finalHash = hash.toString(36)\n\n lastModel = model\n lastHash = finalHash\n lastStringified = stringified\n return finalHash\n }\n }\n\n export interface ZnFormV2Props {\n /** 表单值 */\n modelValue?: Record<string, any>\n /** 表单配置项 */\n schema?: ZnFormV2SchemaProps[]\n /** ElForm 的 props */\n elFormProps?: ZnElFormProps | Record<string, any>\n /** 是否使用栅格布局, 默认 true */\n useCol?: boolean\n /** 栅格布局全局设置 */\n rowProps?: Partial<RowProps> & {\n col?: Partial<ColProps>\n }\n /** 是否只渲染 ZnFormItem 组件,只使用表单组件 */\n onlyRenderComponent?: boolean\n /**\n * 动态 model,如果 schema 发生变化,则重新渲染 model 表单数据\n * (将不存在 schema 的 prop 从 model 中去掉),默认启用 true\n */\n dynamicModel?: boolean\n /**\n * 搭配 dynamicModel 使用,清除 model 不存在的 prop 时,\n * 指定保留 prop。如果不传,则不做清除\n */\n includeModelKeys?: string[]\n /**\n * 存储 enum 值。该 props 是搭配 ProTable 使用,\n * 因为 ProTable 已经初始化部分字典数据,\n * 因此不需要 ProForm 再次请求这些字典数据\n */\n enumMapProps?: Map<string, Record<string, any>[]>\n /** 是否查看,默认为否 */\n isView?: boolean\n /**查看状态时,禁用表单验证 */\n disableRulesInView?: boolean\n /** 是否延迟加载表单项,用于优化大型表单渲染性能 */\n lazyLoad?: boolean\n /** 延迟加载的时间间隔,单位毫秒 */\n lazyLoadDelay?: number\n /** 初始加载的表单项数量,默认为10 */\n initialLoadCount?: number\n /** 每批加载的表单项数量,默认为5 */\n batchLoadCount?: number\n /** 开启懒加载调试模式 */\n lazyLoadDebug?: boolean\n /** 整个组件延时加载时间,用于避免阻塞主线程,单位毫秒,默认500ms */\n delayLoad?: number\n\n // 新增的性能优化配置\n /** 性能配置 */\n performanceConfig?: any\n /** 启用虚拟滚动 */\n enableVirtualScroll?: boolean\n /** 虚拟滚动配置 */\n virtualScrollConfig?: any\n /** 时间切片配置 */\n timeSliceConfig?: any\n /** 最大同步渲染数量 */\n maxSyncRenderCount?: number\n /** 渲染批次大小 */\n renderBatchSize?: number\n /** 渲染延迟 */\n renderDelay?: number\n /** 启用性能监控 */\n enablePerformanceMonitoring?: boolean\n /** 是否排除隐藏表单项的验证,默认为true */\n excludeHiddenFieldsValidation?: boolean\n }\n\n const props = defineProps({\n modelValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n elFormProps: { required: false, default: () => ({}) },\n useCol: { type: Boolean, required: false, default: true },\n rowProps: { type: Object, required: false },\n onlyRenderComponent: { type: Boolean, required: false, default: false },\n dynamicModel: { type: Boolean, required: false, default: true },\n includeModelKeys: { type: Array, required: false },\n enumMapProps: { type: Map, required: false },\n isView: { type: Boolean, required: false, default: false },\n disableRulesInView: { type: Boolean, required: false, default: true },\n lazyLoad: { type: Boolean, required: false, default: true },\n lazyLoadDelay: { type: Number, required: false, default: 16 },\n initialLoadCount: { type: Number, required: false, default: 20 },\n batchLoadCount: { type: Number, required: false, default: 30 },\n lazyLoadDebug: { type: Boolean, required: false, default: false },\n delayLoad: { type: Number, required: false, default: 500 },\n performanceConfig: { required: false, default: () => ({\n enableMonitoring: false,\n enableDebug: false,\n reportInterval: 5000\n }) },\n enableVirtualScroll: { type: Boolean, required: false, default: false },\n virtualScrollConfig: { required: false, default: () => ({\n enabled: false,\n height: 400,\n itemHeight: 60,\n buffer: 5\n }) },\n timeSliceConfig: { required: false, default: () => ({\n enabled: true,\n sliceSize: 5,\n batchSize: 10\n }) },\n maxSyncRenderCount: { type: Number, required: false, default: 20 },\n renderBatchSize: { type: Number, required: false, default: 10 },\n renderDelay: { type: Number, required: false, default: 0 },\n enablePerformanceMonitoring: { type: Boolean, required: false, default: false },\n excludeHiddenFieldsValidation: { type: Boolean, required: false, default: true }\n})\n\n const emit = defineEmits([\n 'update:modelValue',\n 'update:schema',\n 'register',\n 'onSearch',\n 'onReset',\n 'onChange',\n 'onEnumChange',\n 'onSchemaChange',\n 'onPerformanceUpdate'\n ])\n\n const model = defineModel<Record<string, any>>({ default: () => ({}) })\n\n // 存储 ElForm 实例\n const elFormRef = shallowRef<FormInstance>()\n\n const mergeProps = ref<ZnFormV2Props>({})\n\n const getProps = computed(() => {\n const propsObj = { ...props }\n Object.assign(propsObj, unref(mergeProps))\n return propsObj\n })\n\n // 定义 enumMap 存储 enum 值\n const enumMap = ref(props.enumMapProps || new Map<string, Record<string, any>[]>())\n\n // 跟踪哪些表单项已经渲染,用于懒加载\n const renderedItems = ref(new Set<string>())\n // 记录需要懒加载的表单项\n const pendingItems = ref<ZnFormV2SchemaProps[]>([])\n // 组件级别的加载状态\n const componentLoadReady = ref(false)\n // 显示组件级别的骨架屏状态 - 根据delayLoad决定初始值\n const showComponentSkeleton = ref(props.delayLoad > 0)\n // 用于更新加载时间显示的定时器\n const loadingTimer = ref<NodeJS.Timeout | null>(null)\n // 用于触发加载时间更新的响应式变量\n const updateTrigger = ref(0)\n // 用于记录每个组件的加载耗时\n const componentLoadTimes = ref<Array<{ prop: string; time: number }>>([])\n\n // 用于缓存计算结果 - 替换为高性能缓存系统\n const performanceCache = new PerformanceCache()\n const debouncer = createDebouncer()\n const modelHasher = createModelHasher()\n\n // 性能监控\n const performanceStats = ref({\n renderTime: 0,\n componentCount: 0,\n cacheHitRate: 0,\n queueLength: 0,\n cacheStats: {\n size: 0,\n hitRate: 0,\n hitCount: 0,\n missCount: 0\n }\n })\n\n // 渲染状态\n const isRendering = ref(false)\n\n // 添加初始化状态标记\n const isInitialized = ref(false)\n\n const clearCache = () => {\n performanceCache.clear()\n }\n\n // 组件实例引用用于清理\n const componentInstance = getCurrentInstance()\n\n // 清理所有定时器和缓存\n const cleanup = () => {\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n performanceCache.clear()\n }\n\n const setEnumMap = async ({ enum: enumValue, prop, cacheEnum = true }: ZnFormV2SchemaProps) => {\n if (!enumValue) return\n\n const enumMapConst = unref(enumMap)\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') {\n enumMapConst.set(prop, unref(enumValue)!)\n enumMap.value = new Map(enumMapConst)\n return\n }\n\n try {\n // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储\n enumMapConst.set(prop!, [])\n\n // 如果当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n let data = await enumValue(unref(model), enumMapConst)\n\n // 适配 enum 接口返回 data 以及自定义函数返回数组\n data = data?.result || data\n\n // 如果返回的数据不是数组,则警告并强制转换为数组\n if (!Array.isArray(data)) {\n console.warn(`警告: '${prop}' 的enum函数返回值不是数组`, data)\n data = []\n }\n\n // 更新enumMap\n enumMapConst.set(prop, data)\n enumMap.value = new Map(enumMapConst)\n\n // 在下一tick触发初始化默认值\n nextTick(() => {\n if (prop) {\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === prop)\n if (schemaItem) {\n initDefaultValue(schemaItem)\n }\n }\n })\n } catch (error) {\n console.error(`添加enum函数参数失败: '${prop}'`, error)\n enumMapConst.set(prop!, [])\n enumMap.value = new Map(enumMapConst)\n }\n }\n\n provide(formEnumMapKey, enumMap)\n\n // 提供实例引用收集器\n const componentRefsCollector = {\n setComponentRef: (prop: string, ref: any) => {\n componentRefs.value.set(prop, ref)\n },\n setFormItemRef: (prop: string, ref: any) => {\n formItemRefs.value.set(prop, ref)\n }\n }\n provide('componentRefsCollector', componentRefsCollector)\n\n // 细粒度依赖追踪系统\n const renderDependencyTracker = {\n // 存储每个字段的render函数依赖关系\n dependencies: new Map<string, Set<string>>(), // prop -> Set of dependent fields\n\n // 存储每个render函数访问的字段\n renderAccess: new Map<string, Set<string>>(), // prop -> Set of accessed fields\n\n // 当前正在追踪的render函数\n currentTrackingRender: null as string | null,\n\n // 开始追踪某个render函数的依赖\n startTracking(prop: string) {\n this.currentTrackingRender = prop\n if (!this.renderAccess.has(prop)) {\n this.renderAccess.set(prop, new Set())\n }\n // 清除之前的依赖记录,重新收集\n this.renderAccess.get(prop)!.clear()\n },\n\n // 停止追踪\n stopTracking() {\n this.currentTrackingRender = null\n },\n\n // 记录字段访问\n trackFieldAccess(accessedField: string) {\n if (this.currentTrackingRender) {\n this.renderAccess.get(this.currentTrackingRender)!.add(accessedField)\n\n // 建立反向依赖关系:accessedField -> currentTrackingRender\n if (!this.dependencies.has(accessedField)) {\n this.dependencies.set(accessedField, new Set())\n }\n this.dependencies.get(accessedField)!.add(this.currentTrackingRender)\n }\n },\n\n // 获取受某个字段变化影响的render函数\n getAffectedRenders(changedField: string): Set<string> {\n return this.dependencies.get(changedField) || new Set()\n },\n\n // 清除某个字段的依赖\n clearDependencies(prop: string) {\n // 清除该字段作为依赖者的记录\n if (this.renderAccess.has(prop)) {\n const accessedFields = this.renderAccess.get(prop)!\n accessedFields.forEach((field) => {\n const dependents = this.dependencies.get(field)\n if (dependents) {\n dependents.delete(prop)\n if (dependents.size === 0) {\n this.dependencies.delete(field)\n }\n }\n })\n this.renderAccess.delete(prop)\n }\n\n // 清除该字段作为被依赖者的记录\n this.dependencies.delete(prop)\n }\n }\n\n // 创建一个代理的model对象用于依赖追踪\n const createTrackedModel = (originalModel: any) => {\n return new Proxy(originalModel, {\n get(target, prop) {\n // 记录字段访问\n if (typeof prop === 'string' && renderDependencyTracker.currentTrackingRender) {\n renderDependencyTracker.trackFieldAccess(prop)\n }\n return target[prop]\n }\n })\n }\n\n // 提供依赖追踪器给子组件\n provide('renderDependencyTracker', renderDependencyTracker)\n provide('createTrackedModel', createTrackedModel)\n\n // 初始化默认值\n const initDefaultValue = async ({ defaultValue, fieldNames, prop }: ZnFormV2SchemaProps) => {\n const formConst = unref(model)\n const value = getFormProp(formConst, prop)\n\n if (value || value === false || value === 0) return\n\n const defaultValueConst = unref(defaultValue)\n // 设置表单项的默认值,如果存在值,则不需要赋默认值\n if (defaultValueConst !== undefined && defaultValueConst !== null) {\n if (typeof defaultValueConst !== 'function') return setFormProp(formConst, prop, defaultValueConst)\n\n return setFormProp(formConst, prop, await defaultValueConst(formConst, unref(enumMap)))\n }\n\n // 如果没有设置默认值,则判断后台是否返回 isDefault 为 Y 的枚举\n const enumData = unref(enumMap).get(prop)\n if (enumData?.length) {\n // 找出 isDefault 为 Y 的 value\n const data = enumData.filter((item) => item.isDefault === 'Y')\n\n return data.length && setFormProp(formConst, prop, data[0][fieldNames?.value ?? 'value'])\n }\n }\n\n /**\n * 多个 Select 框级联下拉\n */\n const cascadeEnum = ({ prop, el, subProp, subEnum }: ZnFormV2SchemaProps) => {\n if (hyphenToCamelCase(el) === ComponentNameEnum.EL_SELECT) {\n if (typeof subProp !== 'string') return\n // 监听级联下拉变化\n watch(\n () => getFormProp(unref(model), prop),\n async (newVal: string) => {\n const enumMapConst = unref(enumMap)\n // 选择时将级联的 subProp 置空\n if (unref(model)[subProp!]) unref(model)[subProp!] = ''\n\n if (!subEnum) return\n if (!newVal) return enumMapConst.set(subProp!, [])\n\n if (enumMapConst.get(`${subProp!}-${newVal}`)) {\n // 存在缓存字典数据,则取出来赋值\n enumMapConst.set(subProp!, enumMapConst.get(`${subProp!}-${newVal}`) || [])\n } else {\n if (typeof subEnum === 'function') {\n const subEnumData = await subEnum(newVal, enumMapConst.get(prop))\n // 缓存字典数据\n enumMapConst.set(`${subProp!}-${newVal}`, subEnumData)\n enumMapConst.set(subProp!, subEnumData)\n } else if (Array.isArray(subEnum)) {\n // 缓存字典数据\n enumMapConst.set(`${subProp!}-${newVal}`, subEnum)\n enumMapConst.set(subProp!, subEnum)\n }\n }\n\n const formEnum = enumMapConst.get(prop) || []\n const [enumValue] = formEnum.filter((item) => item.value === newVal)\n // 如果选中的字典有 subValue,则直接赋值给 subProp\n if (enumValue?.subValue) unref(model)[subProp!] = enumValue.subValue\n },\n { immediate: true }\n )\n }\n }\n\n // 处理 hidden 显隐逻辑\n const getIsHidden = (item: ZnFormV2SchemaProps) => {\n if (typeof item.hidden === 'boolean') return item.hidden\n if (typeof item.hidden === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hidden.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hidden(unref(model))\n }\n\n // 依赖model的情况,使用智能缓存\n const config: SmartCacheConfig = {\n prefix: 'hidden',\n prop: item.prop\n }\n\n return withSmartCache(item.hidden, config, model, performanceCache)\n }\n return false\n }\n\n // 处理 hiddenInView 查看模式下的显隐逻辑\n const getIsHiddenInView = (item: ZnFormV2SchemaProps) => {\n // 只在查看模式下生效\n if (!props.isView) return false\n\n if (typeof item.hiddenInView === 'boolean') return item.hiddenInView\n if (typeof item.hiddenInView === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hiddenInView.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hiddenInView(unref(model))\n }\n\n // 依赖model的情况,使用智能缓存\n const config: SmartCacheConfig = {\n prefix: 'hiddenInView',\n prop: item.prop\n }\n\n return withSmartCache(item.hiddenInView, config, model, performanceCache, { isView: props.isView })\n }\n return false\n }\n\n // 处理 hiddenLabel 标签显隐逻辑\n const getIsHiddenLabel = (item: ZnFormV2SchemaProps) => {\n if (typeof item.hiddenLabel === 'boolean') return item.hiddenLabel\n if (typeof item.hiddenLabel === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hiddenLabel.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hiddenLabel(unref(model))\n }\n\n // 依赖model的情况,使用智能缓存\n const config: SmartCacheConfig = {\n prefix: 'hiddenLabel',\n prop: item.prop\n }\n\n return withSmartCache(item.hiddenLabel, config, model, performanceCache)\n }\n return false\n }\n\n // 处理 destroy 销毁逻辑\n const getIsDestroyed = (item: ZnFormV2SchemaProps) => {\n if (typeof item.destroy === 'boolean') return item.destroy\n if (typeof item.destroy === 'function') {\n const cacheKey = `destroy_${item.prop}_${modelHasher(unref(model))}`\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = item.destroy(unref(model))\n performanceCache.set(cacheKey, result)\n return result\n }\n return false\n }\n\n // 获取处理后的schema - 使用更精确的缓存策略\n const getProcessedSchema = computed(() => {\n // 如果设置了delayLoad且组件还未准备好,返回空数组避免提前计算\n if (props.delayLoad > 0 && !componentLoadReady.value) {\n return []\n }\n\n const schemaList = unref(getProps).schema || []\n\n // 为了确保hidden/hiddenInView/hiddenLabel函数能正确响应变化,\n // 我们需要在缓存key中包含相关信息\n const modelForHidden = JSON.stringify(unref(model))\n \n // 计算当前所有hidden状态,这样外部变量变化时缓存会失效\n const currentHiddenStates = schemaList.map(item => ({\n prop: item.prop,\n hidden: getIsHidden(item),\n hiddenInView: getIsHiddenInView(item),\n hiddenLabel: getIsHiddenLabel(item)\n }))\n \n const schemaHash = schemaList\n .map((item) => `${item.prop}_${item.el}_${!!item.render}_${!!item.renderInView}_${!!item.hidden}_${!!item.hiddenInView}_${!!item.hiddenLabel}`)\n .join('|')\n const hiddenStatesHash = JSON.stringify(currentHiddenStates)\n const cacheKey = `processedSchema_${schemaHash}_${modelForHidden}_${hiddenStatesHash}`\n\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n // 统一处理逻辑\n const processSchema = (items: any[]) => {\n return items\n .filter((item) => !getIsDestroyed(item))\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map((item, index) => {\n // 直接使用已经计算好的hidden状态\n const hiddenState = currentHiddenStates.find(state => state.prop === item.prop)\n return {\n ...item,\n renderPriority: item.renderPriority || 0,\n enableAsyncRender: item.enableAsyncRender !== false,\n _index: index,\n _hidden: hiddenState?.hidden || false,\n _hiddenInView: hiddenState?.hiddenInView || false,\n _hiddenLabel: hiddenState?.hiddenLabel || false\n }\n })\n }\n\n const result = processSchema(schemaList)\n\n // 缓存结果,但限制缓存大小避免内存泄漏\n const cacheStats = performanceCache.getStats()\n if (cacheStats.size > 100) {\n // 清理部分旧缓存\n const allKeys: string[] = []\n performanceCache['cache'].forEach((_, key) => {\n if (typeof key === 'string' && key.startsWith('processedSchema_')) {\n allKeys.push(key)\n }\n })\n if (allKeys.length > 10) {\n // 删除最旧的5个processedSchema缓存\n allKeys.slice(0, 5).forEach(key => performanceCache.delete(key))\n }\n }\n \n performanceCache.set(cacheKey, result)\n\n return result\n })\n\n // 获取可见的表单项\n const getVisibleSchema = computed(() => {\n const items = getProcessedSchema.value\n if (!items.length) return []\n\n // 使用新的懒加载判断逻辑\n if (shouldUseLazyLoad.value || items.length > props.maxSyncRenderCount) {\n const rendered = Array.from(renderedItems.value)\n // 懒加载时也不过滤hidden项目,只过滤渲染状态\n return items.filter((item, index) => rendered.includes(item.prop) || index < props.initialLoadCount)\n }\n\n // 不过滤hidden项目,让v-show来控制显示隐藏\n return items\n })\n\n // 表单组件渲染逻辑 - 优化懒加载场景的缓存策略\n const RenderFormWrap = markRaw(\n defineComponent({\n name: 'RenderFormWrap',\n setup() {\n const slots = useSlots()\n\n // 缓存渲染结果 - 为懒加载优化\n const renderCache = new Map<string, any>()\n\n // 为懒加载场景设计的增量缓存策略\n const getIncrementalCacheKey = (schemaList: any[]) => {\n // 对于懒加载,我们基于已渲染的项目生成缓存key,而不是所有可见项目\n const { useCol } = unref(getProps)\n const baseKey = `${props.isView}_${shouldUseLazyLoad.value}_${useCol}`\n\n if (shouldUseLazyLoad.value) {\n // 懒加载模式:需要包含渲染状态和hidden状态\n const renderedProps = Array.from(renderedItems.value).sort()\n const hiddenHash = schemaList.map((item) => `${item.prop}:${item._hidden}:${item._hiddenInView}`).join('|')\n return `lazy_${baseKey}_${renderedProps.join('|')}_${hiddenHash}`\n } else {\n // 非懒加载模式:使用完整的schema hash\n const schemaHash = schemaList.map((item) => `${item.prop}_${item._hidden}_${item._hiddenInView}_${item._index}`).join('|')\n return `full_${baseKey}_${schemaHash}`\n }\n }\n\n return () => {\n const { useCol, rowProps, onlyRenderComponent, elFormProps } = unref(getProps)\n const schemaList = getVisibleSchema.value\n\n // 使用增量缓存策略\n const cacheKey = getIncrementalCacheKey(schemaList)\n\n // 如果缓存存在,直接返回\n if (renderCache.has(cacheKey)) {\n return renderCache.get(cacheKey)\n }\n\n let result: any\n\n if (onlyRenderComponent) {\n result = schemaList.map((item, index) => {\n const shouldShow = !item._hidden && !item._hiddenInView\n\n return (\n <div key={`${item.prop}_${index}`} v-show={shouldShow}>\n <ZnFormV2Item\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </div>\n )\n })\n } else {\n result = (\n <ElForm ref={elFormRef} model={model.value} class={[prefixClass, { 'is-view': props.isView }]} {...elFormProps}>\n {useCol ? renderWithCol(schemaList) : renderWithoutCol(schemaList)}\n </ElForm>\n )\n }\n\n // 智能缓存管理:懒加载模式下保留更多缓存项\n const maxCacheSize = shouldUseLazyLoad.value ? 20 : 5\n if (renderCache.size >= maxCacheSize) {\n // 清理最老的缓存项\n const firstKey = renderCache.keys().next().value\n renderCache.delete(firstKey)\n }\n\n renderCache.set(cacheKey, result)\n\n return result\n }\n }\n })\n )\n\n // 合并传入进来的栅格属性(与原版 ZnForm 保持一致)\n const setGridProp = (col: any = {}) => {\n return {\n // 如果有 span,代表用户优先级更高,所以不需要默认栅格\n ...(col.span ? {} : { xs: 24, sm: 12, md: 12, lg: 12, xl: 12 }),\n ...col\n }\n }\n\n // 渲染有栅格的表单\n const renderWithCol = (schemaList: ZnFormV2SchemaProps[]) => {\n const { rowProps } = unref(getProps)\n\n return (\n <ElRow gutter={20} {...rowProps}>\n {schemaList.map((item, index) => {\n const colProps = setGridProp({ ...rowProps?.col, ...item.col })\n const shouldShow = !item._hidden && !item._hiddenInView\n\n return (\n <ElCol key={`${item.prop}_${index}`} {...colProps} v-show={shouldShow}>\n {item._hiddenLabel ? (\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n ) : (\n <ElFormItem\n prop={item.prop}\n label={typeof item.label === 'function' ? item.label(model.value) : item.label}\n style={item.width ? { width: getPx(item.width) } : {}}\n ref={(ref: any) => {\n if (ref && componentRefsCollector) {\n componentRefsCollector.setFormItemRef(item.prop, ref)\n }\n }}\n {...(props.isView && props.disableRulesInView ? { ...item.formItem, rules: null } : item.formItem)}>\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </ElFormItem>\n )}\n </ElCol>\n )\n })}\n </ElRow>\n )\n }\n\n // 渲染无栅格的表单\n const renderWithoutCol = (schemaList: ZnFormV2SchemaProps[]) => {\n return schemaList.map((item, index) =>\n item._hiddenLabel ? (\n <ZnFormV2Item\n key={`${item.prop}_${index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n ) : (\n <ElFormItem\n key={`${item.prop}_${index}`}\n prop={item.prop}\n label={typeof item.label === 'function' ? item.label(model.value) : item.label}\n style={item.width ? { width: getPx(item.width) } : {}}\n ref={(ref: any) => {\n if (ref && componentRefsCollector) {\n componentRefsCollector.setFormItemRef(item.prop, ref)\n }\n }}\n {...(props.isView && props.disableRulesInView ? { ...item.formItem, rules: null } : item.formItem)}>\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </ElFormItem>\n )\n )\n }\n\n // 懒加载相关逻辑\n const initializeLazyLoading = () => {\n if (!shouldUseLazyLoad.value) return\n\n const schemaList = getProcessedSchema.value\n\n // 初始渲染指定数量的表单项\n for (let i = 0; i < Math.min(props.initialLoadCount, schemaList.length); i++) {\n renderedItems.value.add(schemaList[i].prop)\n }\n\n // 设置剩余项目为待渲染\n pendingItems.value = schemaList.slice(props.initialLoadCount)\n\n if (pendingItems.value.length > 0) {\n startBatchRendering()\n }\n }\n\n // 逐个渲染(优化版)- 每个组件准备好就立即显示\n const startBatchRendering = () => {\n if (pendingItems.value.length === 0) {\n isRendering.value = false\n return\n }\n\n isRendering.value = true\n\n const renderNext = () => {\n if (pendingItems.value.length === 0) {\n isRendering.value = false\n return\n }\n\n const startTime = performance.now()\n // 每次只渲染一个组件,实现真正的逐个显示\n const item = pendingItems.value.shift()\n\n if (item) {\n // 立即添加到已渲染列表,触发UI更新\n renderedItems.value.add(item.prop)\n\n // 记录渲染时间\n componentLoadTimes.value.push({\n prop: item.prop,\n time: startTime\n })\n\n // 更新性能统计\n performanceStats.value.componentCount = renderedItems.value.size\n performanceStats.value.renderTime = performance.now() - startTime\n performanceStats.value.queueLength = pendingItems.value.length\n\n if (props.enablePerformanceMonitoring) {\n emit('onPerformanceUpdate', performanceStats.value)\n }\n }\n\n // 继续渲染下一个组件,使用较短的延迟以实现流畅的逐个显示\n if (pendingItems.value.length > 0) {\n // 使用 requestAnimationFrame 或较短的 timeout 来实现更流畅的渲染\n if (props.lazyLoadDelay <= 16) {\n requestAnimationFrame(renderNext)\n } else {\n setTimeout(renderNext, props.lazyLoadDelay)\n }\n } else {\n isRendering.value = false\n }\n }\n\n // 延迟开始渲染\n setTimeout(renderNext, props.delayLoad)\n }\n\n // 处理表单项初始化\n const handleSchemaInit = () => {\n const schemaList = unref(getProps).schema || []\n\n schemaList.forEach(async (item) => {\n // 处理枚举数据\n if (item.enum) {\n await setEnumMap(item)\n }\n\n // 处理级联下拉\n if (item.subProp && item.subEnum) {\n cascadeEnum(item)\n }\n\n // 初始化默认值\n if (item.defaultValue !== undefined) {\n debouncer(`init_${item.prop}`, () => initDefaultValue(item), 50)\n }\n })\n }\n\n // 检测schema结构性变化(只检查影响渲染的关键属性)\n const hasStructuralChanges = (newSchema: ZnFormV2SchemaProps[], oldSchema: ZnFormV2SchemaProps[]) => {\n if (!oldSchema || oldSchema.length !== newSchema.length) return true\n\n // 检查关键结构属性是否变化\n for (let i = 0; i < newSchema.length; i++) {\n const newItem = newSchema[i]\n const oldItem = oldSchema[i]\n\n if (!oldItem || newItem.prop !== oldItem.prop || newItem.el !== oldItem.el || newItem.destroy !== oldItem.destroy || newItem.order !== oldItem.order) {\n return true\n }\n }\n\n return false\n }\n\n // 监听schema变化\n watch(\n () => unref(getProps).schema,\n (newSchema, oldSchema) => {\n if (props.delayLoad > 0 && !componentLoadReady.value) {\n return\n }\n\n if (!isInitialized.value && !oldSchema) {\n return\n }\n\n if (newSchema?.length) {\n // 检查是否有结构性变化\n const hasStructuralChange = hasStructuralChanges(newSchema, oldSchema || [])\n\n // 只有在以下情况才重置渲染状态(避免表单闪烁):\n // 1. 初次渲染(oldSchema为空)\n // 2. schema结构发生变化\n // 3. 启用了懒加载且需要重新计算渲染列表\n const shouldResetRenderState =\n !oldSchema || hasStructuralChange || (props.lazyLoad && hasStructuralChange) || (newSchema.length > props.maxSyncRenderCount && hasStructuralChange)\n\n if (shouldResetRenderState) {\n // 只有在需要重置渲染状态时才处理schema初始化\n handleSchemaInit()\n\n // 智能重置:只有在真正需要时才清空已渲染项\n if (hasStructuralChange) {\n renderedItems.value.clear()\n }\n\n pendingItems.value = []\n componentLoadTimes.value = []\n\n nextTick(() => {\n initializeLazyLoading()\n })\n }\n }\n },\n { immediate: false, deep: true }\n )\n\n // 监听enum变化 - 优化版本,避免不必要的重新渲染\n watch(\n () =>\n unref(getProps).schema?.map((item) => ({\n prop: item.prop,\n enum: item.enum,\n dictCode: item.dictCode\n })),\n (newEnums, oldEnums) => {\n if (!newEnums || !oldEnums || newEnums.length !== oldEnums.length) return\n\n // 找出发生变化的enum项,只更新对应的枚举数据\n let hasEnumChanges = false\n const changedProps: string[] = []\n\n newEnums.forEach((newItem, index) => {\n const oldItem = oldEnums[index]\n if (newItem.enum !== oldItem?.enum || newItem.dictCode !== oldItem?.dictCode) {\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === newItem.prop)\n if (schemaItem) {\n hasEnumChanges = true\n changedProps.push(newItem.prop)\n\n // 异步更新枚举,避免阻塞主线程\n nextTick(() => {\n setEnumMap(schemaItem)\n })\n }\n }\n })\n\n // 只清除与变化的enum相关的缓存,而不是清除所有缓存\n if (hasEnumChanges) {\n // 使用防抖避免频繁清除缓存\n debouncer(\n 'enum_change',\n () => {\n // 只清除与变化的props相关的缓存,但不清除processedSchema缓存\n // 因为enum变化不影响schema结构,不需要重新渲染所有组件\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n // 不清除 processedSchema_ 缓存,只清除与具体字段相关的缓存\n if (!key.startsWith('processedSchema_') && changedProps.some((prop) => key.includes(prop))) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n },\n 100\n ) // 使用较长的防抖时间避免频繁操作\n }\n },\n { deep: true }\n )\n\n // 监听 isView 和 hidden 相关属性变化,清除相关缓存\n watch(\n [\n () => props.isView,\n () =>\n unref(getProps).schema?.map((item) => ({\n prop: item.prop,\n hidden: item.hidden,\n hiddenInView: item.hiddenInView,\n hiddenLabel: item.hiddenLabel\n }))\n ],\n (newValues, oldValues) => {\n if (!oldValues) return\n\n const [newIsView, newHiddenProps] = newValues\n const [oldIsView, oldHiddenProps] = oldValues\n\n // 检查是否有实际变化\n let hasChanges = newIsView !== oldIsView\n\n if (!hasChanges && newHiddenProps && oldHiddenProps) {\n // 检查 hidden 相关属性是否有变化\n hasChanges = newHiddenProps.some((newItem, index) => {\n const oldItem = oldHiddenProps[index]\n return !oldItem || newItem.hidden !== oldItem.hidden || newItem.hiddenInView !== oldItem.hiddenInView || newItem.hiddenLabel !== oldItem.hiddenLabel\n })\n }\n\n if (hasChanges) {\n // 使用防抖避免频繁清除缓存\n debouncer(\n 'view_hidden_change',\n () => {\n // 只清除与显示/隐藏相关的缓存\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n if (key.startsWith('processedSchema_') || key.includes('_hidden_') || key.includes('_view_')) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n },\n 50\n )\n }\n },\n { deep: true }\n )\n\n // 获取可见的表单项prop列表\n const getVisibleFormProps = () => {\n const schemaList = getProcessedSchema.value\n return schemaList.filter((item) => !item._hidden && !item._hiddenInView).map((item) => item.prop)\n }\n\n // 暴露方法\n const validate = (callback?: (valid: boolean, invalidFields?: any) => void) => {\n if (!elFormRef.value) {\n callback?.(true)\n return Promise.resolve(true)\n }\n\n // 如果没有传递回调函数,使用Promise方式\n if (!callback) {\n return new Promise((resolve, reject) => {\n elFormRef.value?.validate((valid, invalidFields) => {\n if (valid) {\n resolve(true)\n } else {\n // 根据配置决定是否过滤隐藏表单项的验证错误\n if (props.excludeHiddenFieldsValidation) {\n const visibleProps = getVisibleFormProps()\n const filteredInvalidFields: any = {}\n\n if (invalidFields) {\n Object.keys(invalidFields).forEach((prop) => {\n if (visibleProps.includes(prop)) {\n filteredInvalidFields[prop] = invalidFields[prop]\n }\n })\n }\n\n // 如果过滤后没有错误,则认为验证通过\n const hasVisibleErrors = Object.keys(filteredInvalidFields).length > 0\n if (hasVisibleErrors) {\n reject(filteredInvalidFields)\n } else {\n resolve(true)\n }\n } else {\n // 不过滤隐藏字段,直接返回原始验证结果\n reject(invalidFields)\n }\n }\n })\n })\n }\n\n // 使用回调函数方式\n elFormRef.value.validate((valid, invalidFields) => {\n if (valid) {\n callback(true)\n } else {\n // 根据配置决定是否过滤隐藏表单项的验证错误\n if (props.excludeHiddenFieldsValidation) {\n const visibleProps = getVisibleFormProps()\n const filteredInvalidFields: any = {}\n\n if (invalidFields) {\n Object.keys(invalidFields).forEach((prop) => {\n if (visibleProps.includes(prop)) {\n filteredInvalidFields[prop] = invalidFields[prop]\n }\n })\n }\n\n // 如果过滤后没有错误,则认为验证通过\n const hasVisibleErrors = Object.keys(filteredInvalidFields).length > 0\n callback(!hasVisibleErrors, hasVisibleErrors ? filteredInvalidFields : undefined)\n } else {\n // 不过滤隐藏字段,直接返回原始验证结果\n callback(false, invalidFields)\n }\n }\n })\n }\n\n const validateField = (props: FormItemProp, callback?: (errorMessage: string) => void) => {\n // 根据配置决定是否过滤隐藏字段\n if (getProps.value.excludeHiddenFieldsValidation) {\n // 检查要验证的字段是否可见\n const visibleProps = getVisibleFormProps()\n const propsArray = Array.isArray(props) ? props : [props]\n\n // 过滤掉隐藏的字段\n const visiblePropsToValidate = propsArray.filter((prop) => visibleProps.includes(prop as string))\n\n // 如果没有可见的字段需要验证,直接返回成功\n if (visiblePropsToValidate.length === 0) {\n callback?.('')\n return Promise.resolve('')\n }\n\n // 验证可见的字段\n const finalProps = visiblePropsToValidate.length === 1 ? visiblePropsToValidate[0] : visiblePropsToValidate\n return elFormRef.value?.validateField(finalProps as FormItemProp, callback)\n } else {\n // 不过滤隐藏字段,直接验证所有字段\n return elFormRef.value?.validateField(props, callback)\n }\n }\n\n const resetFields = () => {\n elFormRef.value?.resetFields()\n }\n\n const resetForm = () => {\n // 重置表单数据\n Object.keys(model.value).forEach((key) => {\n delete model.value[key]\n })\n\n // 重置验证状态\n elFormRef.value?.clearValidate()\n\n // 触发表单初始化,重新设置默认值\n nextTick(() => {\n handleSchemaInit()\n })\n }\n\n const clearValidate = (props?: FormItemProp) => {\n elFormRef.value?.clearValidate(props)\n }\n\n const scrollToField = (prop: FormItemProp) => {\n elFormRef.value?.scrollToField(prop)\n }\n\n // 注册表单方法\n const registerMethods = {\n validate,\n validateField,\n resetFields,\n resetForm,\n clearValidate,\n scrollToField,\n setEnumMap,\n initDefaultValue,\n clearCache\n }\n\n // 组件挂载后初始化\n onMounted(() => {\n // delayLoad期间显示骨架屏,避免阻塞主线程\n if (props.delayLoad > 0) {\n // 在delayLoad期间完全不做任何操作,避免阻塞主线程\n setTimeout(() => {\n showComponentSkeleton.value = false\n componentLoadReady.value = true\n\n // 延迟初始化完成后,主动触发schema处理\n const schema = unref(getProps).schema\n if (schema?.length) {\n handleSchemaInit()\n\n if (shouldUseLazyLoad.value) {\n initializeLazyLoading()\n }\n }\n\n // 标记为已初始化\n isInitialized.value = true\n emit('register', extendedRegisterMethods)\n }, props.delayLoad)\n } else {\n // 无延迟,立即初始化\n showComponentSkeleton.value = false\n componentLoadReady.value = true\n\n // 立即处理schema\n const schema = unref(getProps).schema\n if (schema?.length) {\n handleSchemaInit()\n\n if (shouldUseLazyLoad.value) {\n initializeLazyLoading()\n }\n }\n\n // 标记为已初始化\n isInitialized.value = true\n emit('register', extendedRegisterMethods)\n }\n\n // 启动性能监控定时器\n if (props.enablePerformanceMonitoring) {\n loadingTimer.value = setInterval(() => {\n performanceStats.value.cacheStats = performanceCache.getStats()\n emit('onPerformanceUpdate', performanceStats.value)\n }, props.performanceConfig.reportInterval || 2000) as any\n }\n })\n\n // 组件卸载前清理\n onBeforeUnmount(() => {\n cleanup()\n })\n\n // 新增方法实现\n const setProps = (newProps: Partial<ZnFormV2Props>) => {\n Object.assign(mergeProps.value, newProps)\n if (newProps.modelValue) {\n Object.assign(model.value, newProps.modelValue)\n }\n }\n\n const setValues = (data: Record<string, any>) => {\n Object.assign(model.value, data)\n }\n\n const setSchema = (config: FormSetProps) => {\n const { prop, field, value } = config\n const currentSchema = [...(unref(getProps).schema || [])]\n\n if (field === 'schema') {\n // 直接设置整个 schema\n mergeProps.value.schema = value as ZnFormV2SchemaProps[]\n } else {\n // 修改特定字段的特定属性\n const targetItem = currentSchema.find((item) => item.prop === prop)\n if (targetItem) {\n ;(targetItem as any)[field] = value\n // 更新整个 schema 以触发响应式更新\n mergeProps.value.schema = currentSchema\n }\n }\n }\n\n const addSchema = (formSchema: ZnFormV2SchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const currentSchema = [...(unref(getProps).schema || [])]\n\n if (typeof prop === 'number') {\n // 按索引插入\n currentSchema.splice(prop, 0, formSchema)\n } else if (typeof prop === 'string') {\n // 按 prop 名称查找位置插入\n const index = currentSchema.findIndex((item) => item.prop === prop)\n if (index !== -1) {\n const insertIndex = position === 'before' ? index : index + 1\n currentSchema.splice(insertIndex, 0, formSchema)\n } else {\n currentSchema.push(formSchema)\n }\n } else {\n // 添加到末尾\n currentSchema.push(formSchema)\n }\n\n mergeProps.value.schema = currentSchema\n }\n\n const delSchema = (prop: string) => {\n const currentSchema = unref(getProps).schema || []\n const newSchema = currentSchema.filter((item) => item.prop !== prop)\n mergeProps.value.schema = newSchema\n }\n\n const getFormData = <T = Record<string, any>,>(filterEmptyVal = true): T => {\n const formData = model.value\n\n if (filterEmptyVal) {\n // 过滤空值\n return Object.keys(formData).reduce((prev, next) => {\n const value = formData[next]\n if (value !== '' && value !== null && value !== undefined) {\n if (typeof value === 'object' && value !== null) {\n if (Object.keys(value).length > 0) prev[next] = value\n } else prev[next] = value\n }\n return prev\n }, {}) as T\n }\n\n return formData as T\n }\n\n // 表单项实例存储\n const formItemRefs = ref(new Map<string, any>())\n const componentRefs = ref(new Map<string, any>())\n\n const getComponentExpose = (prop: string) => {\n return componentRefs.value.get(prop) || null\n }\n\n const getFormItemExpose = (prop: string) => {\n return formItemRefs.value.get(prop) || null\n }\n\n const getSchema = () => {\n return unref(getProps).schema || []\n }\n\n /**\n * 手动刷新指定prop的表单项\n * @param prop 要刷新的表单项prop\n * @param options 刷新选项\n */\n const refreshFormItem = async (\n prop: string,\n options?: {\n /** 是否重新初始化枚举数据 */\n refreshEnum?: boolean\n /** 是否重新设置默认值 */\n refreshDefaultValue?: boolean\n /** 是否清除验证状态 */\n clearValidate?: boolean\n }\n ) => {\n const { refreshEnum = true, refreshDefaultValue = false, clearValidate = true } = options || {}\n\n // 1. 查找对应的schema项\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === prop)\n if (!schemaItem) {\n console.warn(`未找到prop为 \"${prop}\" 的表单项`)\n return\n }\n\n // 2. 清除与该prop相关的所有缓存\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n if (key.includes(prop)) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n\n // 3. 清除依赖追踪缓存\n renderDependencyTracker.clearDependencies(prop)\n\n // 4. 清除智能缓存中与该prop相关的缓存\n clearRelatedCache(performanceCache, 'hidden', [prop])\n clearRelatedCache(performanceCache, 'hiddenInView', [prop])\n clearRelatedCache(performanceCache, 'hiddenLabel', [prop])\n\n // 5. 重新初始化枚举数据\n if (refreshEnum && schemaItem.enum) {\n try {\n await setEnumMap(schemaItem)\n } catch (error) {\n console.error(`刷新prop \"${prop}\" 的枚举数据失败:`, error)\n }\n }\n\n // 6. 重新设置默认值\n if (refreshDefaultValue && schemaItem.defaultValue !== undefined) {\n try {\n await initDefaultValue(schemaItem)\n } catch (error) {\n console.error(`刷新prop \"${prop}\" 的默认值失败:`, error)\n }\n }\n\n // 7. 清除验证状态\n if (clearValidate) {\n elFormRef.value?.clearValidate(prop)\n }\n\n // 8. 如果是懒加载模式,重新标记该项为需要渲染\n if (shouldUseLazyLoad.value) {\n // 移除已渲染标记,强制重新渲染\n renderedItems.value.delete(prop)\n\n // 将该项重新加入渲染队列\n const schemaList = getProcessedSchema.value\n const targetItem = schemaList.find((item) => item.prop === prop)\n if (targetItem && !pendingItems.value.some((item) => item.prop === prop)) {\n // 插入到队列开头,优先渲染\n pendingItems.value.unshift(targetItem)\n\n // 如果当前没有在渲染,立即开始渲染\n if (!isRendering.value) {\n nextTick(() => {\n startBatchRendering()\n })\n }\n }\n }\n\n // 9. 强制触发重新渲染\n await nextTick()\n\n console.log(`已刷新表单项: ${prop}`)\n }\n\n // 更新注册方法\n const extendedRegisterMethods = {\n ...registerMethods,\n setProps,\n setValues,\n setSchema,\n addSchema,\n delSchema,\n getFormData,\n getComponentExpose,\n getFormItemExpose,\n getSchema,\n refreshFormItem,\n model: model.value\n }\n\n // 暴露API\n defineExpose({\n ...extendedRegisterMethods,\n form: elFormRef,\n enumMap,\n model: model.value\n })\n\n // 自动决定是否启用懒加载 - 默认启用,当作大组件处理\n const shouldUseLazyLoad = computed(() => {\n const schemaLength = unref(getProps).schema?.length || 0\n const userLazyLoad = props.lazyLoad\n\n // 如果用户明确设置lazy-load为false,则禁用懒加载\n if (userLazyLoad === false) {\n return false\n }\n\n // 默认情况下启用懒加载,把所有表单都当作大组件处理\n if (userLazyLoad === true) {\n return true\n }\n\n // 对于非常小的表单(少于5个表单项且无自定义render),可以考虑同步渲染\n if (schemaLength < 5) {\n const renderFunctionCount = unref(getProps).schema?.filter((item) => item.render || item.renderInView)?.length || 0\n if (renderFunctionCount === 0) {\n return false\n }\n }\n\n // 其他情况默认启用懒加载\n return true\n })\n</script>\n"],"names":["_isSlot","s","_isVNode","Object","prototype","toString","call","prefixClass","PERFORMANCE_CONFIG","PerformanceCache","__name","this","cache","Map","timers","hitCount","missCount","has","key","item","get","Date","now","timestamp","delete","value","undefined","set","size","firstKey","keys","next","clearTimeout","timer","setTimeout","clear","forEach","getStats","hitRate","createDebouncer","fn","delay","createModelHasher","lastModel","lastHash","lastStringified","model","stringified","JSON","stringify","sort","hash","i","length","charCodeAt","finalHash","props","__props","emit","__emit","_useModel","elFormRef","shallowRef","mergeProps","ref","getProps","computed","propsObj","assign","unref","enumMap","enumMapProps","renderedItems","Set","pendingItems","componentLoadReady","showComponentSkeleton","delayLoad","loadingTimer","componentLoadTimes","performanceCache","debouncer","modelHasher","performanceStats","renderTime","componentCount","cacheHitRate","queueLength","cacheStats","isRendering","isInitialized","clearCache","cleanup","getCurrentInstance","clearInterval","setEnumMap","async","enum","enumValue","prop","cacheEnum","enumMapConst","data","result","Array","isArray","console","warn","nextTick","schemaItem","schema","find","initDefaultValue","error","provide","formEnumMapKey","componentRefsCollector","setComponentRef","setFormItemRef","renderDependencyTracker","dependencies","renderAccess","currentTrackingRender","startTracking","stopTracking","trackFieldAccess","accessedField","add","getAffectedRenders","changedField","clearDependencies","field","dependents","createTrackedModel","originalModel","Proxy","target","defaultValue","fieldNames","formConst","getFormProp","defaultValueConst","setFormProp","enumData","filter","isDefault","cascadeEnum","el","subProp","subEnum","hyphenToCamelCase","ComponentNameEnum","EL_SELECT","watch","newVal","subEnumData","formEnum","subValue","immediate","getIsHidden","hidden","funcStr","includes","config","prefix","withSmartCache","getIsHiddenInView","isView","hiddenInView","getIsHiddenLabel","hiddenLabel","getIsDestroyed","destroy","cacheKey","getProcessedSchema","schemaList","modelForHidden","currentHiddenStates","map","render","renderInView","join","items","a","b","order","index","hiddenState","state","renderPriority","enableAsyncRender","_index","_hidden","_hiddenInView","_hiddenLabel","processSchema","allKeys","_","startsWith","push","slice","getVisibleSchema","shouldUseLazyLoad","maxSyncRenderCount","rendered","from","initialLoadCount","RenderFormWrap","markRaw","defineComponent","name","setup","useSlots","renderCache","getIncrementalCacheKey","useCol","baseKey","renderedProps","hiddenHash","rowProps","onlyRenderComponent","elFormProps","shouldShow","_withDirectives2","_createVNode2","ZnFormV2Item","column","modelValue","$event","isLazyLoading","isReady","_vShow2","ElForm","_mergeProps","class","default","renderWithCol","renderWithoutCol","maxCacheSize","setGridProp","col","span","xs","sm","md","lg","xl","_slot","ElRow","gutter","colProps","ElCol","ElFormItem","label","style","width","getPx","disableRulesInView","formItem","rules","initializeLazyLoading","Math","min","startBatchRendering","renderNext","startTime","performance","shift","time","enablePerformanceMonitoring","lazyLoadDelay","requestAnimationFrame","handleSchemaInit","hasStructuralChanges","newSchema","oldSchema","newItem","oldItem","hasStructuralChange","lazyLoad","deep","dictCode","newEnums","oldEnums","hasEnumChanges","changedProps","keysToDelete","some","newValues","oldValues","newIsView","newHiddenProps","oldIsView","oldHiddenProps","hasChanges","getVisibleFormProps","registerMethods","validate","callback","valid","invalidFields","excludeHiddenFieldsValidation","visibleProps","filteredInvalidFields","hasVisibleErrors","Promise","resolve","reject","validateField","visiblePropsToValidate","finalProps","resetFields","resetForm","clearValidate","scrollToField","onMounted","extendedRegisterMethods","setInterval","performanceConfig","reportInterval","onBeforeUnmount","setProps","newProps","setValues","setSchema","currentSchema","targetItem","addSchema","formSchema","position","splice","findIndex","insertIndex","delSchema","getFormData","filterEmptyVal","formData","reduce","prev","formItemRefs","componentRefs","getComponentExpose","getFormItemExpose","getSchema","refreshFormItem","options","refreshEnum","refreshDefaultValue","clearRelatedCache","unshift","log","__expose","form","schemaLength","userLazyLoad"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znFormV2/src/index.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst prefixClass = 'zn-form-v2'\n</script>\n<template>\n <div :class=\"[prefixClass, 'zn-znform-v2-container']\" ref=\"containerRef\">\n <!-- 性能监控面板 -->\n <div\n v-if=\"performanceConfig.enableDebug && performanceStats\"\n class=\"performance-panel\"\n style=\"\n position: fixed;\n z-index: 9999;\n top: 10px;\n right: 10px;\n padding: 10px;\n border-radius: 4px;\n background: rgb(0 0 0 / 80%);\n color: white;\n font-size: 12px;\n \">\n <div>渲染耗时: {{ performanceStats.renderTime.toFixed(2) }}ms</div>\n <div>组件数量: {{ performanceStats.componentCount }}</div>\n <div>缓存命中率: {{ (performanceStats.cacheHitRate * 100).toFixed(1) }}%</div>\n <div>队列长度: {{ performanceStats.queueLength }}</div>\n </div>\n\n <!-- 组件级别的骨架屏 - delayLoad期间显示 -->\n <el-skeleton v-if=\"showComponentSkeleton\" :rows=\"8\" animated></el-skeleton>\n\n <!-- 表单容器 - 组件准备好后显示 -->\n <div v-show=\"!showComponentSkeleton && componentLoadReady\">\n <RenderFormWrap />\n\n <!-- 懒加载状态 -->\n <div\n v-if=\"isRendering && enablePerformanceMonitoring\"\n class=\"loading\"\n style=\"display: flex; position: absolute; z-index: 1000; top: 50%; left: 50%; align-items: center; transform: translate(-50%, -50%); gap: 10px\">\n <div\n style=\"\n width: 16px;\n height: 16px;\n animation: spin 1s linear infinite;\n border: 2px solid #409eff;\n border-top: 2px solid transparent;\n border-radius: 50%;\n \"></div>\n <span>正在渲染表单项...</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"tsx\">\n import {\n type ComponentPublicInstance,\n computed,\n defineComponent,\n markRaw,\n onMounted,\n onUnmounted,\n provide,\n ref,\n shallowRef,\n unref,\n useSlots,\n watch,\n nextTick,\n Fragment,\n onBeforeUnmount,\n getCurrentInstance\n } from 'vue'\n\n import ZnFormV2Item from './components/ZnFormV2Item.vue'\n\n import { deleteObjProperty, getFormProp, getPx, hyphenToCamelCase, isString, setFormProp } from './helper'\n import { componentMap } from './helper/componentMap'\n import { ComponentNameEnum, formEnumMapKey, type ZnFormV2SchemaProps, type FormSetProps, type ZnElFormProps, type ValueType } from './interface'\n import {\n type ColProps,\n ElCol,\n ElForm,\n ElFormItem,\n ElRow,\n ElSkeleton,\n ElSkeletonItem,\n type FormInstance,\n type FormItemInstance,\n type FormItemProp,\n type RowProps\n } from 'element-plus'\n import { PerformanceOptimizer, DEFAULT_PERFORMANCE_CONFIG } from './performance/PerformanceOptimizer'\n import { withSmartCache, clearRelatedCache, type SmartCacheConfig } from './utils/smartCache'\n\n defineOptions({ name: 'ZnFormV2' })\n\n \n\n // 添加性能优化相关的配置\n const PERFORMANCE_CONFIG = {\n CACHE_MAX_SIZE: 1000, // 最大缓存数量\n CACHE_TTL: 30000, // 缓存30秒过期\n DEBOUNCE_DELAY: 16, // 16ms防抖(60fps)\n BATCH_RENDER_SIZE: 10, // 每批渲染数量\n MAX_SYNC_RENDER: 50 // 超过50个组件强制异步\n }\n\n // 优化缓存系统\n class PerformanceCache {\n public cache = new Map()\n private timers = new Map()\n private hitCount = 0\n private missCount = 0\n\n has(key: string): boolean {\n const item = this.cache.get(key)\n if (item && Date.now() - item.timestamp < PERFORMANCE_CONFIG.CACHE_TTL) {\n return true\n }\n if (item) {\n this.delete(key) // 清理过期项\n }\n return false\n }\n\n get(key: string) {\n const item = this.cache.get(key)\n if (item && Date.now() - item.timestamp < PERFORMANCE_CONFIG.CACHE_TTL) {\n this.hitCount++\n return item.value\n }\n this.missCount++\n this.delete(key)\n return undefined\n }\n\n set(key: string, value: any) {\n // 限制缓存大小\n if (this.cache.size >= PERFORMANCE_CONFIG.CACHE_MAX_SIZE) {\n const firstKey = this.cache.keys().next().value\n this.delete(firstKey)\n }\n\n this.cache.set(key, {\n value,\n timestamp: Date.now()\n })\n\n // 设置过期定时器\n if (this.timers.has(key)) {\n clearTimeout(this.timers.get(key))\n }\n\n const timer = setTimeout(() => {\n this.delete(key)\n }, PERFORMANCE_CONFIG.CACHE_TTL)\n\n this.timers.set(key, timer)\n }\n\n delete(key: string) {\n this.cache.delete(key)\n const timer = this.timers.get(key)\n if (timer) {\n clearTimeout(timer)\n this.timers.delete(key)\n }\n }\n\n clear() {\n this.cache.clear()\n this.timers.forEach((timer) => clearTimeout(timer))\n this.timers.clear()\n }\n\n getStats() {\n return {\n size: this.cache.size,\n hitRate: this.hitCount / (this.hitCount + this.missCount) || 0,\n hitCount: this.hitCount,\n missCount: this.missCount\n }\n }\n }\n\n // 防抖函数优化\n const createDebouncer = () => {\n const timers = new Map()\n\n return (key: string, fn: Function, delay = PERFORMANCE_CONFIG.DEBOUNCE_DELAY) => {\n if (timers.has(key)) {\n clearTimeout(timers.get(key))\n }\n\n const timer = setTimeout(() => {\n fn()\n timers.delete(key)\n }, delay)\n\n timers.set(key, timer)\n }\n }\n\n // Model变化检测优化 - 更精确的哈希算法\n const createModelHasher = () => {\n let lastModel: any = null\n let lastHash = ''\n let lastStringified = ''\n\n return (model: any) => {\n if (model === lastModel) return lastHash\n\n // 使用 JSON.stringify 生成更精确的哈希\n const stringified = JSON.stringify(model, Object.keys(model).sort())\n\n if (stringified === lastStringified) {\n return lastHash\n }\n\n // 生成简单但有效的哈希\n let hash = 0\n for (let i = 0; i < stringified.length; i++) {\n const char = stringified.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n\n const finalHash = hash.toString(36)\n\n lastModel = model\n lastHash = finalHash\n lastStringified = stringified\n return finalHash\n }\n }\n\n export interface ZnFormV2Props {\n /** 表单值 */\n modelValue?: Record<string, any>\n /** 表单配置项 */\n schema?: ZnFormV2SchemaProps[]\n /** ElForm 的 props */\n elFormProps?: ZnElFormProps | Record<string, any>\n /** 是否使用栅格布局, 默认 true */\n useCol?: boolean\n /** 栅格布局全局设置 */\n rowProps?: Partial<RowProps> & {\n col?: Partial<ColProps>\n }\n /** 是否只渲染 ZnFormItem 组件,只使用表单组件 */\n onlyRenderComponent?: boolean\n /**\n * 动态 model,如果 schema 发生变化,则重新渲染 model 表单数据\n * (将不存在 schema 的 prop 从 model 中去掉),默认启用 true\n */\n dynamicModel?: boolean\n /**\n * 搭配 dynamicModel 使用,清除 model 不存在的 prop 时,\n * 指定保留 prop。如果不传,则不做清除\n */\n includeModelKeys?: string[]\n /**\n * 存储 enum 值。该 props 是搭配 ProTable 使用,\n * 因为 ProTable 已经初始化部分字典数据,\n * 因此不需要 ProForm 再次请求这些字典数据\n */\n enumMapProps?: Map<string, Record<string, any>[]>\n /** 是否查看,默认为否 */\n isView?: boolean\n /**查看状态时,禁用表单验证 */\n disableRulesInView?: boolean\n /** 是否延迟加载表单项,用于优化大型表单渲染性能 */\n lazyLoad?: boolean\n /** 延迟加载的时间间隔,单位毫秒 */\n lazyLoadDelay?: number\n /** 初始加载的表单项数量,默认为10 */\n initialLoadCount?: number\n /** 每批加载的表单项数量,默认为5 */\n batchLoadCount?: number\n /** 开启懒加载调试模式 */\n lazyLoadDebug?: boolean\n /** 整个组件延时加载时间,用于避免阻塞主线程,单位毫秒,默认500ms */\n delayLoad?: number\n\n // 新增的性能优化配置\n /** 性能配置 */\n performanceConfig?: any\n /** 启用虚拟滚动 */\n enableVirtualScroll?: boolean\n /** 虚拟滚动配置 */\n virtualScrollConfig?: any\n /** 时间切片配置 */\n timeSliceConfig?: any\n /** 最大同步渲染数量 */\n maxSyncRenderCount?: number\n /** 渲染批次大小 */\n renderBatchSize?: number\n /** 渲染延迟 */\n renderDelay?: number\n /** 启用性能监控 */\n enablePerformanceMonitoring?: boolean\n /** 是否排除隐藏表单项的验证,默认为true */\n excludeHiddenFieldsValidation?: boolean\n }\n\n const props = defineProps({\n modelValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n elFormProps: { required: false, default: () => ({}) },\n useCol: { type: Boolean, required: false, default: true },\n rowProps: { type: Object, required: false },\n onlyRenderComponent: { type: Boolean, required: false, default: false },\n dynamicModel: { type: Boolean, required: false, default: true },\n includeModelKeys: { type: Array, required: false },\n enumMapProps: { type: Map, required: false },\n isView: { type: Boolean, required: false, default: false },\n disableRulesInView: { type: Boolean, required: false, default: true },\n lazyLoad: { type: Boolean, required: false, default: true },\n lazyLoadDelay: { type: Number, required: false, default: 16 },\n initialLoadCount: { type: Number, required: false, default: 20 },\n batchLoadCount: { type: Number, required: false, default: 30 },\n lazyLoadDebug: { type: Boolean, required: false, default: false },\n delayLoad: { type: Number, required: false, default: 500 },\n performanceConfig: { required: false, default: () => ({\n enableMonitoring: false,\n enableDebug: false,\n reportInterval: 5000\n }) },\n enableVirtualScroll: { type: Boolean, required: false, default: false },\n virtualScrollConfig: { required: false, default: () => ({\n enabled: false,\n height: 400,\n itemHeight: 60,\n buffer: 5\n }) },\n timeSliceConfig: { required: false, default: () => ({\n enabled: true,\n sliceSize: 5,\n batchSize: 10\n }) },\n maxSyncRenderCount: { type: Number, required: false, default: 20 },\n renderBatchSize: { type: Number, required: false, default: 10 },\n renderDelay: { type: Number, required: false, default: 0 },\n enablePerformanceMonitoring: { type: Boolean, required: false, default: false },\n excludeHiddenFieldsValidation: { type: Boolean, required: false, default: true }\n})\n\n const emit = defineEmits([\n 'update:modelValue',\n 'update:schema',\n 'register',\n 'onSearch',\n 'onReset',\n 'onChange',\n 'onEnumChange',\n 'onSchemaChange',\n 'onPerformanceUpdate'\n ])\n\n const model = defineModel<Record<string, any>>({ default: () => ({}) })\n\n // 存储 ElForm 实例\n const elFormRef = shallowRef<FormInstance>()\n\n const mergeProps = ref<ZnFormV2Props>({})\n\n const getProps = computed(() => {\n const propsObj = { ...props }\n Object.assign(propsObj, unref(mergeProps))\n return propsObj\n })\n\n // 定义 enumMap 存储 enum 值\n const enumMap = ref(props.enumMapProps || new Map<string, Record<string, any>[]>())\n\n // 跟踪哪些表单项已经渲染,用于懒加载\n const renderedItems = ref(new Set<string>())\n // 记录需要懒加载的表单项\n const pendingItems = ref<ZnFormV2SchemaProps[]>([])\n // 组件级别的加载状态\n const componentLoadReady = ref(false)\n // 显示组件级别的骨架屏状态 - 根据delayLoad决定初始值\n const showComponentSkeleton = ref(props.delayLoad > 0)\n // 用于更新加载时间显示的定时器\n const loadingTimer = ref<NodeJS.Timeout | null>(null)\n // 用于触发加载时间更新的响应式变量\n const updateTrigger = ref(0)\n // 用于记录每个组件的加载耗时\n const componentLoadTimes = ref<Array<{ prop: string; time: number }>>([])\n\n // 用于缓存计算结果 - 替换为高性能缓存系统\n const performanceCache = new PerformanceCache()\n const debouncer = createDebouncer()\n const modelHasher = createModelHasher()\n\n // 性能监控\n const performanceStats = ref({\n renderTime: 0,\n componentCount: 0,\n cacheHitRate: 0,\n queueLength: 0,\n cacheStats: {\n size: 0,\n hitRate: 0,\n hitCount: 0,\n missCount: 0\n }\n })\n\n // 渲染状态\n const isRendering = ref(false)\n\n // 添加初始化状态标记\n const isInitialized = ref(false)\n\n const clearCache = () => {\n performanceCache.clear()\n }\n\n // 组件实例引用用于清理\n const componentInstance = getCurrentInstance()\n\n // 清理所有定时器和缓存\n const cleanup = () => {\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n performanceCache.clear()\n }\n\n const setEnumMap = async ({ enum: enumValue, prop, cacheEnum = true }: ZnFormV2SchemaProps) => {\n if (!enumValue) return\n\n const enumMapConst = unref(enumMap)\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') {\n enumMapConst.set(prop, unref(enumValue)!)\n enumMap.value = new Map(enumMapConst)\n return\n }\n\n try {\n // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储\n enumMapConst.set(prop!, [])\n\n // 如果当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n let data = await enumValue(unref(model), enumMapConst)\n\n // 适配 enum 接口返回 data 以及自定义函数返回数组\n data = data?.result || data\n\n // 如果返回的数据不是数组,则警告并强制转换为数组\n if (!Array.isArray(data)) {\n console.warn(`警告: '${prop}' 的enum函数返回值不是数组`, data)\n data = []\n }\n\n // 更新enumMap\n enumMapConst.set(prop, data)\n enumMap.value = new Map(enumMapConst)\n\n // 在下一tick触发初始化默认值\n nextTick(() => {\n if (prop) {\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === prop)\n if (schemaItem) {\n initDefaultValue(schemaItem)\n }\n }\n })\n } catch (error) {\n console.error(`添加enum函数参数失败: '${prop}'`, error)\n enumMapConst.set(prop!, [])\n enumMap.value = new Map(enumMapConst)\n }\n }\n\n provide(formEnumMapKey, enumMap)\n\n // 提供实例引用收集器\n const componentRefsCollector = {\n setComponentRef: (prop: string, ref: any) => {\n componentRefs.value.set(prop, ref)\n },\n setFormItemRef: (prop: string, ref: any) => {\n formItemRefs.value.set(prop, ref)\n }\n }\n provide('componentRefsCollector', componentRefsCollector)\n\n // 细粒度依赖追踪系统\n const renderDependencyTracker = {\n // 存储每个字段的render函数依赖关系\n dependencies: new Map<string, Set<string>>(), // prop -> Set of dependent fields\n\n // 存储每个render函数访问的字段\n renderAccess: new Map<string, Set<string>>(), // prop -> Set of accessed fields\n\n // 当前正在追踪的render函数\n currentTrackingRender: null as string | null,\n\n // 开始追踪某个render函数的依赖\n startTracking(prop: string) {\n this.currentTrackingRender = prop\n if (!this.renderAccess.has(prop)) {\n this.renderAccess.set(prop, new Set())\n }\n // 清除之前的依赖记录,重新收集\n this.renderAccess.get(prop)!.clear()\n },\n\n // 停止追踪\n stopTracking() {\n this.currentTrackingRender = null\n },\n\n // 记录字段访问\n trackFieldAccess(accessedField: string) {\n if (this.currentTrackingRender) {\n this.renderAccess.get(this.currentTrackingRender)!.add(accessedField)\n\n // 建立反向依赖关系:accessedField -> currentTrackingRender\n if (!this.dependencies.has(accessedField)) {\n this.dependencies.set(accessedField, new Set())\n }\n this.dependencies.get(accessedField)!.add(this.currentTrackingRender)\n }\n },\n\n // 获取受某个字段变化影响的render函数\n getAffectedRenders(changedField: string): Set<string> {\n return this.dependencies.get(changedField) || new Set()\n },\n\n // 清除某个字段的依赖\n clearDependencies(prop: string) {\n // 清除该字段作为依赖者的记录\n if (this.renderAccess.has(prop)) {\n const accessedFields = this.renderAccess.get(prop)!\n accessedFields.forEach((field) => {\n const dependents = this.dependencies.get(field)\n if (dependents) {\n dependents.delete(prop)\n if (dependents.size === 0) {\n this.dependencies.delete(field)\n }\n }\n })\n this.renderAccess.delete(prop)\n }\n\n // 清除该字段作为被依赖者的记录\n this.dependencies.delete(prop)\n }\n }\n\n // 创建一个代理的model对象用于依赖追踪\n const createTrackedModel = (originalModel: any) => {\n return new Proxy(originalModel, {\n get(target, prop) {\n // 记录字段访问\n if (typeof prop === 'string' && renderDependencyTracker.currentTrackingRender) {\n renderDependencyTracker.trackFieldAccess(prop)\n }\n return target[prop]\n }\n })\n }\n\n // 提供依赖追踪器给子组件\n provide('renderDependencyTracker', renderDependencyTracker)\n provide('createTrackedModel', createTrackedModel)\n\n // 初始化默认值\n const initDefaultValue = async ({ defaultValue, fieldNames, prop }: ZnFormV2SchemaProps) => {\n const formConst = unref(model)\n const value = getFormProp(formConst, prop)\n\n if (value || value === false || value === 0) return\n\n const defaultValueConst = unref(defaultValue)\n // 设置表单项的默认值,如果存在值,则不需要赋默认值\n if (defaultValueConst !== undefined && defaultValueConst !== null) {\n if (typeof defaultValueConst !== 'function') return setFormProp(formConst, prop, defaultValueConst)\n\n return setFormProp(formConst, prop, await defaultValueConst(formConst, unref(enumMap)))\n }\n\n // 如果没有设置默认值,则判断后台是否返回 isDefault 为 Y 的枚举\n const enumData = unref(enumMap).get(prop)\n if (enumData?.length) {\n // 找出 isDefault 为 Y 的 value\n const data = enumData.filter((item) => item.isDefault === 'Y')\n\n return data.length && setFormProp(formConst, prop, data[0][fieldNames?.value ?? 'value'])\n }\n }\n\n /**\n * 多个 Select 框级联下拉\n */\n const cascadeEnum = ({ prop, el, subProp, subEnum }: ZnFormV2SchemaProps) => {\n if (hyphenToCamelCase(el) === ComponentNameEnum.EL_SELECT) {\n if (typeof subProp !== 'string') return\n // 监听级联下拉变化\n watch(\n () => getFormProp(unref(model), prop),\n async (newVal: string) => {\n const enumMapConst = unref(enumMap)\n // 选择时将级联的 subProp 置空\n if (unref(model)[subProp!]) unref(model)[subProp!] = ''\n\n if (!subEnum) return\n if (!newVal) return enumMapConst.set(subProp!, [])\n\n if (enumMapConst.get(`${subProp!}-${newVal}`)) {\n // 存在缓存字典数据,则取出来赋值\n enumMapConst.set(subProp!, enumMapConst.get(`${subProp!}-${newVal}`) || [])\n } else {\n if (typeof subEnum === 'function') {\n const subEnumData = await subEnum(newVal, enumMapConst.get(prop))\n // 缓存字典数据\n enumMapConst.set(`${subProp!}-${newVal}`, subEnumData)\n enumMapConst.set(subProp!, subEnumData)\n } else if (Array.isArray(subEnum)) {\n // 缓存字典数据\n enumMapConst.set(`${subProp!}-${newVal}`, subEnum)\n enumMapConst.set(subProp!, subEnum)\n }\n }\n\n const formEnum = enumMapConst.get(prop) || []\n const [enumValue] = formEnum.filter((item) => item.value === newVal)\n // 如果选中的字典有 subValue,则直接赋值给 subProp\n if (enumValue?.subValue) unref(model)[subProp!] = enumValue.subValue\n },\n { immediate: true }\n )\n }\n }\n\n // 处理 hidden 显隐逻辑\n const getIsHidden = (item: ZnFormV2SchemaProps) => {\n if (typeof item.hidden === 'boolean') return item.hidden\n if (typeof item.hidden === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hidden.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hidden(unref(model))\n }\n\n // 依赖model的情况,为了确保响应式更新,暂时直接执行函数而不使用缓存\n // TODO: 优化缓存策略以确保响应式更新\n try {\n return item.hidden(unref(model))\n } catch (error) {\n console.warn(`Hidden function execution error for prop ${item.prop}:`, error)\n return false\n }\n\n // 原有的智能缓存逻辑(暂时注释)\n // const config: SmartCacheConfig = {\n // prefix: 'hidden',\n // prop: item.prop\n // }\n // return withSmartCache(item.hidden, config, model, performanceCache)\n }\n return false\n }\n\n // 处理 hiddenInView 查看模式下的显隐逻辑\n const getIsHiddenInView = (item: ZnFormV2SchemaProps) => {\n // 只在查看模式下生效\n if (!props.isView) return false\n\n if (typeof item.hiddenInView === 'boolean') return item.hiddenInView\n if (typeof item.hiddenInView === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hiddenInView.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hiddenInView(unref(model))\n }\n\n // 依赖model的情况,为了确保响应式更新,暂时直接执行函数而不使用缓存\n try {\n return item.hiddenInView(unref(model))\n } catch (error) {\n console.warn(`HiddenInView function execution error for prop ${item.prop}:`, error)\n return false\n }\n\n // 原有的智能缓存逻辑(暂时注释)\n // const config: SmartCacheConfig = {\n // prefix: 'hiddenInView',\n // prop: item.prop\n // }\n // return withSmartCache(item.hiddenInView, config, model, performanceCache, { isView: props.isView })\n }\n return false\n }\n\n // 处理 hiddenLabel 标签显隐逻辑\n const getIsHiddenLabel = (item: ZnFormV2SchemaProps) => {\n if (typeof item.hiddenLabel === 'boolean') return item.hiddenLabel\n if (typeof item.hiddenLabel === 'function') {\n // 分析函数是否只依赖外部变量(不依赖model)\n const funcStr = item.hiddenLabel.toString()\n const dependsOnModel = funcStr.includes('model.') || funcStr.includes('formData.')\n\n if (!dependsOnModel) {\n // 如果不依赖model,直接执行函数,不使用缓存\n return item.hiddenLabel(unref(model))\n }\n\n // 依赖model的情况,使用智能缓存\n const config: SmartCacheConfig = {\n prefix: 'hiddenLabel',\n prop: item.prop\n }\n\n return withSmartCache(item.hiddenLabel, config, model, performanceCache)\n }\n return false\n }\n\n // 处理 destroy 销毁逻辑\n const getIsDestroyed = (item: ZnFormV2SchemaProps) => {\n if (typeof item.destroy === 'boolean') return item.destroy\n if (typeof item.destroy === 'function') {\n const cacheKey = `destroy_${item.prop}_${modelHasher(unref(model))}`\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = item.destroy(unref(model))\n performanceCache.set(cacheKey, result)\n return result\n }\n return false\n }\n\n // 获取处理后的schema - 使用更精确的缓存策略\n const getProcessedSchema = computed(() => {\n // 如果设置了delayLoad且组件还未准备好,返回空数组避免提前计算\n if (props.delayLoad > 0 && !componentLoadReady.value) {\n return []\n }\n\n const schemaList = unref(getProps).schema || []\n\n // 为了确保hidden/hiddenInView/hiddenLabel函数能正确响应变化,\n // 我们需要在缓存key中包含相关信息\n const modelForHidden = JSON.stringify(unref(model))\n\n // 计算当前所有hidden状态,这样外部变量变化时缓存会失效\n const currentHiddenStates = schemaList.map(item => ({\n prop: item.prop,\n hidden: getIsHidden(item),\n hiddenInView: getIsHiddenInView(item),\n hiddenLabel: getIsHiddenLabel(item)\n }))\n\n const schemaHash = schemaList\n .map((item) => `${item.prop}_${item.el}_${!!item.render}_${!!item.renderInView}_${!!item.hidden}_${!!item.hiddenInView}_${!!item.hiddenLabel}`)\n .join('|')\n const hiddenStatesHash = JSON.stringify(currentHiddenStates)\n const cacheKey = `processedSchema_${schemaHash}_${modelForHidden}_${hiddenStatesHash}`\n\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n // 统一处理逻辑\n const processSchema = (items: any[]) => {\n return items\n .filter((item) => !getIsDestroyed(item))\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map((item, index) => {\n // 直接使用已经计算好的hidden状态\n const hiddenState = currentHiddenStates.find(state => state.prop === item.prop)\n return {\n ...item,\n renderPriority: item.renderPriority || 0,\n enableAsyncRender: item.enableAsyncRender !== false,\n _index: index,\n _hidden: hiddenState?.hidden || false,\n _hiddenInView: hiddenState?.hiddenInView || false,\n _hiddenLabel: hiddenState?.hiddenLabel || false\n }\n })\n }\n\n const result = processSchema(schemaList)\n\n // 缓存结果,但限制缓存大小避免内存泄漏\n const cacheStats = performanceCache.getStats()\n if (cacheStats.size > 100) {\n // 清理部分旧缓存\n const allKeys: string[] = []\n performanceCache['cache'].forEach((_, key) => {\n if (typeof key === 'string' && key.startsWith('processedSchema_')) {\n allKeys.push(key)\n }\n })\n if (allKeys.length > 10) {\n // 删除最旧的5个processedSchema缓存\n allKeys.slice(0, 5).forEach(key => performanceCache.delete(key))\n }\n }\n\n performanceCache.set(cacheKey, result)\n\n return result\n })\n\n // 获取可见的表单项\n const getVisibleSchema = computed(() => {\n const items = getProcessedSchema.value\n if (!items.length) return []\n\n // 使用新的懒加载判断逻辑\n if (shouldUseLazyLoad.value || items.length > props.maxSyncRenderCount) {\n const rendered = Array.from(renderedItems.value)\n // 懒加载时也不过滤hidden项目,只过滤渲染状态\n return items.filter((item, index) => rendered.includes(item.prop) || index < props.initialLoadCount)\n }\n\n // 不过滤hidden项目,让v-show来控制显示隐藏\n return items\n })\n\n // 表单组件渲染逻辑 - 优化懒加载场景的缓存策略\n const RenderFormWrap = markRaw(\n defineComponent({\n name: 'RenderFormWrap',\n setup() {\n const slots = useSlots()\n\n // 缓存渲染结果 - 为懒加载优化\n const renderCache = new Map<string, any>()\n\n // 为懒加载场景设计的增量缓存策略\n const getIncrementalCacheKey = (schemaList: any[]) => {\n // 对于懒加载,我们基于已渲染的项目生成缓存key,而不是所有可见项目\n const { useCol } = unref(getProps)\n const baseKey = `${props.isView}_${shouldUseLazyLoad.value}_${useCol}`\n\n if (shouldUseLazyLoad.value) {\n // 懒加载模式:需要包含渲染状态和hidden状态\n const renderedProps = Array.from(renderedItems.value).sort()\n const hiddenHash = schemaList.map((item) => `${item.prop}:${item._hidden}:${item._hiddenInView}`).join('|')\n return `lazy_${baseKey}_${renderedProps.join('|')}_${hiddenHash}`\n } else {\n // 非懒加载模式:使用完整的schema hash\n const schemaHash = schemaList.map((item) => `${item.prop}_${item._hidden}_${item._hiddenInView}_${item._index}`).join('|')\n return `full_${baseKey}_${schemaHash}`\n }\n }\n\n return () => {\n const { useCol, rowProps, onlyRenderComponent, elFormProps } = unref(getProps)\n const schemaList = getVisibleSchema.value\n\n // 使用增量缓存策略\n const cacheKey = getIncrementalCacheKey(schemaList)\n\n // 如果缓存存在,直接返回\n if (renderCache.has(cacheKey)) {\n return renderCache.get(cacheKey)\n }\n\n let result: any\n\n if (onlyRenderComponent) {\n result = schemaList.map((item, index) => {\n const shouldShow = !item._hidden && !item._hiddenInView\n\n return (\n <div key={`${item.prop}_${index}`} v-show={shouldShow}>\n <ZnFormV2Item\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </div>\n )\n })\n } else {\n result = (\n <ElForm ref={elFormRef} model={model.value} class={[prefixClass, { 'is-view': props.isView }]} {...elFormProps}>\n {useCol ? renderWithCol(schemaList) : renderWithoutCol(schemaList)}\n </ElForm>\n )\n }\n\n // 智能缓存管理:懒加载模式下保留更多缓存项\n const maxCacheSize = shouldUseLazyLoad.value ? 20 : 5\n if (renderCache.size >= maxCacheSize) {\n // 清理最老的缓存项\n const firstKey = renderCache.keys().next().value\n renderCache.delete(firstKey)\n }\n\n renderCache.set(cacheKey, result)\n\n return result\n }\n }\n })\n )\n\n // 合并传入进来的栅格属性(与原版 ZnForm 保持一致)\n const setGridProp = (col: any = {}) => {\n return {\n // 如果有 span,代表用户优先级更高,所以不需要默认栅格\n ...(col.span ? {} : { xs: 24, sm: 12, md: 12, lg: 12, xl: 12 }),\n ...col\n }\n }\n\n // 渲染有栅格的表单\n const renderWithCol = (schemaList: ZnFormV2SchemaProps[]) => {\n const { rowProps } = unref(getProps)\n\n return (\n <ElRow gutter={20} {...rowProps}>\n {schemaList.map((item, index) => {\n const colProps = setGridProp({ ...rowProps?.col, ...item.col })\n const shouldShow = !item._hidden && !item._hiddenInView\n\n return (\n <ElCol key={`${item.prop}_${index}`} {...colProps} v-show={shouldShow}>\n {item._hiddenLabel ? (\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n ) : (\n <ElFormItem\n prop={item.prop}\n label={typeof item.label === 'function' ? item.label(model.value) : item.label}\n style={item.width ? { width: getPx(item.width) } : {}}\n ref={(ref: any) => {\n if (ref && componentRefsCollector) {\n componentRefsCollector.setFormItemRef(item.prop, ref)\n }\n }}\n {...(props.isView && props.disableRulesInView ? { ...item.formItem, rules: null } : item.formItem)}>\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </ElFormItem>\n )}\n </ElCol>\n )\n })}\n </ElRow>\n )\n }\n\n // 渲染无栅格的表单\n const renderWithoutCol = (schemaList: ZnFormV2SchemaProps[]) => {\n return schemaList.map((item, index) => {\n const shouldShow = !item._hidden && !item._hiddenInView\n\n return item._hiddenLabel ? (\n <div key={`${item.prop}_${index}`} v-show={shouldShow}>\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </div>\n ) : (\n <ElFormItem\n key={`${item.prop}_${index}`}\n prop={item.prop}\n label={typeof item.label === 'function' ? item.label(model.value) : item.label}\n style={item.width ? { width: getPx(item.width) } : {}}\n v-show={shouldShow}\n ref={(ref: any) => {\n if (ref && componentRefsCollector) {\n componentRefsCollector.setFormItemRef(item.prop, ref)\n }\n }}\n {...(props.isView && props.disableRulesInView ? { ...item.formItem, rules: null } : item.formItem)}>\n <ZnFormV2Item\n key={`${item.prop}_${item._index}`}\n column={item}\n v-model={model.value}\n isView={props.isView}\n isLazyLoading={shouldUseLazyLoad.value}\n isReady={renderedItems.value.has(item.prop)}\n />\n </ElFormItem>\n )\n })\n }\n\n // 懒加载相关逻辑\n const initializeLazyLoading = () => {\n if (!shouldUseLazyLoad.value) return\n\n const schemaList = getProcessedSchema.value\n\n // 初始渲染指定数量的表单项\n for (let i = 0; i < Math.min(props.initialLoadCount, schemaList.length); i++) {\n renderedItems.value.add(schemaList[i].prop)\n }\n\n // 设置剩余项目为待渲染\n pendingItems.value = schemaList.slice(props.initialLoadCount)\n\n if (pendingItems.value.length > 0) {\n startBatchRendering()\n }\n }\n\n // 逐个渲染(优化版)- 每个组件准备好就立即显示\n const startBatchRendering = () => {\n if (pendingItems.value.length === 0) {\n isRendering.value = false\n return\n }\n\n isRendering.value = true\n\n const renderNext = () => {\n if (pendingItems.value.length === 0) {\n isRendering.value = false\n return\n }\n\n const startTime = performance.now()\n // 每次只渲染一个组件,实现真正的逐个显示\n const item = pendingItems.value.shift()\n\n if (item) {\n // 立即添加到已渲染列表,触发UI更新\n renderedItems.value.add(item.prop)\n\n // 记录渲染时间\n componentLoadTimes.value.push({\n prop: item.prop,\n time: startTime\n })\n\n // 更新性能统计\n performanceStats.value.componentCount = renderedItems.value.size\n performanceStats.value.renderTime = performance.now() - startTime\n performanceStats.value.queueLength = pendingItems.value.length\n\n if (props.enablePerformanceMonitoring) {\n emit('onPerformanceUpdate', performanceStats.value)\n }\n }\n\n // 继续渲染下一个组件,使用较短的延迟以实现流畅的逐个显示\n if (pendingItems.value.length > 0) {\n // 使用 requestAnimationFrame 或较短的 timeout 来实现更流畅的渲染\n if (props.lazyLoadDelay <= 16) {\n requestAnimationFrame(renderNext)\n } else {\n setTimeout(renderNext, props.lazyLoadDelay)\n }\n } else {\n isRendering.value = false\n }\n }\n\n // 延迟开始渲染\n setTimeout(renderNext, props.delayLoad)\n }\n\n // 处理表单项初始化\n const handleSchemaInit = () => {\n const schemaList = unref(getProps).schema || []\n\n schemaList.forEach(async (item) => {\n // 处理枚举数据\n if (item.enum) {\n await setEnumMap(item)\n }\n\n // 处理级联下拉\n if (item.subProp && item.subEnum) {\n cascadeEnum(item)\n }\n\n // 初始化默认值\n if (item.defaultValue !== undefined) {\n debouncer(`init_${item.prop}`, () => initDefaultValue(item), 50)\n }\n })\n }\n\n // 检测schema结构性变化(只检查影响渲染的关键属性)\n const hasStructuralChanges = (newSchema: ZnFormV2SchemaProps[], oldSchema: ZnFormV2SchemaProps[]) => {\n if (!oldSchema || oldSchema.length !== newSchema.length) return true\n\n // 检查关键结构属性是否变化\n for (let i = 0; i < newSchema.length; i++) {\n const newItem = newSchema[i]\n const oldItem = oldSchema[i]\n\n if (!oldItem || newItem.prop !== oldItem.prop || newItem.el !== oldItem.el || newItem.destroy !== oldItem.destroy || newItem.order !== oldItem.order) {\n return true\n }\n }\n\n return false\n }\n\n // 监听schema变化\n watch(\n () => unref(getProps).schema,\n (newSchema, oldSchema) => {\n if (props.delayLoad > 0 && !componentLoadReady.value) {\n return\n }\n\n if (!isInitialized.value && !oldSchema) {\n return\n }\n\n if (newSchema?.length) {\n // 检查是否有结构性变化\n const hasStructuralChange = hasStructuralChanges(newSchema, oldSchema || [])\n\n // 只有在以下情况才重置渲染状态(避免表单闪烁):\n // 1. 初次渲染(oldSchema为空)\n // 2. schema结构发生变化\n // 3. 启用了懒加载且需要重新计算渲染列表\n const shouldResetRenderState =\n !oldSchema || hasStructuralChange || (props.lazyLoad && hasStructuralChange) || (newSchema.length > props.maxSyncRenderCount && hasStructuralChange)\n\n if (shouldResetRenderState) {\n // 只有在需要重置渲染状态时才处理schema初始化\n handleSchemaInit()\n\n // 智能重置:只有在真正需要时才清空已渲染项\n if (hasStructuralChange) {\n renderedItems.value.clear()\n }\n\n pendingItems.value = []\n componentLoadTimes.value = []\n\n nextTick(() => {\n initializeLazyLoading()\n })\n }\n }\n },\n { immediate: false, deep: true }\n )\n\n // 监听enum变化 - 优化版本,避免不必要的重新渲染\n watch(\n () =>\n unref(getProps).schema?.map((item) => ({\n prop: item.prop,\n enum: item.enum,\n dictCode: item.dictCode\n })),\n (newEnums, oldEnums) => {\n if (!newEnums || !oldEnums || newEnums.length !== oldEnums.length) return\n\n // 找出发生变化的enum项,只更新对应的枚举数据\n let hasEnumChanges = false\n const changedProps: string[] = []\n\n newEnums.forEach((newItem, index) => {\n const oldItem = oldEnums[index]\n if (newItem.enum !== oldItem?.enum || newItem.dictCode !== oldItem?.dictCode) {\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === newItem.prop)\n if (schemaItem) {\n hasEnumChanges = true\n changedProps.push(newItem.prop)\n\n // 异步更新枚举,避免阻塞主线程\n nextTick(() => {\n setEnumMap(schemaItem)\n })\n }\n }\n })\n\n // 只清除与变化的enum相关的缓存,而不是清除所有缓存\n if (hasEnumChanges) {\n // 使用防抖避免频繁清除缓存\n debouncer(\n 'enum_change',\n () => {\n // 只清除与变化的props相关的缓存,但不清除processedSchema缓存\n // 因为enum变化不影响schema结构,不需要重新渲染所有组件\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n // 不清除 processedSchema_ 缓存,只清除与具体字段相关的缓存\n if (!key.startsWith('processedSchema_') && changedProps.some((prop) => key.includes(prop))) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n },\n 100\n ) // 使用较长的防抖时间避免频繁操作\n }\n },\n { deep: true }\n )\n\n // 监听 isView 和 hidden 相关属性变化,清除相关缓存\n watch(\n [\n () => props.isView,\n () =>\n unref(getProps).schema?.map((item) => ({\n prop: item.prop,\n hidden: item.hidden,\n hiddenInView: item.hiddenInView,\n hiddenLabel: item.hiddenLabel\n }))\n ],\n (newValues, oldValues) => {\n if (!oldValues) return\n\n const [newIsView, newHiddenProps] = newValues\n const [oldIsView, oldHiddenProps] = oldValues\n\n // 检查是否有实际变化\n let hasChanges = newIsView !== oldIsView\n\n if (!hasChanges && newHiddenProps && oldHiddenProps) {\n // 检查 hidden 相关属性是否有变化\n hasChanges = newHiddenProps.some((newItem, index) => {\n const oldItem = oldHiddenProps[index]\n return !oldItem || newItem.hidden !== oldItem.hidden || newItem.hiddenInView !== oldItem.hiddenInView || newItem.hiddenLabel !== oldItem.hiddenLabel\n })\n }\n\n if (hasChanges) {\n // 使用防抖避免频繁清除缓存\n debouncer(\n 'view_hidden_change',\n () => {\n // 只清除与显示/隐藏相关的缓存\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n if (key.startsWith('processedSchema_') || key.includes('_hidden_') || key.includes('_view_')) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n },\n 50\n )\n }\n },\n { deep: true }\n )\n\n // 获取可见的表单项prop列表\n const getVisibleFormProps = () => {\n const schemaList = getProcessedSchema.value\n const visibleProps = schemaList.filter((item) => !item._hidden && !item._hiddenInView).map((item) => item.prop)\n\n // 添加调试信息\n if (process.env.NODE_ENV === 'development') {\n console.log('🔍 ZnFormV2 getVisibleFormProps 调试信息:', {\n allSchemaItems: schemaList.map(item => ({\n prop: item.prop,\n _hidden: item._hidden,\n _hiddenInView: item._hiddenInView,\n 原始hidden: typeof item.hidden === 'function' ? '函数' : item.hidden,\n 计算结果: item._hidden ? '隐藏' : '显示'\n })),\n visibleProps,\n 当前model: unref(model)\n })\n }\n\n return visibleProps\n }\n\n // 暴露方法\n const validate = (callback?: (valid: boolean, invalidFields?: any) => void) => {\n if (!elFormRef.value) {\n callback?.(true)\n return Promise.resolve(true)\n }\n\n // 如果没有传递回调函数,使用Promise方式\n if (!callback) {\n return new Promise((resolve, reject) => {\n elFormRef.value?.validate((valid, invalidFields) => {\n if (valid) {\n resolve(true)\n } else {\n // 根据配置决定是否过滤隐藏表单项的验证错误\n if (props.excludeHiddenFieldsValidation) {\n const visibleProps = getVisibleFormProps()\n const filteredInvalidFields: any = {}\n\n if (invalidFields) {\n Object.keys(invalidFields).forEach((prop) => {\n if (visibleProps.includes(prop)) {\n filteredInvalidFields[prop] = invalidFields[prop]\n }\n })\n }\n\n // 添加调试信息\n if (process.env.NODE_ENV === 'development') {\n console.log('🔍 ZnFormV2 validate 隐藏字段过滤调试:', {\n excludeHiddenFieldsValidation: props.excludeHiddenFieldsValidation,\n visibleProps,\n originalInvalidFields: invalidFields,\n filteredInvalidFields,\n 被过滤掉的隐藏字段: invalidFields ? Object.keys(invalidFields).filter(prop => !visibleProps.includes(prop)) : []\n })\n }\n\n // 如果过滤后没有错误,则认为验证通过\n const hasVisibleErrors = Object.keys(filteredInvalidFields).length > 0\n if (hasVisibleErrors) {\n reject(filteredInvalidFields)\n } else {\n resolve(true)\n }\n } else {\n // 不过滤隐藏字段,直接返回原始验证结果\n reject(invalidFields)\n }\n }\n })\n })\n }\n\n // 使用回调函数方式\n elFormRef.value.validate((valid, invalidFields) => {\n if (valid) {\n callback(true)\n } else {\n // 根据配置决定是否过滤隐藏表单项的验证错误\n if (props.excludeHiddenFieldsValidation) {\n const visibleProps = getVisibleFormProps()\n const filteredInvalidFields: any = {}\n\n if (invalidFields) {\n Object.keys(invalidFields).forEach((prop) => {\n if (visibleProps.includes(prop)) {\n filteredInvalidFields[prop] = invalidFields[prop]\n }\n })\n }\n\n // 添加调试信息(回调版本)\n if (process.env.NODE_ENV === 'development') {\n console.log('🔍 ZnFormV2 validate (callback) 隐藏字段过滤调试:', {\n excludeHiddenFieldsValidation: props.excludeHiddenFieldsValidation,\n visibleProps,\n originalInvalidFields: invalidFields,\n filteredInvalidFields,\n 被过滤掉的隐藏字段: invalidFields ? Object.keys(invalidFields).filter(prop => !visibleProps.includes(prop)) : []\n })\n }\n\n // 如果过滤后没有错误,则认为验证通过\n const hasVisibleErrors = Object.keys(filteredInvalidFields).length > 0\n callback(!hasVisibleErrors, hasVisibleErrors ? filteredInvalidFields : undefined)\n } else {\n // 不过滤隐藏字段,直接返回原始验证结果\n callback(false, invalidFields)\n }\n }\n })\n }\n\n const validateField = (props: FormItemProp, callback?: (errorMessage: string) => void) => {\n // 根据配置决定是否过滤隐藏字段\n if (getProps.value.excludeHiddenFieldsValidation) {\n // 检查要验证的字段是否可见\n const visibleProps = getVisibleFormProps()\n const propsArray = Array.isArray(props) ? props : [props]\n\n // 过滤掉隐藏的字段\n const visiblePropsToValidate = propsArray.filter((prop) => visibleProps.includes(prop as string))\n\n // 如果没有可见的字段需要验证,直接返回成功\n if (visiblePropsToValidate.length === 0) {\n callback?.('')\n return Promise.resolve('')\n }\n\n // 验证可见的字段\n const finalProps = visiblePropsToValidate.length === 1 ? visiblePropsToValidate[0] : visiblePropsToValidate\n return elFormRef.value?.validateField(finalProps as FormItemProp, callback)\n } else {\n // 不过滤隐藏字段,直接验证所有字段\n return elFormRef.value?.validateField(props, callback)\n }\n }\n\n const resetFields = () => {\n elFormRef.value?.resetFields()\n }\n\n const resetForm = () => {\n // 重置表单数据\n Object.keys(model.value).forEach((key) => {\n delete model.value[key]\n })\n\n // 重置验证状态\n elFormRef.value?.clearValidate()\n\n // 触发表单初始化,重新设置默认值\n nextTick(() => {\n handleSchemaInit()\n })\n }\n\n const clearValidate = (props?: FormItemProp) => {\n elFormRef.value?.clearValidate(props)\n }\n\n const scrollToField = (prop: FormItemProp) => {\n elFormRef.value?.scrollToField(prop)\n }\n\n // 注册表单方法\n const registerMethods = {\n validate,\n validateField,\n resetFields,\n resetForm,\n clearValidate,\n scrollToField,\n setEnumMap,\n initDefaultValue,\n clearCache\n }\n\n // 组件挂载后初始化\n onMounted(() => {\n // delayLoad期间显示骨架屏,避免阻塞主线程\n if (props.delayLoad > 0) {\n // 在delayLoad期间完全不做任何操作,避免阻塞主线程\n setTimeout(() => {\n showComponentSkeleton.value = false\n componentLoadReady.value = true\n\n // 延迟初始化完成后,主动触发schema处理\n const schema = unref(getProps).schema\n if (schema?.length) {\n handleSchemaInit()\n\n if (shouldUseLazyLoad.value) {\n initializeLazyLoading()\n }\n }\n\n // 标记为已初始化\n isInitialized.value = true\n emit('register', extendedRegisterMethods)\n }, props.delayLoad)\n } else {\n // 无延迟,立即初始化\n showComponentSkeleton.value = false\n componentLoadReady.value = true\n\n // 立即处理schema\n const schema = unref(getProps).schema\n if (schema?.length) {\n handleSchemaInit()\n\n if (shouldUseLazyLoad.value) {\n initializeLazyLoading()\n }\n }\n\n // 标记为已初始化\n isInitialized.value = true\n emit('register', extendedRegisterMethods)\n }\n\n // 启动性能监控定时器\n if (props.enablePerformanceMonitoring) {\n loadingTimer.value = setInterval(() => {\n performanceStats.value.cacheStats = performanceCache.getStats()\n emit('onPerformanceUpdate', performanceStats.value)\n }, props.performanceConfig.reportInterval || 2000) as any\n }\n })\n\n // 组件卸载前清理\n onBeforeUnmount(() => {\n cleanup()\n })\n\n // 新增方法实现\n const setProps = (newProps: Partial<ZnFormV2Props>) => {\n Object.assign(mergeProps.value, newProps)\n if (newProps.modelValue) {\n Object.assign(model.value, newProps.modelValue)\n }\n }\n\n const setValues = (data: Record<string, any>) => {\n Object.assign(model.value, data)\n }\n\n const setSchema = (config: FormSetProps) => {\n const { prop, field, value } = config\n const currentSchema = [...(unref(getProps).schema || [])]\n\n if (field === 'schema') {\n // 直接设置整个 schema\n mergeProps.value.schema = value as ZnFormV2SchemaProps[]\n } else {\n // 修改特定字段的特定属性\n const targetItem = currentSchema.find((item) => item.prop === prop)\n if (targetItem) {\n ;(targetItem as any)[field] = value\n // 更新整个 schema 以触发响应式更新\n mergeProps.value.schema = currentSchema\n }\n }\n }\n\n const addSchema = (formSchema: ZnFormV2SchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const currentSchema = [...(unref(getProps).schema || [])]\n\n if (typeof prop === 'number') {\n // 按索引插入\n currentSchema.splice(prop, 0, formSchema)\n } else if (typeof prop === 'string') {\n // 按 prop 名称查找位置插入\n const index = currentSchema.findIndex((item) => item.prop === prop)\n if (index !== -1) {\n const insertIndex = position === 'before' ? index : index + 1\n currentSchema.splice(insertIndex, 0, formSchema)\n } else {\n currentSchema.push(formSchema)\n }\n } else {\n // 添加到末尾\n currentSchema.push(formSchema)\n }\n\n mergeProps.value.schema = currentSchema\n }\n\n const delSchema = (prop: string) => {\n const currentSchema = unref(getProps).schema || []\n const newSchema = currentSchema.filter((item) => item.prop !== prop)\n mergeProps.value.schema = newSchema\n }\n\n const getFormData = <T = Record<string, any>,>(filterEmptyVal = true): T => {\n const formData = model.value\n\n if (filterEmptyVal) {\n // 过滤空值\n return Object.keys(formData).reduce((prev, next) => {\n const value = formData[next]\n if (value !== '' && value !== null && value !== undefined) {\n if (typeof value === 'object' && value !== null) {\n if (Object.keys(value).length > 0) prev[next] = value\n } else prev[next] = value\n }\n return prev\n }, {}) as T\n }\n\n return formData as T\n }\n\n // 表单项实例存储\n const formItemRefs = ref(new Map<string, any>())\n const componentRefs = ref(new Map<string, any>())\n\n const getComponentExpose = (prop: string) => {\n return componentRefs.value.get(prop) || null\n }\n\n const getFormItemExpose = (prop: string) => {\n return formItemRefs.value.get(prop) || null\n }\n\n const getSchema = () => {\n return unref(getProps).schema || []\n }\n\n /**\n * 手动刷新指定prop的表单项\n * @param prop 要刷新的表单项prop\n * @param options 刷新选项\n */\n const refreshFormItem = async (\n prop: string,\n options?: {\n /** 是否重新初始化枚举数据 */\n refreshEnum?: boolean\n /** 是否重新设置默认值 */\n refreshDefaultValue?: boolean\n /** 是否清除验证状态 */\n clearValidate?: boolean\n }\n ) => {\n const { refreshEnum = true, refreshDefaultValue = false, clearValidate = true } = options || {}\n\n // 1. 查找对应的schema项\n const schemaItem = unref(getProps).schema?.find((item) => item.prop === prop)\n if (!schemaItem) {\n console.warn(`未找到prop为 \"${prop}\" 的表单项`)\n return\n }\n\n // 2. 清除与该prop相关的所有缓存\n const keysToDelete: string[] = []\n performanceCache.cache?.forEach((value, key) => {\n if (key.includes(prop)) {\n keysToDelete.push(key)\n }\n })\n keysToDelete.forEach((key) => performanceCache.delete(key))\n\n // 3. 清除依赖追踪缓存\n renderDependencyTracker.clearDependencies(prop)\n\n // 4. 清除智能缓存中与该prop相关的缓存\n clearRelatedCache(performanceCache, 'hidden', [prop])\n clearRelatedCache(performanceCache, 'hiddenInView', [prop])\n clearRelatedCache(performanceCache, 'hiddenLabel', [prop])\n\n // 5. 重新初始化枚举数据\n if (refreshEnum && schemaItem.enum) {\n try {\n await setEnumMap(schemaItem)\n } catch (error) {\n console.error(`刷新prop \"${prop}\" 的枚举数据失败:`, error)\n }\n }\n\n // 6. 重新设置默认值\n if (refreshDefaultValue && schemaItem.defaultValue !== undefined) {\n try {\n await initDefaultValue(schemaItem)\n } catch (error) {\n console.error(`刷新prop \"${prop}\" 的默认值失败:`, error)\n }\n }\n\n // 7. 清除验证状态\n if (clearValidate) {\n elFormRef.value?.clearValidate(prop)\n }\n\n // 8. 如果是懒加载模式,重新标记该项为需要渲染\n if (shouldUseLazyLoad.value) {\n // 移除已渲染标记,强制重新渲染\n renderedItems.value.delete(prop)\n\n // 将该项重新加入渲染队列\n const schemaList = getProcessedSchema.value\n const targetItem = schemaList.find((item) => item.prop === prop)\n if (targetItem && !pendingItems.value.some((item) => item.prop === prop)) {\n // 插入到队列开头,优先渲染\n pendingItems.value.unshift(targetItem)\n\n // 如果当前没有在渲染,立即开始渲染\n if (!isRendering.value) {\n nextTick(() => {\n startBatchRendering()\n })\n }\n }\n }\n\n // 9. 强制触发重新渲染\n await nextTick()\n\n console.log(`已刷新表单项: ${prop}`)\n }\n\n // 更新注册方法\n const extendedRegisterMethods = {\n ...registerMethods,\n setProps,\n setValues,\n setSchema,\n addSchema,\n delSchema,\n getFormData,\n getComponentExpose,\n getFormItemExpose,\n getSchema,\n refreshFormItem,\n model: model.value\n }\n\n // 暴露API\n defineExpose({\n ...extendedRegisterMethods,\n form: elFormRef,\n enumMap,\n model: model.value\n })\n\n // 自动决定是否启用懒加载 - 默认启用,当作大组件处理\n const shouldUseLazyLoad = computed(() => {\n const schemaLength = unref(getProps).schema?.length || 0\n const userLazyLoad = props.lazyLoad\n\n // 如果用户明确设置lazy-load为false,则禁用懒加载\n if (userLazyLoad === false) {\n return false\n }\n\n // 默认情况下启用懒加载,把所有表单都当作大组件处理\n if (userLazyLoad === true) {\n return true\n }\n\n // 对于非常小的表单(少于5个表单项且无自定义render),可以考虑同步渲染\n if (schemaLength < 5) {\n const renderFunctionCount = unref(getProps).schema?.filter((item) => item.render || item.renderInView)?.length || 0\n if (renderFunctionCount === 0) {\n return false\n }\n }\n\n // 其他情况默认启用懒加载\n return true\n })\n</script>\n"],"names":["_isSlot","s","_isVNode","Object","prototype","toString","call","prefixClass","PERFORMANCE_CONFIG","PerformanceCache","__name","this","cache","Map","timers","hitCount","missCount","has","key","item","get","Date","now","timestamp","delete","value","undefined","set","size","firstKey","keys","next","clearTimeout","timer","setTimeout","clear","forEach","getStats","hitRate","createDebouncer","fn","delay","createModelHasher","lastModel","lastHash","lastStringified","model","stringified","JSON","stringify","sort","hash","i","length","charCodeAt","finalHash","props","__props","emit","__emit","_useModel","elFormRef","shallowRef","mergeProps","ref","getProps","computed","propsObj","assign","unref","enumMap","enumMapProps","renderedItems","Set","pendingItems","componentLoadReady","showComponentSkeleton","delayLoad","loadingTimer","componentLoadTimes","performanceCache","debouncer","modelHasher","performanceStats","renderTime","componentCount","cacheHitRate","queueLength","cacheStats","isRendering","isInitialized","clearCache","cleanup","getCurrentInstance","clearInterval","setEnumMap","async","enum","enumValue","prop","cacheEnum","enumMapConst","data","result","Array","isArray","console","warn","nextTick","schemaItem","schema","find","initDefaultValue","error","provide","formEnumMapKey","componentRefsCollector","setComponentRef","setFormItemRef","renderDependencyTracker","dependencies","renderAccess","currentTrackingRender","startTracking","stopTracking","trackFieldAccess","accessedField","add","getAffectedRenders","changedField","clearDependencies","field","dependents","createTrackedModel","originalModel","Proxy","target","defaultValue","fieldNames","formConst","getFormProp","defaultValueConst","setFormProp","enumData","filter","isDefault","cascadeEnum","el","subProp","subEnum","hyphenToCamelCase","ComponentNameEnum","EL_SELECT","watch","newVal","subEnumData","formEnum","subValue","immediate","getIsHidden","hidden","funcStr","includes","getIsHiddenInView","isView","hiddenInView","getIsHiddenLabel","hiddenLabel","config","prefix","withSmartCache","getIsDestroyed","destroy","cacheKey","getProcessedSchema","schemaList","modelForHidden","currentHiddenStates","map","render","renderInView","join","items","a","b","order","index","hiddenState","state","renderPriority","enableAsyncRender","_index","_hidden","_hiddenInView","_hiddenLabel","processSchema","allKeys","_","startsWith","push","slice","getVisibleSchema","shouldUseLazyLoad","maxSyncRenderCount","rendered","from","initialLoadCount","RenderFormWrap","markRaw","defineComponent","name","setup","useSlots","renderCache","getIncrementalCacheKey","useCol","baseKey","renderedProps","hiddenHash","rowProps","onlyRenderComponent","elFormProps","shouldShow","_withDirectives2","_createVNode2","ZnFormV2Item","column","modelValue","$event","isLazyLoading","isReady","_vShow2","ElForm","_mergeProps","class","default","renderWithCol","renderWithoutCol","maxCacheSize","setGridProp","col","span","xs","sm","md","lg","xl","_slot","ElRow","gutter","colProps","ElCol","ElFormItem","label","style","width","getPx","disableRulesInView","formItem","rules","initializeLazyLoading","Math","min","startBatchRendering","renderNext","startTime","performance","shift","time","enablePerformanceMonitoring","lazyLoadDelay","requestAnimationFrame","handleSchemaInit","hasStructuralChanges","newSchema","oldSchema","newItem","oldItem","hasStructuralChange","lazyLoad","deep","dictCode","newEnums","oldEnums","hasEnumChanges","changedProps","keysToDelete","some","newValues","oldValues","newIsView","newHiddenProps","oldIsView","oldHiddenProps","hasChanges","getVisibleFormProps","visibleProps","process","env","NODE_ENV","log","allSchemaItems","原始hidden","计算结果","当前model","registerMethods","validate","callback","valid","invalidFields","excludeHiddenFieldsValidation","filteredInvalidFields","originalInvalidFields","被过滤掉的隐藏字段","hasVisibleErrors","Promise","resolve","reject","validateField","visiblePropsToValidate","finalProps","resetFields","resetForm","clearValidate","scrollToField","onMounted","extendedRegisterMethods","setInterval","performanceConfig","reportInterval","onBeforeUnmount","setProps","newProps","setValues","setSchema","currentSchema","targetItem","addSchema","formSchema","position","splice","findIndex","insertIndex","delSchema","getFormData","filterEmptyVal","formData","reduce","prev","formItemRefs","componentRefs","getComponentExpose","getFormItemExpose","getSchema","refreshFormItem","options","refreshEnum","refreshDefaultValue","clearRelatedCache","unshift","__expose","form","schemaLength","userLazyLoad"],"mappings":"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"}