From fc1a0b8d6010a29b35e2f231e78a75484ec7e155 Mon Sep 17 00:00:00 2001 From: Nick Wu <38874640+wNing50@users.noreply.github.com> Date: Sat, 18 Jan 2025 18:36:06 +0800 Subject: [PATCH] fix(components): [table] selection-change event emit incorrectly (#19618) * feat(components): [table] fix 'selection-change' event emit incorrectly * fix(components): [table] add test case --- packages/components/table/__tests__/table.test.ts | 15 +++++++++++++++ packages/components/table/src/util.ts | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/components/table/__tests__/table.test.ts b/packages/components/table/__tests__/table.test.ts index 77fda98d43..f5929ca7b3 100644 --- a/packages/components/table/__tests__/table.test.ts +++ b/packages/components/table/__tests__/table.test.ts @@ -1848,12 +1848,14 @@ describe('Table.vue', () => { const testData = getTestData() as any testData[1].childrenTest = [ { + id: 21, name: "A Bug's Life copy 1", release: '1998-11-25-1', director: 'John Lasseter', runtime: 95, }, { + id: 22, name: "A Bug's Life copy 2", release: '1998-11-25-2', director: 'John Lasseter', @@ -1892,6 +1894,19 @@ describe('Table.vue', () => { await doubleWait() expect(wrapper.vm.selected.length).toEqual(2) expect(wrapper.findAll('.el-checkbox')[3].classes()).include('is-checked') + + await (wrapper.vm.treeProps.checkStrictly = false) + wrapper.findAll('.el-checkbox')[0].trigger('click') + wrapper.findAll('.el-checkbox')[0].trigger('click') + await doubleWait() + expect(wrapper.vm.selected.length).toEqual(0) + wrapper.findAll('.el-checkbox')[0].trigger('click') + await doubleWait() + wrapper.findAll('.el-checkbox')[3].trigger('click') + await doubleWait() + wrapper.findAll('.el-checkbox')[0].trigger('click') + await doubleWait() + expect(wrapper.vm.selected.length).toEqual(getTestData().length + 2) }) }) diff --git a/packages/components/table/src/util.ts b/packages/components/table/src/util.ts index d22e063e9e..07dbfc98d5 100644 --- a/packages/components/table/src/util.ts +++ b/packages/components/table/src/util.ts @@ -318,7 +318,7 @@ export function toggleRowStatus( isArray(row[tableTreeProps.children]) ) { row[tableTreeProps.children].forEach((item) => { - toggleRowStatus( + const childChanged = toggleRowStatus( statusArr, item, newVal ?? !included, @@ -327,6 +327,9 @@ export function toggleRowStatus( _rowIndex + 1 ) _rowIndex += getChildrenCount(item) + 1 + if (childChanged) { + changed = childChanged + } }) } return changed