znyg-frontend-common 1.0.85 → 1.0.86-beta
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/index.mjs +1 -1
- package/es/components/znForm/src/index.vue2.mjs.map +1 -1
- package/es/components/znFormV2/index.mjs +2 -0
- package/es/components/znFormV2/index.mjs.map +1 -0
- package/es/components/znFormV2/src/components/Tree.vue.mjs +2 -0
- package/es/components/znFormV2/src/components/Tree.vue.mjs.map +1 -0
- package/es/components/znFormV2/src/components/Tree.vue2.mjs +4 -0
- package/es/components/znFormV2/src/components/Tree.vue2.mjs.map +1 -0
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue.mjs +2 -0
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue.mjs.map +1 -0
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue2.mjs +4 -0
- package/es/components/znFormV2/src/components/ZnFormV2Item.vue2.mjs.map +1 -0
- package/es/components/znFormV2/src/components/useRenderCheckbox.mjs +2 -0
- package/es/components/znFormV2/src/components/useRenderCheckbox.mjs.map +1 -0
- package/es/components/znFormV2/src/components/useRenderComponent.mjs +2 -0
- package/es/components/znFormV2/src/components/useRenderComponent.mjs.map +1 -0
- package/es/components/znFormV2/src/components/useRenderRadio.mjs +2 -0
- package/es/components/znFormV2/src/components/useRenderRadio.mjs.map +1 -0
- package/es/components/znFormV2/src/components/useRenderSelect.mjs +2 -0
- package/es/components/znFormV2/src/components/useRenderSelect.mjs.map +1 -0
- package/es/components/znFormV2/src/helper/componentMap.mjs +20 -0
- package/es/components/znFormV2/src/helper/componentMap.mjs.map +1 -0
- package/es/components/znFormV2/src/helper/index.mjs +2 -0
- package/es/components/znFormV2/src/helper/index.mjs.map +1 -0
- package/es/components/znFormV2/src/hooks/useZnFormV2.mjs +12 -0
- package/es/components/znFormV2/src/hooks/useZnFormV2.mjs.map +1 -0
- package/es/components/znFormV2/src/index.vue.mjs +2 -0
- package/es/components/znFormV2/src/index.vue.mjs.map +1 -0
- package/es/components/znFormV2/src/index.vue2.mjs +11 -0
- package/es/components/znFormV2/src/index.vue2.mjs.map +1 -0
- package/es/components/znFormV2/src/interface/index.mjs +2 -0
- package/es/components/znFormV2/src/interface/index.mjs.map +1 -0
- package/es/components/znFormV2/src/performance/PerformanceOptimizer.mjs +4 -0
- package/es/components/znFormV2/src/performance/PerformanceOptimizer.mjs.map +1 -0
- package/es/index.mjs +1 -1
- package/es/index.mjs.map +1 -1
- package/global.d.ts +1 -0
- package/lib/components/index.js +1 -1
- package/lib/components/znForm/src/index.vue2.js.map +1 -1
- package/lib/components/znFormV2/index.js +2 -0
- package/lib/components/znFormV2/index.js.map +1 -0
- package/lib/components/znFormV2/src/components/Tree.vue.js +2 -0
- package/lib/components/znFormV2/src/components/Tree.vue.js.map +1 -0
- package/lib/components/znFormV2/src/components/Tree.vue2.js +4 -0
- package/lib/components/znFormV2/src/components/Tree.vue2.js.map +1 -0
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue.js +2 -0
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue.js.map +1 -0
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue2.js +4 -0
- package/lib/components/znFormV2/src/components/ZnFormV2Item.vue2.js.map +1 -0
- package/lib/components/znFormV2/src/components/useRenderCheckbox.js +2 -0
- package/lib/components/znFormV2/src/components/useRenderCheckbox.js.map +1 -0
- package/lib/components/znFormV2/src/components/useRenderComponent.js +2 -0
- package/lib/components/znFormV2/src/components/useRenderComponent.js.map +1 -0
- package/lib/components/znFormV2/src/components/useRenderRadio.js +2 -0
- package/lib/components/znFormV2/src/components/useRenderRadio.js.map +1 -0
- package/lib/components/znFormV2/src/components/useRenderSelect.js +2 -0
- package/lib/components/znFormV2/src/components/useRenderSelect.js.map +1 -0
- package/lib/components/znFormV2/src/helper/componentMap.js +20 -0
- package/lib/components/znFormV2/src/helper/componentMap.js.map +1 -0
- package/lib/components/znFormV2/src/helper/index.js +2 -0
- package/lib/components/znFormV2/src/helper/index.js.map +1 -0
- package/lib/components/znFormV2/src/hooks/useZnFormV2.js +12 -0
- package/lib/components/znFormV2/src/hooks/useZnFormV2.js.map +1 -0
- package/lib/components/znFormV2/src/index.vue.js +2 -0
- package/lib/components/znFormV2/src/index.vue.js.map +1 -0
- package/lib/components/znFormV2/src/index.vue2.js +11 -0
- package/lib/components/znFormV2/src/index.vue2.js.map +1 -0
- package/lib/components/znFormV2/src/interface/index.js +2 -0
- package/lib/components/znFormV2/src/interface/index.js.map +1 -0
- package/lib/components/znFormV2/src/performance/PerformanceOptimizer.js +4 -0
- package/lib/components/znFormV2/src/performance/PerformanceOptimizer.js.map +1 -0
- 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
package/es/components/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{ZnChart}from"./znChart/index.mjs";export{ZnTable}from"./znTable/index.mjs";export{ZnTreeSelect}from"./znTreeSelect/index.mjs";export{ZnTreeFilter}from"./znTreeFilter/index.mjs";export{ZnCountTo}from"./znCountTo/index.mjs";export{ZnForm}from"./znForm/index.mjs";export{ZnTimeline}from"./znTimeLine/index.mjs";export{ZnGrid,ZnGridItem}from"./znGrid/index.mjs";export{ZnTest}from"./znTest/index.mjs";export{ZnWorkGrid}from"./znWorkGrid/index.mjs";export{ZnSearch}from"./znSearch/index.mjs";export{ZnNumberScroll}from"./znNumberScroll/index.mjs";import"./znVirtualTable/index.mjs";export{useZnForm}from"./znForm/src/hooks/useZnForm.mjs";export{useZnSearch}from"./znSearch/src/hooks/useProSearch.mjs";export{default as
|
|
1
|
+
export{ZnChart}from"./znChart/index.mjs";export{ZnTable}from"./znTable/index.mjs";export{ZnTreeSelect}from"./znTreeSelect/index.mjs";export{ZnTreeFilter}from"./znTreeFilter/index.mjs";export{ZnCountTo}from"./znCountTo/index.mjs";export{ZnForm}from"./znForm/index.mjs";export{ZnFormV2}from"./znFormV2/index.mjs";export{ZnTimeline}from"./znTimeLine/index.mjs";export{ZnGrid,ZnGridItem}from"./znGrid/index.mjs";export{ZnTest}from"./znTest/index.mjs";export{ZnWorkGrid}from"./znWorkGrid/index.mjs";export{ZnSearch}from"./znSearch/index.mjs";export{ZnNumberScroll}from"./znNumberScroll/index.mjs";import"./znVirtualTable/index.mjs";export{useZnForm}from"./znForm/src/hooks/useZnForm.mjs";export{useZnFormV2}from"./znFormV2/src/hooks/useZnFormV2.mjs";export{useZnSearch}from"./znSearch/src/hooks/useProSearch.mjs";export{default as ZnFormItem}from"./znForm/src/components/ZnFormItem.vue2.mjs";export{batchExecute,camelCaseToHyphen,checkFeatureSupport,createUniqueId,debounce,delay,executeInIdle,getElementOffsetTop,getMemoryUsage,getObjectHash,isDeepEqual,isElementInViewport,isShallowEqual,throttle}from"./znFormV2/src/helper/index.mjs";export{default as ZnFormV2Item}from"./znFormV2/src/components/ZnFormV2Item.vue2.mjs";export{initVXETable,isVXETableInitialized}from"./znVirtualTable/src/utils/vxe-setup.mjs";export{default as ZnVirtualTable}from"./znVirtualTable/src/index.vue2.mjs";
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znForm/src/index.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst prefixClass = 'zn-form'\n</script>\n<template>\n <RenderFormWrap />\n</template>\n\n<script setup lang=\"tsx\">\n import { type ComponentPublicInstance, computed, defineComponent, markRaw, onMounted, onUnmounted, provide, ref, shallowRef, unref, useSlots, watch, nextTick, Fragment, onBeforeUnmount, getCurrentInstance } from 'vue'\n\n import ZnFormItem from './components/ZnFormItem.vue'\n\n import { deleteObjProperty, getFormProp, getPx, hyphenToCamelCase, isString, setFormProp } from './helper'\n import { componentMap } from './helper/componentMap'\n import { ComponentNameEnum, formEnumMapKey, type ZnFormSchemaProps, type FormSetProps, type ZnElFormProps, type ValueType } from './interface'\n import { type ColProps, ElCol, ElForm, ElFormItem, ElRow, type FormInstance, type FormItemInstance, type FormItemProp, type RowProps } from 'element-plus'\n\n defineOptions({ name: 'ZnForm' })\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 private 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变化检测优化 - 使用浅比较而不是JSON.stringify\n const createModelHasher = () => {\n let lastModel: any = null\n let lastHash = ''\n\n return (model: any) => {\n if (model === lastModel) return lastHash\n\n // 使用更快的哈希算法\n const keys = Object.keys(model).sort()\n let hash = keys.length.toString()\n\n for (const key of keys) {\n const value = model[key]\n if (typeof value === 'object' && value !== null) {\n hash += `${key}:obj:${Object.keys(value).length};`\n } else {\n hash += `${key}:${typeof value}:${String(value).slice(0, 50)};`\n }\n }\n\n lastModel = model\n lastHash = hash\n return hash\n }\n }\n\n export interface ZnFormProps {\n /** 表单值 */\n modelValue?: Record<string, any>\n /** 表单配置项 */\n schema?: ZnFormSchemaProps[]\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 /** 整个组件延时加载时间,用于控制多个ZnForm组件的加载优先级,单位毫秒 */\n componentDelayLoad?: number\n }\n\n const props = defineProps({\n modelValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n elFormProps: { type: Object, required: false },\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: false },\n lazyLoadDelay: { type: Number, required: false, default: 50 },\n initialLoadCount: { type: Number, required: false, default: 10 },\n batchLoadCount: { type: Number, required: false, default: 30 },\n lazyLoadDebug: { type: Boolean, required: false, default: false },\n componentDelayLoad: { type: Number, required: false, default: 0 }\n})\n\n const model = defineModel<Record<string, any>>({ default: () => ({}) })\n\n // 存储 ElForm 实例\n const elFormRef = shallowRef<FormInstance>()\n\n const mergeProps = ref<ZnFormProps>({})\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<any[]>([])\n // 组件级别的加载状态\n const componentLoadReady = ref(false)\n // 用于更新加载时间显示的定时器\n const loadingTimer = ref<number | null>(null)\n // 用于触发加载时间更新的响应式变量\n const updateTrigger = ref(0)\n // 用于记录每个组件的加载耗时\n const componentLoadTimes = ref<Array<{\n prop: string\n label: string\n startTime: number\n endTime: number\n duration: number\n batchIndex: number\n }>>([])\n\n // 用于缓存计算结果 - 替换为高性能缓存系统\n const performanceCache = new PerformanceCache()\n const debouncer = createDebouncer()\n const modelHasher = createModelHasher()\n\n // 性能监控\n const performanceStats = ref({\n renderCount: 0,\n lastRenderTime: 0,\n avgRenderTime: 0,\n cacheStats: { size: 0, hitRate: 0, hitCount: 0, missCount: 0 }\n })\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, useCacheEnum = true }: ZnFormSchemaProps) => {\n if (!enumValue) return\n\n const enumMapConst = unref(enumMap)\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') {\n // 即使使用缓存,也强制更新enumMap,确保最新数据能被访问到\n enumMapConst.set(prop, unref(enumValue)!)\n // 触发响应式更新\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\n // 强制更新enumMap\n enumMap.value = new Map(enumMapConst)\n\n // 在下一tick触发初始化默认值\n nextTick(() => {\n if (prop) {\n // 找到对应的schema项\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 provide(formEnumMapKey, enumMap)\n\n // 初始化默认值\n const initDefaultValue = async ({ defaultValue, fieldNames, prop }: ZnFormSchemaProps) => {\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 }: ZnFormSchemaProps) => {\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 /**\n * 是否隐藏表单项 - 优化缓存计算结果提高性能\n */\n const isHidden = (item: ZnFormSchemaProps) => {\n const { hidden, prop } = item\n\n if (typeof hidden !== 'function') return hidden\n\n // 使用优化的模型哈希而不是JSON.stringify\n const modelHash = modelHasher(unref(model))\n const cacheKey = `hidden_${prop}_${modelHash}`\n\n // 检查缓存\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = hidden(unref(model))\n performanceCache.set(cacheKey, result)\n return result\n }\n\n /**\n * 是否销毁表单项 & 是否初始化表单项默认值 - 优化缓存\n */\n const isDestroy = (item: ZnFormSchemaProps) => {\n const { destroy, prop } = item\n\n // 使用缓存,避免重复计算\n if (typeof destroy !== 'function') {\n const result = destroy || false\n // 使用防抖优化初始化默认值\n if (!result) {\n debouncer(`init_${prop}`, () => initDefaultValue(item), 50)\n } else {\n debouncer(`delete_${prop}`, () => deleteObjProperty(unref(model), prop), 50)\n }\n return result\n }\n\n // 使用优化的模型哈希\n const modelHash = modelHasher(unref(model))\n const cacheKey = `destroy_${prop}_${modelHash}`\n\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = destroy(unref(model))\n performanceCache.set(cacheKey, result)\n\n // 使用防抖优化副作用操作\n if (!result) {\n debouncer(`init_${prop}`, () => initDefaultValue(item), 50)\n } else {\n debouncer(`delete_${prop}`, () => deleteObjProperty(unref(model), prop), 50)\n }\n\n return result\n }\n\n const parseLabel = (label: ValueType | ((model: Record<string, any>) => string)) => {\n if (typeof label === 'function') return label(unref(model))\n return label + ''\n }\n\n // 添加计算属性用于排序,使用markRaw避免不必要的响应式监听\n const sortedSchema = computed(() => {\n const schema = unref(getProps).schema || []\n return markRaw([...schema].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)))\n })\n\n // 用于调试的懒加载状态\n const lazyLoadStatus = ref({\n total: 0,\n loaded: 0,\n pending: 0,\n startTime: 0,\n endTime: 0,\n duration: 0\n })\n\n // 实时加载时间显示\n const currentLoadingTime = computed(() => {\n // 依赖 updateTrigger 来触发重新计算\n updateTrigger.value\n if (lazyLoadStatus.value.startTime === 0) return 0\n if (lazyLoadStatus.value.duration > 0) return lazyLoadStatus.value.duration\n return Date.now() - lazyLoadStatus.value.startTime\n })\n\n // 按加载时间排序的组件列表\n const sortedComponentLoadTimes = computed(() => {\n return [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration)\n })\n\n // 开始组件级别的懒加载\n const startComponentLazyLoad = (schema: ZnFormSchemaProps[]) => {\n componentLoadReady.value = true\n\n // 记录开始时间\n lazyLoadStatus.value.startTime = Date.now()\n lazyLoadStatus.value.endTime = 0\n lazyLoadStatus.value.duration = 0\n\n // 清空之前的组件加载记录\n componentLoadTimes.value = []\n\n // 启动定时器更新加载时间显示\n if (props.lazyLoadDebug && loadingTimer.value) {\n clearInterval(loadingTimer.value)\n }\n if (props.lazyLoadDebug) {\n loadingTimer.value = setInterval(() => {\n // 触发响应式更新,让界面显示实时的加载时间\n updateTrigger.value += 1\n }, 100) as unknown as number\n }\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm Component LazyLoad Started:', {\n componentDelayLoad: props.componentDelayLoad,\n totalItems: schema.length,\n startTime: new Date(lazyLoadStatus.value.startTime).toLocaleTimeString()\n })\n }\n\n const initialItems = pendingItems.value.slice(0, Math.min(props.initialLoadCount, pendingItems.value.length))\n initialItems.forEach(item => {\n if (item.prop) renderedItems.value.add(item.prop)\n })\n pendingItems.value = pendingItems.value.filter(item =>\n !initialItems.some(i => i.prop === item.prop)\n )\n\n // 更新调试信息\n lazyLoadStatus.value.loaded = renderedItems.value.size\n lazyLoadStatus.value.pending = pendingItems.value.length\n\n // 开始懒加载剩余项\n nextTick(() => startLazyLoading())\n }\n\n // 懒加载表单项\n const startLazyLoading = () => {\n if (pendingItems.value.length === 0) return\n\n let batchIndex = 0\n\n const loadNextBatch = () => {\n if (pendingItems.value.length === 0) return\n\n batchIndex++\n const batchStartTime = Date.now()\n\n // 每批次加载指定数量的表单项\n const itemsToLoad = pendingItems.value.slice(0, props.batchLoadCount)\n pendingItems.value = pendingItems.value.slice(props.batchLoadCount)\n\n itemsToLoad.forEach((item, index) => {\n if (item.prop) {\n const itemStartTime = Date.now()\n renderedItems.value.add(item.prop)\n\n // 使用 nextTick 确保组件已经渲染完成\n nextTick(() => {\n const itemEndTime = Date.now()\n componentLoadTimes.value.push({\n prop: item.prop,\n label: typeof item.label === 'function' ? item.label(unref(model)) : (item.label || item.prop),\n startTime: itemStartTime,\n endTime: itemEndTime,\n duration: itemEndTime - itemStartTime,\n batchIndex: batchIndex\n })\n })\n }\n })\n\n // 更新调试信息\n lazyLoadStatus.value.loaded = renderedItems.value.size\n lazyLoadStatus.value.pending = pendingItems.value.length\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm LazyLoad Batch:', {\n loaded: lazyLoadStatus.value.loaded,\n pending: lazyLoadStatus.value.pending,\n total: lazyLoadStatus.value.total\n })\n }\n\n if (pendingItems.value.length > 0) {\n setTimeout(loadNextBatch, props.lazyLoadDelay)\n } else {\n // 所有表单项都已加载完成,记录结束时间\n lazyLoadStatus.value.endTime = Date.now()\n lazyLoadStatus.value.duration = lazyLoadStatus.value.endTime - lazyLoadStatus.value.startTime\n\n // 清除定时器\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm LazyLoad Completed:', {\n total: lazyLoadStatus.value.total,\n duration: lazyLoadStatus.value.duration + 'ms',\n endTime: new Date(lazyLoadStatus.value.endTime).toLocaleTimeString()\n })\n\n if (componentLoadTimes.value.length > 0) {\n console.log(`[ZnForm 组件加载详情] 总计 ${componentLoadTimes.value.length} 个组件`)\n const slowestComponents = [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration).slice(0, 5)\n console.log('[ZnForm 最耗时的5个组件]:', slowestComponents.map(item => `${item.label}(${item.prop}): ${item.duration}ms`))\n\n const avgDuration = Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length)\n console.log(`[ZnForm 性能统计] 最慢: ${slowestComponents[0]?.duration || 0}ms | 最快: ${[...componentLoadTimes.value].sort((a, b) => a.duration - b.duration)[0]?.duration || 0}ms | 平均: ${avgDuration}ms`)\n }\n }\n }\n }\n\n loadNextBatch()\n }\n\n // 判断表单项是否应该渲染 - 用于懒加载过滤\n const shouldRenderItem = (item: ZnFormSchemaProps) => {\n if (!props.lazyLoad) return true\n if (!item.prop) return true\n // 组件级别未准备好时,不渲染任何表单项\n if (!componentLoadReady.value) return false\n return renderedItems.value.has(item.prop)\n }\n\n // 监听表单结构化数组,重新组装 schema\n watch(\n () => unref(getProps).schema,\n (schema = []) => {\n // 一次性收集需要删除的键\n const keysToDelete = props.includeModelKeys?.length > 0 && unref(getProps).dynamicModel\n ? new Set(Object.keys(unref(model)))\n : null\n\n // 清空缓存\n clearCache()\n\n if (props.lazyLoad) {\n // 重置已渲染项\n renderedItems.value.clear()\n // 准备懒加载项\n pendingItems.value = []\n }\n\n // 设置调试信息\n lazyLoadStatus.value.total = schema.length\n\n schema.forEach((item, index) => {\n // 设置枚举\n setEnumMap(item)\n // 级联下拉监听\n cascadeEnum(item)\n\n // 设置表单排序默认值\n item && (item.order = item.order ?? index + 2)\n\n // 初始化值\n initDefaultValue(item)\n\n // 如果需要删除多余的键,从待删除集合中移除当前存在的键\n if (keysToDelete && item.prop) {\n keysToDelete.delete(item.prop)\n // 处理特殊渲染使用的属性\n item.renderUseProp?.forEach(prop => keysToDelete.delete(prop))\n }\n\n // 如果启用懒加载且项目有prop,将其添加到待渲染队列\n if (props.lazyLoad && item.prop) {\n pendingItems.value.push(item)\n }\n })\n\n // 如果有设置保留键,将它们也从待删除集合中移除\n if (keysToDelete && props.includeModelKeys?.length) {\n props.includeModelKeys.forEach(key => keysToDelete.delete(key))\n }\n\n // 批量删除不存在的属性\n if (keysToDelete?.size) {\n const modelRef = unref(model)\n keysToDelete.forEach(key => {\n delete modelRef[key]\n })\n }\n\n // 如果不启用懒加载或在查看模式下,直接渲染所有表单项\n if (!props.lazyLoad || props.isView) {\n componentLoadReady.value = true\n\n // 记录开始和结束时间(同步渲染)\n lazyLoadStatus.value.startTime = Date.now()\n componentLoadTimes.value = []\n\n schema.forEach((item, index) => {\n if (item.prop) {\n const itemStartTime = Date.now()\n renderedItems.value.add(item.prop)\n const itemEndTime = Date.now()\n\n componentLoadTimes.value.push({\n prop: item.prop,\n label: typeof item.label === 'function' ? item.label(unref(model)) : (item.label || item.prop),\n startTime: itemStartTime,\n endTime: itemEndTime,\n duration: itemEndTime - itemStartTime,\n batchIndex: 0\n })\n }\n })\n\n lazyLoadStatus.value.endTime = Date.now()\n lazyLoadStatus.value.duration = lazyLoadStatus.value.endTime - lazyLoadStatus.value.startTime\n lazyLoadStatus.value.loaded = schema.length\n lazyLoadStatus.value.pending = 0\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm Sync Render Completed:', {\n total: lazyLoadStatus.value.total,\n duration: lazyLoadStatus.value.duration + 'ms'\n })\n\n if (componentLoadTimes.value.length > 0) {\n console.log(`[ZnForm 组件加载详情] 总计 ${componentLoadTimes.value.length} 个组件`)\n const slowestComponents = [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration).slice(0, 5)\n console.log('[ZnForm 最耗时的5个组件]:', slowestComponents.map(item => `${item.label}(${item.prop}): ${item.duration}ms`))\n\n const avgDuration = Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length)\n console.log(`[ZnForm 性能统计] 最慢: ${slowestComponents[0]?.duration || 0}ms | 最快: ${[...componentLoadTimes.value].sort((a, b) => a.duration - b.duration)[0]?.duration || 0}ms | 平均: ${avgDuration}ms`)\n }\n }\n }\n // 否则如果启用懒加载,需要考虑组件延时加载\n else if (pendingItems.value.length > 0) {\n // 如果设置了组件延时加载,先等待指定时间\n if (props.componentDelayLoad > 0) {\n setTimeout(() => {\n startComponentLazyLoad(schema)\n }, props.componentDelayLoad)\n } else {\n startComponentLazyLoad(schema)\n }\n }\n },\n {\n immediate: true,\n deep: true // 添加深度监听以捕获schema内部属性的变化\n }\n )\n\n // 添加一个专门监听schema中enum属性变化的watch\n watch(\n () => {\n // 返回一个包含所有schema项的enum属性的数组,这样当任何enum变化时都能触发更新\n const schema = unref(getProps).schema || []\n return schema.map(item => ({\n prop: item.prop,\n enum: item.enum\n }))\n },\n (newVal, oldVal) => {\n if (!newVal || newVal.length === 0) return\n\n // 找出发生变化的enum项\n newVal.forEach((item, index) => {\n if (item.enum !== oldVal?.[index]?.enum) {\n const schemaItem = unref(getProps).schema?.find(s => s.prop === item.prop)\n if (schemaItem) {\n // 重新设置枚举值\n setEnumMap(schemaItem)\n // 初始化默认值\n nextTick(() => {\n initDefaultValue(schemaItem)\n })\n }\n }\n })\n },\n { deep: true }\n )\n\n // 监听enumMap的变更,当enum发生变化后清除缓存\n watch(\n () => enumMap.value,\n () => {\n clearCache()\n },\n { deep: true }\n )\n\n // 使用计算属性代替排序\n const getSchemaList = computed(() => {\n return sortedSchema.value\n })\n\n // 获取每个表单的宽度\n const getComponentWidth = ({ width, props: componentProps }: ZnFormSchemaProps) => {\n const { elFormProps = {} } = unref(getProps)\n const style = componentProps?.style || { width: '100%' } // 默认宽度 100%\n if (width) return { ...style, width: getPx(width) }\n if (elFormProps.fixWidth) return { ...style, width: getPx(elFormProps.width || elFormProps.inline ? 220 : '100%') }\n return style\n }\n\n // 获取标题样式\n const getTitleFontStyle = ({ labelSize }: ZnFormSchemaProps) => {\n if (!labelSize || labelSize === 'default') return { fontSize: '16px', fontWeight: 600 }\n if (labelSize === 'small') return { fontSize: '14px', fontWeight: 600 }\n if (labelSize === 'large') return { fontSize: '18px', fontWeight: 600 }\n return {}\n }\n\n /**\n * @description 合并传入进来的栅格属性\n */\n const setGridProp = (col: Partial<ColProps> = {}) => {\n return {\n // 如果有 span,代表用户优先级更高,所以不需要默认栅格\n ...(col.span ? {} : { xs: 24, sm: 12, md: 12, lg: 12, xl: 12 }),\n ...col\n }\n }\n\n const slots = useSlots()\n\n const RenderFormWrap = () => {\n const { elFormProps, onlyRenderComponent } = unref(getProps)\n return !onlyRenderComponent ? (\n <ElForm ref={elFormRef} {...elFormProps} class={[prefixClass, { 'is-view': props.isView }]} model={unref(model)} onSubmit={(e) => e.preventDefault()}>\n {{\n default: () => {\n // 如果存在自定义插槽,则直接返回自定义插槽的 Render\n if (slots.default) return slots.default({ getComponentWidth, parseLabel, isDestroy, isHidden })\n return (\n <Fragment>\n {props.lazyLoadDebug && (\n <div style=\"background-color: #f1f1f1; padding: 5px; margin-bottom: 10px; border-radius: 4px; font-size: 12px;\">\n <div>\n 懒加载状态:\n {props.componentDelayLoad > 0 && (\n <span>组件延时: {props.componentDelayLoad}ms | </span>\n )}\n 组件状态: {componentLoadReady.value ? '已就绪' : '等待中'} |\n 已加载 {lazyLoadStatus.value.loaded}/{lazyLoadStatus.value.total} 项,剩余 {lazyLoadStatus.value.pending} 项\n </div>\n {lazyLoadStatus.value.startTime > 0 && (\n <div style=\"margin-top: 3px;\">\n 加载时间:\n {lazyLoadStatus.value.duration > 0 ? (\n <span style=\"color: #67c23a; font-weight: bold;\">\n 已完成 ({lazyLoadStatus.value.duration}ms)\n </span>\n ) : (\n <span style=\"color: #e6a23c;\">\n 加载中... ({currentLoadingTime.value}ms)\n </span>\n )}\n </div>\n )}\n {componentLoadTimes.value.length > 0 && (\n <div style=\"margin-top: 8px;\">\n <div style=\"font-weight: bold; margin-bottom: 5px;\">组件加载耗时分析 (按耗时倒序):</div>\n <div style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ddd; border-radius: 3px;\">\n <table style=\"width: 100%; border-collapse: collapse; font-size: 11px;\">\n <thead style=\"background-color: #fafafa; position: sticky; top: 0;\">\n <tr>\n <th style=\"padding: 4px 6px; text-align: left; border-bottom: 1px solid #ddd; width: 35%;\">组件标签</th>\n <th style=\"padding: 4px 6px; text-align: left; border-bottom: 1px solid #ddd; width: 25%;\">属性名</th>\n <th style=\"padding: 4px 6px; text-align: center; border-bottom: 1px solid #ddd; width: 20%;\">耗时(ms)</th>\n <th style=\"padding: 4px 6px; text-align: center; border-bottom: 1px solid #ddd; width: 20%;\">批次</th>\n </tr>\n </thead>\n <tbody>\n {sortedComponentLoadTimes.value.map((item, index) => (\n <tr key={item.prop} style={index % 2 === 0 ? 'background-color: #ffffff;' : 'background-color: #f9f9f9;'}>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; word-break: break-all;\">{item.label}</td>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; font-family: monospace; word-break: break-all;\">{item.prop}</td>\n <td style={`padding: 3px 6px; border-bottom: 1px solid #eee; text-align: center; font-weight: bold; color: ${item.duration > 10 ? '#e6a23c' : item.duration > 5 ? '#909399' : '#67c23a'};`}>\n {item.duration}\n </td>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; text-align: center;\">{item.batchIndex}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div style=\"margin-top: 3px; font-size: 10px; color: #666;\">\n 统计: 总计 {componentLoadTimes.value.length} 个组件 |\n 最慢: {sortedComponentLoadTimes.value[0]?.duration || 0}ms |\n 最快: {sortedComponentLoadTimes.value[sortedComponentLoadTimes.value.length - 1]?.duration || 0}ms |\n 平均: {componentLoadTimes.value.length ? Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length) : 0}ms\n </div>\n </div>\n )}\n </div>\n )}\n {RenderForm()}\n {slots.operation ? <ElFormItem>{slots.operation()}</ElFormItem> : undefined}\n </Fragment>\n )\n }\n }}\n </ElForm>\n ) : (\n sortedSchema.value\n .filter((item) => !isDestroy(item) && shouldRenderItem(item))\n .map((item) => {\n return (\n <div v-show={!isHidden(item)}>\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n </div>\n )\n })\n )\n }\n\n // 渲染 ELForm\n const RenderForm = () => {\n const { useCol, rowProps } = unref(getProps)\n // 如果需要栅格,需要包裹 ElCol\n return useCol ? (\n // 默认 gutter 20,可以被传来的 rowProps 替换\n <ElRow gutter={20} {...rowProps} style=\"width: 100%\">\n {renderFormItemWrap()}\n </ElRow>\n ) : (\n renderFormItemWrap()\n )\n }\n\n // 渲染 FormItem 上一层\n const renderFormItemWrap = () => {\n const { useCol, rowProps } = unref(getProps)\n\n return sortedSchema.value\n .filter((item) => !isDestroy(item) && shouldRenderItem(item))\n .map((item) => {\n // 如果有 title\n const el = hyphenToCamelCase(item.el) || ''\n const useDivider = el === ComponentNameEnum.EL_DIVIDER\n const Component = componentMap[el] as ReturnType<typeof defineComponent>\n\n return useDivider ? (\n <Fragment>\n <Component {...item.props}>\n <span style={getTitleFontStyle(item)}>{parseLabel(item.label)}</span>\n </Component>\n </Fragment>\n ) : useCol ? (\n // 如果需要栅格,需要包裹 ElCol\n <ElCol {...setGridProp({ ...rowProps?.col, ...item.col })} v-show={!isHidden(item)}>\n {renderFormItem(item)}\n </ElCol>\n ) : (\n renderFormItem(item)\n )\n })\n }\n\n // 存储每一个 ElFormItem 实例\n const formItemComponentsRef = ref<Record<string, FormItemInstance>>({})\n\n // 存储表单组件实例\n const znFormItemRefs = shallowRef<Record<string, InstanceType<typeof ZnFormItem>>>({})\n\n // 渲染 FormItem\n const renderFormItem = (item: ZnFormSchemaProps) => {\n let rules = item.formItem?.rules || null\n if (props.isView && props.disableRulesInView && item.formItem || isHidden(item) ) {\n //如果查看或者是隐藏的item,则去除表单验证信息\n rules = null\n }\n\n return item.hiddenLabel ? (\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n ) : (\n <ElFormItem\n v-show={!isHidden(item)}\n ref={(el: any) => (unref(formItemComponentsRef)[item.prop] = el)}\n {...(item.formItem || {})}\n prop={item.prop}\n rules={rules}\n label={parseLabel(item.label)}>\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n </ElFormItem>\n )\n }\n\n type ProFormEmits = {\n register: [proFormRef?: ComponentPublicInstance | null | any, elFormRef?: FormInstance]\n validate: [prop: FormItemProp, isValid: boolean, message: string] // ElForm 自带的事件\n }\n\n export type ProFormOnEmits = ProFormEmits\n\n // 定义 emit 事件\n const emits = defineEmits([\"register\", \"validate\"])\n\n onMounted(() => {\n emits('register', unref(elFormRef)?.$parent, unref(elFormRef))\n })\n\n onUnmounted(() => {\n // 清理定时器\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n })\n\n // 设置 form 的值\n const setValues = (data: Record<string, any> = {}) => {\n model.value = Object.assign(unref(model), data)\n }\n\n // 设置 ProForm 组件的 props\n const setProps = (props: Partial<ZnFormProps> = {}) => {\n mergeProps.value = Object.assign(unref(mergeProps), props)\n }\n\n // 设置 schema\n const setSchema = (schemaSet: FormSetProps[]) => {\n const { schema } = unref(getProps)\n for (const v of schema) {\n for (const item of schemaSet) {\n if (v.prop === item.prop) {\n setFormProp(v, item.field, item.value)\n }\n }\n }\n }\n\n // 添加 schema\n const addSchema = (formSchema: any, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const { schema } = unref(getProps) // 获取 schema 数组\n const schemaCopy = [...schema]\n if (isString(prop)) {\n // 如果传入的是一个 prop 名称\n schemaCopy.forEach((s, i) => {\n // 遍历 schema,找到对应的 prop\n if (s.prop === prop) {\n // 根据 position 决定插入到前或后\n position === 'after' ? schema.splice(i + 1, 0, formSchema) : schema.splice(i, 0, formSchema)\n }\n })\n } else if (prop !== undefined) {\n // 如果传入的是某个位置(索引)\n schema.splice(prop, 0, formSchema)\n } else {\n // 如果没有指定位置,默认添加到末尾\n schema.push(formSchema)\n }\n\n // 添加新schema后,清除缓存\n clearCache()\n\n // 如果使用懒加载,将新添加的项标记为已渲染\n if (props.lazyLoad && formSchema.prop) {\n renderedItems.value.add(formSchema.prop)\n }\n }\n\n // 删除 schema\n const delSchema = (prop: string) => {\n const { schema } = unref(getProps)\n\n const index = schema.findIndex((item) => item.prop === prop)\n if (index > -1) {\n schema.splice(index, 1)\n // 删除schema后,清除缓存\n clearCache()\n\n // 如果使用懒加载,从已渲染集合中移除\n if (props.lazyLoad) {\n renderedItems.value.delete(prop)\n }\n }\n }\n\n // 获取表单组件实例\n const getComponentExpose = (prop: string) => {\n return unref(znFormItemRefs)[prop]?.formComponentRef\n }\n\n // 获取 formItem 实例\n const getFormItemExpose = (prop: string) => {\n return unref(formItemComponentsRef)[prop]\n }\n\n defineExpose({\n form: elFormRef,\n model,\n setValues,\n setProps,\n setSchema,\n addSchema,\n delSchema,\n getComponentExpose,\n getFormItemExpose,\n getComponentWidth,\n parseLabel,\n isDestroy,\n isHidden\n })\n\n</script>\n\n"],"names":["_isSlot","s","_isVNode","Object","prototype","toString","call","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","model","sort","hash","length","String","slice","props","__props","_useModel","elFormRef","shallowRef","mergeProps","ref","getProps","computed","propsObj","assign","unref","enumMap","enumMapProps","renderedItems","Set","pendingItems","componentLoadReady","loadingTimer","updateTrigger","componentLoadTimes","performanceCache","debouncer","modelHasher","clearCache","renderCount","lastRenderTime","avgRenderTime","cacheStats","setEnumMap","getCurrentInstance","async","enum","enumValue","prop","useCacheEnum","enumMapConst","data","result","Array","isArray","console","warn","nextTick","schemaItem","schema","find","initDefaultValue","error","provide","formEnumMapKey","defaultValue","fieldNames","formConst","getFormProp","defaultValueConst","setFormProp","enumData","filter","isDefault","cascadeEnum","el","subProp","subEnum","hyphenToCamelCase","ComponentNameEnum","EL_SELECT","watch","newVal","subEnumData","formEnum","subValue","immediate","isHidden","hidden","cacheKey","isDestroy","destroy","deleteObjProperty","modelHash","parseLabel","label","sortedSchema","markRaw","a","b","order","lazyLoadStatus","total","loaded","pending","startTime","endTime","duration","currentLoadingTime","sortedComponentLoadTimes","startComponentLazyLoad","lazyLoadDebug","clearInterval","setInterval","log","componentDelayLoad","totalItems","toLocaleTimeString","initialItems","Math","min","initialLoadCount","add","some","i","startLazyLoading","batchIndex","loadNextBatch","batchStartTime","itemsToLoad","batchLoadCount","index","itemStartTime","itemEndTime","push","lazyLoadDelay","slowestComponents","map","avgDuration","round","reduce","sum","shouldRenderItem","lazyLoad","keysToDelete","includeModelKeys","dynamicModel","renderUseProp","modelRef","isView","deep","oldVal","getSchemaList","getComponentWidth","width","componentProps","elFormProps","style","getPx","fixWidth","inline","getTitleFontStyle","labelSize","fontSize","fontWeight","setGridProp","col","span","xs","sm","md","lg","xl","slots","useSlots","RenderFormWrap","onlyRenderComponent","_withDirectives","_createVNode","ZnFormItem","znFormItemRefs","column","modelValue","$event","_vShow","ElForm","_mergeProps","class","onSubmit","e","preventDefault","default","_slot","_Fragment","_createTextVNode","RenderForm","operation","ElFormItem","_slot2","useCol","rowProps","ElRow","gutter","renderFormItemWrap","_slot3","useDivider","EL_DIVIDER","Component","componentMap","ElCol","renderFormItem","formItemComponentsRef","rules","formItem","disableRulesInView","hiddenLabel","emits","__emit","onMounted","$parent","onUnmounted","setValues","__expose","form","setProps","setSchema","schemaSet","v","field","addSchema","formSchema","position","schemaCopy","isString","splice","delSchema","findIndex","getComponentExpose","formComponentRef","getFormItemExpose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znForm/src/index.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst prefixClass = 'zn-form'\n</script>\n<template>\n <RenderFormWrap />\n</template>\n\n<script setup lang=\"tsx\">\n import { type ComponentPublicInstance, computed, defineComponent, markRaw, onMounted, onUnmounted, provide, ref, shallowRef, unref, useSlots, watch, nextTick, Fragment, onBeforeUnmount, getCurrentInstance } from 'vue'\n\n import ZnFormItem from './components/ZnFormItem.vue'\n\n import { deleteObjProperty, getFormProp, getPx, hyphenToCamelCase, isString, setFormProp } from './helper'\n import { componentMap } from './helper/componentMap'\n import { ComponentNameEnum, formEnumMapKey, type ZnFormSchemaProps, type FormSetProps, type ZnElFormProps, type ValueType } from './interface'\n import { type ColProps, ElCol, ElForm, ElFormItem, ElRow, type FormInstance, type FormItemInstance, type FormItemProp, type RowProps } from 'element-plus'\n\n defineOptions({ name: 'ZnForm' })\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 private 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变化检测优化 - 使用浅比较而不是JSON.stringify\n const createModelHasher = () => {\n let lastModel: any = null\n let lastHash = ''\n\n return (model: any) => {\n if (model === lastModel) return lastHash\n\n // 使用更快的哈希算法\n const keys = Object.keys(model).sort()\n let hash = keys.length.toString()\n\n for (const key of keys) {\n const value = model[key]\n if (typeof value === 'object' && value !== null) {\n hash += `${key}:obj:${Object.keys(value).length};`\n } else {\n hash += `${key}:${typeof value}:${String(value).slice(0, 50)};`\n }\n }\n\n lastModel = model\n lastHash = hash\n return hash\n }\n }\n\n export interface ZnFormProps {\n /** 表单值 */\n modelValue?: Record<string, any>\n /** 表单配置项 */\n schema?: ZnFormSchemaProps[]\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 /** 整个组件延时加载时间,用于控制多个ZnForm组件的加载优先级,单位毫秒 */\n componentDelayLoad?: number\n }\n\n const props = defineProps({\n modelValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n elFormProps: { type: Object, required: false },\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: false },\n lazyLoadDelay: { type: Number, required: false, default: 50 },\n initialLoadCount: { type: Number, required: false, default: 10 },\n batchLoadCount: { type: Number, required: false, default: 30 },\n lazyLoadDebug: { type: Boolean, required: false, default: false },\n componentDelayLoad: { type: Number, required: false, default: 0 }\n})\n\n const model = defineModel<Record<string, any>>({ default: () => ({}) })\n\n // 存储 ElForm 实例\n const elFormRef = shallowRef<FormInstance>()\n\n const mergeProps = ref<ZnFormProps>({})\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<any[]>([])\n // 组件级别的加载状态\n const componentLoadReady = ref(false)\n // 用于更新加载时间显示的定时器\n const loadingTimer = ref<number | null>(null)\n // 用于触发加载时间更新的响应式变量\n const updateTrigger = ref(0)\n // 用于记录每个组件的加载耗时\n const componentLoadTimes = ref<Array<{\n prop: string\n label: string\n startTime: number\n endTime: number\n duration: number\n batchIndex: number\n }>>([])\n\n // 用于缓存计算结果 - 替换为高性能缓存系统\n const performanceCache = new PerformanceCache()\n const debouncer = createDebouncer()\n const modelHasher = createModelHasher()\n\n // 性能监控\n const performanceStats = ref({\n renderCount: 0,\n lastRenderTime: 0,\n avgRenderTime: 0,\n cacheStats: { size: 0, hitRate: 0, hitCount: 0, missCount: 0 }\n })\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, useCacheEnum = true }: ZnFormSchemaProps) => {\n if (!enumValue) return\n\n const enumMapConst = unref(enumMap)\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') {\n // 即使使用缓存,也强制更新enumMap,确保最新数据能被访问到\n enumMapConst.set(prop, unref(enumValue)!)\n // 触发响应式更新\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\n // 强制更新enumMap\n enumMap.value = new Map(enumMapConst)\n\n // 在下一tick触发初始化默认值\n nextTick(() => {\n if (prop) {\n // 找到对应的schema项\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 provide(formEnumMapKey, enumMap)\n\n // 初始化默认值\n const initDefaultValue = async ({ defaultValue, fieldNames, prop }: ZnFormSchemaProps) => {\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 }: ZnFormSchemaProps) => {\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 /**\n * 是否隐藏表单项 - 优化缓存计算结果提高性能\n */\n const isHidden = (item: ZnFormSchemaProps) => {\n const { hidden, prop } = item\n\n if (typeof hidden !== 'function') return hidden\n\n // 使用优化的模型哈希而不是JSON.stringify\n const modelHash = modelHasher(unref(model))\n const cacheKey = `hidden_${prop}_${modelHash}`\n\n // 检查缓存\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = hidden(unref(model))\n performanceCache.set(cacheKey, result)\n return result\n }\n\n /**\n * 是否销毁表单项 & 是否初始化表单项默认值 - 优化缓存\n */\n const isDestroy = (item: ZnFormSchemaProps) => {\n const { destroy, prop } = item\n\n // 使用缓存,避免重复计算\n if (typeof destroy !== 'function') {\n const result = destroy || false\n // 使用防抖优化初始化默认值\n if (!result) {\n debouncer(`init_${prop}`, () => initDefaultValue(item), 50)\n } else {\n debouncer(`delete_${prop}`, () => deleteObjProperty(unref(model), prop), 50)\n }\n return result\n }\n\n // 使用优化的模型哈希\n const modelHash = modelHasher(unref(model))\n const cacheKey = `destroy_${prop}_${modelHash}`\n\n if (performanceCache.has(cacheKey)) {\n return performanceCache.get(cacheKey)\n }\n\n const result = destroy(unref(model))\n performanceCache.set(cacheKey, result)\n\n // 使用防抖优化副作用操作\n if (!result) {\n debouncer(`init_${prop}`, () => initDefaultValue(item), 50)\n } else {\n debouncer(`delete_${prop}`, () => deleteObjProperty(unref(model), prop), 50)\n }\n\n return result\n }\n\n const parseLabel = (label: ValueType | ((model: Record<string, any>) => string)) => {\n if (typeof label === 'function') return label(unref(model))\n return label + ''\n }\n\n // 添加计算属性用于排序,使用markRaw避免不必要的响应式监听\n const sortedSchema = computed(() => {\n const schema = unref(getProps).schema || []\n return markRaw([...schema].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)))\n })\n\n // 用于调试的懒加载状态\n const lazyLoadStatus = ref({\n total: 0,\n loaded: 0,\n pending: 0,\n startTime: 0,\n endTime: 0,\n duration: 0\n })\n\n // 实时加载时间显示\n const currentLoadingTime = computed(() => {\n // 依赖 updateTrigger 来触发重新计算\n updateTrigger.value\n if (lazyLoadStatus.value.startTime === 0) return 0\n if (lazyLoadStatus.value.duration > 0) return lazyLoadStatus.value.duration\n return Date.now() - lazyLoadStatus.value.startTime\n })\n\n // 按加载时间排序的组件列表\n const sortedComponentLoadTimes = computed(() => {\n return [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration)\n })\n\n // 开始组件级别的懒加载\n const startComponentLazyLoad = (schema: ZnFormSchemaProps[]) => {\n componentLoadReady.value = true\n\n // 记录开始时间\n lazyLoadStatus.value.startTime = Date.now()\n lazyLoadStatus.value.endTime = 0\n lazyLoadStatus.value.duration = 0\n\n // 清空之前的组件加载记录\n componentLoadTimes.value = []\n\n // 启动定时器更新加载时间显示\n if (props.lazyLoadDebug && loadingTimer.value) {\n clearInterval(loadingTimer.value)\n }\n if (props.lazyLoadDebug) {\n loadingTimer.value = setInterval(() => {\n // 触发响应式更新,让界面显示实时的加载时间\n updateTrigger.value += 1\n }, 100) as unknown as number\n }\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm Component LazyLoad Started:', {\n componentDelayLoad: props.componentDelayLoad,\n totalItems: schema.length,\n startTime: new Date(lazyLoadStatus.value.startTime).toLocaleTimeString()\n })\n }\n\n const initialItems = pendingItems.value.slice(0, Math.min(props.initialLoadCount, pendingItems.value.length))\n initialItems.forEach(item => {\n if (item.prop) renderedItems.value.add(item.prop)\n })\n pendingItems.value = pendingItems.value.filter(item =>\n !initialItems.some(i => i.prop === item.prop)\n )\n\n // 更新调试信息\n lazyLoadStatus.value.loaded = renderedItems.value.size\n lazyLoadStatus.value.pending = pendingItems.value.length\n\n // 开始懒加载剩余项\n nextTick(() => startLazyLoading())\n }\n\n // 懒加载表单项\n const startLazyLoading = () => {\n if (pendingItems.value.length === 0) return\n\n let batchIndex = 0\n\n const loadNextBatch = () => {\n if (pendingItems.value.length === 0) return\n\n batchIndex++\n const batchStartTime = Date.now()\n\n // 每批次加载指定数量的表单项\n const itemsToLoad = pendingItems.value.slice(0, props.batchLoadCount)\n pendingItems.value = pendingItems.value.slice(props.batchLoadCount)\n\n itemsToLoad.forEach((item, index) => {\n if (item.prop) {\n const itemStartTime = Date.now()\n renderedItems.value.add(item.prop)\n\n // 使用 nextTick 确保组件已经渲染完成\n nextTick(() => {\n const itemEndTime = Date.now()\n componentLoadTimes.value.push({\n prop: item.prop,\n label: typeof item.label === 'function' ? item.label(unref(model)) : (item.label || item.prop),\n startTime: itemStartTime,\n endTime: itemEndTime,\n duration: itemEndTime - itemStartTime,\n batchIndex: batchIndex\n })\n })\n }\n })\n\n // 更新调试信息\n lazyLoadStatus.value.loaded = renderedItems.value.size\n lazyLoadStatus.value.pending = pendingItems.value.length\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm LazyLoad Batch:', {\n loaded: lazyLoadStatus.value.loaded,\n pending: lazyLoadStatus.value.pending,\n total: lazyLoadStatus.value.total\n })\n }\n\n if (pendingItems.value.length > 0) {\n setTimeout(loadNextBatch, props.lazyLoadDelay)\n } else {\n // 所有表单项都已加载完成,记录结束时间\n lazyLoadStatus.value.endTime = Date.now()\n lazyLoadStatus.value.duration = lazyLoadStatus.value.endTime - lazyLoadStatus.value.startTime\n\n // 清除定时器\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm LazyLoad Completed:', {\n total: lazyLoadStatus.value.total,\n duration: lazyLoadStatus.value.duration + 'ms',\n endTime: new Date(lazyLoadStatus.value.endTime).toLocaleTimeString()\n })\n\n if (componentLoadTimes.value.length > 0) {\n console.log(`[ZnForm 组件加载详情] 总计 ${componentLoadTimes.value.length} 个组件`)\n const slowestComponents = [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration).slice(0, 5)\n console.log('[ZnForm 最耗时的5个组件]:', slowestComponents.map(item => `${item.label}(${item.prop}): ${item.duration}ms`))\n\n const avgDuration = Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length)\n console.log(`[ZnForm 性能统计] 最慢: ${slowestComponents[0]?.duration || 0}ms | 最快: ${[...componentLoadTimes.value].sort((a, b) => a.duration - b.duration)[0]?.duration || 0}ms | 平均: ${avgDuration}ms`)\n }\n }\n }\n }\n\n loadNextBatch()\n }\n\n // 判断表单项是否应该渲染 - 用于懒加载过滤\n const shouldRenderItem = (item: ZnFormSchemaProps) => {\n if (!props.lazyLoad) return true\n if (!item.prop) return true\n // 组件级别未准备好时,不渲染任何表单项\n if (!componentLoadReady.value) return false\n return renderedItems.value.has(item.prop)\n }\n\n // 监听表单结构化数组,重新组装 schema\n watch(\n () => unref(getProps).schema,\n (schema = []) => {\n // 一次性收集需要删除的键\n const keysToDelete = props.includeModelKeys?.length > 0 && unref(getProps).dynamicModel\n ? new Set(Object.keys(unref(model)))\n : null\n\n // 清空缓存\n clearCache()\n\n if (props.lazyLoad) {\n // 重置已渲染项\n renderedItems.value.clear()\n // 准备懒加载项\n pendingItems.value = []\n }\n\n // 设置调试信息\n lazyLoadStatus.value.total = schema.length\n\n schema.forEach((item, index) => {\n // 设置枚举\n setEnumMap(item)\n // 级联下拉监听\n cascadeEnum(item)\n\n // 设置表单排序默认值\n item && (item.order = item.order ?? index + 2)\n\n // 初始化值\n initDefaultValue(item)\n\n // 如果需要删除多余的键,从待删除集合中移除当前存在的键\n if (keysToDelete && item.prop) {\n keysToDelete.delete(item.prop)\n // 处理特殊渲染使用的属性\n item.renderUseProp?.forEach(prop => keysToDelete.delete(prop))\n }\n\n // 如果启用懒加载且项目有prop,将其添加到待渲染队列\n if (props.lazyLoad && item.prop) {\n pendingItems.value.push(item)\n }\n })\n\n // 如果有设置保留键,将它们也从待删除集合中移除\n if (keysToDelete && props.includeModelKeys?.length) {\n props.includeModelKeys.forEach(key => keysToDelete.delete(key))\n }\n\n // 批量删除不存在的属性\n if (keysToDelete?.size) {\n const modelRef = unref(model)\n keysToDelete.forEach(key => {\n delete modelRef[key]\n })\n }\n\n // 如果不启用懒加载或在查看模式下,直接渲染所有表单项\n if (!props.lazyLoad || props.isView) {\n componentLoadReady.value = true\n\n // 记录开始和结束时间(同步渲染)\n lazyLoadStatus.value.startTime = Date.now()\n componentLoadTimes.value = []\n\n schema.forEach((item, index) => {\n if (item.prop) {\n const itemStartTime = Date.now()\n renderedItems.value.add(item.prop)\n const itemEndTime = Date.now()\n\n componentLoadTimes.value.push({\n prop: item.prop,\n label: typeof item.label === 'function' ? item.label(unref(model)) : (item.label || item.prop),\n startTime: itemStartTime,\n endTime: itemEndTime,\n duration: itemEndTime - itemStartTime,\n batchIndex: 0\n })\n }\n })\n\n lazyLoadStatus.value.endTime = Date.now()\n lazyLoadStatus.value.duration = lazyLoadStatus.value.endTime - lazyLoadStatus.value.startTime\n lazyLoadStatus.value.loaded = schema.length\n lazyLoadStatus.value.pending = 0\n\n if (props.lazyLoadDebug) {\n console.log('ZnForm Sync Render Completed:', {\n total: lazyLoadStatus.value.total,\n duration: lazyLoadStatus.value.duration + 'ms'\n })\n\n if (componentLoadTimes.value.length > 0) {\n console.log(`[ZnForm 组件加载详情] 总计 ${componentLoadTimes.value.length} 个组件`)\n const slowestComponents = [...componentLoadTimes.value].sort((a, b) => b.duration - a.duration).slice(0, 5)\n console.log('[ZnForm 最耗时的5个组件]:', slowestComponents.map(item => `${item.label}(${item.prop}): ${item.duration}ms`))\n\n const avgDuration = Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length)\n console.log(`[ZnForm 性能统计] 最慢: ${slowestComponents[0]?.duration || 0}ms | 最快: ${[...componentLoadTimes.value].sort((a, b) => a.duration - b.duration)[0]?.duration || 0}ms | 平均: ${avgDuration}ms`)\n }\n }\n }\n // 否则如果启用懒加载,需要考虑组件延时加载\n else if (pendingItems.value.length > 0) {\n // 如果设置了组件延时加载,先等待指定时间\n if (props.componentDelayLoad > 0) {\n setTimeout(() => {\n startComponentLazyLoad(schema)\n }, props.componentDelayLoad)\n } else {\n startComponentLazyLoad(schema)\n }\n }\n },\n {\n immediate: true,\n deep: true // 添加深度监听以捕获schema内部属性的变化\n }\n )\n\n // 添加一个专门监听schema中enum属性变化的watch\n watch(\n () => {\n // 返回一个包含所有schema项的enum属性的数组,这样当任何enum变化时都能触发更新\n const schema = unref(getProps).schema || []\n return schema.map(item => ({\n prop: item.prop,\n enum: item.enum\n }))\n },\n (newVal, oldVal) => {\n if (!newVal || newVal.length === 0) return\n\n // 找出发生变化的enum项\n newVal.forEach((item, index) => {\n if (item.enum !== oldVal?.[index]?.enum) {\n const schemaItem = unref(getProps).schema?.find(s => s.prop === item.prop)\n if (schemaItem) {\n // 重新设置枚举值\n setEnumMap(schemaItem)\n // 初始化默认值\n nextTick(() => {\n initDefaultValue(schemaItem)\n })\n }\n }\n })\n },\n { deep: true }\n )\n\n // 监听enumMap的变更,当enum发生变化后清除缓存\n watch(\n () => enumMap.value,\n () => {\n clearCache()\n },\n { deep: true }\n )\n\n // 使用计算属性代替排序\n const getSchemaList = computed(() => {\n return sortedSchema.value\n })\n\n // 获取每个表单的宽度\n const getComponentWidth = ({ width, props: componentProps }: ZnFormSchemaProps) => {\n const { elFormProps = {} } = unref(getProps)\n const style = componentProps?.style || { width: '100%' } // 默认宽度 100%\n if (width) return { ...style, width: getPx(width) }\n if (elFormProps.fixWidth) return { ...style, width: getPx(elFormProps.width || elFormProps.inline ? 220 : '100%') }\n return style\n }\n\n // 获取标题样式\n const getTitleFontStyle = ({ labelSize }: ZnFormSchemaProps) => {\n if (!labelSize || labelSize === 'default') return { fontSize: '16px', fontWeight: 600 }\n if (labelSize === 'small') return { fontSize: '14px', fontWeight: 600 }\n if (labelSize === 'large') return { fontSize: '18px', fontWeight: 600 }\n return {}\n }\n\n /**\n * @description 合并传入进来的栅格属性\n */\n const setGridProp = (col: Partial<ColProps> = {}) => {\n return {\n // 如果有 span,代表用户优先级更高,所以不需要默认栅格\n ...(col.span ? {} : { xs: 24, sm: 12, md: 12, lg: 12, xl: 12 }),\n ...col\n }\n }\n\n const slots = useSlots()\n\n const RenderFormWrap = () => {\n const { elFormProps, onlyRenderComponent } = unref(getProps)\n return !onlyRenderComponent ? (\n <ElForm ref={elFormRef} {...elFormProps} class={[prefixClass, { 'is-view': props.isView }]} model={unref(model)} onSubmit={(e) => e.preventDefault()}>\n {{\n default: () => {\n // 如果存在自定义插槽,则直接返回自定义插槽的 Render\n if (slots.default) return slots.default({ getComponentWidth, parseLabel, isDestroy, isHidden })\n return (\n <Fragment>\n {props.lazyLoadDebug && (\n <div style=\"background-color: #f1f1f1; padding: 5px; margin-bottom: 10px; border-radius: 4px; font-size: 12px;\">\n <div>\n 懒加载状态:\n {props.componentDelayLoad > 0 && (\n <span>组件延时: {props.componentDelayLoad}ms | </span>\n )}\n 组件状态: {componentLoadReady.value ? '已就绪' : '等待中'} |\n 已加载 {lazyLoadStatus.value.loaded}/{lazyLoadStatus.value.total} 项,剩余 {lazyLoadStatus.value.pending} 项\n </div>\n {lazyLoadStatus.value.startTime > 0 && (\n <div style=\"margin-top: 3px;\">\n 加载时间:\n {lazyLoadStatus.value.duration > 0 ? (\n <span style=\"color: #67c23a; font-weight: bold;\">\n 已完成 ({lazyLoadStatus.value.duration}ms)\n </span>\n ) : (\n <span style=\"color: #e6a23c;\">\n 加载中... ({currentLoadingTime.value}ms)\n </span>\n )}\n </div>\n )}\n {componentLoadTimes.value.length > 0 && (\n <div style=\"margin-top: 8px;\">\n <div style=\"font-weight: bold; margin-bottom: 5px;\">组件加载耗时分析 (按耗时倒序):</div>\n <div style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ddd; border-radius: 3px;\">\n <table style=\"width: 100%; border-collapse: collapse; font-size: 11px;\">\n <thead style=\"background-color: #fafafa; position: sticky; top: 0;\">\n <tr>\n <th style=\"padding: 4px 6px; text-align: left; border-bottom: 1px solid #ddd; width: 35%;\">组件标签</th>\n <th style=\"padding: 4px 6px; text-align: left; border-bottom: 1px solid #ddd; width: 25%;\">属性名</th>\n <th style=\"padding: 4px 6px; text-align: center; border-bottom: 1px solid #ddd; width: 20%;\">耗时(ms)</th>\n <th style=\"padding: 4px 6px; text-align: center; border-bottom: 1px solid #ddd; width: 20%;\">批次</th>\n </tr>\n </thead>\n <tbody>\n {sortedComponentLoadTimes.value.map((item, index) => (\n <tr key={item.prop} style={index % 2 === 0 ? 'background-color: #ffffff;' : 'background-color: #f9f9f9;'}>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; word-break: break-all;\">{item.label}</td>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; font-family: monospace; word-break: break-all;\">{item.prop}</td>\n <td style={`padding: 3px 6px; border-bottom: 1px solid #eee; text-align: center; font-weight: bold; color: ${item.duration > 10 ? '#e6a23c' : item.duration > 5 ? '#909399' : '#67c23a'};`}>\n {item.duration}\n </td>\n <td style=\"padding: 3px 6px; border-bottom: 1px solid #eee; text-align: center;\">{item.batchIndex}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div style=\"margin-top: 3px; font-size: 10px; color: #666;\">\n 统计: 总计 {componentLoadTimes.value.length} 个组件 |\n 最慢: {sortedComponentLoadTimes.value[0]?.duration || 0}ms |\n 最快: {sortedComponentLoadTimes.value[sortedComponentLoadTimes.value.length - 1]?.duration || 0}ms |\n 平均: {componentLoadTimes.value.length ? Math.round(componentLoadTimes.value.reduce((sum, item) => sum + item.duration, 0) / componentLoadTimes.value.length) : 0}ms\n </div>\n </div>\n )}\n </div>\n )}\n {RenderForm()}\n {slots.operation ? <ElFormItem>{slots.operation()}</ElFormItem> : undefined}\n </Fragment>\n )\n }\n }}\n </ElForm>\n ) : (\n sortedSchema.value\n .filter((item) => !isDestroy(item) && shouldRenderItem(item))\n .map((item) => {\n return (\n <div v-show={!isHidden(item)}>\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n </div>\n )\n })\n )\n }\n\n // 渲染 ELForm\n const RenderForm = () => {\n const { useCol, rowProps } = unref(getProps)\n // 如果需要栅格,需要包裹 ElCol\n return useCol ? (\n // 默认 gutter 20,可以被传来的 rowProps 替换\n <ElRow gutter={20} {...rowProps} style=\"width: 100%\">\n {renderFormItemWrap()}\n </ElRow>\n ) : (\n renderFormItemWrap()\n )\n }\n\n // 渲染 FormItem 上一层\n const renderFormItemWrap = () => {\n const { useCol, rowProps } = unref(getProps)\n\n return sortedSchema.value\n .filter((item) => !isDestroy(item) && shouldRenderItem(item))\n .map((item) => {\n // 如果有 title\n const el = hyphenToCamelCase(item.el) || ''\n const useDivider = el === ComponentNameEnum.EL_DIVIDER\n const Component = componentMap[el] as ReturnType<typeof defineComponent>\n\n return useDivider ? (\n <Fragment>\n <Component {...item.props}>\n <span style={getTitleFontStyle(item)}>{parseLabel(item.label)}</span>\n </Component>\n </Fragment>\n ) : useCol ? (\n // 如果需要栅格,需要包裹 ElCol\n <ElCol {...setGridProp({ ...rowProps?.col, ...item.col })} v-show={!isHidden(item)}>\n {renderFormItem(item)}\n </ElCol>\n ) : (\n renderFormItem(item)\n )\n })\n }\n\n // 存储每一个 ElFormItem 实例\n const formItemComponentsRef = ref<Record<string, FormItemInstance>>({})\n\n // 存储表单组件实例\n const znFormItemRefs = shallowRef<Record<string, InstanceType<typeof ZnFormItem>>>({})\n\n // 渲染 FormItem\n const renderFormItem = (item: ZnFormSchemaProps) => {\n let rules = item.formItem?.rules || null\n if (props.isView && props.disableRulesInView && item.formItem || isHidden(item) ) {\n //如果查看或者是隐藏的item,则去除表单验证信息\n rules = null\n }\n\n return item.hiddenLabel ? (\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n ) : (\n <ElFormItem\n v-show={!isHidden(item)}\n ref={(el: any) => (unref(formItemComponentsRef)[item.prop] = el)}\n {...(item.formItem || {})}\n prop={item.prop}\n rules={rules}\n label={parseLabel(item.label)}>\n <ZnFormItem\n ref={(el: any) => (unref(znFormItemRefs)[item.prop] = el)}\n isView={props.isView}\n column={item}\n v-model={model.value}\n style={getComponentWidth(item)}\n />\n </ElFormItem>\n )\n }\n\n type ProFormEmits = {\n register: [proFormRef?: ComponentPublicInstance | null | any, elFormRef?: FormInstance]\n validate: [prop: FormItemProp, isValid: boolean, message: string] // ElForm 自带的事件\n }\n\n export type ProFormOnEmits = ProFormEmits\n\n // 定义 emit 事件\n const emits = defineEmits([\"register\", \"validate\"])\n\n onMounted(() => {\n emits('register', unref(elFormRef)?.$parent, unref(elFormRef))\n })\n\n onUnmounted(() => {\n // 清理定时器\n if (loadingTimer.value) {\n clearInterval(loadingTimer.value)\n loadingTimer.value = null\n }\n })\n\n // 设置 form 的值\n const setValues = (data: Record<string, any> = {}) => {\n model.value = Object.assign(unref(model), data)\n }\n\n // 设置 ProForm 组件的 props\n const setProps = (props: Partial<ZnFormProps> = {}) => {\n mergeProps.value = Object.assign(unref(mergeProps), props)\n }\n\n // 设置 schema\n const setSchema = (schemaSet: FormSetProps[]) => {\n const { schema } = unref(getProps)\n for (const v of schema) {\n for (const item of schemaSet) {\n if (v.prop === item.prop) {\n setFormProp(v, item.field, item.value)\n }\n }\n }\n }\n\n // 添加 schema\n const addSchema = (formSchema: any, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const { schema } = unref(getProps) // 获取 schema 数组\n const schemaCopy = [...schema]\n if (isString(prop)) {\n // 如果传入的是一个 prop 名称\n schemaCopy.forEach((s, i) => {\n // 遍历 schema,找到对应的 prop\n if (s.prop === prop) {\n // 根据 position 决定插入到前或后\n position === 'after' ? schema.splice(i + 1, 0, formSchema) : schema.splice(i, 0, formSchema)\n }\n })\n } else if (prop !== undefined) {\n // 如果传入的是某个位置(索引)\n schema.splice(prop, 0, formSchema)\n } else {\n // 如果没有指定位置,默认添加到末尾\n schema.push(formSchema)\n }\n\n // 添加新schema后,清除缓存\n clearCache()\n\n // 如果使用懒加载,将新添加的项标记为已渲染\n if (props.lazyLoad && formSchema.prop) {\n renderedItems.value.add(formSchema.prop)\n }\n }\n\n // 删除 schema\n const delSchema = (prop: string) => {\n const { schema } = unref(getProps)\n\n const index = schema.findIndex((item) => item.prop === prop)\n if (index > -1) {\n schema.splice(index, 1)\n // 删除schema后,清除缓存\n clearCache()\n\n // 如果使用懒加载,从已渲染集合中移除\n if (props.lazyLoad) {\n renderedItems.value.delete(prop)\n }\n }\n }\n\n // 获取表单组件实例\n const getComponentExpose = (prop: string) => {\n return unref(znFormItemRefs)[prop]?.formComponentRef\n }\n\n // 获取 formItem 实例\n const getFormItemExpose = (prop: string) => {\n return unref(formItemComponentsRef)[prop]\n }\n\n defineExpose({\n form: elFormRef,\n model,\n setValues,\n setProps,\n setSchema,\n addSchema,\n delSchema,\n getComponentExpose,\n getFormItemExpose,\n getComponentWidth,\n parseLabel,\n isDestroy,\n isHidden\n })\n\n</script>\n\n"],"names":["_isSlot","s","_isVNode","Object","prototype","toString","call","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","model","sort","hash","length","String","slice","props","__props","_useModel","elFormRef","shallowRef","mergeProps","ref","getProps","computed","propsObj","assign","unref","enumMap","enumMapProps","renderedItems","Set","pendingItems","componentLoadReady","loadingTimer","updateTrigger","componentLoadTimes","performanceCache","debouncer","modelHasher","clearCache","renderCount","lastRenderTime","avgRenderTime","cacheStats","setEnumMap","getCurrentInstance","async","enum","enumValue","prop","useCacheEnum","enumMapConst","data","result","Array","isArray","console","warn","nextTick","schemaItem","schema","find","initDefaultValue","error","provide","formEnumMapKey","defaultValue","fieldNames","formConst","getFormProp","defaultValueConst","setFormProp","enumData","filter","isDefault","cascadeEnum","el","subProp","subEnum","hyphenToCamelCase","ComponentNameEnum","EL_SELECT","watch","newVal","subEnumData","formEnum","subValue","immediate","isHidden","hidden","cacheKey","isDestroy","destroy","deleteObjProperty","modelHash","parseLabel","label","sortedSchema","markRaw","a","b","order","lazyLoadStatus","total","loaded","pending","startTime","endTime","duration","currentLoadingTime","sortedComponentLoadTimes","startComponentLazyLoad","lazyLoadDebug","clearInterval","setInterval","log","componentDelayLoad","totalItems","toLocaleTimeString","initialItems","Math","min","initialLoadCount","add","some","i","startLazyLoading","batchIndex","loadNextBatch","batchStartTime","itemsToLoad","batchLoadCount","index","itemStartTime","itemEndTime","push","lazyLoadDelay","slowestComponents","map","avgDuration","round","reduce","sum","shouldRenderItem","lazyLoad","keysToDelete","includeModelKeys","dynamicModel","renderUseProp","modelRef","isView","deep","oldVal","getSchemaList","getComponentWidth","width","componentProps","elFormProps","style","getPx","fixWidth","inline","getTitleFontStyle","labelSize","fontSize","fontWeight","setGridProp","col","span","xs","sm","md","lg","xl","slots","useSlots","RenderFormWrap","onlyRenderComponent","_withDirectives","_createVNode","ZnFormItem","znFormItemRefs","column","modelValue","$event","_vShow","ElForm","_mergeProps","class","onSubmit","e","preventDefault","default","_slot","_Fragment","_createTextVNode","RenderForm","operation","ElFormItem","_slot2","useCol","rowProps","ElRow","gutter","renderFormItemWrap","_slot3","useDivider","EL_DIVIDER","Component","componentMap","ElCol","renderFormItem","formItemComponentsRef","rules","formItem","disableRulesInView","hiddenLabel","emits","__emit","onMounted","$parent","onUnmounted","setValues","__expose","form","setProps","setSchema","schemaSet","v","field","addSchema","formSchema","position","schemaCopy","isString","splice","delSchema","findIndex","getComponentExpose","formComponentRef","getFormItemExpose"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{withInstall as e}from"../../utils/install.mjs";import"./src/index.vue.mjs";import"./src/components/ZnFormV2Item.vue.mjs";export{ComponentNameEnum,formEnumMapKey}from"./src/interface/index.mjs";export{batchExecute,camelCaseToHyphen,checkFeatureSupport,createUniqueId,debounce,delay,deleteObjProperty,executeInIdle,getElementOffsetTop,getFormProp,getMemoryUsage,getObjectHash,getProp,getPx,handleNestProp,hyphenToCamelCase,isDeepEqual,isElementInViewport,isEmptyVal,isNumber,isObject,isResponsive,isShallowEqual,isString,setComponentSlots,setFormProp,setProp,throttle}from"./src/helper/index.mjs";export{useZnFormV2}from"./src/hooks/useZnFormV2.mjs";import t from"./src/index.vue2.mjs";export{default as ZnFormV2Item}from"./src/components/ZnFormV2Item.vue2.mjs";const o=e(t);export{o as ZnFormV2,o as default};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znFormV2/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport index from './src/index.vue'\n\nimport ZnFormV2Item from './src/components/ZnFormV2Item.vue'\n\nexport type { ZnFormV2Props, ProFormV2OnEmits } from './src/index.vue'\n\nexport * from './src/interface'\nexport * from './src/helper'\nexport { useZnFormV2 } from './src/hooks/useZnFormV2'\n\nexport { ZnFormV2Item }\n\nexport const ZnFormV2 = withInstall(index)\n\nexport default ZnFormV2\n"],"names":["ZnFormV2","withInstall","index"],"mappings":"+vBAaa,MAAAA,EAAWC,EAAYC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{defineComponent as e,useModel as l,ref as a,watch as d,unref as t,nextTick as o,createElementBlock as u,openBlock as c,Fragment as r,createCommentVNode as n,createBlock as s,createVNode as h,normalizeStyle as i,mergeProps as y,withCtx as p,renderSlot as m,mergeModels as k}from"vue";import{ElCheckbox as v,ElInput as f,ElTree as V}from"element-plus";var x=Object.defineProperty,b=(e,l)=>x(e,"name",{value:l,configurable:!0});const g={key:0};var q=e({name:"Tree",__name:"Tree",props:k({data:{type:Array,required:!0},nodeKey:{type:String,required:!1,default:" id"},checkValueType:{type:String,required:!1,default:"keys"},expandSelected:{type:Boolean,required:!1,default:!0},checkbox:{type:Boolean,required:!1,default:!1},search:{type:Boolean,required:!1,default:!1},select:{type:Boolean,required:!1,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const k=e,x=l(e,"modelValue"),q=a(!1),C=a(!1),K=a(!1),N=a(!0),_=a([]),T=a(""),B=a();d(q,(e=>{const l=t(B)?.store._getAllNodes();l?.forEach(e?e=>e.expanded=!0:e=>e.expanded=!1)})),d(C,(e=>{e?t(B)?.setCheckedNodes(k.data):t(B)?.setCheckedNodes([]),K.value=!1})),d(T,(e=>{t(B).filter(e)}));const S=b(((e,l)=>!e||l.label.includes(e)),"filterNode"),U=b(((e,l)=>{"nodes"===k.checkValueType?x.value=l.checkedNodes:x.value=l.checkedKeys,l.checkedKeys?.length?l.checkedKeys?.length===t(B)?.store._getAllNodes().length?(C.value=!0,K.value=!1):K.value=!0:(C.value=!1,K.value=!1)}),"handleCheck"),$=b((e=>{o((()=>{const{checkValueType:l,expandSelected:a,nodeKey:d}=k;"nodes"===l?(t(B)?.setCheckedNodes(e),a&&(_.value=e?.map((e=>e[d])))):(t(B)?.setCheckedKeys(e,!1),a&&(_.value=e))}))}),"setChecked");return d(x,(e=>e?.length&&$(e)),{immediate:!0}),(l,a)=>(c(),u(r,null,[e.checkbox?(c(),u("div",g,[h(t(v),{modelValue:q.value,"onUpdate:modelValue":a[0]||(a[0]=e=>q.value=e),label:"展开/折叠"},null,8,["modelValue"]),e.select?(c(),s(t(v),{key:0,modelValue:C.value,"onUpdate:modelValue":a[1]||(a[1]=e=>C.value=e),indeterminate:K.value,label:"全选/全不选"},null,8,["modelValue","indeterminate"])):n("v-if",!0),e.select?(c(),s(t(v),{key:1,modelValue:N.value,"onUpdate:modelValue":a[2]||(a[2]=e=>N.value=e),label:"父子联动"},null,8,["modelValue"])):n("v-if",!0)])):n("v-if",!0),e.search?(c(),s(t(f),{key:1,modelValue:T.value,"onUpdate:modelValue":a[3]||(a[3]=e=>T.value=e),style:i({width:l.$attrs.searchWidth||"98.5%"}),placeholder:l.$attrs.searchPlaceholder||"请输入关键词进行筛选"},null,8,["modelValue","style","placeholder"])):n("v-if",!0),h(t(V),y({ref_key:"treeRef",ref:B,"show-checkbox":e.select,onCheck:U,"filter-node-method":S,"check-strictly":!N.value,"default-expanded-keys":_.value},l.$attrs,{data:e.data,"node-key":e.nodeKey}),{default:p((({node:e,data:a})=>[m(l.$slots,"default",{node:e,data:a})])),_:3
|
|
2
|
+
/* FORWARDED */},16,["show-checkbox","check-strictly","default-expanded-keys","data","node-key"])],64
|
|
3
|
+
/* STABLE_FRAGMENT */))}});export{q as default};
|
|
4
|
+
//# sourceMappingURL=Tree.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.vue2.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/Tree.vue"],"sourcesContent":["<template>\n <div v-if=\"checkbox\">\n <el-checkbox v-model=\"defaultExpandAll\" label=\"展开/折叠\" />\n <el-checkbox v-if=\"select\" v-model=\"isSelectAll\" :indeterminate=\"indeterminate\" label=\"全选/全不选\" />\n <el-checkbox v-if=\"select\" v-model=\"checkStrictly\" label=\"父子联动\" />\n </div>\n <el-input\n v-if=\"search\"\n v-model=\"filterText\"\n :style=\"{ width: $attrs.searchWidth || '98.5%' }\"\n :placeholder=\"($attrs.searchPlaceholder as string) || '请输入关键词进行筛选'\"\n />\n <el-tree\n ref=\"treeRef\"\n :show-checkbox=\"select\"\n @check=\"handleCheck\"\n :filter-node-method=\"filterNode\"\n :check-strictly=\"!checkStrictly\"\n :default-expanded-keys=\"defaultExpandedKeys\"\n v-bind=\"$attrs\"\n :data=\"data\"\n :node-key=\"nodeKey\"\n >\n <template #default=\"{ node, data }\">\n <slot :node=\"node\" :data=\"data\"></slot>\n </template>\n </el-tree>\n</template>\n<script setup lang=\"ts\">\nimport { nextTick, ref, unref, watch } from 'vue'\n\nimport { ElCheckbox, ElInput, ElTree } from 'element-plus'\n\ndefineOptions({ name: 'Tree' })\n\nexport interface TreeProps {\n data: any[]; // 树数据\n nodeKey?: string; // 每一个树节点 id\n checkValueType?: 'keys' | 'nodes'; // v-model 返回的格式,keys 返回选中的节点 nodeKey,nodes 为返回选中的节点\n expandSelected?: boolean; // 初始化就有默认选中的节点时,是否展开选中节点的所有父节点\n checkbox?: boolean; // 开启工具栏\n search?: boolean; // 开启搜索功能\n select?: boolean; // 开启全选/全不选功能\n}\n\nconst props = defineProps({\n data: { type: Array, required: true },\n nodeKey: { type: String, required: false, default: ' id' },\n checkValueType: { type: String, required: false, default: 'keys' },\n expandSelected: { type: Boolean, required: false, default: true },\n checkbox: { type: Boolean, required: false, default: false },\n search: { type: Boolean, required: false, default: false },\n select: { type: Boolean, required: false, default: true }\n})\n\nconst checkedList = defineModel<any[]>()\n\nconst defaultExpandAll = ref(false) // 展开/折叠状态\nconst isSelectAll = ref(false) // 全选/全不选状态\nconst indeterminate = ref(false) // 处于全选和全不选期间的状态\nconst checkStrictly = ref(true) // 父子联动\nconst defaultExpandedKeys = ref<string[]>([]) // 默认展开的节点 nodeKey\nconst filterText = ref('') // 搜索的文本\nconst treeRef = ref<InstanceType<typeof ElTree>>()\n\nwatch(defaultExpandAll, val => {\n const nodes = unref(treeRef)?.store._getAllNodes()\n // true 全展开,false 全折叠\n if (val) nodes?.forEach(item => (item.expanded = true))\n else nodes?.forEach(item => (item.expanded = false))\n})\n\nwatch(isSelectAll, val => {\n // true 全选,false 全不选\n if (val) unref(treeRef)?.setCheckedNodes(props.data)\n else unref(treeRef)?.setCheckedNodes([])\n // 关闭处于全选和全不选期间的状态\n indeterminate.value = false\n})\n\nwatch(filterText, val => {\n unref(treeRef)!.filter(val)\n})\n\n// 过滤搜索条件\nconst filterNode = (value: string, data: Record<string, any>) => {\n if (!value) return true\n return data.label.includes(value)\n}\n\nconst handleCheck = (_: any, selected: { checkedKeys: string[]; checkedNodes: Record<string, any>[] }) => {\n if (props.checkValueType === 'nodes') checkedList.value = selected.checkedNodes\n else checkedList.value = selected.checkedKeys\n\n // 如果都没选择任何节点,则状态关闭\n if (!selected.checkedKeys?.length) {\n isSelectAll.value = false\n indeterminate.value = false\n } else if (selected.checkedKeys?.length === unref(treeRef)?.store._getAllNodes().length) {\n // 如果选择的节点等于节点数量,则代表全选\n isSelectAll.value = true\n indeterminate.value = false\n } else indeterminate.value = true\n}\n\nconst setChecked = (val: any[]) => {\n // 不用 nextTick 导致获取不到 treeRef 实例\n nextTick(() => {\n const { checkValueType, expandSelected, nodeKey } = props\n if (checkValueType === 'nodes') {\n unref(treeRef)?.setCheckedNodes(val)\n if (expandSelected) defaultExpandedKeys.value = val?.map(item => item[nodeKey])\n } else {\n unref(treeRef)?.setCheckedKeys(val, false)\n if (expandSelected) defaultExpandedKeys.value = val\n }\n })\n}\n\nwatch(checkedList, val => val?.length && setChecked(val), { immediate: true })\n</script>\n"],"names":["props","__props","checkedList","_useModel","defaultExpandAll","ref","isSelectAll","indeterminate","checkStrictly","defaultExpandedKeys","filterText","treeRef","watch","val","nodes","unref","store","_getAllNodes","forEach","item","expanded","setCheckedNodes","data","value","filter","filterNode","__name","label","includes","handleCheck","_","selected","checkValueType","checkedNodes","checkedKeys","length","setChecked","nextTick","expandSelected","nodeKey","map","setCheckedKeys","immediate"],"mappings":"y3BA6CA,MAAMA,EAAQC,EAURC,EAAcC,EAAmBF,EAAA,cAEjCG,EAAmBC,GAAI,GACvBC,EAAcD,GAAI,GAClBE,EAAgBF,GAAI,GACpBG,EAAgBH,GAAI,GACpBI,EAAsBJ,EAAc,IACpCK,EAAaL,EAAI,IACjBM,EAAUN,IAEhBO,EAAMR,GAAyBS,IAC7B,MAAMC,EAAQC,EAAMJ,IAAUK,MAAMC,eAEpBH,GAAAI,QAAZL,EAA6BM,GAAAA,EAAKC,UAAW,EACpBD,GAAAA,EAAKC,UAAW,EAAM,IAGrDR,EAAMN,GAAoBO,IAEpBA,EAAWE,EAAAJ,IAAUU,gBAAgBrB,EAAMsB,MACpCP,EAAAJ,IAAUU,gBAAgB,IAErCd,EAAcgB,OAAQ,CAAA,IAGxBX,EAAMF,GAAmBG,IACjBE,EAAAJ,GAAUa,OAAOX,EAAG,IAItB,MAAAY,EAAcC,GAAA,CAAAH,EAAeD,KAC5BC,GACED,EAAKK,MAAMC,SAASL,IAFV,cAKbM,EAAeH,GAAA,CAAAI,EAAQC,KACE,UAAzB/B,EAAMgC,eAA4B9B,EAAYqB,MAAQQ,EAASE,aAC9D/B,EAAYqB,MAAQQ,EAASG,YAG7BH,EAASG,aAAaC,OAGhBJ,EAASG,aAAaC,SAAWpB,EAAMJ,IAAUK,MAAMC,eAAekB,QAE/E7B,EAAYiB,OAAQ,EACpBhB,EAAcgB,OAAQ,KACHA,OAAQ,GAN3BjB,EAAYiB,OAAQ,EACpBhB,EAAcgB,OAAQ,EAKK,GAZX,eAeda,KAAcvB,IAElBwB,GAAS,KACP,MAAML,eAAEA,EAAAM,eAAgBA,EAAgBC,QAAAA,GAAYvC,EAC7B,UAAnBgC,GACIjB,EAAAJ,IAAUU,gBAAgBR,GAC5ByB,MAAoCf,MAAQV,GAAK2B,KAAYrB,GAAAA,EAAKoB,QAEtExB,EAAMJ,IAAU8B,eAAe5B,GAAK,GAChCyB,MAAoCf,MAAQV,GAAA,GAEnD,GAXgB,qBAcbD,EAAAV,GAAoBW,GAAAA,GAAKsB,QAAUC,EAAWvB,IAAM,CAAE6B,WAAW;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZnFormV2Item.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{defineComponent as e,useModel as l,computed as o,inject as n,ref as r,unref as t,markRaw as u,createVNode as a,createTextVNode as s,resolveComponent as i,h as m,createElementBlock as c,openBlock as d,createCommentVNode as p,toDisplayString as y,createElementVNode as f,Fragment as g,createBlock as E,normalizeStyle as _,mergeProps as L,mergeModels as b}from"vue";import"./Tree.vue.mjs";import{hyphenToCamelCase as h,getFormProp as v,setFormProp as R}from"../helper/index.mjs";import{getComponent as V}from"../helper/componentMap.mjs";import{formEnumMapKey as $,ComponentNameEnum as C}from"../interface/index.mjs";import{useRenderCheckbox as w}from"./useRenderCheckbox.mjs";import{useRenderComponent as D}from"./useRenderComponent.mjs";import{useRenderRadio as S}from"./useRenderRadio.mjs";import{useRenderSelect as I}from"./useRenderSelect.mjs";import{useLocalStorage as T}from"@vueuse/core";import M from"./Tree.vue2.mjs";var O=Object.defineProperty,j=(e,l)=>O(e,"name",{value:l,configurable:!0});const z={key:1,style:{display:"flex","align-items":"center","min-height":"32px",opacity:"0.5"}},k={style:{color:"#999","font-size":"12px"}};var F=e({name:"ZnFormV2Item",__name:"ZnFormV2Item",props:b({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(b){const O=b,F=T("znyg",{dictMap:{}}),P=l(b,"modelValue"),U=new Map,x=o((()=>{const{dictCode:e}=O.column;let l=O.column.fieldNames?.label??"label",o=O.column.fieldNames?.value??"value";return e&&(l="name",o="code"),{label:l,value:o,children:O.column.fieldNames?.children??"children",disabled:O.column.fieldNames?.disabled??"disabled"}})),N=n($,r(new Map)),A=o((()=>O.column.enum)),Y=o((()=>{const{useEnumMap:e,enumKey:l,prop:o,el:n,dictCode:r}=O.column,u=t(N),a=t(A);let s;if(r&&F&&F.value?.dictMap&&(s=F.value.dictMap[r?.toString()]??[]),e)if("function"==typeof e)s=e(u);else{const o=u.get(e);s=o?l?o[l]||[]:o:[]}if(!s)if(Array.isArray(a)&&a.length>0)s=a;else{let e=u.get(o);s=e?h(n)===C.EL_SELECT_V2?e.map((e=>({...e,label:e[t(x).label],value:e[t(x).value]}))):l?e[l]||[]:e:[]}return s||[]})),B=o((()=>{const e=t(x).label,l=t(x).value,o=t(x).children,n=h(O.column?.el);let r=O.column.props??{};const u=`formProps_${n}_${JSON.stringify(r)}_${e}_${l}_${o}`;if(U.has(u))return U.get(u);let a={...r};return n===C.EL_TREE_SELECT&&(a={...a,props:{...a.props,label:e,children:o},nodeKey:l}),n===C.EL_CASCADER&&(a={...a,props:{...a.props,label:e,value:l,children:o}}),n===C.EL_DATE_PICKER&&("datetime"===a.type&&(a={valueFormat:"YYYY-MM-DD HH:mm:ss",...a}),a=(a.type,{valueFormat:"YYYY-MM-DD",...a})),n===C.EL_TIME_PICKER&&(a={valueFormat:"HH:mm:ss",...a}),U.set(u,a),a})),q=o((()=>{const{props:{type:e,isRange:l,placeholder:o,notDefaultPlaceholder:n}={},el:r}=O.column?.props?O.column:{props:{},el:O.column?.el},t=`placeholder_${r}_${e}_${l}_${o}_${n}`;if(U.has(t))return U.get(t);let u;if(!["datetimerange","daterange","monthrange"].includes(e)&&!l||n){u={placeholder:o??(h(r)?.includes(C.EL_INPUT)?"请输入":"请选择")}}else u={rangeSeparator:"至",startPlaceholder:"开始时间",endPlaceholder:"结束时间"};return U.set(t,u),u})),H=o((()=>{const{props:{clearable:e}={},defaultValue:l}=O.column;return e??null==l})),K=o((()=>{const{render:e,renderInView:l}=O.column,o=t(O.isView);if(O.isLazyLoading&&!O.isReady)return console.log(`[ZnFormV2Item Debug] ${O.column.prop} lazy loading not ready, deferring custom render`),!1;if(console.log(`[ZnFormV2Item Debug] ${O.column.prop}:`,{render:!!e,renderInView:!!l,isView:o,el:O.column.el,isLazyLoading:O.isLazyLoading,isReady:O.isReady}),o){const o=!(!l&&!e);return console.log(`[ZnFormV2Item Debug] ${O.column.prop} shouldUseCustomRender in view mode:`,o),o}const n=!!e;return console.log(`[ZnFormV2Item Debug] ${O.column.prop} shouldUseCustomRender in edit mode:`,n),n})),Z=j((()=>{const{disabled:e}=O.column;if("boolean"==typeof e)return e;if("function"==typeof e){const l=`disabled_${O.column.prop}_${JSON.stringify(t(P))}`;if(U.has(l))return U.get(l);const o=e(t(P));return U.set(l,o),o}return!1}),"isDisabled"),G=u(e({name:"RenderSlots",props:["style","column","isView"],setup:e=>()=>{if(O.isLazyLoading&&!O.isReady)return console.log(`[RenderSlots Debug] ${e.column.prop} lazy loading not ready, showing placeholder`),a("div",{style:"min-height: 32px; opacity: 0.5;"},[s("Loading...")]);const{render:l,renderInView:o}=e.column,n=t(e.isView);console.log(`[RenderSlots Debug] ${e.column.prop}:`,{render:!!l,renderInView:!!o,isView:n,isLazyLoading:O.isLazyLoading,isReady:O.isReady});let r=null;if(r=n&&o||l,console.log(`[RenderSlots Debug] ${e.column.prop} selected renderFunction:`,!!r),!r)return null;const u={model:t(P),data:v(t(P),e.column.prop),enumData:t(Y)};try{const l=r(u);return console.log(`[RenderSlots Debug] ${e.column.prop} render result:`,l),l}catch(l){return console.error(`[RenderSlots Debug] ${e.column.prop} render error:`,l),null}}})),J=j((()=>{const e=v(t(P),O.column.prop),l=h(O.column.el);if(l!==C.EL_SELECT&&l!==C.EL_SELECT_V2)return e;const o=t(x),n=t(Y);if(O.column.props?.multiple){return n.filter((l=>e?.includes(l[o.value]))).map((e=>e[o.label])).join(",")}{const l=n.find((l=>l[o.value]===e));return l?l[o.label]:e}}),"getShowValue"),X=u(e({name:"RenderElComponents",props:["column"],setup:e=>()=>{if(t(O.isView))return a("span",null,[J()]);const l=e.column.el,o=h(l);let n=V(l);if(!n&&o&&(n=V(o)),!n)return console.warn(`未找到组件: ${l} (也尝试了 ${o})`),null;switch(o){case C.EL_SELECT:case C.EL_SELECT_V2:return I(n,t(P),e.column,t(B),t(q),t(H),Z(),t(Y),t(x));case C.EL_RADIO_GROUP:case C.EL_RADIO:case C.EL_RADIO_BUTTON:return S(n,t(P),e.column,t(B),Z(),t(Y),t(x));case C.EL_CHECKBOX_GROUP:case C.EL_Checkbox:case C.EL_CHECKBOX_BUTTON:return w(n,t(P),e.column,t(B),Z(),t(Y),t(x));default:return D(n,t(P),e.column,{...t(B),...t(q),clearable:t(H),disabled:Z()})}}})),W=u(e({name:"RenderComponent",props:["style","column"],setup:e=>()=>{const{el:l}=e.column;try{const o=i(l);return o?m(o,{modelValue:v(t(P),e.column.prop),"onUpdate:modelValue":j((l=>R(t(P),e.column.prop,l)),"onUpdate:modelValue"),...t(B),...t(q),clearable:t(H),disabled:Z(),style:e.style}):(console.warn(`未找到自定义组件: ${l}`),null)}catch(e){return console.error(`渲染自定义组件失败: ${l}`,e),null}}}));return(e,l)=>(d(),c("div",null,[p(" 调试信息 "),p("v-if",!0),p(" 懒加载占位符 "),b.isLazyLoading&&!b.isReady?(d(),c("div",z,[f("span",k,y(b.column.label||b.column.prop)+" 加载中...",1
|
|
2
|
+
/* TEXT */)])):(d(),c(g,{key:2},[K.value?(d(),E(t(G),{key:0,style:_(b.style),column:b.column,"is-view":b.isView},null,8,["style","column","is-view"])):t(h)(b.column.el)===t(C).EL_TREE?(d(),E(M,L({key:1,data:Y.value,"model-value":t(v)(P.value,b.column.prop),"onUpdate:modelValue":l[0]||(l[0]=e=>t(R)(P.value,b.column.prop,e))},{...B.value}),null,16,["data","model-value"])):t(h)(b.column.el)?.startsWith("El")?(d(),E(t(X),{key:2,column:b.column},null,8,["column"])):(d(),E(t(W),{key:3,style:_(b.style),column:b.column},null,8,["style","column"]))],64
|
|
3
|
+
/* STABLE_FRAGMENT */))]))}});export{F as default};
|
|
4
|
+
//# sourceMappingURL=ZnFormV2Item.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZnFormV2Item.vue2.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/ZnFormV2Item.vue"],"sourcesContent":["<template>\n <div>\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 v-if=\"isLazyLoading && !isReady\" style=\" display: flex; align-items: center;min-height: 32px; opacity: 0.5;\">\n <span style=\"color: #999; font-size: 12px;\">{{ column.label || column.prop }} 加载中...</span>\n </div>\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 </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.tsx'\nimport { useRenderComponent } from './useRenderComponent.tsx'\nimport { useRenderRadio } from './useRenderRadio.tsx'\nimport { useRenderSelect } from './useRenderSelect.tsx'\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 console.log(`[ZnFormV2Item Debug] ${props.column.prop} lazy loading not ready, deferring custom render`)\n return false\n }\n\n // 调试信息\n console.log(`[ZnFormV2Item Debug] ${props.column.prop}:`, {\n render: !!render,\n renderInView: !!renderInView,\n isView: currentIsView,\n el: props.column.el,\n isLazyLoading: props.isLazyLoading,\n isReady: props.isReady\n })\n\n // 在查看模式下:优先使用 renderInView,如果没有则使用 render\n if (currentIsView) {\n const result = !!(renderInView || render)\n console.log(`[ZnFormV2Item Debug] ${props.column.prop} shouldUseCustomRender in view mode:`, result)\n return result\n }\n\n // 在编辑模式下:只使用 render\n const result = !!render\n console.log(`[ZnFormV2Item Debug] ${props.column.prop} shouldUseCustomRender in edit mode:`, result)\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 console.log(`[RenderSlots Debug] ${slotProps.column.prop} lazy loading not ready, showing placeholder`)\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 console.log(`[RenderSlots Debug] ${slotProps.column.prop}:`, {\n render: !!render,\n renderInView: !!renderInView,\n isView: currentIsView,\n isLazyLoading: props.isLazyLoading,\n isReady: props.isReady\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 console.log(`[RenderSlots Debug] ${slotProps.column.prop} selected renderFunction:`, !!renderFunction)\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 console.log(`[RenderSlots Debug] ${slotProps.column.prop} render result:`, result)\n return result\n } catch (error) {\n console.error(`[RenderSlots Debug] ${slotProps.column.prop} render error:`, 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","console","log","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","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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"}
|
|
@@ -0,0 +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,c)=>{const v=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"),...s,disabled:b},{default:p((()=>v(f,c,i)),"default")})}),"useRenderCheckbox");export{u as useRenderCheckbox};
|
|
2
|
+
//# sourceMappingURL=useRenderCheckbox.mjs.map
|
|
@@ -0,0 +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 formProps: any,\n disabled: boolean,\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","formProps","disabled","columnEnum","fieldNames","renderCheckboxOptions","Component","hyphenToCamelCase","el","ComponentNameEnum","EL_CHECKBOX_BUTTON","ElCheckboxButton","ElCheckbox","map","col","_createVNode","label","value","key","h","modelValue","getFormProp","prop","setFormProp","val","default"],"mappings":"yUAKaA,MAAAA,MACXC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAwBA,GAAAA,CAACF,EAAmCC,EAAiCJ,KACjG,MAAMM,EAAYC,EAAkBP,EAAOQ,MAAQC,EAAkBC,mBAAqBC,EAAmBC,EACtGT,OAAAA,EAAWU,KAAkBC,GAClCC,EAAAT,EAAA,CAAAJ,SAEcY,EAAIV,EAAWF,UAAY,YAAWc,MACzCF,EAAIV,EAAWY,OAAMC,MACrBH,EAAIV,EAAWa,OAAMC,IACvBJ,EAAIV,EAAWa,QAAM,OAE/B,GAV2BZ,yBAc9B,OAAOc,EACLrB,EACA,CACEsB,WAAYC,EAAYtB,EAAOC,EAAOsB,MACtC,sBAAqCC,GAAAA,GAAAA,EAAYxB,EAAOC,EAAOsB,KAAME,IAA7CA,0BACrBvB,EACHC,YAEF,CACEuB,QAAepB,GAAAA,IAAAA,EAAsBF,EAAYC,EAAYJ,IAApDyB,YAEb,GAlC+B5B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as e}from"vue";import{setFormProp as o,getFormProp as r}from"../helper/index.mjs";var p=Object.defineProperty,a=(e,o)=>p(e,"name",{value:o,configurable:!0});const m=a(((p,m,l,n)=>e(p,{modelValue:r(m,l.prop,l.valueFormat),"onUpdate:modelValue":a((e=>o(m,l.prop,e)),"onUpdate:modelValue"),...n})),"useRenderComponent");export{m as useRenderComponent};
|
|
2
|
+
//# sourceMappingURL=useRenderComponent.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRenderComponent.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderComponent.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { getFormProp, setFormProp } from '../helper'\nimport type { ZnFormV2SchemaProps } from '../interface'\n\nexport const useRenderComponent = (componentName: any, model: Record<string, any>, column: ZnFormV2SchemaProps, componentProps: Record<string, any>) => {\n // 主渲染函数\n return h(componentName, {\n modelValue: getFormProp(model, column.prop, column.valueFormat),\n 'onUpdate:modelValue': (val: any) => setFormProp(model, column.prop, val),\n ...componentProps\n })\n}\n"],"names":["useRenderComponent","componentName","model","column","componentProps","h","modelValue","getFormProp","prop","valueFormat","setFormProp","val"],"mappings":"sKAIO,MAAMA,EAAqBA,GAAAA,CAACC,EAAoBC,EAA4BC,EAA6BC,IAEvGC,EAAEJ,EAAe,CACtBK,WAAYC,EAAYL,EAAOC,EAAOK,KAAML,EAAOM,aACnD,sBAAqCC,GAAAA,GAAAA,EAAYR,EAAOC,EAAOK,KAAMG,IAA7CA,0BACrBP,KAL2BJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createVNode as e,h as l}from"vue";import{ElRadioButton as a,ElRadio as o}from"element-plus";import{hyphenToCamelCase as r,setFormProp as d,getFormProp as t}from"../helper/index.mjs";import{ComponentNameEnum as n}from"../interface/index.mjs";var i=Object.defineProperty,m=(e,l)=>i(e,"name",{value:l,configurable:!0});const p=m(((i,p,u,s,f,b,c)=>{const v=m(((l,d,t)=>{const i=r(t.el)===n.EL_RADIO_BUTTON?a:o;return l.map((l=>e(i,{disabled:l[d.disabled||"disabled"],label:l[d.label],value:l[d.value],key:l[d.value]},null)))}),"renderRadioOptions");return l(i,{modelValue:t(p,u.prop),"onUpdate:modelValue":m((e=>d(p,u.prop,e)),"onUpdate:modelValue"),...s,disabled:f},{default:m((()=>v(b,c,u)),"default")})}),"useRenderRadio");export{p as useRenderRadio};
|
|
2
|
+
//# sourceMappingURL=useRenderRadio.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRenderRadio.mjs","sources":["../../../../../../../packages/components/znFormV2/src/components/useRenderRadio.tsx"],"sourcesContent":["import { h } from 'vue'\nimport { ElRadio, ElRadioButton, ElRadioGroup } 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 formProps: any,\n disabled: boolean,\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 ...formProps,\n disabled\n },\n {\n default: () => renderRadioOptions(columnEnum, fieldNames, column)\n }\n )\n}\n"],"names":["useRenderRadio","componentName","model","column","formProps","disabled","columnEnum","fieldNames","renderRadioOptions","Component","hyphenToCamelCase","el","ComponentNameEnum","EL_RADIO_BUTTON","ElRadioButton","ElRadio","map","col","_createVNode","label","value","key","h","modelValue","getFormProp","prop","setFormProp","val","default"],"mappings":"mUAKaA,MAAAA,MACXC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAqBA,GAAAA,CAACF,EAAmCC,EAAiCJ,KAC9F,MAAMM,EAAYC,EAAkBP,EAAOQ,MAAQC,EAAkBC,gBAAkBC,EAAgBC,EAEhGT,OAAAA,EAAWU,KAAaC,GAC7BC,EAAAT,EAAA,CAAAJ,SAEcY,EAAIV,EAAWF,UAAY,YAAWc,MACzCF,EAAIV,EAAWY,OAAMC,MACrBH,EAAIV,EAAWa,OAAMC,IACvBJ,EAAIV,EAAWa,QAAM,OAE/B,GAXwBZ,sBAe3B,OAAOc,EACLrB,EACA,CACEsB,WAAYC,EAAYtB,EAAOC,EAAOsB,MACtC,sBAAqCC,GAAAA,GAAAA,EAAYxB,EAAOC,EAAOsB,KAAME,IAA7CA,0BACrBvB,EACHC,YAEF,CACEuB,QAAepB,GAAAA,IAAAA,EAAmBF,EAAYC,EAAYJ,IAAjDyB,YAEb,GAnC4B5B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{unref as e,createVNode as l,h as a}from"vue";import{ElOptionGroup as t,ElOption as o}from"element-plus";import{setFormProp as r,getFormProp as n}from"../helper/index.mjs";var p=Object.defineProperty,u=(e,l)=>p(e,"name",{value:l,configurable:!0});const d=u(((p,d,m,i,f,s,b,c,v)=>{const y=u(((a,o)=>e(a).map((e=>e?.options?.length?l(t,{label:e[o.label],key:e[o.value]},{default:u((()=>e.options.map((e=>O(e,o)))),"default")}):O(e,o)))),"renderSelectOptions"),O=u(((e,a)=>l(o,{label:e[a.label],value:e[a.value],key:e[a.value]},null)),"renderSelectOptionItem");return a(p,{modelValue:n(d,m.prop),"onUpdate:modelValue":u((e=>r(d,m.prop,e)),"onUpdate:modelValue"),...i,...f,clearable:s,disabled:b},{default:u((()=>y(c,v)),"default")})}),"useRenderSelect");export{d as useRenderSelect};
|
|
2
|
+
//# sourceMappingURL=useRenderSelect.mjs.map
|
|
@@ -0,0 +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 ...formProps,\n ...placeholder,\n clearable,\n disabled\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"],"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,0BACrB1B,KACAC,EACHC,YACAC,YAEF,CACEc,QAASA,GAAAA,IAAMX,EAAoBF,EAAYC,IAAtCY,YAEb,GAhD6BrB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import{ElInput as e,ElUpload as l,ElDivider as t,ElTransfer as r,ElColorPicker as o,ElRate as c,ElAutocomplete as i,ElCheckboxGroup as a,ElCheckbox as E,ElRadioGroup as n,ElRadio as p,ElSlider as u,ElSwitch as d,ElTimeSelect as s,ElTimePicker as m,ElDatePicker as k,ElCascader as b,ElTreeSelect as h,ElSelectV2 as x,ElSelect as C,ElInputNumber as S}from"element-plus";var T=Object.defineProperty,f=(e,l)=>T(e,"name",{value:l,configurable:!0});const g={ElInput:e,ElInputNumber:S,ElSelect:C,ElSelectV2:x,ElTree:h,
|
|
2
|
+
// 暂时使用 ElTreeSelect 替代
|
|
3
|
+
ElTreeSelect:h,ElCascader:b,ElDatePicker:k,ElTimePicker:m,ElTimeSelect:s,ElSwitch:d,ElSlider:u,ElRadio:p,ElRadioGroup:n,ElRadioButton:n,ElCheckbox:E,ElCheckboxGroup:a,ElCheckboxButton:a,ElAutocomplete:i,ElRate:c,ElColorPicker:o,ElTransfer:r,ElDivider:t,ElUpload:l,WangEditor:e,
|
|
4
|
+
// 暂时使用 ElInput 替代
|
|
5
|
+
Tinymce:e,
|
|
6
|
+
// 暂时使用 ElInput 替代
|
|
7
|
+
UserSelect:e,
|
|
8
|
+
// 暂时使用 ElInput 替代
|
|
9
|
+
IconPicker:e,
|
|
10
|
+
// 暂时使用 ElInput 替代
|
|
11
|
+
Test:e,
|
|
12
|
+
// 暂时使用 ElInput 替代
|
|
13
|
+
ZnChart:e},v={"el-input":e,"el-input-number":S,"el-select":C,"el-select-v2":x,"el-tree":h,
|
|
14
|
+
// 暂时使用 ElTreeSelect 替代
|
|
15
|
+
"el-tree-select":h,"el-cascader":b,"el-date-picker":k,"el-time-picker":m,"el-time-select":s,"el-switch":d,"el-slider":u,"el-radio":p,"el-radio-group":n,"el-radio-button":n,"el-checkbox":E,"el-checkbox-group":a,"el-checkbox-button":a,"el-autocomplete":i,"el-rate":c,"el-color-picker":o,"el-transfer":r,"el-divider":t,"el-upload":l,test:e,
|
|
16
|
+
// 暂时使用 ElInput 替代
|
|
17
|
+
"zn-chart":e},P={...g,
|
|
18
|
+
// PascalCase 格式
|
|
19
|
+
...v},R=f((e=>P[e]),"getComponent");export{g as baseComponentMap,P as componentMap,R as getComponent,v as kebabCaseMap};
|
|
20
|
+
//# sourceMappingURL=componentMap.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentMap.mjs","sources":["../../../../../../../packages/components/znFormV2/src/helper/componentMap.ts"],"sourcesContent":["import {\n ElAutocomplete,\n ElCascader,\n ElCheckbox,\n ElCheckboxGroup,\n ElColorPicker,\n ElDatePicker,\n ElDivider,\n ElInput,\n ElInputNumber,\n ElRadio,\n ElRadioGroup,\n ElRate,\n ElSelect,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimePicker,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload\n} from 'element-plus'\nimport type { Component } from 'vue'\n// import Tree from '../components/Tree.vue'\n// import Test from '../components/Test.vue'\n// import ZnChart from '../../../znChart'\n\nimport { type PascalCaseComponentName } from '../interface'\n\n// 基础组件映射表 (PascalCase)\nconst baseComponentMap: Record<PascalCaseComponentName, Component> = {\n ElInput,\n ElInputNumber,\n ElSelect,\n ElSelectV2,\n ElTree: ElTreeSelect, // 暂时使用 ElTreeSelect 替代\n ElTreeSelect,\n ElCascader,\n ElDatePicker,\n ElTimePicker,\n ElTimeSelect,\n ElSwitch,\n ElSlider,\n ElRadio,\n ElRadioGroup,\n ElRadioButton: ElRadioGroup,\n ElCheckbox,\n ElCheckboxGroup,\n ElCheckboxButton: ElCheckboxGroup,\n ElAutocomplete,\n ElRate,\n ElColorPicker,\n ElTransfer,\n ElDivider,\n ElUpload,\n WangEditor: ElInput, // 暂时使用 ElInput 替代\n Tinymce: ElInput, // 暂时使用 ElInput 替代\n UserSelect: ElInput, // 暂时使用 ElInput 替代\n IconPicker: ElInput, // 暂时使用 ElInput 替代\n Test: ElInput, // 暂时使用 ElInput 替代\n ZnChart: ElInput // 暂时使用 ElInput 替代\n}\n\n// 创建 kebab-case 格式的映射表\nconst kebabCaseMap: Record<string, Component> = {\n 'el-input': ElInput,\n 'el-input-number': ElInputNumber,\n 'el-select': ElSelect,\n 'el-select-v2': ElSelectV2,\n 'el-tree': ElTreeSelect, // 暂时使用 ElTreeSelect 替代\n 'el-tree-select': ElTreeSelect,\n 'el-cascader': ElCascader,\n 'el-date-picker': ElDatePicker,\n 'el-time-picker': ElTimePicker,\n 'el-time-select': ElTimeSelect,\n 'el-switch': ElSwitch,\n 'el-slider': ElSlider,\n 'el-radio': ElRadio,\n 'el-radio-group': ElRadioGroup,\n 'el-radio-button': ElRadioGroup,\n 'el-checkbox': ElCheckbox,\n 'el-checkbox-group': ElCheckboxGroup,\n 'el-checkbox-button': ElCheckboxGroup,\n 'el-autocomplete': ElAutocomplete,\n 'el-rate': ElRate,\n 'el-color-picker': ElColorPicker,\n 'el-transfer': ElTransfer,\n 'el-divider': ElDivider,\n 'el-upload': ElUpload,\n test: ElInput, // 暂时使用 ElInput 替代\n 'zn-chart': ElInput // 暂时使用 ElInput 替代\n}\n\n// 合并两个映射表,kebab-case 优先\nconst componentMap: Record<string, Component> = {\n ...baseComponentMap, // PascalCase 格式\n ...kebabCaseMap // kebab-case 格式 (优先级更高)\n}\n\n/**\n * 获取组件,支持两种格式\n * @param componentName 组件名称,支持 kebab-case (el-input) 或 PascalCase (ElInput)\n * @returns Vue组件\n */\nexport const getComponent = (componentName: string): Component | undefined => {\n // 直接从合并后的映射表中查找\n return componentMap[componentName]\n}\n\nexport { componentMap, baseComponentMap, kebabCaseMap }\n"],"names":["baseComponentMap","ElInput","ElInputNumber","ElSelect","ElSelectV2","ElTree","ElTreeSelect","ElCascader","ElDatePicker","ElTimePicker","ElTimeSelect","ElSwitch","ElSlider","ElRadio","ElRadioGroup","ElRadioButton","ElCheckbox","ElCheckboxGroup","ElCheckboxButton","ElAutocomplete","ElRate","ElColorPicker","ElTransfer","ElDivider","ElUpload","WangEditor","Tinymce","UserSelect","IconPicker","Test","ZnChart","kebabCaseMap","test","componentMap","getComponent","componentName"],"mappings":"2bA+BA,MAAMA,EAA+D,CACnEC,UACAC,gBACAC,WACAC,aACAC,OAAQC;;AACRA,eACAC,aACAC,eACAC,eACAC,eACAC,WACAC,WACAC,UACAC,eACAC,cAAeD,EACfE,aACAC,kBACAC,iBAAkBD,EAClBE,iBACAC,SACAC,gBACAC,aACAC,YACAC,WACAC,WAAYxB;;AACZyB,QAASzB;;AACT0B,WAAY1B;;AACZ2B,WAAY3B;;AACZ4B,KAAM5B;;AACN6B,QAAS7B,GAIL8B,EAA0C,CAC9C,WAAY9B,EACZ,kBAAmBC,EACnB,YAAaC,EACb,eAAgBC,EAChB,UAAWE;;AACX,iBAAkBA,EAClB,cAAeC,EACf,iBAAkBC,EAClB,iBAAkBC,EAClB,iBAAkBC,EAClB,YAAaC,EACb,YAAaC,EACb,WAAYC,EACZ,iBAAkBC,EAClB,kBAAmBA,EACnB,cAAeE,EACf,oBAAqBC,EACrB,qBAAsBA,EACtB,kBAAmBE,EACnB,UAAWC,EACX,kBAAmBC,EACnB,cAAeC,EACf,aAAcC,EACd,YAAaC,EACbQ,KAAM/B;;AACN,WAAYA,GAIRgC,EAA0C,IAC3CjC;;GACA+B,GAQQG,KAAgBC,GAEpBF,EAAaE,IAFM"}
|