From d391ed5550713ade658b3b96800d88cd9575cf9b Mon Sep 17 00:00:00 2001
From: guy <guy@finereport.com>
Date: Mon, 22 May 2017 09:30:41 +0800
Subject: [PATCH] add

---
 bi/base.js                                           |  7 +++++++
 bi/case.js                                           | 12 ++++++++++++
 bi/widget.js                                         |  4 +++-
 docs/base.js                                         |  7 +++++++
 docs/case.js                                         | 12 ++++++++++++
 docs/widget.js                                       |  4 +++-
 src/base/single/button/button.basic.js               |  7 +++++++
 src/case/toolbar/toolbar.multiselect.js              | 12 ++++++++++++
 src/widget/sequencetable/treenumber.sequencetable.js |  4 +++-
 9 files changed, 66 insertions(+), 3 deletions(-)

diff --git a/bi/base.js b/bi/base.js
index b17b359288..cace48d533 100644
--- a/bi/base.js
+++ b/bi/base.js
@@ -817,12 +817,19 @@ BI.BasicButton = BI.inherit(BI.Single, {
     },
 
     _doClick: function () {
+        if (this.isValid()) {
+            this.beforeClick();
+        }
         this._trigger();
         if (this.isValid()) {
             this.doClick();
         }
     },
 
+    beforeClick: function () {
+
+    },
+
     doClick: function () {
 
     },
diff --git a/bi/case.js b/bi/case.js
index 00223d3cbc..668dfc0646 100644
--- a/bi/case.js
+++ b/bi/case.js
@@ -10269,6 +10269,8 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
             height: 25,
             text: BI.i18nText('BI-Select_All'),
             isAllCheckedBySelectedValue: BI.emptyFn,
+            //手动控制选中
+            disableSelected: true,
             isHalfCheckedBySelectedValue: function (selectedValues) {
                 return selectedValues.length > 0;
             }
@@ -10331,6 +10333,16 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
         this.half.invisible();
     },
 
+    //自己手动控制选中
+    beforeClick: function () {
+        var isHalf = this.isHalfSelected(), isSelected = this.isSelected();
+        if (isHalf === true) {
+            this.setSelected(true);
+        } else {
+            this.setSelected(!isSelected);
+        }
+    },
+
     setSelected: function (v) {
         this.checkbox.setSelected(v);
         this.setHalfSelected(false);
diff --git a/bi/widget.js b/bi/widget.js
index 5ff973be8f..778e5221f4 100644
--- a/bi/widget.js
+++ b/bi/widget.js
@@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
         var cnt = this.start;
 
         function track(node) {
-            self.cache[node.text || node.value] = cnt++;
+            //如果已经有缓存了就不改计数了,复杂表会出现这种情况
+            self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
+            cnt++;
         }
 
         BI.each(nodes, function (i, node) {
diff --git a/docs/base.js b/docs/base.js
index b17b359288..cace48d533 100644
--- a/docs/base.js
+++ b/docs/base.js
@@ -817,12 +817,19 @@ BI.BasicButton = BI.inherit(BI.Single, {
     },
 
     _doClick: function () {
+        if (this.isValid()) {
+            this.beforeClick();
+        }
         this._trigger();
         if (this.isValid()) {
             this.doClick();
         }
     },
 
+    beforeClick: function () {
+
+    },
+
     doClick: function () {
 
     },
diff --git a/docs/case.js b/docs/case.js
index 00223d3cbc..668dfc0646 100644
--- a/docs/case.js
+++ b/docs/case.js
@@ -10269,6 +10269,8 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
             height: 25,
             text: BI.i18nText('BI-Select_All'),
             isAllCheckedBySelectedValue: BI.emptyFn,
+            //手动控制选中
+            disableSelected: true,
             isHalfCheckedBySelectedValue: function (selectedValues) {
                 return selectedValues.length > 0;
             }
@@ -10331,6 +10333,16 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
         this.half.invisible();
     },
 
+    //自己手动控制选中
+    beforeClick: function () {
+        var isHalf = this.isHalfSelected(), isSelected = this.isSelected();
+        if (isHalf === true) {
+            this.setSelected(true);
+        } else {
+            this.setSelected(!isSelected);
+        }
+    },
+
     setSelected: function (v) {
         this.checkbox.setSelected(v);
         this.setHalfSelected(false);
diff --git a/docs/widget.js b/docs/widget.js
index 5ff973be8f..778e5221f4 100644
--- a/docs/widget.js
+++ b/docs/widget.js
@@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
         var cnt = this.start;
 
         function track(node) {
-            self.cache[node.text || node.value] = cnt++;
+            //如果已经有缓存了就不改计数了,复杂表会出现这种情况
+            self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
+            cnt++;
         }
 
         BI.each(nodes, function (i, node) {
diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js
index 8e1079af03..636fb51d4b 100644
--- a/src/base/single/button/button.basic.js
+++ b/src/base/single/button/button.basic.js
@@ -234,12 +234,19 @@ BI.BasicButton = BI.inherit(BI.Single, {
     },
 
     _doClick: function () {
+        if (this.isValid()) {
+            this.beforeClick();
+        }
         this._trigger();
         if (this.isValid()) {
             this.doClick();
         }
     },
 
+    beforeClick: function () {
+
+    },
+
     doClick: function () {
 
     },
diff --git a/src/case/toolbar/toolbar.multiselect.js b/src/case/toolbar/toolbar.multiselect.js
index 7a1497d8d9..156398c47e 100644
--- a/src/case/toolbar/toolbar.multiselect.js
+++ b/src/case/toolbar/toolbar.multiselect.js
@@ -12,6 +12,8 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
             height: 25,
             text: BI.i18nText('BI-Select_All'),
             isAllCheckedBySelectedValue: BI.emptyFn,
+            //手动控制选中
+            disableSelected: true,
             isHalfCheckedBySelectedValue: function (selectedValues) {
                 return selectedValues.length > 0;
             }
@@ -74,6 +76,16 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
         this.half.invisible();
     },
 
+    //自己手动控制选中
+    beforeClick: function () {
+        var isHalf = this.isHalfSelected(), isSelected = this.isSelected();
+        if (isHalf === true) {
+            this.setSelected(true);
+        } else {
+            this.setSelected(!isSelected);
+        }
+    },
+
     setSelected: function (v) {
         this.checkbox.setSelected(v);
         this.setHalfSelected(false);
diff --git a/src/widget/sequencetable/treenumber.sequencetable.js b/src/widget/sequencetable/treenumber.sequencetable.js
index d1ae137dc0..6a1fff133d 100644
--- a/src/widget/sequencetable/treenumber.sequencetable.js
+++ b/src/widget/sequencetable/treenumber.sequencetable.js
@@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
         var cnt = this.start;
 
         function track(node) {
-            self.cache[node.text || node.value] = cnt++;
+            //如果已经有缓存了就不改计数了,复杂表会出现这种情况
+            self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
+            cnt++;
         }
 
         BI.each(nodes, function (i, node) {