【issue/9612】updateSchema中的函数执行两次 ---

This commit is contained in:
JEECG 2026-05-13 12:17:13 +08:00
parent b580dbfa36
commit dbeffc47ea
2 changed files with 28 additions and 18 deletions

View File

@ -19,6 +19,25 @@ interface UseFormActionContext {
schemaRef: Ref<FormSchema[]>;
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({
emit,
getProps,
@ -201,7 +220,14 @@ export function useFormEvents({
updateData.forEach((item) => {
unref(getSchema).forEach((val) => {
if (val.field === item.field) {
const newSchema = deepMerge(val, item);
// update-begin-author:liaozhiyang date:2026-05-12 for:issue/9612updateSchema
const { componentProps: itemCp, ...restItem } = item as any;
const newSchema = deepMerge(val, restItem);
if (Reflect.has(item, 'componentProps')) {
//issues/7940componentPropsupdateSchema
newSchema.componentProps = mergeComponentProps(val.componentProps, itemCp);
}
// update-end-author:liaozhiyang date:2026-05-12 for:issue/9612updateSchema
schema.push(newSchema as FormSchema);
} else {
schema.push(val);

View File

@ -45,23 +45,7 @@ export function deepMerge<T = any>(src: any = {}, target: any = {}): T {
if (isObject(src[key]) && isObject(target[key])) {
src[key] = deepMerge(src[key], target[key]);
} else {
// : issues/7940componentPropsupdateSchema
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];
}
src[key] = target[key];
}
}
return src;