znyg-frontend-common 1.0.87 → 1.0.89
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.
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue2.mjs +4 -4
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue2.mjs.map +1 -1
- package/es/components/znFormV2/src/components/useRenderCheckbox.mjs +1 -1
- package/es/components/znFormV2/src/components/useRenderCheckbox.mjs.map +1 -1
- package/es/components/znFormV2/src/components/useRenderRadio.mjs +1 -1
- package/es/components/znFormV2/src/components/useRenderRadio.mjs.map +1 -1
- package/es/components/znFormV2/src/components/useRenderSelect.mjs +1 -1
- package/es/components/znFormV2/src/components/useRenderSelect.mjs.map +1 -1
- package/es/components/znFormV2/src/index.vue2.mjs +6 -6
- package/es/components/znFormV2/src/index.vue2.mjs.map +1 -1
- package/es/index.mjs +1 -1
- package/es/index.mjs.map +1 -1
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue2.js +4 -4
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue2.js.map +1 -1
- package/lib/components/znFormV2/src/components/useRenderCheckbox.js +1 -1
- package/lib/components/znFormV2/src/components/useRenderCheckbox.js.map +1 -1
- package/lib/components/znFormV2/src/components/useRenderRadio.js +1 -1
- package/lib/components/znFormV2/src/components/useRenderRadio.js.map +1 -1
- package/lib/components/znFormV2/src/components/useRenderSelect.js +1 -1
- package/lib/components/znFormV2/src/components/useRenderSelect.js.map +1 -1
- package/lib/components/znFormV2/src/index.vue2.js +7 -7
- package/lib/components/znFormV2/src/index.vue2.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/theme-default/index.css +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{defineComponent as e,useModel as l,computed as n,inject as o,ref as r,unref as t,markRaw as a,createVNode as
|
|
1
|
+
import{defineComponent as e,useModel as l,computed as n,inject as o,ref as r,unref as t,markRaw as a,createVNode as u,createTextVNode as s,resolveComponent as i,h as m,createElementBlock as c,openBlock as d,Fragment as p,createCommentVNode as f,toDisplayString as y,createElementVNode as E,createBlock as _,normalizeStyle as v,mergeProps as h,mergeModels as L}from"vue";import"./Tree.vue.mjs";import{hyphenToCamelCase as b,getFormProp as g,setFormProp as R}from"../helper/index.mjs";import{getComponent as C}from"../helper/componentMap.mjs";import{formEnumMapKey as V,ComponentNameEnum as w}from"../interface/index.mjs";import{useRenderCheckbox as T}from"./useRenderCheckbox.mjs";import{useRenderComponent as $}from"./useRenderComponent.mjs";import{useRenderRadio as x}from"./useRenderRadio.mjs";import{useRenderSelect as S}from"./useRenderSelect.mjs";import{useLocalStorage as M}from"@vueuse/core";import O from"./Tree.vue2.mjs";var j=Object.defineProperty,D=(e,l)=>j(e,"name",{value:l,configurable:!0});const I={key:1,style:{display:"flex","align-items":"center","min-height":"32px",transition:"opacity 0.3s ease",opacity:"0.6"}},k={style:{display:"flex","align-items":"center",gap:"8px"}},P={style:{color:"#999","font-size":"12px"}};var N=e({name:"ZnFormV2Item",__name:"ZnFormV2Item",props:L({column:{type:Object,required:!0},style:{required:!1},isView:{type:Boolean,skipCheck:!0,required:!1,default:!1},isLazyLoading:{type:Boolean,required:!1,default:!1},isReady:{type:Boolean,required:!1,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(L){const j=L,N=M("znyg",{dictMap:{}}),A=l(L,"modelValue"),U=new Map,Y=n((()=>{const{dictCode:e}=j.column;let l=j.column.fieldNames?.label??"label",n=j.column.fieldNames?.value??"value";return e&&(l="name",n="code"),{label:l,value:n,children:j.column.fieldNames?.children??"children",disabled:j.column.fieldNames?.disabled??"disabled"}})),B=o(V,r(new Map)),q=n((()=>j.column.enum)),z=n((()=>{const{useEnumMap:e,enumKey:l,prop:n,el:o,dictCode:r}=j.column,a=t(B),u=t(q);let s;if(r&&N&&N.value?.dictMap&&(s=N.value.dictMap[r?.toString()]??[]),e)if("function"==typeof e)s=e(a);else{const n=a.get(e);s=n?l?n[l]||[]:n:[]}if(!s)if(Array.isArray(u)&&u.length>0)s=u;else{let e=a.get(n);s=e?b(o)===w.EL_SELECT_V2?e.map((e=>({...e,label:e[t(Y).label],value:e[t(Y).value]}))):l?e[l]||[]:e:[]}return s||[]})),H=n((()=>{const e=t(Y).label,l=t(Y).value,n=t(Y).children,o=b(j.column?.el);let r=j.column.props??{};const a=`formProps_${o}_${JSON.stringify(r)}_${e}_${l}_${n}`;if(U.has(a))return U.get(a);let u={};o===w.EL_TREE_SELECT&&(u={props:{label:e,children:n},nodeKey:l}),o===w.EL_CASCADER&&(u={props:{label:e,value:l,children:n}}),o===w.EL_DATE_PICKER&&(u="datetime"===r.type?{valueFormat:"YYYY-MM-DD HH:mm:ss"}:(r.type,{valueFormat:"YYYY-MM-DD"})),o===w.EL_TIME_PICKER&&(u={valueFormat:"HH:mm:ss"});const s={...u,...r};return U.set(a,s),s})),K=n((()=>{const{props:{type:e,isRange:l,placeholder:n,notDefaultPlaceholder:o}={},el:r}=j.column?.props?j.column:{props:{},el:j.column?.el},t=`placeholder_${r}_${e}_${l}_${n}_${o}`;if(U.has(t))return U.get(t);let a;if(!["datetimerange","daterange","monthrange"].includes(e)&&!l||o){a={placeholder:n??(b(r)?.includes(w.EL_INPUT)?"请输入":"请选择")}}else a={rangeSeparator:"至",startPlaceholder:"开始时间",endPlaceholder:"结束时间"};return U.set(t,a),a})),F=n((()=>{const{props:{clearable:e}={},defaultValue:l}=j.column;return e??null==l})),G=n((()=>({...t(K),clearable:t(F),disabled:X(),...t(H)}))),J=n((()=>{const{render:e,renderInView:l}=j.column,n=t(j.isView);if(j.isLazyLoading&&!j.isReady)return!1;if(n){return!(!l&&!e)}return!!e})),X=D((()=>{const{disabled:e}=j.column;if("boolean"==typeof e)return e;if("function"==typeof e){const l=`disabled_${j.column.prop}_${JSON.stringify(t(A))}`;if(U.has(l))return U.get(l);const n=e(t(A));return U.set(l,n),n}return!1}),"isDisabled"),Z=a(e({name:"RenderSlots",props:["style","column","isView"],setup:e=>()=>{if(j.isLazyLoading&&!j.isReady)return u("div",{style:"min-height: 32px; opacity: 0.5;"},[s("Loading...")]);const{render:l,renderInView:n}=e.column;let o=null;if(o=t(e.isView)&&n||l,!o)return null;const r={model:t(A),data:g(t(A),e.column.prop),enumData:t(z)};try{return o(r)}catch(e){return null}}})),W=D((()=>{const e=g(t(A),j.column.prop),l=b(j.column.el);if(l!==w.EL_SELECT&&l!==w.EL_SELECT_V2)return e;const n=t(Y),o=t(z);if(j.column.props?.multiple){return o.filter((l=>e?.includes(l[n.value]))).map((e=>e[n.label])).join(",")}{const l=o.find((l=>l[n.value]===e));return l?l[n.label]:e}}),"getShowValue"),Q=a(e({name:"RenderElComponents",props:["column"],setup:e=>()=>{if(t(j.isView))return u("span",null,[W()]);const l=e.column.el,n=b(l);let o=C(l);if(!o&&n&&(o=C(n)),!o)return console.warn(`未找到组件: ${l} (也尝试了 ${n})`),null;switch(n){case w.EL_SELECT:case w.EL_SELECT_V2:return S(o,t(A),e.column,t(H),t(K),t(F),X(),t(z),t(Y));case w.EL_RADIO_GROUP:case w.EL_RADIO:case w.EL_RADIO_BUTTON:return x(o,t(A),e.column,t(G),t(z),t(Y));case w.EL_CHECKBOX_GROUP:case w.EL_Checkbox:case w.EL_CHECKBOX_BUTTON:return T(o,t(A),e.column,t(G),t(z),t(Y));default:return $(o,t(A),e.column,t(G))}}})),ee=a(e({name:"RenderComponent",props:["style","column"],setup:e=>()=>{const{el:l}=e.column;try{const n=i(l);return n?m(n,{modelValue:g(t(A),e.column.prop),"onUpdate:modelValue":D((l=>R(t(A),e.column.prop,l)),"onUpdate:modelValue"),style:e.style,...t(G)}):(console.warn(`未找到自定义组件: ${l}`),null)}catch(e){return console.error(`渲染自定义组件失败: ${l}`,e),null}}}));return(e,l)=>(d(),c(p,null,[f(" 调试信息 "),f("v-if",!0),f(" 懒加载占位符 "),L.isLazyLoading&&!L.isReady?(d(),c("div",I,[E("div",k,[l[1]||(l[1]=E("div",{style:{width:"12px",height:"12px",animation:"spin 0.8s linear infinite",border:"1px solid #409eff","border-top":"1px solid transparent","border-radius":"50%"}},null,-1
|
|
2
2
|
/* HOISTED */)),E("span",P,y(L.column.label||"")+" 加载中...",1
|
|
3
|
-
/* TEXT */)])])):(d(),c(p,{key:2},[f(" 实际组件内容
|
|
4
|
-
/* STABLE_FRAGMENT
|
|
5
|
-
/* STABLE_FRAGMENT */))}});export{
|
|
3
|
+
/* TEXT */)])])):(d(),c(p,{key:2},[f(" 实际组件内容 "),J.value?(d(),_(t(Z),{key:0,style:v(L.style),column:L.column,"is-view":L.isView},null,8,["style","column","is-view"])):t(b)(L.column.el)===t(w).EL_TREE?(d(),_(O,h({key:1,data:z.value,"model-value":t(g)(A.value,L.column.prop),"onUpdate:modelValue":l[0]||(l[0]=e=>t(R)(A.value,L.column.prop,e))},{...H.value}),null,16,["data","model-value"])):t(b)(L.column.el)?.startsWith("El")?(d(),_(t(Q),{key:2,column:L.column},null,8,["column"])):(d(),_(t(ee),{key:3,style:v(L.style),column:L.column},null,8,["style","column"]))],64
|
|
4
|
+
/* STABLE_FRAGMENT */))],64
|
|
5
|
+
/* STABLE_FRAGMENT */))}});export{N as default};
|
|
6
6
|
//# sourceMappingURL=ZnFormV2Item.vue2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZnFormV2Item.vue2.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/ZnFormV2Item.vue"],"sourcesContent":["<template>\n <!-- 调试信息 -->\n <div v-if=\"false\" style=\"margin: 5px; padding: 5px; border: 1px solid #ccc; color: #999; font-size: 12px;\">\n [Debug] {{ column.prop }}: shouldUseCustomRender={{ shouldUseCustomRender }}, el={{ column.el }}, render={{ !!column.render }}, isView={{ isView }}, isLazyLoading={{ isLazyLoading }}, isReady={{ isReady }}\n </div>\n\n <!-- 懒加载占位符 -->\n <div\n v-if=\"isLazyLoading && !isReady\"\n style=\"display: flex; align-items: center; min-height: 32px; transition: opacity 0.3s ease; opacity: 0.6;\"\n >\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <div style=\"width: 12px; height: 12px; animation: spin 0.8s linear infinite; border: 1px solid #409eff; border-top: 1px solid transparent; border-radius: 50%;\"></div>\n <span style=\"color: #999; font-size: 12px;\">{{ column.label || '' }} 加载中...</span>\n </div>\n </div>\n\n <!-- 实际组件内容 - 使用无侵入式包装器 -->\n <div\n v-else\n class=\"zn-form-item-fade-in\"\n style=\"display: contents;\"\n >\n <RenderSlots v-if=\"shouldUseCustomRender\" :style=\"style\" :column=\"column\" :is-view=\"isView\" />\n\n <Tree\n v-else-if=\"hyphenToCamelCase(column.el) === ComponentNameEnum.EL_TREE\"\n :data=\"columnEnum\"\n :model-value=\"getFormProp(model, column.prop)\"\n @update:model-value=\"(v) => setFormProp(model, column.prop, v)\"\n v-bind=\"{ ...formProps }\" />\n\n <RenderElComponents v-else-if=\"hyphenToCamelCase(column.el)?.startsWith('El')\" :column=\"column\" />\n\n <RenderComponent v-else :style=\"style\" :column=\"column\" />\n </div>\n</template>\n\n<script setup lang=\"tsx\">\nimport { computed, inject, markRaw, ref, resolveComponent, unref, Ref, shallowRef, nextTick, h } from 'vue'\n\nimport Tree from './Tree.vue'\n\nimport { getFormProp, hyphenToCamelCase, setComponentSlots, setFormProp } from '../helper'\nimport { getComponent } from '../helper/componentMap'\nimport { ComponentNameEnum, formEnumMapKey, type ZnFormV2SchemaProps, type PascalCaseComponentName } from '../interface'\nimport { useRenderCheckbox } from './useRenderCheckbox'\nimport { useRenderComponent } from './useRenderComponent'\nimport { useRenderRadio } from './useRenderRadio'\nimport { useRenderSelect } from './useRenderSelect'\nimport type { Component } from 'vue'\nimport { defineComponent } from 'vue'\nimport { useLocalStorage } from '@vueuse/core'\n\ndefineOptions({ name: 'ZnFormV2Item' })\n\ninterface ZnFormV2ItemProps {\n column: ZnFormV2SchemaProps\n style?: CSSStyleDeclaration\n isView?: boolean | Ref<boolean>\n isLazyLoading?: boolean\n isReady?: boolean\n}\n\nconst props = defineProps({\n column: { type: Object, required: true },\n style: { required: false },\n isView: { type: Boolean, skipCheck: true, required: false, default: false },\n isLazyLoading: { type: Boolean, required: false, default: false },\n isReady: { type: Boolean, required: false, default: true }\n})\n\nconst znygStore = useLocalStorage('znyg', { dictMap: {} })\n\nconst model = defineModel<Record<string, any>>({ required: true })\n\n// 缓存计算结果\nconst cachedResults = new Map()\n\n// 判断 fieldNames 设置 label && value && children 的 key 值\nconst fieldNames = computed(() => {\n const { dictCode } = props.column\n let label = props.column.fieldNames?.label ?? 'label'\n let value = props.column.fieldNames?.value ?? 'value'\n if (dictCode) {\n label = 'name'\n value = 'code'\n }\n\n return {\n label: label,\n value: value,\n children: props.column.fieldNames?.children ?? 'children',\n disabled: props.column.fieldNames?.disabled ?? 'disabled'\n }\n})\n\n// 接收 enumMap (el 为 select-v 2 需单独处理 enumData)\nconst enumMap = inject(formEnumMapKey, ref(new Map()))\n\n// 添加对column.enum的直接引用,提高响应性\nconst rawEnum = computed(() => props.column.enum)\n\nconst columnEnum = computed(() => {\n const { useEnumMap, enumKey, prop, el, dictCode } = props.column\n\n // 确保从enumMap获取最新数据\n const currentEnumMap = unref(enumMap)\n\n // 通过获取原始enum来确保依赖收集\n const currentRawEnum = unref(rawEnum)\n\n let result\n if (dictCode) {\n // 如果存在dictCode,则直接从字典中获取\n if (znygStore && znygStore.value?.dictMap) {\n result = znygStore.value.dictMap[dictCode?.toString()] ?? []\n }\n }\n\n if (useEnumMap) {\n if (typeof useEnumMap === 'function') {\n result = useEnumMap(currentEnumMap)\n } else {\n const data = currentEnumMap.get(useEnumMap)\n if (!data) {\n result = []\n } else if (enumKey) {\n result = data[enumKey] || []\n } else {\n result = data\n }\n }\n }\n\n if (!result) {\n // 如果直接的enum是数组且不为空,优先使用它\n if (Array.isArray(currentRawEnum) && currentRawEnum.length > 0) {\n result = currentRawEnum\n } else {\n // 否则从enumMap中获取\n let enumData = currentEnumMap.get(prop)\n\n if (!enumData) {\n result = []\n } else if (hyphenToCamelCase(el) === ComponentNameEnum.EL_SELECT_V2) {\n result = enumData.map((item: Record<string, any>) => {\n return { ...item, label: item[unref(fieldNames).label], value: item[unref(fieldNames).value] }\n })\n } else if (enumKey) {\n result = enumData[enumKey] || []\n } else {\n result = enumData\n }\n }\n }\n\n return result || []\n})\n\n// 处理透传的 formProps (el 为 tree-select、cascader 的时候需要给下默认 label && value && children)\nconst formProps = computed(() => {\n const label = unref(fieldNames).label\n const value = unref(fieldNames).value\n const children = unref(fieldNames).children\n const formEl = hyphenToCamelCase(props.column?.el)\n let formProps = props.column.props ?? {}\n\n // 创建缓存键\n const cacheKey = `formProps_${formEl}_${JSON.stringify(formProps)}_${label}_${value}_${children}`\n\n // 检查缓存\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n\n let result = { ...formProps }\n if (formEl === ComponentNameEnum.EL_TREE_SELECT) {\n result = { ...result, props: { ...result.props, label, children }, nodeKey: value }\n }\n\n if (formEl === ComponentNameEnum.EL_CASCADER) {\n result = { ...result, props: { ...result.props, label, value, children } }\n }\n\n if (formEl === ComponentNameEnum.EL_DATE_PICKER) {\n if (result.type === 'datetime') result = { valueFormat: 'YYYY-MM-DD HH:mm:ss', ...result }\n if (result.type === 'date') result = { valueFormat: 'YYYY-MM-DD', ...result }\n else result = { valueFormat: 'YYYY-MM-DD', ...result }\n }\n\n if (formEl === ComponentNameEnum.EL_TIME_PICKER) result = { valueFormat: 'HH:mm:ss', ...result }\n\n // 缓存结果\n cachedResults.set(cacheKey, result)\n return result\n})\n\n// 处理默认 placeholder\nconst placeholder = computed(() => {\n const { props: { type, isRange, placeholder, notDefaultPlaceholder } = {}, el } = props.column?.props ? props.column : { props: {}, el: props.column?.el }\n\n // 创建缓存键\n const cacheKey = `placeholder_${el}_${type}_${isRange}_${placeholder}_${notDefaultPlaceholder}`\n\n // 检查缓存\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n\n let result\n if ((['datetimerange', 'daterange', 'monthrange'].includes(type) || isRange) && !notDefaultPlaceholder) {\n result = { rangeSeparator: '至', startPlaceholder: '开始时间', endPlaceholder: '结束时间' }\n } else {\n const placeholderConst = placeholder ?? (hyphenToCamelCase(el)?.includes(ComponentNameEnum.EL_INPUT) ? '请输入' : '请选择')\n result = { placeholder: placeholderConst }\n }\n\n // 缓存结果\n cachedResults.set(cacheKey, result)\n return result\n})\n\n// 是否有清除按钮 (当有默认值时,清除按钮不显示)\nconst clearable = computed(() => {\n const { props: { clearable } = {}, defaultValue } = props.column\n return clearable ?? (defaultValue === null || defaultValue === undefined)\n})\n\n// 判断是否应该使用自定义渲染\nconst shouldUseCustomRender = computed(() => {\n const { render, renderInView } = props.column\n const currentIsView = unref(props.isView)\n\n // 懒加载状态检查:如果组件未准备好,延迟自定义渲染\n if (props.isLazyLoading && !props.isReady) {\n return false\n }\n\n\n // 在查看模式下:优先使用 renderInView,如果没有则使用 render\n if (currentIsView) {\n const result = !!(renderInView || render)\n return result\n }\n\n // 在编辑模式下:只使用 render\n const result = !!render\n return result\n})\n\n// 是否禁用 - 缓存结果提高性能\nconst isDisabled = () => {\n const { disabled } = props.column\n if (typeof disabled === 'boolean') return disabled\n if (typeof disabled === 'function') {\n const cacheKey = `disabled_${props.column.prop}_${JSON.stringify(unref(model))}`\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n const result = disabled(unref(model))\n cachedResults.set(cacheKey, result)\n return result\n }\n return false\n}\n\n// 渲染自定义slot\nconst RenderSlots = markRaw(\n defineComponent({\n name: 'RenderSlots',\n props: ['style', 'column', 'isView'],\n setup(slotProps) {\n return () => {\n // 检查懒加载状态,如果未准备好则显示占位符\n if (props.isLazyLoading && !props.isReady) {\n return <div style=\"min-height: 32px; opacity: 0.5;\">Loading...</div>\n }\n\n const { render, renderInView } = slotProps.column\n const currentIsView = unref(slotProps.isView)\n\n\n\n let renderFunction = null\n\n // 在查看模式下:优先使用 renderInView,如果没有则使用 render\n if (currentIsView) {\n renderFunction = renderInView || render\n } else {\n // 在编辑模式下:只使用 render\n renderFunction = render\n }\n\n\n if (!renderFunction) return null\n\n const renderScope = {\n model: unref(model),\n data: getFormProp(unref(model), slotProps.column.prop),\n enumData: unref(columnEnum)\n }\n\n try {\n const result = renderFunction(renderScope)\n return result\n } catch (error) {\n return null\n }\n }\n }\n })\n)\n\n// 计算要显示的值(查看模式用)\nconst getShowValue = () => {\n const val = getFormProp(unref(model), props.column.prop)\n const formEl = hyphenToCamelCase(props.column.el)\n\n if (formEl !== ComponentNameEnum.EL_SELECT && formEl !== ComponentNameEnum.EL_SELECT_V2) {\n return val\n }\n\n const currentFieldNames = unref(fieldNames)\n const currentColumnEnum = unref(columnEnum)\n\n if (props.column.props?.multiple) {\n // 多选下拉框\n const selectedItemList = currentColumnEnum.filter((_: any) => val?.includes(_[currentFieldNames.value]))\n return selectedItemList.map((_: any) => _[currentFieldNames.label]).join(',')\n } else {\n const selectedItem = currentColumnEnum.find((_: any) => _[currentFieldNames.value] === val)\n return selectedItem ? selectedItem[currentFieldNames.label] : val\n }\n}\n\n// 渲染Element组件\nconst RenderElComponents = markRaw(\n defineComponent({\n name: 'RenderElComponents',\n props: ['column'],\n setup(elProps) {\n return () => {\n // 如果是查看模式,显示纯文本\n if (unref(props.isView)) {\n return <span>{getShowValue()}</span>\n }\n\n const originalEl = elProps.column.el\n const formEl = hyphenToCamelCase(originalEl)\n\n // 首先尝试使用原始格式(kebab-case 优先)\n let componentName = getComponent(originalEl!)\n\n // 如果没找到,尝试转换后的格式\n if (!componentName && formEl) {\n componentName = getComponent(formEl)\n }\n\n if (!componentName) {\n console.warn(`未找到组件: ${originalEl} (也尝试了 ${formEl})`)\n return null\n }\n\n // 根据不同组件类型使用不同的渲染逻辑\n switch (formEl) {\n case ComponentNameEnum.EL_SELECT:\n case ComponentNameEnum.EL_SELECT_V2:\n return useRenderSelect(\n componentName,\n unref(model),\n elProps.column,\n unref(formProps),\n unref(placeholder),\n unref(clearable),\n isDisabled(),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n case ComponentNameEnum.EL_RADIO_GROUP:\n case ComponentNameEnum.EL_RADIO:\n case ComponentNameEnum.EL_RADIO_BUTTON:\n return useRenderRadio(\n componentName,\n unref(model),\n elProps.column,\n unref(formProps),\n isDisabled(),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n case ComponentNameEnum.EL_CHECKBOX_GROUP:\n case ComponentNameEnum.EL_Checkbox:\n case ComponentNameEnum.EL_CHECKBOX_BUTTON:\n return useRenderCheckbox(\n componentName,\n unref(model),\n elProps.column,\n unref(formProps),\n isDisabled(),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n default:\n return useRenderComponent(\n componentName,\n unref(model),\n elProps.column,\n {\n ...unref(formProps),\n ...unref(placeholder),\n clearable: unref(clearable),\n disabled: isDisabled()\n }\n )\n }\n }\n }\n })\n)\n\n// 渲染自定义组件\nconst RenderComponent = markRaw(\n defineComponent({\n name: 'RenderComponent',\n props: ['style', 'column'],\n setup(componentProps) {\n return () => {\n const { el } = componentProps.column\n\n try {\n const Component = resolveComponent(el!)\n\n if (!Component) {\n console.warn(`未找到自定义组件: ${el}`)\n return null\n }\n\n return h(Component, {\n modelValue: getFormProp(unref(model), componentProps.column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(unref(model), componentProps.column.prop, val),\n ...unref(formProps),\n ...unref(placeholder),\n clearable: unref(clearable),\n disabled: isDisabled(),\n style: componentProps.style\n })\n } catch (error) {\n console.error(`渲染自定义组件失败: ${el}`, error)\n return null\n }\n }\n }\n })\n)\n</script>\n\n\n\n\n"],"names":["props","__props","znygStore","useLocalStorage","dictMap","model","_useModel","cachedResults","Map","fieldNames","computed","dictCode","column","label","value","children","disabled","enumMap","inject","formEnumMapKey","ref","rawEnum","enum","columnEnum","useEnumMap","enumKey","prop","el","currentEnumMap","unref","currentRawEnum","result","toString","data","get","Array","isArray","length","enumData","hyphenToCamelCase","ComponentNameEnum","EL_SELECT_V2","map","item","formProps","formEl","cacheKey","JSON","stringify","has","EL_TREE_SELECT","nodeKey","EL_CASCADER","EL_DATE_PICKER","type","valueFormat","EL_TIME_PICKER","set","placeholder","isRange","notDefaultPlaceholder","includes","EL_INPUT","rangeSeparator","startPlaceholder","endPlaceholder","clearable","defaultValue","undefined","shouldUseCustomRender","render","renderInView","currentIsView","isView","isLazyLoading","isReady","isDisabled","__name","RenderSlots","markRaw","defineComponent","name","setup","slotProps","_createVNode","style","_createTextVNode","renderFunction","renderScope","getFormProp","error","getShowValue","val","EL_SELECT","currentFieldNames","currentColumnEnum","multiple","selectedItemList","filter","_","join","selectedItem","find","RenderElComponents","elProps","originalEl","componentName","getComponent","console","warn","useRenderSelect","EL_RADIO_GROUP","EL_RADIO","EL_RADIO_BUTTON","useRenderRadio","EL_CHECKBOX_GROUP","EL_Checkbox","EL_CHECKBOX_BUTTON","useRenderCheckbox","useRenderComponent","RenderComponent","componentProps","Component","resolveComponent","h","modelValue","setFormProp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ZnFormV2Item.vue2.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/ZnFormV2Item.vue"],"sourcesContent":["<template>\n <!-- 调试信息 -->\n <div v-if=\"false\" style=\"margin: 5px; padding: 5px; border: 1px solid #ccc; color: #999; font-size: 12px;\">\n [Debug] {{ column.prop }}: shouldUseCustomRender={{ shouldUseCustomRender }}, el={{ column.el }}, render={{ !!column.render }}, isView={{ isView }}, isLazyLoading={{ isLazyLoading }}, isReady={{ isReady }}\n </div>\n\n <!-- 懒加载占位符 -->\n <div\n v-if=\"isLazyLoading && !isReady\"\n style=\"display: flex; align-items: center; min-height: 32px; transition: opacity 0.3s ease; opacity: 0.6;\"\n >\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <div style=\"width: 12px; height: 12px; animation: spin 0.8s linear infinite; border: 1px solid #409eff; border-top: 1px solid transparent; border-radius: 50%;\"></div>\n <span style=\"color: #999; font-size: 12px;\">{{ column.label || '' }} 加载中...</span>\n </div>\n </div>\n\n <!-- 实际组件内容 -->\n <template v-else>\n <RenderSlots v-if=\"shouldUseCustomRender\" :style=\"style\" :column=\"column\" :is-view=\"isView\" />\n\n <Tree\n v-else-if=\"hyphenToCamelCase(column.el) === ComponentNameEnum.EL_TREE\"\n :data=\"columnEnum\"\n :model-value=\"getFormProp(model, column.prop)\"\n @update:model-value=\"(v) => setFormProp(model, column.prop, v)\"\n v-bind=\"{ ...formProps }\" />\n\n <RenderElComponents v-else-if=\"hyphenToCamelCase(column.el)?.startsWith('El')\" :column=\"column\" />\n\n <RenderComponent v-else :style=\"style\" :column=\"column\" />\n </template>\n</template>\n\n<script setup lang=\"tsx\">\nimport { computed, inject, markRaw, ref, resolveComponent, unref, Ref, shallowRef, nextTick, h } from 'vue'\n\nimport Tree from './Tree.vue'\n\nimport { getFormProp, hyphenToCamelCase, setComponentSlots, setFormProp } from '../helper'\nimport { getComponent } from '../helper/componentMap'\nimport { ComponentNameEnum, formEnumMapKey, type ZnFormV2SchemaProps, type PascalCaseComponentName } from '../interface'\nimport { useRenderCheckbox } from './useRenderCheckbox'\nimport { useRenderComponent } from './useRenderComponent'\nimport { useRenderRadio } from './useRenderRadio'\nimport { useRenderSelect } from './useRenderSelect'\nimport type { Component } from 'vue'\nimport { defineComponent } from 'vue'\nimport { useLocalStorage } from '@vueuse/core'\n\ndefineOptions({ name: 'ZnFormV2Item' })\n\ninterface ZnFormV2ItemProps {\n column: ZnFormV2SchemaProps\n style?: CSSStyleDeclaration\n isView?: boolean | Ref<boolean>\n isLazyLoading?: boolean\n isReady?: boolean\n}\n\nconst props = defineProps({\n column: { type: Object, required: true },\n style: { required: false },\n isView: { type: Boolean, skipCheck: true, required: false, default: false },\n isLazyLoading: { type: Boolean, required: false, default: false },\n isReady: { type: Boolean, required: false, default: true }\n})\n\nconst znygStore = useLocalStorage('znyg', { dictMap: {} })\n\nconst model = defineModel<Record<string, any>>({ required: true })\n\n// 缓存计算结果\nconst cachedResults = new Map()\n\n// 判断 fieldNames 设置 label && value && children 的 key 值\nconst fieldNames = computed(() => {\n const { dictCode } = props.column\n let label = props.column.fieldNames?.label ?? 'label'\n let value = props.column.fieldNames?.value ?? 'value'\n if (dictCode) {\n label = 'name'\n value = 'code'\n }\n\n return {\n label: label,\n value: value,\n children: props.column.fieldNames?.children ?? 'children',\n disabled: props.column.fieldNames?.disabled ?? 'disabled'\n }\n})\n\n// 接收 enumMap (el 为 select-v 2 需单独处理 enumData)\nconst enumMap = inject(formEnumMapKey, ref(new Map()))\n\n// 添加对column.enum的直接引用,提高响应性\nconst rawEnum = computed(() => props.column.enum)\n\nconst columnEnum = computed(() => {\n const { useEnumMap, enumKey, prop, el, dictCode } = props.column\n\n // 确保从enumMap获取最新数据\n const currentEnumMap = unref(enumMap)\n\n // 通过获取原始enum来确保依赖收集\n const currentRawEnum = unref(rawEnum)\n\n let result\n if (dictCode) {\n // 如果存在dictCode,则直接从字典中获取\n if (znygStore && znygStore.value?.dictMap) {\n result = znygStore.value.dictMap[dictCode?.toString()] ?? []\n }\n }\n\n if (useEnumMap) {\n if (typeof useEnumMap === 'function') {\n result = useEnumMap(currentEnumMap)\n } else {\n const data = currentEnumMap.get(useEnumMap)\n if (!data) {\n result = []\n } else if (enumKey) {\n result = data[enumKey] || []\n } else {\n result = data\n }\n }\n }\n\n if (!result) {\n // 如果直接的enum是数组且不为空,优先使用它\n if (Array.isArray(currentRawEnum) && currentRawEnum.length > 0) {\n result = currentRawEnum\n } else {\n // 否则从enumMap中获取\n let enumData = currentEnumMap.get(prop)\n\n if (!enumData) {\n result = []\n } else if (hyphenToCamelCase(el) === ComponentNameEnum.EL_SELECT_V2) {\n result = enumData.map((item: Record<string, any>) => {\n return { ...item, label: item[unref(fieldNames).label], value: item[unref(fieldNames).value] }\n })\n } else if (enumKey) {\n result = enumData[enumKey] || []\n } else {\n result = enumData\n }\n }\n }\n\n return result || []\n})\n\n// 处理透传的 formProps (el 为 tree-select、cascader 的时候需要给下默认 label && value && children)\nconst formProps = computed(() => {\n const label = unref(fieldNames).label\n const value = unref(fieldNames).value\n const children = unref(fieldNames).children\n const formEl = hyphenToCamelCase(props.column?.el)\n let userProps = props.column.props ?? {}\n\n // 创建缓存键\n const cacheKey = `formProps_${formEl}_${JSON.stringify(userProps)}_${label}_${value}_${children}`\n\n // 检查缓存\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n\n // 基础属性(默认值,优先级最低)\n let baseProps = {}\n\n if (formEl === ComponentNameEnum.EL_TREE_SELECT) {\n baseProps = { props: { label, children }, nodeKey: value }\n }\n\n if (formEl === ComponentNameEnum.EL_CASCADER) {\n baseProps = { props: { label, value, children } }\n }\n\n if (formEl === ComponentNameEnum.EL_DATE_PICKER) {\n if (userProps.type === 'datetime') baseProps = { valueFormat: 'YYYY-MM-DD HH:mm:ss' }\n else if (userProps.type === 'date') baseProps = { valueFormat: 'YYYY-MM-DD' }\n else baseProps = { valueFormat: 'YYYY-MM-DD' }\n }\n\n if (formEl === ComponentNameEnum.EL_TIME_PICKER) baseProps = { valueFormat: 'HH:mm:ss' }\n\n // 合并属性:基础属性在前,用户属性在后(用户属性优先级更高)\n const result = { ...baseProps, ...userProps }\n\n // 缓存结果\n cachedResults.set(cacheKey, result)\n return result\n})\n\n// 处理默认 placeholder\nconst placeholder = computed(() => {\n const { props: { type, isRange, placeholder, notDefaultPlaceholder } = {}, el } = props.column?.props ? props.column : { props: {}, el: props.column?.el }\n\n // 创建缓存键\n const cacheKey = `placeholder_${el}_${type}_${isRange}_${placeholder}_${notDefaultPlaceholder}`\n\n // 检查缓存\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n\n let result\n if ((['datetimerange', 'daterange', 'monthrange'].includes(type) || isRange) && !notDefaultPlaceholder) {\n result = { rangeSeparator: '至', startPlaceholder: '开始时间', endPlaceholder: '结束时间' }\n } else {\n const placeholderConst = placeholder ?? (hyphenToCamelCase(el)?.includes(ComponentNameEnum.EL_INPUT) ? '请输入' : '请选择')\n result = { placeholder: placeholderConst }\n }\n\n // 缓存结果\n cachedResults.set(cacheKey, result)\n return result\n})\n\n// 是否有清除按钮 (当有默认值时,清除按钮不显示)\nconst clearable = computed(() => {\n const { props: { clearable } = {}, defaultValue } = props.column\n return clearable ?? (defaultValue === null || defaultValue === undefined)\n})\n\n// 最终合并的属性(确保用户配置的props具有最高优先级)\nconst finalProps = computed(() => {\n return {\n ...unref(placeholder),\n clearable: unref(clearable),\n disabled: isDisabled(),\n ...unref(formProps) // 用户配置的props放在最后,具有最高优先级\n }\n})\n\n// 判断是否应该使用自定义渲染\nconst shouldUseCustomRender = computed(() => {\n const { render, renderInView } = props.column\n const currentIsView = unref(props.isView)\n\n // 懒加载状态检查:如果组件未准备好,延迟自定义渲染\n if (props.isLazyLoading && !props.isReady) {\n return false\n }\n\n\n // 在查看模式下:优先使用 renderInView,如果没有则使用 render\n if (currentIsView) {\n const result = !!(renderInView || render)\n return result\n }\n\n // 在编辑模式下:只使用 render\n const result = !!render\n return result\n})\n\n// 是否禁用 - 缓存结果提高性能\nconst isDisabled = () => {\n const { disabled } = props.column\n if (typeof disabled === 'boolean') return disabled\n if (typeof disabled === 'function') {\n const cacheKey = `disabled_${props.column.prop}_${JSON.stringify(unref(model))}`\n if (cachedResults.has(cacheKey)) {\n return cachedResults.get(cacheKey)\n }\n const result = disabled(unref(model))\n cachedResults.set(cacheKey, result)\n return result\n }\n return false\n}\n\n// 渲染自定义slot\nconst RenderSlots = markRaw(\n defineComponent({\n name: 'RenderSlots',\n props: ['style', 'column', 'isView'],\n setup(slotProps) {\n return () => {\n // 检查懒加载状态,如果未准备好则显示占位符\n if (props.isLazyLoading && !props.isReady) {\n return <div style=\"min-height: 32px; opacity: 0.5;\">Loading...</div>\n }\n\n const { render, renderInView } = slotProps.column\n const currentIsView = unref(slotProps.isView)\n\n\n\n let renderFunction = null\n\n // 在查看模式下:优先使用 renderInView,如果没有则使用 render\n if (currentIsView) {\n renderFunction = renderInView || render\n } else {\n // 在编辑模式下:只使用 render\n renderFunction = render\n }\n\n\n if (!renderFunction) return null\n\n const renderScope = {\n model: unref(model),\n data: getFormProp(unref(model), slotProps.column.prop),\n enumData: unref(columnEnum)\n }\n\n try {\n const result = renderFunction(renderScope)\n return result\n } catch (error) {\n return null\n }\n }\n }\n })\n)\n\n// 计算要显示的值(查看模式用)\nconst getShowValue = () => {\n const val = getFormProp(unref(model), props.column.prop)\n const formEl = hyphenToCamelCase(props.column.el)\n\n if (formEl !== ComponentNameEnum.EL_SELECT && formEl !== ComponentNameEnum.EL_SELECT_V2) {\n return val\n }\n\n const currentFieldNames = unref(fieldNames)\n const currentColumnEnum = unref(columnEnum)\n\n if (props.column.props?.multiple) {\n // 多选下拉框\n const selectedItemList = currentColumnEnum.filter((_: any) => val?.includes(_[currentFieldNames.value]))\n return selectedItemList.map((_: any) => _[currentFieldNames.label]).join(',')\n } else {\n const selectedItem = currentColumnEnum.find((_: any) => _[currentFieldNames.value] === val)\n return selectedItem ? selectedItem[currentFieldNames.label] : val\n }\n}\n\n// 渲染Element组件\nconst RenderElComponents = markRaw(\n defineComponent({\n name: 'RenderElComponents',\n props: ['column'],\n setup(elProps) {\n return () => {\n // 如果是查看模式,显示纯文本\n if (unref(props.isView)) {\n return <span>{getShowValue()}</span>\n }\n\n const originalEl = elProps.column.el\n const formEl = hyphenToCamelCase(originalEl)\n\n // 首先尝试使用原始格式(kebab-case 优先)\n let componentName = getComponent(originalEl!)\n\n // 如果没找到,尝试转换后的格式\n if (!componentName && formEl) {\n componentName = getComponent(formEl)\n }\n\n if (!componentName) {\n console.warn(`未找到组件: ${originalEl} (也尝试了 ${formEl})`)\n return null\n }\n\n // 根据不同组件类型使用不同的渲染逻辑\n switch (formEl) {\n case ComponentNameEnum.EL_SELECT:\n case ComponentNameEnum.EL_SELECT_V2:\n return useRenderSelect(\n componentName,\n unref(model),\n elProps.column,\n unref(formProps),\n unref(placeholder),\n unref(clearable),\n isDisabled(),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n case ComponentNameEnum.EL_RADIO_GROUP:\n case ComponentNameEnum.EL_RADIO:\n case ComponentNameEnum.EL_RADIO_BUTTON:\n return useRenderRadio(\n componentName,\n unref(model),\n elProps.column,\n unref(finalProps),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n case ComponentNameEnum.EL_CHECKBOX_GROUP:\n case ComponentNameEnum.EL_Checkbox:\n case ComponentNameEnum.EL_CHECKBOX_BUTTON:\n return useRenderCheckbox(\n componentName,\n unref(model),\n elProps.column,\n unref(finalProps),\n unref(columnEnum),\n unref(fieldNames)\n )\n\n default:\n return useRenderComponent(\n componentName,\n unref(model),\n elProps.column,\n unref(finalProps)\n )\n }\n }\n }\n })\n)\n\n// 渲染自定义组件\nconst RenderComponent = markRaw(\n defineComponent({\n name: 'RenderComponent',\n props: ['style', 'column'],\n setup(componentProps) {\n return () => {\n const { el } = componentProps.column\n\n try {\n const Component = resolveComponent(el!)\n\n if (!Component) {\n console.warn(`未找到自定义组件: ${el}`)\n return null\n }\n\n return h(Component, {\n modelValue: getFormProp(unref(model), componentProps.column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(unref(model), componentProps.column.prop, val),\n style: componentProps.style,\n ...unref(finalProps)\n })\n } catch (error) {\n console.error(`渲染自定义组件失败: ${el}`, error)\n return null\n }\n }\n }\n })\n)\n</script>\n\n\n\n\n"],"names":["props","__props","znygStore","useLocalStorage","dictMap","model","_useModel","cachedResults","Map","fieldNames","computed","dictCode","column","label","value","children","disabled","enumMap","inject","formEnumMapKey","ref","rawEnum","enum","columnEnum","useEnumMap","enumKey","prop","el","currentEnumMap","unref","currentRawEnum","result","toString","data","get","Array","isArray","length","enumData","hyphenToCamelCase","ComponentNameEnum","EL_SELECT_V2","map","item","formProps","formEl","userProps","cacheKey","JSON","stringify","has","baseProps","EL_TREE_SELECT","nodeKey","EL_CASCADER","EL_DATE_PICKER","type","valueFormat","EL_TIME_PICKER","set","placeholder","isRange","notDefaultPlaceholder","includes","EL_INPUT","rangeSeparator","startPlaceholder","endPlaceholder","clearable","defaultValue","undefined","finalProps","isDisabled","shouldUseCustomRender","render","renderInView","currentIsView","isView","isLazyLoading","isReady","__name","RenderSlots","markRaw","defineComponent","name","setup","slotProps","_createVNode","style","_createTextVNode","renderFunction","renderScope","getFormProp","error","getShowValue","val","EL_SELECT","currentFieldNames","currentColumnEnum","multiple","selectedItemList","filter","_","join","selectedItem","find","RenderElComponents","elProps","originalEl","componentName","getComponent","console","warn","useRenderSelect","EL_RADIO_GROUP","EL_RADIO","EL_RADIO_BUTTON","useRenderRadio","EL_CHECKBOX_GROUP","EL_Checkbox","EL_CHECKBOX_BUTTON","useRenderCheckbox","useRenderComponent","RenderComponent","componentProps","Component","resolveComponent","h","modelValue","setFormProp"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createVNode as e,h as l}from"vue";import{ElCheckboxButton as o,ElCheckbox as r}from"element-plus";import{hyphenToCamelCase as a,setFormProp as d,getFormProp as t}from"../helper/index.mjs";import{ComponentNameEnum as n}from"../interface/index.mjs";var m=Object.defineProperty,p=(e,l)=>m(e,"name",{value:l,configurable:!0});const u=p(((m,u,i,s,b,f
|
|
1
|
+
import{createVNode as e,h as l}from"vue";import{ElCheckboxButton as o,ElCheckbox as r}from"element-plus";import{hyphenToCamelCase as a,setFormProp as d,getFormProp as t}from"../helper/index.mjs";import{ComponentNameEnum as n}from"../interface/index.mjs";var m=Object.defineProperty,p=(e,l)=>m(e,"name",{value:l,configurable:!0});const u=p(((m,u,i,s,b,f)=>{const c=p(((l,d,t)=>{const m=a(t.el)===n.EL_CHECKBOX_BUTTON?o:r;return l.map((l=>e(m,{disabled:l[d.disabled||"disabled"],label:l[d.label],value:l[d.value],key:l[d.value]},null)))}),"renderCheckboxOptions");return l(m,{modelValue:t(u,i.prop),"onUpdate:modelValue":p((e=>d(u,i.prop,e)),"onUpdate:modelValue"),...formProps,disabled:disabled},{default:p((()=>c(b,f,i)),"default")})}),"useRenderCheckbox");export{u as useRenderCheckbox};
|
|
2
2
|
//# sourceMappingURL=useRenderCheckbox.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRenderCheckbox.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderCheckbox.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { ElCheckbox, ElCheckboxButton, ElCheckboxGroup } from 'element-plus'\nimport { hyphenToCamelCase, getFormProp, setFormProp } from '../helper'\nimport { ComponentNameEnum, type FormFieldNamesProps, type ZnFormV2SchemaProps } from '../interface'\n\nexport const useRenderCheckbox = (\n componentName: any,\n model: Record<string, any>,\n column: ZnFormV2SchemaProps,\n
|
|
1
|
+
{"version":3,"file":"useRenderCheckbox.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderCheckbox.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { ElCheckbox, ElCheckboxButton, ElCheckboxGroup } from 'element-plus'\nimport { hyphenToCamelCase, getFormProp, setFormProp } from '../helper'\nimport { ComponentNameEnum, type FormFieldNamesProps, type ZnFormV2SchemaProps } from '../interface'\n\nexport const useRenderCheckbox = (\n componentName: any,\n model: Record<string, any>,\n column: ZnFormV2SchemaProps,\n mergedProps: any,\n columnEnum: Record<string, any>[],\n fieldNames: FormFieldNamesProps\n) => {\n const renderCheckboxOptions = (columnEnum: Record<string, any>[], fieldNames: FormFieldNamesProps, column: ZnFormV2SchemaProps) => {\n const Component = hyphenToCamelCase(column.el) === ComponentNameEnum.EL_CHECKBOX_BUTTON ? ElCheckboxButton : ElCheckbox\n return columnEnum.map((col: any) => {\n return (\n <Component\n disabled={col[fieldNames.disabled || 'disabled']}\n label={col[fieldNames.label]}\n value={col[fieldNames.value]}\n key={col[fieldNames.value]}></Component>\n )\n })\n }\n\n // 主渲染函数\n return h(\n componentName,\n {\n modelValue: getFormProp(model, column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(model, column.prop, val),\n ...formProps,\n disabled\n },\n {\n default: () => renderCheckboxOptions(columnEnum, fieldNames, column)\n }\n )\n}\n"],"names":["useRenderCheckbox","componentName","model","column","mergedProps","columnEnum","fieldNames","renderCheckboxOptions","Component","hyphenToCamelCase","el","ComponentNameEnum","EL_CHECKBOX_BUTTON","ElCheckboxButton","ElCheckbox","map","col","_createVNode","disabled","label","value","key","h","modelValue","getFormProp","prop","setFormProp","val","formProps","default"],"mappings":"yUAKO,MAAMA,EACXC,GAAAA,CAAAA,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAwBA,GAAAA,CAACF,EAAmCC,EAAiCH,KACjG,MAAMK,EAAYC,EAAkBN,EAAOO,MAAQC,EAAkBC,mBAAqBC,EAAmBC,EACtGT,OAAAA,EAAWU,KAAkBC,GAClCC,EAAAT,EAAA,CAAAU,SAEcF,EAAIV,EAAWY,UAAY,YAAWC,MACzCH,EAAIV,EAAWa,OAAMC,MACrBJ,EAAIV,EAAWc,OAAMC,IACvBL,EAAIV,EAAWc,QAAM,OAE/B,GAV2Bb,yBAc9B,OAAOe,EACLrB,EACA,CACEsB,WAAYC,EAAYtB,EAAOC,EAAOsB,MACtC,sBAAqCC,GAAAA,GAAAA,EAAYxB,EAAOC,EAAOsB,KAAME,IAA7CA,0BACrBC,UACHV,mBAEF,CACEW,QAAetB,GAAAA,IAAAA,EAAsBF,EAAYC,EAAYH,IAApD0B,YAEb,GAjC+B7B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createVNode as e,h as l}from"vue";import{ElRadioButton as
|
|
1
|
+
import{createVNode as e,h as l}from"vue";import{ElRadioButton as o,ElRadio as r}from"element-plus";import{hyphenToCamelCase as a,setFormProp as d,getFormProp as t}from"../helper/index.mjs";import{ComponentNameEnum as n}from"../interface/index.mjs";var m=Object.defineProperty,p=(e,l)=>m(e,"name",{value:l,configurable:!0});const u=p(((m,u,i,s,f,b)=>{const c=p(((l,d,t)=>{const m=a(t.el)===n.EL_RADIO_BUTTON?o:r;return l.map((l=>e(m,{disabled:l[d.disabled||"disabled"],label:l[d.label],value:l[d.value],key:l[d.value]},null)))}),"renderRadioOptions");return l(m,{modelValue:t(u,i.prop),"onUpdate:modelValue":p((e=>d(u,i.prop,e)),"onUpdate:modelValue"),...s},{default:p((()=>c(f,b,i)),"default")})}),"useRenderRadio");export{u as useRenderRadio};
|
|
2
2
|
//# sourceMappingURL=useRenderRadio.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRenderRadio.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderRadio.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { ElRadio, ElRadioButton
|
|
1
|
+
{"version":3,"file":"useRenderRadio.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderRadio.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { ElRadio, ElRadioButton } from 'element-plus'\nimport { hyphenToCamelCase, getFormProp, setFormProp } from '../helper'\nimport { ComponentNameEnum, type FormFieldNamesProps, type ZnFormV2SchemaProps } from '../interface'\n\nexport const useRenderRadio = (\n componentName: any,\n model: Record<string, any>,\n column: ZnFormV2SchemaProps,\n mergedProps: any,\n columnEnum: Record<string, any>[],\n fieldNames: FormFieldNamesProps\n) => {\n const renderRadioOptions = (columnEnum: Record<string, any>[], fieldNames: FormFieldNamesProps, column: ZnFormV2SchemaProps) => {\n const Component = hyphenToCamelCase(column.el) === ComponentNameEnum.EL_RADIO_BUTTON ? ElRadioButton : ElRadio\n\n return columnEnum.map((col) => {\n return (\n <Component\n disabled={col[fieldNames.disabled || 'disabled']}\n label={col[fieldNames.label]}\n value={col[fieldNames.value]}\n key={col[fieldNames.value]}></Component>\n )\n })\n }\n\n // 主渲染函数\n return h(\n componentName,\n {\n modelValue: getFormProp(model, column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(model, column.prop, val),\n ...mergedProps\n },\n {\n default: () => renderRadioOptions(columnEnum, fieldNames, column)\n }\n )\n}\n"],"names":["useRenderRadio","componentName","model","column","mergedProps","columnEnum","fieldNames","renderRadioOptions","Component","hyphenToCamelCase","el","ComponentNameEnum","EL_RADIO_BUTTON","ElRadioButton","ElRadio","map","col","_createVNode","disabled","label","value","key","h","modelValue","getFormProp","prop","setFormProp","val","default"],"mappings":"mUAKO,MAAMA,EACXC,GAAAA,CAAAA,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAqBA,GAAAA,CAACF,EAAmCC,EAAiCH,KAC9F,MAAMK,EAAYC,EAAkBN,EAAOO,MAAQC,EAAkBC,gBAAkBC,EAAgBC,EAEhGT,OAAAA,EAAWU,KAAaC,GAC7BC,EAAAT,EAAA,CAAAU,SAEcF,EAAIV,EAAWY,UAAY,YAAWC,MACzCH,EAAIV,EAAWa,OAAMC,MACrBJ,EAAIV,EAAWc,OAAMC,IACvBL,EAAIV,EAAWc,QAAM,OAE/B,GAXwBb,sBAe3B,OAAOe,EACLrB,EACA,CACEsB,WAAYC,EAAYtB,EAAOC,EAAOsB,MACtC,sBAAqCC,GAAAA,GAAAA,EAAYxB,EAAOC,EAAOsB,KAAME,IAA7CA,0BACrBvB,GAEL,CACEwB,QAAerB,GAAAA,IAAAA,EAAmBF,EAAYC,EAAYH,IAAjDyB,YAEb,GAjC4B5B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{unref as e,createVNode as l,h as
|
|
1
|
+
import{unref as e,createVNode as l,h as o}from"vue";import{ElOptionGroup as t,ElOption as a}from"element-plus";import{setFormProp as r,getFormProp as p}from"../helper/index.mjs";var n=Object.defineProperty,u=(e,l)=>n(e,"name",{value:l,configurable:!0});const m=u(((n,m,d,i,f,s,c,v,b)=>{const g=u(((o,a)=>e(o).map((e=>e?.options?.length?l(t,{label:e[a.label],key:e[a.value]},{default:u((()=>e.options.map((e=>y(e,a)))),"default")}):y(e,a)))),"renderSelectOptions"),y=u(((e,o)=>l(a,{label:e[o.label],value:e[o.value],key:e[o.value]},null)),"renderSelectOptionItem");return o(n,{modelValue:p(m,d.prop),"onUpdate:modelValue":u((e=>r(m,d.prop,e)),"onUpdate:modelValue"),...mergedProps},{default:u((()=>g(v,b)),"default")})}),"useRenderSelect");export{m as useRenderSelect};
|
|
2
2
|
//# sourceMappingURL=useRenderSelect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRenderSelect.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderSelect.tsx"],"sourcesContent":["import { h, unref } from 'vue'\n\nimport { ElOption, ElOptionGroup } from 'element-plus'\nimport type { FormFieldNamesProps, ZnFormV2SchemaProps } from '../interface'\nimport { getFormProp, setFormProp } from '../helper'\n\nexport const useRenderSelect = (\n componentName: any,\n model: Record<string, any>,\n column: ZnFormV2SchemaProps,\n formProps: any,\n placeholder: any,\n clearable: boolean,\n disabled: boolean,\n columnEnum: Record<string, any>[],\n fieldNames: FormFieldNamesProps\n) => {\n // 渲染 select options\n const renderSelectOptions = (columnEnum: Record<string, any>[], fieldNames: FormFieldNamesProps) => {\n return unref(columnEnum).map((col) => {\n if (col?.options?.length) {\n return (\n <ElOptionGroup\n label={col[fieldNames.label]}\n key={col[fieldNames.value]}\n v-slots={{\n default: () => col.options.map((option) => renderSelectOptionItem(option, fieldNames))\n }}\n />\n )\n }\n\n return renderSelectOptionItem(col, fieldNames)\n })\n }\n\n const renderSelectOptionItem = (col: Record<string, any>, fieldNames: FormFieldNamesProps) => {\n return <ElOption label={col[fieldNames.label]} value={col[fieldNames.value]} key={col[fieldNames.value]} />\n }\n\n // 主渲染函数\n return h(\n componentName,\n {\n modelValue: getFormProp(model, column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(model, column.prop, val),\n ...
|
|
1
|
+
{"version":3,"file":"useRenderSelect.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderSelect.tsx"],"sourcesContent":["import { h, unref } from 'vue'\n\nimport { ElOption, ElOptionGroup } from 'element-plus'\nimport type { FormFieldNamesProps, ZnFormV2SchemaProps } from '../interface'\nimport { getFormProp, setFormProp } from '../helper'\n\nexport const useRenderSelect = (\n componentName: any,\n model: Record<string, any>,\n column: ZnFormV2SchemaProps,\n formProps: any,\n placeholder: any,\n clearable: boolean,\n disabled: boolean,\n columnEnum: Record<string, any>[],\n fieldNames: FormFieldNamesProps\n) => {\n // 渲染 select options\n const renderSelectOptions = (columnEnum: Record<string, any>[], fieldNames: FormFieldNamesProps) => {\n return unref(columnEnum).map((col) => {\n if (col?.options?.length) {\n return (\n <ElOptionGroup\n label={col[fieldNames.label]}\n key={col[fieldNames.value]}\n v-slots={{\n default: () => col.options.map((option) => renderSelectOptionItem(option, fieldNames))\n }}\n />\n )\n }\n\n return renderSelectOptionItem(col, fieldNames)\n })\n }\n\n const renderSelectOptionItem = (col: Record<string, any>, fieldNames: FormFieldNamesProps) => {\n return <ElOption label={col[fieldNames.label]} value={col[fieldNames.value]} key={col[fieldNames.value]} />\n }\n\n // 主渲染函数\n return h(\n componentName,\n {\n modelValue: getFormProp(model, column.prop),\n 'onUpdate:modelValue': (val: any) => setFormProp(model, column.prop, val),\n ...mergedProps\n },\n {\n default: () => renderSelectOptions(columnEnum, fieldNames)\n }\n )\n}\n"],"names":["useRenderSelect","componentName","model","column","formProps","placeholder","clearable","disabled","columnEnum","fieldNames","renderSelectOptions","unref","map","col","options","length","_createVNode","ElOptionGroup","label","key","value","default","renderSelectOptionItem","option","ElOption","h","modelValue","getFormProp","prop","setFormProp","val","mergedProps"],"mappings":"6PAMaA,MAAAA,EACXC,GAAAA,CAAAA,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAGMC,MAAAA,EAAuBF,GAAAA,CAAAA,EAAmCC,IACvDE,EAAMH,GAAYI,KAAaC,GAChCA,GAAKC,SAASC,OAChBC,EAAAC,EAAA,CAAAC,MAEWL,EAAIJ,EAAWS,OAAMC,IACvBN,EAAIJ,EAAWW,QACX,CACPC,QAAeR,GAAAA,IAAAA,EAAIC,QAAQF,QAAgBU,EAAuBC,EAAQd,MAAjEY,aAMVC,EAAuBT,EAAKJ,MAdXC,uBAkBtBY,EAA0BT,GAAAA,CAAAA,EAA0BJ,IACxDO,EAAAQ,EAAA,CAAAN,MAAwBL,EAAIJ,EAAWS,OAAME,MAASP,EAAIJ,EAAWW,OAAMD,IAAON,EAAIJ,EAAWW,QAAM,OAD1EE,0BAK/B,OAAOG,EACLxB,EACA,CACEyB,WAAYC,EAAYzB,EAAOC,EAAOyB,MACtC,sBAAqCC,GAAAA,GAAAA,EAAY3B,EAAOC,EAAOyB,KAAME,IAA7CA,0BACrBC,aAEL,CACEV,QAASA,GAAAA,IAAMX,EAAoBF,EAAYC,IAAtCY,YAEb,GA7C6BrB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{isVNode as e,defineComponent as t,useModel as a,shallowRef as n,ref as l,computed as r,unref as o,getCurrentInstance as i,nextTick as u,provide as d,watch as s,markRaw as c,useSlots as p,withDirectives as m,createVNode as h,vShow as f,mergeProps as v,onMounted as y,onBeforeUnmount as g,createElementBlock as b,openBlock as V,normalizeClass as w,createCommentVNode as C,createBlock as L,createElementVNode as z,toDisplayString as
|
|
1
|
+
import{isVNode as e,defineComponent as t,useModel as a,shallowRef as n,ref as l,computed as r,unref as o,getCurrentInstance as i,nextTick as u,provide as d,watch as s,markRaw as c,useSlots as p,withDirectives as m,createVNode as h,vShow as f,mergeProps as v,onMounted as y,onBeforeUnmount as g,createElementBlock as b,openBlock as V,normalizeClass as w,createCommentVNode as C,createBlock as L,createElementVNode as z,toDisplayString as I,mergeModels as x}from"vue";import"./components/ZnFormV2Item.vue.mjs";import{getFormProp as q,setFormProp as $,hyphenToCamelCase as _,getPx as R}from"./helper/index.mjs";import{formEnumMapKey as S,ComponentNameEnum as F}from"./interface/index.mjs";import{ElForm as M,ElRow as P,ElCol as D,ElFormItem as T,ElSkeleton as j}from"element-plus";import E from"./components/ZnFormV2Item.vue2.mjs";var U=Object.defineProperty,k=(e,t)=>U(e,"name",{value:t,configurable:!0});const A={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"}},B={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 N(t){return"function"==typeof t||"[object Object]"===Object.prototype.toString.call(t)&&!e(t)}k(N,"_isSlot");const O="zn-form-v2";var Z=t({name:"ZnFormV2",__name:"index",props:x({modelValue:{type:Object,required:!1,default:k((()=>({})),"default")},schema:{type:Array,required:!1,default:k((()=>[]),"default")},elFormProps:{required:!1,default:k((()=>({})),"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:k((()=>({enableMonitoring:!1,enableDebug:!1,reportInterval:5e3})),"default")},enableVirtualScroll:{type:Boolean,required:!1,default:!1},virtualScrollConfig:{required:!1,default:k((()=>({enabled:!1,height:400,itemHeight:60,buffer:5})),"default")},timeSliceConfig:{required:!1,default:k((()=>({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}},{modelValue:{default:k((()=>({})),"default")},modelModifiers:{}}),emits:x(["update:modelValue","update:schema","register","onSearch","onReset","onChange","onEnumChange","onSchemaChange","onPerformanceUpdate"],["update:modelValue"]),setup(e,{expose:x,emit:U}){const Z=1e3,H=3e4,W=16;class G{static{k(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<H)||(t&&this.delete(e),!1)}get(e){const t=this.cache.get(e);if(t&&Date.now()-t.timestamp<H)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 a=setTimeout((()=>{this.delete(e)}),H);this.timers.set(e,a)}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 K=k((()=>{const e=new Map;return(t,a,n=W)=>{e.has(t)&&clearTimeout(e.get(t));const l=setTimeout((()=>{a(),e.delete(t)}),n);e.set(t,l)}}),"createDebouncer"),Y=k((()=>{let e=null,t="";return a=>{if(a===e)return t;const n=Object.keys(a).sort();let l=n.length.toString();for(const e of n){const t=a[e];l+="object"==typeof t&&null!==t?`${e}:obj:${Object.keys(t).length};`:`${e}:${typeof t}:${String(t).slice(0,50)};`}return e=a,t=l,l}}),"createModelHasher"),J=e,Q=U,X=a(e,"modelValue"),ee=n(),te=l({}),ae=r((()=>{const e={...J};return Object.assign(e,o(te)),e})),ne=l(J.enumMapProps||new Map),le=l(new Set),re=l([]),oe=l(!1),ie=l(J.delayLoad>0),ue=l(null),de=(l(0),l([])),se=new G,ce=K(),pe=Y(),me=l({renderCount:0,lastRenderTime:0,avgRenderTime:0,cacheStats:{size:0,hitRate:0,hitCount:0,missCount:0},renderTime:0,componentCount:0,cacheHitRate:0,queueLength:0,memoryUsage:null}),he=l(!1),fe=k((()=>{se.clear()}),"clearCache"),ve=(i(),k((()=>{ue.value&&(clearInterval(ue.value),ue.value=null),se.clear()}),"cleanup")),ye=k((async({enum:e,prop:t,cacheEnum:a=!0})=>{if(!e)return;const n=o(ne);if("function"!=typeof e)return n.set(t,o(e)),void(ne.value=new Map(n));try{n.set(t,[]);let a=await e(o(X),n);a=a?.result||a,Array.isArray(a)||(console.warn(`警告: '${t}' 的enum函数返回值不是数组`,a),a=[]),n.set(t,a),ne.value=new Map(n),u((()=>{if(t){const e=o(ae).schema?.find((e=>e.prop===t));e&&ge(e)}}))}catch(e){console.error(`添加enum函数参数失败: '${t}'`,e),n.set(t,[]),ne.value=new Map(n)}}),"setEnumMap");d(S,ne);const ge=k((async({defaultValue:e,fieldNames:t,prop:a})=>{const n=o(X),l=q(n,a);if(l||!1===l||0===l)return;const r=o(e);if(null!=r)return $(n,a,"function"!=typeof r?r:await r(n,o(ne)));const i=o(ne).get(a);if(i?.length){const e=i.filter((e=>"Y"===e.isDefault));return e.length&&$(n,a,e[0][t?.value??"value"])}}),"initDefaultValue"),be=k((({prop:e,el:t,subProp:a,subEnum:n})=>{if(_(t)===F.EL_SELECT){if("string"!=typeof a)return;s((()=>q(o(X),e)),(async t=>{const l=o(ne);if(o(X)[a]&&(o(X)[a]=""),!n)return;if(!t)return l.set(a,[]);if(l.get(`${a}-${t}`))l.set(a,l.get(`${a}-${t}`)||[]);else if("function"==typeof n){const r=await n(t,l.get(e));l.set(`${a}-${t}`,r),l.set(a,r)}else Array.isArray(n)&&(l.set(`${a}-${t}`,n),l.set(a,n));const r=l.get(e)||[],[i]=r.filter((e=>e.value===t));i?.subValue&&(o(X)[a]=i.subValue)}),{immediate:!0})}}),"cascadeEnum"),Ve=k((e=>"boolean"==typeof e.hidden?e.hidden:"function"==typeof e.hidden&&e.hidden(o(X))),"getIsHidden"),we=k((e=>!!J.isView&&("boolean"==typeof e.hiddenInView?e.hiddenInView:"function"==typeof e.hiddenInView&&e.hiddenInView(o(X)))),"getIsHiddenInView"),Ce=k((e=>"boolean"==typeof e.hiddenLabel?e.hiddenLabel:"function"==typeof e.hiddenLabel&&e.hiddenLabel(o(X))),"getIsHiddenLabel"),Le=k((e=>{if("boolean"==typeof e.destroy)return e.destroy;if("function"==typeof e.destroy){const t=`destroy_${e.prop}_${pe(o(X))}`;if(se.has(t))return se.get(t);const a=e.destroy(o(X));return se.set(t,a),a}return!1}),"getIsDestroyed"),ze=r((()=>{if(J.delayLoad>0&&!oe.value)return[];const e=o(ae).schema||[];if(e.length<=20)return e.filter((e=>!Le(e))).sort(((e,t)=>(e.order||0)-(t.order||0))).map(((e,t)=>({...e,renderPriority:e.renderPriority||0,enableAsyncRender:!1!==e.enableAsyncRender,_index:t,_hidden:Ve(e),_hiddenInView:we(e),_hiddenLabel:Ce(e)})));const t=`processedSchema_${e.length}_${pe(o(X))}`;if(se.has(t))return se.get(t);const a=k(((e,t=10)=>{const a=[];for(let n=0;n<e.length;n+=t){const l=e.slice(n,n+t).filter((e=>!Le(e))).map(((e,t)=>({...e,renderPriority:e.renderPriority||0,enableAsyncRender:!1!==e.enableAsyncRender,_index:n+t,_hidden:Ve(e),_hiddenInView:we(e),_hiddenLabel:Ce(e)})));a.push(...l)}return a.sort(((e,t)=>(e.order||0)-(t.order||0)))}),"processInBatches")(e);return se.set(t,a),a})),Ie=r((()=>{const e=ze.value;if(!e.length)return[];if(De.value||e.length>J.maxSyncRenderCount){const t=Array.from(le.value);return e.filter(((e,a)=>!e._hidden&&!e._hiddenInView&&(t.includes(e.prop)||a<J.initialLoadCount)))}return e.filter((e=>!e._hidden&&!e._hiddenInView))})),xe=c(t({name:"RenderFormWrap",setup(){p();return()=>{const{useCol:e,rowProps:t,onlyRenderComponent:a,elFormProps:n}=o(ae),l=Ie.value;if(a)return l.map(((e,t)=>m(h("div",{key:`${e.prop}_${t}`},[h(E,{column:e,modelValue:X.value,"onUpdate:modelValue":k((e=>X.value=e),"onUpdate:modelValue"),isView:J.isView,isLazyLoading:De.value,isReady:le.value.has(e.prop)},null)]),[[f,!e._hidden&&!e._hiddenInView]])));return h(M,v({ref:ee,model:X.value,class:O},n),{default:k((()=>[e?$e(l):_e(l)]),"default")})}}})),qe=k(((e={})=>({
|
|
2
2
|
// 如果有 span,代表用户优先级更高,所以不需要默认栅格
|
|
3
|
-
...e.span?{}:{xs:24,sm:12,md:12,lg:12,xl:12},...e})),"setGridProp"),$e=k((e=>{let t;const{rowProps:a}=o(ae);return h(P,v({gutter:20},a),N(t=e.map(((e,t)=>{const n=
|
|
4
|
-
/* TEXT */),z("div",null,"组件数量: "+
|
|
5
|
-
/* TEXT */),z("div",null,"缓存命中率: "+
|
|
6
|
-
/* TEXT */),z("div",null,"队列长度: "+
|
|
7
|
-
/* TEXT */)])):C("v-if",!0),C(" 组件级别的骨架屏 - delayLoad期间显示 "),ie.value?(V(),L(o(j),{key:1,rows:8,animated:""})):C("v-if",!0),C(" 表单容器 - 组件准备好后显示 "),m(z("div",null,[h(o(
|
|
3
|
+
...e.span?{}:{xs:24,sm:12,md:12,lg:12,xl:12},...e})),"setGridProp"),$e=k((e=>{let t;const{rowProps:a}=o(ae);return h(P,v({gutter:20},a),N(t=e.map(((e,t)=>{const n=qe({...a?.col,...e.col});return h(D,v({key:`${e.prop}_${t}`},n),{default:k((()=>[e._hiddenLabel?h(E,{column:e,modelValue:X.value,"onUpdate:modelValue":k((e=>X.value=e),"onUpdate:modelValue"),isView:J.isView,isLazyLoading:De.value,isReady:le.value.has(e.prop)},null):h(T,v({prop:e.prop,label:"function"==typeof e.label?e.label(X.value):e.label,style:e.width?{width:R(e.width)}:{}},J.isView&&J.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:k((()=>[h(E,{column:e,modelValue:X.value,"onUpdate:modelValue":k((e=>X.value=e),"onUpdate:modelValue"),isView:J.isView,isLazyLoading:De.value,isReady:le.value.has(e.prop)},null)]),"default")})]),"default")})})))?t:{default:k((()=>[t]),"default")})}),"renderWithCol"),_e=k((e=>e.map(((e,t)=>e._hiddenLabel?h(E,{key:`${e.prop}_${t}`,column:e,modelValue:X.value,"onUpdate:modelValue":k((e=>X.value=e),"onUpdate:modelValue"),isView:J.isView,isLazyLoading:De.value,isReady:le.value.has(e.prop)},null):h(T,v({key:`${e.prop}_${t}`,prop:e.prop,label:"function"==typeof e.label?e.label(X.value):e.label,style:e.width?{width:R(e.width)}:{}},J.isView&&J.disableRulesInView?{...e.formItem,rules:null}:e.formItem),{default:k((()=>[h(E,{column:e,modelValue:X.value,"onUpdate:modelValue":k((e=>X.value=e),"onUpdate:modelValue"),isView:J.isView,isLazyLoading:De.value,isReady:le.value.has(e.prop)},null)]),"default")})))),"renderWithoutCol"),Re=k((()=>{if(!De.value)return;const e=ze.value;for(let t=0;t<Math.min(J.initialLoadCount,e.length);t++)le.value.add(e[t].prop);re.value=e.slice(J.initialLoadCount),re.value.length>0&&Se()}),"initializeLazyLoading"),Se=k((()=>{if(0===re.value.length)return void(he.value=!1);he.value=!0;const e=k((()=>{if(0===re.value.length)return he.value=!1,void(J.lazyLoadDebug&&console.log("ZnFormV2 懒加载完成",{"总组件数":le.value.size,"加载时间统计":de.value}));const t=performance.now(),a=re.value.shift();a&&(le.value.add(a.prop),de.value.push({prop:a.prop,label:a.label,startTime:t,endTime:performance.now(),duration:performance.now()-t,batchIndex:le.value.size}),me.value.componentCount=le.value.size,me.value.renderTime=performance.now()-t,me.value.queueLength=re.value.length,J.enablePerformanceMonitoring&&Q("onPerformanceUpdate",me.value)),re.value.length>0?J.lazyLoadDelay<=16?requestAnimationFrame(e):setTimeout(e,J.lazyLoadDelay):(he.value=!1,J.lazyLoadDebug&&console.log("ZnFormV2 懒加载完成",{"总组件数":le.value.size,"加载时间统计":de.value}))}),"renderNext");setTimeout(e,J.delayLoad)}),"startBatchRendering"),Fe=k((()=>{(o(ae).schema||[]).forEach((async e=>{e.enum&&await ye(e),e.subProp&&e.subEnum&&be(e),void 0!==e.defaultValue&&ce(`init_${e.prop}`,(()=>ge(e)),50)}))}),"handleSchemaInit"),Me=k(((e,t)=>{if(!t||t.length!==e.length)return!0;for(let a=0;a<e.length;a++){const n=e[a],l=t[a];if(!l||n.prop!==l.prop||n.el!==l.el||n.destroy!==l.destroy||n.order!==l.order)return!0}return!1}),"hasStructuralChanges");s((()=>o(ae).schema),((e,t)=>{if((!(J.delayLoad>0)||oe.value)&&e?.length){const a=Me(e,t||[]);Fe();!t||a||J.lazyLoad&&a||e.length>J.maxSyncRenderCount&&a?(J.lazyLoadDebug&&console.log("ZnFormV2: 检测到结构变化,重新渲染",{oldCount:t?.length||0,newCount:e.length,hasStructuralChange:a}),a&&le.value.clear(),re.value=[],de.value=[],u((()=>{Re()}))):(fe(),J.lazyLoadDebug&&console.log("ZnFormV2: Schema属性更新,无需重新渲染",{oldCount:t?.length,newCount:e.length}))}}),{immediate:!1,deep:!0}),s((()=>o(ae).schema?.map((e=>({prop:e.prop,enum:e.enum,dictCode:e.dictCode})))),((e,t)=>{if(!e||!t||e.length!==t.length)return;let a=!1;e.forEach(((e,n)=>{const l=t[n];if(e.enum!==l?.enum||e.dictCode!==l?.dictCode){const t=o(ae).schema?.find((t=>t.prop===e.prop));t&&(a=!0,u((()=>{ye(t)})),J.lazyLoadDebug&&console.log(`ZnFormV2: 更新枚举数据 ${e.prop}`,{oldEnum:l?.enum,newEnum:e.enum,dictCode:e.dictCode}))}})),a&&se.clear()}),{deep:!0}),s((()=>X.value),(()=>{se.clear()}),{deep:!0}),s([()=>J.isView,()=>o(ae).schema?.map((e=>({prop:e.prop,hidden:e.hidden,hiddenInView:e.hiddenInView,hiddenLabel:e.hiddenLabel})))],(()=>{se.clear()}),{deep:!0});const Pe={validate:k((()=>ee.value?.validate()),"validate"),validateField:k((e=>ee.value?.validateField(e)),"validateField"),resetFields:k((()=>{ee.value?.resetFields()}),"resetFields"),resetForm:k((()=>{Object.keys(X.value).forEach((e=>{delete X.value[e]})),ee.value?.clearValidate(),u((()=>{Fe()}))}),"resetForm"),clearValidate:k((e=>{ee.value?.clearValidate(e)}),"clearValidate"),scrollToField:k((e=>{ee.value?.scrollToField(e)}),"scrollToField"),setEnumMap:ye,initDefaultValue:ge,clearCache:fe};y((()=>{if(J.delayLoad>0)setTimeout((()=>{ie.value=!1,oe.value=!0;const e=o(ae).schema;e?.length&&(Fe(),De.value&&Re()),Q("register",Pe)}),J.delayLoad);else{ie.value=!1,oe.value=!0;const e=o(ae).schema;e?.length&&(Fe(),De.value&&Re()),Q("register",Pe)}J.enablePerformanceMonitoring&&(ue.value=setInterval((()=>{me.value.cacheStats=se.getStats(),Q("onPerformanceUpdate",me.value)}),J.performanceConfig.reportInterval||2e3))})),g((()=>{ve()})),x({...Pe,form:ee,enumMap:ne});const De=r((()=>{const e=o(ae).schema?.length||0,t=J.lazyLoad;if(!1===t)return!1;if(!0===t)return!0;if(e<5){if(0===(o(ae).schema?.filter((e=>e.render||e.renderInView))?.length||0))return!1}return!0}));return(t,a)=>(V(),b("div",{class:w([O,"zn-znform-v2-container"]),ref:"containerRef"},[C(" 性能监控面板 "),e.performanceConfig.enableDebug&&me.value?(V(),b("div",A,[z("div",null,"渲染耗时: "+I(me.value.renderTime.toFixed(2))+"ms",1
|
|
4
|
+
/* TEXT */),z("div",null,"组件数量: "+I(me.value.componentCount),1
|
|
5
|
+
/* TEXT */),z("div",null,"缓存命中率: "+I((100*me.value.cacheHitRate).toFixed(1))+"%",1
|
|
6
|
+
/* TEXT */),z("div",null,"队列长度: "+I(me.value.queueLength),1
|
|
7
|
+
/* TEXT */)])):C("v-if",!0),C(" 组件级别的骨架屏 - delayLoad期间显示 "),ie.value?(V(),L(o(j),{key:1,rows:8,animated:""})):C("v-if",!0),C(" 表单容器 - 组件准备好后显示 "),m(z("div",null,[h(o(xe)),C(" 懒加载状态 "),he.value&&e.enablePerformanceMonitoring?(V(),b("div",B,a[0]||(a[0]=[z("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
|
|
8
8
|
/* HOISTED */),z("span",null,"正在渲染表单项...",-1
|
|
9
9
|
/* HOISTED */)]))):C("v-if",!0)],512
|
|
10
10
|
/* NEED_PATCH */),[[f,!ie.value]])],2
|