diff --git a/packages/effects/plugins/src/vxe-table/init.ts b/packages/effects/plugins/src/vxe-table/init.ts index 48b5044d5..d92136ec6 100644 --- a/packages/effects/plugins/src/vxe-table/init.ts +++ b/packages/effects/plugins/src/vxe-table/init.ts @@ -43,19 +43,19 @@ function normalizeVxeLocale>(localeModule: T) { ) as T; } -export const useTableForm = ((...args: any[]) => { +export function useTableForm(...args: any[]) { const pluginsOptions = injectPluginsOptions(); + const contextFormFactory = pluginsOptions?.form?.useVbenForm; - if (!tableFormFactory) { - if (pluginsOptions?.form?.useVbenForm) { - tableFormFactory = pluginsOptions.form.useVbenForm; - } else { - throw new Error('useTableForm is not initialized'); - } + const factory = tableFormFactory || contextFormFactory; + if (!factory) { + throw new Error( + 'useTableForm is not initialized. Please provide useVbenForm via setupVbenVxeTable() or providePluginsOptions()', + ); } - return tableFormFactory(...args); -}); + return factory(...args); +} // 部分组件,如果没注册,vxe-table 会报错,这里实际没用组件,只是为了不报错,同时可以减少打包体积 const createVirtualComponent = (name = '') => { @@ -109,12 +109,10 @@ export function setupVbenVxeTable(setupOptions: SetupVxeTable) { initVxeTable(); - const pluginsOptions = injectPluginsOptions(); - const useVbenFormFromContext = pluginsOptions?.form?.useVbenForm; - - // 优先级:参数传入 > context 注入 - tableFormFactory = useVbenFormFromParam || useVbenFormFromContext; - + // 优先使用参数传入的 useVbenForm,context 注入在 useTableForm 中获取 + if (useVbenFormFromParam) { + tableFormFactory = useVbenFormFromParam; + } const { isDark, locale } = usePreferences(); const localMap = { diff --git a/packages/effects/plugins/src/vxe-table/types.ts b/packages/effects/plugins/src/vxe-table/types.ts index 8e56ce418..49846b274 100644 --- a/packages/effects/plugins/src/vxe-table/types.ts +++ b/packages/effects/plugins/src/vxe-table/types.ts @@ -1,19 +1,18 @@ import type { VxeGridListeners, - VxeGridPropTypes, VxeGridProps as VxeTableGridProps, - VxeUIExport, -} from 'vxe-table'; - -import type { Ref } from 'vue'; + VxeGridPropTypes, + VxeUIExport +} from "vxe-table"; -import type { ClassType, DeepPartial } from '@vben/types'; +import type { Ref } from "vue"; -import type { BaseFormComponentType, VbenFormProps } from '@vben-core/form-ui'; +import type { ClassType, DeepPartial } from "@vben/types"; -import type { VxeGridApi } from './api'; +import type { BaseFormComponentType, VbenFormProps } from "@vben-core/form-ui"; +import { useVbenForm } from "@vben-core/form-ui"; -import { useVbenForm } from '@vben-core/form-ui'; +import type { VxeGridApi } from "./api"; export interface VxePaginationInfo { currentPage: number; @@ -95,5 +94,5 @@ export type ExtendedVxeGridApi< export interface SetupVxeTable { configVxeTable: (ui: VxeUIExport) => void; - useVbenForm: typeof useVbenForm; + useVbenForm?: typeof useVbenForm; }