浏览代码

fix(table): fix rowSelection.onChange not work

修复为table提供rowSelection.onChange时,无法手动变更table的选中项的问题

fixed: #825
无木 3 年之前
父节点
当前提交
df0f00085c
共有 1 个文件被更改,包括 13 次插入2 次删除
  1. 13 2
      src/components/Table/src/hooks/useRowSelection.ts

+ 13 - 2
src/components/Table/src/hooks/useRowSelection.ts

@@ -1,6 +1,8 @@
+import { isFunction } from '/@/utils/is';
 import type { BasicTableProps, TableRowSelection } from '../types/table';
-import { computed, ref, unref, ComputedRef, Ref, toRaw } from 'vue';
+import { computed, ref, unref, ComputedRef, Ref, toRaw, watch } from 'vue';
 import { ROW_KEY } from '../const';
+import { omit } from 'lodash-es';
 
 export function useRowSelection(
   propsRef: ComputedRef<BasicTableProps>,
@@ -22,15 +24,24 @@ export function useRowSelection(
       onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => {
         selectedRowKeysRef.value = selectedRowKeys;
         selectedRowRef.value = selectedRows;
+        const { onChange } = rowSelection;
+        if (onChange && isFunction(onChange)) onChange(selectedRowKeys, selectedRows);
         emit('selection-change', {
           keys: selectedRowKeys,
           rows: selectedRows,
         });
       },
-      ...(rowSelection === undefined ? {} : rowSelection),
+      ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']),
     };
   });
 
+  watch(
+    () => unref(propsRef).rowSelection?.selectedRowKeys,
+    (v: string[]) => {
+      selectedRowKeysRef.value = v;
+    }
+  );
+
   const getAutoCreateKey = computed(() => {
     return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey;
   });