diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index af374dc8f..63f90edb4 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/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, @@ -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; });