Przeglądaj źródła

fix: fix Nested Objects dependencies not effective (#7345)

ming4762 4 miesięcy temu
rodzic
commit
c48943bc67

+ 20 - 2
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<string, any>,
+  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);
     });
   });