mirror of
https://github.com/jeecgboot/JeecgBoot.git
synced 2026-05-20 15:33:56 +00:00
【issue/9612】updateSchema中的函数执行两次 ---
This commit is contained in:
parent
b580dbfa36
commit
dbeffc47ea
@ -19,6 +19,25 @@ interface UseFormActionContext {
|
|||||||
schemaRef: Ref<FormSchema[]>;
|
schemaRef: Ref<FormSchema[]>;
|
||||||
handleFormValues: Fn;
|
handleFormValues: Fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mergeComponentProps(srcProps: any, targetProps: any) {
|
||||||
|
if (targetProps == undefined) return srcProps;
|
||||||
|
if (srcProps == undefined) return targetProps;
|
||||||
|
if (isObject(srcProps) && isObject(targetProps)) {
|
||||||
|
return deepMerge(cloneDeep(srcProps), targetProps);
|
||||||
|
}
|
||||||
|
if (isFunction(srcProps) && isObject(targetProps)) {
|
||||||
|
return (ctx: any) => ({ ...(srcProps(ctx) ?? {}), ...targetProps });
|
||||||
|
}
|
||||||
|
if (isObject(srcProps) && isFunction(targetProps)) {
|
||||||
|
return (ctx: any) => ({ ...srcProps, ...(targetProps(ctx) ?? {}) });
|
||||||
|
}
|
||||||
|
if (isFunction(srcProps) && isFunction(targetProps)) {
|
||||||
|
return (ctx: any) => ({ ...(srcProps(ctx) ?? {}), ...(targetProps(ctx) ?? {}) });
|
||||||
|
}
|
||||||
|
return targetProps;
|
||||||
|
}
|
||||||
|
|
||||||
export function useFormEvents({
|
export function useFormEvents({
|
||||||
emit,
|
emit,
|
||||||
getProps,
|
getProps,
|
||||||
@ -201,7 +220,14 @@ export function useFormEvents({
|
|||||||
updateData.forEach((item) => {
|
updateData.forEach((item) => {
|
||||||
unref(getSchema).forEach((val) => {
|
unref(getSchema).forEach((val) => {
|
||||||
if (val.field === item.field) {
|
if (val.field === item.field) {
|
||||||
const newSchema = deepMerge(val, item);
|
// update-begin-author:liaozhiyang date:2026-05-12 for:【issue/9612】updateSchema中的函数执行两次
|
||||||
|
const { componentProps: itemCp, ...restItem } = item as any;
|
||||||
|
const newSchema = deepMerge(val, restItem);
|
||||||
|
if (Reflect.has(item, 'componentProps')) {
|
||||||
|
//【issues/7940】componentProps写成函数形式时,updateSchema写成对象时,参数没合并
|
||||||
|
newSchema.componentProps = mergeComponentProps(val.componentProps, itemCp);
|
||||||
|
}
|
||||||
|
// update-end-author:liaozhiyang date:2026-05-12 for:【issue/9612】updateSchema中的函数执行两次
|
||||||
schema.push(newSchema as FormSchema);
|
schema.push(newSchema as FormSchema);
|
||||||
} else {
|
} else {
|
||||||
schema.push(val);
|
schema.push(val);
|
||||||
|
|||||||
@ -45,23 +45,7 @@ export function deepMerge<T = any>(src: any = {}, target: any = {}): T {
|
|||||||
if (isObject(src[key]) && isObject(target[key])) {
|
if (isObject(src[key]) && isObject(target[key])) {
|
||||||
src[key] = deepMerge(src[key], target[key]);
|
src[key] = deepMerge(src[key], target[key]);
|
||||||
} else {
|
} else {
|
||||||
// 代码逻辑说明: 【issues/7940】componentProps写成函数形式时,updateSchema写成对象时,参数没合并
|
src[key] = target[key];
|
||||||
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];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return src;
|
return src;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user