@@ -4,6 +4,7 @@ import IconOpen from './components/icon-open'
4
4
import IconClose from './components/icon-close'
5
5
import useToggle from './composables/use-toggle'
6
6
import './tree.scss'
7
+ import useHighlightNode from './composables/use-highlight'
7
8
8
9
export default defineComponent ( {
9
10
name : 'DTree' ,
@@ -12,28 +13,44 @@ export default defineComponent({
12
13
setup ( props : TreeProps , ctx ) {
13
14
const { data } = toRefs ( props )
14
15
const { openedData, toggle } = useToggle ( data . value )
16
+ const { nodeClassNameReflect, handleInitNodeClassNameReflect, handleClickOnNode } = useHighlightNode ( )
15
17
16
18
// 增加缩进的展位元素
17
19
const Indent = ( ) => {
18
20
return < span style = "display: inline-block; width: 16px; height: 16px;" > </ span >
19
21
}
20
22
23
+ const renderIcon = ( item : TreeItem ) => {
24
+ return item . children
25
+ ? < span class = { item . disableToggle && 'toggle-disabled' } >
26
+ {
27
+ item . open
28
+ ? < IconOpen class = 'mr-xs' onClick = { ( ) => toggle ( item ) } />
29
+ : < IconClose class = 'mr-xs' onClick = { ( ) => toggle ( item ) } />
30
+ }
31
+ </ span >
32
+ : < Indent />
33
+ }
34
+
21
35
const renderNode = ( item : TreeItem ) => {
36
+ const { key = '' , label, disabled, open, level } = item
37
+ const nodeId = handleInitNodeClassNameReflect ( disabled , key , label ) // 获取nodeId
38
+
22
39
return (
23
40
< div
24
- class = { [ 'devui-tree-node' , item . open && 'devui-tree-node__open' ] }
25
- style = { { paddingLeft : `${ 24 * ( item . level - 1 ) } px` } }
41
+ class = { [ 'devui-tree-node' , open && 'devui-tree-node__open' ] }
42
+ style = { { paddingLeft : `${ 24 * ( level - 1 ) } px` } }
26
43
>
27
- < div class = "devui-tree-node__content" >
44
+ < div class = { [ 'devui-tree-node__content' , nodeClassNameReflect . value [ nodeId ] ] }
45
+ onClick = { ( ) => handleClickOnNode ( nodeId ) } >
28
46
< div class = "devui-tree-node__content--value-wrapper" >
29
- {
30
- item . children
31
- ? item . open
32
- ? < IconOpen class = "mr-xs" onClick = { ( ) => toggle ( item ) } /> // 给节点绑定点击事件
33
- : < IconClose class = "mr-xs" onClick = { ( ) => toggle ( item ) } /> // 给节点绑定点击事件
34
- : < Indent />
35
- }
36
- < span class = "devui-tree-node__title" > { item . label } </ span >
47
+ { /* 折叠图标 */ }
48
+ { renderIcon ( item ) }
49
+ < span class = { [
50
+ 'devui-tree-node__title' ,
51
+ item . disabled && 'select-disabled' ] } >
52
+ { item . label }
53
+ </ span >
37
54
</ div >
38
55
</ div >
39
56
</ div >
0 commit comments