From 821d8fb5f2c653055dcf0ef37897740f89ad45cb Mon Sep 17 00:00:00 2001 From: windy <1374721899@qq.com> Date: Wed, 29 Apr 2020 18:00:31 +0800 Subject: [PATCH] =?UTF-8?q?BI-64703=20fix:=20=E6=90=9C=E7=B4=A2=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=8F=96=E6=9C=80=E5=A4=A7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/tree/ztree/parttree.js | 37 ++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/base/tree/ztree/parttree.js b/src/base/tree/ztree/parttree.js index b9770c0d4..771217108 100644 --- a/src/base/tree/ztree/parttree.js +++ b/src/base/tree/ztree/parttree.js @@ -42,7 +42,7 @@ BI.PartTree = BI.inherit(BI.AsyncTree, { var parentValues = BI.deepClone(treeNode.parentValues || self._getParentValues(treeNode)); var name = this._getNodeValue(treeNode); if (treeNode.checked === true) { - this.options.paras.selectedValues = this._getJoinValue(); + this.options.paras.selectedValues = this._getUnionValue(); // this._buildTree(self.options.paras.selectedValues, BI.concat(parentValues, name)); o.itemsCreator(BI.extend({}, o.paras, { type: BI.TreeView.REQ_TYPE_ADJUST_DATA, @@ -155,6 +155,41 @@ BI.PartTree = BI.inherit(BI.AsyncTree, { return BI.deepClone(this.options.paras.selectedValues || {}); }, + _getUnionValue: function () { + if (!this.nodes) { + return {}; + } + var checkedValues = this._getSelectedValues(); + if (BI.isEmpty(checkedValues)) { + return BI.deepClone(this.options.paras.selectedValues); + } + if (BI.isEmpty(this.options.paras.selectedValues)) { + return checkedValues; + } + return this._union(checkedValues, this.options.paras.selectedValues); + }, + + _union: function (valueA, valueB) { + var self = this; + var map = {}; + track([], valueA, valueB); + track([], valueB, valueA); + + function track (parent, node, compare) { + BI.each(node, function (n, item) { + if (BI.isNull(compare[n])) { + self._addTreeNode(map, parent, n, item); + } else if (BI.isEmpty(compare[n])) { + self._addTreeNode(map, parent, n, {}); + } else { + track(parent.concat([n]), node[n], compare[n]); + } + }); + } + + return map; + }, + // 生成树方法 stroke: function (config) { var o = this.options;