Skip to content

Commit 8107099

Browse files
author
oudanzhou
committed
[dev] separate halfcheck from checked
1 parent ec74d91 commit 8107099

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/components/tree.vue

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ export default {
106106
}
107107
},
108108
parentCheckedHandle(parentNode, checked, halfcheck = false) {
109-
if (!parentNode || parentNode.chkDisabled || !!parentNode.checked === checked ) return false;
110-
let [someBortherNodeChecked, allBortherNodeChecked] = [checked, checked];
109+
if (!parentNode || parentNode.chkDisabled ) return false;
110+
let someBortherNodeChecked = checked, allBortherNodeChecked = checked;
111111
const childNodes = parentNode.children
112112
if (checked) {
113-
allBortherNodeChecked = childNodes.every(
114-
child => child.checked && !child.halfcheck
115-
);
113+
allBortherNodeChecked = childNodes.every(child => child.checked);
116114
} else {
117-
someBortherNodeChecked = childNodes.some(child => child.checked);
115+
someBortherNodeChecked = childNodes.some(({ checked, halfcheck: itemHalfCheck }) => {
116+
return checked || ( halfcheck && itemHalfCheck)
117+
});
118118
}
119119
if (halfcheck) {
120120
// all / some / none
@@ -127,8 +127,7 @@ export default {
127127
} else if (nodeHalfcheck) {
128128
return false;
129129
}
130-
const parentChecked = checked || nodeHalfcheck;
131-
this.$set(parentNode, "checked", parentChecked);
130+
this.$set(parentNode, "checked", allBortherNodeChecked);
132131
} else {
133132
this.$set(parentNode, "checked", allBortherNodeChecked);
134133
}

src/components/treeLi.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
></span>
1010
<span
1111
v-if="multiple && !item.nocheck"
12-
:class="[item.checked ? (item.halfcheck ? 'box-halfchecked' : 'box-checked') : 'box-unchecked', 'inputCheck']"
12+
class='inputCheck'
13+
:class="spanInputClass"
1314
>
1415
<input
1516
:disabled="item.chkDisabled"
1617
:class="['check', item.chkDisabled ? 'chkDisabled' : '']"
1718
v-if="multiple"
1819
type="checkbox"
1920
@change="changeNodeCheckStatus(item, $event)"
20-
:checked="item.checked"
21+
:checked="checkboxChecked"
2122
>
2223
</span>
2324
<loading v-if="item.loading && item.expanded"/>
@@ -166,6 +167,14 @@ export default {
166167
},
167168
position() {
168169
return { level: this.level, index: this.index };
170+
},
171+
checkboxChecked() {
172+
const { checked, halfcheck } = this.item
173+
return checked || halfcheck
174+
},
175+
spanInputClass () {
176+
const { checked, halfcheck } = this.item
177+
return checked ? 'box-checked' : halfcheck ? 'box-halfchecked' : 'box-unchecked'
169178
}
170179
},
171180
watch: {

0 commit comments

Comments
 (0)