Commit 6f845b53bdc4c33fbca3e65f10f64c63166bed0e

Authored by 无木
1 parent d509e897

fix(table): selection-change not triggered on row click

修复selection-change事件在点击行来改变勾选时不会被触发的问题
src/components/Table/src/hooks/useRowSelection.ts
1 import { isFunction } from '/@/utils/is'; 1 import { isFunction } from '/@/utils/is';
2 import type { BasicTableProps, TableRowSelection } from '../types/table'; 2 import type { BasicTableProps, TableRowSelection } from '../types/table';
3 -import { computed, ref, unref, ComputedRef, Ref, toRaw, watch } from 'vue'; 3 +import { computed, ref, unref, ComputedRef, Ref, toRaw, watch, nextTick } from 'vue';
4 import { ROW_KEY } from '../const'; 4 import { ROW_KEY } from '../const';
5 import { omit } from 'lodash-es'; 5 import { omit } from 'lodash-es';
6 6
@@ -24,12 +24,6 @@ export function useRowSelection( @@ -24,12 +24,6 @@ export function useRowSelection(
24 onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => { 24 onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => {
25 selectedRowKeysRef.value = selectedRowKeys; 25 selectedRowKeysRef.value = selectedRowKeys;
26 selectedRowRef.value = selectedRows; 26 selectedRowRef.value = selectedRows;
27 - const { onChange } = rowSelection;  
28 - if (onChange && isFunction(onChange)) onChange(selectedRowKeys, selectedRows);  
29 - emit('selection-change', {  
30 - keys: selectedRowKeys,  
31 - rows: selectedRows,  
32 - });  
33 }, 27 },
34 ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']), 28 ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']),
35 }; 29 };
@@ -38,7 +32,24 @@ export function useRowSelection( @@ -38,7 +32,24 @@ export function useRowSelection(
38 watch( 32 watch(
39 () => unref(propsRef).rowSelection?.selectedRowKeys, 33 () => unref(propsRef).rowSelection?.selectedRowKeys,
40 (v: string[]) => { 34 (v: string[]) => {
41 - selectedRowKeysRef.value = v; 35 + setSelectedRowKeys(v);
  36 + }
  37 + );
  38 +
  39 + watch(
  40 + () => unref(selectedRowKeysRef),
  41 + () => {
  42 + nextTick(() => {
  43 + const { rowSelection } = unref(propsRef);
  44 + if (rowSelection) {
  45 + const { onChange } = rowSelection;
  46 + if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows());
  47 + }
  48 + emit('selection-change', {
  49 + keys: getSelectRowKeys(),
  50 + rows: getSelectRows(),
  51 + });
  52 + });
42 } 53 }
43 ); 54 );
44 55