Skip to content

Commit 467ebf7

Browse files
committed
feat(tree): 增加节点点击事件
1 parent 1de0dc1 commit 467ebf7

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

packages/devui-vue/devui/tree/src/components/tree-node.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { ComputedRef } from 'vue';
22
import { computed, defineComponent, inject, PropType, renderSlot, toRefs, useSlots } from 'vue';
3-
import { NODE_HEIGHT, USE_TREE_TOKEN } from '../const';
3+
import { NODE_HEIGHT, TREE_INSTANCE, USE_TREE_TOKEN } from '../const';
44
import { IInnerTreeNode, IUseTree, ICheck } from '../composables/use-tree-types';
55
import DTreeNodeToggle from './tree-node-toggle';
66
import { Checkbox } from '../../../checkbox';
@@ -24,6 +24,7 @@ export default defineComponent({
2424
setup(props, { slots }) {
2525
const { data, check } = toRefs(props);
2626
const { toggleSelectNode, toggleCheckNode, toggleNode, getChildren } = inject(USE_TREE_TOKEN) as Partial<IUseTree>;
27+
const treeInstance = inject(TREE_INSTANCE);
2728
const ns = useNamespace('tree');
2829

2930
const { nodeClass, nodeStyle, nodeContentClass, nodeVLineClass, nodeVLineStyles, nodeHLineClass } = useTreeNode(
@@ -66,6 +67,7 @@ export default defineComponent({
6667
class={nodeContentClass.value}
6768
onClick={() => {
6869
toggleSelectNode?.(data.value);
70+
treeInstance.emit('node-click', data.value);
6971
}}>
7072
<span class={nodeHLineClass.value}></span>
7173
{slots.icon ? renderSlot(useSlots(), 'icon', { nodeData: data, toggleNode }) : <DTreeNodeToggle data={data.value} />}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export const USE_TREE_TOKEN = 'use-tree-token';
2+
export const TREE_INSTANCE = 'tree-instance';
23
export const NODE_HEIGHT = 30;
34
export const NODE_INDENT = 24;

packages/devui-vue/devui/tree/src/tree.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defineComponent, provide, ref, renderSlot, SetupContext, toRefs, useSlots, watch } from 'vue';
1+
import { defineComponent, getCurrentInstance, provide, ref, renderSlot, SetupContext, toRefs, useSlots, watch } from 'vue';
22
import type { IInnerTreeNode, ICheckStrategy } from './composables/use-tree-types';
33
import DTreeNode from './components/tree-node';
44
import DTreeNodeContent from './components/tree-node-content';
@@ -9,7 +9,7 @@ import useCheck from './composables/use-check';
99
import useSelect from './composables/use-select';
1010
import useOperate from './composables/use-operate';
1111
import useMergeNodes from './composables/use-merge-nodes';
12-
import { USE_TREE_TOKEN, NODE_HEIGHT } from './const';
12+
import { USE_TREE_TOKEN, NODE_HEIGHT, TREE_INSTANCE } from './const';
1313
import { TreeProps, treeProps } from './tree-types';
1414
import { useNamespace } from '../../shared/hooks/use-namespace';
1515
import { formatCheckStatus } from './utils';
@@ -18,9 +18,10 @@ import './tree.scss';
1818
export default defineComponent({
1919
name: 'DTree',
2020
props: treeProps,
21-
emits: ['toggle-change', 'check-change', 'select-change'],
21+
emits: ['toggle-change', 'check-change', 'select-change', 'node-click'],
2222
setup(props: TreeProps, context: SetupContext) {
2323
const { slots, expose } = context;
24+
const treeInstance = getCurrentInstance();
2425
const { data, check } = toRefs(props);
2526
const ns = useNamespace('tree');
2627

@@ -46,6 +47,7 @@ export default defineComponent({
4647
watch(data, setTree);
4748

4849
provide(USE_TREE_TOKEN, treeFactory);
50+
provide(TREE_INSTANCE, treeInstance);
4951

5052
expose({
5153
treeFactory,

packages/devui-vue/docs/components/tree/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export default defineComponent({
6161
@toggle-change="toggleChange"
6262
@check-change="checkChange"
6363
@select-change="selectChange"
64+
@node-click="nodeClick"
6465
></d-tree>
6566
</template>
6667
@@ -121,6 +122,10 @@ export default defineComponent({
121122
console.log('selectChange node:', node);
122123
};
123124
125+
const nodeClick = (node) => {
126+
console.log('nodeClick node:', node);
127+
};
128+
124129
return {
125130
data,
126131
openCheck,
@@ -129,6 +134,7 @@ export default defineComponent({
129134
toggleChange,
130135
checkChange,
131136
selectChange,
137+
nodeClick,
132138
};
133139
},
134140
});
@@ -448,6 +454,7 @@ export default defineComponent({
448454
| toggle-change | `Function(node)` | 节点展开/收起的回调事件,返回选中的节点对象 | [可勾选](#可勾选) |
449455
| check-change | `Function(node)` | 节点勾选的回调事件,返回选中的节点对象 | [可勾选](#可勾选) |
450456
| select-change | `Function(node)` | 节点选中的回调事件,返回选中的节点对象 | [可勾选](#可勾选) |
457+
| node-click | `Function(node)` | 节点点击事件,返回点击的节点对象 | [可勾选](#可勾选) |
451458

452459
### Tree 插槽
453460

0 commit comments

Comments
 (0)