diff --git a/jeecgboot-vue3/src/utils/index.ts b/jeecgboot-vue3/src/utils/index.ts index 9789c205..eebcbb9b 100644 --- a/jeecgboot-vue3/src/utils/index.ts +++ b/jeecgboot-vue3/src/utils/index.ts @@ -3,7 +3,7 @@ import type { App, Plugin } from 'vue'; import type { FormSchema } from "@/components/Form"; import { unref } from 'vue'; -import { isObject } from '/@/utils/is'; +import { isObject, isFunction } from '/@/utils/is'; import Big from 'big.js'; // update-begin--author:sunjianlei---date:20220408---for: 【VUEN-656】配置外部网址打不开,原因是带了#号,需要替换一下 export const URL_HASH_TAB = `__AGWE4H__HASH__TAG__PWHRG__`; @@ -41,7 +41,28 @@ export function deepMerge(src: any = {}, target: any = {}): T { let key: string; for (key in target) { // update-begin--author:liaozhiyang---date:20240329---for:【QQYUN-7872】online表单label较长优化 - src[key] = isObject(src[key]) && isObject(target[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]); + if (isObject(src[key]) && isObject(target[key])) { + src[key] = deepMerge(src[key], target[key]); + } else { + // update-begin--author:liaozhiyang---date:20250318---for:【issues/7940】componentProps写成函数形式时,updateSchema写成对象时,参数没合并 + try { + if (isFunction(src[key]) && isObject(src[key]()) && isObject(target[key])) { + // src[key]是函数且返回对象,且target[key]是对象 + src[key] = deepMerge(src[key](), target[key]); + } else if (isObject(src[key]) && isFunction(target[key]) && isObject(target[key]())) { + // target[key]是函数且返回对象,且src[key]是对象 + src[key] = deepMerge(src[key], target[key]()); + } else if (isFunction(src[key]) && isFunction(target[key]) && isObject(src[key]()) && isObject(target[key]())) { + // src[key]是函数且返回对象,target[key]是函数且返回对象 + src[key] = deepMerge(src[key](), target[key]()); + } else { + src[key] = target[key]; + } + } catch (error) { + src[key] = target[key]; + } + // update-end--author:liaozhiyang---date:20250318---for:【issues/7940】componentProps写成函数形式时,updateSchema写成对象时,参数没合并 + } // update-end--author:liaozhiyang---date:20240329---for:【QQYUN-7872】online表单label较长优化 } return src;