diff --git a/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts b/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts index cec74818a..8a3583bdf 100644 --- a/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts +++ b/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts @@ -6,12 +6,30 @@ import type { import { computed, ref, watch } from 'vue'; -import { isBoolean, isFunction } from '@vben-core/shared/utils'; +import { get, isBoolean, isFunction } from '@vben-core/shared/utils'; import { useFormValues } from 'vee-validate'; import { injectRenderFormProps } from './context'; +/** + * 解析Nested Objects对应的字段值 + * @param values 表单值 + * @param fieldName 字段名 + */ +function resolveValueByFieldName( + values: Record, + fieldName: string, +) { + // vee-validate:[] 表示禁用嵌套 + if (fieldName.startsWith('[') && fieldName.endsWith(']')) { + const rawKey = fieldName.slice(1, -1); + return values[rawKey]; + } + + return get(values, fieldName); +} + export default function useDependencies( getDependencies: () => FormItemDependencies | undefined, ) { @@ -37,7 +55,7 @@ export default function useDependencies( // 该字段可能会被多个字段触发 const triggerFields = getDependencies()?.triggerFields ?? []; return triggerFields.map((dep) => { - return values.value[dep]; + return resolveValueByFieldName(values.value, dep); }); });