Commit 3c145e6ffeb2628b24a9c8fd75f2a89bdf4cd793

Authored by 梁灏
1 parent cb84e64a

update Tree

Showing 2 changed files with 19 additions and 16 deletions   Show diff stats
src/components/tree/node.vue
@@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
66 classes () { 66 classes () {
67 return [ 67 return [
68 `${prefixCls}-children` 68 `${prefixCls}-children`
69 - ] 69 + ];
70 }, 70 },
71 selectedCls () { 71 selectedCls () {
72 return [ 72 return [
@@ -112,7 +112,13 @@ @@ -112,7 +112,13 @@
112 }, 112 },
113 handleCheck () { 113 handleCheck () {
114 if (this.disabled) return; 114 if (this.disabled) return;
115 - this.data.checked = !this.data.checked; 115 + const checked = !this.data.checked;
  116 + if (!checked || this.indeterminate) {
  117 + findComponentsDownward(this, 'TreeNode').forEach(node => node.data.checked = false);
  118 + } else {
  119 + findComponentsDownward(this, 'TreeNode').forEach(node => node.data.checked = true);
  120 + }
  121 + this.data.checked = checked;
116 this.dispatch('Tree', 'checked'); 122 this.dispatch('Tree', 'checked');
117 }, 123 },
118 setIndeterminate () { 124 setIndeterminate () {
@@ -126,7 +132,7 @@ @@ -126,7 +132,7 @@
126 mounted () { 132 mounted () {
127 this.$on('indeterminate', () => { 133 this.$on('indeterminate', () => {
128 this.setIndeterminate(); 134 this.setIndeterminate();
129 - }) 135 + });
130 } 136 }
131 }; 137 };
132 </script> 138 </script>
133 \ No newline at end of file 139 \ No newline at end of file
src/components/tree/tree.vue
1 <template> 1 <template>
2 <div :class="prefixCls"> 2 <div :class="prefixCls">
3 <Tree-node 3 <Tree-node
4 - v-for="item in currentData" 4 + v-for="item in data"
5 :key="item" 5 :key="item"
6 :data="item" 6 :data="item"
7 visible 7 visible
@@ -46,21 +46,15 @@ @@ -46,21 +46,15 @@
46 }, 46 },
47 data () { 47 data () {
48 return { 48 return {
49 - prefixCls: prefixCls,  
50 - currentData: this.data 49 + prefixCls: prefixCls
51 }; 50 };
52 }, 51 },
53 - watch: {  
54 - data (val) {  
55 -  
56 - }  
57 - },  
58 methods: { 52 methods: {
59 getSelectedNodes () { 53 getSelectedNodes () {
60 const nodes = findComponentsDownward(this, 'TreeNode'); 54 const nodes = findComponentsDownward(this, 'TreeNode');
61 return nodes.filter(node => node.data.selected).map(node => node.data); 55 return nodes.filter(node => node.data.selected).map(node => node.data);
62 }, 56 },
63 - updateData () { 57 + updateData (isInit = true) {
64 // init checked status 58 // init checked status
65 function reverseChecked(data) { 59 function reverseChecked(data) {
66 if (data.children) { 60 if (data.children) {
@@ -69,8 +63,11 @@ @@ -69,8 +63,11 @@
69 if (node.children) node = reverseChecked(node); 63 if (node.children) node = reverseChecked(node);
70 if (node.checked) checkedLength++; 64 if (node.checked) checkedLength++;
71 }); 65 });
72 -// data.checked = checkedLength >= data.children.length;  
73 - if (checkedLength >= data.children.length) data.checked = true; 66 + if (isInit) {
  67 + if (checkedLength >= data.children.length) data.checked = true;
  68 + } else {
  69 + data.checked = checkedLength >= data.children.length;
  70 + }
74 return data; 71 return data;
75 } else { 72 } else {
76 return data; 73 return data;
@@ -88,7 +85,7 @@ @@ -88,7 +85,7 @@
88 return data; 85 return data;
89 } 86 }
90 } 87 }
91 - this.currentData = this.data.map(node => reverseChecked(node)).map(node => forwardChecked(node)); 88 + this.data.map(node => reverseChecked(node)).map(node => forwardChecked(node));
92 this.broadcast('TreeNode', 'indeterminate'); 89 this.broadcast('TreeNode', 'indeterminate');
93 } 90 }
94 }, 91 },
@@ -106,7 +103,7 @@ @@ -106,7 +103,7 @@
106 this.$emit('on-select-change', this.getSelectedNodes()); 103 this.$emit('on-select-change', this.getSelectedNodes());
107 }); 104 });
108 this.$on('checked', () => { 105 this.$on('checked', () => {
109 - this.updateData(); 106 + this.updateData(false);
110 }); 107 });
111 } 108 }
112 }; 109 };