diff --git a/src/tree/__tests__/expand.test.jsx b/src/tree/__tests__/expand.test.jsx index 21ee9d6fe1..eb06d885ca 100644 --- a/src/tree/__tests__/expand.test.jsx +++ b/src/tree/__tests__/expand.test.jsx @@ -2,6 +2,9 @@ import { mount } from '@vue/test-utils'; import Tree from '@/src/tree/index.ts'; import { delay } from './kit'; import { ref } from './adapt'; +import { Icon } from 'tdesign-icons-vue-next'; +import { nextTick } from 'vue'; +import { get } from 'lodash'; describe('Tree:expand', () => { vi.useRealTimers(); @@ -376,6 +379,37 @@ describe('Tree:expand', () => { expect(wrapper.find('[data-value="t1.1"]').exists()).toBe(true); }); + it('自定义图标-点击父节点图标可触发展开子节点', async () => { + const data = [ + { + value: 't1', + children: [ + { + value: 't1.1', + }, + ], + }, + ]; + const wrapper = mount({ + render() { + return }>; + }, + }); + // 测试: 点击一级 一级展开 二级存在 + wrapper.find('[data-value="t1"] .t-tree__icon').trigger('click'); + await delay(10); + const t1d1 = wrapper.find('[data-value="t1.1"]'); + expect(t1d1.attributes('class')).toContain('t-tree__item--visible'); + const t1 = wrapper.find('[data-value="t1"]'); + expect(t1.attributes('class')).toContain('t-tree__item--open'); + + // 测试:点击二级 二级状态不展开 + wrapper.find('[data-value="t1.1"] .t-tree__icon').trigger('click'); + await delay(10); + const t1d1_two = wrapper.find('[data-value="t1.1"]'); + expect(t1d1_two.attributes('class')).not.toContain('t-tree__item--open'); + }); + it('点击已展开的父节点图标,可触发收起子节点', async () => { const data = [ { diff --git a/src/tree/hooks/useTreeAction.ts b/src/tree/hooks/useTreeAction.ts index dd570eb184..286cce1eb9 100644 --- a/src/tree/hooks/useTreeAction.ts +++ b/src/tree/hooks/useTreeAction.ts @@ -47,6 +47,9 @@ export default function useTreeAction(state: TypeTreeState) { const toggleExpanded = (item: TypeTargetNode): TreeNodeValue[] => { const node = getNode(store, item); + + if (!node.children) return; + return setExpanded(node, !node.isExpanded()); };