diff --git a/src/component/treevaluechooser/abstract.treevaluechooser.js b/src/component/treevaluechooser/abstract.treevaluechooser.js index 7dd422553..788d072ef 100644 --- a/src/component/treevaluechooser/abstract.treevaluechooser.js +++ b/src/component/treevaluechooser/abstract.treevaluechooser.js @@ -151,23 +151,25 @@ BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, { var p = parentValues.concat(notSelectedValue); // 存储的值中存在这个值就把它删掉 // 例如选中了中国-江苏-南京, 取消中国或江苏或南京 + // p长度不大于selectedValues的情况才可能找到,这样可以直接删除selectedValues的节点 if (canFindKey(selectedValues, p)) { // 如果搜索的值在父亲链中 if (isSearchValueInParent(p)) { - // 例如选中了 中国-江苏, 搜索江苏, 取消江苏 - // 例如选中了 中国-江苏, 搜索江苏, 取消中国 + // 例如选中了 中国-江苏, 搜索江苏, 取消江苏(干掉了江苏) self._deleteNode(selectedValues, p); } else { var searched = []; + // 要找到所有以notSelectedValue为叶子节点的链路 var find = search(parentValues, notSelectedValue, [], searched); if (find && BI.isNotEmptyArray(searched)) { BI.each(searched, function (i, arr) { var node = self._getNode(selectedValues, arr); if (node) { - // 例如选中了 中国-江苏-南京,搜索南京,取消中国 + // 例如选中了 中国-江苏, 搜索江苏, 取消中国(实际上只想删除中国-江苏,因为搜的是江苏) + // 例如选中了 中国-江苏-南京,搜索南京,取消中国(实际上只想删除中国-江苏-南京,因为搜的是南京) self._deleteNode(selectedValues, arr); } else { - // 例如选中了 中国-江苏,搜索南京,取消中国 + // 例如选中了 中国-江苏,搜索南京,取消中国(实际上只想删除中国-江苏-南京,因为搜的是南京) expandSelectedValue(selectedValues, arr, BI.last(arr)); } }); @@ -429,13 +431,16 @@ BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, { var isCurAllSelected = isAllSelect || isAllSelected(parentValues, current); BI.each(children, function (i, child) { var state = nodeSearch(deep + 1, newParents, child.value, isCurAllSelected, result); + // 当前节点的子节点是否选中,并不确定全选还是半选 if (state[1] === true) { checked = true; } + // 当前节点的子节点要不要加入到结果集中 if (state[0] === true) { can = true; } }); + // 子节点匹配, 补充父节点 if (can === true) { checked = isCurAllSelected || (isSelected(parentValues, current) && checked); createOneJson(parentValues, current, true, checked, false, false, result); @@ -636,8 +641,8 @@ BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, { } } var check; + // 展开的节点checked为false 且没有明确得出当前子节点是半选或者全选, 则check状态取决于valueMap if (!checked && !halfCheck && !tempCheck) { - // 当节点自身是不选的,且通过selectedValues没有得到全选, 则check状态取决于valueMap check = BI.has(valueMap, current); } else { // 不是上面那种情况就先看在节点没有带有明确半选的时候,通过节点自身的checked和valueMap的状态能都得到选中信息 diff --git a/src/less/resource/background.less b/src/less/resource/background.less index 2a122eee5..f839d3c4f 100644 --- a/src/less/resource/background.less +++ b/src/less/resource/background.less @@ -79,7 +79,7 @@ } .ztree li span.button.chk.checkbox_false_part { - .image2xPath(@icon-checkbox-normal); + .image2xPath(@icon-half-select); } .ztree li span.button.chk.checkbox_false_part_focus { @@ -111,7 +111,7 @@ } .ztree.hack li span.button.chk.checkbox_false_part { - .imagePath(@icon-checkbox-normal); + .imagePath(@icon-half-select); } .ztree.hack li span.button.chk.checkbox_false_part_focus {