diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index dfd4b6e714b634ed27ee3e51f4c1d8636c2b615b..ddb72d07e086d28cab24c0966ff96a2dc3df9439 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/src/components/Table/src/hooks/useRowSelection.ts @@ -71,18 +71,31 @@ export function useRowSelection( return unref(getAutoCreateKey) ? ROW_KEY : rowKey; }); + function getKey(record: Recordable) { + const rowKey = unref(getRowKey); + + if (isString(rowKey)) { + return record[rowKey]; + } + + if (isFunction(rowKey)) { + return rowKey(record, null); + } + return null; + } + function setSelectedRowKeys(rowKeys: string[] | number[]) { selectedRowKeysRef.value = rowKeys; const allSelectedRows = findNodeAll( toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))), - (item) => rowKeys.includes(item[unref(getRowKey) as string] as never), + (item) => rowKeys.includes(getKey(item)), { children: propsRef.value.childrenColumnName ?? 'children', }, ); const trueSelectedRows: any[] = []; rowKeys.forEach((key: string | number) => { - const found = allSelectedRows.find((item) => item[unref(getRowKey) as string] === key); + const found = allSelectedRows.find((item) => getKey(item) === key); found && trueSelectedRows.push(found); }); selectedRowRef.value = trueSelectedRows;