fix: dependencies访问extendApi

This commit is contained in:
allen
2026-04-15 14:42:21 +08:00
parent 33e2582f60
commit d69455e8ef
3 changed files with 40 additions and 21 deletions

View File

@@ -32,19 +32,13 @@ function resolveValueByFieldName(
return get(values, fieldName); return get(values, fieldName);
} }
export default function useDependencies( export default function useDependencies(
getDependencies: () => FormItemDependencies | undefined, getDependencies: () => FormItemDependencies | undefined,
) { ) {
const values = useFormValues(); const values = useFormValues();
const formRenderProps = injectRenderFormProps();
const [extendApi] = injectFormProps(); const [extendApi] = injectFormProps();
const formRenderProps = injectRenderFormProps();
// 在 dependencies 里提供访问extendApi的能力
const controller: ExtendedFormApi = isRef(extendApi)
? (extendApi.value.formApi as ExtendedFormApi)
: (extendApi.formApi as ExtendedFormApi);
const formApi = formRenderProps.form; const formApi = formRenderProps.form;
@@ -56,6 +50,19 @@ export default function useDependencies(
throw new Error('useDependencies should be used within <VbenForm>'); throw new Error('useDependencies should be used within <VbenForm>');
} }
// 在 dependencies 里提供访问extendApi的能力
const getController = (): ExtendedFormApi => {
const controller = isRef(extendApi)
? extendApi.value.formApi
: extendApi.formApi;
if (!controller) {
throw new Error('formApi is required in useDependencies');
}
return controller;
};
const isIf = ref(true); const isIf = ref(true);
const isDisabled = ref(false); const isDisabled = ref(false);
const isShow = ref(true); const isShow = ref(true);
@@ -101,7 +108,7 @@ export default function useDependencies(
const formValues = values.value; const formValues = values.value;
if (isFunction(whenIf)) { if (isFunction(whenIf)) {
isIf.value = !!(await whenIf(formValues, formApi, controller)); isIf.value = !!(await whenIf(formValues, formApi, getController()));
// 不渲染 // 不渲染
if (!isIf.value) return; if (!isIf.value) return;
} else if (isBoolean(whenIf)) { } else if (isBoolean(whenIf)) {
@@ -111,7 +118,7 @@ export default function useDependencies(
// 2. 判断show如果show为false则隐藏 // 2. 判断show如果show为false则隐藏
if (isFunction(show)) { if (isFunction(show)) {
isShow.value = !!(await show(formValues, formApi, controller)); isShow.value = !!(await show(formValues, formApi, getController()));
} else if (isBoolean(show)) { } else if (isBoolean(show)) {
isShow.value = show; isShow.value = show;
} }
@@ -120,26 +127,34 @@ export default function useDependencies(
dynamicComponentProps.value = await componentProps( dynamicComponentProps.value = await componentProps(
formValues, formValues,
formApi, formApi,
controller, getController(),
); );
} }
if (isFunction(rules)) { if (isFunction(rules)) {
dynamicRules.value = await rules(formValues, formApi, controller); dynamicRules.value = await rules(formValues, formApi, getController());
} }
if (isFunction(disabled)) { if (isFunction(disabled)) {
isDisabled.value = !!(await disabled(formValues, formApi, controller)); isDisabled.value = !!(await disabled(
formValues,
formApi,
getController(),
));
} else if (isBoolean(disabled)) { } else if (isBoolean(disabled)) {
isDisabled.value = disabled; isDisabled.value = disabled;
} }
if (isFunction(required)) { if (isFunction(required)) {
isRequired.value = !!(await required(formValues, formApi, controller)); isRequired.value = !!(await required(
formValues,
formApi,
getController(),
));
} }
if (isFunction(trigger)) { if (isFunction(trigger)) {
trigger(formValues, formApi, controller); trigger(formValues, formApi, getController());
} }
}, },
{ deep: true, immediate: true }, { deep: true, immediate: true },

View File

@@ -103,16 +103,17 @@ function resetValues() {
function updateValues( function updateValues(
values: Recordable<CollapsibleParamSchema['defaultValue']>, values: Recordable<CollapsibleParamSchema['defaultValue']>,
) { ) {
const newValue = {} as Recordable<CollapsibleParamSchema['defaultValue']>; const allowedKeys = new Set(props.params.map((param) => param.key));
const patch = {} as Recordable<CollapsibleParamSchema['defaultValue']>;
for (const key in values) { for (const key in values) {
if (!Object.hasOwn(values, key)) continue; if (!Object.hasOwn(values, key)) continue;
if (!Object.hasOwn(modelValue.value, key)) continue; if (!allowedKeys.has(key)) continue;
newValue[key] = values[key]; patch[key] = values[key];
modelValue.value = { ...modelValue.value, ...newValue };
} }
modelValue.value = { ...modelValue.value, ...patch };
} }
watch( watch(

View File

@@ -38,7 +38,7 @@ function getNumberValidator(key: string, limit?: [number?, number?]) {
} }
if (limit[1] !== undefined) { if (limit[1] !== undefined) {
validator = validator.max(limit[1], { validator = validator.max(limit[1], {
message: `${key} 值不能大于${limit[0]}`, message: `${key} 值不能大于${limit[1]}`,
}); });
} }
} }
@@ -198,7 +198,10 @@ const [BaseForm, baseFormApi] = useVbenForm({
save_steps: 80, save_steps: 80,
}); });
} else { } else {
paramsRef?.updateValues?.({ calib_steps: null }); paramsRef?.updateValues?.({
calib_steps: null,
micro_batch_size: 8,
});
} }
}, },
rules(values) { rules(values) {