From 0ae05dc79cc6262d29f99f87ee4b93b47133ef1f Mon Sep 17 00:00:00 2001 From: Renzo Date: Wed, 1 Feb 2023 16:01:30 +0800 Subject: [PATCH] =?UTF-8?q?JSY-26079=20feat:=20multi=5Fselect=5Finsert=5Fn?= =?UTF-8?q?o=5Fbar=5Flist=20=E6=90=9C=E7=B4=A2=E9=9D=A2=E6=9D=BF=E5=85=A8?= =?UTF-8?q?=E9=80=89=E6=8C=89=E9=92=AE=E6=94=AF=E6=8C=81=E5=8F=AF=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search/multiselect.search.insert.pane.js | 6 +- .../search/multiselect.search.loader.js | 66 +++++++++++++++++-- .../multiselectlist.insert.nobar.js | 4 +- 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/src/widget/multiselect/search/multiselect.search.insert.pane.js b/src/widget/multiselect/search/multiselect.search.insert.pane.js index d459dc73a..8def90700 100644 --- a/src/widget/multiselect/search/multiselect.search.insert.pane.js +++ b/src/widget/multiselect/search/multiselect.search.insert.pane.js @@ -19,7 +19,8 @@ BI.MultiSelectSearchInsertPane = BI.inherit(BI.Widget, { itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, keywordGetter: BI.emptyFn, - itemHeight: 24 + allowSelectAll: true, + itemHeight: 24, }); }, @@ -47,7 +48,8 @@ BI.MultiSelectSearchInsertPane = BI.inherit(BI.Widget, { }]); }, itemHeight: o.itemHeight, - value: o.value + value: o.value, + allowSelectAll: o.allowSelectAll, }); this.loader.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); diff --git a/src/widget/multiselect/search/multiselect.search.loader.js b/src/widget/multiselect/search/multiselect.search.loader.js index 5f6d09f54..9029a94ed 100644 --- a/src/widget/multiselect/search/multiselect.search.loader.js +++ b/src/widget/multiselect/search/multiselect.search.loader.js @@ -13,6 +13,7 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { keywordGetter: BI.emptyFn, valueFormatter: BI.emptyFn, itemFormatter: BI.emptyFn, + allowSelectAll: true, itemHeight: 24 }); }, @@ -23,7 +24,7 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { var self = this, opts = this.options; var hasNext = false; this.storeValue = BI.deepClone(opts.value); - this.button_group = BI.createWidget({ + this.button_group = BI.createWidget(opts.allowSelectAll ? { type: "bi.select_list", toolbar: { type: "bi.multi_select_bar", @@ -83,19 +84,71 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { hasNext: function () { return hasNext; } + } : { + type: "bi.list_pane", + logic: { + dynamic: true, + innerVgap: 5, + rowSize: ["", "fill"], + verticalAlign: BI.VerticalAlign.Stretch + }, + element: this, + el: { + chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, + behaviors: { + redmark: function () { + return true; + } + }, + layouts: [ + { + type: "bi.vertical" + } + ] + }, + itemsCreator: function (op, callback) { + self.storeValue && (op = BI.extend(op || {}, { + selectedValues: self.storeValue.value + })); + opts.itemsCreator(op, function (ob) { + var keyword = ob.keyword = opts.keywordGetter(); + hasNext = ob.hasNext; + var firstItems = []; + if (op.times === 1 && self.storeValue) { + var json = self._filterValues(self.storeValue); + firstItems = self._createItems(json); + } + var context = { + tipText: ob.tipText, + }; + callback(firstItems.concat(self._createItems(ob.items)), keyword, context); + if (op.times === 1 && self.storeValue) { + self.setValue(self.storeValue); + } + }); + }, + value: opts.value, + height: "fill", }); + this.button_group.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); - this.button_group.on(BI.SelectList.EVENT_CHANGE, function () { - self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE, arguments); - }); + if (opts.allowSelectAll) { + this.button_group.on(BI.SelectList.EVENT_CHANGE, function () { + self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE, arguments); + }); + } else { + this.button_group.on(BI.ListPane.EVENT_CHANGE, function (val) { + self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE, val); + }); + } }, _createItems: function (items) { var allSelected = this.isAllSelected(); var itemFormatter = this.options.itemFormatter; - + return BI.map(items, (index, item) => { return { type: "bi.multi_select_item", @@ -113,7 +166,8 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { }, isAllSelected: function () { - return this.button_group.isAllSelected(); + var o = this.options; + return o.allowSelectAll ? this.button_group.isAllSelected() : false; }, _filterValues: function (src) { diff --git a/src/widget/multiselectlist/multiselectlist.insert.nobar.js b/src/widget/multiselectlist/multiselectlist.insert.nobar.js index be87999ad..d88116279 100644 --- a/src/widget/multiselectlist/multiselectlist.insert.nobar.js +++ b/src/widget/multiselectlist/multiselectlist.insert.nobar.js @@ -8,6 +8,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, { itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, searcherHeight: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, + allowSelectAll: true, }); }, _init: function () { @@ -61,6 +62,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, { o.itemsCreator(op, callback); } }, + allowSelectAll: o.allowSelectAll, }); this.searcherPane.setVisible(false); @@ -244,7 +246,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, { // 和复选下拉框同步,allData做缓存是会爆炸的 digest(); - function digest (items) { + function digest(items) { BI.each(keywords, function (i, val) { self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val); });