|
@@ -11,7 +11,7 @@ import type { Recordable } from '@vben-core/typings';
|
|
|
|
|
|
import type { FormActions, FormSchema, VbenFormProps } from './types';
|
|
import type { FormActions, FormSchema, VbenFormProps } from './types';
|
|
|
|
|
|
-import { toRaw } from 'vue';
|
|
|
|
|
|
+import { isRef, toRaw } from 'vue';
|
|
|
|
|
|
import { Store } from '@vben-core/shared/store';
|
|
import { Store } from '@vben-core/shared/store';
|
|
import {
|
|
import {
|
|
@@ -100,9 +100,26 @@ export class FormApi {
|
|
getFieldComponentRef<T = ComponentPublicInstance>(
|
|
getFieldComponentRef<T = ComponentPublicInstance>(
|
|
fieldName: string,
|
|
fieldName: string,
|
|
): T | undefined {
|
|
): T | undefined {
|
|
- return this.componentRefMap.has(fieldName)
|
|
|
|
- ? (this.componentRefMap.get(fieldName) as T)
|
|
|
|
|
|
+ let target = this.componentRefMap.has(fieldName)
|
|
|
|
+ ? (this.componentRefMap.get(fieldName) as ComponentPublicInstance)
|
|
: undefined;
|
|
: undefined;
|
|
|
|
+ if (
|
|
|
|
+ target &&
|
|
|
|
+ target.$.type.name === 'AsyncComponentWrapper' &&
|
|
|
|
+ target.$.subTree.ref
|
|
|
|
+ ) {
|
|
|
|
+ if (Array.isArray(target.$.subTree.ref)) {
|
|
|
|
+ if (
|
|
|
|
+ target.$.subTree.ref.length > 0 &&
|
|
|
|
+ isRef(target.$.subTree.ref[0]?.r)
|
|
|
|
+ ) {
|
|
|
|
+ target = target.$.subTree.ref[0]?.r.value as ComponentPublicInstance;
|
|
|
|
+ }
|
|
|
|
+ } else if (isRef(target.$.subTree.ref.r)) {
|
|
|
|
+ target = target.$.subTree.ref.r.value as ComponentPublicInstance;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return target as T;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|