Browse Source

JSY-26079 feat: multi_select_insert_no_bar_list 搜索面板全选按钮支持可选

research/test
Renzo 2 years ago
parent
commit
0ae05dc79c
  1. 6
      src/widget/multiselect/search/multiselect.search.insert.pane.js
  2. 66
      src/widget/multiselect/search/multiselect.search.loader.js
  3. 4
      src/widget/multiselectlist/multiselectlist.insert.nobar.js

6
src/widget/multiselect/search/multiselect.search.insert.pane.js

@ -19,7 +19,8 @@ BI.MultiSelectSearchInsertPane = BI.inherit(BI.Widget, {
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn,
keywordGetter: BI.emptyFn, keywordGetter: BI.emptyFn,
itemHeight: 24 allowSelectAll: true,
itemHeight: 24,
}); });
}, },
@ -47,7 +48,8 @@ BI.MultiSelectSearchInsertPane = BI.inherit(BI.Widget, {
}]); }]);
}, },
itemHeight: o.itemHeight, itemHeight: o.itemHeight,
value: o.value value: o.value,
allowSelectAll: o.allowSelectAll,
}); });
this.loader.on(BI.Controller.EVENT_CHANGE, function () { this.loader.on(BI.Controller.EVENT_CHANGE, function () {
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);

66
src/widget/multiselect/search/multiselect.search.loader.js

@ -13,6 +13,7 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, {
keywordGetter: BI.emptyFn, keywordGetter: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn,
itemFormatter: BI.emptyFn, itemFormatter: BI.emptyFn,
allowSelectAll: true,
itemHeight: 24 itemHeight: 24
}); });
}, },
@ -23,7 +24,7 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, {
var self = this, opts = this.options; var self = this, opts = this.options;
var hasNext = false; var hasNext = false;
this.storeValue = BI.deepClone(opts.value); this.storeValue = BI.deepClone(opts.value);
this.button_group = BI.createWidget({ this.button_group = BI.createWidget(opts.allowSelectAll ? {
type: "bi.select_list", type: "bi.select_list",
toolbar: { toolbar: {
type: "bi.multi_select_bar", type: "bi.multi_select_bar",
@ -83,19 +84,71 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, {
hasNext: function () { hasNext: function () {
return hasNext; 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 () { this.button_group.on(BI.Controller.EVENT_CHANGE, function () {
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
}); });
this.button_group.on(BI.SelectList.EVENT_CHANGE, function () { if (opts.allowSelectAll) {
self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE, arguments); 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) { _createItems: function (items) {
var allSelected = this.isAllSelected(); var allSelected = this.isAllSelected();
var itemFormatter = this.options.itemFormatter; var itemFormatter = this.options.itemFormatter;
return BI.map(items, (index, item) => { return BI.map(items, (index, item) => {
return { return {
type: "bi.multi_select_item", type: "bi.multi_select_item",
@ -113,7 +166,8 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, {
}, },
isAllSelected: function () { isAllSelected: function () {
return this.button_group.isAllSelected(); var o = this.options;
return o.allowSelectAll ? this.button_group.isAllSelected() : false;
}, },
_filterValues: function (src) { _filterValues: function (src) {

4
src/widget/multiselectlist/multiselectlist.insert.nobar.js

@ -8,6 +8,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, {
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn,
searcherHeight: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, searcherHeight: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
allowSelectAll: true,
}); });
}, },
_init: function () { _init: function () {
@ -61,6 +62,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, {
o.itemsCreator(op, callback); o.itemsCreator(op, callback);
} }
}, },
allowSelectAll: o.allowSelectAll,
}); });
this.searcherPane.setVisible(false); this.searcherPane.setVisible(false);
@ -244,7 +246,7 @@ BI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, {
// 和复选下拉框同步,allData做缓存是会爆炸的 // 和复选下拉框同步,allData做缓存是会爆炸的
digest(); digest();
function digest (items) { function digest(items) {
BI.each(keywords, function (i, val) { BI.each(keywords, function (i, val) {
self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val); self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);
}); });

Loading…
Cancel
Save