Преглед на файлове

refactor(vxe-table): 重构 useTableForm 函数实现并优化初始化逻辑

- 将 useTableForm 从箭头函数改为普通函数声明
- 简化表单工厂函数的获取逻辑,支持上下文注入
- 移除初始化时的重复上下文注入代码
- 改进错误提示信息的准确性
- 调整代码结构以提高可读性和维护性
- 将 SetupVxeTable 接口中的 useVbenForm 字段改为可选参数
Jin Mao преди 2 месеца
родител
ревизия
a7ca7cdb9f
променени са 2 файла, в които са добавени 22 реда и са изтрити 25 реда
  1. 13 15
      packages/effects/plugins/src/vxe-table/init.ts
  2. 9 10
      packages/effects/plugins/src/vxe-table/types.ts

+ 13 - 15
packages/effects/plugins/src/vxe-table/init.ts

@@ -43,19 +43,19 @@ function normalizeVxeLocale<T extends Record<string, any>>(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 = {

+ 9 - 10
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;
 }