1
1
import { defineComponent , watch , ref , shallowRef , PropType , h } from 'vue' ;
2
- import { cloneDeep } from 'lodash-es' ;
2
+ import { cloneDeep , uniq } from 'lodash-es' ;
3
3
import { NodeKey , TreeNodeInstance , TreeNodeOptions , TypeWithNull , TypeWithUndefined } from "./types" ;
4
4
5
5
import VirTreeNode from './node' ;
@@ -83,12 +83,10 @@ export default defineComponent({
83
83
} ) ;
84
84
85
85
watch ( ( ) => props . defaultCheckedKeys , newVal => {
86
- const targets = flatList . value . filter ( item => newVal . includes ( item . nodeKey ) ) ;
87
- // console.log('watch defaultCheckedKeys:>> ', targets);
88
86
service . resetDefaultCheckedKeys ( newVal ) ;
89
- if ( targets . length ) {
87
+ if ( newVal . length ) {
90
88
service . checkedNodes . value . clear ( ) ;
91
- service . checkedNodes . value . select ( ...targets ) ;
89
+ service . checkedNodes . value . select ( ...newVal ) ;
92
90
}
93
91
} ) ;
94
92
@@ -111,27 +109,28 @@ export default defineComponent({
111
109
112
110
113
111
const checkChange = ( [ checked , node ] : [ boolean , Required < TreeNodeOptions > ] ) => {
114
- service . checkedNodes . value . toggle ( node ) ;
112
+ service . checkedNodes . value . toggle ( node . nodeKey ) ;
115
113
if ( ! checked ) {
116
114
service . removeDefaultCheckedKeys ( node ) ;
117
115
}
118
116
if ( ! props . checkStrictly ) {
119
117
service . updateDownwards ( checked , node ) ;
120
118
service . updateUpwards ( node , flatList . value ) ;
121
119
}
120
+ // console.log('checkChange defaultCheckedKeys:>> ', service.defaultCheckedKeys);
121
+ // console.log('checkChange selected:>> ', service.checkedNodes.value.selected);
122
122
emit ( 'checkChange' , { checked, node} ) ;
123
123
}
124
124
125
125
const expandNode = ( node : Required < TreeNodeOptions > , children : TreeNodeOptions [ ] = [ ] ) => {
126
126
const trueChildren = children . length ? children : cloneDeep ( node . children ) ! ;
127
127
const selectedKey = service . selectedNodes . value . selected [ 0 ] ?. nodeKey || service . defaultSelectedKey ;
128
128
const allExpandedKeys = service . expandedKeys . value . selected . concat ( service . defaultExpandedKeys ) ;
129
- const allCheckedKeys = service . checkedNodes . value . selected . map ( item => item . nodeKey ) . concat ( service . defaultCheckedKeys ) ;
130
- if ( service . checkedNodes . value . isSelected ( node ) ) {
129
+ const allCheckedKeys = service . checkedNodes . value . selected ;
130
+ if ( service . checkedNodes . value . isSelected ( node . nodeKey ) ) {
131
131
allCheckedKeys . push ( ...trueChildren . map ( item => item . nodeKey ) ) ;
132
132
}
133
- // console.log('allCheckedKeys', allCheckedKeys);
134
- node . children = service . flattenTree ( trueChildren , selectedKey , allCheckedKeys , allExpandedKeys , props . defaultDisabledKeys , node ) ;
133
+ node . children = service . flattenTree ( trueChildren , selectedKey , uniq ( allCheckedKeys ) , allExpandedKeys , props . defaultDisabledKeys , node ) ;
135
134
const targetIndex = flatList . value . findIndex ( item => item . nodeKey === node . nodeKey ) ;
136
135
flatList . value . splice ( targetIndex + 1 , 0 , ...( node . children as Required < TreeNodeOptions > [ ] ) ) ;
137
136
}
@@ -193,7 +192,7 @@ export default defineComponent({
193
192
return service . selectedNodes . value . selected [ 0 ] ;
194
193
} ,
195
194
getCheckedNodes : ( ) : TreeNodeOptions [ ] => {
196
- return service . checkedNodes . value . selected ;
195
+ return flatList . value . filter ( item => service . checkedNodes . value . selected . includes ( item . nodeKey ) ) ;
197
196
} ,
198
197
getHalfCheckedNodes : ( ) : TreeNodeOptions [ ] => {
199
198
return nodeRefs . value . filter ( item => item . halfChecked ( ) ) . map ( item => item . rawNode ) ;
0 commit comments