diff --git a/bi/base.css b/bi/base.css index 2bd711754..9a756c550 100644 --- a/bi/base.css +++ b/bi/base.css @@ -920,12 +920,6 @@ li.CodeMirror-hint-active { .bi-textarea-editor .textarea-editor-content { border: none; } -.bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #d4dadd; -} -.bi-theme-dark .bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #525466; -} /****添加计算宽度的--运算符直接需要space****/ /****** common color(常用颜色,可用于普遍场景) *****/ /**** custom color(自定义颜色,用于特定场景) ****/ diff --git a/bi/base.js b/bi/base.js index 9476b3d85..d6f385308 100644 --- a/bi/base.js +++ b/bi/base.js @@ -4642,6 +4642,11 @@ BI.Switcher = BI.inherit(BI.Widget, { return this.popupView ? this.popupView.getValue() : []; }, + setAdapter: function (adapter) { + this.options.adapter = adapter; + BI.Maskers.remove(this.getName()); + }, + isViewVisible: function () { return this.isEnabled() && this.switcher.isEnabled() && (this.options.adapter ? BI.Maskers.isVisible(this.getName()) : (this.popupView && this.popupView.isVisible())); @@ -28726,7 +28731,7 @@ BI.CollectionTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0 || o.header.length < 0) { + if (o.items.length > 0 || o.header.length > 0) { this._digest(); this._populate(); } @@ -29508,7 +29513,7 @@ BI.GridTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0) { + if (o.items.length > 0 || o.header.length > 0) { this._populate(); } }, @@ -29519,7 +29524,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateScrollbar: function () { var o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -29604,7 +29610,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { diff --git a/bi/case.js b/bi/case.js index 163ac141d..039b4873e 100644 --- a/bi/case.js +++ b/bi/case.js @@ -3596,6 +3596,14 @@ BI.BubbleCombo = BI.inherit(BI.Widget, { hasView: function () { return BI.isNotNull(this.combo.getView()); + }, + + isViewVisible: function () { + return this.combo.isViewVisible(); + }, + + setEnable: function (v) { + this.combo.setEnable(!!v); } }); diff --git a/bi/core.js b/bi/core.js index 95228d4cf..7d6a75020 100644 --- a/bi/core.js +++ b/bi/core.js @@ -6338,8 +6338,9 @@ Date.checkLegal = function (str) { if (ar.length <= 2) { return MM >= 1 && MM <= 12; } - Date._MD[1] = Date.isLeap(YY) ? 29 : 28; - return MM >= 1 && MM <= 12 && DD <= Date._MD[MM - 1]; + var MD = Date._MD.slice(0); + MD[1] = Date.isLeap(YY) ? 29 : 28; + return MM >= 1 && MM <= 12 && DD <= MD[MM - 1]; }; Date.parseDateTime = function (str, fmt) { @@ -10402,6 +10403,19 @@ $.extend(BI, { } else { return [sNodes]; } + }, + + traversal: function (array, callback) { + if (BI.isNull(array)) { + return; + } + var self = this; + BI.any(array, function (i, item) { + if (callback(i, item) === false) { + return true; + } + self.traversal(item.children, callback); + }) } }) })();//向量操作 diff --git a/bi/polyfill.js b/bi/polyfill.js new file mode 100644 index 000000000..854ed288f --- /dev/null +++ b/bi/polyfill.js @@ -0,0 +1,93 @@ +if(![].indexOf){ + /** + * 检查指定的值是否在数组中 + * @param {Object} o 要检查的值 + * @return {Number} o在数组中的索引(如果不在数组中则返回-1) + */ + [].indexOf = function (o) { + for (var i = 0, len = this.length; i < len; i++) { + if (_.isEqual(o, this[i])) { + return i; + } + } + return -1; + } +} +if(![].lastIndexOf){ + /** + * 检查指定的值是否在数组中 + * ie67不支持数组的这个方法 + * @param {Object} o 要检查的值 + * @return {Number} o在数组中的索引(如果不在数组中则返回-1) + */ + [].lastIndexOf = function (o) { + for (var len = this.length, i = len - 1; i >= 0; i--) { + if (_.isEqual(o, this[i])) { + return i; + } + } + return -1; + } +}/** + * 特殊情况 + * Created by wang on 15/6/23. + */ +//解决console未定义问题 guy +window.console = window.console || (function () { + var c = {}; + c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile + = c.clear = c.exception = c.trace = c.assert = function () { + }; + return c; + })(); +/* + * 前端缓存 + */ +window.localStorage || (window.localStorage = { + items: {}, + setItem: function (k, v) { + BI.Cache.addCookie(k, v); + }, + getItem: function (k) { + return BI.Cache.getCookie(k); + }, + removeItem: function (k) { + BI.Cache.deleteCookie(k); + }, + key: function () { + + }, + clear: function () { + this.items = {}; + } +});//修复ie9下sort方法的bug +!function (window) { + var ua = window.navigator.userAgent.toLowerCase(), + reg = /msie|applewebkit.+safari/; + if (reg.test(ua)) { + var _sort = Array.prototype.sort; + Array.prototype.sort = function (fn) { + if (!!fn && typeof fn === 'function') { + if (this.length < 2) { + return this; + } + var i = 0, j = i + 1, l = this.length, tmp, r = false, t = 0; + for (; i < l; i++) { + for (j = i + 1; j < l; j++) { + t = fn.call(this, this[i], this[j]); + r = (typeof t === 'number' ? t : + !!t ? 1 : 0) > 0; + if (r === true) { + tmp = this[i]; + this[i] = this[j]; + this[j] = tmp; + } + } + } + return this; + } else { + return _sort.call(this); + } + }; + } +}(window); \ No newline at end of file diff --git a/bi/widget.js b/bi/widget.js index bb810d8d1..42fb0ced5 100644 --- a/bi/widget.js +++ b/bi/widget.js @@ -9559,38 +9559,11 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { self.trigger.getCounter().setButtonChecked(self.storeValue); }; this.storeValue = {}; - this.popup = BI.createWidget({ - type: 'bi.multi_select_popup_view', - itemsCreator: o.itemsCreator, - valueFormatter: o.valueFormatter, - onLoaded: function () { - BI.nextTick(function () { - self.combo.adjustWidth(); - self.combo.adjustHeight(); - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); - - this.popup.on(BI.MultiSelectPopupView.EVENT_CHANGE, function () { - self.storeValue = this.getValue(); - self._adjust(function () { - assertShowValue(); - }); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, function () { - self.setValue(); - self._defaultState(); - }); this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: { left: 1, @@ -9675,7 +9648,43 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup, + popup: { + type: 'bi.multi_select_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiSelectPopupView.EVENT_CHANGE, + action: function () { + self.storeValue = this.getValue(); + self._adjust(function () { + assertShowValue(); + }); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, + action: function () { + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + valueFormatter: o.valueFormatter, + onLoaded: function () { + BI.nextTick(function () { + self.combo.adjustWidth(); + self.combo.adjustHeight(); + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0; } @@ -10272,6 +10281,11 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { this.numberCounter.hideView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + this.numberCounter.setAdapter(adapter); + }, + setValue: function (ob) { this.searcher.setValue(ob); this.numberCounter.setValue(ob); @@ -10816,6 +10830,10 @@ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { return this.searcher.getView() && this.searcher.getView().hasChecked(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + setState: function (ob) { var o = this.options; ob || (ob = {}); @@ -10937,6 +10955,10 @@ BI.MultiSelectCheckSelectedSwitcher = BI.inherit(BI.Widget, { this.switcher.hideView(); }, + setAdapter: function (adapter) { + this.switcher.setAdapter(adapter); + }, + setValue: function (v) { this.switcher.setValue(v); }, @@ -11406,7 +11428,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { } }, - _defaultConfig: function () { return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-combo', @@ -11420,31 +11441,13 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var self = this, o = this.options; - this.popup = BI.createWidget({ - type: 'bi.multi_tree_popup_view', - itemsCreator: o.itemsCreator, - onLoaded: function () { - BI.nextTick(function () { - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); var isInit = false; var want2showCounter = false; - this.popup.on(BI.MultiTreePopup.EVENT_AFTERINIT, function () { - self.trigger.getCounter().adjustView(); - isInit = true; - if (want2showCounter === true) { - showCounter(); - } - }); - this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: this.constants.offset }, @@ -11469,7 +11472,53 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup + popup: { + type: 'bi.multi_tree_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiTreePopup.EVENT_AFTERINIT, + action: function () { + self.trigger.getCounter().adjustView(); + isInit = true; + if (want2showCounter === true) { + showCounter(); + } + } + }, { + eventName: BI.MultiTreePopup.EVENT_CHANGE, + action: function () { + change = true; + var val = { + type: BI.Selection.Multi, + value: this.hasChecked() ? {1: 1} : {} + }; + self.trigger.getSearcher().setState(val); + self.trigger.getCounter().setButtonChecked(val); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR, + action: function () { + clear = true; + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + onLoaded: function () { + BI.nextTick(function () { + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + } }); this.storeValue = {value: {}}; @@ -11532,24 +11581,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.getSearcher().setState(val); this.getCounter().setButtonChecked(val); }); - this.popup.on(BI.MultiTreePopup.EVENT_CHANGE, function () { - change = true; - var val = { - type: BI.Selection.Multi, - value: this.hasChecked() ? {1: 1} : {} - }; - self.trigger.getSearcher().setState(val); - self.trigger.getCounter().setButtonChecked(val); - }); - - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CLEAR, function () { - clear = true; - self.setValue(); - self._defaultState(); - }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { if (isSearching()) { @@ -11618,7 +11649,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.combo.hideView(); }, - setEnable: function(v){ + setEnable: function (v) { this.combo.setEnable(v); }, @@ -11956,6 +11987,10 @@ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { this.searcher.adjustView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + isSearching: function () { return this.searcher.isSearching(); }, @@ -16974,7 +17009,7 @@ BI.YearQuarterCombo = BI.inherit(BI.Widget, { }); BI.YearQuarterCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.shortcut('bi.year_quarter_combo', BI.YearQuarterCombo);/** - * 简单的复选下拉框控件, 适用于数据量少的情况 + * 简单的复选下拉框控件, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值 * 封装了字段处理逻辑 * * Created by GUY on 2015/10/29. @@ -17053,13 +17088,13 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } @@ -17198,24 +17233,23 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return; } - doCheck(0, [], selectedValues); + doCheck(0, [], this.tree.getRoot(), selectedValues); callback({ items: result }); - function doCheck(floor, parentValues, selected) { + function doCheck(floor, parentValues, node, selected) { if (floor >= self.floors) { return; } if (selected == null || BI.isEmpty(selected)) { - var children = self._getChildren(parentValues); - BI.each(children, function (i, child) { + BI.each(node.getChildren(), function (i, child) { var newParents = BI.clone(parentValues); newParents.push(child.value); var llen = self._getChildCount(newParents); - createOneJson(child, llen); - doCheck(floor + 1, newParents, {}); + createOneJson(child, node.id, llen); + doCheck(floor + 1, newParents, child, {}); }); return; } @@ -17223,8 +17257,8 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { var node = self._getNode(k); var newParents = BI.clone(parentValues); newParents.push(node.value); - createOneJson(node, getCount(selected[k], newParents)); - doCheck(floor + 1, newParents, selected[k]); + createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents)); + doCheck(floor + 1, newParents, node, selected[k]); }) } @@ -17239,10 +17273,10 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return BI.size(jo); } - function createOneJson(node, llen) { + function createOneJson(node, pId, llen) { result.push({ id: node.id, - pId: node.pId, + pId: pId, text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""), value: node.value, open: true @@ -17624,7 +17658,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { if (valueMap[current][0] === 1) { var values = BI.clone(parentValues); values.push(current); - if (hasChild && self._getChildCount(values) != valueMap[current][1]) { + if (hasChild && self._getChildCount(values) !== valueMap[current][1]) { halfCheck = true; } } else if (valueMap[current][0] === 2) { @@ -17780,13 +17814,13 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } diff --git a/demo/js/config/widget.js b/demo/js/config/widget.js index 423892244..003cadc12 100644 --- a/demo/js/config/widget.js +++ b/demo/js/config/widget.js @@ -21,6 +21,14 @@ Demo.WIDGET_CONFIG = [{ pId: 401, text: "bi.page_table", value: "demo.page_table" +}, { + id: 402, + pId: 4, + text: "tree" +}, { + pId: 402, + text: "bi.multilayer_select_tree_combo", + value: "demo.multilayer_select_tree_combo" }, { pId: 4, text: "bi.multi_select_combo", diff --git a/demo/js/widget/tree/demo.multilayer_select_tree_combo.js b/demo/js/widget/tree/demo.multilayer_select_tree_combo.js new file mode 100644 index 000000000..4968bb7b1 --- /dev/null +++ b/demo/js/widget/tree/demo.multilayer_select_tree_combo.js @@ -0,0 +1,66 @@ +/** + * Created by User on 2017/3/22. + */ +Demo.MultiSelectCombo = BI.inherit(BI.Widget, { + props: {}, + + render: function (vessel) { + var TREEWITHCHILDREN = [{ + id: -1, value: "根目录", text: "根目录", children: [ + { + id: 1, value: "第一级目录1", text: "第一级目录1", children: [ + {id: 11, value: "第二级文件1", text: "第二级文件1"}, + { + id: 12, value: "第二级目录2", text: "第二级目录2", children: [ + { + id: 121, value: "第三级目录1", text: "第三级目录1", children: [ + { + id: 1211, value: "第四级目录1", text: "第四级目录1", children: [ + {id: 12111, value: "第五级文件1", text: "第五级文件1"} + ] + } + ] + }, + {id: 122, value: "第三级文件1", text: "第三级文件1"} + ] + } + ] + }, + { + id: 2, value: "第一级目录2", text: "第一级目录2", children: [ + { + id: 21, value: "第二级目录3", text: "第二级目录3", children: [ + { + id: 211, value: "第三级目录2", text: "第三级目录2", children: [ + {id: 2111, value: "第四级文件1", text: "第四级文件1"} + ] + }, + {id: 212, value: "第三级文件2", text: "第三级文件2"} + ] + }, + {id: 22, value: "第二级文件2", text: "第二级文件2"} + ] + } + ] + }]; + var items = BI.deepClone(TREEWITHCHILDREN); + var combo = BI.createWidget({ + type: "bi.multilayer_select_tree_combo", + }); + + combo.populate(items); + return { + type: "bi.vertical", + items: [combo, { + type: "bi.button", + width: 100, + text: "getValue", + handler: function () { + BI.Msg.alert("", JSON.stringify(combo.getValue())); + } + }], + vgap: 100 + } + } +}); +BI.shortcut("demo.multilayer_select_tree_combo", Demo.MultiSelectCombo); \ No newline at end of file diff --git a/docs/base.css b/docs/base.css index 2bd711754..9a756c550 100644 --- a/docs/base.css +++ b/docs/base.css @@ -920,12 +920,6 @@ li.CodeMirror-hint-active { .bi-textarea-editor .textarea-editor-content { border: none; } -.bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #d4dadd; -} -.bi-theme-dark .bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #525466; -} /****添加计算宽度的--运算符直接需要space****/ /****** common color(常用颜色,可用于普遍场景) *****/ /**** custom color(自定义颜色,用于特定场景) ****/ diff --git a/docs/base.js b/docs/base.js index 9476b3d85..d6f385308 100644 --- a/docs/base.js +++ b/docs/base.js @@ -4642,6 +4642,11 @@ BI.Switcher = BI.inherit(BI.Widget, { return this.popupView ? this.popupView.getValue() : []; }, + setAdapter: function (adapter) { + this.options.adapter = adapter; + BI.Maskers.remove(this.getName()); + }, + isViewVisible: function () { return this.isEnabled() && this.switcher.isEnabled() && (this.options.adapter ? BI.Maskers.isVisible(this.getName()) : (this.popupView && this.popupView.isVisible())); @@ -28726,7 +28731,7 @@ BI.CollectionTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0 || o.header.length < 0) { + if (o.items.length > 0 || o.header.length > 0) { this._digest(); this._populate(); } @@ -29508,7 +29513,7 @@ BI.GridTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0) { + if (o.items.length > 0 || o.header.length > 0) { this._populate(); } }, @@ -29519,7 +29524,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateScrollbar: function () { var o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -29604,7 +29610,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { diff --git a/docs/case.js b/docs/case.js index 163ac141d..039b4873e 100644 --- a/docs/case.js +++ b/docs/case.js @@ -3596,6 +3596,14 @@ BI.BubbleCombo = BI.inherit(BI.Widget, { hasView: function () { return BI.isNotNull(this.combo.getView()); + }, + + isViewVisible: function () { + return this.combo.isViewVisible(); + }, + + setEnable: function (v) { + this.combo.setEnable(!!v); } }); diff --git a/docs/core.js b/docs/core.js index 39cd1299f..14ffbdf52 100644 --- a/docs/core.js +++ b/docs/core.js @@ -18862,6 +18862,19 @@ $.extend(BI, { } else { return [sNodes]; } + }, + + traversal: function (array, callback) { + if (BI.isNull(array)) { + return; + } + var self = this; + BI.any(array, function (i, item) { + if (callback(i, item) === false) { + return true; + } + self.traversal(item.children, callback); + }) } }) })();//向量操作 @@ -23821,8 +23834,9 @@ Date.checkLegal = function (str) { if (ar.length <= 2) { return MM >= 1 && MM <= 12; } - Date._MD[1] = Date.isLeap(YY) ? 29 : 28; - return MM >= 1 && MM <= 12 && DD <= Date._MD[MM - 1]; + var MD = Date._MD.slice(0); + MD[1] = Date.isLeap(YY) ? 29 : 28; + return MM >= 1 && MM <= 12 && DD <= MD[MM - 1]; }; Date.parseDateTime = function (str, fmt) { diff --git a/docs/demo.js b/docs/demo.js index a5ba8e542..e7a4a5c0f 100644 --- a/docs/demo.js +++ b/docs/demo.js @@ -3112,6 +3112,14 @@ Demo.COMPONENT_CONFIG = [{ pId: 401, text: "bi.page_table", value: "demo.page_table" +}, { + id: 402, + pId: 4, + text: "tree" +}, { + pId: 402, + text: "bi.multilayer_select_tree_combo", + value: "demo.multilayer_select_tree_combo" }, { pId: 4, text: "bi.multi_select_combo", @@ -6725,7 +6733,72 @@ BI.shortcut("demo.responsive_table", Demo.Func);Demo.Func = BI.inherit(BI.Widget }) } }); -BI.shortcut("demo.sequence_table", Demo.Func);Demo.CONFIG = Demo.CORE_CONFIG.concat(Demo.BASE_CONFIG).concat(Demo.CASE_CONFIG).concat(Demo.WIDGET_CONFIG).concat(Demo.COMPONENT_CONFIG).concat(Demo.CHART_CONFIG); +BI.shortcut("demo.sequence_table", Demo.Func);/** + * Created by User on 2017/3/22. + */ +Demo.MultiSelectCombo = BI.inherit(BI.Widget, { + props: {}, + + render: function (vessel) { + var TREEWITHCHILDREN = [{ + id: -1, value: "根目录", text: "根目录", children: [ + { + id: 1, value: "第一级目录1", text: "第一级目录1", children: [ + {id: 11, value: "第二级文件1", text: "第二级文件1"}, + { + id: 12, value: "第二级目录2", text: "第二级目录2", children: [ + { + id: 121, value: "第三级目录1", text: "第三级目录1", children: [ + { + id: 1211, value: "第四级目录1", text: "第四级目录1", children: [ + {id: 12111, value: "第五级文件1", text: "第五级文件1"} + ] + } + ] + }, + {id: 122, value: "第三级文件1", text: "第三级文件1"} + ] + } + ] + }, + { + id: 2, value: "第一级目录2", text: "第一级目录2", children: [ + { + id: 21, value: "第二级目录3", text: "第二级目录3", children: [ + { + id: 211, value: "第三级目录2", text: "第三级目录2", children: [ + {id: 2111, value: "第四级文件1", text: "第四级文件1"} + ] + }, + {id: 212, value: "第三级文件2", text: "第三级文件2"} + ] + }, + {id: 22, value: "第二级文件2", text: "第二级文件2"} + ] + } + ] + }]; + var items = BI.deepClone(TREEWITHCHILDREN); + var combo = BI.createWidget({ + type: "bi.multilayer_select_tree_combo", + }); + + combo.populate(items); + return { + type: "bi.vertical", + items: [combo, { + type: "bi.button", + width: 100, + text: "getValue", + handler: function () { + BI.Msg.alert("", JSON.stringify(combo.getValue())); + } + }], + vgap: 100 + } + } +}); +BI.shortcut("demo.multilayer_select_tree_combo", Demo.MultiSelectCombo);Demo.CONFIG = Demo.CORE_CONFIG.concat(Demo.BASE_CONFIG).concat(Demo.CASE_CONFIG).concat(Demo.WIDGET_CONFIG).concat(Demo.COMPONENT_CONFIG).concat(Demo.CHART_CONFIG); Demo.CONSTANTS = { diff --git a/docs/polyfill.js b/docs/polyfill.js new file mode 100644 index 000000000..854ed288f --- /dev/null +++ b/docs/polyfill.js @@ -0,0 +1,93 @@ +if(![].indexOf){ + /** + * 检查指定的值是否在数组中 + * @param {Object} o 要检查的值 + * @return {Number} o在数组中的索引(如果不在数组中则返回-1) + */ + [].indexOf = function (o) { + for (var i = 0, len = this.length; i < len; i++) { + if (_.isEqual(o, this[i])) { + return i; + } + } + return -1; + } +} +if(![].lastIndexOf){ + /** + * 检查指定的值是否在数组中 + * ie67不支持数组的这个方法 + * @param {Object} o 要检查的值 + * @return {Number} o在数组中的索引(如果不在数组中则返回-1) + */ + [].lastIndexOf = function (o) { + for (var len = this.length, i = len - 1; i >= 0; i--) { + if (_.isEqual(o, this[i])) { + return i; + } + } + return -1; + } +}/** + * 特殊情况 + * Created by wang on 15/6/23. + */ +//解决console未定义问题 guy +window.console = window.console || (function () { + var c = {}; + c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile + = c.clear = c.exception = c.trace = c.assert = function () { + }; + return c; + })(); +/* + * 前端缓存 + */ +window.localStorage || (window.localStorage = { + items: {}, + setItem: function (k, v) { + BI.Cache.addCookie(k, v); + }, + getItem: function (k) { + return BI.Cache.getCookie(k); + }, + removeItem: function (k) { + BI.Cache.deleteCookie(k); + }, + key: function () { + + }, + clear: function () { + this.items = {}; + } +});//修复ie9下sort方法的bug +!function (window) { + var ua = window.navigator.userAgent.toLowerCase(), + reg = /msie|applewebkit.+safari/; + if (reg.test(ua)) { + var _sort = Array.prototype.sort; + Array.prototype.sort = function (fn) { + if (!!fn && typeof fn === 'function') { + if (this.length < 2) { + return this; + } + var i = 0, j = i + 1, l = this.length, tmp, r = false, t = 0; + for (; i < l; i++) { + for (j = i + 1; j < l; j++) { + t = fn.call(this, this[i], this[j]); + r = (typeof t === 'number' ? t : + !!t ? 1 : 0) > 0; + if (r === true) { + tmp = this[i]; + this[i] = this[j]; + this[j] = tmp; + } + } + } + return this; + } else { + return _sort.call(this); + } + }; + } +}(window); \ No newline at end of file diff --git a/docs/widget.js b/docs/widget.js index bb810d8d1..42fb0ced5 100644 --- a/docs/widget.js +++ b/docs/widget.js @@ -9559,38 +9559,11 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { self.trigger.getCounter().setButtonChecked(self.storeValue); }; this.storeValue = {}; - this.popup = BI.createWidget({ - type: 'bi.multi_select_popup_view', - itemsCreator: o.itemsCreator, - valueFormatter: o.valueFormatter, - onLoaded: function () { - BI.nextTick(function () { - self.combo.adjustWidth(); - self.combo.adjustHeight(); - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); - - this.popup.on(BI.MultiSelectPopupView.EVENT_CHANGE, function () { - self.storeValue = this.getValue(); - self._adjust(function () { - assertShowValue(); - }); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, function () { - self.setValue(); - self._defaultState(); - }); this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: { left: 1, @@ -9675,7 +9648,43 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup, + popup: { + type: 'bi.multi_select_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiSelectPopupView.EVENT_CHANGE, + action: function () { + self.storeValue = this.getValue(); + self._adjust(function () { + assertShowValue(); + }); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, + action: function () { + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + valueFormatter: o.valueFormatter, + onLoaded: function () { + BI.nextTick(function () { + self.combo.adjustWidth(); + self.combo.adjustHeight(); + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0; } @@ -10272,6 +10281,11 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { this.numberCounter.hideView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + this.numberCounter.setAdapter(adapter); + }, + setValue: function (ob) { this.searcher.setValue(ob); this.numberCounter.setValue(ob); @@ -10816,6 +10830,10 @@ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { return this.searcher.getView() && this.searcher.getView().hasChecked(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + setState: function (ob) { var o = this.options; ob || (ob = {}); @@ -10937,6 +10955,10 @@ BI.MultiSelectCheckSelectedSwitcher = BI.inherit(BI.Widget, { this.switcher.hideView(); }, + setAdapter: function (adapter) { + this.switcher.setAdapter(adapter); + }, + setValue: function (v) { this.switcher.setValue(v); }, @@ -11406,7 +11428,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { } }, - _defaultConfig: function () { return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-combo', @@ -11420,31 +11441,13 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var self = this, o = this.options; - this.popup = BI.createWidget({ - type: 'bi.multi_tree_popup_view', - itemsCreator: o.itemsCreator, - onLoaded: function () { - BI.nextTick(function () { - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); var isInit = false; var want2showCounter = false; - this.popup.on(BI.MultiTreePopup.EVENT_AFTERINIT, function () { - self.trigger.getCounter().adjustView(); - isInit = true; - if (want2showCounter === true) { - showCounter(); - } - }); - this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: this.constants.offset }, @@ -11469,7 +11472,53 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup + popup: { + type: 'bi.multi_tree_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiTreePopup.EVENT_AFTERINIT, + action: function () { + self.trigger.getCounter().adjustView(); + isInit = true; + if (want2showCounter === true) { + showCounter(); + } + } + }, { + eventName: BI.MultiTreePopup.EVENT_CHANGE, + action: function () { + change = true; + var val = { + type: BI.Selection.Multi, + value: this.hasChecked() ? {1: 1} : {} + }; + self.trigger.getSearcher().setState(val); + self.trigger.getCounter().setButtonChecked(val); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR, + action: function () { + clear = true; + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + onLoaded: function () { + BI.nextTick(function () { + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + } }); this.storeValue = {value: {}}; @@ -11532,24 +11581,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.getSearcher().setState(val); this.getCounter().setButtonChecked(val); }); - this.popup.on(BI.MultiTreePopup.EVENT_CHANGE, function () { - change = true; - var val = { - type: BI.Selection.Multi, - value: this.hasChecked() ? {1: 1} : {} - }; - self.trigger.getSearcher().setState(val); - self.trigger.getCounter().setButtonChecked(val); - }); - - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CLEAR, function () { - clear = true; - self.setValue(); - self._defaultState(); - }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { if (isSearching()) { @@ -11618,7 +11649,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.combo.hideView(); }, - setEnable: function(v){ + setEnable: function (v) { this.combo.setEnable(v); }, @@ -11956,6 +11987,10 @@ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { this.searcher.adjustView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + isSearching: function () { return this.searcher.isSearching(); }, @@ -16974,7 +17009,7 @@ BI.YearQuarterCombo = BI.inherit(BI.Widget, { }); BI.YearQuarterCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.shortcut('bi.year_quarter_combo', BI.YearQuarterCombo);/** - * 简单的复选下拉框控件, 适用于数据量少的情况 + * 简单的复选下拉框控件, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值 * 封装了字段处理逻辑 * * Created by GUY on 2015/10/29. @@ -17053,13 +17088,13 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } @@ -17198,24 +17233,23 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return; } - doCheck(0, [], selectedValues); + doCheck(0, [], this.tree.getRoot(), selectedValues); callback({ items: result }); - function doCheck(floor, parentValues, selected) { + function doCheck(floor, parentValues, node, selected) { if (floor >= self.floors) { return; } if (selected == null || BI.isEmpty(selected)) { - var children = self._getChildren(parentValues); - BI.each(children, function (i, child) { + BI.each(node.getChildren(), function (i, child) { var newParents = BI.clone(parentValues); newParents.push(child.value); var llen = self._getChildCount(newParents); - createOneJson(child, llen); - doCheck(floor + 1, newParents, {}); + createOneJson(child, node.id, llen); + doCheck(floor + 1, newParents, child, {}); }); return; } @@ -17223,8 +17257,8 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { var node = self._getNode(k); var newParents = BI.clone(parentValues); newParents.push(node.value); - createOneJson(node, getCount(selected[k], newParents)); - doCheck(floor + 1, newParents, selected[k]); + createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents)); + doCheck(floor + 1, newParents, node, selected[k]); }) } @@ -17239,10 +17273,10 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return BI.size(jo); } - function createOneJson(node, llen) { + function createOneJson(node, pId, llen) { result.push({ id: node.id, - pId: node.pId, + pId: pId, text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""), value: node.value, open: true @@ -17624,7 +17658,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { if (valueMap[current][0] === 1) { var values = BI.clone(parentValues); values.push(current); - if (hasChild && self._getChildCount(values) != valueMap[current][1]) { + if (hasChild && self._getChildCount(values) !== valueMap[current][1]) { halfCheck = true; } } else if (valueMap[current][0] === 2) { @@ -17780,13 +17814,13 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } diff --git a/src/base/combination/switcher.js b/src/base/combination/switcher.js index 25e28cd5d..c72715b63 100644 --- a/src/base/combination/switcher.js +++ b/src/base/combination/switcher.js @@ -204,6 +204,11 @@ BI.Switcher = BI.inherit(BI.Widget, { return this.popupView ? this.popupView.getValue() : []; }, + setAdapter: function (adapter) { + this.options.adapter = adapter; + BI.Maskers.remove(this.getName()); + }, + isViewVisible: function () { return this.isEnabled() && this.switcher.isEnabled() && (this.options.adapter ? BI.Maskers.isVisible(this.getName()) : (this.popupView && this.popupView.isVisible())); diff --git a/src/base/table/table.collection.js b/src/base/table/table.collection.js index 7d222750d..c60b8333a 100644 --- a/src/base/table/table.collection.js +++ b/src/base/table/table.collection.js @@ -163,7 +163,7 @@ BI.CollectionTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0 || o.header.length < 0) { + if (o.items.length > 0 || o.header.length > 0) { this._digest(); this._populate(); } diff --git a/src/base/table/table.grid.js b/src/base/table/table.grid.js index 8205bf52c..1ddee09e4 100644 --- a/src/base/table/table.grid.js +++ b/src/base/table/table.grid.js @@ -167,7 +167,7 @@ BI.GridTable = BI.inherit(BI.Widget, { mounted: function () { var o = this.options; - if (o.items.length > 0) { + if (o.items.length > 0 || o.header.length > 0) { this._populate(); } }, @@ -178,7 +178,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateScrollbar: function () { var o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -263,7 +264,8 @@ BI.GridTable = BI.inherit(BI.Widget, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = [], totalRowSize = o.items.length * o.rowSize; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { diff --git a/src/case/combo/bubblecombo/combo.bubble.js b/src/case/combo/bubblecombo/combo.bubble.js index 7da74e5ca..023872a57 100644 --- a/src/case/combo/bubblecombo/combo.bubble.js +++ b/src/case/combo/bubblecombo/combo.bubble.js @@ -197,6 +197,14 @@ BI.BubbleCombo = BI.inherit(BI.Widget, { hasView: function () { return BI.isNotNull(this.combo.getView()); + }, + + isViewVisible: function () { + return this.combo.isViewVisible(); + }, + + setEnable: function (v) { + this.combo.setEnable(!!v); } }); diff --git a/src/component/allvaluechooser/combo.allvaluechooser.js b/src/component/allvaluechooser/combo.allvaluechooser.js index 0b1fc30be..25d797533 100644 --- a/src/component/allvaluechooser/combo.allvaluechooser.js +++ b/src/component/allvaluechooser/combo.allvaluechooser.js @@ -1,5 +1,5 @@ /** - * 简单的复选下拉框控件, 适用于数据量少的情况 + * 简单的复选下拉框控件, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值 * 封装了字段处理逻辑 * * Created by GUY on 2015/10/29. @@ -78,13 +78,13 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } diff --git a/src/component/treevaluechooser/combo.treevaluechooser.js b/src/component/treevaluechooser/combo.treevaluechooser.js index c97b6b3e7..1a3510914 100644 --- a/src/component/treevaluechooser/combo.treevaluechooser.js +++ b/src/component/treevaluechooser/combo.treevaluechooser.js @@ -106,24 +106,23 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return; } - doCheck(0, [], selectedValues); + doCheck(0, [], this.tree.getRoot(), selectedValues); callback({ items: result }); - function doCheck(floor, parentValues, selected) { + function doCheck(floor, parentValues, node, selected) { if (floor >= self.floors) { return; } if (selected == null || BI.isEmpty(selected)) { - var children = self._getChildren(parentValues); - BI.each(children, function (i, child) { + BI.each(node.getChildren(), function (i, child) { var newParents = BI.clone(parentValues); newParents.push(child.value); var llen = self._getChildCount(newParents); - createOneJson(child, llen); - doCheck(floor + 1, newParents, {}); + createOneJson(child, node.id, llen); + doCheck(floor + 1, newParents, child, {}); }); return; } @@ -131,8 +130,8 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { var node = self._getNode(k); var newParents = BI.clone(parentValues); newParents.push(node.value); - createOneJson(node, getCount(selected[k], newParents)); - doCheck(floor + 1, newParents, selected[k]); + createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents)); + doCheck(floor + 1, newParents, node, selected[k]); }) } @@ -147,10 +146,10 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { return BI.size(jo); } - function createOneJson(node, llen) { + function createOneJson(node, pId, llen) { result.push({ id: node.id, - pId: node.pId, + pId: pId, text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""), value: node.value, open: true @@ -532,7 +531,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { if (valueMap[current][0] === 1) { var values = BI.clone(parentValues); values.push(current); - if (hasChild && self._getChildCount(values) != valueMap[current][1]) { + if (hasChild && self._getChildCount(values) !== valueMap[current][1]) { halfCheck = true; } } else if (valueMap[current][0] === 2) { diff --git a/src/component/valuechooser/combo.valuechooser.js b/src/component/valuechooser/combo.valuechooser.js index d09392ec0..778865ffb 100644 --- a/src/component/valuechooser/combo.valuechooser.js +++ b/src/component/valuechooser/combo.valuechooser.js @@ -90,13 +90,13 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, { return !filter[ob.value]; }); } - if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { + if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } - if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { + if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } diff --git a/src/core/proto/date.js b/src/core/proto/date.js index 36197df93..75e833c6a 100644 --- a/src/core/proto/date.js +++ b/src/core/proto/date.js @@ -386,8 +386,9 @@ Date.checkLegal = function (str) { if (ar.length <= 2) { return MM >= 1 && MM <= 12; } - Date._MD[1] = Date.isLeap(YY) ? 29 : 28; - return MM >= 1 && MM <= 12 && DD <= Date._MD[MM - 1]; + var MD = Date._MD.slice(0); + MD[1] = Date.isLeap(YY) ? 29 : 28; + return MM >= 1 && MM <= 12 && DD <= MD[MM - 1]; }; Date.parseDateTime = function (str, fmt) { diff --git a/src/core/utils/tree.js b/src/core/utils/tree.js index 51ac0f23b..139dedce1 100644 --- a/src/core/utils/tree.js +++ b/src/core/utils/tree.js @@ -464,6 +464,19 @@ } else { return [sNodes]; } + }, + + traversal: function (array, callback) { + if (BI.isNull(array)) { + return; + } + var self = this; + BI.any(array, function (i, item) { + if (callback(i, item) === false) { + return true; + } + self.traversal(item.children, callback); + }) } }) })(); \ No newline at end of file diff --git a/src/css/base/single/editor/editor.textarea.css b/src/css/base/single/editor/editor.textarea.css index 95537977a..13e82616c 100644 --- a/src/css/base/single/editor/editor.textarea.css +++ b/src/css/base/single/editor/editor.textarea.css @@ -12,9 +12,3 @@ .bi-textarea-editor .textarea-editor-content { border: none; } -.bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #d4dadd; -} -.bi-theme-dark .bi-textarea-editor .textarea-editor-content.textarea-editor-focus { - border: 1px solid #525466; -} diff --git a/src/less/base/single/editor/editor.textarea.less b/src/less/base/single/editor/editor.textarea.less index 452595970..02f9f449c 100644 --- a/src/less/base/single/editor/editor.textarea.less +++ b/src/less/base/single/editor/editor.textarea.less @@ -8,7 +8,7 @@ border: none; } &.textarea-editor-focus{ - border: 1px solid @color-bi-border-line; + } } } @@ -17,7 +17,7 @@ .bi-textarea-editor { & .textarea-editor-content { &.textarea-editor-focus{ - border: 1px solid @color-bi-border-line-theme-dark; + } } } diff --git a/src/widget/multiselect/multiselect.combo.js b/src/widget/multiselect/multiselect.combo.js index f369f42a3..d5d1e1f41 100644 --- a/src/widget/multiselect/multiselect.combo.js +++ b/src/widget/multiselect/multiselect.combo.js @@ -24,38 +24,11 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { self.trigger.getCounter().setButtonChecked(self.storeValue); }; this.storeValue = {}; - this.popup = BI.createWidget({ - type: 'bi.multi_select_popup_view', - itemsCreator: o.itemsCreator, - valueFormatter: o.valueFormatter, - onLoaded: function () { - BI.nextTick(function () { - self.combo.adjustWidth(); - self.combo.adjustHeight(); - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); - - this.popup.on(BI.MultiSelectPopupView.EVENT_CHANGE, function () { - self.storeValue = this.getValue(); - self._adjust(function () { - assertShowValue(); - }); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, function () { - self.setValue(); - self._defaultState(); - }); this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: { left: 1, @@ -140,7 +113,43 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup, + popup: { + type: 'bi.multi_select_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiSelectPopupView.EVENT_CHANGE, + action: function () { + self.storeValue = this.getValue(); + self._adjust(function () { + assertShowValue(); + }); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR, + action: function () { + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + valueFormatter: o.valueFormatter, + onLoaded: function () { + BI.nextTick(function () { + self.combo.adjustWidth(); + self.combo.adjustHeight(); + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0; } diff --git a/src/widget/multiselect/multiselect.trigger.js b/src/widget/multiselect/multiselect.trigger.js index 2d85f2122..e9a1dda38 100644 --- a/src/widget/multiselect/multiselect.trigger.js +++ b/src/widget/multiselect/multiselect.trigger.js @@ -123,6 +123,11 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { this.numberCounter.hideView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + this.numberCounter.setAdapter(adapter); + }, + setValue: function (ob) { this.searcher.setValue(ob); this.numberCounter.setValue(ob); diff --git a/src/widget/multiselect/trigger/searcher.multiselect.js b/src/widget/multiselect/trigger/searcher.multiselect.js index b641fddca..337749a6e 100644 --- a/src/widget/multiselect/trigger/searcher.multiselect.js +++ b/src/widget/multiselect/trigger/searcher.multiselect.js @@ -98,6 +98,10 @@ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { return this.searcher.getView() && this.searcher.getView().hasChecked(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + setState: function (ob) { var o = this.options; ob || (ob = {}); diff --git a/src/widget/multiselect/trigger/switcher.checkselected.js b/src/widget/multiselect/trigger/switcher.checkselected.js index 321d1eceb..011cd3794 100644 --- a/src/widget/multiselect/trigger/switcher.checkselected.js +++ b/src/widget/multiselect/trigger/switcher.checkselected.js @@ -72,6 +72,10 @@ BI.MultiSelectCheckSelectedSwitcher = BI.inherit(BI.Widget, { this.switcher.hideView(); }, + setAdapter: function (adapter) { + this.switcher.setAdapter(adapter); + }, + setValue: function (v) { this.switcher.setValue(v); }, diff --git a/src/widget/multitree/multi.tree.combo.js b/src/widget/multitree/multi.tree.combo.js index 53b039de6..7c302e9cd 100644 --- a/src/widget/multitree/multi.tree.combo.js +++ b/src/widget/multitree/multi.tree.combo.js @@ -15,7 +15,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { } }, - _defaultConfig: function () { return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-combo', @@ -29,31 +28,13 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var self = this, o = this.options; - this.popup = BI.createWidget({ - type: 'bi.multi_tree_popup_view', - itemsCreator: o.itemsCreator, - onLoaded: function () { - BI.nextTick(function () { - self.trigger.getCounter().adjustView(); - self.trigger.getSearcher().adjustView(); - }); - } - }); var isInit = false; var want2showCounter = false; - this.popup.on(BI.MultiTreePopup.EVENT_AFTERINIT, function () { - self.trigger.getCounter().adjustView(); - isInit = true; - if (want2showCounter === true) { - showCounter(); - } - }); - this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, - adapter: this.popup, + // adapter: this.popup, masker: { offset: this.constants.offset }, @@ -78,7 +59,53 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { toggle: false, el: this.trigger, adjustLength: 1, - popup: this.popup + popup: { + type: 'bi.multi_tree_popup_view', + ref: function () { + self.popup = this; + self.trigger.setAdapter(this); + }, + listeners: [{ + eventName: BI.MultiTreePopup.EVENT_AFTERINIT, + action: function () { + self.trigger.getCounter().adjustView(); + isInit = true; + if (want2showCounter === true) { + showCounter(); + } + } + }, { + eventName: BI.MultiTreePopup.EVENT_CHANGE, + action: function () { + change = true; + var val = { + type: BI.Selection.Multi, + value: this.hasChecked() ? {1: 1} : {} + }; + self.trigger.getSearcher().setState(val); + self.trigger.getCounter().setButtonChecked(val); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM, + action: function () { + self._defaultState(); + } + }, { + eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR, + action: function () { + clear = true; + self.setValue(); + self._defaultState(); + } + }], + itemsCreator: o.itemsCreator, + onLoaded: function () { + BI.nextTick(function () { + self.trigger.getCounter().adjustView(); + self.trigger.getSearcher().adjustView(); + }); + } + } }); this.storeValue = {value: {}}; @@ -141,24 +168,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.getSearcher().setState(val); this.getCounter().setButtonChecked(val); }); - this.popup.on(BI.MultiTreePopup.EVENT_CHANGE, function () { - change = true; - var val = { - type: BI.Selection.Multi, - value: this.hasChecked() ? {1: 1} : {} - }; - self.trigger.getSearcher().setState(val); - self.trigger.getCounter().setButtonChecked(val); - }); - - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CONFIRM, function () { - self._defaultState(); - }); - this.popup.on(BI.MultiTreePopup.EVENT_CLICK_CLEAR, function () { - clear = true; - self.setValue(); - self._defaultState(); - }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { if (isSearching()) { @@ -227,7 +236,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { this.combo.hideView(); }, - setEnable: function(v){ + setEnable: function (v) { this.combo.setEnable(v); }, diff --git a/src/widget/multitree/trigger/searcher.multi.tree.js b/src/widget/multitree/trigger/searcher.multi.tree.js index 894e6accb..5c07c576c 100644 --- a/src/widget/multitree/trigger/searcher.multi.tree.js +++ b/src/widget/multitree/trigger/searcher.multi.tree.js @@ -76,6 +76,10 @@ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { this.searcher.adjustView(); }, + setAdapter: function (adapter) { + this.searcher.setAdapter(adapter); + }, + isSearching: function () { return this.searcher.isSearching(); },