diff --git a/packages/@core/ui-kit/form-ui/src/form-api.ts b/packages/@core/ui-kit/form-ui/src/form-api.ts index 0ae8ed77..e097a465 100644 --- a/packages/@core/ui-kit/form-ui/src/form-api.ts +++ b/packages/@core/ui-kit/form-ui/src/form-api.ts @@ -11,7 +11,7 @@ import type { Recordable } from '@vben-core/typings'; import type { FormActions, FormSchema, VbenFormProps } from './types'; -import { toRaw } from 'vue'; +import { isRef, toRaw } from 'vue'; import { Store } from '@vben-core/shared/store'; import { @@ -100,9 +100,26 @@ export class FormApi { getFieldComponentRef( fieldName: string, ): 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; + 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; } /** diff --git a/packages/stores/src/modules/tabbar.ts b/packages/stores/src/modules/tabbar.ts index 17215a5e..5b892b66 100644 --- a/packages/stores/src/modules/tabbar.ts +++ b/packages/stores/src/modules/tabbar.ts @@ -208,7 +208,7 @@ export const useTabbarStore = defineStore('core-tabbar', { const keys: string[] = []; for (const key of closeKeys) { - if (key !== tab.key) { + if (key !== getTabKeyFromTab(tab)) { const closeTab = this.tabs.find( (item) => getTabKeyFromTab(item) === key, ); diff --git a/playground/src/views/examples/form/api.vue b/playground/src/views/examples/form/api.vue index e367cb85..a7e15a08 100644 --- a/playground/src/views/examples/form/api.vue +++ b/playground/src/views/examples/form/api.vue @@ -134,7 +134,7 @@ function handleClick( } case 'componentRef': { // 获取下拉组件的实例,并调用它的focus方法 - formApi.getFieldComponentRef('fieldOptions')?.focus(); + formApi.getFieldComponentRef('fieldOptions')?.focus?.(); break; } case 'disabled': { diff --git a/playground/src/views/system/menu/data.ts b/playground/src/views/system/menu/data.ts index ee787e50..75190b4a 100644 --- a/playground/src/views/system/menu/data.ts +++ b/playground/src/views/system/menu/data.ts @@ -11,7 +11,7 @@ export function getMenuTypeOptions() { value: 'catalog', }, { color: 'default', label: $t('system.menu.typeMenu'), value: 'menu' }, - { color: 'error', label: $t('system.menu.typeButton'), value: 'action' }, + { color: 'error', label: $t('system.menu.typeButton'), value: 'button' }, { color: 'success', label: $t('system.menu.typeEmbedded'),