3
3
const TREE_DATA = { selected : false , partialSelected : false }
4
4
class TreeData {
5
5
constructor ( data ) {
6
- this . name = 'TreeData'
7
6
this . data = { ...TREE_DATA , ...data }
8
7
this . children = [ ]
9
8
}
@@ -26,7 +25,7 @@ class TreeData{
26
25
return this . children . every ( ( child ) => child . isSelected ( ) )
27
26
}
28
27
hasChildrenPartialSelected ( ) {
29
- return ! this . isAllChildrenSelected ( ) && this . children . some ( ( child ) => child . isSelected ( ) || child . isPartialSelected ( ) )
28
+ return this . children . some ( ( child ) => child . isSelected ( ) || child . isPartialSelected ( ) )
30
29
}
31
30
}
32
31
@@ -47,8 +46,8 @@ const demeData = [
47
46
name : '四级 1-1-1-1' ,
48
47
id : '4' ,
49
48
children : [ ] ,
50
- checked : true ,
51
- disabled : true
49
+ selected : false ,
50
+ disabled : false
52
51
} ,
53
52
{
54
53
name : '四级 1-1-1-2' ,
@@ -122,8 +121,8 @@ const demeData = [
122
121
]
123
122
124
123
const generateNode = ( data ) => {
125
- const { id , name , children } = data
126
- const node = new TreeData ( { id , name } )
124
+ const { children , ... rest } = data
125
+ const node = new TreeData ( rest )
127
126
console . log ( node . name )
128
127
children . forEach ( ( child ) => {
129
128
// eslint-disable-next-line no-debugger
@@ -145,10 +144,10 @@ export default {
145
144
} ,
146
145
methods : {
147
146
nodeView ( node , level ) {
148
- const { name, selected} = node ?. data ?? { }
147
+ const { name, selected, disabled , partialSelected } = node ?. data ?? { }
149
148
return ( name && < div style = { `margin-left: ${ level * 10 } px; display: inline-block` } >
150
- { node . hasChildrenPartialSelected ( ) && `-` }
151
- < input type = 'checkbox' checked = { selected } onClick = { ( ) => this . selectToggle ( node ) } />
149
+ { partialSelected && `-` }
150
+ < input type = 'checkbox' disabled = { disabled } checked = { selected } onClick = { ( ) => this . selectToggle ( node ) } />
152
151
{ name }
153
152
</ div > )
154
153
} ,
@@ -162,22 +161,22 @@ export default {
162
161
} )
163
162
return node
164
163
} ,
165
- getView ( paths , level ) {
166
- const node = this . getNode ( paths )
164
+ getView ( node , level ) {
165
+ // const node = this.getNode(paths)
167
166
// eslint-disable-next-line no-debugger
168
167
// debugger
169
168
const currentNode = this . nodeView ( node , level )
170
169
return ( < div >
171
170
{ currentNode }
172
- { node ?. children ?. map ( ( _ , index ) => this . getView ( [ ... paths , index ] , level + 1 ) ) }
171
+ { node ?. children ?. map ( ( child ) => this . getView ( child , level + 1 ) ) }
173
172
</ div > )
174
173
} ,
175
174
refreshUp ( { parent} ) {
176
175
if ( ! parent ) return
177
176
const toState = parent . isAllChildrenSelected ( )
178
177
// eslint-disable-next-line no-debugger
179
178
// debugger
180
- Object . assign ( parent . data , { selected : toState , partialSelected : parent . hasChildrenPartialSelected ( ) } )
179
+ Object . assign ( parent . data , { selected : toState , partialSelected : ! toState && parent . hasChildrenPartialSelected ( ) } )
181
180
this . refreshUp ( parent )
182
181
} ,
183
182
refreshDown ( node ) {
@@ -205,7 +204,7 @@ export default {
205
204
render ( ) {
206
205
return (
207
206
< div style = 'text-align: left' >
208
- { this . getView ( [ ] , 0 ) }
207
+ { this . getView ( this . root , 0 ) }
209
208
</ div >
210
209
)
211
210
}
0 commit comments