/** * 普通控件 * * @class BI.ParamPopupView * @extends BI.Widget * @abstract */ BI.ParamPopupView = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ParamPopupView.superclass._defaultConfig.apply(this, arguments), {}); }, dateConfig: function(){ }, _init: function () { BI.ParamPopupView.superclass._init.apply(this, arguments); var self = this; this.radioGroup = BI.createWidget({ type: "bi.button_group", chooseType: 0, items: this.dateConfig(), layouts: [{ type: "bi.vertical", items: [{ type: "bi.vertical", vgap: 5 }], vgap: 5, hgap: 5 }] }); this.radioGroup.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.setValue(self.getValue()); self.fireEvent(BI.ParamPopupView.EVENT_CHANGE); }); this.popup = BI.createWidget({ type: 'bi.multi_popup_view', element: this, el: this.radioGroup, minWidth: 310, stopPropagation: false }); this.popup.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function () { self.fireEvent(BI.ParamPopupView.EVENT_CONFIRM); }); }, setValue: function (v) { this.radioGroup.setValue(v.type); BI.each(this.radioGroup.getAllButtons(), function (i, button) { if (button.isSelected()) { button.setEnable(true); button.setInputValue(v.value); } else { button.setEnable(false); } }); }, getValue: function () { var button = this.radioGroup.getSelectedButtons()[0]; var type = button.getValue(), value = button.getInputValue(); return { type: type, value: value } }, getCalculationValue: function () { var valueObject = this.getValue(); var type = valueObject.type, value = valueObject.value; var fPrevOrAfter = value.foffset === 0 ? -1 : 1; var sPrevOrAfter = value.soffset === 0 ? -1 : 1; var start, end; start = end = new Date(); var ydate = new Date((new Date().getFullYear() + fPrevOrAfter * value.fvalue), new Date().getMonth(), new Date().getDate()); switch (type) { case BICst.YEAR: start = new Date((new Date().getFullYear() + fPrevOrAfter * value.fvalue), 0, 1); end = new Date(start.getFullYear(), 11, 31); break; case BICst.YEAR_QUARTER: ydate = new Date().getOffsetQuarter(ydate, sPrevOrAfter * value.svalue); start = ydate.getQuarterStartDate(); end = ydate.getQuarterEndDate(); break; case BICst.YEAR_MONTH: ydate = new Date().getOffsetMonth(ydate, sPrevOrAfter * value.svalue); start = new Date(ydate.getFullYear(), ydate.getMonth(), 1); end = new Date(ydate.getFullYear(), ydate.getMonth(), (ydate.getLastDateOfMonth()).getDate()); break; case BICst.YEAR_WEEK: start = ydate.getOffsetDate(sPrevOrAfter * 7 * value.svalue); end = start.getOffsetDate(7); break; case BICst.YEAR_DAY: start = ydate.getOffsetDate(sPrevOrAfter * value.svalue); end = start.getOffsetDate(1); break; case BICst.MONTH_WEEK: var mdate = new Date().getOffsetMonth(new Date(), fPrevOrAfter * value.fvalue); start = mdate.getOffsetDate(sPrevOrAfter * 7 * value.svalue); end = start.getOffsetDate(7); break; case BICst.MONTH_DAY: var mdate = new Date().getOffsetMonth(new Date(), fPrevOrAfter * value.fvalue); start = mdate.getOffsetDate(sPrevOrAfter * value.svalue); end = start.getOffsetDate(1); break; } return { start: start, end: end }; }, resetWidth: function(w){ this.popup.resetWidth(w); }, resetHeight: function(h){ this.popup.resetHeight(h); } }); BI.ParamPopupView.EVENT_CHANGE = "EVENT_CHANGE"; BI.ParamPopupView.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.param_popup_view", BI.ParamPopupView);/** * * Created by GUY on 2016/5/26. * @class BI.SequenceTableTreeNumber * @extends BI.Widget */ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SequenceTableTreeNumber.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-sequence-table-tree-number", isNeedFreeze: false, startSequence: 1,//开始的序号 scrollTop: 0, headerRowSize: 25, rowSize: 25, header: [], items: [], //二维数组 //交叉表头 crossHeader: [], crossItems: [] }); }, _init: function () { BI.SequenceTableTreeNumber.superclass._init.apply(this, arguments); var self = this, o = this.options; this.vCurr = 1; this.hCurr = 1; this.tasks = []; this.renderedCells = []; this.renderedKeys = []; this.header = BI.createWidget({ type: "bi.table_style_cell", cls: "sequence-table-title-cell", styleGetter: o.headerCellStyleGetter, text: BI.i18nText("BI-Number_Index") }); this.container = BI.createWidget({ type: "bi.absolute", width: 60, scrollable: false }); this.scrollContainer = BI.createWidget({ type: "bi.vertical", scrollable: false, scrolly: false, items: [this.container] }); this.layout = BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.header, height: this._getHeaderHeight() }, { el: this.scrollContainer }] }); //缓存第一行对应的序号 this.start = this.options.startSequence; this.cache = {}; this._nextState(); this._populate(); }, _getNextSequence: function (nodes) { var self = this; var start = this.start; var cnt = this.start; function track(node) { self.cache[node.text || node.value] = cnt++; } BI.each(nodes, function (i, node) { if (BI.isNotEmptyArray(node.children)) { BI.each(node.children, function (index, child) { if (index === 0) { if (self.cache[child.text || child.value]) { start = cnt = self.cache[child.text || child.value]; } } track(child) }); } }); this.start = cnt; return start; }, _getStart: function (nodes) { var self = this; var start = this.start; BI.each(nodes, function (i, node) { if (BI.isNotEmptyArray(node.children)) { BI.each(node.children, function (index, child) { if (index === 0) { if (self.cache[child.text || child.value]) { start = self.cache[child.text || child.value]; } } }); } }); return start; }, _formatNumber: function (nodes) { var self = this, o = this.options; var result = []; var count = this._getStart(nodes); function getLeafCount(node) { var cnt = 0; if (BI.isNotEmptyArray(node.children)) { BI.each(node.children, function (index, child) { cnt += getLeafCount(child); }); if (/**node.children.length > 1 && **/BI.isNotEmptyArray(node.values)) { cnt++; } } else { cnt++; } return cnt; } var start = 0, top = 0; BI.each(nodes, function (i, node) { if (BI.isArray(node.children)) { BI.each(node.children, function (index, child) { var cnt = getLeafCount(child); result.push({ text: count++, start: start, top: top, cnt: cnt, index: index, height: cnt * o.rowSize }); start += cnt; top += cnt * o.rowSize; }); if (BI.isNotEmptyArray(node.values)) { result.push({ text: BI.i18nText("BI-Summary_Values"), start: start++, top: top, cnt: 1, isSummary: true, height: o.rowSize }); top += o.rowSize; } } }); return result; }, _layout: function () { var self = this, o = this.options; var headerHeight = this._getHeaderHeight(); var items = this.layout.attr("items"); if (o.isNeedFreeze === false) { items[0].height = 0; } else if (o.isNeedFreeze === true) { items[0].height = headerHeight; } this.layout.attr("items", items); this.layout.resize(); this.scrollContainer.element.scrollTop(o.scrollTop); }, _getHeaderHeight: function () { var o = this.options; return o.headerRowSize * (o.crossHeader.length + (o.header.length > 0 ? 1 : 0)); }, _nextState: function () { var o = this.options; this._getNextSequence(o.items); }, _prevState: function () { var self = this, o = this.options; var firstChild; BI.some(o.items, function (i, node) { if (BI.isNotEmptyArray(node.children)) { return BI.some(node.children, function (j, child) { firstChild = child; return true; }); } }); if (firstChild && BI.isNotEmptyObject(this.cache)) { this.start = this.cache[firstChild.text || firstChild.value]; } else { this.start = 1; } this._nextState(); }, _getMaxScrollTop: function (numbers) { var cnt = 0; BI.each(numbers, function (i, number) { cnt += number.cnt; }); return Math.max(0, cnt * this.options.rowSize - (this.options.height - this._getHeaderHeight()) + BI.DOM.getScrollWidth()); }, _calculateChildrenToRender: function () { var self = this, o = this.options; var renderedCells = [], renderedKeys = []; var numbers = this._formatNumber(o.items); var intervalTree = BI.PrefixIntervalTree.uniform(numbers.length, 0); BI.each(numbers, function (i, number) { intervalTree.set(i, number.height); }); var scrollTop = BI.clamp(o.scrollTop, 0, this._getMaxScrollTop(numbers)); var index = intervalTree.greatestLowerBound(scrollTop); var offsetTop = -(scrollTop - (index > 0 ? intervalTree.sumTo(index - 1) : 0)); var height = offsetTop; var bodyHeight = o.height - this._getHeaderHeight(); while (height < bodyHeight && index < numbers.length) { renderedKeys.push(index); offsetTop += numbers[index].height; height += numbers[index].height; index++; } BI.each(renderedKeys, function (i, key) { var index = BI.deepIndexOf(self.renderedKeys, key); if (index > -1) { if (numbers[key].height !== self.renderedCells[index]._height) { self.renderedCells[index]._height = numbers[key].height; self.renderedCells[index].el.setHeight(numbers[key].height); } if (numbers[key].top !== self.renderedCells[index].top) { self.renderedCells[index].top = numbers[key].top; self.renderedCells[index].el.element.css("top", numbers[key].top + "px"); } renderedCells.push(self.renderedCells[index]); } else { var child = BI.createWidget(BI.extend({ type: "bi.table_style_cell", cls: "sequence-table-number-cell", width: 60, styleGetter: numbers[key].isSummary === true ? function () { return o.summaryCellStyleGetter(true); } : function (key) { return function () { return o.sequenceCellStyleGetter(key); } }(numbers[key].index) }, numbers[key])); renderedCells.push({ el: child, left: 0, top: numbers[key].top, _height: numbers[key].height }); } }); //已存在的, 需要添加的和需要删除的 var existSet = {}, addSet = {}, deleteArray = []; BI.each(renderedKeys, function (i, key) { if (BI.deepContains(self.renderedKeys, key)) { existSet[i] = key; } else { addSet[i] = key; } }); BI.each(this.renderedKeys, function (i, key) { if (BI.deepContains(existSet, key)) { return; } if (BI.deepContains(addSet, key)) { return; } deleteArray.push(i); }); BI.each(deleteArray, function (i, index) { self.renderedCells[index].el.destroy(); }); var addedItems = []; BI.each(addSet, function (index) { addedItems.push(renderedCells[index]) }); BI.createWidget({ type: "bi.absolute", element: this.container, items: addedItems }); this.renderedCells = renderedCells; this.renderedKeys = renderedKeys; this.container.setHeight(intervalTree.sumUntil(numbers.length)); }, _restore: function () { BI.each(this.renderedCells, function (i, cell) { cell.el.destroy(); }); this.renderedCells = []; this.renderedKeys = []; }, _populate: function () { var self = this; BI.each(this.tasks, function (i, task) { task.apply(self); }); this.tasks = []; this.header.populate(); this._layout(); this._calculateChildrenToRender(); }, setVerticalScroll: function (scrollTop) { if (this.options.scrollTop !== scrollTop) { this.options.scrollTop = scrollTop; this.scrollContainer.element.scrollTop(scrollTop); } }, getVerticalScroll: function () { return this.options.scrollTop; }, setVPage: function (v) { if (v <= 1) { this.cache = {}; this.start = this.options.startSequence; this._restore(); this.tasks.push(this._nextState); } else if (v === this.vCurr + 1) { this.tasks.push(this._nextState); } else if (v === this.vCurr - 1) { this.tasks.push(this._prevState); } this.vCurr = v; }, setHPage: function (v) { if (v !== this.hCurr) { this.tasks.push(this._prevState); } this.hCurr = v; }, restore: function () { this._restore(); }, populate: function (items, header, crossItems, crossHeader) { var o = this.options; if (items && items !== this.options.items) { o.items = items; this._restore(); this.tasks.push(this._prevState); } if (header && header !== this.options.header) { o.header = header; } if (crossItems && crossItems !== this.options.crossItems) { o.crossItems = crossItems; } if (crossHeader && crossHeader !== this.options.crossHeader) { o.crossHeader = crossHeader; } this._populate(); } }); $.shortcut('bi.sequence_table_tree_number', BI.SequenceTableTreeNumber);/** * 自适应布局 * * 1、resize * 2、吸附 * 3、当前组件在最上方 * 4、可以撤销 * 5、上下之间插入组件 * * Created by GUY on 2016/2/23. * @class BI.AdaptiveArrangement * @extends BI.Widget */ BI.AdaptiveArrangement = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.AdaptiveArrangement.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-adaptive-arrangement", resizable: true, isNeedReLayout: true, isNeedResizeContainer: true, layoutType: BI.Arrangement.LAYOUT_TYPE.FREE, items: [] }); }, _init: function () { BI.AdaptiveArrangement.superclass._init.apply(this, arguments); var self = this, o = this.options; this.arrangement = BI.createWidget({ type: "bi.arrangement", element: this, isNeedReLayout: o.isNeedReLayout, layoutType: o.layoutType, items: o.items }); if (o.isNeedResizeContainer) { var isResizing = false; var height; var interval; var resize = function (e, ui) { if (isResizing) { return; } isResizing = true; height = ui.size.height; interval = setInterval(function () { height += 40; self.arrangement.setContainerSize({ width: ui.size.width, height: height }); self.arrangement.scrollTo(height); }, 500); }; this.arrangement.container.element.resizable({ handles: "s", minWidth: 100, minHeight: 20, helper: "bi-resizer", autoHide: true, resize: function (e, ui) { if (ui.size.height >= self.arrangement.container.element.height()) { resize(e, ui); } else { interval && clearInterval(interval); } }, stop: function (e, ui) { var size = ui.size; if (isResizing) { size.height = height; } self.arrangement.setContainerSize(ui.size); isResizing = false; interval && clearInterval(interval); self.fireEvent(BI.AdaptiveArrangement.EVENT_RESIZE); } }); this._setLayoutType(o.layoutType); } this.zIndex = 0; BI.each(o.items, function (i, item) { self._initResizable(item.el); }); this.element.click(function (e) { BI.each(self.getAllRegions(), function (i, region) { if (!region.el.element.__isMouseInBounds__(e)) { region.el.element.removeClass("selected"); } }); }); BI.ResizeDetector.addResizeListener(this, function () { self.arrangement.resize(); self.fireEvent(BI.AdaptiveArrangement.EVENT_RESIZE); }); }, _isEqual: function () { return this.arrangement._isEqual.apply(this.arrangement, arguments); }, _initResizable: function (item) { var self = this, o = this.options; item.element.css("zIndex", ++this.zIndex); item.element.mousedown(function () { if (!item.element.hasClass("selected")) { item.element.css("zIndex", ++self.zIndex); BI.each(self.getAllRegions(), function (i, region) { region.el.element.removeClass("selected"); }); item.element.addClass("selected"); } }); o.resizable && item.element.resizable({ handles: "e, s, se", minWidth: 20, minHeight: 20, autoHide: true, helper: "bi-resizer", start: function () { item.element.css("zIndex", ++self.zIndex); self.fireEvent(BI.AdaptiveArrangement.EVENT_ELEMENT_START_RESIZE); }, resize: function (e, ui) { // self._resize(item.attr("id"), ui.size); self._resize(item.attr("id"), ui.size); self.fireEvent(BI.AdaptiveArrangement.EVENT_ELEMENT_RESIZE, item.attr("id"), ui.size); }, stop: function (e, ui) { self._stopResize(item.attr("id"), ui.size); self.fireEvent(BI.AdaptiveArrangement.EVENT_ELEMENT_STOP_RESIZE, item.attr("id"), ui.size); self.fireEvent(BI.AdaptiveArrangement.EVENT_RESIZE); } }); }, _resize: function (name, size) { var self = this; switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: this.setRegionSize(name, size); break; } }, _stopResize: function (name, size) { var self = this; switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: this.setRegionSize(name, { width: size.width, height: size.height }); break; case BI.Arrangement.LAYOUT_TYPE.FREE: this.setRegionSize(name, size); break; case BI.Arrangement.LAYOUT_TYPE.GRID: this.setRegionSize(name, size); break; } }, //检查宽高是否规范 _checkRegionSize: function (name, size) { var self = this; switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: var newSize = {}; var leftid, rightid, topid, bottomid; var region = this.getRegionByName(name); var rs = this.arrangement._getInDirectRelativeRegions(name, ["right"]).right; var bs = this.arrangement._getInDirectRelativeRegions(name, ["bottom"]).bottom; if (rs.left.length > 0) { topid = BI.first(rs.left).id; bottomid = BI.last(rs.left).id; } if (bs.top.length > 0) { leftid = BI.first(bs.top).id; rightid = BI.last(bs.top).id; } if (this.arrangement._isEqual(region.width, size.width)) { topid = name; bottomid = name; } if (this.arrangement._isEqual(region.height, size.height)) { leftid = name; rightid = name; } var tops = topid ? this.getDirectRelativeRegions(topid, ["top"]).top : []; var bottoms = bottomid ? this.getDirectRelativeRegions(bottomid, ["bottom"]).bottom : []; var lefts = leftid ? this.getDirectRelativeRegions(leftid, ["left"]).left : []; var rights = rightid ? this.getDirectRelativeRegions(rightid, ["right"]).right : []; if (region.width !== size.width) { if (rights.length === 0) {//最右边的组件不能调整宽度 newSize.width = region.width; } else { var finded = BI.find(tops.concat(bottoms), function (i, r) { r = self.getRegionByName(r.id); return Math.abs(size.width + region.left - (r.left + r.width)) <= 3; }); if (finded) { finded = this.getRegionByName(finded.id); newSize.width = finded.left + finded.width - region.left; } else { newSize.width = size.width; } } } else { newSize.width = size.width; } if (region.height !== size.height) { if (bottoms.length === 0) { newSize.height = region.height; } else { var finded = BI.find(lefts.concat(rights), function (i, r) { r = self.getRegionByName(r.id); return Math.abs(size.height + region.top - (r.top + r.height)) <= 3; }); if (finded) { finded = this.getRegionByName(finded.id); newSize.height = finded.top + finded.height - region.top; } else { newSize.height = size.height; } } } else { newSize.height = size.height; } return newSize; case BI.Arrangement.LAYOUT_TYPE.FREE: return size; case BI.Arrangement.LAYOUT_TYPE.GRID: return size; } }, _getScrollOffset: function () { return this.arrangement._getScrollOffset(); }, _setLayoutType: function (type) { try { //BI.nextTick(function () { switch (type) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: $(">.ui-resizable-s", this.arrangement.container.element).css("zIndex", ""); break; case BI.Arrangement.LAYOUT_TYPE.FREE: $(">.ui-resizable-s", this.arrangement.container.element).css("zIndex", "-1"); break; case BI.Arrangement.LAYOUT_TYPE.GRID: $(">.ui-resizable-s", this.arrangement.container.element).css("zIndex", "-1"); break; } this.arrangement.container.element.resizable("option", "disabled", type === BI.Arrangement.LAYOUT_TYPE.FREE); //}); } catch (e) { } }, getClientWidth: function () { return this.arrangement.getClientWidth(); }, getClientHeight: function () { return this.arrangement.getClientHeight(); }, getDirectRelativeRegions: function (name, direction) { return this.arrangement.getDirectRelativeRegions(name, direction); }, addRegion: function (region, position) { this._initResizable(region.el); var self = this, flag; var old = this.arrangement.getAllRegions(); if (BI.isNotNull(this.position)) { switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: var type = this.position.type; var current = this.position.region; switch (type) { case "top-gap": var t = this.arrangement._getEquivalentRelativeRegions(current.id, ["top"])[0]; current = this.getRegionByName(t.id); break; case "bottom-gap": break; } var id = BI.UUID(); var insert = this.position.insert; if (insert.height > 0) { var clone = this.arrangement._cloneRegion(); //找到最下面的组件 var occupied = this.arrangement._getRegionOccupied(); var bottomRegions = []; BI.each(clone, function (i, region) { if (self.arrangement._isEqual(region.top + region.height, occupied.top + occupied.height)) { bottomRegions.push(region); } }); var bs = this.arrangement._getInDirectRelativeRegions(current.id, ["bottom"]).bottom; var seen = [current.id]; var bottoms = bs.bottom; var occ = this.arrangement._getRegionOccupied(bottoms); clone[id] = BI.extend({}, region, { left: occ.left, width: occ.width, top: current.top + current.height, height: insert.height }); while (bottoms.length > 0) { BI.each(bottoms, function (i, bottom) { seen.push(bottom.id); var r = self.getRegionByName(bottom.id); BI.extend(clone[bottom.id], { top: r.top + insert.height }); }); var t = []; BI.each(bottoms, function (i, bottom) { var n = self.arrangement._getInDirectRelativeRegions(bottom.id, ["bottom"]).bottom; BI.each(n.top, function (i, region) { if (!seen.contains(region.id)) { seen.push(region.id); var r = self.getRegionByName(region.id); BI.extend(clone[region.id], { height: r.height + insert.height }); } }); t = t.concat(n.bottom); }); t = BI.uniq(t, function (i, region) { return region.id; }); bottoms = t; } BI.each(bottomRegions, function (i, region) { if (!seen.contains(region.id)) { region.height = region.height + insert.height; } }); this.arrangement.populate(BI.toArray(clone)); this.arrangement.resize(); flag = true; } break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } this.position = null; } else { if (flag = this.arrangement.addRegion(region, position)) { this._old = old; } } return flag; }, deleteRegion: function (name) { var flag; var old = this.getAllRegions(); if (flag = this.arrangement.deleteRegion(name)) { this._old = old; } else { this._old = this.getAllRegions(); this.relayout(); } return true; }, setRegionSize: function (name, size) { var flag; var old = this.getAllRegions(); size = this._checkRegionSize(name, size); if (flag = this.arrangement.setRegionSize(name, size)) { this._old = old; } return flag; }, setPosition: function (position, size) { var self = this; var at = this.arrangement.setPosition(position, size); this.position = null; if (!at) { switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (position.left < 0 || position.top < 0) { return null; } var offset = this.arrangement._getScrollOffset(); position = { left: position.left + offset.left, top: position.top + offset.top }; BI.some(this.getAllRegions(), function (id, region) { if (self.arrangement._isPositionInBounds(position, region)) { var at = self.arrangement._positionAt(position, region); if (at.type === "top-gap" || at.type === "bottom-gap") { self.arrangement._setArrangeSize({ top: region.top - 8 + (at.type === "bottom-gap" ? region.height : 0), left: region.left, width: region.width, height: 16 }); self.position = { insert: { height: (size || {}).height }, type: at.type, region: region }; self.arrangement._start(); } return true; } }); break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } } return this.position || at; }, setRegionPosition: function (name, position) { var region = this.getRegionByName(name); region.el.element.css("zIndex", ++this.zIndex); return this.arrangement.setRegionPosition(name, position); }, zoom: function (ratio) { this.arrangement.zoom(ratio); }, resize: function () { this.arrangement.resize(); }, relayout: function () { return this.arrangement.relayout(); }, setLayoutType: function (type) { var self = this; this._setLayoutType(type); this.arrangement.setLayoutType(type); }, getLayoutType: function () { return this.arrangement.getLayoutType(); }, getLayoutRatio: function () { return this.arrangement.getLayoutRatio(); }, getHelper: function () { return this.arrangement.getHelper(); }, getRegionByName: function (name) { return this.arrangement.getRegionByName(name); }, getAllRegions: function () { return this.arrangement.getAllRegions(); }, revoke: function () { if (this._old) { this.populate(BI.toArray(this._old)); } }, populate: function (items) { var self = this; BI.each(items, function (i, item) { self._initResizable(item.el); }); this.arrangement.populate(items); switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: BI.nextTick(function () { self.arrangement.resize(); }); break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } } }); BI.AdaptiveArrangement.EVENT_ELEMENT_START_RESIZE = "AdaptiveArrangement.EVENT_ELEMENT_START_RESIZE"; BI.AdaptiveArrangement.EVENT_ELEMENT_RESIZE = "AdaptiveArrangement.EVENT_ELEMENT_RESIZE"; BI.AdaptiveArrangement.EVENT_ELEMENT_STOP_RESIZE = "AdaptiveArrangement.EVENT_ELEMENT_STOP_RESIZE"; BI.AdaptiveArrangement.EVENT_RESIZE = "AdaptiveArrangement.EVENT_RESIZE"; $.shortcut('bi.adaptive_arrangement', BI.AdaptiveArrangement);/** * Arrangement的block面板 * * Created by GUY on 2016/3/1. * @class BI.ArrangementBlock * @extends BI.Widget */ BI.ArrangementBlock = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ArrangementBlock.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-arrangement-block" }); }, _init: function () { BI.ArrangementBlock.superclass._init.apply(this, arguments); var self = this, o = this.options; } }); $.shortcut('bi.arrangement_block', BI.ArrangementBlock);/** * Arrangement的drop面板 * * Created by GUY on 2016/3/1. * @class BI.ArrangementDroppable * @extends BI.Widget */ BI.ArrangementDroppable = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ArrangementDroppable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-arrangement-droppable" }); }, _init: function () { BI.ArrangementDroppable.superclass._init.apply(this, arguments); var self = this, o = this.options; } }); $.shortcut('bi.arrangement_droppable', BI.ArrangementDroppable);/** * 布局 * * Created by GUY on 2016/2/23. * @class BI.Arrangement * @extends BI.Widget */ BI.Arrangement = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.Arrangement.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-arrangement", layoutType: BI.Arrangement.LAYOUT_TYPE.FREE, isNeedReLayout: true, items: [] }); }, _init: function () { BI.Arrangement.superclass._init.apply(this, arguments); var self = this, o = this.options; this.arrangement = BI.createWidget({ type: "bi.arrangement_droppable", cls: "arrangement-block", invisible: true }); this.block = BI.createWidget({ type: "bi.arrangement_block", invisible: true }); this.droppable = BI.createWidget({ type: "bi.layout", cls: "arrangement-drop-container", invisible: true }); this.container = BI.createWidget({ type: "bi.absolute", items: o.items.concat([this.block, this.arrangement, { el: this.droppable, left: 0, right: 0, top: 0, bottom: 0 }]) }); this.scrollContainer = BI.createWidget({ type: "bi.adaptive", width: "100%", height: "100%", scrollable: true, items: [this.container] }); BI.createWidget({ type: "bi.adaptive", element: this, items: [this.scrollContainer] }); this.regions = {}; this.locations = {}; this.drops = {}; this.storeDrops = {}; if (o.items.length > 0) { BI.nextTick(function () { self.populate(o.items); }); } }, ////初始化操作//// _calculateRegions: function (items) { var self = this, o = this.options; this.regions = {}; this.drops = {}; BI.each(items, function (i, item) { var region = self._createOneRegion(item); self.regions[region.id] = region; var drop = self._createOneDrop(region); self.drops[drop.id] = drop; self.storeDrops[drop.id] = drop; }); }, //定方位 _locationRegion: function () { var self = this, o = this.options; this.locations = {}; var reg = []; BI.each(this.regions, function (id, region) { var t = new BI.Region(region.left, region.top, region.width, region.height); t.id = id; reg.push(t); self.locations[id] = {top: [], left: [], right: [], bottom: []}; }); BI.each(reg, function (i, dim) { var topRegion = new BI.Region(dim.x, 0, dim.w, dim.y), bottomRegion = new BI.Region(dim.x, dim.y + dim.h, dim.w, BI.MAX), leftRegion = new BI.Region(0, dim.y, dim.x, dim.h), rightRegion = new BI.Region(dim.x + dim.w, dim.y, BI.MAX, dim.h); BI.each(reg, function (j, tar) { if (i !== j) { if (tar.isIntersects(topRegion) && self._isLessThanEqual(tar.y + tar.h, dim.y)) { self.locations[dim.id].top.push(self.regions[tar.id]); } if (tar.isIntersects(bottomRegion) && self._isMoreThanEqual(tar.y, dim.y + dim.h)) { self.locations[dim.id].bottom.push(self.regions[tar.id]); } if (tar.isIntersects(leftRegion) && self._isLessThanEqual(tar.x + tar.w, dim.x)) { self.locations[dim.id].left.push(self.regions[tar.id]); } if (tar.isIntersects(rightRegion) && self._isMoreThanEqual(tar.x, dim.x + dim.w)) { self.locations[dim.id].right.push(self.regions[tar.id]); } } }); }); }, _isEqual: function (num1, num2) { return Math.abs(num1 - num2) < 2; }, _isLessThan: function (num1, num2) { return num1 < num2 && !this._isEqual(num1, num2); }, _isMoreThan: function (num1, num2) { return num1 > num2 && !this._isEqual(num1, num2); }, _isLessThanEqual: function (num1, num2) { return num1 <= num2 || this._isEqual(num1, num2); }, _isMoreThanEqual: function (num1, num2) { return num1 >= num2 || this._isEqual(num1, num2); }, ////方法//// _isPositionInBounds: function (position, bound) { var region = new BI.Region(bound.left, bound.top, bound.width, bound.height); return region.isPointInside(position.left, position.top); }, //获取某区域等量相关联的区域 _getEquivalentRelativeRegions: function (name, direction) { var self = this; direction || (direction = ["top", "bottom", "left", "right"]); var result = []; var target = this.regions[name]; var tops = this.locations[name].top; var bottoms = this.locations[name].bottom; var lefts = this.locations[name].left; var rights = this.locations[name].right; var finded = direction.contains("top") && BI.some(tops, function (i, region) { if (self._isEqual(region.top + region.height, target.top) && self._isEqual(region.left, target.left) && self._isEqual(region.width, target.width)) { var clone = BI.clone(region); clone.height = region.height + target.height; result.push(clone); return true; } }); if (!finded) { finded = direction.contains("bottom") && BI.some(bottoms, function (i, region) { if (self._isEqual(target.top + target.height, region.top) && self._isEqual(region.left, target.left) && self._isEqual(region.width, target.width)) { var clone = BI.clone(region); clone.top = region.top - target.height; clone.height = region.height + target.height; result.push(clone); return true; } }); if (!finded) { finded = direction.contains("left") && BI.some(lefts, function (i, region) { if (self._isEqual(region.left + region.width, target.left) && self._isEqual(region.top, target.top) && self._isEqual(region.height, target.height)) { var clone = BI.clone(region); clone.width = region.width + target.width; result.push(clone); return true; } }); if (!finded) { finded = direction.contains("right") && BI.some(rights, function (i, region) { if (self._isEqual(target.left + target.width, region.left) && self._isEqual(region.top, target.top) && self._isEqual(region.height, target.height)) { var clone = BI.clone(region); clone.left = region.left - target.width; clone.width = region.width + target.width; result.push(clone); return true; } }); if (!finded) { var findTopRegions = [], findBottomRegions = []; direction.contains("top") && BI.each(tops, function (i, region) { if (self._isEqual(region.top + region.height, target.top) && self._isMoreThanEqual(region.left, target.left) && self._isLessThanEqual(region.left + region.width, target.left + target.width)) { findTopRegions.push(region); } }); direction.contains("bottom") && BI.each(bottoms, function (i, region) { if (self._isEqual(target.top + target.height, region.top) && self._isMoreThanEqual(region.left, target.left) && self._isLessThanEqual(region.left + region.width, target.left + target.width)) { findBottomRegions.push(region); } }); var topValid = isRegionsValid(findTopRegions, "top"), bottomValid = isRegionsValid(findBottomRegions, "bottom"); if (topValid && bottomValid) { BI.each(findTopRegions, function (i, region) { var clone = BI.clone(region); clone.height = region.height + target.height / 2; result.push(clone); }); BI.each(findBottomRegions, function (i, region) { var clone = BI.clone(region); clone.top = region.top - target.height / 2; clone.height = region.height + target.height / 2; result.push(clone); }); } else if (topValid) { BI.each(findTopRegions, function (i, region) { var clone = BI.clone(region); clone.height = region.height + target.height; result.push(clone); }); } else if (bottomValid) { BI.each(findBottomRegions, function (i, region) { var clone = BI.clone(region); clone.top = region.top - target.height; clone.height = region.height + target.height; result.push(clone); }); } if (!topValid && !bottomValid) { var findLeftRegions = [], findRightRegions = []; direction.contains("left") && BI.each(lefts, function (i, region) { if (self._isEqual(region.left + region.width, target.left) && self._isMoreThanEqual(region.top, target.top) && self._isLessThanEqual(region.top + region.height, target.top + target.height)) { findLeftRegions.push(region); } }); direction.contains("right") && BI.each(rights, function (i, region) { if (self._isEqual(target.left + target.width, region.left) && self._isMoreThanEqual(region.top, target.top) && self._isLessThanEqual(region.top + region.height, target.top + target.height)) { findRightRegions.push(region); } }); var leftValid = isRegionsValid(findLeftRegions, "left"), rightValid = isRegionsValid(findRightRegions, "right"); if (leftValid && rightValid) { BI.each(findLeftRegions, function (i, region) { var clone = BI.clone(region); clone.width = region.width + target.width / 2; result.push(clone); }); BI.each(findRightRegions, function (i, region) { var clone = BI.clone(region); clone.left = region.left - target.width / 2; clone.width = region.width + target.width / 2; result.push(clone); }); } else if (leftValid) { BI.each(findLeftRegions, function (i, region) { var clone = BI.clone(region); clone.width = region.width + target.width; result.push(clone); }); } else if (rightValid) { BI.each(findRightRegions, function (i, region) { var clone = BI.clone(region); clone.left = region.left - target.width; clone.width = region.width + target.width; result.push(clone); }); } //上下左右都不可行 if (!leftValid && !rightValid) { } } } } } } return result; function isRegionsValid(regions, dir) { var occupied = self._getRegionOccupied(regions); switch (dir) { case "top": case "bottom": return self._isEqual(occupied.left, target.left) && self._isEqual(occupied.width, target.width); case "left": case "right": return self._isEqual(occupied.top, target.top) && self._isEqual(occupied.height, target.height); } return false; } }, //获取某区域直接相关联的区域 _getDirectRelativeRegions: function (name, direction) { var self = this; direction || (direction = ["top", "bottom", "left", "right"]); var result = []; var target = this.regions[name]; var tops = this.locations[name].top; var bottoms = this.locations[name].bottom; var lefts = this.locations[name].left; var rights = this.locations[name].right; var finded = direction.contains("top") && BI.some(tops, function (i, region) { if (self._isEqual(region.top + region.height, target.top) && ((self._isMoreThanEqual(region.left, target.left) && self._isLessThan(region.left, target.left + target.width)) || (self._isMoreThan(region.left + region.width, target.left) && self._isLessThanEqual(region.left + region.width, target.left + target.width)) || (self._isLessThan(region.left, target.left) && self._isMoreThan(region.left + region.width, target.left + target.width)))) { var clone = BI.clone(region); clone.height = region.height + target.height; result.push(clone); } }); if (!finded) { finded = direction.contains("bottom") && BI.some(bottoms, function (i, region) { if (self._isEqual(target.top + target.height, region.top) && ((self._isMoreThanEqual(region.left, target.left) && self._isLessThan(region.left, target.left + target.width)) || (self._isMoreThan(region.left + region.width, target.left) && self._isLessThanEqual(region.left + region.width, target.left + target.width)) || (self._isLessThan(region.left, target.left) && self._isMoreThan(region.left + region.width, target.left + target.width)))) { var clone = BI.clone(region); clone.top = region.top - target.height; clone.height = region.height + target.height; result.push(clone); } }); if (!finded) { finded = direction.contains("left") && BI.some(lefts, function (i, region) { if (self._isEqual(region.left + region.width, target.left) && ((self._isMoreThanEqual(region.top, target.top) && self._isLessThan(region.top, target.top + target.height)) || (self._isMoreThan(region.top + region.height, target.top) && self._isLessThanEqual(region.top + region.height, target.top + target.height)) || (self._isLessThan(region.top, target.top) && self._isMoreThan(region.top + region.height, target.top + target.height)))) { var clone = BI.clone(region); clone.width = region.width + target.width; result.push(clone); } }); if (!finded) { finded = direction.contains("right") && BI.some(rights, function (i, region) { if (self._isEqual(target.left + target.width, region.left) && ((self._isMoreThanEqual(region.top, target.top) && self._isLessThan(region.top, target.top + target.height)) || (self._isMoreThan(region.top + region.height, target.top) && self._isLessThanEqual(region.top + region.height, target.top + target.height)) || (self._isLessThan(region.top, target.top) && self._isMoreThan(region.top + region.height, target.top + target.height)))) { var clone = BI.clone(region); clone.left = region.left - target.width; clone.width = region.width + target.width; result.push(clone); } }); } } } return result; }, //获取间接相关联的区域,即调整name区域后需要附带调整的所有相关区域(包括自身) _getInDirectRelativeRegions: function (name, direction) { var self = this, dict = ["top", "left", "right", "bottom"]; var result = {}; direction || (direction = dict); function recursion(regions, dir, store, cache) { BI.each(regions, function (i, region) { if (cache[region.id]) { return; } cache[region.id] = true; if (!store[dict[3 - dir]]) { store[dict[3 - dir]] = []; } store[dict[3 - dir]].push(region); recursion(self._getDirectRelativeRegions(region.id, [dict[dir]]), 3 - dir, store, cache); }) } if (direction.contains("top")) { var store = {}, cache = {}; recursion([this.regions[name]], dict.indexOf("top"), store, cache); store["top"] = BI.sortBy(store["top"], "left"); store["bottom"] = BI.sortBy(store["bottom"], "left"); result["top"] = store; } if (direction.contains("bottom")) { var store = {}, cache = {}; recursion([this.regions[name]], dict.indexOf("bottom"), store, cache); store["top"] = BI.sortBy(store["top"], "left"); store["bottom"] = BI.sortBy(store["bottom"], "left"); result["bottom"] = store; } if (direction.contains("left")) { var store = {}, cache = {}; recursion([this.regions[name]], dict.indexOf("left"), store, cache); store["left"] = BI.sortBy(store["left"], "top"); store["right"] = BI.sortBy(store["right"], "top"); result["left"] = store; } if (direction.contains("right")) { var store = {}, cache = {}; recursion([this.regions[name]], dict.indexOf("right"), store, cache); store["left"] = BI.sortBy(store["left"], "top"); store["right"] = BI.sortBy(store["right"], "top"); result["right"] = store; } return result; }, _getLeftAlignRegions: function (name) { var self = this; var tops = this._getDirectRelativeRegions(name, ["top"]); var bottoms = this._getDirectRelativeRegions(name, ["bottom"]); var current = this.regions[name]; var rtop = [], rbottom = []; BI.each(tops, function (i, region) { if (self._isEqual(region.left, current.left)) { rtop.push(region); } }); BI.each(bottoms, function (i, region) { if (self._isEqual(region.left, current.left)) { rbottom.push(region); } }); return { top: rtop, bottom: rbottom } }, _getRightAlignRegions: function (name) { var self = this; var tops = this._getDirectRelativeRegions(name, ["top"]); var bottoms = this._getDirectRelativeRegions(name, ["bottom"]); var current = this.regions[name]; var rtop = [], rbottom = []; BI.each(tops, function (i, region) { if (self._isEqual(region.left + region.width, current.left + current.width)) { rtop.push(region); } }); BI.each(bottoms, function (i, region) { if (self._isEqual(region.left + region.width, current.left + current.width)) { rbottom.push(region); } }); return { top: rtop, bottom: rbottom } }, _getTopAlignRegions: function (name) { var self = this; var lefts = this._getDirectRelativeRegions(name, ["left"]); var rights = this._getDirectRelativeRegions(name, ["right"]); var current = this.regions[name]; var rleft = [], rright = []; BI.each(lefts, function (i, region) { if (self._isEqual(region.top, current.top)) { rleft.push(region); } }); BI.each(rights, function (i, region) { if (self._isEqual(region.top, current.top)) { rright.push(region); } }); return { left: rleft, right: rright } }, _getBottomAlignRegions: function (name) { var self = this; var lefts = this._getDirectRelativeRegions(name, ["left"]); var rights = this._getDirectRelativeRegions(name, ["right"]); var current = this.regions[name]; var rleft = [], rright = []; BI.each(lefts, function (i, region) { if (self._isEqual(region.top + region.height, current.top + current.height)) { rleft.push(region); } }); BI.each(rights, function (i, region) { if (self._isEqual(region.top + region.height, current.top + current.height)) { rright.push(region); } }); return { left: rleft, right: rright } }, //获取占有的最大Region _getRegionOccupied: function (regions) { var self = this, o = this.options; if (BI.size(regions || this.regions) <= 0) { return { left: 0, top: 0, width: 0, height: 0 } } var minLeft = BI.MAX, maxLeft = BI.MIN, minTop = BI.MAX, maxTop = BI.MIN; BI.each(regions || this.regions, function (id, region) { minLeft = Math.min(minLeft, region.left); maxLeft = Math.max(maxLeft, region.left + region.width); minTop = Math.min(minTop, region.top); maxTop = Math.max(maxTop, region.top + region.height); }); return { left: minLeft, top: minTop, width: maxLeft - minLeft, height: maxTop - minTop } }, //两个区域的交叉面积 _getCrossArea: function (region1, region2) { if (region1.left <= region2.left) { if (region1.top <= region2.top) { if (region1.top + region1.height > region2.top && region1.left + region1.width > region2.left) { if (this._isEqual(region1.top + region1.height, region2.top) || this._isEqual(region1.left + region1.width, region2.left)) { return 0; } return (region1.top + region1.height - region2.top) * (region1.left + region1.width - region2.left); } } else { if (region2.top + region2.height > region1.top && region1.left + region1.width > region2.left) { if (this._isEqual(region2.top + region2.height, region1.top) || this._isEqual(region1.left + region1.width, region2.left)) { return 0; } return (region2.top + region2.height - region1.top) * (region1.left + region1.width - region2.left); } } } else { if (region1.top <= region2.top) { if (region1.top + region1.height > region2.top && region2.left + region2.width > region1.left) { if (this._isEqual(region1.top + region1.height, region2.top) || this._isEqual(region2.left + region2.width, region1.left)) { return 0; } return (region1.top + region1.height - region2.top) * (region2.left + region2.width - region1.left); } } else { if (region2.top + region2.height > region1.top && region2.left + region2.width > region1.left) { if (this._isEqual(region2.top + region2.height, region1.top) || this._isEqual(region2.left + region2.width, region1.left)) { return 0; } return (region2.top + region2.height - region1.top) * (region2.left + region2.width - region1.left); } } } return 0; }, //是否有覆盖的组件 _isRegionOverlay: function (regions) { var reg = []; BI.each(regions || this.regions, function (id, region) { reg.push(new BI.Region(region.left, region.top, region.width, region.height)); }); for (var i = 0, len = reg.length; i < len; i++) { for (var j = i + 1; j < len; j++) { var area1 = { left: reg[i].x, top: reg[i].y, width: reg[i].w, height: reg[i].h }; var area2 = { left: reg[j].x, top: reg[j].y, width: reg[j].w, height: reg[j].h }; if (reg[i].isIntersects(reg[j]) && this._getCrossArea(area1, area2) > 1) { return true; } } } return false; }, //布局是否是优良的 _isArrangeFine: function (regions) { switch (this.options.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (this._isRegionOverlay()) { return false; } var maxRegion = this._getRegionOccupied(regions); var area = maxRegion.width * maxRegion.height; var all = 0; BI.each(regions || this.regions, function (id, region) { all += region.width * region.height; }); return Math.abs(area - all) < 8; case BI.Arrangement.LAYOUT_TYPE.FREE: return true; case BI.Arrangement.LAYOUT_TYPE.GRID: if (this._isRegionOverlay()) { return false; } } return true; }, _getRegionNames: function (regions) { var names = []; BI.each(regions || this.regions, function (i, region) { names.push(region.id || region.attr("id")); }); return names; }, _getRegionsByNames: function (names, regions) { names = BI.isArray(names) ? names : [names]; regions = regions || this.regions; if (BI.isArray(regions)) { var result = []; BI.each(regions, function (i, region) { if (names.contains(region.id || region.attr("id"))) { result.push(region); } }); } else { var result = {}; BI.each(names, function (i, name) { result[name] = regions[name]; }); } return result; }, _cloneRegion: function (regions) { var clone = {}; BI.each(regions || this.regions, function (id, region) { clone[id] = {}; clone[id].el = region.el; clone[id].id = region.id; clone[id].left = region.left; clone[id].top = region.top; clone[id].width = region.width; clone[id].height = region.height; }); return clone; }, //测试合法性 _test: function (regions) { var self = this; return !BI.any(regions || this.regions, function (i, region) { if (BI.isNaN(region.width) || BI.isNaN(region.height) || region.width <= 21 || region.height <= 21) { return true; } }) }, //对区域进行划分 _splitRegions: function (name) { var result = []; var tid = BI.UUID(); var _left = this._getLeftAlignRegions(name); var _right = this._getRightAlignRegions(name); var _top = this._getTopAlignRegions(name); var _bottom = this._getBottomAlignRegions(name); if (_left.top.length > 0) { var upid = _left.top[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].width, clone[upid].width) / 2;//两个组件中较小宽度的一半 var left = (clone[name].left + clone[upid].left) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 left: left, top: clone[upid].top, width: split, height: clone[name].height + clone[upid].height }; BI.extend(clone[name], { left: left + split, width: clone[name].width - split - (left - clone[name].left) }); BI.extend(clone[upid], { left: left + split, width: clone[upid].width - split - (left - clone[upid].left) }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "left-top", regions: clone, insert: insert }); } } if (_left.bottom.length > 0) { var bottomid = _left.bottom[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].width, clone[bottomid].width) / 2; var left = (clone[name].left + clone[bottomid].left) / 2; var insert = clone[tid] = {//新增的区域 left: left, top: clone[name].top, width: split, height: clone[name].height + clone[bottomid].height }; BI.extend(clone[name], { left: left + split, width: clone[name].width - split - (left - clone[name].left) }); BI.extend(clone[bottomid], { left: left + split, width: clone[bottomid].width - split - (left - clone[bottomid].left) }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom-left", regions: clone, insert: insert }); } } if (_right.top.length > 0) { var upid = _right.top[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].width, clone[upid].width) / 2;//两个组件中较小宽度的一半 var right = (clone[name].left + clone[name].width + clone[upid].left + clone[upid].width) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 left: right - split, top: clone[upid].top, width: split, height: clone[name].height + clone[upid].height }; BI.extend(clone[name], { width: right - clone[name].left - split }); BI.extend(clone[upid], { width: right - clone[upid].left - split }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "top-right", regions: clone, insert: insert }); } } if (_right.bottom.length > 0) { var bottomid = _right.bottom[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].width, clone[bottomid].width) / 2;//两个组件中较小宽度的一半 var right = (clone[name].left + clone[name].width + clone[bottomid].left + clone[bottomid].width) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 left: right - split, top: clone[name].top, width: split, height: clone[name].height + clone[bottomid].height }; BI.extend(clone[name], { width: right - clone[name].left - split }); BI.extend(clone[bottomid], { width: right - clone[bottomid].left - split }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom-right", regions: clone, insert: insert }); } } if (_top.left.length > 0) { var leftid = _top.left[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].height, clone[leftid].height) / 2;//两个组件中较小高度的一半 var top = (clone[name].top + clone[leftid].top) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 top: top, left: clone[leftid].left, height: split, width: clone[name].width + clone[leftid].width }; BI.extend(clone[name], { top: top + split, height: clone[name].height - split - (top - clone[name].top) }); BI.extend(clone[leftid], { top: top + split, height: clone[leftid].height - split - (top - clone[leftid].top) }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "top-left", regions: clone, insert: insert }); } } if (_top.right.length > 0) { var rightid = _top.right[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].height, clone[rightid].height) / 2;//两个组件中较小高度的一半 var top = (clone[name].top + clone[rightid].top) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 top: top, left: clone[name].left, height: split, width: clone[name].width + clone[rightid].width }; BI.extend(clone[name], { top: top + split, height: clone[name].height - split - (top - clone[name].top) }); BI.extend(clone[rightid], { top: top + split, height: clone[rightid].height - split - (top - clone[rightid].top) }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "top-right-second", regions: clone, insert: insert }); } } if (_bottom.left.length > 0) { var leftid = _bottom.left[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].height, clone[leftid].height) / 2;//两个组件中较小高度的一半 var bottom = (clone[name].top + clone[name].height + clone[leftid].top + clone[leftid].height) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 left: clone[leftid].left, top: bottom - split, height: split, width: clone[name].width + clone[leftid].width }; BI.extend(clone[name], { height: bottom - clone[name].top - split }); BI.extend(clone[leftid], { height: bottom - clone[leftid].top - split }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom-left-second", regions: clone, insert: insert }); } } if (_bottom.right.length > 0) { var rightid = _bottom.right[0].id; var tid = BI.UUID(); var clone = this._cloneRegion(); var _cur = clone[name]; var split = Math.min(clone[name].height, clone[rightid].height) / 2;//两个组件中较小高度的一半 var bottom = (clone[name].top + clone[name].height + clone[rightid].top + clone[rightid].height) / 2;//求平均,减少误差 var insert = clone[tid] = {//新增的区域 left: clone[name].left, top: bottom - split, height: split, width: clone[name].width + clone[rightid].width }; BI.extend(clone[name], { height: bottom - clone[name].top - split }); BI.extend(clone[rightid], { height: bottom - clone[rightid].top - split }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom-right-second", regions: clone, insert: insert }); } } //有上方居中drop var lefts = _top.left, rights = _top.right; if (lefts.length > 0 && rights.length > 0) { var count = 0; var store = [this.regions[name]]; while (lefts.length > 0 || rights.length > 0) { var clone = this._cloneRegion(); if (lefts.length > 0) { store.push(this.regions[lefts[0].id]); } if (rights.length > 0) { store.push(this.regions[rights[0].id]); } count++; var top = BI.average(store, function (i, r) {//求平均,减少误差 return r.top; }); var occupied = this._getRegionOccupied(store); var split = BI.min(store, function (i, r) { return r.height; }).height / 2; var insert = clone[tid] = { left: occupied.left, width: occupied.width, top: top, height: split }; BI.each(store, function (i, region) { BI.extend(clone[region.id], { top: top + split, height: region.height - split - (top - region.top) }); }); if (this._test(store)) { delete clone[tid]; result.push({ type: "top-center" + count, regions: clone, insert: insert }); } else { break; } if (lefts.length > 0) lefts = this._getTopAlignRegions(lefts[0].id).left; if (rights.length > 0) rights = this._getTopAlignRegions(rights[0].id).right; } } //有下方居中drop var lefts = _bottom.left, rights = _bottom.right; if (lefts.length > 0 && rights.length > 0) { var count = 0; var store = [this.regions[name]]; while (lefts.length > 0 || rights.length > 0) { var clone = this._cloneRegion(); if (lefts.length > 0) { store.push(this.regions[lefts[0].id]); } if (rights.length > 0) { store.push(this.regions[rights[0].id]); } count++; var bottom = BI.average(store, function (i, r) {//求平均,减少误差 return r.top + r.height; }); var occupied = this._getRegionOccupied(store); var split = BI.min(store, function (i, r) { return r.height; }).height / 2; var insert = clone[tid] = { left: occupied.left, width: occupied.width, top: bottom - split, height: split }; BI.each(store, function (i, region) { BI.extend(clone[region.id], { height: bottom - region.top - split }); }); if (this._test(store)) { delete clone[tid]; result.push({ type: "bottom-center" + count, regions: clone, insert: insert }); } else { break; } if (lefts.length > 0) lefts = this._getBottomAlignRegions(lefts[0].id).left; if (rights.length > 0) rights = this._getBottomAlignRegions(rights[0].id).right; } } //有左方居中drop var tops = _left.top, bottoms = _left.bottom; if (tops.length > 0 && bottoms.length > 0) { var count = 0; var store = [this.regions[name]]; while (tops.length > 0 || bottoms.length > 0) { var clone = this._cloneRegion(); if (tops.length > 0) { store.push(this.regions[tops[0].id]); } if (bottoms.length > 0) { store.push(this.regions[bottoms[0].id]); } count++; var left = BI.average(store, function (i, r) {//求平均,减少误差 return r.left; }); var occupied = this._getRegionOccupied(store); var split = BI.min(store, function (i, r) { return r.width; }).width / 2; var insert = clone[tid] = { left: left, width: split, top: occupied.top, height: occupied.height }; BI.each(store, function (i, region) { BI.extend(clone[region.id], { left: left + split, width: region.width - split - (left - region.left) }); }); if (this._test(store)) { delete clone[tid]; result.push({ type: "left-center" + count, regions: clone, insert: insert }); } else { break; } if (tops.length > 0) tops = this._getLeftAlignRegions(tops[0].id).top; if (bottoms.length > 0) bottoms = this._getLeftAlignRegions(bottoms[0].id).bottom; } } //有右方居中drop var tops = _right.top, bottoms = _right.bottom; if (tops.length > 0 && bottoms.length > 0) { var count = 0; var store = [this.regions[name]]; while (tops.length > 0 || bottoms.length > 0) { var clone = this._cloneRegion(); if (tops.length > 0) { store.push(this.regions[tops[0].id]); } if (bottoms.length > 0) { store.push(this.regions[bottoms[0].id]); } count++; var right = BI.average(store, function (i, r) {//求平均,减少误差 return r.left + r.width; }); var occupied = this._getRegionOccupied(store); var split = BI.min(store, function (i, r) { return r.width; }).width / 2; var insert = clone[tid] = { left: right - split, width: split, top: occupied.top, height: occupied.height }; BI.each(store, function (i, region) { BI.extend(clone[region.id], { width: right - region.left - split }); }); if (this._test(store)) { delete clone[tid]; result.push({ type: "right-center" + count, regions: clone, insert: insert }); } else { break; } if (tops.length > 0) tops = this._getRightAlignRegions(tops[0].id).top; if (bottoms.length > 0) bottoms = this._getRightAlignRegions(bottoms[0].id).bottom; } } var lefts = this._getEquivalentRelativeRegions(name, ["left"]); if (lefts.length === 1) { var clone = this._cloneRegion(); var _cur = clone[name]; var left = this.regions[lefts[0].id]; var width = left.width; var all = left.width + _cur.width; var ratio = width / all; var split = all / 3; var lleft = width - split * ratio, rleft = _cur.width - split * (1 - ratio); var insert = false; if (lleft <= 21) { rleft = _cur.width - split; if (rleft <= 21) { } else { insert = clone[tid] = { top: _cur.top, height: _cur.height, left: _cur.left, width: split, }; BI.extend(clone[name], { top: _cur.top, height: _cur.height, left: _cur.left + split, width: _cur.width - split }); } } else if (rleft <= 21) { lleft = width - split; if (lleft <= 21) { } else { insert = clone[tid] = { top: _cur.top, height: _cur.height, left: _cur.left - split, width: split, }; BI.extend(clone[left.id], { top: left.top, height: left.height, left: left.left, width: left.width - split }); } } else { insert = clone[tid] = { top: _cur.top, height: _cur.height, left: left.left + lleft, width: split, }; BI.extend(clone[name], { top: _cur.top, height: _cur.height, left: _cur.left + _cur.width - rleft, width: rleft }); BI.extend(clone[left.id], { top: left.top, height: left.height, left: left.left, width: lleft }); } if (insert !== false) { if (this._test(clone)) { delete clone[tid]; result.push({ type: "left-line", regions: clone, insert: insert }) } } } var rights = this._getEquivalentRelativeRegions(name, ["right"]); if (rights.length === 1) { var clone = this._cloneRegion(); var _cur = clone[name]; var right = this.regions[rights[0].id]; var width = right.width; var all = right.width + _cur.width; var ratio = width / all; var split = all / 3; var lleft = _cur.width - split * (1 - ratio), rleft = width - split * ratio; var insert = false; if (lleft <= 21) { rleft = width - split; if (rleft <= 21) { } else { insert = clone[tid] = { top: right.top, height: right.height, left: right.left, width: split }; BI.extend(clone[right.id], { top: right.top, height: right.height, left: right.left + split, width: right.width - split }) } } else if (rleft <= 21) { lleft = _cur.width - split; if (lleft <= 21) { } else { insert = clone[tid] = { top: _cur.top, height: _cur.height, left: _cur.left + lleft, width: split }; BI.extend(clone[name], { top: _cur.top, height: _cur.height, left: _cur.left, width: _cur.width - split }) } } else { insert = clone[tid] = { top: _cur.top, height: _cur.height, left: _cur.left + lleft, width: split }; BI.extend(clone[name], { top: _cur.top, height: _cur.height, left: _cur.left, width: lleft }); BI.extend(clone[right.id], { top: right.top, height: right.height, left: right.left + right.width - rleft, width: rleft }); } if (insert !== false) { if (this._test(clone)) { delete clone[tid]; result.push({ type: "right-line", regions: clone, insert: insert }) } } } var tops = this._getEquivalentRelativeRegions(name, ["top"]); if (tops.length === 1) { var clone = this._cloneRegion(); var _cur = clone[name]; var top = this.regions[tops[0].id]; var height = top.height; var all = top.height + _cur.height; var ratio = height / all; var split = all / 3; var tleft = height - split * ratio, bleft = _cur.height - split * (1 - ratio); var insert = false; if (tleft <= 21) { bleft = _cur.height - split; if (bleft <= 21) { } else { insert = clone[tid] = { top: _cur.top, width: _cur.width, left: _cur.left, height: split }; BI.extend(clone[name], { top: _cur.top + split, height: _cur.height - split, left: _cur.left, width: _cur.width }); } } if (bleft <= 21) { tleft = height - split; if (tleft <= 21) { } else { insert = clone[tid] = { top: _cur.top - split, height: split, left: _cur.left, width: _cur.width }; BI.extend(clone[top.id], { top: top.top, height: top.height - split, left: top.left, width: top.width }); } } else { insert = clone[tid] = { top: top.top + tleft, height: split, left: _cur.left, width: _cur.width }; BI.extend(clone[name], { top: _cur.top + _cur.height - bleft, height: bleft, left: _cur.left, width: _cur.width }); BI.extend(clone[top.id], { top: top.top, height: tleft, left: top.left, width: top.width }); } if (insert !== false) { if (this._test(clone)) { delete clone[tid]; result.push({ type: "top-line", regions: clone, insert: insert }) } } } var bottoms = this._getEquivalentRelativeRegions(name, ["bottom"]); if (bottoms.length === 1) { var clone = this._cloneRegion(); var _cur = clone[name]; var bottom = this.regions[bottoms[0].id]; var height = bottom.height; var all = bottom.height + _cur.height; var ratio = height / all; var split = all / 3; var tleft = _cur.height - split * (1 - ratio), bleft = height - split * ratio; var insert = false; if (tleft <= 21) { bleft = height - split; if (bleft <= 21) { } else { insert = clone[tid] = { top: bottom.top, height: bottom.height, left: bottom.left, width: split }; BI.extend(clone[bottom.id], { top: bottom.top + split, height: bottom.height - split, left: bottom.left, width: bottom.width }); } } else if (bleft <= 21) { tleft = _cur.height - split; if (tleft <= 21) { } else { insert = clone[tid] = { top: _cur.top + tleft, height: split, left: _cur.left, width: _cur.width }; BI.extend(clone[name], { top: _cur.top, height: _cur.height - split, left: _cur.left, width: _cur.width }); } } else { insert = clone[tid] = { top: _cur.top + tleft, height: split, left: _cur.left, width: _cur.width, }; BI.extend(clone[name], { top: _cur.top, height: tleft, left: _cur.left, width: _cur.width }); BI.extend(clone[bottom.id], { top: bottom.top + bottom.height - bleft, height: bleft, left: bottom.left, width: bottom.width }); } if (insert !== false) { if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom-line", regions: clone, insert: insert }) } } } if (tops.length >= 1) { result.push({ type: "top-gap" }); } if (bottoms.length >= 1) { result.push({ type: "bottom-gap" }); } //上 var clone = this._cloneRegion(); var _cur = clone[name]; var insert = clone[tid] = { top: _cur.top, left: _cur.left, width: _cur.width, height: _cur.height / 2, }; BI.extend(clone[name], { top: _cur.top + _cur.height / 2, left: _cur.left, width: _cur.width, height: _cur.height / 2 }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "top", regions: clone, insert: insert }) } //下 var clone = this._cloneRegion(); var _cur = clone[name]; var insert = clone[tid] = { top: _cur.top + _cur.height / 2, left: _cur.left, width: _cur.width, height: _cur.height / 2 }; BI.extend(clone[name], { top: _cur.top, left: _cur.left, width: _cur.width, height: _cur.height / 2 }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "bottom", regions: clone, insert: insert }) } //左 var clone = this._cloneRegion(); var _cur = clone[name]; var insert = clone[tid] = { top: _cur.top, left: _cur.left, width: _cur.width / 2, height: _cur.height }; BI.extend(clone[name], { top: _cur.top, left: _cur.left + _cur.width / 2, width: _cur.width / 2, height: _cur.height }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "left", regions: clone, insert: insert }) } //右 var clone = this._cloneRegion(); var _cur = clone[name]; var insert = clone[tid] = { top: _cur.top, left: _cur.left + _cur.width / 2, width: _cur.width / 2, height: _cur.height }; BI.extend(clone[name], { top: _cur.top, left: _cur.left, width: _cur.width / 2, height: _cur.height }); if (this._test(clone)) { delete clone[tid]; result.push({ type: "right", regions: clone, insert: insert }) } return result; }, _positionAt: function (position, bound) { var left = position.left - bound.left, top = position.top - bound.top; var right = bound.width - left, bottom = bound.height - top; var halfW = bound.width / 2, halfH = bound.height / 2; if (left < 0 || top < 0 || right < 0 || bottom < 0) { return; } var devides = this._splitRegions(bound.id); var types = []; var result = {}; var topcenterCount = 0, bottomcenterCount = 0, leftcenterCount = 0, rightcenterCount = 0; BI.each(devides, function (i, devide) { if (devide.type.indexOf("top-center") > -1) { topcenterCount++; } else if (devide.type.indexOf("bottom-center") > -1) { bottomcenterCount++; } else if (devide.type.indexOf("left-center") > -1) { leftcenterCount++; } else if (devide.type.indexOf("right-center") > -1) { rightcenterCount++; } types.push(devide.type); result[devide.type] = devide; }); //drop if (top >= 5 && top <= 15 && left >= 5 && left <= 15 && types.contains("left-top")) { return result["left-top"]; } if (top >= 5 && top <= 15 && right >= 5 && right <= 15 && types.contains("top-right")) { return result["top-right"]; } if (bottom >= 5 && bottom <= 15 && left >= 5 && left <= 15 && types.contains("bottom-left")) { return result["bottom-left"]; } if (bottom >= 5 && bottom <= 15 && right >= 5 && right <= 15 && types.contains("bottom-right")) { return result["bottom-right"]; } if (top >= 5 && top <= 15 && left >= 25 && left <= 35 && types.contains("top-left")) { return result["top-left"]; } if (top >= 5 && top <= 15 && right >= 25 && right <= 35 && types.contains("top-right-second")) { return result["top-right-second"]; } if (bottom >= 5 && bottom <= 15 && left >= 25 && left <= 35 && types.contains("bottom-left-second")) { return result["bottom-left-second"]; } if (bottom >= 5 && bottom <= 15 && right >= 25 && right <= 35 && types.contains("bottom-right-second")) { return result["bottom-right-second"]; } //topcenter或bottomcenter if (left >= halfW - 10 && left <= halfW + 10 && (topcenterCount > 0 || bottomcenterCount > 0)) { for (var i = 1; i <= topcenterCount; i++) { var s = (topcenterCount - i) * 20 + 5, e = s + 10; if (top >= s && top <= e) { return result["top-center" + i]; } } for (var i = 1; i <= bottomcenterCount; i++) { var s = (bottomcenterCount - i) * 20 + 5, e = s + 10; if (bottom >= s && bottom <= e) { return result["bottom-center" + i]; } } } //leftcenter或rightcenter if (top >= halfH - 10 && top <= halfH + 10 && (leftcenterCount > 0 || rightcenterCount > 0)) { for (var i = 1; i <= leftcenterCount; i++) { var s = (leftcenterCount - i) * 20 + 5, e = s + 10; if (left >= s && left <= e) { return result["left-center" + i]; } } for (var i = 1; i <= rightcenterCount; i++) { var s = (rightcenterCount - i) * 20 + 5, e = s + 10; if (right >= s && right <= e) { return result["right-center" + i]; } } } //缝隙 if (top <= 8 && types.contains("top-gap")) { return result["top-gap"]; } if (bottom <= 8 && types.contains("bottom-gap")) { return result["bottom-gap"]; } //三分 if (top <= 15 && left >= 15 && right >= 15 && types.contains("top-line")) { return result["top-line"]; } if (left <= 15 && top >= 15 && bottom >= 15 && types.contains("left-line")) { return result["left-line"]; } if (right <= 15 && top >= 15 && bottom >= 15 && types.contains("right-line")) { return result["right-line"]; } if (bottom <= 15 && left >= 15 && right >= 15 && types.contains("bottom-line")) { return result["bottom-line"]; } //平分 if (top <= 1 / 4 * bound.height && types.contains("top")) { return result["top"]; } if (top >= 3 / 4 * bound.height && types.contains("bottom")) { return result["bottom"]; } if (left <= bound.width / 2 && types.contains("left")) { return result["left"]; } return result["right"]; }, _getScrollOffset: function () { return { left: this.scrollContainer.element[0].scrollLeft, top: this.scrollContainer.element[0].scrollTop } }, ////操作//// _createOneRegion: function (item) { var el = BI.createWidget(item.el); el.setVisible(true); return { id: el.attr("id"), left: item.left, top: item.top, width: item.width, height: item.height, el: el } }, _createOneDrop: function (region) { if (this.storeDrops[region.id]) { var drop = this.storeDrops[region.id].el; drop.setVisible(true); } else { var drop = BI.createWidget({ type: "bi.layout", cls: "arrangement-drop-region", widgetName: region.id }); } return { id: region.id, left: region.left, top: region.top, width: region.width, height: region.height, el: drop } }, _calculateDrops: function () { var self = this; BI.each(this.drops, function (id, drop) { drop.el.empty(); var devides = self._splitRegions(id); var topcenterCount = 0, bottomcenterCount = 0, leftcenterCount = 0, rightcenterCount = 0; var absolutes = []; var horizontals = []; var verticals = []; BI.each(devides, function (i, devide) { if (devide.type.indexOf("top-center") > -1) { topcenterCount++; } else if (devide.type.indexOf("bottom-center") > -1) { bottomcenterCount++; } else if (devide.type.indexOf("left-center") > -1) { leftcenterCount++; } else if (devide.type.indexOf("right-center") > -1) { rightcenterCount++; } }); BI.each(devides, function (i, devide) { switch (devide.type) { case "left-top": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, left: 5, top: 5 }); break; case "top-right": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, right: 5, top: 5 }); break; case "bottom-left": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, left: 5, bottom: 5 }); break; case "bottom-right": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, right: 5, bottom: 5 }); break; case "top-left": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, left: 25, top: 5 }); break; case "top-right-second": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, right: 25, top: 5 }); break; case "bottom-left-second": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, left: 25, bottom: 5 }); break; case "bottom-right-second": absolutes.push({ el: { type: "bi.layout", width: 10, height: 10, cls: "drop-devider" }, right: 25, bottom: 5 }); break; default: if (devide.type.indexOf("top-center") > -1) { var num = devide.type.split("top-center")[1]; horizontals.push({ el: { type: "bi.layout", width: 20, height: 10, cls: "drop-devider" }, tgap: 20 * (topcenterCount - BI.parseInt(num)) + 5 }) } else if (devide.type.indexOf("bottom-center") > -1) { var num = devide.type.split("bottom-center")[1]; horizontals.push({ el: { type: "bi.layout", width: 20, height: 10, cls: "drop-devider" }, bgap: 20 * (bottomcenterCount - BI.parseInt(num)) + 5 }) } else if (devide.type.indexOf("left-center") > -1) { var num = devide.type.split("left-center")[1]; verticals.push({ el: { type: "bi.layout", width: 10, height: 20, cls: "drop-devider" }, lgap: 20 * (leftcenterCount - BI.parseInt(num)) + 5 }) } else if (devide.type.indexOf("right-center") > -1) { var num = devide.type.split("right-center")[1]; verticals.push({ el: { type: "bi.layout", width: 10, height: 20, cls: "drop-devider" }, rgap: 20 * (rightcenterCount - BI.parseInt(num)) + 5 }) } break; } }); BI.createWidget({ type: "bi.absolute", element: drop.el, items: absolutes }); BI.createWidget({ type: "bi.absolute_horizontal_adapt", element: drop.el, items: horizontals }); BI.createWidget({ type: "bi.absolute_vertical_adapt", element: drop.el, items: verticals }); }); }, _applyRegion: function (regions) { var self = this, o = this.options; BI.each(regions || this.regions, function (i, region) { region.el.element.css({ left: region.left, top: region.top, width: region.width, height: region.height }); self.drops[region.id].left = region.left; self.drops[region.id].top = region.top; self.drops[region.id].width = region.width; self.drops[region.id].height = region.height; }); BI.each(this.drops, function (i, region) { region.el.element.css({ left: region.left, top: region.top, width: region.width, height: region.height }); }); this._applyContainer(); this._calculateDrops(); this.ratio = this.getLayoutRatio(); }, _renderRegion: function () { var self = this; BI.createWidget({ type: "bi.absolute", element: this.container, items: BI.toArray(this.regions) }); BI.createWidget({ type: "bi.absolute", element: this.droppable, items: BI.toArray(this.drops) }); }, getClientWidth: function () { return this.scrollContainer.element[0].clientWidth; }, getClientHeight: function () { return this.scrollContainer.element[0].clientHeight; }, _applyContainer: function () { //先掩藏后显示能够明确滚动条是否出现 this.scrollContainer.element.css("overflow", "hidden"); var occupied = this._getRegionOccupied(); this.container.element.width(occupied.left + occupied.width).height(occupied.top + occupied.height); this.scrollContainer.element.css("overflow", "auto"); return occupied; }, _modifyRegion: function (regions) { BI.each(this.regions, function (id, region) { if (regions[id]) { region.left = regions[id].left; region.top = regions[id].top; region.width = regions[id].width; region.height = regions[id].height; } }); BI.each(this.drops, function (id, region) { if (regions[id]) { region.left = regions[id].left; region.top = regions[id].top; region.width = regions[id].width; region.height = regions[id].height; } }); }, _addRegion: function (item) { var region = this._createOneRegion(item); this.regions[region.id] = region; var drop = this._createOneDrop(region); this.drops[drop.id] = drop; this.storeDrops[drop.id] = drop; this._locationRegion(); BI.createWidget({ type: "bi.absolute", element: this.container, items: [region] }); BI.createWidget({ type: "bi.absolute", element: this.droppable, items: [drop] }) }, _deleteRegionByName: function (name) { this.regions[name].el.setVisible(false); this.drops[name].el.setVisible(false); delete this.regions[name]; delete this.drops[name]; this._locationRegion(); }, _setArrangeSize: function (size) { this.arrangement.element.css({ left: size.left, top: size.top, width: size.width, height: size.height }) }, //Grid _getOneWidthPortion: function () { return this.getClientWidth() / BI.Arrangement.PORTION; }, _getGridPositionAndSize: function (position) { var perWidth = this._getOneWidthPortion(); var widthPortion = Math.round(position.width / perWidth); var leftPortion = Math.round(position.left / perWidth); var topPortion = Math.round(position.top / BI.Arrangement.GRID_HEIGHT); var heightPortion = Math.round(position.height / BI.Arrangement.GRID_HEIGHT); // if (leftPortion > BI.Arrangement.PORTION) { // leftPortion = BI.Arrangement.PORTION; // } // if (widthPortion > BI.Arrangement.PORTION) { // widthPortion = BI.Arrangement.PORTION; // } // if (leftPortion + widthPortion > BI.Arrangement.PORTION) { // leftPortion = BI.Arrangement.PORTION - widthPortion; // } if (widthPortion === 0) { widthPortion = 1; } if (heightPortion === 0) { heightPortion = 1; } return { x: leftPortion, y: topPortion, w: widthPortion, h: heightPortion } }, _getBlockPositionAndSize: function (position) { var perWidth = this._getOneWidthPortion(); return { left: position.x * perWidth, top: position.y * BI.Arrangement.GRID_HEIGHT, width: position.w * perWidth, height: position.h * BI.Arrangement.GRID_HEIGHT }; }, _getLayoutsByRegions: function (regions) { var self = this; var result = []; BI.each(regions || this.regions, function (id, region) { result.push(BI.extend(self._getGridPositionAndSize(region), { i: region.id })) }); return result; }, _getLayoutIndexByName: function (layout, name) { return BI.findIndex(layout, function (i, l) { return l.i === name; }); }, _setBlockPositionAndSize: function (size) { this.block.element.css({ left: size.left, top: size.top, width: size.width, height: size.height }); }, _getRegionsByLayout: function (layout) { var self = this; var regions = {}; BI.each(layout, function (i, ly) { regions[ly.i] = BI.extend(self._getBlockPositionAndSize(ly), { id: ly.i }); }); return regions; }, _setRegionsByLayout: function (regions, layout) { var self = this; regions || (regions = this.regions); BI.each(layout, function (i, ly) { if (regions[ly.i]) { BI.extend(regions[ly.i], self._getBlockPositionAndSize(ly)); } }); return regions; }, _moveElement: function (layout, l, x, y, isUserAction) { var self = this; if (l.static) return layout; if (l.y === y && l.x === x) return layout; var movingUp = y && l.y > y; if (typeof x === 'number') l.x = x; if (typeof y === 'number') l.y = y; l.moved = true; var sorted = this._sortLayoutItemsByRowCol(layout); if (movingUp) sorted = sorted.reverse(); var collisions = getAllCollisions(sorted, l); for (var i = 0, len = collisions.length; i < len; i++) { var collision = collisions[i]; if (collision.moved) continue; if (l.y > collision.y && l.y - collision.y > collision.h / 4) continue; if (collision.static) { layout = this._moveElementAwayFromCollision(layout, collision, l, isUserAction); } else { layout = this._moveElementAwayFromCollision(layout, l, collision, isUserAction); } } return layout; function getAllCollisions(layout, layoutItem) { return BI.filter(layout, function (i, l) { return self._collides(l, layoutItem); }); } }, _sortLayoutItemsByRowCol: function (layout) { return [].concat(layout).sort(function (a, b) { if (a.y > b.y || (a.y === b.y && a.x > b.x)) { return 1; } return -1; }); }, _collides: function (l1, l2) { if (l1 === l2) return false; // same element if (l1.x + l1.w <= l2.x) return false; // l1 is left of l2 if (l1.x >= l2.x + l2.w) return false; // l1 is right of l2 if (l1.y + l1.h <= l2.y) return false; // l1 is above l2 if (l1.y >= l2.y + l2.h) return false; // l1 is below l2 return true; // boxes overlap }, _getFirstCollision: function (layout, layoutItem) { for (var i = 0, len = layout.length; i < len; i++) { if (this._collides(layout[i], layoutItem)) return layout[i]; } }, _moveElementAwayFromCollision: function (layout, collidesWith, itemToMove, isUserAction) { if (isUserAction) { var fakeItem = { x: itemToMove.x, y: itemToMove.y, w: itemToMove.w, h: itemToMove.h, i: '-1' }; fakeItem.y = Math.max(collidesWith.y - itemToMove.h, 0); if (!this._getFirstCollision(layout, fakeItem)) { return this._moveElement(layout, itemToMove, undefined, fakeItem.y); } } return this._moveElement(layout, itemToMove, undefined, itemToMove.y + 1); }, _compactItem: function (compareWith, l, verticalCompact) { if (verticalCompact) { while (l.y > 0 && !this._getFirstCollision(compareWith, l)) { l.y--; } } var collides; while ((collides = this._getFirstCollision(compareWith, l))) { l.y = collides.y + collides.h; } return l; }, compact: function (layout, verticalCompact) { var compareWith = getStatics(layout); var sorted = this._sortLayoutItemsByRowCol(layout); var out = []; for (var i = 0, len = sorted.length; i < len; i++) { var l = sorted[i]; if (!l.static) { l = this._compactItem(compareWith, l, verticalCompact); compareWith.push(l); } out[layout.indexOf(l)] = l; l.moved = false; } return out; function getStatics(layout) { return BI.filter(layout, function (i, l) { return l.static; }); } }, ////公有方法//// getRegionByName: function (name) { var obj = {}; obj[name] = this.regions[name]; return this._cloneRegion(obj)[name]; }, getAllRegions: function () { return BI.toArray(this._cloneRegion()); }, getHelper: function () { var helper = BI.createWidget({ type: "bi.layout", width: 18, height: 18, cls: "arrangement-helper" }); BI.createWidget({ type: "bi.absolute", element: this, items: [helper] }); return helper; }, _start: function (cur) { this.arrangement.setVisible(true); this.droppable.setVisible(true); if (this.options.layoutType === BI.Arrangement.LAYOUT_TYPE.GRID) { this.block.setVisible(true); } BI.each(this.drops, function (i, drop) { drop.el.setVisible(false); }); if (cur) { if (this.drops[cur]) { this.drops[cur].el.setVisible(true); } } }, _stop: function () { this.arrangement.setVisible(false); this.droppable.setVisible(false); this.block.setVisible(false); }, getDirectRelativeRegions: function (name, direction) { direction || (direction = ["top", "bottom", "left", "right"]); var self = this, result = {}; BI.each(direction, function (i, dir) { result[dir] = self._getDirectRelativeRegions(name, [dir]); }); return result; }, ////公有操作//// setLayoutType: function (type) { var self = this, o = this.options; if (type !== o.layoutType) { o.layoutType = type; switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: this.relayout(); break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: this.relayout(); break; } } }, getLayoutType: function () { return this.options.layoutType; }, getLayoutRatio: function () { var occupied = this._getRegionOccupied(); var width = this.getClientWidth(), height = this.getClientHeight(); return { x: BI.parseFloat(BI.contentFormat((occupied.left + occupied.width) / width, "#.##;-#.##")), y: BI.parseFloat(BI.contentFormat((occupied.top + occupied.height) / height, "#.##;-#.##")) } }, addRegion: function (region, position) { if (position) { this.setPosition(position, region); } var self = this, o = this.options; if (!this.position) { return false; } var test = this._cloneRegion(); BI.each(this.position.regions, function (i, region) { test[region.id].left = region.left; test[region.id].top = region.top; test[region.id].width = region.width; test[region.id].height = region.height; }); var item = BI.extend({}, region, { left: this.position.insert.left, top: this.position.insert.top, width: this.position.insert.width, height: this.position.insert.height }); var added = this._createOneRegion(item); test[added.id] = added; if (this._test(test)) { delete test[added.id]; this._modifyRegion(test); this._addRegion(item); this._populate(this.getAllRegions()); return true; } return false; }, deleteRegion: function (name) { if (!this.regions[name]) { return false; } var self = this, o = this.options; switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: var clone = this._cloneRegion(); var regions = this._getEquivalentRelativeRegions(name); if (regions.length > 0) { BI.each(regions, function (i, region) { BI.extend(clone[region.id], region); }); this._modifyRegion(clone); } this._deleteRegionByName(name); this._populate(this.getAllRegions()); return true; case BI.Arrangement.LAYOUT_TYPE.FREE: this._deleteRegionByName(name); this._populate(this.getAllRegions()); return true; case BI.Arrangement.LAYOUT_TYPE.GRID: this._deleteRegionByName(name); this._populate(this.getAllRegions()); this.resize(); return true; } return false; }, setRegionSize: function (name, size) { var self = this, o = this.options; var flag = false; switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: var current = this.regions[name]; if (size.width !== current.width) { var regions = this._getInDirectRelativeRegions(name, ["right"]).right; var lefts = regions.left || [], rights = regions.right || []; var offset = size.width - current.width; var cloned = this._cloneRegion(); BI.some(lefts, function (i, left) { var region = cloned[left.id]; region.width = region.width + offset; }); BI.some(rights, function (i, right) { var region = cloned[right.id]; region.width = region.width - offset; region.left = region.left + offset; }); if (this._test(cloned) && this._isArrangeFine(cloned)) { this._modifyRegion(cloned); flag = true; } } if (size.height !== current.height) { var regions = this._getInDirectRelativeRegions(name, ["bottom"]).bottom; var tops = regions.top || [], bottoms = regions.bottom || []; var offset = size.height - current.height; var cloned = this._cloneRegion(); BI.some(tops, function (i, top) { var region = cloned[top.id]; region.height = region.height + offset; }); BI.some(bottoms, function (i, bottom) { var region = cloned[bottom.id]; region.height = region.height - offset; region.top = region.top + offset; }); if (this._test(cloned) && this._isArrangeFine(cloned)) { this._modifyRegion(cloned); flag = true; } } break; case BI.Arrangement.LAYOUT_TYPE.FREE: var clone = this._cloneRegion(); BI.extend(clone[name], { width: size.width, height: size.height }); if (this._test(clone)) { this._modifyRegion(clone); flag = true; } break; case BI.Arrangement.LAYOUT_TYPE.GRID: var clone = this._cloneRegion(); BI.extend(clone[name], { width: size.width, height: size.height }); if (this._test(clone)) { var layout = this._getLayoutsByRegions(clone); layout = this.compact(layout, true); var regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); flag = true; } break; } this._locationRegion(); this._applyRegion(); return flag; }, setPosition: function (position, size) { var self = this, o = this.options; var insert, regions = [], cur; if (position.left < 0 || position.top < 0) { switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: this.resize(); break; } this._stop(); this.position = null; return null; } var offset = this._getScrollOffset(); position = { left: position.left + offset.left, top: position.top + offset.top }; switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (BI.isEmpty(this.regions)) { if (self._isPositionInBounds(position, { left: 0, top: 0, width: this.element[0].clientWidth, height: this.element[0].clientHeight })) { insert = { left: 0, top: 0, width: this.element[0].clientWidth, height: this.element[0].clientHeight }; } } else { if (BI.some(this.regions, function (id, region) { if (self._isPositionInBounds(position, region)) { var at = self._positionAt(position, region); if (!at) { insert = null; } else { insert = at.insert; regions = at.regions; } cur = id; return true; } })) { } else { insert = null; regions = []; } } if (insert == null) { this._stop(); self.position = null; break; } this.position = { insert: insert, regions: regions }; this._setArrangeSize(insert); this._start(cur); break; case BI.Arrangement.LAYOUT_TYPE.FREE: var insert = { top: position.top < 0 ? 0 : position.top, left: position.left < 0 ? 0 : position.left, width: size.width, height: size.height }; this.position = { insert: insert }; this._setArrangeSize(insert); this._start(); break; case BI.Arrangement.LAYOUT_TYPE.GRID: var p = { top: position.top < 0 ? 0 : position.top, left: position.left < 0 ? 0 : position.left, width: size.width, height: size.height }; this._setArrangeSize(p); var cur = this._getGridPositionAndSize(p); var layout = [{ x: 0, y: BI.MAX, w: cur.w, h: cur.h, i: cur.i }].concat(this._getLayoutsByRegions()); layout = this._moveElement(layout, layout[0], cur.x, cur.y, true); layout = this.compact(layout, true); var regions = this._setRegionsByLayout(this._cloneRegion(), layout); var insert = this._getBlockPositionAndSize(layout[0]); this.position = { insert: insert, regions: regions }; this._applyRegion(regions); this._setBlockPositionAndSize(insert); this._start(); break; } return this.position; }, setRegionPosition: function (name, position) { var self = this, o = this.options; var offset = this._getScrollOffset(); position = BI.extend(position, { left: position.left + offset.left, top: position.top + offset.top }); switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: break; case BI.Arrangement.LAYOUT_TYPE.FREE: BI.extend(this.regions[name], { left: position.left < 0 ? 0 : position.left, top: position.top < 0 ? 0 : position.top }); this._applyRegion(); break; case BI.Arrangement.LAYOUT_TYPE.GRID: if (!position.stop) { BI.extend(this.regions[name], { left: position.left < 0 ? 0 : position.left, top: position.top < 0 ? 0 : position.top }); var cloned = this._cloneRegion(); var cur = this._getGridPositionAndSize(BI.extend(cloned[name], { left: position.left < 0 ? 0 : position.left, top: position.top < 0 ? 0 : position.top })); var x = cur.x, y = cur.y; cur = BI.extend(cur, { x: 0, y: BI.MAX, i: -1 }); delete cloned[name]; var layout = this._getLayoutsByRegions(cloned); layout = this._moveElement([cur].concat(layout), cur, x, y, true); layout = this.compact(layout, true); var regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); this._applyRegion(); this._setBlockPositionAndSize(this._getBlockPositionAndSize(cur)); this.block.setVisible(true); } else { BI.extend(this.regions[name], { left: position.left < 0 ? 0 : position.left, top: position.top < 0 ? 0 : position.top }); var cloned = this._cloneRegion(); var layout = this._getLayoutsByRegions(cloned); layout = this.compact(layout, true); var regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); this._applyRegion(); this.block.setVisible(false); } break; } }, setContainerSize: function (size) { var self = this, o = this.options; var occupied = this._getRegionOccupied(); switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (this._isArrangeFine()) { var width = size.width, height = size.height; var regions = this._cloneRegion(); BI.each(regions, function (i, region) { region.width = region.width / occupied.width * width; //region.height = region.height / occupied.height * height; }); BI.each(regions, function (id, region) { var lefts = self.locations[id].left; var tops = self.locations[id].top; var bottoms = self.locations[id].bottom; var maxRegion; if (lefts.length > 0) { var ids = self._getRegionNames(lefts); var rs = self._getRegionsByNames(ids); maxRegion = self._getRegionOccupied(rs); region.left = maxRegion.left + maxRegion.width / occupied.width * width; } else { region.left = 0; } if (bottoms.length === 0) { region.height = height - region.top; } //if (tops.length > 0) { // var ids = self._getRegionNames(tops); // var rs = self._getRegionsByNames(ids); // maxRegion = self._getRegionOccupied(rs); // region.top = maxRegion.top + maxRegion.height / occupied.height * height; //} //if (tops.length === 0) { // region.top = 0; //} }); if (this._test(regions)) { this._modifyRegion(regions); this._applyRegion(); } } break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } this.resize(); }, scrollTo: function (top) { this.scrollContainer.element.scrollTop(top); }, zoom: function (ratio) { var self = this, o = this.options; if (!ratio) { return; } var occupied = this._applyContainer(); switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (this._isArrangeFine()) { var width = this.getClientWidth(); var xRatio = (ratio.x || 1) * width / (occupied.left + occupied.width); //var yRatio = ratio.y * height / (occupied.top + occupied.height); var regions = this._cloneRegion(); BI.each(regions, function (i, region) { region.left = region.left * xRatio; //region.top = region.top * yRatio; region.width = region.width * xRatio; //region.height = region.height * yRatio; }); if (this._test(regions)) { this._modifyRegion(regions); this._applyRegion(); } this.resize(); // } else { this.relayout(); } break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: if (this._isArrangeFine()) { var width = this.getClientWidth(); var xRatio = (ratio.x || 1) * width / (occupied.left + occupied.width); var regions = this._cloneRegion(); BI.each(regions, function (i, region) { region.left = region.left * xRatio; region.width = region.width * xRatio; }); if (this._test(regions)) { var layout = this._getLayoutsByRegions(regions); layout = this.compact(layout, true); regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); this._applyRegion(); } } else { this.relayout(); } break; } }, resize: function () { var self = this, o = this.options; var occupied = this._applyContainer(); switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (this._isArrangeFine()) { var width = this.getClientWidth(), height = this.getClientHeight(); var isHeightAdjust = height > occupied.top + occupied.height; var regions = this._cloneRegion(); BI.each(regions, function (i, region) { region.width = region.width / occupied.width * width; //if (isHeightAdjust) { // region.height = region.height / occupied.height * height; //} }); BI.each(regions, function (id, region) { var lefts = self.locations[id].left; var tops = self.locations[id].top; var bottoms = self.locations[id].bottom; var maxRegion; if (lefts.length > 0) { var ids = self._getRegionNames(lefts); var rs = self._getRegionsByNames(ids); maxRegion = self._getRegionOccupied(rs); region.left = maxRegion.left + maxRegion.width / occupied.width * width; } else { region.left = 0; } if (tops.length === 0) { region.top = 0; } if (isHeightAdjust && bottoms.length === 0) { region.height = height - region.top; } //if (isHeightAdjust && tops.length > 0) { // var ids = self._getRegionNames(tops); // var rs = self._getRegionsByNames(ids); // maxRegion = self._getRegionOccupied(rs); // region.top = maxRegion.top + maxRegion.height / occupied.height * height; //} }); if (this._test(regions)) { this._modifyRegion(regions); this._applyRegion(); } } else { this.relayout(); } break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: this.zoom(this.ratio); var regions = this._cloneRegion(); var layout = this._getLayoutsByRegions(regions); layout = this.compact(layout, true); regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); this._applyRegion(); break; } }, relayout: function () { var self = this, o = this.options; if (o.isNeedReLayout === false) { return; } //var occupied = this._applyContainer(); switch (o.layoutType) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: if (!this._isArrangeFine()) { var width = this.getClientWidth(), height = this.getClientHeight(); var clone = BI.toArray(this._cloneRegion()); clone.sort(function (r1, r2) { if (self._isEqual(r1.top, r2.top)) { return r1.left - r2.left; } return r1.top - r2.top; }); var count = clone.length; var cols = 3, rows = Math.floor((count - 1) / 3 + 1); var w = width / cols, h = height / rows; var store = {}; BI.each(clone, function (i, region) { var row = Math.floor(i / 3), col = i % 3; BI.extend(region, { top: row * 380, left: col * w, width: w, height: 380 }); if (!store[row]) { store[row] = {}; } store[row][col] = region; }); //非3的倍数 if (count % 3 !== 0) { var lasts = store[rows - 1]; var perWidth = width / (count % 3); BI.each(lasts, function (i, region) { BI.extend(region, { left: BI.parseInt(i) * perWidth, width: perWidth }); }); } if (this._test(clone)) { this._populate(clone); this.resize(); } } else { this.resize(); } break; case BI.Arrangement.LAYOUT_TYPE.FREE: break; case BI.Arrangement.LAYOUT_TYPE.GRID: var width = this.getClientWidth(), height = this.getClientHeight(); var regions = this._cloneRegion(); var clone = BI.toArray(regions); clone.sort(function (r1, r2) { if (self._isEqual(r1.top, r2.top)) { return r1.left - r2.left; } return r1.top - r2.top; }); var count = clone.length; var cols = 3, rows = Math.floor((count - 1) / 3 + 1); var w = width / cols, h = height / rows; var store = {}; BI.each(clone, function (i, region) { var row = Math.floor(i / 3), col = i % 3; BI.extend(region, { top: row * 380, left: col * w, width: w, height: 380 }); if (!store[row]) { store[row] = {}; } store[row][col] = region; }); //非3的倍数 if (count % 3 !== 0) { var lasts = store[rows - 1]; var perWidth = width / (count % 3); BI.each(lasts, function (i, region) { BI.extend(region, { left: BI.parseInt(i) * perWidth, width: perWidth }); }); } if (this._test(clone)) { var layout = this._getLayoutsByRegions(regions); layout = this.compact(layout, true); regions = this._getRegionsByLayout(layout); this._modifyRegion(regions); this._populate(clone); } break; } }, _populate: function (items) { this._stop(); this._calculateRegions(items); this._locationRegion(); this._applyRegion(); }, populate: function (items) { var self = this; BI.each(this.regions, function (name, region) { self.regions[name].el.setVisible(false); self.drops[name].el.setVisible(false); delete self.regions[name]; delete self.drops[name]; }); this._populate(items); this._renderRegion(); } }); BI.extend(BI.Arrangement, { PORTION: 24, GRID_HEIGHT: 50, LAYOUT_TYPE: { ADAPTIVE: BICst.DASHBOARD_LAYOUT_ADAPT, FREE: BICst.DASHBOARD_LAYOUT_FREE, GRID: BICst.DASHBOARD_LAYOUT_GRID } }); $.shortcut('bi.arrangement', BI.Arrangement);/** * Created by Young's on 2016/4/28. */ BI.EditorIconCheckCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this, arguments), { baseClass: "bi-check-editor-combo", width: 100, height: 30, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, allowBlank: true, watermark: "", errorText: "" }) }, _init: function () { BI.EditorIconCheckCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.editor_trigger", items: o.items, height: o.height, validationChecker: o.validationChecker, quitChecker: o.quitChecker, allowBlank: o.allowBlank, watermark: o.watermark, errorText: o.errorText }); this.trigger.on(BI.EditorTrigger.EVENT_CHANGE, function () { self.popup.setValue(this.getValue()); self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE); }); this.popup = BI.createWidget({ type: "bi.text_value_check_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.editorIconCheckCombo.hideView(); self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editorIconCheckCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup, maxHeight: 300 } }); }, setValue: function (v) { this.editorIconCheckCombo.setValue(v); }, setEnable: function (v) { BI.EditorIconCheckCombo.superclass.setEnable.apply(this, arguments); this.editorIconCheckCombo.setEnable(v); }, getValue: function () { return this.trigger.getValue(); }, populate: function (items) { this.options.items = items; this.editorIconCheckCombo.populate(items); } }); BI.EditorIconCheckCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.editor_icon_check_combo", BI.EditorIconCheckCombo);/** * Created by GUY on 2016/4/25. * * @class BI.FormulaCombo * @extend BI.Widget */ BI.FormulaCombo = BI.inherit(BI.Widget, { _constant: { POPUP_HEIGHT: 450, POPUP_WIDTH: 600, POPUP_V_GAP: 10, POPUP_H_GAP: 10, ADJUST_LENGTH: 2, HEIGHT_MAX: 10000, MAX_HEIGHT: 500, MAX_WIDTH: 600, COMBO_TRIGGER_WIDTH: 300 }, _defaultConfig: function () { return BI.extend(BI.FormulaCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-combo", height: 30, items: [] }) }, _init: function () { BI.FormulaCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.formula_ids = []; this.input = BI.createWidget({ type: "bi.formula_combo_trigger", height: o.height, items: o.items }); this.formulaPopup = BI.createWidget({ type: "bi.formula_combo_popup", fieldItems: o.items }); this.formulaInputCombo = BI.createWidget({ type: "bi.combo", element: this, isNeedAdjustHeight: true, isNeedAdjustWidth: false, adjustLength: this._constant.CONDITION_TYPE_COMBO_ADJUST, el: this.input, popup: { el: { type: "bi.absolute", height: this._constant.HEIGHT_MAX, width: this._constant.POPUP_WIDTH, items: [{ el: this.formulaPopup, top: this._constant.POPUP_V_GAP, left: this._constant.POPUP_H_GAP, right: this._constant.POPUP_V_GAP, bottom: 0 }] }, stopPropagation: false, maxHeight: this._constant.MAX_HEIGHT, width: this._constant.MAX_WIDTH } }); this.formulaInputCombo.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () { self.formulaPopup.setValue(self.input.getValue()); }); this.formulaPopup.on(BI.FormulaComboPopup.EVENT_CHANGE, function () { self.setValue(self.formulaPopup.getValue()); self.formulaInputCombo.hideView(); self.fireEvent(BI.FormulaCombo.EVENT_CHANGE); }); this.formulaPopup.on(BI.FormulaComboPopup.EVENT_VALUE_CANCEL, function () { self.formulaInputCombo.hideView(); }); }, setValue: function (v) { if (this.formulaInputCombo.isViewVisible()) { this.formulaInputCombo.hideView(); } this.input.setValue(v); this.input.setText(BI.Func.getFormulaStringFromFormulaValue(v)); this.formulaPopup.setValue(this.input.getValue()); }, getFormulaTargetIds: function() { return this.formulaPopup.getFormulaTargetIds(); }, getValue: function () { return this.input.getValue(); } }); BI.FormulaCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.formula_combo", BI.FormulaCombo);/** * Created by GUY on 2016/4/25. * * @class BI.FormulaComboPopup * @extend BI.Widget */ BI.FormulaComboPopup = BI.inherit(BI.Widget, { _constant: { BUTTON_HEIGHT: 30, SOUTH_HEIGHT: 60, SOUTH_H_GAP: 10 }, _defaultConfig: function () { return BI.extend(BI.FormulaComboPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-pane-popup" }) }, _init: function () { BI.FormulaComboPopup.superclass._init.apply(this, arguments); this.populate(); }, populate: function () { var self = this, fieldItems = this.options.fieldItems; this.formula = BI.createWidget({ type: "bi.formula_insert" }); this.formula.populate(fieldItems); var confirmButton = BI.createWidget({ type: "bi.button", level: "common", height: this._constant.BUTTON_HEIGHT, text: BI.i18nText("BI-Basic_OK") }); var cancelButton = BI.createWidget({ type: "bi.button", level: "ignore", height: this._constant.BUTTON_HEIGHT, text: BI.i18nText("BI-Basic_Cancel") }); this.formula.on(BI.FormulaInsert.EVENT_CHANGE, function () { confirmButton.setEnable(self.formula.checkValidation()); }); confirmButton.on(BI.Button.EVENT_CHANGE, function () { self.fireEvent(BI.FormulaComboPopup.EVENT_CHANGE); }); cancelButton.on(BI.Button.EVENT_CHANGE, function () { self.setValue(self.oldValue); self.fireEvent(BI.FormulaComboPopup.EVENT_VALUE_CANCEL); }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.formula, height: "fill" }, { el: { type: "bi.right_vertical_adapt", height: this._constant.SOUTH_HEIGHT, items: [cancelButton, confirmButton], hgap: this._constant.SOUTH_H_GAP }, height: this._constant.SOUTH_HEIGHT }] }) }, getFormulaTargetIds: function(){ return this.formula.getUsedFields(); }, getValue: function () { return this.formula.getValue(); }, setValue: function (v) { this.oldValue = v; this.formula.setValue(v); } }); BI.FormulaComboPopup.EVENT_CHANGE = "EVENT_CHANGE"; BI.FormulaComboPopup.EVENT_VALUE_CANCEL = "EVENT_VALUE_CANCEL"; $.shortcut("bi.formula_combo_popup", BI.FormulaComboPopup);/** * Created by GUY on 2016/4/25. * * @class BI.FormulaComboTrigger * @extend BI.Widget */ BI.FormulaComboTrigger = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FormulaComboTrigger.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-combo-trigger", height: 30, items: [] }) }, _init: function () { BI.FormulaComboTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options; this.label = BI.createWidget({ type: "bi.label", element: this, textAlign: "left", textHeight: this.options.height, lgap: 10 }); }, _getTextFromFormulaValue: function (formulaValue) { var self = this; var formulaString = ""; var regx = /\$[\{][^\}]*[\}]|\w*\w|\$\{[^\$\(\)\+\-\*\/)\$,]*\w\}|\$\{[^\$\(\)\+\-\*\/]*\w\}|\$\{[^\$\(\)\+\-\*\/]*[\u4e00-\u9fa5]\}|\w|(.)/g; var result = formulaValue.match(regx); BI.each(result, function (i, item) { var fieldRegx = /\$[\{][^\}]*[\}]/; var str = item.match(fieldRegx); if (BI.isNotEmptyArray(str)) { var id = str[0].substring(2, item.length - 1); var item = BI.find(self.options.items, function (i, item) { return id === item.value; }); formulaString = formulaString + item.text; } else { formulaString = formulaString + item; } }); return formulaString; }, getValue: function () { return this.options.value; }, setValue: function (v) { this.options.value = v; this.label.setText(this._getTextFromFormulaValue(v)); } }); $.shortcut("bi.formula_combo_trigger", BI.FormulaComboTrigger);/** * Created by GUY on 2016/2/2. * * @class BI.IconCombo * @extend BI.Widget */ BI.IconCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.IconCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-icon-combo", width: 24, height: 24, iconClass: "", el: {}, popup: {}, minWidth: 100, maxWidth: 'auto', maxHeight: 300, direction: "bottom", adjustLength: 3,//调整的距离 adjustXOffset: 0, adjustYOffset: 0, offsetStyle: "left", chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }) }, _init: function () { BI.IconCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(o.el, { type: "bi.icon_combo_trigger", iconClass: o.iconClass, title: o.title, items: o.items, width: o.width, height: o.height, iconWidth: o.iconWidth, iconHeight: o.iconHeight }); this.popup = BI.createWidget(o.popup, { type: "bi.icon_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.IconComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.iconCombo.hideView(); self.fireEvent(BI.IconCombo.EVENT_CHANGE); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.iconCombo = BI.createWidget({ type: "bi.combo", element: this, direction: o.direction, adjustLength: o.adjustLength, adjustXOffset: o.adjustXOffset, adjustYOffset: o.adjustYOffset, offsetStyle: o.offsetStyle, el: this.trigger, popup: { el: this.popup, maxWidth: o.maxWidth, maxHeight: o.maxHeight, minWidth: o.minWidth } }); }, showView: function () { this.iconCombo.showView(); }, hideView: function () { this.iconCombo.hideView(); }, setValue: function (v) { this.iconCombo.setValue(v); }, setEnable: function (v) { BI.IconCombo.superclass.setEnable.apply(this, arguments); this.iconCombo.setEnable(v); }, getValue: function () { return this.iconCombo.getValue(); }, populate: function (items) { this.options.items = items; this.iconCombo.populate(items); } }); BI.IconCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.icon_combo", BI.IconCombo);/** * Created by GUY on 2016/2/2. * * @class BI.IconComboPopup * @extend BI.Pane */ BI.IconComboPopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.IconComboPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi.icon-combo-popup", chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }); }, _init: function () { BI.IconComboPopup.superclass._init.apply(this, arguments); var o = this.options, self = this; this.popup = BI.createWidget({ type: "bi.button_group", items: BI.createItems(o.items, { type: "bi.single_select_icon_text_item", height: 30 }), chooseType: o.chooseType, layouts: [{ type: "bi.vertical" }] }); this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.IconComboPopup.EVENT_CHANGE, val, obj); } }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.popup] }); }, populate: function (items) { BI.IconComboPopup.superclass.populate.apply(this, arguments); items = BI.createItems(items, { type: "bi.single_select_icon_text_item", height: 30 }); this.popup.populate(items); }, getValue: function () { return this.popup.getValue(); }, setValue: function (v) { this.popup.setValue(v); } }); BI.IconComboPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.icon_combo_popup", BI.IconComboPopup);/** * Created by GUY on 2016/2/2. * * @class BI.IconComboTrigger * @extend BI.Widget */ BI.IconComboTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { return BI.extend(BI.IconComboTrigger.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-icon-combo-trigger", el: {}, items: [], iconClass: "", width: 25, height: 25, isShowDown: true }); }, _init: function () { BI.IconComboTrigger.superclass._init.apply(this, arguments); var o = this.options, self = this; this.button = BI.createWidget(o.el, { type: "bi.icon_change_button", cls: "icon-combo-trigger-icon " + o.iconClass, disableSelected: true, width: o.width, height: o.height, iconWidth: o.iconWidth, iconHeight: o.iconHeight }); this.down = BI.createWidget({ type: "bi.icon_button", disableSelected: true, cls: "icon-combo-down-icon trigger-triangle-font", width: 12, height: 8 }); this.down.setVisible(o.isShowDown); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.button, left: 0, right: 0, top: 0, bottom: 0 }, { el: this.down, right: 0, bottom: 0 }] }); if (BI.isKey(o.value)) { this.setValue(o.value); } }, populate: function (items) { var o = this.options; this.options.items = items || []; this.button.setIcon(o.iconClass); this.button.setSelected(false); this.down.setSelected(false); }, setValue: function (v) { BI.IconComboTrigger.superclass.setValue.apply(this, arguments); var o = this.options; var iconClass = ""; v = BI.isArray(v) ? v[0] : v; if (BI.any(this.options.items, function (i, item) { if (v === item.value) { iconClass = item.iconClass; return true; } })) { this.button.setIcon(iconClass); this.button.setSelected(true); this.down.setSelected(true); } else { this.button.setIcon(o.iconClass); this.button.setSelected(false); this.down.setSelected(false); } } }); BI.IconComboTrigger.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.icon_combo_trigger", BI.IconComboTrigger);/** * 单选combo * * @class BI.StaticCombo * @extend BI.Widget */ BI.StaticCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.StaticCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-static-combo", height: 30, text: "", el: {}, items: [], chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }) }, _init: function () { BI.StaticCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(o.el, { type: "bi.text_icon_item", cls: "bi-select-text-trigger pull-down-font", text: o.text, readonly: true, textLgap: 5, height: o.height - 2 }); this.popup = BI.createWidget({ type: "bi.text_value_combo_popup", textAlign: o.textAlign, chooseType: o.chooseType, items: o.items }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () { self.combo.hideView(); self.fireEvent(BI.StaticCombo.EVENT_CHANGE, arguments); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup } }); }, populate: function (items) { this.combo.populate(items); }, setValue: function (v) { this.combo.setValue(v); }, getValue: function () { return this.combo.getValue(); } }); BI.StaticCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.static_combo", BI.StaticCombo);/** * @class BI.TextValueCheckCombo * @extend BI.Widget * combo : text + icon, popup : check + text */ BI.TextValueCheckCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextValueCheckCombo.superclass._defaultConfig.apply(this, arguments), { baseClass: "bi-text-value-check-combo", width: 100, height: 30, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, text: "" }) }, _init: function () { BI.TextValueCheckCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.select_text_trigger", items: o.items, height: o.height, text: o.text }); this.popup = BI.createWidget({ type: "bi.text_value_check_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.textIconCheckCombo.hideView(); self.fireEvent(BI.TextValueCheckCombo.EVENT_CHANGE); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.textIconCheckCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup, maxHeight: 300 } }); }, setTitle: function (title) { this.trigger.setTitle(title); }, setValue: function (v) { this.textIconCheckCombo.setValue(v); }, setEnable: function (v) { BI.TextValueCheckCombo.superclass.setEnable.apply(this, arguments); this.textIconCheckCombo.setEnable(v); }, setWarningTitle: function (title) { this.trigger.setWarningTitle(title); }, getValue: function () { return this.textIconCheckCombo.getValue(); }, populate: function (items) { this.options.items = items; this.textIconCheckCombo.populate(items); } }); BI.TextValueCheckCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.text_value_check_combo", BI.TextValueCheckCombo);/** * @class BI.SmallTextValueCheckCombo * @extend BI.Widget * combo : text + icon, popup : check + text */ BI.SmallTextValueCheckCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SmallTextValueCheckCombo.superclass._defaultConfig.apply(this, arguments), { width: 100, height: 24, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, text: "" }) }, _init: function () { BI.SmallTextValueCheckCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.small_select_text_trigger", items: o.items, height: o.height, text: o.text }); this.popup = BI.createWidget({ type: "bi.text_value_check_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.SmallTextIconCheckCombo.hideView(); self.fireEvent(BI.SmallTextValueCheckCombo.EVENT_CHANGE); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.SmallTextIconCheckCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup, maxHeight: 300 } }); }, setValue: function (v) { this.SmallTextIconCheckCombo.setValue(v); }, setEnable: function (v) { BI.SmallTextValueCheckCombo.superclass.setEnable.apply(this, arguments); this.SmallTextIconCheckCombo.setEnable(v); }, getValue: function () { return this.SmallTextIconCheckCombo.getValue(); }, populate: function (items) { this.options.items = items; this.SmallTextIconCheckCombo.populate(items); } }); BI.SmallTextValueCheckCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.small_text_value_check_combo", BI.SmallTextValueCheckCombo);BI.TextValueCheckComboPopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.TextValueCheckComboPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-icon-popup", chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }); }, _init: function () { BI.TextValueCheckComboPopup.superclass._init.apply(this, arguments); var o = this.options, self = this; this.popup = BI.createWidget({ type: "bi.button_group", items: this._formatItems(o.items), chooseType: o.chooseType, layouts: [{ type: "bi.vertical" }] }); this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.TextValueCheckComboPopup.EVENT_CHANGE, val, obj); } }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.popup] }); }, _formatItems: function (items) { return BI.map(items, function (i, item) { return BI.extend({ type: "bi.icon_text_item", cls: "item-check-font bi-list-item", height: 30 }, item); }); }, populate: function (items) { BI.TextValueCheckComboPopup.superclass.populate.apply(this, arguments); this.popup.populate(this._formatItems(items)); }, getValue: function () { return this.popup.getValue(); }, setValue: function (v) { this.popup.setValue(v); } }); BI.TextValueCheckComboPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.text_value_check_combo_popup", BI.TextValueCheckComboPopup);/** * @class BI.TextValueCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.TextValueCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextValueCombo.superclass._defaultConfig.apply(this, arguments), { baseClass: "bi-text-value-combo", height: 30, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, text: "", el: {} }) }, _init: function () { BI.TextValueCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(o.el, { type: "bi.select_text_trigger", items: o.items, height: o.height, text: o.text }); this.popup = BI.createWidget({ type: "bi.text_value_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.textIconCombo.hideView(); self.fireEvent(BI.TextValueCombo.EVENT_CHANGE, arguments); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.textIconCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup, maxHeight: 300 } }); }, setValue: function (v) { this.textIconCombo.setValue(v); }, setEnable: function (v) { BI.TextValueCombo.superclass.setEnable.apply(this, arguments); this.textIconCombo.setEnable(v); }, getValue: function () { return this.textIconCombo.getValue(); }, populate: function (items) { this.options.items = items; this.textIconCombo.populate(items); } }); BI.TextValueCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.text_value_combo", BI.TextValueCombo);/** * @class BI.SmallTextValueCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.SmallTextValueCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SmallTextValueCombo.superclass._defaultConfig.apply(this, arguments), { width: 100, height: 24, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, el: {}, text: "" }) }, _init: function () { BI.SmallTextValueCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(o.el, { type: "bi.small_select_text_trigger", items: o.items, height: o.height, text: o.text }); this.popup = BI.createWidget({ type: "bi.text_value_combo_popup", chooseType: o.chooseType, items: o.items }); this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.SmallTextValueCombo.hideView(); self.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE); }); this.popup.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.SmallTextValueCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup, maxHeight: 300 } }); }, setValue: function (v) { this.SmallTextValueCombo.setValue(v); }, setEnable: function (v) { BI.SmallTextValueCombo.superclass.setEnable.apply(this, arguments); this.SmallTextValueCombo.setEnable(v); }, getValue: function () { return this.SmallTextValueCombo.getValue(); }, populate: function (items) { this.options.items = items; this.SmallTextValueCombo.populate(items); } }); BI.SmallTextValueCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.small_text_value_combo", BI.SmallTextValueCombo);BI.TextValueComboPopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-icon-popup", chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }); }, _init: function () { BI.TextValueComboPopup.superclass._init.apply(this, arguments); var o = this.options, self = this; this.popup = BI.createWidget({ type: "bi.button_group", items: BI.createItems(o.items, { type: "bi.single_select_item", textAlign: o.textAlign, height: 30 }), chooseType: o.chooseType, layouts: [{ type: "bi.vertical" }] }); this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE, val, obj); } }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.popup] }); }, populate: function (items) { BI.TextValueComboPopup.superclass.populate.apply(this, arguments); items = BI.createItems(items, { type: "bi.single_select_item", height: 30 }); this.popup.populate(items); }, getValue: function () { return this.popup.getValue(); }, setValue: function (v) { this.popup.setValue(v); } }); BI.TextValueComboPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.text_value_combo_popup", BI.TextValueComboPopup);/** * @class BI.TextValueDownListCombo * @extend BI.Widget */ BI.TextValueDownListCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextValueDownListCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-value-down-list-combo", height: 30, text: "" }) }, _init: function () { BI.TextValueDownListCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this._createValueMap(); this.trigger = BI.createWidget({ type: "bi.down_list_select_text_trigger", height: o.height, items: o.items }); this.combo = BI.createWidget({ type: "bi.down_list_combo", element: this, chooseType: BI.Selection.Single, adjustLength: 2, height: o.height, el: this.trigger, items: BI.deepClone(o.items) }); this.combo.on(BI.DownListCombo.EVENT_CHANGE, function () { self.setValue(self.combo.getValue()[0].value); self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE); }); this.combo.on(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, function () { self.setValue(self.combo.getValue()[0].childValue); self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE); }); }, _createValueMap: function () { var self = this; this.valueMap = {}; BI.each(BI.flatten(this.options.items), function (idx, item) { if (BI.has(item, "el")) { BI.each(item.children, function (id, it) { self.valueMap[it.value] = {value: item.el.value, childValue: it.value} }); } else { self.valueMap[item.value] = {value: item.value}; } }); }, setValue: function (v) { v = this.valueMap[v]; this.combo.setValue([v]); this.trigger.setValue(v.childValue || v.value); }, setEnable: function (v) { BI.TextValueDownListCombo.superclass.setEnable.apply(this, arguments); this.combo.setEnable(v); }, getValue: function () { var v = this.combo.getValue()[0]; return [v.childValue || v.value]; }, populate: function (items) { this.options.items = BI.flatten(items); this.combo.populate(items); this._createValueMap(); } }); BI.TextValueDownListCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.text_value_down_list_combo", BI.TextValueDownListCombo);/** * 选择字段trigger, downlist专用 * 显示形式为 父亲值(儿子值) * * @class BI.DownListSelectTextTrigger * @extends BI.Trigger */ BI.DownListSelectTextTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { return BI.extend(BI.DownListSelectTextTrigger.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-down-list-select-text-trigger", height: 24, text: "" }); }, _init: function () { BI.DownListSelectTextTrigger.superclass._init.apply(this, arguments); var o = this.options; this.trigger = BI.createWidget({ type: "bi.select_text_trigger", element: this, height: o.height, items: this._formatItemArray(o.items), text: o.text }); }, _formatItemArray: function(){ var sourceArray = BI.flatten(BI.deepClone(this.options.items)); var targetArray = []; BI.each(sourceArray, function(idx, item){ if(BI.has(item, "el")){ BI.each(item.children, function(id, it){ it.text = item.el.text + "(" + it.text + ")"; }); targetArray = BI.concat(targetArray, item.children); }else{ targetArray.push(item); } }); return targetArray; }, setValue: function (vals) { this.trigger.setValue(vals); }, populate: function (items) { this.trigger.populate(this._formatItemArray(items)); } }); $.shortcut("bi.down_list_select_text_trigger", BI.DownListSelectTextTrigger);/** * 根据内容自适应长度的输入框 * @class BI.AdaptiveEditor * @extends BI.Single */ BI.AdaptiveEditor = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.AdaptiveEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-adapt-editor", hgap: 4, vgap: 2, lgap: 0, rgap: 0, tgap: 0, bgap: 0, validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, mouseOut: false, allowBlank: true, watermark: "", errorText: "", height: 30 }) }, _init: function () { BI.AdaptiveEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.sign_editor", element: this, height: o.height, hgap: o.hgap, vgap: o.vgap, lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, value: o.value, validationChecker: o.validationChecker, quitChecker: o.quitChecker, mouseOut: o.mouseOut, allowBlank: o.allowBlank, watermark: o.watermark, errorText: o.errorText }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_BLUR, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_BLUR); }); this.editor.on(BI.SignEditor.EVENT_CLICK, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_CLICK); }); this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { self._checkEditorLength(); self.fireEvent(BI.AdaptiveEditor.EVENT_CHANGE); }); this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.AdaptiveEditor.EVENT_KEY_DOWN); }); this.editor.on(BI.SignEditor.EVENT_VALID, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_VALID); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_CONFIRM); }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_PAUSE, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_PAUSE); }); this.editor.on(BI.Editor.EVENT_STOP, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_STOP); }); this.editor.on(BI.SignEditor.EVENT_SPACE, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_SPACE); }); this.editor.on(BI.SignEditor.EVENT_ERROR, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_ERROR); }); this.editor.on(BI.SignEditor.EVENT_ENTER, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_ENTER); }); this.editor.on(BI.SignEditor.EVENT_RESTRICT, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_RESTRICT); }); this.editor.on(BI.SignEditor.EVENT_EMPTY, function () { self.fireEvent(BI.AdaptiveEditor.EVENT_EMPTY); }); this._checkEditorLength(); }, _checkEditorLength: function () { var o = this.options; this.element.width(BI.DOM.getTextSizeWidth(this.getValue(), 14) + 2 * o.hgap + o.lgap + o.rgap); }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, isValid: function () { return this.editor.isValid(); }, setErrorText: function (text) { this.editor.setErrorText(text); }, getErrorText: function () { return this.editor.getErrorText(); }, setValue: function (k) { this.editor.setValue(k); this._checkEditorLength(); }, getValue: function () { return this.editor.getValue(); }, getState: function () { return this.editor.getState(); }, setState: function (v) { } }); BI.AdaptiveEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.AdaptiveEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.AdaptiveEditor.EVENT_BLUR = "EVENT_BLUR"; BI.AdaptiveEditor.EVENT_CLICK = "EVENT_CLICK"; BI.AdaptiveEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.AdaptiveEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL"; BI.AdaptiveEditor.EVENT_START = "EVENT_START"; BI.AdaptiveEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.AdaptiveEditor.EVENT_STOP = "EVENT_STOP"; BI.AdaptiveEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.AdaptiveEditor.EVENT_VALID = "EVENT_VALID"; BI.AdaptiveEditor.EVENT_ERROR = "EVENT_ERROR"; BI.AdaptiveEditor.EVENT_ENTER = "EVENT_ENTER"; BI.AdaptiveEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.AdaptiveEditor.EVENT_SPACE = "EVENT_SPACE"; BI.AdaptiveEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.adapt_editor", BI.AdaptiveEditor);/** * 有清楚按钮的文本框 * Created by GUY on 2015/9/29. * @class BI.SmallTextEditor * @extends BI.SearchEditor */ BI.ClearEditor = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.ClearEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-clear-editor", height: 30, errorText: "", watermark: "", validationChecker: BI.emptyFn, quitChecker: BI.emptyFn }); }, _init: function () { BI.ClearEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.editor", height: o.height, watermark: o.watermark, allowBlank: true, errorText: o.errorText, validationChecker: o.validationChecker, quitChecker: o.quitChecker }); this.clear = BI.createWidget({ type: "bi.icon_button", stopEvent: true, cls: "search-close-h-font" }); this.clear.on(BI.IconButton.EVENT_CHANGE, function () { self.setValue(""); self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT); self.fireEvent(BI.ClearEditor.EVENT_CLEAR); }); BI.createWidget({ element: this, type: "bi.htape", items: [ { el: this.editor }, { el: this.clear, width: 25 }] }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.Editor.EVENT_FOCUS, function () { self.fireEvent(BI.ClearEditor.EVENT_FOCUS); }); this.editor.on(BI.Editor.EVENT_BLUR, function () { self.fireEvent(BI.ClearEditor.EVENT_BLUR); }); this.editor.on(BI.Editor.EVENT_CLICK, function () { self.fireEvent(BI.ClearEditor.EVENT_CLICK); }); this.editor.on(BI.Editor.EVENT_CHANGE, function () { self._checkClear(); self.fireEvent(BI.ClearEditor.EVENT_CHANGE); }); this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.ClearEditor.EVENT_KEY_DOWN, v); }); this.editor.on(BI.Editor.EVENT_SPACE, function () { self.fireEvent(BI.ClearEditor.EVENT_SPACE) }); this.editor.on(BI.Editor.EVENT_BACKSPACE, function () { self.fireEvent(BI.ClearEditor.EVENT_BACKSPACE) }); this.editor.on(BI.Editor.EVENT_VALID, function () { self.fireEvent(BI.ClearEditor.EVENT_VALID) }); this.editor.on(BI.Editor.EVENT_ERROR, function () { self.fireEvent(BI.ClearEditor.EVENT_ERROR) }); this.editor.on(BI.Editor.EVENT_ENTER, function () { self.fireEvent(BI.ClearEditor.EVENT_ENTER); }); this.editor.on(BI.Editor.EVENT_RESTRICT, function () { self.fireEvent(BI.ClearEditor.EVENT_RESTRICT) }); this.editor.on(BI.Editor.EVENT_EMPTY, function () { self._checkClear(); self.fireEvent(BI.ClearEditor.EVENT_EMPTY) }); this.editor.on(BI.Editor.EVENT_REMOVE, function () { self.fireEvent(BI.ClearEditor.EVENT_REMOVE) }); this.editor.on(BI.Editor.EVENT_CONFIRM, function () { self.fireEvent(BI.ClearEditor.EVENT_CONFIRM) }); this.editor.on(BI.Editor.EVENT_START, function () { self.fireEvent(BI.ClearEditor.EVENT_START); }); this.editor.on(BI.Editor.EVENT_PAUSE, function () { self.fireEvent(BI.ClearEditor.EVENT_PAUSE); }); this.editor.on(BI.Editor.EVENT_STOP, function () { self.fireEvent(BI.ClearEditor.EVENT_STOP); }); this.clear.invisible(); }, _checkClear: function () { if (!this.getValue()) { this.clear.invisible(); } else { this.clear.visible(); } }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, getValue: function () { if (this.isValid()) { var res = this.editor.getValue().match(/[\S]+/g); return BI.isNull(res) ? "" : res[res.length - 1]; } }, setValue: function (v) { this.editor.setValue(v); if (BI.isKey(v)) { this.clear.visible(); } }, isValid: function () { return this.editor.isValid(); } }); BI.ClearEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.ClearEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.ClearEditor.EVENT_BLUR = "EVENT_BLUR"; BI.ClearEditor.EVENT_CLICK = "EVENT_CLICK"; BI.ClearEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.ClearEditor.EVENT_SPACE = "EVENT_SPACE"; BI.ClearEditor.EVENT_BACKSPACE = "EVENT_BACKSPACE"; BI.ClearEditor.EVENT_CLEAR = "EVENT_CLEAR"; BI.ClearEditor.EVENT_START = "EVENT_START"; BI.ClearEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.ClearEditor.EVENT_STOP = "EVENT_STOP"; BI.ClearEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.ClearEditor.EVENT_VALID = "EVENT_VALID"; BI.ClearEditor.EVENT_ERROR = "EVENT_ERROR"; BI.ClearEditor.EVENT_ENTER = "EVENT_ENTER"; BI.ClearEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.ClearEditor.EVENT_REMOVE = "EVENT_REMOVE"; BI.ClearEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.clear_editor", BI.ClearEditor);/** * Created by roy on 15/9/14. */ BI.SearchEditor = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.SearchEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-search-editor", height: 30, errorText: "", watermark: BI.i18nText("BI-Basic_Search"), validationChecker: BI.emptyFn, quitChecker: BI.emptyFn }); }, _init: function () { this.options.height -= 2; BI.SearchEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.editor", height: o.height, watermark: o.watermark, allowBlank: true, errorText: o.errorText, validationChecker: o.validationChecker, quitChecker: o.quitChecker }); this.clear = BI.createWidget({ type: "bi.icon_button", stopEvent: true, cls: "search-close-h-font" }); this.clear.on(BI.IconButton.EVENT_CHANGE, function () { self.setValue(""); self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT); self.fireEvent(BI.SearchEditor.EVENT_CLEAR); }); BI.createWidget({ element: this, type: "bi.htape", items: [ { el: { type: "bi.center_adapt", cls: "search-font", items: [{ el: { type: "bi.icon" } }] }, width: 25 }, { el: self.editor }, { el: this.clear, width: 25 } ] }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.Editor.EVENT_FOCUS, function () { self.fireEvent(BI.SearchEditor.EVENT_FOCUS); }); this.editor.on(BI.Editor.EVENT_BLUR, function () { self.fireEvent(BI.SearchEditor.EVENT_BLUR); }); this.editor.on(BI.Editor.EVENT_CLICK, function () { self.fireEvent(BI.SearchEditor.EVENT_CLICK); }); this.editor.on(BI.Editor.EVENT_CHANGE, function () { self._checkClear(); self.fireEvent(BI.SearchEditor.EVENT_CHANGE); }); this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.SearchEditor.EVENT_KEY_DOWN, v); }); this.editor.on(BI.Editor.EVENT_SPACE, function () { self.fireEvent(BI.SearchEditor.EVENT_SPACE) }); this.editor.on(BI.Editor.EVENT_BACKSPACE, function () { self.fireEvent(BI.SearchEditor.EVENT_BACKSPACE) }); this.editor.on(BI.Editor.EVENT_VALID, function () { self.fireEvent(BI.SearchEditor.EVENT_VALID) }); this.editor.on(BI.Editor.EVENT_ERROR, function () { self.fireEvent(BI.SearchEditor.EVENT_ERROR) }); this.editor.on(BI.Editor.EVENT_ENTER, function () { self.fireEvent(BI.SearchEditor.EVENT_ENTER); }); this.editor.on(BI.Editor.EVENT_RESTRICT, function () { self.fireEvent(BI.SearchEditor.EVENT_RESTRICT) }); this.editor.on(BI.Editor.EVENT_EMPTY, function () { self._checkClear(); self.fireEvent(BI.SearchEditor.EVENT_EMPTY) }); this.editor.on(BI.Editor.EVENT_REMOVE, function () { self.fireEvent(BI.SearchEditor.EVENT_REMOVE) }); this.editor.on(BI.Editor.EVENT_CONFIRM, function () { self.fireEvent(BI.SearchEditor.EVENT_CONFIRM) }); this.editor.on(BI.Editor.EVENT_START, function () { self.fireEvent(BI.SearchEditor.EVENT_START); }); this.editor.on(BI.Editor.EVENT_PAUSE, function () { self.fireEvent(BI.SearchEditor.EVENT_PAUSE); }); this.editor.on(BI.Editor.EVENT_STOP, function () { self.fireEvent(BI.SearchEditor.EVENT_STOP); }); this.clear.invisible(); }, _checkClear: function () { if (!this.getValue()) { this.clear.invisible(); } else { this.clear.visible(); } }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, getValue: function () { if (this.isValid()) { var res = this.editor.getValue().match(/[\S]+/g); return BI.isNull(res) ? "" : res[res.length - 1]; } }, getLastValidValue: function () { return this.editor.getLastValidValue(); }, setValue: function (v) { this.editor.setValue(v); if (BI.isKey(v)) { this.clear.visible(); } }, setValid: function (b) { this.editor.setValid(b); }, isEditing: function () { return this.editor.isEditing(); }, isValid: function () { return this.editor.isValid(); }, setEnable: function (b) { BI.Editor.superclass.setEnable.apply(this, arguments); this.editor && this.editor.setEnable(b); this.clear.setEnabled(b); } }); BI.SearchEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.SearchEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.SearchEditor.EVENT_BLUR = "EVENT_BLUR"; BI.SearchEditor.EVENT_CLICK = "EVENT_CLICK"; BI.SearchEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.SearchEditor.EVENT_SPACE = "EVENT_SPACE"; BI.SearchEditor.EVENT_BACKSPACE = "EVENT_BACKSPACE"; BI.SearchEditor.EVENT_CLEAR = "EVENT_CLEAR"; BI.SearchEditor.EVENT_START = "EVENT_START"; BI.SearchEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.SearchEditor.EVENT_STOP = "EVENT_STOP"; BI.SearchEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.SearchEditor.EVENT_VALID = "EVENT_VALID"; BI.SearchEditor.EVENT_ERROR = "EVENT_ERROR"; BI.SearchEditor.EVENT_ENTER = "EVENT_ENTER"; BI.SearchEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.SearchEditor.EVENT_REMOVE = "EVENT_REMOVE"; BI.SearchEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.search_editor", BI.SearchEditor);/** * 小号搜索框 * Created by GUY on 2015/9/29. * @class BI.SmallSearchEditor * @extends BI.SearchEditor */ BI.SmallSearchEditor = BI.inherit(BI.SearchEditor, { _defaultConfig: function () { var conf = BI.SmallSearchEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-small-search-editor", height: 24 }); }, _init: function () { BI.SmallSearchEditor.superclass._init.apply(this, arguments); } }); $.shortcut("bi.small_search_editor", BI.SmallSearchEditor);/** * sign是新值(初始value值)形式的自适应宽度的输入框 * @class BI.SignInitialEditor * @extends BI.Single */ BI.SignInitialEditor = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.SignInitialEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-sign-initial-editor", hgap: 4, vgap: 2, lgap: 0, rgap: 0, tgap: 0, bgap: 0, validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, mouseOut: false, allowBlank: true, watermark: "", errorText: "", value: "", text: "", height: 30 }) }, _init: function () { BI.SignInitialEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.sign_editor", element: this, height: o.height, hgap: o.hgap, vgap: o.vgap, lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, value: o.value || o.text, validationChecker: o.validationChecker, quitChecker: o.quitChecker, mouseOut: o.mouseOut, allowBlank: o.allowBlank, watermark: o.watermark, errorText: o.errorText }); if(BI.isNotNull(o.value)){ this.setState(o.value); } this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.SignInitialEditor.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_BLUR, function () { self.fireEvent(BI.SignInitialEditor.EVENT_BLUR); }); this.editor.on(BI.SignEditor.EVENT_CLICK, function () { self.fireEvent(BI.SignInitialEditor.EVENT_CLICK); }); this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { self.fireEvent(BI.SignInitialEditor.EVENT_CHANGE); }); this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.SignInitialEditor.EVENT_KEY_DOWN); }); this.editor.on(BI.SignEditor.EVENT_VALID, function () { self.fireEvent(BI.SignInitialEditor.EVENT_VALID); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { self.setState(self.editor.getValue()); self.fireEvent(BI.SignInitialEditor.EVENT_CONFIRM); }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.SignInitialEditor.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_PAUSE, function () { self.fireEvent(BI.SignInitialEditor.EVENT_PAUSE); }); this.editor.on(BI.SignEditor.EVENT_STOP, function () { self.fireEvent(BI.SignInitialEditor.EVENT_STOP); }); this.editor.on(BI.SignEditor.EVENT_SPACE, function () { self.fireEvent(BI.SignInitialEditor.EVENT_SPACE); }); this.editor.on(BI.SignEditor.EVENT_ERROR, function () { self.fireEvent(BI.SignInitialEditor.EVENT_ERROR); }); this.editor.on(BI.SignEditor.EVENT_ENTER, function () { self.fireEvent(BI.SignInitialEditor.EVENT_ENTER); }); this.editor.on(BI.SignEditor.EVENT_RESTRICT, function () { self.fireEvent(BI.SignInitialEditor.EVENT_RESTRICT); }); this.editor.on(BI.SignEditor.EVENT_EMPTY, function () { self.fireEvent(BI.SignInitialEditor.EVENT_EMPTY); }); }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, isValid: function () { return this.editor.isValid(); }, setErrorText: function (text) { this.editor.setErrorText(text); }, getErrorText: function () { return this.editor.getErrorText(); }, setValue: function (v) { this.editor.setValue(v.value); this.setState(v.value); }, getValue: function () { return { value: this.editor.getValue(), text: this.options.text } }, getState: function () { return this.editor.getState(); }, setState: function (v) { var o = this.options; v = (BI.isEmpty(v) || v == o.text) ? o.text : v + "(" + o.text + ")"; this.editor.setState(v); } }); BI.SignInitialEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.SignInitialEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.SignInitialEditor.EVENT_BLUR = "EVENT_BLUR"; BI.SignInitialEditor.EVENT_CLICK = "EVENT_CLICK"; BI.SignInitialEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.SignInitialEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL"; BI.SignInitialEditor.EVENT_START = "EVENT_START"; BI.SignInitialEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.SignInitialEditor.EVENT_STOP = "EVENT_STOP"; BI.SignInitialEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.SignInitialEditor.EVENT_VALID = "EVENT_VALID"; BI.SignInitialEditor.EVENT_ERROR = "EVENT_ERROR"; BI.SignInitialEditor.EVENT_ENTER = "EVENT_ENTER"; BI.SignInitialEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.SignInitialEditor.EVENT_SPACE = "EVENT_SPACE"; BI.SignInitialEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.sign_initial_editor", BI.SignInitialEditor);/** * sign标签分两段,可以自定义样式 * @class BI.SignStyleEditor * @extends BI.Single */ BI.SignStyleEditor = BI.inherit(BI.Single, { constants: { tipTextGap: 4 }, _defaultConfig: function () { var conf = BI.SignStyleEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-sign-style-editor", text: "", hgap: 4, vgap: 2, lgap: 0, rgap: 0, tgap: 0, bgap: 0, validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, mouseOut: false, allowBlank: false, watermark: "", errorText: "", height: 30 }) }, _init: function () { BI.SignStyleEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.editor", height: o.height, hgap: o.hgap, vgap: o.vgap, lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, value: o.value, validationChecker: o.validationChecker, quitChecker: o.quitChecker, mouseOut: o.mouseOut, allowBlank: o.allowBlank, watermark: o.watermark, errorText: o.errorText }); this.text = BI.createWidget({ type: "bi.text_button", cls: "sign-style-editor-text", textAlign: "left", height: o.height, hgap: 4, handler: function () { self._showInput(); self.editor.focus(); self.editor.selectAll(); } }); this.tipText = BI.createWidget({ type: "bi.text_button", cls: "sign-style-editor-tip", textAlign: "right", rgap: 4, height: o.height, text: o.text, handler: function () { self._showInput(); self.editor.focus(); self.editor.selectAll(); } }); this.text.on(BI.TextButton.EVENT_CHANGE, function () { BI.nextTick(function () { self.fireEvent(BI.SignStyleEditor.EVENT_CLICK_LABEL) }); }); this.tipText.on(BI.TextButton.EVENT_CHANGE, function () { BI.nextTick(function () { self.fireEvent(BI.SignStyleEditor.EVENT_CLICK_LABEL) }); }); this.wrap = BI.createWidget({ type: "bi.htape", element: this, items: [this.text, this.tipText] }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.Editor.EVENT_FOCUS, function () { self.fireEvent(BI.SignStyleEditor.EVENT_FOCUS); }); this.editor.on(BI.Editor.EVENT_BLUR, function () { self.fireEvent(BI.SignStyleEditor.EVENT_BLUR); }); this.editor.on(BI.Editor.EVENT_CLICK, function () { self.fireEvent(BI.SignStyleEditor.EVENT_CLICK); }); this.editor.on(BI.Editor.EVENT_CHANGE, function () { self.fireEvent(BI.SignStyleEditor.EVENT_CHANGE); }); this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.SignStyleEditor.EVENT_KEY_DOWN); }); this.editor.on(BI.Editor.EVENT_VALID, function () { self.fireEvent(BI.SignStyleEditor.EVENT_VALID); }); this.editor.on(BI.Editor.EVENT_CONFIRM, function () { self._showHint(); self._checkText(); self._resizeLayout(); self.fireEvent(BI.SignStyleEditor.EVENT_CONFIRM); }); this.editor.on(BI.Editor.EVENT_START, function () { self.fireEvent(BI.SignStyleEditor.EVENT_START); }); this.editor.on(BI.Editor.EVENT_PAUSE, function () { self.fireEvent(BI.SignStyleEditor.EVENT_PAUSE); }); this.editor.on(BI.Editor.EVENT_STOP, function () { self.fireEvent(BI.SignStyleEditor.EVENT_STOP); }); this.editor.on(BI.Editor.EVENT_SPACE, function () { self.fireEvent(BI.SignStyleEditor.EVENT_SPACE); }); this.editor.on(BI.Editor.EVENT_ERROR, function () { self.fireEvent(BI.SignStyleEditor.EVENT_ERROR); }); this.editor.on(BI.Editor.EVENT_ENTER, function () { self.fireEvent(BI.SignStyleEditor.EVENT_ENTER); }); this.editor.on(BI.Editor.EVENT_RESTRICT, function () { self.fireEvent(BI.SignStyleEditor.EVENT_RESTRICT); }); this.editor.on(BI.Editor.EVENT_EMPTY, function () { self.fireEvent(BI.SignStyleEditor.EVENT_EMPTY); }); BI.createWidget({ type: "bi.vertical", scrolly: false, element: this, items: [this.editor] }); this._showHint(); this._checkText(); BI.nextTick(function () { var tipTextSize = self.text.element.getStyle("font-size"); self.tipTextSize = tipTextSize.substring(0, tipTextSize.length - 2); self._resizeLayout(); }); }, _checkText: function () { var o = this.options; if (this.editor.getValue() === "") { this.text.setValue(o.watermark || ""); this.text.element.addClass("bi-water-mark"); } else { this.text.setValue(this.editor.getValue()); this.tipText.setValue("(" + o.text + ")"); this.text.element.removeClass("bi-water-mark"); } this.setTitle(this.text.getValue() + this.tipText.getValue()); }, _showInput: function () { this.editor.setVisible(true); this.text.setVisible(false); this.tipText.setVisible(false); }, _showHint: function () { this.editor.setVisible(false); this.text.setVisible(true); this.tipText.setVisible(true); }, _resizeLayout: function () { this.wrap.attr("items")[0].width = BI.DOM.getTextSizeWidth(this.text.getValue(), this.tipTextSize) + 2 * this.constants.tipTextGap; this.wrap.resize(); }, focus: function () { this._showInput(); this.editor.focus(); }, blur: function () { this.editor.blur(); this._showHint(); this._checkText(); }, isValid: function () { return this.editor.isValid(); }, setErrorText: function (text) { this.editor.setErrorText(text); }, getErrorText: function () { return this.editor.getErrorText(); }, setValue: function (k) { BI.SignStyleEditor.superclass.setValue.apply(this, arguments); this.editor.setValue(k); this._checkText(); this._resizeLayout(); }, getValue: function () { return this.editor.getValue(); }, getState: function () { return this.options.text; }, setState: function (v) { var o = this.options; o.text = v; this._showHint(); this.tipText.setValue("(" + v + ")"); this._checkText(); } }); BI.SignStyleEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.SignStyleEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.SignStyleEditor.EVENT_BLUR = "EVENT_BLUR"; BI.SignStyleEditor.EVENT_CLICK = "EVENT_CLICK"; BI.SignStyleEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.SignStyleEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL"; BI.SignStyleEditor.EVENT_START = "EVENT_START"; BI.SignStyleEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.SignStyleEditor.EVENT_STOP = "EVENT_STOP"; BI.SignStyleEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.SignStyleEditor.EVENT_VALID = "EVENT_VALID"; BI.SignStyleEditor.EVENT_ERROR = "EVENT_ERROR"; BI.SignStyleEditor.EVENT_ENTER = "EVENT_ENTER"; BI.SignStyleEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.SignStyleEditor.EVENT_SPACE = "EVENT_SPACE"; BI.SignStyleEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.sign_style_editor", BI.SignStyleEditor);/** * guy * @class BI.TextEditor * @extends BI.Single */ BI.TextEditor = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.TextEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-text-editor", hgap: 4, vgap: 2, lgap: 0, rgap: 0, tgap: 0, bgap: 0, validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, mouseOut: false, allowBlank: false, watermark: "", errorText: "", height: 30 }) }, _init: function () { BI.TextEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; if (BI.isNumber(o.height)) { this.element.css({height: o.height - 2}); } if (BI.isNumber(o.width)) { this.element.css({width: o.width - 2}); } this.editor = BI.createWidget({ type: "bi.editor", height: o.height - 2, hgap: o.hgap, vgap: o.vgap, lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, value: o.value, validationChecker: o.validationChecker, quitChecker: o.quitChecker, mouseOut: o.mouseOut, allowBlank: o.allowBlank, watermark: o.watermark, errorText: o.errorText }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.Editor.EVENT_FOCUS, function () { self.fireEvent(BI.TextEditor.EVENT_FOCUS); }); this.editor.on(BI.Editor.EVENT_BLUR, function () { self.fireEvent(BI.TextEditor.EVENT_BLUR); }); this.editor.on(BI.Editor.EVENT_CLICK, function () { self.fireEvent(BI.TextEditor.EVENT_CLICK); }); this.editor.on(BI.Editor.EVENT_CHANGE, function () { self.fireEvent(BI.TextEditor.EVENT_CHANGE); }); this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) { self.fireEvent(BI.TextEditor.EVENT_KEY_DOWN); }); this.editor.on(BI.Editor.EVENT_SPACE, function (v) { self.fireEvent(BI.TextEditor.EVENT_SPACE); }); this.editor.on(BI.Editor.EVENT_BACKSPACE, function (v) { self.fireEvent(BI.TextEditor.EVENT_BACKSPACE); }); this.editor.on(BI.Editor.EVENT_VALID, function () { self.fireEvent(BI.TextEditor.EVENT_VALID); }); this.editor.on(BI.Editor.EVENT_CONFIRM, function () { self.fireEvent(BI.TextEditor.EVENT_CONFIRM); }); this.editor.on(BI.Editor.EVENT_REMOVE, function (v) { self.fireEvent(BI.TextEditor.EVENT_REMOVE); }); this.editor.on(BI.Editor.EVENT_START, function () { self.fireEvent(BI.TextEditor.EVENT_START); }); this.editor.on(BI.Editor.EVENT_PAUSE, function () { self.fireEvent(BI.TextEditor.EVENT_PAUSE); }); this.editor.on(BI.Editor.EVENT_STOP, function () { self.fireEvent(BI.TextEditor.EVENT_STOP); }); this.editor.on(BI.Editor.EVENT_ERROR, function () { self.fireEvent(BI.TextEditor.EVENT_ERROR); }); this.editor.on(BI.Editor.EVENT_ENTER, function () { self.fireEvent(BI.TextEditor.EVENT_ENTER); }); this.editor.on(BI.Editor.EVENT_RESTRICT, function () { self.fireEvent(BI.TextEditor.EVENT_RESTRICT); }); this.editor.on(BI.Editor.EVENT_EMPTY, function () { self.fireEvent(BI.TextEditor.EVENT_EMPTY); }); BI.createWidget({ type: "bi.vertical", scrolly: false, element: this, items: [this.editor] }); }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, setErrorText: function (text) { this.editor.setErrorText(text); }, getErrorText: function () { return this.editor.getErrorText(); }, isValid: function () { return this.editor.isValid(); }, setValue: function (v) { this.editor.setValue(v); }, getValue: function () { return this.editor.getValue(); }, setEnable: function (b) { BI.Editor.superclass.setEnable.apply(this, arguments); this.editor && this.editor.setEnable(b); } }); BI.TextEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.TextEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.TextEditor.EVENT_BLUR = "EVENT_BLUR"; BI.TextEditor.EVENT_CLICK = "EVENT_CLICK"; BI.TextEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.TextEditor.EVENT_SPACE = "EVENT_SPACE"; BI.TextEditor.EVENT_BACKSPACE = "EVENT_BACKSPACE"; BI.TextEditor.EVENT_START = "EVENT_START"; BI.TextEditor.EVENT_PAUSE = "EVENT_PAUSE"; BI.TextEditor.EVENT_STOP = "EVENT_STOP"; BI.TextEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.TextEditor.EVENT_VALID = "EVENT_VALID"; BI.TextEditor.EVENT_ERROR = "EVENT_ERROR"; BI.TextEditor.EVENT_ENTER = "EVENT_ENTER"; BI.TextEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.TextEditor.EVENT_REMOVE = "EVENT_REMOVE"; BI.TextEditor.EVENT_EMPTY = "EVENT_EMPTY"; $.shortcut("bi.text_editor", BI.TextEditor);/** * 小号搜索框 * Created by GUY on 2015/9/29. * @class BI.SmallTextEditor * @extends BI.SearchEditor */ BI.SmallTextEditor = BI.inherit(BI.TextEditor, { _defaultConfig: function () { var conf = BI.SmallTextEditor.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-small-text-editor", height: 25 }); }, _init: function () { BI.SmallTextEditor.superclass._init.apply(this, arguments); } }); $.shortcut("bi.small_text_editor", BI.SmallTextEditor);/** * @class BI.LoadingCancelMask * @extend BI.Widget * 带有取消按钮的正在加载mask */ BI.LoadingCancelMask = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.LoadingCancelMask.superclass._defaultConfig.apply(this, arguments), {}) }, _init: function () { BI.LoadingCancelMask.superclass._init.apply(this, arguments); var self = this, o = this.options; var cancelButton = BI.createWidget({ type: "bi.button", level: "ignore", width: 100, height: 30, text: BI.i18nText("BI-Basic_Cancel") }); cancelButton.on(BI.Button.EVENT_CHANGE, function () { self.fireEvent(BI.LoadingCancelMask.EVENT_VALUE_CANCEL); self.destroy(); }); var mask = BI.Maskers.create(this.getName(), o.masker); BI.createWidget({ type: "bi.absolute", element: mask, items: [{ el: { type: "bi.layout", cls: "bi-loading-main-background" }, top: 0, left: 0, bottom: 0, right: 0 }, { el: { type: "bi.center_adapt", cls: "bi-loading-mask-content", items: [{ el: { type: "bi.vertical", items: [{ type: "bi.center_adapt", cls: "loading-bar-icon", items: [{ type: "bi.icon", width: 208, height: 30 }] }, { type: "bi.label", cls: "loading-bar-label", text: o.text, height: 30 }, { type: "bi.center_adapt", items: [cancelButton] }], vgap: 10 } }] }, top: 0, left: 0, bottom: 0, right: 0 }] }); BI.Maskers.show(this.getName()); BI.nextTick(function () { BI.Maskers.show(self.getName()); }); }, destroy: function () { BI.Maskers.remove(this.getName()); } }); BI.LoadingCancelMask.EVENT_VALUE_CANCEL = "EVENT_VALUE_CANCEL"; $.shortcut("bi.loading_cancel_mask", BI.LoadingCancelMask);/** * @class BI.LoadingBackground * @extend BI.Widget * 正在加载mask层 */ BI.LoadingBackground = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.LoadingBackground.superclass._defaultConfig.apply(this, arguments), { baseCls: "", backgroundCls: "loading-background-e50" }) }, _init: function () { BI.LoadingBackground.superclass._init.apply(this, arguments); var self = this, o = this.options; var mask = BI.Maskers.create(this.getName(), o.masker, {offset: o.offset, container: o.container}); BI.createWidget({ type: "bi.center_adapt", element: mask, cls: "bi-loading-mask " + o.backgroundCls }); BI.Maskers.show(this.getName()); BI.nextTick(function () { BI.Maskers.show(self.getName()); }); }, destroy: function () { BI.Maskers.remove(this.getName()); } }); $.shortcut("bi.loading_background", BI.LoadingBackground);/** * @class BI.LoadingMask * @extend BI.Widget * 正在加载mask层 */ BI.LoadingMask = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.LoadingMask.superclass._defaultConfig.apply(this, arguments), { baseCls: "" }); }, _init: function () { BI.LoadingMask.superclass._init.apply(this, arguments); var self = this, o = this.options; var mask = BI.Maskers.create(this.getName(), o.masker, {offset: o.offset, container: o.container}); BI.createWidget({ type: "bi.absolute", element: mask, items: [{ el: { type: "bi.layout", cls: "bi-loading-main-background" }, top: 0, left: 0, bottom: 0, right: 0 }, { el: { type: "bi.center_adapt", cls: "bi-loading-mask-content", items: [{ type: "bi.vertical", items: [{ type: "bi.center_adapt", cls: "loading-bar-icon", items: [{ type: "bi.icon", width: 208, height: 30 }] }, { type: "bi.label", cls: "loading-bar-label", text: o.text, height: 30 }] }] }, top: 0, left: 0, bottom: 0, right: 0 }] }); BI.Maskers.show(this.getName()); BI.nextTick(function () { BI.Maskers.show(self.getName()); }); }, destroy: function () { BI.Maskers.remove(this.getName()); } }); $.shortcut("bi.loading_mask", BI.LoadingMask);/** * 一个button选中的时候下面有条线 * * Created by GUY on 2015/9/30. * @class BI.LineSegmentButton * @extends BI.BasicButton */ BI.LineSegmentButton = BI.inherit(BI.BasicButton, { _defaultConfig: function() { var conf = BI.LineSegmentButton.superclass._defaultConfig.apply(this, arguments); return BI.extend( conf, { baseCls : (conf.baseCls ||"")+' bi-line-segment-button bi-list-item-effect', once: true, readonly: true, hgap: 10, height: 25 }) }, _init:function() { BI.LineSegmentButton.superclass._init.apply(this, arguments); var o = this.options, self = this; this.text = BI.createWidget({ type: "bi.label", element: this, text: o.text, height: o.height, value: o.value, hgap: o.hgap }); this.line = BI.createWidget({ type: "bi.layout", cls: "line-segment-button-line", height: 3 }) BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.line, left: 0, right: 0, bottom: 0 }] }) }, setSelected: function(v){ BI.LineSegmentButton.superclass.setSelected.apply(this, arguments); }, setText : function(text) { BI.LineSegmentButton.superclass.setText.apply(this, arguments); this.text.setText(text); }, destroy : function() { BI.LineSegmentButton.superclass.destroy.apply(this, arguments); } }); $.shortcut('bi.line_segment_button', BI.LineSegmentButton);/** * 另一套风格的单选按钮组 * * Created by GUY on 2015/9/30. * @class BI.LineSegment * @extends BI.Widget */ BI.LineSegment = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.LineSegment.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-line-segment", items: [], height: 30 }); }, _init: function () { BI.LineSegment.superclass._init.apply(this, arguments); var self = this, o = this.options; if (BI.isNumber(o.height)) { this.element.css({height: o.height - 1, lineHeight: (o.height - 1) + 'px'}); } this.buttonGroup = BI.createWidget({ element: this, type: "bi.button_group", items: BI.createItems(o.items, { type: "bi.line_segment_button", height: o.height - 1 }), layout: [ { type: "bi.center" } ] }); this.buttonGroup.on(BI.Controller.EVENT_CHANGE, function(){ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments) }); this.buttonGroup.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.fireEvent(BI.LineSegment.EVENT_CHANGE) }) }, setValue: function (v) { this.buttonGroup.setValue(v); }, setEnabledValue: function (v) { this.buttonGroup.setEnabledValue(v); }, setEnable: function (v) { BI.LineSegment.superclass.setEnable.apply(this, arguments); this.buttonGroup.setEnable(v) }, getValue: function () { return this.buttonGroup.getValue(); } }); BI.LineSegment.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.line_segment', BI.LineSegment);/** * 拖拽字段的helper * Created by roy on 15/10/13. */ BI.Helper = BI.inherit(BI.Tip, { _defaultConfig: function () { return BI.extend(BI.Helper.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-helper", text: "", value: "" }) }, _init: function () { BI.Helper.superclass._init.apply(this, arguments); this.populate(); }, modifyContent: function(widget) { this.empty(); BI.createWidget({ type: "bi.left", element: this, cls: "dragging-modify", items: [widget], lgap: 15 }); }, populate: function () { var o = this.options; this.element.data({helperWidget: this}); this.empty(); BI.createWidget({ element: this, type: "bi.label", textAlign: "center", textHeight: 20, hgap: 5, text: o.text, value: o.value }); this.element.removeClass("dragging-modify"); } }); $.shortcut("bi.helper", BI.Helper);/** * guy * 复选导航条 * Created by GUY on 2015/12/24. * @class BI.ProgressBarBar * @extends BI.BasicButton */ BI.ProgressBarBar = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.ProgressBarBar.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-progress-bar-bar", height: 24 }) }, _init: function () { BI.ProgressBarBar.superclass._init.apply(this, arguments); var self = this, o = this.options; this.svg = BI.createWidget({ type: "bi.svg", width: 6, height: 6 }); this.svg.circle(3, 3, 3).attr({fill: "#ffffff", "stroke": ""}); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.svg, right: 10, top: 9 }] }); this.processor = BI.createWidget({ type: "bi.progress_bar_processor", width: "0%", height: o.height }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.processor] }); }, setValue: function (process) { this.processor.setValue(process); } }); $.shortcut("bi.progress_bar_bar", BI.ProgressBarBar);/** * guy * 复选导航条 * Created by GUY on 2015/12/24. * @class BI.ProgressBar * @extends BI.BasicButton */ BI.ProgressBar = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.ProgressBar.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-progress-bar", height: 24 }) }, _init: function () { BI.ProgressBar.superclass._init.apply(this, arguments); var self = this, o = this.options; this.bar = BI.createWidget({ type: "bi.progress_bar_bar", height: o.height }); this.label = BI.createWidget({ type: "bi.label", cls: "progress-bar-label", width: 50, height: o.height, value: "0%" }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: this.bar }, { el: this.label, width: 50 }] }) }, setValue: function (process) { if (process >= 100) { process = 100; this.label.element.addClass("success"); } else { this.label.element.removeClass("success"); } this.label.setValue(process + "%"); this.bar.setValue(process); } }); $.shortcut("bi.progress_bar", BI.ProgressBar);/** * guy * 复选导航条 * Created by GUY on 2015/12/24. * @class BI.ProgressBarProcessor * @extends BI.BasicButton */ BI.ProgressBarProcessor = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.ProgressBarProcessor.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-progress-bar-processor", height: 24 }) }, _init: function () { BI.ProgressBarProcessor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.svg = BI.createWidget({ type: "bi.svg", width: 12, height: 12 }); this.svg.circle(6, 6, 6).attr({fill: "#eaeaea", "stroke": ""}); this.dot = this.svg.circle(6, 6, 3).attr({fill: "#ffffff", "stroke": ""}).hide(); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.svg, right: 7, top: 6 }] }); }, setValue: function (process) { if (process >= 100) { process = 100; this.dot.show(); this.element.addClass("success"); } else { this.dot.hide(); this.element.removeClass("success"); } this.element.width(process + "%"); } }); BI.ProgressBarProcessor.EVENT_CHANGE = "ProgressBarProcessor.EVENT_CHANGE"; $.shortcut("bi.progress_bar_processor", BI.ProgressBarProcessor);/** * 表关联树 * * Created by GUY on 2015/12/15. * @class BI.BranchRelation * @extends BI.Widget */ BI.BranchRelation = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.BranchRelation.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-branch-relation-tree", items: [], centerOffset: 0,//重心偏移量 direction: BI.Direction.Bottom, align: BI.VerticalAlign.Top }) }, _init: function () { BI.BranchRelation.superclass._init.apply(this, arguments); this.populate(this.options.items); }, //树分层 _stratification: function () { var levels = []; this.tree.recursion(function (node, route) { //node.isRoot = route.length <= 1; node.leaf = node.isLeaf(); if (!levels[route.length - 1]) { levels[route.length - 1] = []; } levels[route.length - 1].push(node); }); return levels; }, //计算所有节点的叶子结点个数 _calculateLeaves: function () { var count = 0; function track(node) { var c = 0; if (node.isLeaf()) { return 1; } BI.each(node.getChildren(), function (i, child) { c += track(child); }); node.set("leaves", c); return c; } count = track(this.tree.getRoot()); return count; }, //树平移 _translate: function (levels) { var adjust = []; var maxLevel = levels.length; BI.each(levels, function (i, nodes) { if (!adjust[i]) { adjust[i] = []; } BI.each(nodes, function (j, node) { if (node.isLeaf() && i < maxLevel - 1) { var newNode = new BI.Node(BI.UUID()); //newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot; newNode.isNew = true; //把node向下一层移 var tar = 0; if (j > 0) { var c = nodes[j - 1].getLastChild(); tar = levels[i + 1].indexOf(c) + 1; } levels[i + 1].splice(tar, 0, node); //新增一个临时树节点 var index = node.parent.getChildIndex(node.id); node.parent.removeChildByIndex(index); node.parent.addChild(newNode, index); newNode.addChild(node); adjust[i].push(newNode); nodes[j] = newNode; } else { adjust[i].push(node); } }) }); return adjust; }, //树补白 _fill: function (levels) { var adjust = []; var maxLevel = levels.length; BI.each(levels, function (i, nodes) { if (!adjust[i]) { adjust[i] = []; } BI.each(nodes, function (j, node) { if (node.isLeaf() && i < maxLevel - 1) { var newNode = new BI.Node(BI.UUID()); newNode.leaf = true; newNode.width = node.width; newNode.height = node.height; newNode.isNew = true; //把node向下一层移 var tar = 0; if (j > 0) { var c = nodes[j - 1].getLastChild(); tar = levels[i + 1].indexOf(c) + 1; } levels[i + 1].splice(tar, 0, newNode); //新增一个临时树节点 node.addChild(newNode); } adjust[i].push(node); }) }); return adjust; }, //树调整 _adjust: function (adjust) { while (true) { var isAllNeedAjust = false; BI.backEach(adjust, function (i, nodes) { BI.each(nodes, function (j, node) { if (!node.isNew) { var needAdjust = true; BI.any(node.getChildren(), function (k, n) { if (!n.isNew) { needAdjust = false; return true; } }); if (!node.isLeaf() && needAdjust === true) { var allChilds = []; BI.each(node.getChildren(), function (k, n) { allChilds = allChilds.concat(n.getChildren()); }); node.removeAllChilds(); BI.each(allChilds, function (k, c) { node.addChild(c); }); var newNode = new BI.Node(BI.UUID()); //newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot; newNode.isNew = true; var index = node.parent.getChildIndex(node.id); node.parent.removeChildByIndex(index); node.parent.addChild(newNode, index); newNode.addChild(node); isAllNeedAjust = true; } } }) }); if (isAllNeedAjust === false) { break; } else {//树重构 adjust = this._stratification(); } } return adjust; }, _calculateWidth: function () { var o = this.options; var width = 0; function track1(node) { var w = 0; if (node.isLeaf()) { return node.width; } BI.each(node.getChildren(), function (i, child) { w += track1(child); }); return w; } function track2(node) { var w = 0; if (node.isLeaf()) { return node.height; } BI.each(node.getChildren(), function (i, child) { w += track2(child); }); return w; } if (this._isVertical()) { width = track1(this.tree.getRoot()); } else { width = track2(this.tree.getRoot()); } return width; }, _isVertical: function () { var o = this.options; return o.direction === BI.Direction.Top || o.direction === BI.Direction.Bottom; }, _calculateHeight: function () { var o = this.options; var height = 0; function track1(node) { var h = 0; BI.each(node.getChildren(), function (i, child) { h = Math.max(h, track1(child)); }); return h + (node.height || 0); } function track2(node) { var h = 0; BI.each(node.getChildren(), function (i, child) { h = Math.max(h, track2(child)); }); return h + (node.width || 0); } if (this._isVertical()) { height = track1(this.tree.getRoot()); } else { height = track2(this.tree.getRoot()); } return height; }, _calculateXY: function (levels) { var o = this.options; var width = this._calculateWidth(); var height = this._calculateHeight(); var levelCount = levels.length; var allLeavesCount = this._calculateLeaves(); //计算坐标 var xy = {}; var levelHeight = height / levelCount; BI.each(levels, function (i, nodes) { //计算权重 var weights = []; BI.each(nodes, function (j, node) { weights[j] = (node.get("leaves") || 1) / allLeavesCount; }); BI.each(nodes, function (j, node) { //求前j个元素的权重 var weight = BI.sum(weights.slice(0, j)); //求坐标 var x = weight * width + weights[j] * width / 2; var y = i * levelHeight + levelHeight / 2; xy[node.id] = {x: x, y: y}; }) }); return xy; }, _stroke: function (levels, xy) { var height = this._calculateHeight(); var levelCount = levels.length; var levelHeight = height / levelCount; var self = this, o = this.options; switch (o.direction) { case BI.Direction.Top: BI.each(levels, function (i, nodes) { BI.each(nodes, function (j, node) { if (node.getChildrenLength() > 0 && !node.leaf) { var path = ""; var start = xy[node.id]; var split = start.y + levelHeight / 2; path += "M" + start.x + "," + (start.y + o.centerOffset) + "L" + start.x + "," + split; var end = []; BI.each(node.getChildren(), function (t, c) { var e = end[t] = xy[c.id]; path += "M" + e.x + "," + (e.y + o.centerOffset) + "L" + e.x + "," + split; }); if (end.length > 0) { path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split; } self.svg.path(path).attr("stroke", "gray"); } }) }); break; case BI.Direction.Bottom: BI.each(levels, function (i, nodes) { BI.each(nodes, function (j, node) { if (node.getChildrenLength() > 0 && !node.leaf) { var path = ""; var start = xy[node.id]; var split = start.y - levelHeight / 2; path += "M" + start.x + "," + (start.y - o.centerOffset) + "L" + start.x + "," + split; var end = []; BI.each(node.getChildren(), function (t, c) { var e = end[t] = xy[c.id]; path += "M" + e.x + "," + (e.y - o.centerOffset) + "L" + e.x + "," + split; }); if (end.length > 0) { path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split; } self.svg.path(path).attr("stroke", "gray"); } }) }); break; case BI.Direction.Left: BI.each(levels, function (i, nodes) { BI.each(nodes, function (j, node) { if (node.getChildrenLength() > 0 && !node.leaf) { var path = ""; var start = xy[node.id]; var split = start.y + levelHeight / 2; path += "M" + (start.y + o.centerOffset) + "," + start.x + "L" + split + "," + start.x; var end = []; BI.each(node.getChildren(), function (t, c) { var e = end[t] = xy[c.id]; path += "M" + (e.y + o.centerOffset) + "," + e.x + "L" + split + "," + e.x; }); if (end.length > 0) { path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x; } self.svg.path(path).attr("stroke", "gray"); } }) }); break; case BI.Direction.Right: BI.each(levels, function (i, nodes) { BI.each(nodes, function (j, node) { if (node.getChildrenLength() > 0 && !node.leaf) { var path = ""; var start = xy[node.id]; var split = start.y - levelHeight / 2; path += "M" + (start.y - o.centerOffset) + "," + start.x + "L" + split + "," + start.x; var end = []; BI.each(node.getChildren(), function (t, c) { var e = end[t] = xy[c.id]; path += "M" + (e.y - o.centerOffset) + "," + e.x + "L" + split + "," + e.x; }); if (end.length > 0) { path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x; } self.svg.path(path).attr("stroke", "gray"); } }) }); break; } }, _createBranches: function (levels) { var self = this, o = this.options; if (o.direction === BI.Direction.Bottom || o.direction === BI.Direction.Right) { levels = levels.reverse(); } var xy = this._calculateXY(levels); //画图 this._stroke(levels, xy); }, _isNeedAdjust: function () { var o = this.options; return o.direction === BI.Direction.Top && o.align === BI.VerticalAlign.Bottom || o.direction === BI.Direction.Bottom && o.align === BI.VerticalAlign.Top || o.direction === BI.Direction.Left && o.align === BI.HorizontalAlign.Right || o.direction === BI.Direction.Right && o.align === BI.HorizontalAlign.Left }, setValue: function (value) { }, getValue: function () { }, _transformToTreeFormat: function (sNodes) { var i, l; if (!sNodes) { return []; } if (BI.isArray(sNodes)) { var r = []; var tmpMap = []; for (i = 0, l = sNodes.length; i < l; i++) { tmpMap[sNodes[i].id] = sNodes[i]; } for (i = 0, l = sNodes.length; i < l; i++) { if (tmpMap[sNodes[i].pId] && sNodes[i].id != sNodes[i].pId) { if (!tmpMap[sNodes[i].pId].children) { tmpMap[sNodes[i].pId].children = []; } tmpMap[sNodes[i].pId].children.push(sNodes[i]); } else { r.push(sNodes[i]); } } return r; } else { return [sNodes]; } }, populate: function (items) { var self = this, o = this.options; o.items = items || []; this.empty(); items = this._transformToTreeFormat(o.items); this.tree = new BI.Tree(); this.tree.initTree(items); this.svg = BI.createWidget({ type: "bi.svg" }); //树分层 var levels = this._stratification(); if (this._isNeedAdjust()) { //树平移 var adjust = this._translate(levels); //树调整 adjust = this._adjust(adjust); this._createBranches(adjust); } else { var adjust = this._fill(levels); this._createBranches(adjust); } var container = BI.createWidget({ type: "bi.layout", width: this._isVertical() ? this._calculateWidth() : this._calculateHeight(), height: this._isVertical() ? this._calculateHeight() : this._calculateWidth() }); BI.createWidget({ type: "bi.absolute", element: container, items: [{ el: this.svg, top: 0, left: 0, right: 0, bottom: 0 }] }); if (this._isVertical()) { items = [{ type: "bi.handstand_branch_tree", expander: { direction: o.direction }, el: { layouts: [{ type: "bi.horizontal_adapt", verticalAlign: o.align }] }, items: items }] } else { items = [{ type: "bi.branch_tree", expander: { direction: o.direction }, el: { layouts: [{ type: "bi.vertical" }, { type: o.align === BI.HorizontalAlign.Left ? "bi.left" : "bi.right" }] }, items: items }] } BI.createWidget({ type: "bi.adaptive", element: container, items: items }); BI.createWidget({ type: "bi.center_adapt", scrollable: true, element: this, items: [container] }); } }); BI.BranchRelation.EVENT_CHANGE = "BranchRelation.EVENT_CHANGE"; $.shortcut("bi.branch_relation", BI.BranchRelation);/** * 自定义选色 * * Created by GUY on 2015/11/17. * @class BI.CustomColorChooser * @extends BI.Widget */ BI.CustomColorChooser = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.CustomColorChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-custom-color-chooser", width: 227, height: 245 }) }, _init: function () { BI.CustomColorChooser.superclass._init.apply(this, arguments); var self = this; this.editor = BI.createWidget({ type: "bi.color_picker_editor", width: 195 }); this.editor.on(BI.ColorPickerEditor.EVENT_CHANGE, function () { self.setValue(this.getValue()); }); this.farbtastic = BI.createWidget({ type: "bi.farbtastic" }); this.farbtastic.on(BI.Farbtastic.EVENT_CHANGE, function () { self.setValue(this.getValue()); }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ type: "bi.absolute", items: [{ el: this.editor, left: 15, top: 10, right: 15 }], height: 30 }, { type: "bi.absolute", items: [{ el: this.farbtastic, left: 15, right: 15, top: 10 }], height: 215 }] }) }, setValue: function (color) { this.editor.setValue(color); this.farbtastic.setValue(color); }, getValue: function () { return this.editor.getValue(); } }); BI.CustomColorChooser.EVENT_CHANGE = "CustomColorChooser.EVENT_CHANGE"; $.shortcut("bi.custom_color_chooser", BI.CustomColorChooser);/** * 选色控件 * * Created by GUY on 2015/11/17. * @class BI.ColorChooser * @extends BI.Widget */ BI.ColorChooser = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ColorChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-color-chooser", el: {} }) }, _init: function () { BI.ColorChooser.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(BI.extend({ type: "bi.color_chooser_trigger", width: o.width, height: o.height }, o.el)); this.colorPicker = BI.createWidget({ type: "bi.color_chooser_popup" }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 1, el: this.trigger, popup: { el: this.colorPicker, stopPropagation: false, minWidth: 202 } }); var fn = function () { var color = self.colorPicker.getValue(); self.trigger.setValue(color); var colors = BI.string2Array(BI.Cache.getItem("colors") || ""); var que = new BI.Queue(8); que.fromArray(colors); que.remove(color); que.unshift(color); BI.Cache.setItem("colors", BI.array2String(que.toArray())); }; this.colorPicker.on(BI.ColorChooserPopup.EVENT_VALUE_CHANGE, function () { fn(); }); this.colorPicker.on(BI.ColorChooserPopup.EVENT_CHANGE, function () { fn(); self.combo.hideView(); }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.colorPicker.setStoreColors(BI.string2Array(BI.Cache.getItem("colors") || "")); }); this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.fireEvent(BI.ColorChooser.EVENT_CHANGE, arguments); }) }, isViewVisible: function () { return this.combo.isViewVisible(); }, setEnable: function (v) { this.combo.setEnable(v) }, setValue: function (color) { this.combo.setValue(color); }, getValue: function () { return this.colorPicker.getValue(); } }); BI.ColorChooser.EVENT_CHANGE = "ColorChooser.EVENT_CHANGE"; $.shortcut("bi.color_chooser", BI.ColorChooser);/** * 选色控件 * * Created by GUY on 2015/11/17. * @class BI.ColorChooserPopup * @extends BI.Widget */ BI.ColorChooserPopup = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ColorChooserPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-color-chooser-popup", height: 145 }) }, _init: function () { BI.ColorChooserPopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.colorEditor = BI.createWidget({ type: "bi.color_picker_editor" }); this.colorEditor.on(BI.ColorPickerEditor.EVENT_CHANGE, function () { self.setValue(this.getValue()); self.fireEvent(BI.ColorChooserPopup.EVENT_VALUE_CHANGE, arguments); }); this.storeColors = BI.createWidget({ type: "bi.color_picker", items: [[{ value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }, { value: "", disabled: true }]], width: 190, height: 25 }); this.storeColors.on(BI.ColorPicker.EVENT_CHANGE, function () { self.setValue(this.getValue()[0]); self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments); }); this.colorPicker = BI.createWidget({ type: "bi.color_picker", width: 190, height: 50 }); this.colorPicker.on(BI.ColorPicker.EVENT_CHANGE, function () { self.setValue(this.getValue()[0]); self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments); }); this.customColorChooser = BI.createWidget({ type: "bi.custom_color_chooser" }); var panel = BI.createWidget({ type: "bi.popup_panel", buttons: [BI.i18nText("BI-Basic_Cancel"), BI.i18nText("BI-Basic_Save")], title: BI.i18nText("BI-Custom_Color"), el: this.customColorChooser, stopPropagation: false, bgap: -1, rgap: 1, lgap: 1, minWidth: 227 }); this.more = BI.createWidget({ type: "bi.combo", direction: "right,top", isNeedAdjustHeight: false, el: { type: "bi.text_item", cls: "color-chooser-popup-more", textAlign: "center", height: 20, text: BI.i18nText("BI-Basic_More") + "..." }, popup: panel }); this.more.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.customColorChooser.setValue(self.getValue()); }); panel.on(BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON, function (index) { switch (index) { case 0: self.more.hideView(); break; case 1: self.setValue(self.customColorChooser.getValue()); self.more.hideView(); self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments); break; } }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: { type: "bi.absolute", cls: "color-chooser-popup-title", items: [{ el: this.colorEditor, left: 0, right: 0, top: 5 }] }, height: 30 }, { el: { type: "bi.absolute", items: [{ el: this.storeColors, left: 5, right: 5, top: 5 }] }, height: 30 }, { el: { type: "bi.absolute", items: [{ el: this.colorPicker, left: 5, right: 5, top: 5 }] }, height: 65 }, { el: this.more, height: 20 }] }) }, setStoreColors: function (colors) { if (BI.isArray(colors)) { var items = BI.map(colors, function (i, color) { return { value: color } }); BI.count(colors.length, 8, function (i) { items.push({ value: "", disabled: true }) }); this.storeColors.populate([items]); } }, setValue: function (color) { this.colorEditor.setValue(color); this.colorPicker.setValue(color); this.storeColors.setValue(color); }, getValue: function () { return this.colorEditor.getValue(); } }); BI.ColorChooserPopup.EVENT_VALUE_CHANGE = "ColorChooserPopup.EVENT_VALUE_CHANGE"; BI.ColorChooserPopup.EVENT_CHANGE = "ColorChooserPopup.EVENT_CHANGE"; $.shortcut("bi.color_chooser_popup", BI.ColorChooserPopup);/** * 选色控件 * * Created by GUY on 2015/11/17. * @class BI.ColorChooserTrigger * @extends BI.Trigger */ BI.ColorChooserTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { var conf = BI.ColorChooserTrigger.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-color-chooser-trigger", height: 30 }) }, _init: function () { BI.ColorChooserTrigger.superclass._init.apply(this, arguments); this.colorContainer = BI.createWidget({ type: "bi.layout" }); var down = BI.createWidget({ type: "bi.icon_button", disableSelected: true, cls: "icon-combo-down-icon trigger-triangle-font", width: 12, height: 8 }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.colorContainer, left: 3, right: 3, top: 3, bottom: 3 }, { el: down, right: 3, bottom: 3 }] }); if (this.options.value) { this.setValue(this.options.value); } }, setValue: function (color) { BI.ColorChooserTrigger.superclass.setValue.apply(this, arguments); this.colorContainer.element.css("background-color", color); } }); BI.ColorChooserTrigger.EVENT_CHANGE = "ColorChooserTrigger.EVENT_CHANGE"; $.shortcut("bi.color_chooser_trigger", BI.ColorChooserTrigger);/** * 新建并选中某个分组按钮 * * Created by GUY on 2015/9/25. * @class BI.Copy2GroupAddButton * @extends BI.BasicButton */ BI.Copy2GroupAddButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.Copy2GroupAddButton.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + ' bi-copy2group-add-button', shadow: true, isShadowShowingOnSelected: true, height: 30 }) }, _init: function () { BI.Copy2GroupAddButton.superclass._init.apply(this, arguments); var self = this, o = this.options; this.text = BI.createWidget({ type: "bi.label", textAlign: "left", text: BI.i18nText("BI-Create_And_Select") + "\"江苏\"", height: o.height }) BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.icon_button", cls: "move2group-add-font" }, width: 30 }, { el: this.text }] }) }, setValue: function (v) { this.text.setValue(BI.i18nText("BI-Create_And_Select") + "\"" + v + "\""); this.setTitle(BI.i18nText("BI-Create_And_Select") + "\"" + v + "\"", { container: "body" }); }, doClick: function () { BI.Copy2GroupAddButton.superclass.doClick.apply(this, arguments); if (this.isValid()) { this.fireEvent(BI.Copy2GroupAddButton.EVENT_CHANGE); } } }); BI.Copy2GroupAddButton.EVENT_CHANGE = "Copy2GroupAddButton.EVENT_CHANGE"; $.shortcut('bi.copy2group_add_button', BI.Copy2GroupAddButton);/** * 复制到分组下拉框 * * Created by GUY on 2015/9/25. * @class BI.Copy2GroupCombo * @extends BI.Widget */ BI.Copy2GroupCombo = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Copy2GroupCombo.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-copy2group-combo", height: 30, tipType: "warning", items: [] }); }, _init: function () { BI.Copy2GroupCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.button", text: BI.i18nText("BI-Copy_To_Group"), height: o.height }); this.tools = BI.createWidget({ type: "bi.copy2group_bar" }); this.tools.on(BI.Copy2GroupBar.EVENT_START, function () { self.combo.adjustHeight(); self.searcher.adjustHeight(); }); this.tools.on(BI.Copy2GroupBar.EVENT_EMPTY, function () { self.combo.adjustHeight(); }); this.tools.on(BI.Copy2GroupBar.EVENT_CLICK_BUTTON, function () { self.fireEvent(BI.Copy2GroupCombo.EVENT_CLICK_BUTTON); self.searcher.stopSearch(); }); this.tools.on(BI.Copy2GroupBar.EVENT_CHANGE, function () { this.setButtonVisible(!self.searcher.hasMatched()); self.combo.adjustHeight(); self.searcher.adjustHeight(); }); this.popup = this._createPopup(this.options.items); this.searcher = BI.createWidget({ type: "bi.searcher", el: this.tools, chooseType: BI.Selection.Multi, adapter: this.popup }); this.searcher.on(BI.Searcher.EVENT_CHANGE, function () { }); this.multipopup = BI.createWidget({ type: "bi.multi_popup_view", width: 200, stopPropagation: false, el: this.popup, tool: this.searcher }); this.combo = BI.createWidget({ type: "bi.combo", isNeedAdjustWidth: false, element: this, el: this.trigger, popup: this.multipopup }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.Copy2GroupCombo.EVENT_BEFORE_POPUPVIEW); }); this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.searcher.stopSearch(); }); this.multipopup.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (value) { switch (value) { case 0 : self.fireEvent(BI.Copy2GroupCombo.EVENT_CONFIRM); self.combo.hideView(); break; default : break; } }); }, _createItems: function (items) { return BI.createItems(items, { type: "bi.multi_select_item", height: 25, handler: function (v) { } }) }, _createPopup: function (items, opt) { return BI.createWidget(BI.extend({ type: "bi.button_group", items: this._createItems(items), chooseType: 1, layouts: [{ type: "bi.vertical" }] }, opt)); }, scrollToBottom: function () { var self = this; BI.delay(function () { self.popup.element.scrollTop(BI.MAX); }, 30); }, populate: function (items) { this.options.items = items; this.combo.populate(this._createItems(items)); }, setValue: function (v) { this.combo.setValue(v); this.searcher.setValue(v); }, setEnable: function (enable) { this.combo.setEnable.apply(this.combo, arguments); }, getTargetValue: function () { return this.tools.getValue(); }, getValue: function () { return this.searcher.getValue(); } }); BI.Copy2GroupCombo.EVENT_BEFORE_POPUPVIEW = "Copy2GroupCombo.EVENT_BEFORE_POPUPVIEW"; BI.Copy2GroupCombo.EVENT_CHANGE = "Copy2GroupCombo.EVENT_CHANGE"; BI.Copy2GroupCombo.EVENT_CONFIRM = "Copy2GroupCombo.EVENT_CONFIRM"; BI.Copy2GroupCombo.EVENT_CLICK_BUTTON = "Copy2GroupCombo.EVENT_CLICK_BUTTON"; $.shortcut('bi.copy2group_combo', BI.Copy2GroupCombo);/** * guy * 复选导航条 * Created by GUY on 2015/9/25. * @class BI.Copy2GroupBar * @extends BI.Widget */ BI.Copy2GroupBar = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.Copy2GroupBar.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-copy2group-bar" }) }, _init: function () { BI.Copy2GroupBar.superclass._init.apply(this, arguments); var self = this; this.search = BI.createWidget({ type: "bi.text_editor", watermark: BI.i18nText("BI-Search_And_Create_Group"), allowBlank: true }); this.search.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.search.on(BI.TextEditor.EVENT_CHANGE, function () { self.button.setValue(this.getValue()); if(this.getValue() !== "") { self.fireEvent(BI.Copy2GroupBar.EVENT_CHANGE); } }); this.search.on(BI.TextEditor.EVENT_EMPTY, function () { self.button.invisible(); self.fireEvent(BI.Copy2GroupBar.EVENT_EMPTY); }); this.search.on(BI.TextEditor.EVENT_START, function () { self.button.visible(); self.fireEvent(BI.Copy2GroupBar.EVENT_START); }); this.button = BI.createWidget({ type: "bi.copy2group_add_button" }); this.button.on(BI.Copy2GroupAddButton.EVENT_CHANGE, function () { self.fireEvent(BI.Copy2GroupBar.EVENT_CLICK_BUTTON); }); BI.createWidget({ type: "bi.vertical", element: this, vgap: 5, hgap: 5, items: [this.search, this.button] }); this.button.invisible(); }, blur: function(){ this.search.blur(); }, setButtonVisible: function (b) { this.button.setVisible(b); }, getValue: function () { return this.search.getValue(); }, setValue: function (v) { this.search.setValue(v); this.button.setValue(v); } }); BI.Copy2GroupBar.EVENT_CHANGE = "Copy2GroupBar.EVENT_CHANGE"; BI.Copy2GroupBar.EVENT_START = "Copy2GroupBar.EVENT_START"; BI.Copy2GroupBar.EVENT_EMPTY = "Copy2GroupBar.EVENT_EMPTY"; BI.Copy2GroupBar.EVENT_CLICK_BUTTON = "Copy2GroupBar.EVENT_CLICK_BUTTON"; $.shortcut("bi.copy2group_bar", BI.Copy2GroupBar);/** * 日期控件中的月份下拉框 * * Created by GUY on 2015/9/7. * @class BI.MonthDateCombo * @extends BI.Trigger */ BI.MonthDateCombo = BI.inherit(BI.Trigger, { _defaultConfig: function() { return BI.extend( BI.MonthDateCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-month-combo", height: 25 }); }, _init: function() { BI.MonthDateCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.date_triangle_trigger" }); this.popup = BI.createWidget({ type: "bi.month_popup" }); this.popup.on(BI.YearPopup.EVENT_CHANGE, function(){ self.setValue(self.popup.getValue()); }) this.combo = BI.createWidget({ type: "bi.combo", offsetStyle: "center", element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { minWidth: 85, stopPropagation: false, el: this.popup } }) this.combo.on(BI.Combo.EVENT_CHANGE, function(){ self.combo.hideView(); self.fireEvent(BI.MonthDateCombo.EVENT_CHANGE); }); }, setValue: function(v){ this.trigger.setValue(v + 1); this.popup.setValue(v); }, getValue: function(){ return this.popup.getValue(); } }); BI.MonthDateCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.month_date_combo', BI.MonthDateCombo);/** * 年份下拉框 * * Created by GUY on 2015/9/7. * @class BI.YearDateCombo * @extends BI.Trigger */ BI.YearDateCombo = BI.inherit(BI.Trigger, { _defaultConfig: function() { return BI.extend( BI.YearDateCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-combo", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 height: 25 }); }, _init: function() { BI.YearDateCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.date_triangle_trigger" }); this.popup = BI.createWidget({ type: "bi.year_popup", min: o.min, max: o.max }); this.popup.on(BI.YearPopup.EVENT_CHANGE, function(){ self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.YearDateCombo.EVENT_CHANGE); }) this.combo = BI.createWidget({ type: "bi.combo", offsetStyle: "center", element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { minWidth: 85, stopPropagation: false, el: this.popup } }) this.combo.on(BI.Combo.EVENT_CHANGE, function(){ self.fireEvent(BI.YearDateCombo.EVENT_CHANGE); }) }, setValue: function(v){ this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function(){ return this.popup.getValue(); } }); BI.YearDateCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.year_date_combo', BI.YearDateCombo);/** * Created by GUY on 2015/9/7. * @class BI.DatePicker * @extends BI.Widget */ BI.DatePicker = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.DatePicker.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-date-picker", height: 25, min: '1900-01-01', //最小日期 max: '2099-12-31' //最大日期 }) }, _init: function () { BI.DatePicker.superclass._init.apply(this, arguments); var self = this, o = this.options; this._year = new Date().getFullYear(); this._month = new Date().getMonth(); this.left = BI.createWidget({ type: "bi.icon_button", cls: "pre-page-h-font", width: 25, height: 25 }); this.left.on(BI.IconButton.EVENT_CHANGE, function () { if (self._month === 0) { self.setValue({ year: self.year.getValue() - 1, month: 11 }) } else { self.setValue({ year: self.year.getValue(), month: self.month.getValue() - 1 }) } self.fireEvent(BI.DatePicker.EVENT_CHANGE); }); this.right = BI.createWidget({ type: "bi.icon_button", cls: "next-page-h-font", width: 25, height: 25 }); this.right.on(BI.IconButton.EVENT_CHANGE, function () { if (self._month === 11) { self.setValue({ year: self.year.getValue() + 1, month: 0 }) } else { self.setValue({ year: self.year.getValue(), month: self.month.getValue() + 1 }) } self.fireEvent(BI.DatePicker.EVENT_CHANGE); }); this.year = BI.createWidget({ type: "bi.year_date_combo", min: o.min, max: o.max }); this.year.on(BI.YearDateCombo.EVENT_CHANGE, function () { self.setValue({ year: self.year.getValue(), month: self.month.getValue() }); self.fireEvent(BI.DatePicker.EVENT_CHANGE); }) this.month = BI.createWidget({ type: "bi.month_date_combo" }); this.month.on(BI.MonthDateCombo.EVENT_CHANGE, function () { self.setValue({ year: self.year.getValue(), month: self.month.getValue() }); self.fireEvent(BI.DatePicker.EVENT_CHANGE); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: this.left, width: 25 }, { type: "bi.center_adapt", items: [{ type: "bi.horizontal", width: 100, items: [this.year, this.month] }] }, { el: this.right, width: 25 }] }) this.setValue({ year: this._year, month: this._month }) }, setValue: function (ob) { this._year = ob.year; this._month = ob.month; this.year.setValue(ob.year); this.month.setValue(ob.month); }, getValue: function () { return { year: this.year.getValue(), month: this.month.getValue() } } }); BI.DatePicker.EVENT_CHANGE = "EVENT_CHANGE" $.shortcut("bi.date_picker", BI.DatePicker);/** * Created by GUY on 2015/9/7. * @class BI.DateCalendarPopup * @extends BI.Widget */ BI.DateCalendarPopup = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.DateCalendarPopup.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-date-calendar-popup", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 selectedTime: null }) }, _createNav: function (v) { var date = BI.Calendar.getDateJSONByPage(v); var calendar = BI.createWidget({ type: "bi.calendar", logic: { dynamic: true }, min: this.options.min, max: this.options.max, year: date.year, month: date.month, day: this.selectedTime.day }); return calendar; }, _init: function () { BI.DateCalendarPopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.today = new Date(); this._year = this.today.getFullYear(); this._month = this.today.getMonth(); this._day = this.today.getDate(); this.selectedTime = o.selectedTime || { year: this._year, month: this._month, day: this._day }; this.datePicker = BI.createWidget({ type: "bi.date_picker", min: o.min, max: o.max }); this.calendar = BI.createWidget({ direction: "top", element: this, logic: { dynamic: true }, type: "bi.navigation", tab: this.datePicker, cardCreator: BI.bind(this._createNav, this), afterCardCreated: function () { }, afterCardShow: function () { this.setValue(self.selectedTime); } }); this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () { self.selectedTime = self.datePicker.getValue(); self.selectedTime.day = 1; self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)); }); this.calendar.on(BI.Navigation.EVENT_CHANGE, function () { self.selectedTime = self.calendar.getValue(); self.setValue(self.selectedTime); self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); }); }, setValue: function (timeOb) { this.datePicker.setValue(timeOb); this.calendar.setSelect(BI.Calendar.getPageByDateJSON(timeOb)); this.calendar.setValue(timeOb); this.selectedTime = timeOb; }, getValue: function () { return this.selectedTime; } }); BI.DateCalendarPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.date_calendar_popup", BI.DateCalendarPopup);/** * 日期控件中的年份或月份trigger * * Created by GUY on 2015/9/7. * @class BI.DateTriangleTrigger * @extends BI.Trigger */ BI.DateTriangleTrigger = BI.inherit(BI.Trigger, { _const: { height: 25, iconWidth: 16, iconHeight: 13 }, _defaultConfig: function() { return BI.extend( BI.DateTriangleTrigger.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-date-triangle-trigger pull-down-ha-font cursor-pointer", height: 25 }); }, _init: function() { BI.DateTriangleTrigger.superclass._init.apply(this, arguments); var o = this.options, c = this._const; this.text = BI.createWidget({ type: "bi.label", cls: "list-item-text", textAlign: "right", text: o.text, value: o.value, height: c.height }) this.icon = BI.createWidget({ type: "bi.icon", width: c.iconWidth, height: c.iconHeight }); BI.createWidget({ type: "bi.center_adapt", element: this, items: [{ type: "bi.center_adapt", width: 50, height: c.height, items: [this.text, this.icon] }] }) }, setValue: function(v){ this.text.setValue(v); }, getValue: function(){ return this.text.getValue(); }, setText: function(v){ this.text.setText(v); }, getText: function(){ return this.item.getText(); }, getKey: function(){ } }); $.shortcut('bi.date_triangle_trigger', BI.DateTriangleTrigger);/** * 日期下拉框 * * Created by GUY on 2015/9/7. * @class BI.DateCombo * @extends BI.Widget */ BI.DateCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.DateCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-date-combo", height: 30 }); }, _init: function () { BI.DateCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.date_trigger" }); this.trigger.on(BI.DateTrigger.EVENT_TRIGGER_CLICK, function () { self.combo.toggle(); }); this.popup = BI.createWidget({ type: "bi.date_calendar_popup" }); this.popup.on(BI.DateCalendarPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); }); this.combo = BI.createWidget({ type: "bi.combo", toggle: false, element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { width: 270, el: this.popup, stopPropagation: false } }) }, setValue: function (v) { this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); } }); $.shortcut('bi.date_combo', BI.DateCombo);BI.DateTrigger = BI.inherit(BI.Trigger, { _const: { hgap: 4, vgap: 2, triggerWidth: 30, watermark: BI.i18nText("BI-Unrestricted"), yearLength: 4, yearMonthLength: 7 }, _defaultConfig: function () { return BI.extend(BI.DateTrigger.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-date-trigger", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 height: 25 }); }, _init: function () { BI.DateTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.editor = BI.createWidget({ type: "bi.sign_editor", height: o.height, validationChecker: function (v) { var date = v.match(/\d+/g); self._autoAppend(v, date); return self._dateCheck(v) && Date.checkLegal(v) && self._checkVoid({ year: date[0], month: date[1], day: date[2] }); }, quitChecker: function () { return false; }, hgap: c.hgap, vgap: c.vgap, allowBlank: true, watermark: c.watermark, errorText: function () { if (self.editor.isEditing()) { return BI.i18nText("BI-Date_Trigger_Error_Text"); } return BI.i18nText("BI-Year_Trigger_Invalid_Text"); } }); this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () { self.fireEvent(BI.DateTrigger.EVENT_KEY_DOWN) }); this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.DateTrigger.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_VALID, function () { self.fireEvent(BI.DateTrigger.EVENT_VALID); }); this.editor.on(BI.SignEditor.EVENT_ERROR, function () { self.fireEvent(BI.DateTrigger.EVENT_ERROR); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { var value = self.editor.getValue(); if (BI.isNotNull(value)) { self.editor.setState(value); } if (BI.isNotEmptyString(value)) { var date = value.split("-"); self.store_value = { type: BICst.MULTI_DATE_CALENDAR, value:{ year: date[0] | 0, month: date[1] - 1, day: date[2] | 0 } }; } self.fireEvent(BI.DateTrigger.EVENT_CONFIRM); }); this.editor.on(BI.SignEditor.EVENT_SPACE, function () { if (self.editor.isValid()) { self.editor.blur(); } }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.DateTrigger.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_STOP, function () { self.fireEvent(BI.DateTrigger.EVENT_STOP); }); this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { self.fireEvent(BI.DateTrigger.EVENT_CHANGE); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: BI.createWidget(), width: 30 }, { el: this.editor }] }) }, _dateCheck: function (date) { return Date.parseDateTime(date, "%Y-%x-%d").print("%Y-%x-%d") == date || Date.parseDateTime(date, "%Y-%X-%d").print("%Y-%X-%d") == date || Date.parseDateTime(date, "%Y-%x-%e").print("%Y-%x-%e") == date || Date.parseDateTime(date, "%Y-%X-%e").print("%Y-%X-%e") == date; }, _checkVoid: function (obj) { return !Date.checkVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0]; }, _autoAppend: function (v, dateObj) { var self = this; var date = Date.parseDateTime(v, "%Y-%X-%d").print("%Y-%X-%d"); var yearCheck = function (v) { return Date.parseDateTime(v, "%Y").print("%Y") == v && date >= self.options.min && date <= self.options.max; }; var monthCheck = function (v) { return Date.parseDateTime(v, "%Y-%X").print("%Y-%X") == v && date >= self.options.min && date <= self.options.max; }; if (BI.isNotNull(dateObj) && Date.checkLegal(v)) { switch (v.length) { case this._const.yearLength: if (yearCheck(v)) { this.editor.setValue(v + "-"); } break; case this._const.yearMonthLength: if (monthCheck(v)) { this.editor.setValue(v + "-"); } break; } } }, setValue: function (v) { var type, value, self = this; var date = new Date(); this.store_value = v; if (BI.isNotNull(v)) { type = v.type || BICst.MULTI_DATE_CALENDAR; value = v.value; if(BI.isNull(value)){ value = v; } } var _setInnerValue = function (date, text) { var dateStr = date.print("%Y-%x-%e"); self.editor.setState(dateStr); self.editor.setValue(dateStr); self.setTitle(text + ":" + dateStr); }; switch (type) { case BICst.MULTI_DATE_YEAR_PREV: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_PREV]; date = new Date((date.getFullYear() - 1 * value), date.getMonth(), date.getDate()); _setInnerValue(date, text); break; case BICst.MULTI_DATE_YEAR_AFTER: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_AFTER]; date = new Date((date.getFullYear() + 1 * value), date.getMonth(), date.getDate()); _setInnerValue(date, text); break; case BICst.MULTI_DATE_YEAR_BEGIN: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_BEGIN]; date = new Date(date.getFullYear(), 0, 1); _setInnerValue(date, text); break; case BICst.MULTI_DATE_YEAR_END: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_END]; date = new Date(date.getFullYear(), 11, 31); _setInnerValue(date, text); break; case BICst.MULTI_DATE_QUARTER_PREV: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_PREV]; date = new Date().getBeforeMulQuarter(value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_QUARTER_AFTER: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_AFTER]; date = new Date().getAfterMulQuarter(value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_QUARTER_BEGIN: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_BEGIN]; date = new Date().getQuarterStartDate(); _setInnerValue(date, text); break; case BICst.MULTI_DATE_QUARTER_END: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_END]; date = new Date().getQuarterEndDate(); _setInnerValue(date, text); break; case BICst.MULTI_DATE_MONTH_PREV: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_PREV]; date = new Date().getBeforeMultiMonth(value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_MONTH_AFTER: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_AFTER]; date = new Date().getAfterMultiMonth(value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_MONTH_BEGIN: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_BEGIN]; date = new Date(date.getFullYear(), date.getMonth(), 1); _setInnerValue(date, text); break; case BICst.MULTI_DATE_MONTH_END: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_END]; date = new Date(date.getFullYear(), date.getMonth(), (date.getLastDateOfMonth()).getDate()); _setInnerValue(date, text); break; case BICst.MULTI_DATE_WEEK_PREV: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_WEEK_PREV]; date = date.getOffsetDate(-7 * value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_WEEK_AFTER: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_WEEK_AFTER]; date = date.getOffsetDate(7 * value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_DAY_PREV: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_PREV]; date = date.getOffsetDate(-1 * value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_DAY_AFTER: var text = value + BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_AFTER]; date = date.getOffsetDate(1 * value); _setInnerValue(date, text); break; case BICst.MULTI_DATE_DAY_TODAY: var text = BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_TODAY]; date = new Date(); _setInnerValue(date, text); break; default: if (BI.isNull(value) || BI.isNull(value.day)) { this.editor.setState(""); this.editor.setValue(""); this.setTitle(""); } else { var dateStr = value.year + "-" + (value.month + 1) + "-" + value.day; this.editor.setState(dateStr); this.editor.setValue(dateStr); this.setTitle(dateStr); } break; } }, getKey: function () { return this.editor.getValue(); }, getValue: function () { return this.store_value; } }); BI.DateTrigger.EVENT_FOCUS = "EVENT_FOCUS"; BI.DateTrigger.EVENT_START = "EVENT_START"; BI.DateTrigger.EVENT_STOP = "EVENT_STOP"; BI.DateTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.DateTrigger.EVENT_CHANGE = "EVENT_CHANGE"; BI.DateTrigger.EVENT_VALID = "EVENT_VALID"; BI.DateTrigger.EVENT_ERROR = "EVENT_ERROR"; BI.DateTrigger.EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK"; BI.DateTrigger.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; $.shortcut("bi.date_trigger", BI.DateTrigger);/** * Created by zcf on 2017/2/20. */ BI.DatePaneWidget = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.DatePaneWidget.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-date-pane-widget", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 selectedTime: null }) }, _init: function () { BI.DatePaneWidget.superclass._init.apply(this, arguments); var self = this, o = this.options; this.today = new Date(); this._year = this.today.getFullYear(); this._month = this.today.getMonth(); this.selectedTime = o.selectedTime || { year: this._year, month: this._month }; this.datePicker = BI.createWidget({ type: "bi.date_picker", min: o.min, max: o.max }); this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () { self.selectedTime = self.datePicker.getValue(); // self.selectedTime.day = 1; self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)); }); this.calendar = BI.createWidget({ direction: "top", element: this, logic: { dynamic: true }, type: "bi.navigation", tab: this.datePicker, cardCreator: BI.bind(this._createNav, this) // afterCardCreated: function () { // // }, // // afterCardShow: function () { // // this.setValue(self.selectedTime); // } }); this.calendar.on(BI.Navigation.EVENT_CHANGE, function () { self.selectedTime = self.calendar.getValue(); self.calendar.empty(); self.setValue(self.selectedTime); self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); }); }, _createNav: function (v) { var date = BI.Calendar.getDateJSONByPage(v); var calendar = BI.createWidget({ type: "bi.calendar", logic: { dynamic: true }, min: this.options.min, max: this.options.max, year: date.year, month: date.month, day: this.selectedTime.day }); return calendar; }, _getNewCurrentDate: function () { var today = new Date(); return { year: today.getFullYear(), month: today.getMonth() } }, _setCalenderValue: function (date) { this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)); this.calendar.setValue(date); this.selectedTime = date; }, _setDatePicker: function (timeOb) { if (BI.isNull(timeOb) || BI.isNull(timeOb.year) || BI.isNull(timeOb.month)) { this.datePicker.setValue(this._getNewCurrentDate()); } else { this.datePicker.setValue(timeOb); } }, _setCalendar: function (timeOb) { if (BI.isNull(timeOb) || BI.isNull(timeOb.day)) { this.calendar.empty(); this._setCalenderValue(this._getNewCurrentDate()); } else { this._setCalenderValue(timeOb) } }, setValue: function (timeOb) { this._setDatePicker(timeOb); this._setCalendar(timeOb); }, getValue: function () { return this.selectedTime; } }); $.shortcut("bi.date_pane_widget", BI.DatePaneWidget);/** * 带有方向的pathchooser * * Created by GUY on 2016/4/21. * @class BI.DirectionPathChooser * @extends BI.Widget */ BI.DirectionPathChooser = BI.inherit(BI.Widget, { _const: { lineColor: "#808080", selectLineColor: "#009de3" }, _defaultConfig: function () { return BI.extend(BI.DirectionPathChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-excel-table", items: [] }); }, _init: function () { BI.DirectionPathChooser.superclass._init.apply(this, arguments); var self = this, o = this.options; this.pathChooser = BI.createWidget({ type: "bi.path_chooser", element: this, items: o.items }); this.pathChooser.on(BI.PathChooser.EVENT_CHANGE, function (start, index) { //self._unselectAllArrows(); self._setValue(start, index); self.fireEvent(BI.DirectionPathChooser.EVENT_CHANGE); }); this._drawArrows(); }, _unselectAllArrows: function () { var self = this, lineColor = this._const.lineColor; BI.each(this.arrows, function (region, rs) { BI.each(rs, function (idx, arrows) { BI.each(arrows, function (i, arrow) { arrow.attr({fill: lineColor, stroke: lineColor}); }); }); }); }, _drawOneArrow: function (dot, direction) { //0,1,2,3 上右下左 var lineColor = this._const.lineColor; var selectLineColor = this._const.selectLineColor; var svg = this.pathChooser.svg; var path = ""; switch (direction) { case 0: path = "M" + dot.x + "," + dot.y + "L" + (dot.x - 3) + "," + (dot.y + 5) + "L" + (dot.x + 3) + "," + (dot.y + 5) + "L" + dot.x + "," + dot.y; break; case 1: path = "M" + dot.x + "," + dot.y + "L" + (dot.x - 5) + "," + (dot.y - 3) + "L" + (dot.x - 5) + "," + (dot.y + 3) + "L" + dot.x + "," + dot.y; break; case 2: path = "M" + dot.x + "," + dot.y + "L" + (dot.x - 3) + "," + (dot.y - 5) + "L" + (dot.x + 3) + "," + (dot.y - 5) + "L" + dot.x + "," + dot.y; break; case 3: path = "M" + dot.x + "," + dot.y + "L" + (dot.x + 5) + "," + (dot.y - 3) + "L" + (dot.x + 5) + "," + (dot.y + 3) + "L" + dot.x + "," + dot.y; break; } return svg.path(path).attr({fill: lineColor, stroke: lineColor}); }, _drawArrows: function () { var self = this, o = this.options; var routes = this.pathChooser.routes; var pathes = this.pathChooser.pathes; var store = this.pathChooser.store; this.arrows = {}; BI.each(routes, function (region, ps) { self.arrows[region] = []; BI.each(ps, function (idx, path) { self.arrows[region][idx] = []; var dots = pathes[region][idx]; BI.each(dots, function (i, dot) { if (i > 0 && i < dots.length - 1) { var arrow; if (dot.y === dots[i - 1].y) { if (dots[i + 1].y != dot.y) { if (store[path[path.length - 2]].direction === -1) { if (i - 1 > 0) { arrow = self._drawOneArrow(dots[i - 1], 3); } } else { arrow = self._drawOneArrow(dots[i], 1); } } } else if (dot.x === dots[i - 1].x) { if (dot.y > dots[i - 1].y) { if (store[BI.first(path)].direction === -1) { arrow = self._drawOneArrow(dots[i - 1], 0); } else { arrow = self._drawOneArrow(dot, 2); } } else { if (store[path[path.length - 2]].direction === -1) { arrow = self._drawOneArrow(dots[i - 1], 2); } else { arrow = self._drawOneArrow(dot, 0); } } } if (arrow) { self.arrows[region][idx].push(arrow); } } }); BI.each(path, function (i, node) { if (i !== 0) { var arrow; var from = path[i - 1]; if (store[from].direction === -1) { var regionIndex = self.pathChooser.getRegionIndexById(from); var x = getXoffsetByRegionIndex(regionIndex, -1); var y = getYByXoffset(dots, x); arrow = self._drawOneArrow({x: x, y: y}, 3); } else { var regionIndex = self.pathChooser.getRegionIndexById(node); var x = getXoffsetByRegionIndex(regionIndex); var y = getYByXoffset(dots, x); arrow = self._drawOneArrow({x: x, y: y}, 1); } if (arrow) { self.arrows[region][idx].push(arrow); } } }); }) }); function getXoffsetByRegionIndex(regionIndex, diregion) { if (diregion === -1) { return 100 * (regionIndex + 1) - 20; } return 100 * regionIndex + 20; } function getYByXoffset(dots, xoffset) { var finded = BI.find(dots, function (i, dot) { if (i > 0) { if (dots[i - 1].x < xoffset && dots[i].x > xoffset) { return true; } } }); return finded.y; } }, _setValue: function (start, index) { var self = this; var lineColor = this._const.lineColor; var selectLineColor = this._const.selectLineColor; var routes = this.pathChooser.routes; var starts = this.pathChooser.start; var each = [start]; if (starts.contains(start)) { each = starts; } BI.each(each, function (i, s) { BI.each(self.arrows[s], function (j, arrows) { BI.each(arrows, function (k, arrow) { arrow.attr({fill: lineColor, stroke: lineColor}).toFront(); }); }); }); BI.each(this.arrows[start][index], function (i, arrow) { arrow.attr({fill: selectLineColor, stroke: selectLineColor}).toFront(); }); var current = BI.last(routes[start][index]); while (current && routes[current] && routes[current].length === 1) { BI.each(self.arrows[current][0], function (i, arrow) { arrow.attr({fill: selectLineColor, stroke: selectLineColor}).toFront(); }); current = BI.last(routes[current][0]); } }, setValue: function (v) { this.pathChooser.setValue(v); this._unselectAllArrows(); var routes = this.pathChooser.routes; var nodes = BI.keys(routes), self = this; var result = [], array = []; BI.each(v, function (i, val) { if (BI.contains(nodes, val)) { if (array.length > 0) { array.push(val); result.push(array); array = []; } } array.push(val); }); if (array.length > 0) { result.push(array); } //画这n条路径 BI.each(result, function (idx, path) { var start = path[0]; var index = BI.findIndex(routes[start], function (idx, p) { if (BI.isEqual(path, p)) { return true; } }); if (index >= 0) { self._setValue(start, index); } }); }, getValue: function () { return this.pathChooser.getValue(); }, populate: function (items) { this.pathChooser.populate(items); this._drawArrows(); } }); BI.DirectionPathChooser.EVENT_CHANGE = "DirectionPathChooser.EVENT_CHANGE"; $.shortcut('bi.direction_path_chooser', BI.DirectionPathChooser);/** * Created by roy on 15/8/14. */ BI.DownListCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-down-list-combo", invalid: false, height: 25, items: [], adjustLength: 0, el: {} }) }, _init: function () { BI.DownListCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.popupview = BI.createWidget({ type: "bi.down_list_popup", items: o.items, chooseType: o.chooseType }); this.popupview.on(BI.DownListPopup.EVENT_CHANGE, function (value) { self.fireEvent(BI.DownListCombo.EVENT_CHANGE, value); self.downlistcombo.hideView(); }); this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE, function (value, fatherValue) { self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, value, fatherValue); self.downlistcombo.hideView(); }); this.downlistcombo = BI.createWidget({ element: this, type: 'bi.combo', isNeedAdjustWidth: false, adjustLength: o.adjustLength, el: BI.createWidget(o.el, { type: "bi.icon_trigger", extraCls: o.iconCls ? o.iconCls : "pull-down-font", width: o.width, height: o.height }), popup: { el: this.popupview, stopPropagation: true, maxHeight: 400 } }); this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW); }); }, populate: function (items) { this.popupview.populate(items); }, setValue: function (v) { this.popupview.setValue(v); }, getValue: function () { return this.popupview.getValue() } }); BI.DownListCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.DownListCombo.EVENT_SON_VALUE_CHANGE = "EVENT_SON_VALUE_CHANGE"; BI.DownListCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; $.shortcut("bi.down_list_combo", BI.DownListCombo);/** * Created by roy on 15/9/6. */ BI.DownListGroup = BI.inherit(BI.Widget, { constants: { iconCls: "check-mark-ha-font" }, _defaultConfig: function () { return BI.extend(BI.DownListGroup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-down-list-group", items: [ { el: {} } ] }) }, _init: function () { BI.DownListGroup.superclass._init.apply(this, arguments); var o = this.options, self = this; this.downlistgroup = BI.createWidget({ element: this, type: "bi.button_tree", items: o.items, chooseType: 0,//0单选,1多选 layouts: [{ type: "bi.vertical", hgap: 0, vgap: 0 }] }); this.downlistgroup.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if(type === BI.Events.CLICK) { self.fireEvent(BI.DownListGroup.EVENT_CHANGE, arguments); } }) }, getValue:function(){ return this.downlistgroup.getValue(); }, setValue:function(v){ this.downlistgroup.setValue(v); } }) BI.DownListGroup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.down_list_group", BI.DownListGroup);BI.DownListItem = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.DownListItem.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-down-list-item", cls: "", height: 25, logic: { dynamic: true }, selected: false, iconHeight: null, iconWidth: null, textHgap: 0, textVgap: 0, textLgap: 0, textRgap: 0 }) }, _init: function () { BI.DownListItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.text = BI.createWidget({ type: "bi.icon_text_item", element: this, height: o.height, text: o.text, value: o.value, logic: o.logic, selected: o.selected, disabled: o.disabled, iconHeight: o.iconHeight, iconWidth: o.iconWidth, textHgap: o.textHgap, textVgap: o.textVgap, textLgap: o.textLgap, textRgap: o.textRgap, father: o.father }); this.text.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.text.on(BI.IconTextItem.EVENT_CHANGE, function () { self.fireEvent(BI.DownListItem.EVENT_CHANGE); }); // this.setSelected(o.selected); }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, isSelected: function () { return this.text.isSelected(); }, setSelected: function (b) { this.text.setSelected(b); // if (b === true) { // this.element.addClass("dot-e-font"); // } else { // this.element.removeClass("dot-e-font"); // } }, setValue: function (v) { this.text.setValue(v); }, getValue: function () { return this.text.getValue(); } }); BI.DownListItem.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.down_list_item", BI.DownListItem);BI.DownListGroupItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.DownListGroupItem.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-down-list-group-item", logic: { dynamic: false }, invalid: true, iconCls1: "dot-e-font", iconCls2: "pull-right-e-font" }) }, _init: function () { BI.DownListGroupItem.superclass._init.apply(this, arguments); var o = this.options; var self = this; this.text = BI.createWidget({ type: "bi.label", cls: "list-group-item-text", textAlign: "left", text: o.text, value: o.value, height: o.height }) this.icon1 = BI.createWidget({ type: "bi.icon_button", cls: o.iconCls1, width: 25, forceNotSelected: true }) this.icon2 = BI.createWidget({ type: "bi.icon_button", cls: o.iconCls2, width: 25, forceNotSelected: true }) var blank = BI.createWidget({ type: "bi.layout", width: 25 }) BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.icon2, top: 0, bottom: 0, right: 0 }] }) BI.createWidget(BI.extend({ element: this }, BI.LogicFactory.createLogic("horizontal", BI.extend(o.logic, { items: BI.LogicFactory.createLogicItemsByDirection("left", this.icon1, this.text, blank) })))); this.element.on("mouseenter." + this.getName(), function (e) { if (self.element.__isMouseInBounds__(e) && self.isEnabled()) { self.hover(); } else { self.dishover(); } }); this.element.on("mousemove." + this.getName(), function (e) { if (!self.element.__isMouseInBounds__(e) && self.isEnabled()) { self.dishover() } }); this.element.on("mouseleave." + this.getName(), function () { if (self.isEnabled()) { self.dishover() } }); }, hover: function () { BI.DownListGroupItem.superclass.hover.apply(this, arguments); this.icon1.element.addClass("hover"); this.icon2.element.addClass("hover"); }, dishover: function () { BI.DownListGroupItem.superclass.dishover.apply(this, arguments); this.icon1.element.removeClass("hover"); this.icon2.element.removeClass("hover"); }, doClick: function () { BI.DownListGroupItem.superclass.doClick.apply(this, arguments); if (this.isValid()) { this.fireEvent(BI.DownListGroupItem.EVENT_CHANGE, this.getValue()); } }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, setValue: function (v) { var self = this, o = this.options; v = BI.isArray(v) ? v : [v]; BI.find(v, function(idx, value){ if(BI.contains(o.childValues, value)){ self.icon1.setSelected(true); return true; }else{ self.icon1.setSelected(false); } }) } }); BI.DownListGroupItem.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.down_list_group_item", BI.DownListGroupItem);/** * Created by roy on 15/9/8. * 处理popup中的item分组样式 * 一个item分组中的成员大于一时,该分组设置为单选,并且默认状态第一个成员设置为已选择项 */ BI.DownListPopup = BI.inherit(BI.Pane, { constants: { nextIcon: "pull-right-e-font", height: 25, iconHeight: 12, iconWidth: 12, hgap: 0, vgap: 0, border: 1 }, _defaultConfig: function () { var conf = BI.DownListPopup.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-down-list-popup", items: [], chooseType: BI.Selection.Multi }) }, _init: function () { BI.DownListPopup.superclass._init.apply(this, arguments); this.singleValues = []; this.childValueMap = {}; this.fatherValueMap = {}; var self = this, o = this.options, children = this._createChildren(o.items); this.popup = BI.createWidget({ type: "bi.button_tree", items: BI.createItems(children, {}, { adjustLength: -2 } ), layouts: [{ type: "bi.vertical", hgap: this.constants.hgap, vgap: this.constants.vgap }], chooseType: o.chooseType }); this.popup.on(BI.ButtonTree.EVENT_CHANGE, function (value, object) { var changedValue = value; if (BI.isNotNull(self.childValueMap[value])) { changedValue = self.childValueMap[value]; self.fireEvent(BI.DownListPopup.EVENT_SON_VALUE_CHANGE, changedValue, self.fatherValueMap[value]) } else { self.fireEvent(BI.DownListPopup.EVENT_CHANGE, changedValue, object); } if (!self.singleValues.contains(changedValue)) { var item = self.getValue(); var result = []; BI.each(item, function (i, valueObject) { if (valueObject.value != changedValue) { result.push(valueObject); } }); self.setValue(result); } }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.popup] }); }, _createChildren: function (items) { var self = this, result = []; BI.each(items, function (i, it) { var item_done = { type: "bi.down_list_group", items: [] }; BI.each(it, function (i, item) { if (BI.isNotEmptyArray(item.children) && !BI.isEmpty(item.el)) { item.type = "bi.combo_group"; item.cls = "down-list-group"; item.trigger = "hover"; item.isNeedAdjustWidth = false; item.el.title = item.el.title || item.el.text; item.el.type = "bi.down_list_group_item"; item.el.logic = { dynamic: true }; item.el.height = self.constants.height; item.el.iconCls2 = self.constants.nextIcon; item.popup = { lgap: 4, el: { type: "bi.button_tree", chooseType: 0, layouts: [{ type: "bi.vertical" }] } }; item.el.childValues = []; BI.each(item.children, function (i, child) { var fatherValue = BI.deepClone(item.el.value); var childValue = BI.deepClone(child.value); self.singleValues.push(child.value); child.type = "bi.down_list_item"; child.extraCls = " child-down-list-item"; child.title = child.title || child.text; child.textRgap = 10; child.isNeedAdjustWidth = false; child.logic = { dynamic: true }; child.father = fatherValue; self.fatherValueMap[self._createChildValue(fatherValue, childValue)] = fatherValue; self.childValueMap[self._createChildValue(fatherValue, childValue)] = childValue; child.value = self._createChildValue(fatherValue, childValue); item.el.childValues.push(child.value); }) } else { item.type = "bi.down_list_item"; item.title = item.title || item.text; item.textRgap = 10; item.isNeedAdjustWidth = false; item.logic = { dynamic: true } } var el_done = {}; el_done.el = item; item_done.items.push(el_done); }); if (self._isGroup(item_done.items)) { BI.each(item_done.items, function (i, item) { self.singleValues.push(item.el.value); }) } result.push(item_done); if (self._needSpliter(i, items.length)) { var spliter_container = BI.createWidget({ type: "bi.vertical", items: [{ el: { type: "bi.layout", cls: "bi-down-list-spliter cursor-pointer", height: 0 } }], cls: "bi-down-list-spliter-container cursor-pointer", lgap: 10, rgap: 10 }); result.push(spliter_container); } }); return result; }, _isGroup: function (i) { return i.length > 1; }, _needSpliter: function (i, itemLength) { return i < itemLength - 1; }, _createChildValue: function (fatherValue, childValue) { return fatherValue + "_" + childValue }, populate: function (items) { BI.DownListPopup.superclass.populate.apply(this, arguments); var self = this; self.childValueMap = {}; self.fatherValueMap = {}; self.singleValues = []; var children = self._createChildren(items); var popupItem = BI.createItems(children, {}, { adjustLength: -2 } ); self.popup.populate(popupItem); }, setValue: function (valueItem) { var self = this; var valueArray = []; BI.each(valueItem, function (i, item) { var value; if (BI.isNotNull(item.childValue)) { value = self._createChildValue(item.value, item.childValue); } else { value = item.value; } valueArray.push(value); } ); this.popup.setValue(valueArray); }, getValue: function () { var self = this, result = []; var values = this.popup.getValue(); BI.each(values, function (i, value) { var valueItem = {}; if (BI.isNotNull(self.childValueMap[value])) { var fartherValue = self.fatherValueMap[value]; valueItem.childValue = self.childValueMap[value]; valueItem.value = fartherValue; } else { valueItem.value = value; } result.push(valueItem); }); return result; } }); BI.DownListPopup.EVENT_CHANGE = "EVENT_CHANGE"; BI.DownListPopup.EVENT_SON_VALUE_CHANGE = "EVENT_SON_VALUE_CHANGE"; $.shortcut("bi.down_list_popup", BI.DownListPopup);/** * Created by windy on 2016/12/20. */ BI.DynamicGroupTabButtonGroup = BI.inherit(BI.Widget, { _const: { MERGE_ADD_WIDTH: 65 }, _defaultConfig: function () { return BI.extend(BI.DynamicGroupTabButtonGroup.superclass._defaultConfig.apply(this, arguments), { cls: "bi-dynamic-group-tab-button-group", items: [], frozenButtons: [], height: 30 }) }, _init: function () { BI.DynamicGroupTabButtonGroup.superclass._init.apply(this, arguments); var o = this.options; this.tab = BI.createWidget({ type: "bi.button_group", height: o.height, items: [], layouts: [{ type: "bi.horizontal", scrollable: false, scrollx: false }] }); this.tab.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) { self.fireEvent(BI.DynamicGroupTabButtonGroup.EVENT_CHANGE, arguments); }); var self = this; this.scrollLeft = BI.createWidget({ type: "bi.icon_button", cls: "pre-page-font bi-icon-button-scroll", invisible: true }); this.scrollLeft.on(BI.IconButton.EVENT_CHANGE, function () { self._scrollLeft(); }); this.scrollRight = BI.createWidget({ type: "bi.icon_button", cls: "next-page-font bi-icon-button-scroll", invisible: true }); this.scrollRight.on(BI.IconButton.EVENT_CHANGE, function () { self._scrollRight(); }); BI.ResizeDetector.addResizeListener(this, function () { self.resize(); }); BI.createWidget({ type: "bi.left", element: this, items: [{ type: "bi.horizontal", tgap: -1, height: o.height, scrollx: false, cls: "bi-sheet-tab-dynamic-horizontal", items: [this.tab, { type: "bi.vertical_adapt", items: [this.scrollLeft], height: o.height }, { type: "bi.vertical_adapt", items: [this.scrollRight], height: o.height }, { type: "bi.vertical_adapt", items: o.frozenButtons, height: o.height, lgap: 10 } ] }] }) }, _scrollLeft: function () { this._scrollTo(this.tab.element[0].scrollLeft - this.scrollSection) }, _scrollRight: function () { this._scrollTo(this.tab.element[0].scrollLeft + this.scrollSection) }, _getTotalWidth: function () { var totalWidth = this.element.outerWidth(); totalWidth -= this._const.MERGE_ADD_WIDTH; BI.each(this.options.frozenButtons, function (idx, button) { if (BI.isWidget(button)) { totalWidth -= button.getWidth(); } else { totalWidth -= button.width; } }) return totalWidth; }, _calculateButtonsWith: function (fn) { var buttonWidth = 0; var self = this; BI.some(this.tab.getAllButtons(), function (idx, item) { buttonWidth += item.element.outerWidth(); if (BI.isNotNull(fn) && fn.apply(self, [item])) { return true; } }) return buttonWidth; }, _dealWithScrollButtonState: function () { var buttonWidth = this._calculateButtonsWith(); if (this.tab.element[0].scrollLeft === 0) { this.scrollLeft.setEnable(false); } else { this.scrollLeft.setEnable(true); } var ulWidth = this.tab.element.outerWidth(); //可以滚动的最大距离 var maxLeft = buttonWidth - ulWidth; if (this.tab.element[0].scrollLeft === maxLeft) { this.scrollRight.setEnable(false); } else { this.scrollRight.setEnable(true); } }, _needScroll: function (visibleWidth, buttonWidth) { var currentLeft = this.tab.element[0].scrollLeft; return (visibleWidth > currentLeft && visibleWidth - currentLeft > buttonWidth) || (visibleWidth < currentLeft) }, _scrollTo: function (value) { var self = this; BI.delay(function () { self.tab.element.scrollLeft(value); self._dealWithScrollButtonState(); }, 30); }, _scrollToEnd: function () { this._scrollTo(this._calculateButtonsWith()) }, resize: function () { //获取当前所有可使用的宽度,不包含添加和合并和导航按钮以及之间的空隙 var totalWidth = this._getTotalWidth(); //所有button的宽度 var buttonWidth = this._calculateButtonsWith(); var width = buttonWidth; var showScrollButton = false; if (buttonWidth > totalWidth) { width = totalWidth; showScrollButton = true; } this.scrollLeft.setVisible(showScrollButton); this.scrollRight.setVisible(showScrollButton); //这边动态改变buttongroup的宽度,因为最大宽度是变的 this.tab.element.width(width); this._dealWithScrollButtonState(); this.scrollSection = width * 2 / 3; this.scrollSelectedVisible(); }, scrollSelectedVisible: function () { var value = this.tab.getValue()[0]; //从index 0到当前选中的tab的所有button的宽度 var visibleWidth = this._calculateButtonsWith(function (item) { if (item.getValue() === value) { return true; } }) var buttonWidth = this._getTotalWidth(); var scrollWidth = visibleWidth - buttonWidth / 2; if (this._needScroll(visibleWidth, buttonWidth)) { this._scrollTo(scrollWidth) } }, getAllButtons: function () { return this.tab.getAllButtons.apply(this.tab, arguments); }, addItems: function (items) { this.tab.addItems.apply(this.tab, arguments); this.resize(); this._scrollToEnd(); }, getValue: function () { this.tab.getValue.apply(this.tab, arguments); }, setValue: function (v) { this.tab.setValue.apply(this.tab, arguments); }, populate: function () { this.tab.populate.apply(this.tab, arguments); this.resize(); } }) BI.DynamicGroupTabButtonGroup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.dynamic_group_tab_button_group", BI.DynamicGroupTabButtonGroup);/** * * Created by GUY on 2016/3/28. * @class BI.ExcelTableCell * @extends BI.Widget */ BI.ExcelTableCell = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ExcelTableCell.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-excel-table-cell", text: "" }); }, _init: function () { BI.ExcelTableCell.superclass._init.apply(this, arguments); var self = this, o = this.options; BI.createWidget({ type: "bi.label", element: this, textAlign: "left", whiteSpace: "normal", height: this.options.height, text: this.options.text, value: this.options.value }) } }); $.shortcut('bi.excel_table_cell', BI.ExcelTableCell);/** * * Created by GUY on 2016/3/28. * @class BI.ExcelTableHeaderCell * @extends BI.Widget */ BI.ExcelTableHeaderCell = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ExcelTableHeaderCell.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-excel-table-header-cell", text: "" }); }, _init: function () { BI.ExcelTableHeaderCell.superclass._init.apply(this, arguments); var self = this, o = this.options; BI.createWidget({ type: "bi.label", element: this, textAlign: BI.HorizontalAlign.Center, whiteSpace: "normal", height: this.options.height, text: this.options.text, value: this.options.value }) } }); $.shortcut('bi.excel_table_header_cell', BI.ExcelTableHeaderCell);/** * Excel表格 * * Created by GUY on 2016/3/28. * @class BI.ExcelTable * @extends BI.Widget */ BI.ExcelTable = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ExcelTable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-excel-table", el: { type: "bi.adaptive_table" }, isNeedResize: false, isResizeAdapt: true, isNeedMerge: false,//是否需要合并单元格 mergeCols: [], //合并的单元格列号 mergeRule: function (row1, row2) { //合并规则, 默认相等时合并 return BI.isEqual(row1, row2); }, columnSize: [], headerRowSize: 37, footerRowSize: 37, rowSize: 37, regionColumnSize: false, items: [] //二维数组 }); }, _init: function () { BI.ExcelTable.superclass._init.apply(this, arguments); var self = this, o = this.options; var mergeCols = []; BI.each(o.mergeCols, function (i, col) { mergeCols.push(col + 1); }); this.table = BI.createWidget(o.el, { type: "bi.table_view", element: this, isNeedResize: o.isNeedResize, isResizeAdapt: o.isResizeAdapt, isNeedFreeze: false, isNeedMerge: o.isNeedMerge, mergeCols: mergeCols, mergeRule: o.mergeRule, columnSize: [""].concat(o.columnSize), headerRowSize: 18, rowSize: o.rowSize, regionColumnSize: o.regionColumnSize || [82, ""] }); if (BI.isNotEmptyArray(o.items)) { this.populate(o.items); } BI.nextTick(function () { self.setRegionColumnSize(o.regionColumnSize || [82, ""]); }); }, resize: function () { this.table.resize(); }, setColumnSize: function (columnSize) { this.table.setColumnSize(columnSize); }, getColumnSize: function () { return this.table.getColumnSize(); }, getCalculateColumnSize: function () { return this.table.getCalculateColumnSize(); }, setHeaderColumnSize: function (columnSize) { this.table.setHeaderColumnSize(columnSize); }, setRegionColumnSize: function (columnSize) { this.table.setRegionColumnSize(columnSize); }, getRegionColumnSize: function () { return this.table.getRegionColumnSize(); }, getCalculateRegionColumnSize: function () { return this.table.getCalculateRegionColumnSize(); }, getCalculateRegionRowSize: function () { return this.table.getCalculateRegionRowSize(); }, getClientRegionColumnSize: function () { return this.table.getClientRegionColumnSize(); }, getScrollRegionColumnSize: function () { return this.table.getScrollRegionColumnSize(); }, getScrollRegionRowSize: function () { return this.table.getScrollRegionRowSize(); }, hasVerticalScroll: function () { return this.table.hasVerticalScroll(); }, setVerticalScroll: function (scrollTop) { this.table.setVerticalScroll(scrollTop); }, setLeftHorizontalScroll: function (scrollLeft) { this.table.setLeftHorizontalScroll(scrollLeft); }, setRightHorizontalScroll: function (scrollLeft) { this.table.setRightHorizontalScroll(scrollLeft); }, getVerticalScroll: function () { return this.table.getVerticalScroll(); }, getLeftHorizontalScroll: function () { return this.table.getLeftHorizontalScroll(); }, getRightHorizontalScroll: function () { return this.table.getRightHorizontalScroll(); }, getColumns: function () { return this.table.getColumns(); }, resizeHeader: function () { this.table.resize(); this.table._resizeHeader && this.table._resizeHeader(); }, attr: function (key,value) { var self = this; if (BI.isObject(key)) { BI.each(key, function (k, v) { self.attr(k, v); }); return; } BI.ExcelTable.superclass.attr.apply(this, arguments); switch (key){ case "mergeCols": var mCols = []; BI.each(value, function (i, col) { mCols.push(col + 1); }); value=mCols; break; } this.table.attr.apply(this.table, arguments); }, populate: function (rows) { var self = this; var columnSize = this.getColumnSize(); var items = []; var header = [{ type: "bi.excel_table_header_cell" }]; if (BI.isNotNull(rows)) { BI.each(columnSize, function (i, size) { header.push({ type: "bi.excel_table_header_cell", text: BI.int2Abc(i + 1) }); }); BI.each(rows, function (i, row) { items.push([{ type: "bi.excel_table_header_cell", text: (i + 1) }].concat(row)); }); } this.table.populate(items, [header]); }, destroy: function () { this.table.destroy(); BI.ExcelTable.superclass.destroy.apply(this, arguments); } }); $.shortcut('bi.excel_table', BI.ExcelTable);/** * 文件管理控件组 * * Created by GUY on 2015/12/11. * @class BI.FileManagerButtonGroup * @extends BI.Widget */ BI.FileManagerButtonGroup = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FileManagerButtonGroup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-button_group", items: [] }) }, _init: function () { BI.FileManagerButtonGroup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button_group = BI.createWidget({ type: "bi.button_tree", element: this, chooseType: BI.Selection.Multi, items: this._formatItems(o.items), layouts: [{ type: "bi.vertical" }] }); this.button_group.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); }, _formatItems: function (items) { var self = this, o = this.options; BI.each(items, function (i, item) { if (item.children && item.children.length > 0) { item.type = "bi.file_manager_folder_item"; } else { item.type = "bi.file_manager_file_item"; } }); return items; }, setValue: function (v) { this.button_group.setValue(v); }, getValue: function () { return this.button_group.getValue(); }, getNotSelectedValue: function () { return this.button_group.getNotSelectedValue(); }, getAllLeaves: function () { return this.button_group.getAllLeaves(); }, getAllButtons: function () { return this.button_group.getAllButtons(); }, getSelectedButtons: function () { return this.button_group.getSelectedButtons(); }, getNotSelectedButtons: function () { return this.button_group.getNotSelectedButtons(); }, populate: function (items) { this.button_group.populate(this._formatItems(items)); } }); BI.FileManagerButtonGroup.EVENT_CHANGE = "FileManagerButtonGroup.EVENT_CHANGE"; $.shortcut("bi.file_manager_button_group", BI.FileManagerButtonGroup);/** * 文件管理控件 * * Created by GUY on 2015/12/11. * @class BI.FileManager * @extends BI.Widget */ BI.FileManager = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FileManager.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager", el: {}, items: [] }) }, _init: function () { BI.FileManager.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = new BI.Tree(); var items = BI.Tree.transformToTreeFormat(o.items); this.tree.initTree(items); this.selectedValues = []; this.nav = BI.createWidget({ type: "bi.file_manager_nav", items: BI.deepClone(items) }); this.nav.on(BI.FileManagerNav.EVENT_CHANGE, function (value, obj) { if (value == "-1") {//根节点 self.populate({children: self.tree.toJSON()}); } else { var node = self.tree.search(obj.attr("id")); self.populate(BI.extend({id: node.id}, node.get("data"), {children: self.tree.toJSON(node)})); } self.setValue(self.selectedValues); }); this.list = BI.createWidget(o.el, { type: "bi.file_manager_list", items: items }); this.list.on(BI.Controller.EVENT_CHANGE, function (type, selected, obj) { if (type === BI.Events.CHANGE) { var node = self.tree.search(obj.attr("id")); self.populate(BI.extend({id: node.id}, node.get("data"), {children: self.tree.toJSON(node)})); } else if (type === BI.Events.CLICK) { var values = []; if (obj instanceof BI.MultiSelectBar) { var t = self.list.getValue(); selected = t.type === BI.Selection.All; values = BI.concat(t.assist, t.value); } else { values = obj.getAllLeaves(); } BI.each(values, function (i, v) { if (selected === true) { self.selectedValues.pushDistinct(v); } else { self.selectedValues.remove(v); } }); } self.setValue(self.selectedValues); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.list, left: 0, right: 0, top: 0, bottom: 10 }, { el: this.nav, left: 40, right: 100, top: 0 }] }); }, setValue: function (value) { this.selectedValues = value || []; this.list.setValue(this.selectedValues); }, getValue: function () { var obj = this.list.getValue(); var res = obj.type === BI.Selection.All ? obj.assist : obj.value; res.pushDistinctArray(this.selectedValues); return res; }, _populate: function (items) { this.list.populate(items); }, getSelectedValue: function () { return this.nav.getValue()[0]; }, getSelectedId: function () { return this.nav.getId()[0]; }, populate: function (node) { var clone = BI.deepClone(node); this._populate(node.children); this.nav.populate(clone); } }); BI.FileManager.EVENT_CHANGE = "FileManager.EVENT_CHANGE"; $.shortcut("bi.file_manager", BI.FileManager);/** * 文件管理控件 * * Created by GUY on 2015/12/11. * @class BI.FileManagerFileItem * @extends BI.Single */ BI.FileManagerFileItem = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.FileManagerFileItem.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-file-item bi-list-item", height: 30 }) }, _init: function () { BI.FileManagerFileItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checked = BI.createWidget({ type: "bi.multi_select_bar", text: "", width: 36, height: o.height }); this.checked.on(BI.Controller.EVENT_CHANGE, function () { arguments[2] = self; self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: this.checked, width: 36 }, { el: { type: "bi.icon_button", cls: "create-by-me-file-font" }, width: 20 }, { el: { type: "bi.label", textAlign: "left", height: o.height, text: o.text, value: o.value } }] }) }, getAllLeaves: function(){ return [this.options.value]; }, isSelected: function () { return this.checked.isSelected(); }, setSelected: function (v) { this.checked.setSelected(v); } }); BI.FileManagerFileItem.EVENT_CHANGE = "FileManagerFileItem.EVENT_CHANGE"; $.shortcut("bi.file_manager_file_item", BI.FileManagerFileItem);/** * 文件管理控件 * * Created by GUY on 2015/12/11. * @class BI.FileManagerFolderItem * @extends BI.Single */ BI.FileManagerFolderItem = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.FileManagerFolderItem.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-folder-item bi-list-item", height: 30 }) }, _init: function () { BI.FileManagerFolderItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checked = BI.createWidget({ type: "bi.multi_select_bar", text: "", width: 36, height: o.height }); this.checked.on(BI.Controller.EVENT_CHANGE, function () { arguments[2] = self; self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.button = BI.createWidget({ type: "bi.text_button", textAlign: "left", height: o.height, text: o.text, value: o.value }); this.button.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CHANGE, o.value, self); }); this.tree = new BI.Tree(); this.tree.initTree([{ id: o.id, children: o.children }]); this.selectValue = []; BI.createWidget({ type: "bi.htape", element: this, items: [{ el: this.checked, width: 36 }, { el: { type: "bi.icon_button", cls: "create-by-me-folder-font" }, width: 20 }, { el: this.button }] }) }, setAllSelected: function (v) { this.checked.setSelected(v); this.selectValue = []; }, setHalfSelected: function (v) { this.checked.setHalfSelected(v); if(!v){ this.selectValue = []; } }, setValue: function (v) { var self = this, o = this.options; var isHalf = false; var selectValue = []; this.tree.traverse(function (node) { if (node.isLeaf()) { if (BI.contains(v, node.get("data").value)) { selectValue.push(node.get("data").value); } else { isHalf = true; } } }); this.setAllSelected(selectValue.length > 0 && !isHalf); this.setHalfSelected(selectValue.length > 0 && isHalf); if (this.checked.isHalfSelected()) { this.selectValue = selectValue; } }, getAllButtons: function () { return [this]; }, getAllLeaves: function () { var o = this.options; var res = []; this.tree.traverse(function (node) { if (node.isLeaf()) { res.push(node.get("data").value) } }); return res; }, getNotSelectedValue: function () { var self = this, o = this.options; var res = []; var isAllSelected = this.checked.isSelected(); if (isAllSelected === true) { return res; } var isHalfSelected = this.checked.isHalfSelected(); this.tree.traverse(function (node) { if (node.isLeaf()) { var v = node.get("data").value; if (isHalfSelected === true) { if (!BI.contains(self.selectValue, node.get("data").value)) { res.push(v); } } else { res.push(v); } } }); return res; }, getValue: function () { var res = []; if (this.checked.isSelected()) { this.tree.traverse(function (node) { if (node.isLeaf()) { res.push(node.get("data").value); } }); return res; } if (this.checked.isHalfSelected()) { return this.selectValue; } return []; } }); BI.FileManagerFolderItem.EVENT_CHANGE = "FileManagerFolderItem.EVENT_CHANGE"; $.shortcut("bi.file_manager_folder_item", BI.FileManagerFolderItem);/** * 文件管理控件列表 * * Created by GUY on 2015/12/11. * @class BI.FileManagerList * @extends BI.Widget */ BI.FileManagerList = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FileManagerList.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-list", el: {}, items: [] }) }, _init: function () { BI.FileManagerList.superclass._init.apply(this, arguments); var self = this, o = this.options; this.list = BI.createWidget({ type: "bi.select_list", element: this, items: o.items, toolbar: { type: "bi.multi_select_bar", height: 40, text: "" }, el: { type: "bi.list_pane", el: BI.isWidget(o.el) ? o.el : BI.extend({ type: "bi.file_manager_button_group" }, o.el) } }); this.list.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); }, setValue: function (v) { this.list.setValue({ value: v }); }, getValue: function () { return this.list.getValue(); }, populate: function (items) { this.list.populate(items); this.list.setToolBarVisible(true); } }); BI.FileManagerList.EVENT_CHANGE = "FileManagerList.EVENT_CHANGE"; $.shortcut("bi.file_manager_list", BI.FileManagerList);/** * 文件管理导航按钮 * * Created by GUY on 2015/12/11. * @class BI.FileManagerNavButton * @extends BI.Widget */ BI.FileManagerNavButton = BI.inherit(BI.Widget, { _const: { normal_color: "#ffffff", select_color: "#f4f4f4" }, _defaultConfig: function () { return BI.extend(BI.FileManagerNavButton.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-nav-button", selected: false, height: 40 }) }, _init: function () { BI.FileManagerNavButton.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.button = BI.createWidget({ type: "bi.text_button", cls: "file-manager-nav-button-text", once: true, selected: o.selected, text: o.text, title: o.text, value: o.value, height: o.height, lgap: 20, rgap: 10 }); this.button.on(BI.Controller.EVENT_CHANGE, function () { arguments[2] = self; self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var svg = BI.createWidget({ type: "bi.svg", cls: "file-manager-nav-button-triangle", width: 15, height: o.height }); var path = svg.path("M0,0L15,20L0,40").attr({ "stroke": c.select_color, "fill": o.selected ? c.select_color : c.normal_color }); this.button.on(BI.TextButton.EVENT_CHANGE, function () { if (this.isSelected()) { path.attr("fill", c.select_color); } else { path.attr("fill", c.normal_color); } }); BI.createWidget({ type: "bi.default", element: this, items: [this.button] }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: svg, right: -15, top: 0, bottom: 0 }] }) }, isSelected: function () { return this.button.isSelected(); }, setValue: function (v) { this.button.setValue(v); }, getValue: function () { return this.button.getValue(); }, populate: function (items) { } }); BI.FileManagerNavButton.EVENT_CHANGE = "FileManagerNavButton.EVENT_CHANGE"; $.shortcut("bi.file_manager_nav_button", BI.FileManagerNavButton);/** * 文件管理导航 * * Created by GUY on 2015/12/11. * @class BI.FileManagerNav * @extends BI.Widget */ BI.FileManagerNav = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FileManagerNav.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-file-manager-nav", height: 40, items: [] }) }, _init: function () { BI.FileManagerNav.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = new BI.Tree(); this.refreshTreeData(o.items); this.tree.getRoot().set("data", { text: BI.i18nText("BI-Created_By_Me"), value: BI.FileManagerNav.ROOT_CREATE_BY_ME, id: BI.FileManagerNav.ROOT_CREATE_BY_ME }); this.button_group = BI.createWidget({ type: "bi.button_group", element: this, items: [{ type: "bi.file_manager_nav_button", text: BI.i18nText("BI-Created_By_Me"), selected: true, id: BI.FileManagerNav.ROOT_CREATE_BY_ME, value: BI.FileManagerNav.ROOT_CREATE_BY_ME }], layouts: [{ type: "bi.horizontal" }] }); this.button_group.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.button_group.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) { self.fireEvent(BI.FileManagerNav.EVENT_CHANGE, arguments); }); }, _getAllParents: function (id) { var node, res = []; if (!id) { node = this.tree.getRoot(); } else { node = this.tree.search(id); } while (node.parent) { res.push(node); node = node.parent; } res.push(node); return res.reverse(); }, _formatNodes: function (nodes) { var res = []; BI.each(nodes, function (i, node) { res.push(BI.extend({ type: "bi.file_manager_nav_button", id: node.id }, node.get("data"))); }); BI.last(res).selected = true; return res; }, getValue: function () { return this.button_group.getValue(); }, getId: function () { var ids = []; BI.each(this.button_group.getSelectedButtons(), function (i, btn) { ids.push(btn.attr("id")); }); return ids; }, refreshTreeData: function(items){ this.tree.initTree(BI.Tree.transformToTreeFormat(items)); this.tree.getRoot().set("data", { text: BI.i18nText("BI-Created_By_Me"), value: BI.FileManagerNav.ROOT_CREATE_BY_ME, id: BI.FileManagerNav.ROOT_CREATE_BY_ME }); }, populate: function (node) { var parents = BI.isNull(node) ? [this.tree.getRoot()] : this._getAllParents(node.id); this.button_group.populate(this._formatNodes(parents)); } }); BI.extend(BI.FileManagerNav, { ROOT_CREATE_BY_ME: "-1" }); BI.FileManagerNav.EVENT_CHANGE = "FileManagerNav.EVENT_CHANGE"; $.shortcut("bi.file_manager_nav", BI.FileManagerNav);/** * 过滤条件抽象类 * * @class BI.AbstractFilterItem * @extend BI.Widget */ BI.AbstractFilterItem = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.AbstractFilterItem.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-filter-item" }) }, _init: function () { BI.AbstractFilterItem.superclass._init.apply(this, arguments); }, isSelectedCondition: function () { return this.emptyItem && this.emptyItem.isVisible(); }, setSelectedCondition: function (b) { if (!!b) { if (!this.emptyItem) { this.emptyItem = BI.createWidget({ type: "bi.absolute", height: 40, cls: "filter-item-empty-item", items: [{ el: { type: "bi.center_adapt", cls: "empty-filter-item-leaf" } }], hgap: 10, vgap: 5 }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.emptyItem], scrolly: false }); } } this.emptyItem && this.emptyItem.setVisible(b); } });/** * @class BI.FilterExpander * @extend BI.AbstractFilterItem * 过滤树的一个expander节点 */ BI.FilterExpander = BI.inherit(BI.AbstractFilterItem, { _constant: { EXPANDER_WIDTH: 20 }, _defaultConfig: function () { var conf = BI.FilterExpander.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-filter-expander", el: {}, popup: {} }) }, _init: function () { BI.FilterExpander.superclass._init.apply(this, arguments); this._initExpander(); this._initConditionsView(); BI.createWidget({ type: "bi.horizontal_adapt", element: this, items: [this.expander, this.conditionsView] }); }, _initExpander: function () { var self = this, o = this.options; var value = o.value, text = ""; if (value === BICst.FILTER_TYPE.AND) { text = BI.i18nText("BI-Basic_And"); } else { text = BI.i18nText("BI-Basic_Or"); } this.expander = BI.createWidget({ type: "bi.text_button", cls: "condition-and-or", text: text, value: value, id: o.id, width: this._constant.EXPANDER_WIDTH, height: "100%" }); this.expander.on(BI.Controller.EVENT_CHANGE, function (type) { arguments[2] = self; self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); }, _initConditionsView: function () { var self = this, popup = this.options.popup; this.conditionsView = BI.createWidget(popup); this.conditionsView.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); }, getValue: function () { return { type: this.expander.getValue(), value: this.conditionsView.getValue(), id: this.options.id }; }, setValue: function () { }, populate: function (items) { this.conditionsView.populate.apply(this.conditionsView, arguments); } }); $.shortcut("bi.filter_expander", BI.FilterExpander);/** * 过滤 * * Created by GUY on 2015/11/20. * @class BI.Filter * @extend BI.Widget */ BI.Filter = BI.inherit(BI.Widget, { constants: { FIELD_TYPE_NUMBER: 1, FIELD_TYPE_STRING: 0, FIELD_TYPE_DATE: 2 }, _defaultConfig: function () { return BI.extend(BI.Filter.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-filter", expander: {}, items: [], el: {}, itemCreator: BI.empty }) }, _init: function () { BI.Filter.superclass._init.apply(this, arguments); var self = this, o = this.options; this.filter = BI.createWidget(o.el,{ type: "bi.filter_operation", expander: o.expander, items: o.items, element: this }); this.filter.on(BI.FilterOperation.EVENT_OPERATION, function (type) { switch (type) { case BICst.FILTER_OPERATION_CONDITION: case BICst.FILTER_OPERATION_CONDITION_AND: self._addAndOrCondition(BICst.FILTER_TYPE.EMPTY_CONDITION); break; case BICst.FILTER_OPERATION_CONDITION_OR: self._addAndOrCondition(BICst.FILTER_TYPE.EMPTY_CONDITION, 1); break; case BICst.FILTER_OPERATION_FORMULA: case BICst.FILTER_OPERATION_FORMULA_AND: self._addAndOrCondition(BICst.FILTER_TYPE.EMPTY_FORMULA); break; case BICst.FILTER_OPERATION_FORMULA_OR: self._addAndOrCondition(BICst.FILTER_TYPE.EMPTY_FORMULA, 1); break; } }); this.filter.on(BI.FilterOperation.EVENT_DESTROY_ITEM, function (id) { self._removeCondition(id); }); this.tree = new BI.Tree(); this.tree.initTree(o.items); }, _removeCondition: function (id) { var finded = this.tree.search(id); if (BI.isNotNull(finded)) { var parent = finded.getParent(); parent.removeChild(id); if (parent.getChildrenLength() <= 1) { var prev = parent.getParent(); if (BI.isNotNull(prev)) { var index = prev.getChildIndex(parent.id); prev.removeChildByIndex(index); if (parent.getChildrenLength() === 1) { prev.addChild(parent.getFirstChild(), index); } } } this._populate(this.tree.toJSONWithNode()); this.fireEvent(BI.Filter.EVENT_CHANGE); } }, _createEmptyNode: function (type) { var node = new BI.Node(BI.UUID()); node.set("data", { value: type }); return node; }, _insertAndOrCondition: function (id, formulaOrField, type) { var ANDOR = ["AND", "OR"]; type || (type = 0); var finded = this.tree.search(id); if (BI.isNotNull(finded)) { var data = finded.get("data"); var parent = finded.getParent(); var index = parent.getChildIndex(finded.id); var pdata = parent.get("data") || {}; var node = this._createEmptyNode(formulaOrField); if (data.value === BICst.FILTER_TYPE[ANDOR[type]]) { this.tree.addNode(finded, node); return; } if (data.value === BICst.FILTER_TYPE[ANDOR[1 - type]]) { if (pdata.value === BICst.FILTER_TYPE[ANDOR[type]]) { parent.addChild(node, index + 1); return; } } if ((data.value === BICst.FILTER_TYPE[ANDOR[1 - type]] && pdata.value !== BICst.FILTER_TYPE[ANDOR[type]]) || pdata.value === BICst.FILTER_TYPE[ANDOR[1 - type]] || (pdata.value !== BICst.FILTER_TYPE.AND && pdata.value !== BICst.FILTER_TYPE.OR)) { var andor = new BI.Node(BI.UUID()); andor.set("data", { value: BICst.FILTER_TYPE[ANDOR[type]], children: [finded.get("data"), node.get("data")] }); parent.removeChildByIndex(index); parent.addChild(andor, index); andor.addChild(finded); andor.addChild(node); return; } parent.addChild(node, index + 1); } }, _addAndOrCondition: function (formulaOrField, type) { var ANDOR = ["AND", "OR"]; type || (type = 0); var o = this.options; var currentSelectItem = this.filter.getCurrentSelectItem(); if (BI.isNotNull(currentSelectItem)) { var id = currentSelectItem.attr("id"); this._insertAndOrCondition(id, formulaOrField, type); } else { var node = this._createEmptyNode(formulaOrField); var root = this.tree.getRoot(); var child = root.getLastChild(); if (BI.isNotNull(child)) { var data = child.get("data"); if (data.value === BICst.FILTER_TYPE[ANDOR[type]]) { this.tree.addNode(child, node); } else { var andor = new BI.Node(BI.UUID()); andor.set("data", { value: BICst.FILTER_TYPE[ANDOR[type]], children: [child.get("data"), node.get("data")] }); root.removeChild(child.id); this.tree.addNode(andor); this.tree.addNode(andor, child); this.tree.addNode(andor, node); } } else { this.tree.addNode(node); } } this._populate(this.tree.toJSONWithNode()); this.fireEvent(BI.Filter.EVENT_CHANGE); }, _populate: function (items) { var self = this, o = this.options; o.items = items; ArrayUtils.traversal(items, function (i, item) { o.itemCreator(item); }); this.filter.populate.apply(this.filter, [items]); }, populate: function (conditions) { this.tree.initTree(conditions); this._populate(this.tree.toJSONWithNode()); }, getValue: function () { return this.filter.getValue(); } }); BI.Filter.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.filter", BI.Filter);/** * 过滤条件 * * Created by GUY on 2015/9/25. * @class BI.FilterOperation * @extend BI.Widget */ BI.FilterOperation = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FilterOperation.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-filter-operation", expander: {}, items: [], selections: [BICst.FILTER_OPERATION_CONDITION, BICst.FILTER_OPERATION_FORMULA], itemsCreator: BI.emptyFn }) }, _defaultState: function () { if (BI.isNotNull(this.currentSelected)) { this.currentSelected.setSelectedCondition(false); } this.buttonComboTab.setSelect(BI.FilterOperation.OPERATION_ADD_CONDITION); }, _init: function () { BI.FilterOperation.superclass._init.apply(this, arguments); var self = this, o = this.options; this.currentSelected = null; this.filter = BI.createWidget({ type: "bi.filter_pane", expander: o.expander, items: o.items, itemsCreator: o.itemsCreator }); this.filter.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { if (type === BI.Events.CLICK) { if (BI.isNotNull(self.currentSelected) && self.currentSelected === obj) { obj.setSelectedCondition(!obj.isSelectedCondition()); } else { if (BI.isNotNull(self.currentSelected)) { self.currentSelected.setSelectedCondition(false); } self.currentSelected = obj; obj.setSelectedCondition(true); } if (self.currentSelected.isSelectedCondition()) { self.buttonComboTab.setSelect(BI.FilterOperation.OPERATION_ADD_ANDOR_CONDITION); } else { self.buttonComboTab.setSelect(BI.FilterOperation.OPERATION_ADD_CONDITION); } } if (type === BI.Events.DESTROY) { if (self.currentSelected === obj) { self.currentSelected = null; self.buttonComboTab.setSelect(BI.FilterOperation.OPERATION_ADD_CONDITION); } self.fireEvent(BI.FilterOperation.EVENT_DESTROY_ITEM, value, obj); } }); this.filter.on(BI.FilterPane.EVENT_CHANGE, function () { self.fireEvent(BI.FilterOperation.EVENT_CHANGE, arguments); }); var operation = this._buildOperationTab(); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: operation, height: 40 }, { el: { type: "bi.absolute", scrollable: true, items: [{ el: { type: "bi.left", items: [ this.filter ] }, top: 0, right: 2, bottom: 0, left: 0 }] } }] }) }, _buildOperationTab: function () { this.buttonComboTab = BI.createWidget({ type: "bi.tab", tab: null, cardCreator: BI.bind(this._createTabs, this) }); this.buttonComboTab.setSelect(BI.FilterOperation.OPERATION_ADD_CONDITION); return this.buttonComboTab; }, _createTabs: function (v) { var self = this; switch (v) { case BI.FilterOperation.OPERATION_ADD_CONDITION: var btnGroup = BI.createWidget({ type: "bi.button_group", items: BI.createItems(self._createButtons(), { type: "bi.button", forceNotSelected: true, level: "ignore", height: 25 }), chooseType: BI.ButtonGroup.CHOOSE_TYPE_DEFAULT, layouts: [{ type: "bi.right", hgap: 10, vgap: 5 }] }); btnGroup.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) { self.fireEvent(BI.FilterOperation.EVENT_OPERATION, obj.getValue()); self._defaultState(); }); return btnGroup; case BI.FilterOperation.OPERATION_ADD_ANDOR_CONDITION: var btnGroup = BI.createWidget({ type: "bi.button_group", chooseType: BI.ButtonGroup.CHOOSE_TYPE_DEFAULT, items: self._createCombos(), layouts: [{ type: "bi.right", hgap: 10, vgap: 5 }] }); return btnGroup; } }, _createButtons: function(){ var buttons = []; BI.each(this.options.selections, function(i, type){ switch (type){ case BICst.FILTER_OPERATION_FORMULA: buttons.push({ text: BI.i18nText("BI-Add_Formula"), value: BICst.FILTER_OPERATION_FORMULA }); break; case BICst.FILTER_OPERATION_CONDITION: buttons.push({ text: BI.i18nText("BI-Add_Condition"), value: BICst.FILTER_OPERATION_CONDITION }); break; } }); return buttons; }, _createCombos: function () { var self = this, combos = []; BI.each(this.options.selections, function(i, type){ var text = "", items = []; switch (type) { case BICst.FILTER_OPERATION_FORMULA: text = BI.i18nText("BI-Add_Formula"); items = BICst.FILTER_ADD_FORMULA_COMBO; break; case BICst.FILTER_OPERATION_CONDITION: text = BI.i18nText("BI-Add_Condition"); items = BICst.FILTER_ADD_CONDITION_COMBO; break; } var addCombo = BI.createWidget({ type: "bi.static_combo", text: text, width: 90, chooseType: BI.ButtonGroup.CHOOSE_TYPE_NONE, items: BI.createItems(items, { type: "bi.single_select_item", height: 25 }) }); addCombo.on(BI.Combo.EVENT_CHANGE, function (value, obj) { self.fireEvent(BI.FilterOperation.EVENT_OPERATION, obj.getValue()); self._defaultState(); }); combos.push(addCombo); }); return combos; }, getCurrentSelectItem: function () { if (BI.isNotNull(this.currentSelected) && this.currentSelected.isSelectedCondition()) { return this.currentSelected; } }, populate: function (items) { this.filter.populate.apply(this.filter, arguments); }, getValue: function () { return this.filter.getValue(); } }); BI.extend(BI.FilterOperation, { OPERATION_ADD_CONDITION: 0, OPERATION_ADD_ANDOR_CONDITION: 1 }); BI.FilterOperation.EVENT_OPERATION = "EVENT_OPERATION"; BI.FilterOperation.EVENT_CHANGE = "EVENT_CHANGE"; BI.FilterOperation.EVENT_DESTROY_ITEM = "BI.FilterOperation.EVENT_DESTROY_ITEM"; $.shortcut("bi.filter_operation", BI.FilterOperation);/** * @class BI.FilterPane * @extend BI.Widget * 过滤面板 */ BI.FilterPane = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FilterPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-filter-pane", expander: {}, items: [], itemsCreator: BI.emptyFn }) }, _init: function () { BI.FilterPane.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: "bi.custom_tree", element: this, expander: BI.extend({ type: "bi.filter_expander", el: {}, popup: { type: "bi.custom_tree" } }, o.expander), el: { type: "bi.button_map", chooseType: BI.ButtonGroup.CHOOSE_TYPE_DEFAULT, layouts: [{ type: "bi.vertical", scrolly: false }] } }); this.tree.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.FilterPane.EVENT_CHANGE, [].slice.call(arguments, 1)); } }); if (BI.isNotEmptyArray(o.items)) { this.populate(o.items); } }, populate: function (items) { this.tree.populate.apply(this.tree, arguments); }, getValue: function () { return this.tree.getValue(); } }); BI.FilterPane.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.filter_pane", BI.FilterPane);/** * Created by windy on 2017/3/13. * 数值微调器 */ BI.FineTuningNumberEditor = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.FineTuningNumberEditor.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-fine-tuning-number-editor", value: -1 }) }, _init: function () { BI.FineTuningNumberEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: "bi.sign_editor", value: this._alertInEditorValue(o.value), errorText: BI.i18nText("BI-Please_Input_Natural_Number"), validationChecker: function(v){ return BI.isNaturalNumber(v) || self._alertOutEditorValue(v) === -1; } }); this.editor.on(BI.TextEditor.EVENT_CONFIRM, function(){ self._finetuning(0); self.fireEvent(BI.FineTuningNumberEditor.EVENT_CONFIRM); }); this.topBtn = BI.createWidget({ type: "bi.icon_button", cls: "column-pre-page-h-font top-button" }); this.topBtn.on(BI.IconButton.EVENT_CHANGE, function(){ self._finetuning(1); self.fireEvent(BI.FineTuningNumberEditor.EVENT_CONFIRM); }); this.bottomBtn = BI.createWidget({ type: "bi.icon_button", cls: "column-next-page-h-font bottom-button" }); this.bottomBtn.on(BI.IconButton.EVENT_CHANGE, function(){ self._finetuning(-1); self.fireEvent(BI.FineTuningNumberEditor.EVENT_CONFIRM); }); this._finetuning(0); BI.createWidget({ type: "bi.htape", element: this, items: [this.editor, { el: { type: "bi.grid", columns: 1, rows: 2, items: [{ column: 0, row: 0, el: this.topBtn }, { column: 0, row: 1, el: this.bottomBtn }] }, width: 30 }] }); }, _alertOutEditorValue: function(v){ return v === BI.i18nText("BI-Basic_Auto") ? -1 : v; }, _alertInEditorValue: function(v){ return BI.parseInt(v) === -1 ? BI.i18nText("BI-Basic_Auto") : v; }, //微调 _finetuning: function(add){ var v = BI.parseInt(this._alertOutEditorValue(this.editor.getValue())); this.editor.setValue(this._alertInEditorValue(v + add)); this.bottomBtn.setEnable((v + add) !== -1); }, getValue: function () { var v = this.editor.getValue(); return this._alertOutEditorValue(v); }, setValue: function (v) { this.editor.setValue(this._alertInEditorValue(v)); this._finetuning(0); } }); BI.FineTuningNumberEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.fine_tuning_number_editor", BI.FineTuningNumberEditor);/** * Created by roy on 15/9/29. */ /** * Created by roy on 15/9/1. */ BI.SymbolGroup = BI.inherit(BI.Widget, { constants: { hgap: 7.5, textWidth: 14, textHeight: 17 }, _defaultConfig: function () { return BI.extend(BI.SymbolGroup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-symbol-group" }) }, _init: function () { BI.SymbolGroup.superclass._init.apply(this, arguments) var self = this, c = this.constants; var items = [{ text: "+", value: "+" }, { text: "-", value: "-" }, { text: "*", value: "*" }, { text: "/", value: "/" }, { text: "(", value: "(" }, { text: ")", value: ")" }]; this.symbolgroup = BI.createWidget({ type: "bi.button_group", element: self, chooseType:-1, items: BI.createItems(items, { type: "bi.text_button", forceNotSelected: true, once: false, textWidth: c.textWidth, textHeight: c.textHeight, cls: "symbol-button" }), layouts: [{ type: "bi.left_vertical_adapt", hgap: c.hgap }] }); this.symbolgroup.on(BI.ButtonGroup.EVENT_CHANGE,function(v){ self.fireEvent(BI.SymbolGroup.EVENT_CHANGE,v) }) } }); BI.SymbolGroup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.symbol_group", BI.SymbolGroup);/** * Created by roy on 15/9/9. */ //0更多函数为展开状态,1为函数框展开,显示返回状态 BI.FormulaInsert = BI.inherit(BI.Widget, { constants: { right_set_off: -322, height: 30, width: 160, right: 10, button_bottom: 5, pane_bottom: -1, retract: 1, more_function: 0, functionTypes: ["MATH", "DATETIME", "ARRAY", "TEXT", "LOGIC", "OTHER"], abandonFunctions: ["ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATAN2", "ATANH", "BITNOT", "BITOPERATION", "CHAR", "CLASS", "CODE", "COMBIN", "CORREL", "COS", "COSH", "DATETONUMBER", "DEGREES", "GETKEY", "GETUSERDEPARTMENTS", "GETUSERJOBTITLES", "NVL", "ODD", "PI", "POWER", "PRODUCT", "PROPER", "RADIANS", "REGEXP", "REVERSE", "RemoteIP", "SIN", "SINH", "STARTWITH", "TAN", "TANH", "TESTCONNECTION", "TESTMACANDUUID", "TOBINARY", "TOHEX", "TOOCTAL", "TOIMAGE"] }, _defaultConfig: function () { var conf = BI.FormulaInsert.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-formula-insert", fieldItems: [] }) }, _init: function () { BI.FormulaInsert.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this.constants; self.validation = "valid"; this.formulatree = BI.createWidget({ type: "bi.formula_field_tree", cls: "bi-formula-field-pane", items: o.fieldItems }); this.formulatree.on(BI.FormulaFieldTree.EVENT_CHANGE, function () { var v = self.formulatree.getValue(); self.formulaedit.insertField(self.fieldValueTextMap[v[0]]); }); this.symbolgroup = BI.createWidget({ type: "bi.symbol_group", height: c.height, cls: "symbol-group-column" }); this.symbolgroup.on(BI.SymbolGroup.EVENT_CHANGE, function (v) { self.formulaedit.insertOperator(v); }); this.formulaedit = BI.createWidget({ type: "bi.formula", tipType: "warning", watermark: BI.i18nText("BI-Formula_Water_Mark") }); this.formulaedit.on(BI.FormulaEditor.EVENT_CHANGE, function () { if (BI.Func.checkFormulaValidation(self.formulaedit.getCheckString())) { self.validation = "valid"; BI.Bubbles.hide(self.getName() + "invalid"); } else { BI.Bubbles.show(self.getName() + "invalid", BI.i18nText("BI-Formula_Valid"), self, { offsetStyle: "center" }); self.validation = "invalid" } self.fireEvent(BI.FormulaInsert.EVENT_CHANGE); }); this.formulaedit.on(BI.FormulaEditor.EVENT_BLUR, function () { BI.Bubbles.hide(self.getName() + "invalid"); if (!self.checkValidation()) { self.formulaedit.setTitle(BI.i18nText("BI-Formula_Valid"), {belowMouse: true}); } }); this.formulaedit.on(BI.FormulaEditor.EVENT_FOCUS, function () { self.formulaedit.setTitle(""); if (!self.checkValidation()) { BI.Bubbles.show(self.getName() + "invalid", BI.i18nText("BI-Formula_Valid"), self, {offsetStyle: "center"}); } }); this.editorpane = BI.createWidget({ type: "bi.vtape", items: [ { height: "fill", el: self.formulaedit }, { height: c.height, el: self.symbolgroup } ] }); this.functionbutton = BI.createWidget({ type: "bi.text_button", text: BI.i18nText("BI-Formula_More_Function"), value: c.more_function, cls: "more-function-button" }); this.functionpane = BI.createWidget({ type: "bi.function_pane", items: self._createFunctionItems(), }); this.functionCombo = BI.createWidget({ type: "bi.combo", isNeedAdjustWidth: false, el: this.functionbutton, direction: "right,top", adjustYOffset: -16, adjustXOffset: 10, hideChecker: function () { return false; }, popup: { el: self.functionpane, width: 372 }, width: 65 }); BI.createWidget({ element: this, type: "bi.htape", items: [ { width: c.width, el: self.formulatree }, { el: self.editorpane } ], height: o.height, width: o.width }); BI.createWidget({ element: this, type: "bi.absolute", items: [ { el: self.functionCombo, right: c.right, bottom: c.button_bottom } ] }); self.formulaedit.element.droppable({ accept: ".bi-tree-text-leaf-item", drop: function (event, ui) { var value = ui.helper.attr("text"); self.formulaedit.insertField(value); } }); this.functionCombo.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () { self.functionbutton.setText(BI.i18nText("BI-Formula_Retract")) }); this.functionCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.functionbutton.setText(BI.i18nText("BI-Formula_More_Function")) }); this.functionpane.on(BI.FunctionPane.EVENT_INSET, function (v) { if (BI.isNotEmptyString(v)) { self.formulaedit.insertFunction(v); } }); this.populate(o.fieldItems); }, _isFunction: function (str) { var self = this, o = this.options, result = false; BI.each(o.functionItems, function (i, item) { var text = item.text.toLowerCase(); var lowerString = str.toLowerCase(); if (text === lowerString) { result = true } }); return result; }, _analyzeContent: function (v) { var regx = /\$[\{][^\}]*[\}]|\w*\w|\$\{[^\$\(\)\+\-\*\/)\$,]*\w\}|\$\{[^\$\(\)\+\-\*\/]*\w\}|\$\{[^\$\(\)\+\-\*\/]*[\u4e00-\u9fa5]\}|\w|(.)|\n/g; return v.match(regx); }, _getFunctionType: function (functionType) { switch (functionType) { case "MATH": return BICst.FUNCTION.MATH; case "TEXT": return BICst.FUNCTION.TEXT; case "DATETIME": return BICst.FUNCTION.DATE; case "ARRAY": return BICst.FUNCTION.ARRAY; case "LOGIC": return BICst.FUNCTION.LOGIC; case "OTHER": return BICst.FUNCTION.OTHER; } }, _createFunctionItems: function () { var self = this; var functionObjs = FormulaJSONs; var functionItems = []; BI.each(functionObjs, function (i, functionObj) { if (self.constants.functionTypes.contains(functionObj.type) && !self.constants.abandonFunctions.contains(functionObj.name)) { var item = {}; item.text = functionObj.name; item.value = functionObj.name; item.fieldType = self._getFunctionType(functionObj.type); item.description = functionObj.def; item.title = functionObj.def; functionItems.push(item); } }); this.options.functionItems = functionItems; return functionItems; }, _createFieldTextValueMap: function (fieldItems) { var fieldMap = {}; BI.each(fieldItems, function(idx, typeItems){ BI.each(typeItems, function (i, fieldItem) { fieldMap[fieldItem.text] = fieldItem.value; }); }) return fieldMap; }, _createFieldValueTextMap: function (fieldItems) { var fieldMap = {}; BI.each(fieldItems, function (idx, typeItems) { BI.each(typeItems, function (i, fieldItem) { fieldMap[fieldItem.value] = fieldItem.text; }) }); return fieldMap; }, _bindDragEvent: function () { var self = this; BI.each(self.formulatree.getAllLeaves(), function (i, node) { node.element.draggable({ cursorAt: {top: 5, left: 5}, helper: function () { var hint = BI.createWidget({ type: "bi.helper", value: node.getValue(), text: self.fieldValueTextMap[node.getValue()] }); BI.createWidget({ element: self, type: "bi.default", items: [hint] }); hint.element.attr({text: self.fieldValueTextMap[node.getValue()]}); return hint.element; } }) }); }, checkValidation: function () { return this.validation === "valid"; }, refresh: function () { this.formulaedit.refresh(); }, setValue: function (v) { var self = this, result; self.formulaedit.refresh(); self.formulaedit.setValue(""); result = this._analyzeContent(v || ""); BI.each(result, function (i, item) { var fieldRegx = /\$[\{][^\}]*[\}]/; var str = item.match(fieldRegx); if (BI.isNotEmptyArray(str)) { self.formulaedit.insertField(self.fieldValueTextMap[str[0].substring(2, item.length - 1)]); } else if (self._isFunction(item)) { self.formulaedit.setFunction(item); } else { self.formulaedit.insertString(item); } }) }, getFormulaString: function () { return this.formulaedit.getFormulaString(); }, getUsedFields: function () { return this.formulaedit.getUsedFields(); }, getValue: function () { return this.formulaedit.getValue(); }, populate: function (fieldItems) { this.options.fieldItems = fieldItems; this.fieldTextValueMap = this._createFieldTextValueMap(fieldItems); this.fieldValueTextMap = this._createFieldValueTextMap(fieldItems); this.formulaedit.setFieldTextValueMap(this.fieldTextValueMap); this.formulatree.populate(fieldItems); this._bindDragEvent(); } }); BI.FormulaInsert.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.formula_insert", BI.FormulaInsert);BI.ButtonTextTreeLeafItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.ButtonTextTreeLeafItem.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-button-text-tree-item ", id: "", pId: "", height: 25, hgap: 0, lgap: 0, rgap: 0 }) }, _init: function () { BI.ButtonTextTreeLeafItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, lgap: o.lgap, rgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.button = BI.createWidget({ type: "bi.text_button", height: 25, stopEvent:true, value: BI.i18nText("BI-Formula_Insert"), cls: "formula-function-insert-button" }); this.button.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.ADD, self.text.getText()); }); this.button.invisible(); this.leaf = BI.createWidget({ type: "bi.htape", element: this, items: [{ el: this.button, width: 30 }, { el: this.text }], hgap: o.hgap }) this.element.hover(function () { self.button.visible(); }, function () { if (!self.isSelected()) { self.button.invisible(); } }) }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doHighLight: function () { this.text.doHighLight.apply(this.text, arguments); }, unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); }, setSelected: function (b) { BI.ButtonTextTreeLeafItem.superclass.setSelected.apply(this, arguments); if (BI.isNotNull(b) && b === true) { this.button.visible(); } else { this.button.invisible(); } }, getId: function () { return this.options.id; }, getPId: function () { return this.options.pId; } }); $.shortcut("bi.button_text_tree_leaf_item", BI.ButtonTextTreeLeafItem);/** * Created by roy on 15/9/14. */ BI.FunctionPane = BI.inherit(BI.Widget, { constants: { search_height: 20, height: 200, width: 370, column_size_editor: 170, column_size_right: 200, row_size: 30, hgap: 10, vgap: 10, hgap_offset: 5 }, _defaultConfig: function () { var conf = BI.FunctionPane.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: "bi-formula-function-pane", width: 320, height: 200, items: [] }) }, _init: function () { BI.FunctionPane.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this.constants; this.desLabel = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "normal", textWidth: 180 }); this.searchFunctionTree = BI.createWidget({ type: "bi.function_tree", cls: "style-top", redmark: function (val, ob) { return true } }); this.functiontree = BI.createWidget({ type: "bi.function_tree", cls: "style-top", items: o.items }); this.searcher = BI.createWidget({ type: "bi.searcher", adapter: this.functiontree, isAutoSearch: false, onSearch: function (op, populate) { var keyword = op.keyword.toLowerCase(); var resultArray = []; BI.each(o.items, function (i, item) { if (item.value.toLowerCase().indexOf(keyword) > -1 && !BI.isEmptyString(keyword)) { resultArray.push(item); } }); populate(resultArray, keyword); }, el: { type: "bi.small_search_editor" }, popup: { type: "bi.function_searcher_pane", searcher: self.searchFunctionTree }, height: 25, width: 160 }); this.functionLabel = BI.createWidget({ type: "bi.label" }); BI.createWidget({ element: this, type: "bi.window", width: c.width, cls: "style-out", columns: 2, rows: 2, columnSize: [c.column_size_editor, c.column_size_right], rowSize: [c.row_size, 'fill'], items: [ [ { el: { type: "bi.center_adapt", hgap: c.hgap_offset, items: [ { el: self.searcher } ] } }, { el: { type: "bi.center_adapt", cls: "style-left", items: [ { type: "bi.left", hgap: c.hgap, items: [ { el: self.functionLabel } ] } ] } } ], [ { el: self.functiontree }, { el: { type: "bi.absolute", cls: "style-inner", items: [ { el: self.desLabel, left: c.hgap, right: c.hgap, top: c.hgap, bottom: c.hgap } ] } } ] ] }); self.functiontree.on(BI.FunctionTree.FUNCTION_INSERT, function (value) { self.fireEvent(BI.FunctionPane.EVENT_INSET, value) }); self.functiontree.on(BI.FunctionTree.EVENT_DESCRIPTION_CHANGE, function (v) { self.desLabel.setText(v); }); self.functiontree.on(BI.FunctionTree.EVENT_CHANGE, function (v) { self.functionLabel.setText(v); }); self.searchFunctionTree.on(BI.FunctionTree.FUNCTION_INSERT, function (value) { self.fireEvent(BI.FunctionPane.EVENT_INSET, value) }); self.searchFunctionTree.on(BI.FunctionTree.EVENT_DESCRIPTION_CHANGE, function (v) { self.desLabel.setText(v); }); self.searchFunctionTree.on(BI.FunctionTree.EVENT_CHANGE, function (v) { self.functionLabel.setText(v); }); } }); BI.FunctionPane.EVENT_INSET = "EVENT_INSET"; $.shortcut("bi.function_pane", BI.FunctionPane);/** * Created by roy on 16/1/21. */ BI.FunctionSearcherPane = BI.inherit(BI.SearcherView, { _defaultConfig: function () { var conf = BI.FunctionSearcherPane.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-function-searcher-pane" }) }, _init: function () { BI.FunctionSearcherPane.superclass._init.apply(this, arguments); }, populate: function (searchResult, keyword) { searchResult || (searchResult = []); this.spliter.setVisible(false); this.searcher.populate(searchResult, keyword); this.searcher.expandAll(); this.searcher.doBehavior(keyword); }, }); $.shortcut("bi.function_searcher_pane", BI.FunctionSearcherPane);BI.FormulaFieldTree = BI.inherit(BI.Widget, { _const: { leafGap: 40 }, _defaultConfig: function () { return BI.extend(BI.FormulaFieldTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-field-tree", chooseType: 0, items: [] }); }, _init: function () { BI.FormulaFieldTree.superclass._init.apply(this, arguments); this.populate(this.options.items); }, _getFieldNum: function (map, fieldtype) { if (BI.isNotNull(map[fieldtype])) { return map[fieldtype].length } else { return 0 } }, populate: function (items) { var o = this.options, c = this._const, self = this; this.empty(); var map = {}; BI.each(items, function (i, typeItem) { BI.each(typeItem, function (i, item) { if (!map[item.fieldType]) { map[item.fieldType] = []; } map[item.fieldType].push(item); }) }); var nodes = [{ id: BICst.COLUMN.NUMBER, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Numberic_Field") + "(" + self._getFieldNum(map,BICst.COLUMN.NUMBER) + ")", value: BICst.COLUMN.NUMBER, isParent: true, open: items.length === 1 }]; if(items.length > 1){ nodes.push({ id: BICst.COLUMN.STRING, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Text_Field") + "(" + self._getFieldNum(map, BICst.COLUMN.STRING) + ")", value: BICst.COLUMN.STRING, isParent: true, open: false }); } if(items.length > 2){ nodes.push({ id: BICst.COLUMN.DATE, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Time_Field") + "(" + self._getFieldNum(map, BICst.COLUMN.DATE) + ")", value: BICst.COLUMN.DATE, isParent: true, open: false }); } BI.each(items, function(idx, typeItems){ BI.each(typeItems, function (i, item) { nodes.push(BI.extend({ id: BI.UUID(), pId: item.fieldType }, item, { type: "bi.tree_text_leaf_item", cls: "tree-text-leaf-item-draggable", textAlign: "left", lgap: c.leafGap })) }); }); this.fieldtree = BI.createWidget({ type: "bi.level_tree", element: this, chooseType: o.chooseType, expander: { isDefaultInit: true }, items: nodes }); this.fieldtree.on(BI.LevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.FormulaFieldTree.EVENT_CHANGE); self.fieldtree.setValue(); }) }, getValue: function () { return this.fieldtree.getValue(); }, setValue: function (v) { this.fieldtree.setValue(v); }, getAllLeaves: function () { return this.fieldtree.getAllLeaves() } }); BI.FormulaFieldTree.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.formula_field_tree", BI.FormulaFieldTree);/** * Created by roy on 15/9/14. */ BI.FunctionTree = BI.inherit(BI.Widget, { _const: { leafGap: 10, nodeTypes: [BICst.FUNCTION.MATH, BICst.FUNCTION.ARRAY, BICst.FUNCTION.DATE, BICst.FUNCTION.LOGIC, BICst.FUNCTION.OTHER, BICst.FUNCTION.TEXT] }, _defaultConfig: function () { return BI.extend(BI.FunctionTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-formula-function-tree", chooseType: 0, items: [], redmark: BI.emptyFn }); }, _init: function () { BI.FunctionTree.superclass._init.apply(this, arguments); this.populate(this.options.items); }, _getFieldNum: function (map, fieldtype) { if (BI.isNotNull(map[fieldtype])) { return map[fieldtype].length } else { return 0 } }, populate: function (items) { var o = this.options, c = this._const, self = this; this.empty(); var map = {}; o.items = items; BI.each(items, function (i, item) { if (!map[item.fieldType]) { map[item.fieldType] = []; } map[item.fieldType].push(item); }); this.nodes = [ { id: BICst.FUNCTION.MATH, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Numberic_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.MATH) + ")", value: BICst.FUNCTION.MATH, isParent: true, open: false }, { id: BICst.FUNCTION.TEXT, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Text_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.TEXT) + ")", value: BICst.FUNCTION.TEXT, isParent: true, open: false }, { id: BICst.FUNCTION.DATE, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Time_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.DATE) + ")", value: BICst.FUNCTION.DATE, isParent: true, open: false }, { id: BICst.FUNCTION.ARRAY, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Array_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.ARRAY) + ")", value: BICst.FUNCTION.ARRAY, isParent: true, open: false }, { id: BICst.FUNCTION.LOGIC, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Logic_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.LOGIC) + ")", value: BICst.FUNCTION.LOGIC, isParent: true, open: false }, { id: BICst.FUNCTION.OTHER, type: "bi.triangle_group_node", text: BI.i18nText("BI-Formula_Other_Function") + "(" + self._getFieldNum(map, BICst.FUNCTION.OTHER) + ")", value: BICst.FUNCTION.OTHER, isParent: true, open: false } ]; BI.each(items, function (i, item) { self.nodes.push(BI.extend({ id: BI.UUID(), pId: item.fieldType }, item, { type: "bi.button_text_tree_leaf_item", textAlign: "left", lgap: c.leafGap })) }); this.fieldtree = BI.createWidget({ type: "bi.level_tree", element: this, items: self.nodes, el: { behaviors: { "redmark": o.redmark } } }); this.fieldtree.on(BI.Controller.EVENT_CHANGE, function (type, value) { if (type === BI.Events.ADD) { self.fireEvent(BI.FunctionTree.FUNCTION_INSERT, value); } }); this.fieldtree.on(BI.LevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.FunctionTree.EVENT_CHANGE, self.getValue()); self.fireEvent(BI.FunctionTree.EVENT_DESCRIPTION_CHANGE, self._getDescription(self.getValue(), o.items)) self.fieldtree.setValue(self.getValue()); }) }, getValue: function () { return this.fieldtree.getValue(); }, setValue: function (v) { this.fieldtree.setValue(v); }, doBehavior: function () { this.fieldtree.doBehavior.apply(this.fieldtree, arguments) }, getNodeByValue: function (v) { return this.fieldtree.getNodeByValue(v) }, setTriggerExpand: function (v) { var node = this.fieldtree.getNodeById(v); node.showView(); }, setTriggerCollapse: function (v) { var node = this.fieldtree.getNodeById(v); node.hideView(); }, expandAll: function () { var self = this; BI.each(self._const.nodeTypes, function (i, id) { self.setTriggerExpand(id); }) }, _getDescription: function (v, items) { var description = ""; BI.each(items, function (i, item) { if (item.value === v[0]) { description = item.description; } }); return description }, getAllLeaves: function () { return this.fieldtree.getAllLeaves() } }); BI.FunctionTree.EVENT_CHANGE = "EVENT_CHANGE"; BI.FunctionTree.EVENT_DESCRIPTION_CHANGE = "EVENT_DESCRIPTION_CHANGE"; BI.FunctionTree.FUNCTION_INSERT = "FUNCTION_INSERT"; $.shortcut("bi.function_tree", BI.FunctionTree);/** * Created by GameJian on 2016/1/28. */ BI.ImageButtonHref = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.ImageButtonHref.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-image-button-href", title: BI.i18nText("BI-Add_Href") }) }, _init: function () { BI.ImageButtonHref.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.icon_button", cls: "img-href-font", title: o.title, height: 24, width: 24 }); this.input = BI.createWidget({ type: "bi.clear_editor", watermark: BI.i18nText("BI-Input_Href"), width: 255, height: 30 }); this.input.on(BI.ClearEditor.EVENT_CONFIRM, function () { self.combo.hideView(); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, direction: "bottom,left", adjustYOffset: 3, el: this.trigger, popup: { el: this.input, stopPropagation: false, minWidth: 255 } }); this.combo.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () { self.input.focus() }); this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () { self.fireEvent(BI.ImageButtonHref.EVENT_CHANGE, arguments) }) }, isSelected: function(){ return this.combo.isViewVisible(); }, showView: function(){ this.combo.showView(); }, hideView: function () { this.combo.hideView(); }, getValue: function () { return this.input.getValue(); }, setValue: function (url) { this.input.setValue(url) } }); BI.ImageButtonHref.EVENT_CHANGE = "BI.ImageButtonHref.EVENT_CHANGE"; $.shortcut("bi.image_button_href", BI.ImageButtonHref);/** * 图片尺寸控件 * Created by GameJian on 2016/1/28. */ BI.ImageButtonSizeCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.ImageButtonSizeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-image-button-size-combo", title: BI.i18nText("BI-Image_Size") }) }, _init: function () { BI.ImageButtonSizeCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.icon_button", cls: "img-size-font", title: o.title, width: 24, height: 24 }); this.sizeChooser = BI.createWidget({ type: "bi.image_button_size" }); this.sizeChooser.on(BI.ImageButtonSize.EVENT_CHANGE, function(){ self.fireEvent(BI.ImageButtonSizeCombo.EVENT_CHANGE,arguments) }); this.combo = BI.createWidget({ type: "bi.combo", element: this, isNeedAdjustWidth: false, direction: "top", adjustYOffset: 3, offsetStyle: "right", el: this.trigger, popup: { el: this.sizeChooser, stopPropagation: false } }); }, setValue: function (v) { this.sizeChooser.setValue(v); }, getValue: function () { return this.sizeChooser.getValue(); } }); BI.ImageButtonSizeCombo.EVENT_CHANGE = "ImageButtonSizeCombo.EVENT_CHANGE"; $.shortcut("bi.image_button_size_combo", BI.ImageButtonSizeCombo);/** * 单选框 * Created by GameJian on 2016/1/28. */ BI.ImageButtonSize = BI.inherit(BI.Widget, { _defaultConfig: function(){ return BI.extend(BI.ImageButtonSize.superclass._defaultConfig.apply(this, arguments),{ baseCls: "bi-image-button-size", width: 230, height: 30 }) }, _init:function() { BI.ImageButtonSize.superclass._init.apply(this, arguments); var self = this, o = this.options; this.sizeChooser = BI.createWidget({ type: "bi.button_group", scrollable: false, items: BI.createItems([{ text: BI.i18nText("BI-Original_Size"), cls: "image-button-size-button-group", width: 55, selected: true, value: BICst.IMAGE_RESIZE_MODE.ORIGINAL },{ text: BI.i18nText("BI-Equal_Size_Adapt"), cls: "image-button-size-button-group", width: 67, value: BICst.IMAGE_RESIZE_MODE.EQUAL },{ text: BI.i18nText("BI-Widget_Size_Adapt"), cls: "image-button-size-button-group", width: 67, value: BICst.IMAGE_RESIZE_MODE.STRETCH }],{ type: "bi.image_button_size_radio" }), layouts: [{ type: "bi.left", hgap: 5 }] }); this.sizeChooser.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.sizeChooser.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.fireEvent(BI.ImageButtonSize.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.left", element: this, items: [this.sizeChooser], hgap: 5 }); this.getValue() }, getValue: function () { return this.sizeChooser.getValue()[0] }, setValue: function (v) { this.sizeChooser.setValue(v) } }); BI.ImageButtonSize.EVENT_CHANGE = "BI.ImageButtonSize.EVENT_CHANGE"; $.shortcut("bi.image_button_size" , BI.ImageButtonSize);/** * 单选框 * Created by GameJian on 2016/1/28. */ BI.ImageButtonSizeRadio = BI.inherit(BI.BasicButton, { _defaultConfig: function(){ return BI.extend(BI.ImageButtonSizeRadio.superclass._defaultConfig.apply(this, arguments),{ width: 65, height: 30, text: "", selected: false }) }, _init:function() { BI.ImageButtonSizeRadio.superclass._init.apply(this, arguments); var self = this, o = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: o.selected }); this.label = BI.createWidget({ type: "bi.label", textAlign: "left", lgap: 5, rgap: 0, textHeight: o.height, height: o.height, text: o.text }); this.radio.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(!self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ element: this, type: "bi.absolute", items: [{ el: this.radio, left: 0, top: 8.5 },{ el: this.label, left: 13 }] }); }, doClick: function () { BI.ImageButtonSizeRadio.superclass.doClick.apply(this, arguments); this.radio.setSelected(this.isSelected()); }, setSelected: function (v) { BI.ImageButtonSizeRadio.superclass.setSelected.apply(this, arguments); this.radio.setSelected(v); } }); $.shortcut("bi.image_button_size_radio" , BI.ImageButtonSizeRadio);/** * 图片组件 * Created by GameJian on 2016/1/26. */ BI.UploadImage = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.UploadImage.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-upload-image" }) }, _init: function () { BI.UploadImage.superclass._init.apply(this, arguments); var self = this, o = this.options; this.label = BI.createWidget({ type: "bi.text_button", trigger: "dblclick", cls: "upload-image-text-button-label", whiteSpace: "normal", text: BI.i18nText("BI-DoubleClick_To_Upload_Image") }); this.file = BI.createWidget({ type: "bi.multifile_editor", accept: "*.jpg;*.png;*.gif;*.bmp;*.jpeg;", maxSize: 1024 * 1024 * 100, title: BI.i18nText("BI-Upload_Image") }); this.img = BI.createWidget({ type: "bi.image_button", invalid: true, width: "100%", height: "100%" }); this.label.on(BI.TextButton.EVENT_CHANGE, function () { if (self.isValid()) { self.file.select(); } }); this.file.on(BI.MultifileEditor.EVENT_CHANGE, function (data) { this.upload(); }); //直接把图片保存到resource目录下面 this.file.on(BI.MultifileEditor.EVENT_UPLOADED, function () { var files = this.getValue(); var file = files[files.length - 1]; var attachId = file.attach_id, fileName = file.filename; var imageId = attachId + "_" + fileName; BI.requestAsync("fr_bi_base", "save_upload_image", { attach_id: attachId }, function (res) { self.img.setValue(imageId); self.img.setSrc(BI.UploadImage.getImageSrc(imageId)); self._check(); self._setSize("auto", "auto"); self.fireEvent(BI.UploadImage.EVENT_CHANGE, imageId); }) }); this.uploadWrapper = BI.createWidget({ type: "bi.absolute", items: [{ el: { type: "bi.icon_button", cls: "upload-image-icon-button img-upload-font", width: 24, height: 24 }, top: 0, right: 0, bottom: 0, left: 0 }, { el: this.file, top: 0, right: 0, bottom: 0, left: 0 }], width: 24, height: 24 }); this.del = BI.createWidget({ type: "bi.bubble_combo", el: { type: "bi.icon_button", cls: "upload-image-icon-button img-shutdown-font", title: BI.i18nText("BI-Basic_Delete"), height: 24, width: 24 }, popup: { type: "bi.bubble_bar_popup_view", buttons: [{ value: BI.i18nText(BI.i18nText("BI-Basic_Sure")), handler: function () { self.fireEvent(BI.UploadImage.EVENT_DESTROY); } }, { value: BI.i18nText("BI-Basic_Cancel"), level: "ignore", handler: function () { self.del.hideView(); } }], el: { type: "bi.vertical_adapt", items: [{ type: "bi.label", text: BI.i18nText("BI-Sure_Delete_Current_Component"), cls: "upload-image-delete-label", textAlign: "left", width: 300 }], width: 300, height: 100, hgap: 20 }, maxHeight: 140, minWidth: 340 }, invisible: true, stopPropagation: true }); this.size = BI.createWidget({ type: "bi.image_button_size_combo", cls: "upload-image-icon-button" }); this.size.on(BI.ImageButtonSizeCombo.EVENT_CHANGE, function () { self._sizeChange(self.size.getValue()); self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments) }); this.href = BI.createWidget({ type: "bi.image_button_href", cls: "upload-image-icon-button" }); this.href.on(BI.ImageButtonHref.EVENT_CHANGE, function () { if (BI.isNotEmptyString(self.href.getValue())) { self.img.setValid(true) } else { self.img.setValid(false) } self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments) }); this.img.on(BI.ImageButton.EVENT_CHANGE, function () { window.open(BI.Func.formatAddress(self.href.getValue())); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: { type: "bi.absolute", scrollable: false, items: [{ el: this.img }] }, left: 0, right: 0, top: 0, bottom: 0 }, { el: this.label, left: 10, right: 10, top: 10, bottom: 10 }, { el: this.del, right: 4, top: 8 }, { el: this.href, right: 36, top: 8 }, { el: this.size, right: 68, top: 8 }, { el: this.uploadWrapper, right: 100, top: 8 }] }); this.setToolbarVisible(false); this.img.invisible(); }, _check: function () { var f = BI.isNotEmptyString(this.img.getValue()); this.label.setVisible(!f); this.img.visible(f); }, _setSize: function (w, h) { this.img.setImageWidth(w); this.img.setImageHeight(h) }, _sizeChange: function (size) { var self = this, o = this.options; switch (size) { case BICst.IMAGE_RESIZE_MODE.ORIGINAL: self._setSize("auto", "auto"); break; case BICst.IMAGE_RESIZE_MODE.EQUAL: self._setSize("auto", "auto"); var width = this.img.getImageWidth(), height = this.img.getImageHeight(); var W = this.element.width(), H = this.element.height(); if (W / H > width / height) { self._setSize("auto", "100%"); } else { self._setSize("100%", "auto"); } break; case BICst.IMAGE_RESIZE_MODE.STRETCH: self._setSize("100%", "100%"); break; default : self._setSize("auto", "auto"); } }, setToolbarVisible: function (v) { this.uploadWrapper.setVisible(v); this.size.setVisible(v); this.href.setVisible(v); this.del.setVisible(v); }, getValue: function () { return {href: this.href.getValue(), size: this.size.getValue(), src: this.img.getValue()} }, setValue: function (v) { var self = this; v || (v = {}); if (BI.isNotEmptyString(v.href)) { self.img.setValid(true) } this.href.setValue(v.href); this.size.setValue(v.size); this.img.setValue(v.src); if (BI.isNotEmptyString(v.src)) { this.img.setSrc(BI.UploadImage.getImageSrc(v.src)); } this._check(); this._sizeChange(v.size) }, resize: function () { this._sizeChange(this.size.getValue()); } }); BI.extend(BI.UploadImage, { getImageSrc: function (src) { return BI.servletURL + "?op=fr_bi&cmd=get_uploaded_image&image_id=" + src; } }); BI.UploadImage.EVENT_DESTROY = "EVENT_DESTROY"; BI.UploadImage.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.upload_image", BI.UploadImage);/** * 交互行为布局 * * * Created by GUY on 2016/7/23. * @class BI.InteractiveArrangement * @extends BI.Widget */ BI.InteractiveArrangement = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.InteractiveArrangement.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-interactive-arrangement", resizable: true, isNeedReLayout: true, isNeedResizeContainer: true, layoutType: BI.Arrangement.LAYOUT_TYPE.FREE, items: [] }); }, _init: function () { BI.InteractiveArrangement.superclass._init.apply(this, arguments); var self = this, o = this.options; this.arrangement = BI.createWidget({ type: "bi.adaptive_arrangement", element: this, resizable: o.resizable, isNeedReLayout: o.isNeedReLayout, isNeedResizeContainer: o.isNeedResizeContainer, layoutType: o.layoutType, items: o.items }); this.arrangement.on(BI.AdaptiveArrangement.EVENT_RESIZE, function () { self.fireEvent(BI.InteractiveArrangement.EVENT_RESIZE, arguments); }); this.arrangement.on(BI.AdaptiveArrangement.EVENT_ELEMENT_RESIZE, function (id, size) { var p = self._getRegionClientPosition(id); self.draw({ left: p.left, top: p.top }, size, id); }); this.arrangement.on(BI.AdaptiveArrangement.EVENT_ELEMENT_STOP_RESIZE, function (id, size) { self.stopDraw(); self.setRegionSize(id, size); }); this.tags = []; }, _isEqual: function (num1, num2) { return this.arrangement._isEqual(num1, num2); }, _getScrollOffset: function () { return this.arrangement._getScrollOffset(); }, _positionAt: function (position, regions) { var self = this; regions = regions || this.getAllRegions(); var left = [], center = [], right = [], top = [], middle = [], bottom = []; BI.each(regions, function (i, region) { var client = self._getRegionClientPosition(region.id); if (Math.abs(client.left - position.left) <= 3) { left.push(region); } if (Math.abs(client.left + client.width / 2 - position.left) <= 3) { center.push(region); } if (Math.abs(client.left + client.width - position.left) <= 3) { right.push(region); } if (Math.abs(client.top - position.top) <= 3) { top.push(region); } if (Math.abs(client.top + client.height / 2 - position.top) <= 3) { middle.push(region); } if (Math.abs(client.top + client.height - position.top) <= 3) { bottom.push(region); } }); return { left: left, center: center, right: right, top: top, middle: middle, bottom: bottom } }, _getRegionClientPosition: function (name) { var region = this.getRegionByName(name); var offset = this.arrangement._getScrollOffset(); return { top: region.top - offset.top, left: region.left - offset.left, width: region.width, height: region.height, id: region.id } }, _vAlign: function (position, regions) { var self = this; var vs = this._positionAt(position, regions); var positions = []; var l; if (vs.left.length > 0) { l = this._getRegionClientPosition(vs.left[0].id).left; } else if (vs.right.length > 0) { var temp = this._getRegionClientPosition(vs.right[0].id); l = temp.left + temp.width; } var rs = vs.left.concat(vs.right); BI.each(rs, function (i, region) { var p = self._getRegionClientPosition(region.id); if (self._isEqual(p.left, l) || self._isEqual(p.left + p.width, l)) { var topPoint = { top: p.top + p.height / 2, left: l }; positions.push({ id: region.id, start: topPoint, end: { left: l, top: position.top } }); } }); return positions; }, _leftAlign: function (position, size, regions) { var self = this; return this._vAlign({ left: position.left, top: position.top + size.height / 2 }, regions); }, _rightAlign: function (position, size, regions) { var self = this; return this._vAlign({ left: position.left + size.width, top: position.top + size.height / 2 }, regions); }, _hAlign: function (position, regions) { var self = this; var hs = this._positionAt(position, regions); var positions = []; var t; if (hs.top.length > 0) { var temp = this._getRegionClientPosition(hs.top[0].id); t = temp.top; } else if (hs.bottom.length > 0) { var temp = this._getRegionClientPosition(hs.bottom[0].id); t = temp.top + temp.height; } var rs = hs.top.concat(hs.bottom); BI.each(rs, function (i, region) { var p = self._getRegionClientPosition(region.id); if (self._isEqual(p.top, t) || self._isEqual(p.top + p.height, t)) { var leftPoint = { top: t, left: p.left + p.width / 2 }; positions.push({ id: p.id, start: leftPoint, end: { left: position.left, top: t } }); } }); return positions; }, _topAlign: function (position, size, regions) { var self = this; return this._hAlign({ left: position.left + size.width / 2, top: position.top }, regions); }, _bottomAlign: function (position, size, regions) { var self = this; return this._hAlign({ left: position.left + size.width / 2, top: position.top + size.height }, regions); }, _centerAlign: function (position, size, regions) { var self = this; var cs = this._positionAt({ left: position.left + size.width / 2, top: position.top + size.height / 2 }, regions); var positions = []; var l; if (cs.center.length > 0) { var temp = this._getRegionClientPosition(cs.center[0].id); l = temp.left + temp.width / 2; } BI.each(cs.center, function (i, region) { var p = self._getRegionClientPosition(region.id); if (self._isEqual(p.left + p.width / 2, l)) { var topPoint = { top: p.top + p.height / 2, left: p.left + p.width / 2 }; positions.push({ id: p.id, start: topPoint, end: { left: l, top: position.top + size.height / 2 } }); } }); return positions; }, _middleAlign: function (position, size, regions) { var self = this; var cs = this._positionAt({ left: position.left + size.width / 2, top: position.top + size.height / 2 }, regions); var positions = []; var t; if (cs.middle.length > 0) { var temp = this._getRegionClientPosition(cs.middle[0].id); t = temp.top + temp.height / 2; } BI.each(cs.middle, function (i, region) { var p = self._getRegionClientPosition(region.id); if (self._isEqual(p.top + p.height / 2, t)) { var topPoint = { top: p.top + p.height / 2, left: p.left + p.width / 2 }; positions.push({ id: p.id, start: topPoint, end: { left: position.left + size.width / 2, top: t } }); } }); return positions; }, _drawOneTag: function (start, end) { var s = BI.createWidget({ type: "bi.icon_button", //invisible: true, width: 13, height: 13, cls: "drag-tag-font interactive-arrangement-dragtag-icon" }); var e = BI.createWidget({ type: "bi.icon_button", //invisible: true, width: 13, height: 13, cls: "drag-tag-font interactive-arrangement-dragtag-icon" }); if (this._isEqual(start.left, end.left)) { var line = BI.createWidget({ type: "bi.layout", //invisible: true, cls: "interactive-arrangement-dragtag-line", width: 1, height: Math.abs(start.top - end.top) }); } else { var line = BI.createWidget({ type: "bi.layout", //invisible: true, cls: "interactive-arrangement-dragtag-line", height: 1, width: Math.abs(start.left - end.left) }); } BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: s, left: start.left - 6, top: start.top - 7 }, { el: e, left: end.left - 6, top: end.top - 7 }, { el: line, left: Math.min(start.left, end.left), top: Math.min(start.top, end.top) }] }); this.tags.push(s); this.tags.push(e); this.tags.push(line); }, stopDraw: function () { BI.each(this.tags, function (i, w) { w.destroy(); }); this.tags = []; }, _getRegionExcept: function (name, regions) { var other = []; BI.each(regions || this.getAllRegions(), function (i, region) { if (!(name && region.id === name)) { other.push(region); } }); return other; }, getClientWidth: function () { return this.arrangement.getClientWidth(); }, getClientHeight: function () { return this.arrangement.getClientHeight(); }, getPosition: function (name, position, size) { var regions = this.getAllRegions(); var me; if (name) { me = this._getRegionClientPosition(name); } var other = this._getRegionExcept(name, regions); position = position || { left: me.left, top: me.top }; size = size || { width: me.width, height: me.height }; var left = this._leftAlign(position, size, other); var right = this._rightAlign(position, size, other); var top = this._topAlign(position, size, other, other); var bottom = this._bottomAlign(position, size, other); var center = this._centerAlign(position, size, other); var middle = this._middleAlign(position, size, other); BI.each(center, function (i, pos) { position.left = pos.end.left - size.width / 2; }); BI.each(right, function (i, pos) { position.left = pos.end.left - size.width; }); BI.each(left, function (i, pos) { position.left = pos.end.left; }); BI.each(middle, function (i, pos) { position.top = pos.end.top - size.height / 2; }); BI.each(bottom, function (i, pos) { position.top = pos.end.top - size.height; }); BI.each(top, function (i, pos) { position.top = pos.end.top; }); return position; }, //position不动 变size getSize: function (name, position, size) { var regions = this.getAllRegions(); var me; if (name) { me = this._getRegionClientPosition(name); } var other = this._getRegionExcept(name, regions); position = position || { left: me.left, top: me.top }; size = size || { width: me.width, height: me.height }; var left = this._leftAlign(position, size, other); var right = this._rightAlign(position, size, other); var top = this._topAlign(position, size, other, other); var bottom = this._bottomAlign(position, size, other); var center = this._centerAlign(position, size, other); var middle = this._middleAlign(position, size, other); BI.each(center, function (i, pos) { size.width = (pos.end.left - position.left) * 2; }); BI.each(right, function (i, pos) { size.width = pos.end.left - position.left; }); BI.each(left, function (i, pos) { }); BI.each(middle, function (i, pos) { size.height = (pos.end.top - position.top) * 2; }); BI.each(bottom, function (i, pos) { size.height = pos.end.top - position.top; }); BI.each(top, function (i, pos) { }); return size; }, draw: function (position, size, name) { var self = this; this.stopDraw(); switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: case BI.Arrangement.LAYOUT_TYPE.FREE: var other = this._getRegionExcept(name); var left = this._leftAlign(position, size, other); var right = this._rightAlign(position, size, other); var top = this._topAlign(position, size, other); var bottom = this._bottomAlign(position, size, other); var center = this._centerAlign(position, size, other); var middle = this._middleAlign(position, size, other); BI.each(center, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); BI.each(right, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); BI.each(left, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); BI.each(middle, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); BI.each(bottom, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); BI.each(top, function (i, pos) { self._drawOneTag(pos.start, pos.end); }); break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } }, getDirectRelativeRegions: function (name, direction) { return this.arrangement.getDirectRelativeRegions(name, direction); }, addRegion: function (region, position) { this.stopDraw(); return this.arrangement.addRegion(region, position); }, deleteRegion: function (name) { return this.arrangement.deleteRegion(name); }, setRegionSize: function (name, size) { size = this.getSize(name, null, size); return this.arrangement.setRegionSize(name, size); }, setPosition: function (position, size) { var self = this; this.stopDraw(); if (position.left > 0 && position.top > 0) { switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: break; case BI.Arrangement.LAYOUT_TYPE.FREE: position = this.getPosition(null, position, size); this.draw(position, size); break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } } var at = this.arrangement.setPosition(position, size); return at; }, setRegionPosition: function (name, position) { if (position.left > 0 && position.top > 0) { switch (this.getLayoutType()) { case BI.Arrangement.LAYOUT_TYPE.ADAPTIVE: break; case BI.Arrangement.LAYOUT_TYPE.FREE: position = this.getPosition(name, position); break; case BI.Arrangement.LAYOUT_TYPE.GRID: break; } } return this.arrangement.setRegionPosition(name, position); }, zoom: function (ratio) { this.arrangement.zoom(ratio); }, resize: function () { return this.arrangement.resize(); }, relayout: function () { return this.arrangement.relayout(); }, setLayoutType: function (type) { this.arrangement.setLayoutType(type); }, getLayoutType: function () { return this.arrangement.getLayoutType(); }, getLayoutRatio: function () { return this.arrangement.getLayoutRatio(); }, getHelper: function () { return this.arrangement.getHelper(); }, getRegionByName: function (name) { return this.arrangement.getRegionByName(name); }, getAllRegions: function () { return this.arrangement.getAllRegions(); }, revoke: function () { return this.arrangement.revoke(); }, populate: function (items) { var self = this; this.arrangement.populate(items); } }); BI.InteractiveArrangement.EVENT_RESIZE = "InteractiveArrangement.EVENT_RESIZE"; $.shortcut('bi.interactive_arrangement', BI.InteractiveArrangement);/** * Created by zcf on 2016/9/26. */ BI.IntervalSlider = BI.inherit(BI.Widget, { _constant: { EDITOR_WIDTH: 90, EDITOR_HEIGHT: 30, HEIGHT: 28, SLIDER_WIDTH_HALF: 15, SLIDER_WIDTH: 30, SLIDER_HEIGHT: 30, TRACK_HEIGHT: 24 }, _defaultConfig: function () { return BI.extend(BI.IntervalSlider.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-slider bi-slider-track" }) }, _init: function () { BI.IntervalSlider.superclass._init.apply(this, arguments); var self = this; var c = this._constant; this.enable = false; this.valueOne = ""; this.valueTwo = ""; this.calculation = new BI.AccurateCalculationModel(); this.backgroundTrack = BI.createWidget({ type: "bi.layout", cls: "background-track", height: c.TRACK_HEIGHT }); this.grayTrack = BI.createWidget({ type: "bi.layout", cls: "gray-track", height: 8 }); this.blueTrack = BI.createWidget({ type: "bi.layout", cls: "blue-track", height: 8 }); this.track = this._createTrackWrapper(); this.labelOne = BI.createWidget({ type: "bi.sign_editor", cls: "slider-editor-button", errorText: "", allowBlank: false, height: c.HEIGHT, width: c.EDITOR_WIDTH, validationChecker: function (v) { return self._checkValidation(v); }, quitChecker: function (v) { return self._checkValidation(v); } }); this.labelOne.on(BI.Editor.EVENT_CONFIRM, function () { var percent = self._getPercentByValue(this.getValue()); var significantPercent = BI.parseFloat(percent.toFixed(1));//分成1000份 self._setLabelOnePosition(significantPercent); self._setSliderOnePosition(significantPercent); self._setBlueTrack(); self.fireEvent(BI.IntervalSlider.EVENT_CHANGE); }); this.labelTwo = BI.createWidget({ type: "bi.sign_editor", cls: "slider-editor-button", errorText: "", allowBlank: false, height: c.HEIGHT, width: c.EDITOR_WIDTH, validationChecker: function (v) { return self._checkValidation(v); }, quitChecker: function (v) { return self._checkValidation(v); } }); this.labelTwo.on(BI.Editor.EVENT_CONFIRM, function () { var percent = self._getPercentByValue(this.getValue()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setLabelTwoPosition(significantPercent); self._setSliderTwoPosition(significantPercent); self._setBlueTrack(); self.fireEvent(BI.IntervalSlider.EVENT_CHANGE); }); this.sliderOne = BI.createWidget({ type: "bi.single_slider_slider" }); this.sliderOne.element.draggable({ axis: "x", containment: this.grayTrack.element, scroll: false, drag: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setLabelOnePosition(significantPercent); var v = self._getValueByPercent(significantPercent); self.labelOne.setValue(v); self.valueOne = v; self._setBlueTrack(); }, stop: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setSliderOnePosition(significantPercent); self.fireEvent(BI.IntervalSlider.EVENT_CHANGE); } }); this.sliderTwo = BI.createWidget({ type: "bi.single_slider_slider" }); this.sliderTwo.element.draggable({ axis: "x", containment: this.grayTrack.element, scroll: false, drag: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setLabelTwoPosition(significantPercent); var v = self._getValueByPercent(significantPercent); self.labelTwo.setValue(v); self.valueTwo = v; self._setBlueTrack(); }, stop: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setSliderTwoPosition(significantPercent); self.fireEvent(BI.IntervalSlider.EVENT_CHANGE); } }); this._setVisible(false); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.track, width: "100%", height: c.TRACK_HEIGHT }] }], hgap: 7, height: c.TRACK_HEIGHT }, top: 33, left: 0, width: "100%" }, this._createLabelWrapper(), this._createSliderWrapper() ] }) }, _createLabelWrapper: function () { var c = this._constant; return { el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.labelOne, top: 0, left: "0%" }] }, { type: "bi.absolute", items: [{ el: this.labelTwo, top: 0, left: "100%" }] }], rgap: c.EDITOR_WIDTH, height: 90 }, top: 0, left: 0, width: "100%" } }, _createSliderWrapper: function () { var c = this._constant; return { el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.sliderOne, top: 0, left: "0%" }] }, { type: "bi.absolute", items: [{ el: this.sliderTwo, top: 0, left: "100%" }] }], hgap: c.SLIDER_WIDTH_HALF, height: c.SLIDER_HEIGHT }, top: 30, left: 0, width: "100%" } }, _createTrackWrapper: function () { return BI.createWidget({ type: "bi.absolute", items: [{ el: this.backgroundTrack, width: "100%" }, { el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.grayTrack, top: 0, left: 0, width: "100%" }, { el: this.blueTrack, top: 0, left: 0, width: "0%" }] }], hgap: 8, height: 8 }, top: 8, left: 0, width: "100%" }] }) }, _checkValidation: function (v) { return !(BI.isNull(v) || v < this.min || v > this.max) }, _checkOverlap: function () { var labelOneLeft = this.labelOne.element[0].offsetLeft; var labelTwoLeft = this.labelTwo.element[0].offsetLeft; if (labelOneLeft <= labelTwoLeft) { if ((labelTwoLeft - labelOneLeft) < 90) { this.labelTwo.element.css({"top": 60}); } else { this.labelTwo.element.css({"top": 0}); } } else { if ((labelOneLeft - labelTwoLeft) < 90) { this.labelTwo.element.css({"top": 60}); } else { this.labelTwo.element.css({"top": 0}); } } }, _setLabelOnePosition: function (percent) { this.labelOne.element.css({"left": percent + "%"}); this._checkOverlap(); }, _setLabelTwoPosition: function (percent) { this.labelTwo.element.css({"left": percent + "%"}); this._checkOverlap(); }, _setSliderOnePosition: function (percent) { this.sliderOne.element.css({"left": percent + "%"}); }, _setSliderTwoPosition: function (percent) { this.sliderTwo.element.css({"left": percent + "%"}); }, _setBlueTrackLeft: function (percent) { this.blueTrack.element.css({"left": percent + "%"}); }, _setBlueTrackWidth: function (percent) { this.blueTrack.element.css({"width": percent + "%"}); }, _setBlueTrack: function () { var percentOne = this._getPercentByValue(this.labelOne.getValue()); var percentTwo = this._getPercentByValue(this.labelTwo.getValue()); if (percentOne <= percentTwo) { this._setBlueTrackLeft(percentOne); this._setBlueTrackWidth(percentTwo - percentOne); } else { this._setBlueTrackLeft(percentTwo); this._setBlueTrackWidth(percentOne - percentTwo); } }, _setAllPosition: function (one, two) { this._setSliderOnePosition(one); this._setLabelOnePosition(one); this._setSliderTwoPosition(two); this._setLabelTwoPosition(two); this._setBlueTrack(); }, _setVisible: function (visible) { this.sliderOne.setVisible(visible); this.sliderTwo.setVisible(visible); this.labelOne.setVisible(visible); this.labelTwo.setVisible(visible); }, _setErrorText: function () { var errorText = BI.i18nText("BI-Please_Enter") + this.min + "-" + this.max + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Basic_Number"); this.labelOne.setErrorText(errorText); this.labelTwo.setErrorText(errorText); }, _getGrayTrackLength: function () { return this.grayTrack.element[0].scrollWidth }, _getValueByPercent: function (percent) {//return (((max-min)*percent)/100+min) var sub = this.calculation.accurateSubtraction(this.max, this.min); var mul = this.calculation.accurateMultiplication(sub, percent); var div = this.calculation.accurateDivisionTenExponent(mul, 2); return this.calculation.accurateAddition(div, this.min); }, _getPercentByValue: function (v) { return (v - this.min) * 100 / (this.max - this.min); }, _setDraggableEnable: function (enable) { if (enable) { this.sliderOne.element.draggable("enable"); this.sliderTwo.element.draggable("enable") } else { this.sliderOne.element.draggable("disable"); this.sliderTwo.element.draggable("disable") } }, getValue: function () { if (this.valueOne <= this.valueTwo) { return {min: this.valueOne, max: this.valueTwo} } else { return {min: this.valueTwo, max: this.valueOne} } }, setMinAndMax: function (v) { var minNumber = BI.parseFloat(v.min); var maxNumber = BI.parseFloat(v.max); if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber >= minNumber )) { this.min = minNumber; this.max = maxNumber; this.valueOne = minNumber; this.valueTwo = maxNumber; this._setDraggableEnable(true); } if (maxNumber === minNumber) { this._setDraggableEnable(false); } }, setValue: function (v) { var valueOne = BI.parseFloat(v.min); var valueTwo = BI.parseFloat(v.max); if (!isNaN(valueOne) && !isNaN(valueTwo)) { if (this._checkValidation(valueOne)) { this.valueOne = valueOne; } if (this._checkValidation(valueTwo)) { this.valueTwo = valueTwo; } if (valueOne < this.min) { this.valueOne = this.min; } if (valueTwo > this.max) { this.valueTwo = this.max; } } }, reset: function () { this._setVisible(false); this.enable = false; this.valueOne = ""; this.valueTwo = ""; this.min = NaN; this.max = NaN; this._setBlueTrackWidth(0); }, populate: function () { if (!isNaN(this.min) && !isNaN(this.max)) { this.enable = true; this._setVisible(true); this._setErrorText(); if ((BI.isNumeric(this.valueOne) || BI.isNotEmptyString(this.valueOne)) && (BI.isNumeric(this.valueTwo) || BI.isNotEmptyString(this.valueTwo))) { this.labelOne.setValue(this.valueOne); this.labelTwo.setValue(this.valueTwo); this._setAllPosition(this._getPercentByValue(this.valueOne), this._getPercentByValue(this.valueTwo)); } else { this.labelOne.setValue(this.min); this.labelTwo.setValue(this.max); this._setAllPosition(0, 100) } } } }); BI.IntervalSlider.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.interval_slider", BI.IntervalSlider);/** * Created by zcf on 2017/3/1. * 万恶的IEEE-754 * 使用字符串精确计算含小数加法、减法、乘法和10的指数倍除法,支持负数 */ BI.AccurateCalculationModel = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.AccurateCalculationModel.superclass._defaultConfig.apply(this, arguments), { baseCls: "" }) }, _init: function () { BI.AccurateCalculationModel.superclass._init.apply(this, arguments); }, _getMagnitude: function (n) { var magnitude = "1"; for (var i = 0; i < n; i++) { magnitude += "0"; } return BI.parseInt(magnitude); }, _formatDecimal: function (stringNumber1, stringNumber2) { if (stringNumber1.numDecimalLength === stringNumber2.numDecimalLength) { return; } var magnitudeDiff = stringNumber1.numDecimalLength - stringNumber2.numDecimalLength; if (magnitudeDiff > 0) { var needAddZero = stringNumber2 } else { var needAddZero = stringNumber1; magnitudeDiff = (0 - magnitudeDiff); } for (var i = 0; i < magnitudeDiff; i++) { if (needAddZero.numDecimal === "0" && i === 0) { continue } needAddZero.numDecimal += "0" } }, _stringNumberFactory: function (num) { var strNum = num.toString(); var numStrArray = strNum.split("."); var numInteger = numStrArray[0]; if (numStrArray.length === 1) { var numDecimal = "0"; var numDecimalLength = 0; } else { var numDecimal = numStrArray[1]; var numDecimalLength = numStrArray[1].length; } return { "numInteger": numInteger, "numDecimal": numDecimal, "numDecimalLength": numDecimalLength } }, _accurateSubtraction: function (num1, num2) {//num1-num2 && num1>num2 var stringNumber1 = this._stringNumberFactory(num1); var stringNumber2 = this._stringNumberFactory(num2); //整数部分计算 var integerResult = BI.parseInt(stringNumber1.numInteger) - BI.parseInt(stringNumber2.numInteger); //小数部分 this._formatDecimal(stringNumber1, stringNumber2); var decimalMaxLength = getDecimalMaxLength(stringNumber1, stringNumber2); if (BI.parseInt(stringNumber1.numDecimal) >= BI.parseInt(stringNumber2.numDecimal)) { var decimalResultTemp = (BI.parseInt(stringNumber1.numDecimal) - BI.parseInt(stringNumber2.numDecimal)).toString(); var decimalResult = addZero(decimalResultTemp, decimalMaxLength); } else {//否则借位 integerResult--; var borrow = this._getMagnitude(decimalMaxLength); var decimalResultTemp = (borrow + BI.parseInt(stringNumber1.numDecimal) - BI.parseInt(stringNumber2.numDecimal)).toString(); var decimalResult = addZero(decimalResultTemp, decimalMaxLength); } var result = integerResult + "." + decimalResult; return BI.parseFloat(result); function getDecimalMaxLength(num1, num2) { if (num1.numDecimal.length >= num2.numDecimal.length) { return num1.numDecimal.length } return num2.numDecimal.length } function addZero(resultTemp, length) { var diff = length - resultTemp.length; for (var i = 0; i < diff; i++) { resultTemp = "0" + resultTemp; } return resultTemp } }, _accurateAddition: function (num1, num2) {//加法结合律 var stringNumber1 = this._stringNumberFactory(num1); var stringNumber2 = this._stringNumberFactory(num2); //整数部分计算 var integerResult = BI.parseInt(stringNumber1.numInteger) + BI.parseInt(stringNumber2.numInteger); //小数部分 this._formatDecimal(stringNumber1, stringNumber2); var decimalResult = (BI.parseInt(stringNumber1.numDecimal) + BI.parseInt(stringNumber2.numDecimal)).toString(); if (decimalResult !== "0") { if (decimalResult.length <= stringNumber1.numDecimal.length) { decimalResult = addZero(decimalResult, stringNumber1.numDecimal.length) } else { integerResult++;//进一 decimalResult = decimalResult.slice(1); } } var result = integerResult + "." + decimalResult; return BI.parseFloat(result); function addZero(resultTemp, length) { var diff = length - resultTemp.length; for (var i = 0; i < diff; i++) { resultTemp = "0" + resultTemp; } return resultTemp } }, _accurateMultiplication: function (num1, num2) {//乘法分配律 var stringNumber1 = this._stringNumberFactory(num1); var stringNumber2 = this._stringNumberFactory(num2); //整数部分计算 var integerResult = BI.parseInt(stringNumber1.numInteger) * BI.parseInt(stringNumber2.numInteger); //num1的小数和num2的整数 var dec1Int2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numDecimal) * BI.parseInt(stringNumber2.numInteger), stringNumber1.numDecimalLength); //num1的整数和num2的小数 var int1dec2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numInteger) * BI.parseInt(stringNumber2.numDecimal), stringNumber2.numDecimalLength); //小数*小数 var dec1dec2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numDecimal) * BI.parseInt(stringNumber2.numDecimal), (stringNumber1.numDecimalLength + stringNumber2.numDecimalLength)); return this._accurateAddition(this._accurateAddition(this._accurateAddition(integerResult, dec1Int2), int1dec2), dec1dec2); }, _accurateDivisionTenExponent: function (num, n) {// num/10^n && n>0 var stringNumber = this._stringNumberFactory(num); if (stringNumber.numInteger.length > n) { var integerResult = stringNumber.numInteger.slice(0, (stringNumber.numInteger.length - n)); var partDecimalResult = stringNumber.numInteger.slice(-n); } else { var integerResult = "0"; var partDecimalResult = addZero(stringNumber.numInteger, n); } var result = integerResult + "." + partDecimalResult + stringNumber.numDecimal; return BI.parseFloat(result); function addZero(resultTemp, length) { var diff = length - resultTemp.length; for (var i = 0; i < diff; i++) { resultTemp = "0" + resultTemp; } return resultTemp } }, accurateSubtraction: function (num1, num2) { if (num1 >= 0 && num2 >= 0) { if (num1 >= num2) { return this._accurateSubtraction(num1, num2) } return this._accurateSubtraction(num2, num1) } if (num1 >= 0 && num2 < 0) { return this._accurateAddition(num1, -num2) } if (num1 < 0 && num2 >= 0) { return -this._accurateAddition(-num1, num2) } if (num1 < 0 && num2 < 0) { if (num1 >= num2) { return this._accurateSubtraction(-num2, -num1) } return this._accurateSubtraction(-num1, -num2) } }, accurateAddition: function (num1, num2) { if (num1 >= 0 && num2 >= 0) { return this._accurateAddition(num1, num2) } if (num1 >= 0 && num2 < 0) { return this.accurateSubtraction(num1, -num2) } if (num1 < 0 && num2 >= 0) { return this.accurateSubtraction(num2, -num1) } if (num1 < 0 && num2 < 0) { return -this._accurateAddition(-num1, -num2) } }, accurateMultiplication: function (num1, num2) { if (num1 >= 0 && num2 >= 0) { return this._accurateMultiplication(num1, num2) } if (num1 >= 0 && num2 < 0) { return -this._accurateMultiplication(num1, -num2) } if (num1 < 0 && num2 >= 0) { return -this._accurateMultiplication(-num1, num2) } if (num1 < 0 && num2 < 0) { return this._accurateMultiplication(-num1, -num2) } }, accurateDivisionTenExponent: function (num1, n) { if (num1 >= 0) { return this._accurateDivisionTenExponent(num1, n); } return -this._accurateDivisionTenExponent(-num1, n); } });/** * Created by fay on 2016/9/14. */ BI.ListLabelItemGroup = BI.inherit(BI.ButtonGroup, { _defaultConfig: function () { return BI.extend(BI.ListLabelItemGroup.superclass._defaultConfig.apply(this, arguments), { chooseType: BI.Selection.Multi }); }, _init: function () { BI.ListLabelItemGroup.superclass._init.apply(this, arguments); this.otherValues = []; if (BI.isEmptyArray(this.getValue())) { BI.each(this.buttons, function (idx, button) { if (button.getValue() === BICst.LIST_LABEL_TYPE.ALL) { button.setSelected(true); } }); } this._checkBtnStyle(); }, _createBtns: function (items) { var o = this.options; return BI.createWidgets(BI.createItems(items, { type: "bi.text_button", cls: "list-label-button" })); }, _btnsCreator: function (items) { var self = this, args = Array.prototype.slice.call(arguments), o = this.options; var buttons = this._createBtns(items); args[0] = buttons; BI.each(this.behaviors, function (i, behavior) { behavior.doBehavior.apply(behavior, args); }); BI.each(buttons, function (i, btn) { btn.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { if (type === BI.Events.CLICK) { switch (o.chooseType) { case BI.ButtonGroup.CHOOSE_TYPE_MULTI: if (btn.getValue() === BICst.LIST_LABEL_TYPE.ALL) { self.setValue([BICst.LIST_LABEL_TYPE.ALL]); } else { self._checkBtnState(); } self._checkBtnStyle(); break; case BI.ButtonGroup.CHOOSE_TYPE_SINGLE: self.setValue(btn.getValue()); break; case BI.ButtonGroup.CHOOSE_TYPE_NONE: self.setValue([]); break; } self.fireEvent(BI.ButtonGroup.EVENT_CHANGE, value, obj); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); btn.on(BI.Events.DESTROY, function () { BI.remove(self.buttons, btn); }); }); return buttons; }, _checkBtnState: function () { if (BI.isEmptyArray(this.getValue()) && BI.isEmptyArray(this.otherValues)) { this.buttons[0].setSelected(true); this.fireEvent(BI.ButtonGroup.EVENT_CHANGE, this.buttons[0].getValue(), this.buttons[0]); } else if (this.getValue().length === 1 && BI.isEqual(this.getValue()[0], BICst.LIST_LABEL_TYPE.ALL)) { this.buttons[0].setSelected(true); } else { this.buttons[0].setSelected(false); } }, _checkBtnStyle: function () { BI.each(this.buttons, function (idx, btn) { if (btn.isSelected()) { btn.doHighLight(); } else { btn.unHighLight(); } }); }, removeAllItems: function () { var indexes = []; for (var i = 1; i < this.buttons.length; i++) { indexes.push(i); } this.removeItemAt(indexes); }, setValue: function (v) { var self = this; v = BI.isArray(v) ? v : [v]; BI.each(this.buttons, function (i, item) { if (BI.deepContains(v, item.getValue())) { item.setSelected && item.setSelected(true); } else { item.setSelected && item.setSelected(false); } }); var currentValues = this.getValue(); this.otherValues = []; BI.each(v, function (idx, value) { if (currentValues.indexOf(value) === -1) { self.otherValues.push(value); } }); this._checkBtnState(); this._checkBtnStyle(); }, getValue: function () { var v = []; BI.each(this.buttons, function (i, item) { if (item.isEnabled() && item.isSelected && item.isSelected()) { v.push(item.getValue()); } }); v = v.concat(this.otherValues || []); return v; } }); $.shortcut('bi.list_label_item_group', BI.ListLabelItemGroup); /** * 文本标签 * * Created by fay on 2016/9/11. */ BI.ListLabel = BI.inherit(BI.Widget, { _constant: { MAX_COLUMN_SIZE: 40, DEFAULT_LABEL_GAP: 15, DEFAULT_RIGHT_GAP: 10 }, _defaultConfig: function () { return BI.extend(BI.ListLabel.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-list-label", title: BI.i18nText("BI-List_Label_Con"), showTitle: true, items: [], height: 40 }) }, _init: function () { BI.ListLabel.superclass._init.apply(this, arguments); var self = this, o = this.options; this.items = BI.clone(o.items); this.items.unshift({ text: BI.i18nText("BI-Basic_Nolimited"), value: BICst.LIST_LABEL_TYPE.ALL }); this.title = BI.createWidget({ type: "bi.label", text: o.title + BI.i18nText("BI-Basic_Colon"), title: o.title, height: o.height }); this.container = BI.createWidget({ type: "bi.list_label_item_group", items: BI.createItems(this.items.slice(0, this._constant.MAX_COLUMN_SIZE), { type: "bi.text_button", height: o.height, rgap: this._constant.DEFAULT_RIGHT_GAP }), layouts: [{ type: "bi.inline_vertical_adapt", rgap: this._constant.DEFAULT_LABEL_GAP, height: o.height }] }); this.container.on(BI.ButtonGroup.EVENT_CHANGE, function (value) { self.fireEvent(BI.ListLabel.EVENT_CHANGE, value); }); this.minTip = BI.createWidget({ type: "bi.label", text: BI.i18nText("BI-No_Selected_Value"), disabled: true, height: o.height }); this.maxTip = BI.createWidget({ type: "bi.label", text: BI.i18nText("BI-Max_Show_40_Labels"), disabled: true, height: o.height }); this.checkTipsState(o.items); this.right = BI.createWidget({ type: "bi.horizontal", items: [this.container, this.minTip, this.maxTip], height: o.height }); o.showTitle ? BI.createWidget({ type: "bi.absolute", items: [{ el: this.title, left:0, right:0, top:0, bottom:0, width: 60 }, { el: this.right, left: 65, right:0, top:0, bottom:0 }], element: this }) : BI.createWidget({ type: "bi.horizontal", items: [this.right], element: this }); }, addItems: function (v) { this.checkTipsState(v); this.container.addItems(v.slice(0, this._constant.MAX_COLUMN_SIZE - 1)); }, checkTipsState: function (v) { if (BI.isEmptyArray(v)) { this.minTip.setVisible(true); this.container.setVisible(false); } else { this.minTip.setVisible(false); this.container.setVisible(true); } if (v.length >= this._constant.MAX_COLUMN_SIZE) { this.maxTip.setVisible(true); } else { this.maxTip.setVisible(false); } }, removeAllItems: function () { this.container.removeAllItems(); }, getSelectedButtons: function () { return this.container.isVisible() ? this.container.getSelectedButtons() : []; }, getAllButtons: function () { return this.container.getAllButtons(); }, setTitle: function (title) { this.title.setText(title + BI.i18nText("BI-Basic_Colon")); this.title.setTitle(title); }, setItems: function (items) { this.removeAllItems(); this.addItems(BI.createItems(items, { type: "bi.text_button", height: this.options.height, rgap: this._constant.DEFAULT_RIGHT_GAP })); }, populate: function (v) { this.setTitle(v.title || BI.i18nText("BI-List_Label_Con")); this.setItems(v.items || []); }, setValue: function (v) { this.container.setValue(v); }, getValue: function () { return this.container.getValue(); } }); BI.ListLabel.EVENT_CHANGE = 'BI.ListLabel.EVENT_CHANGE'; $.shortcut('bi.list_label', BI.ListLabel);/** * 月份下拉框 * * Created by GUY on 2015/8/28. * @class BI.MonthCombo * @extends BI.Trigger */ BI.MonthCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MonthCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-month-combo", height: 25 }); }, _init: function () { BI.MonthCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.month_trigger" }); this.trigger.on(BI.MonthTrigger.EVENT_CONFIRM, function (v) { if(this.getKey() && this.getKey() !== self.storeValue) { self.setValue(this.getValue()); }else if(!this.getKey()){ self.setValue(); } self.fireEvent(BI.MonthCombo.EVENT_CONFIRM); }); this.trigger.on(BI.MonthTrigger.EVENT_FOCUS, function () { self.storeValue = this.getKey(); }); this.trigger.on(BI.MonthTrigger.EVENT_START, function () { self.combo.hideView(); }); this.trigger.on(BI.MonthTrigger.EVENT_STOP, function () { if (!self.combo.isViewVisible()) { self.combo.showView(); } }); this.trigger.on(BI.MonthTrigger.EVENT_CHANGE, function () { self.combo.isViewVisible() && self.combo.hideView(); }); this.popup = BI.createWidget({ type: "bi.month_popup" }); this.popup.on(BI.MonthPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.MonthCombo.EVENT_CONFIRM); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { minWidth: 85, el: this.popup } }) }, setValue: function (v) { this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); } }); BI.MonthCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.month_combo', BI.MonthCombo);/** * 月份展示面板 * * Created by GUY on 2015/9/2. * @class BI.MonthPopup * @extends BI.Trigger */ BI.MonthPopup = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MonthPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-month-popup" }); }, _init: function () { BI.MonthPopup.superclass._init.apply(this, arguments); var self = this; //纵向排列月 var month = [0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11]; var items = []; items.push(month.slice(0, 2)); items.push(month.slice(2, 4)); items.push(month.slice(4, 6)); items.push(month.slice(6, 8)); items.push(month.slice(8, 10)); items.push(month.slice(10, 12)); items = BI.map(items, function (i, item) { return BI.map(item, function (j, td) { return { type: "bi.text_item", cls: "bi-list-item-active", textAlign: "center", whiteSpace: "nowrap", once: false, forceSelected: true, height: 23, width: 38, value: td, text: td + 1 }; }); }); this.month = BI.createWidget({ type: "bi.button_group", element: this, items: BI.createItems(items, {}), layouts: [BI.LogicFactory.createLogic("table", BI.extend({ dynamic: true }, { columns: 2, rows: 6, columnSize: [1 / 2, 1 / 2], rowSize: 25 })), { type: "bi.center_adapt", vgap: 1, hgap: 2 }] }); this.month.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.MonthPopup.EVENT_CHANGE); } }) }, getValue: function () { return this.month.getValue()[0]; }, setValue: function (v) { this.month.setValue([v]); } }); BI.MonthPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.month_popup", BI.MonthPopup);/** * 月份trigger * * Created by GUY on 2015/8/21. * @class BI.MonthTrigger * @extends BI.Trigger */ BI.MonthTrigger = BI.inherit(BI.Trigger, { _const: { hgap: 4, vgap: 2, triggerWidth: 25, errorText: BI.i18nText("BI-Month_Trigger_Error_Text") }, _defaultConfig: function () { return BI.extend(BI.MonthTrigger.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-month-trigger", height: 25 }); }, _init: function () { BI.MonthTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.editor = BI.createWidget({ type: "bi.sign_editor", height: o.height, validationChecker: function (v) { return v === "" || (BI.isPositiveInteger(v) && v >= 1 && v <= 12); }, quitChecker: function (v) { return false; }, hgap: c.hgap, vgap: c.vgap, allowBlank: true, errorText: c.errorText }); this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.MonthTrigger.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { self.fireEvent(BI.MonthTrigger.EVENT_CHANGE); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { var value = self.editor.getValue(); if (BI.isNotNull(value)) { self.editor.setValue(value); self.editor.setTitle(value); } self.fireEvent(BI.MonthTrigger.EVENT_CONFIRM); }); this.editor.on(BI.SignEditor.EVENT_SPACE, function () { if (self.editor.isValid()) { self.editor.blur(); } }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.MonthTrigger.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_STOP, function () { self.fireEvent(BI.MonthTrigger.EVENT_STOP); }); BI.createWidget({ element: this, type: 'bi.htape', items: [ { el: this.editor }, { el: { type: "bi.text_button", text: BI.i18nText("BI-Multi_Date_Month"), baseCls: "bi-trigger-month-text", width: c.triggerWidth }, width: c.triggerWidth }, { el: { type: "bi.trigger_icon_button", width: c.triggerWidth }, width: c.triggerWidth } ] }); }, setValue: function (v) { if(BI.isNotNull(v)){ this.editor.setState(v + 1); this.editor.setValue(v + 1); this.editor.setTitle(v + 1); return; } this.editor.setState(); this.editor.setValue(); this.editor.setTitle(); }, getKey: function () { return this.editor.getValue() | 0; }, getValue: function () { return this.editor.getValue() - 1; } }); BI.MonthTrigger.EVENT_FOCUS = "EVENT_FOCUS"; BI.MonthTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.MonthTrigger.EVENT_START = "EVENT_START"; BI.MonthTrigger.EVENT_STOP = "EVENT_STOP"; BI.MonthTrigger.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.month_trigger", BI.MonthTrigger);/** * 新建并选中某个分组按钮 * * Created by GUY on 2015/9/25. * @class BI.Move2GroupAddButton * @extends BI.BasicButton */ BI.Move2GroupAddButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.Move2GroupAddButton.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + ' bi-move2group-add-button', shadow: true, isShadowShowingOnSelected: true, height: 30 }) }, _init: function () { BI.Move2GroupAddButton.superclass._init.apply(this, arguments); var self = this, o = this.options; this.text = BI.createWidget({ type: "bi.label", textAlign: "left", text: BI.i18nText("BI-Create_And_Move_To") + "\"江苏\"", height: o.height }) BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.icon_button", cls: "move2group-add-font" }, width: 30 }, { el: this.text }] }) }, setValue: function (v) { this.text.setValue(BI.i18nText("BI-Create_And_Move_To") + "\"" + v + "\""); this.setTitle(BI.i18nText("BI-Create_And_Move_To") + "\"" + v + "\"", { container: "body" }); }, doClick: function () { BI.Move2GroupAddButton.superclass.doClick.apply(this, arguments); if (this.isValid()) { this.fireEvent(BI.Move2GroupAddButton.EVENT_CHANGE); } } }); BI.Move2GroupAddButton.EVENT_CHANGE = "Move2GroupAddButton.EVENT_CHANGE"; $.shortcut('bi.move2group_add_button', BI.Move2GroupAddButton);/** * 移动到分组下拉框 * * Created by GUY on 2015/9/25. * @class BI.Move2GroupCombo * @extends BI.Widget */ BI.Move2GroupCombo = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Move2GroupCombo.superclass._defaultConfig.apply(this, arguments) return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-move2group-combo", height: 30, tipType: "warning", items: [] }); }, _init: function () { BI.Move2GroupCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.button", text: BI.i18nText("BI-Move_To_Group"), title: o.title, height: o.height }); this.tools = BI.createWidget({ type: "bi.move2group_bar" }); this.tools.on(BI.Move2GroupBar.EVENT_START, function () { self.combo.adjustHeight(); self.searcher.adjustHeight(); }); this.tools.on(BI.Move2GroupBar.EVENT_EMPTY, function () { self.combo.adjustHeight(); }); this.tools.on(BI.Move2GroupBar.EVENT_CLICK_BUTTON, function () { self.fireEvent(BI.Move2GroupCombo.EVENT_CLICK_NEW_BUTTON); self.searcher.stopSearch(); self.combo.hideView(); }); this.tools.on(BI.Move2GroupBar.EVENT_CHANGE, function () { this.setButtonVisible(!self.searcher.hasMatched()); self.combo.adjustHeight(); self.searcher.adjustHeight(); }); this.popup = this._createPopup(this.options.items); this.searcher = BI.createWidget({ type: "bi.searcher", el: this.tools, adapter: this.popup }); this.searcher.on(BI.Searcher.EVENT_CHANGE, function () { self.fireEvent(BI.Move2GroupCombo.EVENT_CONFIRM); self.combo.hideView(); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, el: this.trigger, isNeedAdjustWidth: false, popup: { width: 200, stopPropagation: false, el: this.popup, tool: this.searcher } }); this.combo.on(BI.Combo.EVENT_CHANGE, function () { self.combo.hideView(); self.fireEvent(BI.Move2GroupCombo.EVENT_CONFIRM); }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.Move2GroupCombo.EVENT_BEFORE_POPUPVIEW); }); this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.searcher.stopSearch(); }) }, _createItems: function (items) { return BI.createItems(items, { type: "bi.single_select_item", height: 25, handler: function (v) { } }) }, _createPopup: function (items, opt) { return BI.createWidget(BI.extend({ type: "bi.button_group", items: this._createItems(items), chooseType: 0, layouts: [{ type: "bi.vertical" }] }, opt)); }, populate: function (items) { this.options.items = items; this.combo.populate(this._createItems(items)); }, setValue: function (v) { this.combo.setValue(v); }, setEnable: function (enable) { this.combo.setEnable.apply(this.combo, arguments); }, getTargetValue: function () { return this.tools.getValue(); }, getValue: function () { var value = this.searcher.getValue(); return value[0]; } }); BI.Move2GroupCombo.EVENT_BEFORE_POPUPVIEW = "Move2GroupCombo.EVENT_BEFORE_POPUPVIEW"; BI.Move2GroupCombo.EVENT_CHANGE = "Move2GroupCombo.EVENT_CHANGE"; BI.Move2GroupCombo.EVENT_CONFIRM = "Move2GroupCombo.EVENT_CONFIRM"; BI.Move2GroupCombo.EVENT_CLICK_NEW_BUTTON = "Move2GroupCombo.EVENT_CLICK_NEW_BUTTON"; $.shortcut('bi.move2group_combo', BI.Move2GroupCombo);/** * guy * 复选导航条 * Created by GUY on 2015/9/25. * @class BI.Move2GroupBar * @extends BI.Widget */ BI.Move2GroupBar = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.Move2GroupBar.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-move2group-bar" }) }, _init: function () { BI.Move2GroupBar.superclass._init.apply(this, arguments); var self = this; this.search = BI.createWidget({ type: "bi.text_editor", watermark: BI.i18nText("BI-Search_And_Create_Group"), allowBlank: true }); this.search.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.search.on(BI.TextEditor.EVENT_CHANGE, function () { self.button.setValue(this.getValue()); if (this.getValue() !== "") { self.fireEvent(BI.Move2GroupBar.EVENT_CHANGE); } }); this.search.on(BI.TextEditor.EVENT_EMPTY, function () { self.button.invisible(); self.fireEvent(BI.Move2GroupBar.EVENT_EMPTY); }); this.search.on(BI.TextEditor.EVENT_START, function () { self.button.visible(); self.fireEvent(BI.Move2GroupBar.EVENT_START); }); this.button = BI.createWidget({ type: "bi.move2group_add_button" }); this.button.on(BI.Move2GroupAddButton.EVENT_CHANGE, function () { self.fireEvent(BI.Move2GroupBar.EVENT_CLICK_BUTTON); }); BI.createWidget({ type: "bi.vertical", element: this, vgap: 5, hgap: 5, items: [this.search, this.button] }); this.button.invisible(); }, blur: function(){ this.search.blur(); }, setButtonVisible: function (b) { this.button.setVisible(b); }, getValue: function () { return this.search.getValue(); }, setValue: function (v) { this.search.setValue(v); this.button.setValue(v); } }); BI.Move2GroupBar.EVENT_START = "Move2GroupBar.EVENT_START"; BI.Move2GroupBar.EVENT_EMPTY = "Move2GroupBar.EVENT_EMPTY"; BI.Move2GroupBar.EVENT_CHANGE = "Move2GroupBar.EVENT_CHANGE"; BI.Move2GroupBar.EVENT_CLICK_BUTTON = "Move2GroupBar.EVENT_CLICK_BUTTON"; $.shortcut("bi.move2group_bar", BI.Move2GroupBar);/** * Created by fay on 2016/9/14. */ BI.TextLabelItemGroup = BI.inherit(BI.ButtonGroup, { _defaultConfig: function () { return BI.extend(BI.TextLabelItemGroup.superclass._defaultConfig.apply(this, arguments), { chooseType: BI.Selection.Multi }); }, _init: function () { BI.TextLabelItemGroup.superclass._init.apply(this, arguments); this._checkBtnStyle(); }, _btnsCreator: function (items) { var self = this, args = Array.prototype.slice.call(arguments), o = this.options; var buttons = this._createBtns(items); args[0] = buttons; BI.each(this.behaviors, function (i, behavior) { behavior.doBehavior.apply(behavior, args); }); BI.each(buttons, function (i, btn) { btn.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { if (type === BI.Events.CLICK) { switch (o.chooseType) { case BI.ButtonGroup.CHOOSE_TYPE_MULTI: if (BI.isEmptyString(btn.getValue())) { self.setValue([]); } else { self._checkBtnStyle(); } break; case BI.ButtonGroup.CHOOSE_TYPE_SINGLE: self.setValue(btn.getValue()); break; case BI.ButtonGroup.CHOOSE_TYPE_NONE: self.setValue([]); break; } self.fireEvent(BI.ButtonGroup.EVENT_CHANGE, value, obj); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); btn.on(BI.Events.DESTROY, function () { BI.remove(self.buttons, btn); }) }); return buttons; }, _checkBtnStyle: function () { var self = this; var flag = BI.isEmptyArray(this.getValue()); BI.each(this.buttons, function (idx, btn) { if (flag && BI.isEmptyString(btn.getValue())) { btn.setSelected(true); btn.doHighLight(); } if (!flag && BI.isEmptyString(btn.getValue())) { btn.setSelected(false); btn.unHighLight(); } if (btn.isSelected()) { btn.doHighLight(); } else { btn.unHighLight(); } }); }, setValue: function (v) { BI.TextLabelItemGroup.superclass.setValue.apply(this, arguments); this._checkBtnStyle(); } }); $.shortcut('bi.text_label_item_group', BI.TextLabelItemGroup); /** * 文本标签 * * Created by fay on 2016/9/11. */ BI.TextLabel = BI.inherit(BI.Widget, { _constant: { MAX_COLUMN_SIZE: 40 }, _defaultConfig: function () { return BI.extend(BI.TextLabel.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-label", title: "" }) }, _init: function () { BI.TextLabel.superclass._init.apply(this, arguments); var self = this, o = this.options; var title = BI.createWidget({ type: "bi.label", text: o.title + ":" }); this.container = BI.createWidget({ type: "bi.text_label_item_group", items: BI.createItems(o.items.slice(0, this._constant.MAX_COLUMN_SIZE), { type: "bi.text_button" }), layouts: [{ type: "bi.horizontal", }] }); BI.createWidget({ type: "bi.horizontal", items: [title, this.container], element: this }) }, setValue: function (v) { this.container.setValue(v); }, getValue: function () { return this.container.getValue(); } }); $.shortcut('bi.text_label', BI.TextLabel);(function ($) { /** * 普通控件 * * @class BI.MultiDateCard * @extends BI.Widget * @abstract */ BI.MultiDateCard = BI.inherit(BI.Widget, { constants: { lgap: 80, itemHeight: 35, defaultEditorValue: "1" }, _defaultConfig: function () { return $.extend(BI.MultiDateCard.superclass._defaultConfig.apply(this, arguments), {}); }, dateConfig: function () { }, defaultSelectedItem: function () { }, _init: function () { BI.MultiDateCard.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.label = BI.createWidget({ type: 'bi.label', height: this.constants.itemHeight, textAlign: "left", text: BI.i18nText("BI-Multi_Date_Relative_Current_Time"), cls: 'bi-multidate-inner-label' }); this.radioGroup = BI.createWidget({ type: "bi.button_group", chooseType: 0, items: BI.createItems(this.dateConfig(), { type: 'bi.multidate_segment', height: this.constants.itemHeight }), layouts: [{ type: "bi.vertical" }] }); this.radioGroup.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CONFIRM) { self.fireEvent(BI.MultiDateCard.EVENT_CHANGE); } }); this.radioGroup.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.setValue(self.getValue()); self.fireEvent(BI.MultiDateCard.EVENT_CHANGE); }); BI.createWidget({ element: this, type: 'bi.center_adapt', lgap: this.constants.lgap, items: [{ type: 'bi.vertical', items: [this.label, this.radioGroup] }] }); }, getValue: function () { var button = this.radioGroup.getSelectedButtons()[0]; var type = button.getValue(), value = button.getInputValue(); return { type: type, value: value } }, _isTypeAvaliable: function (type) { var res = false; BI.find(this.dateConfig(), function (i, item) { if (item.value === type) { res = true; return true; } }); return res; }, setValue: function (v) { var self = this; if (BI.isNotNull(v) && this._isTypeAvaliable(v.type)) { this.radioGroup.setValue(v.type); BI.each(this.radioGroup.getAllButtons(), function (i, button) { if (button.isEditorExist() === true && button.isSelected()) { button.setInputValue(v.value); button.setEnable(true); } else { button.setInputValue(self.constants.defaultEditorValue); button.setEnable(false); } }); } else { this.radioGroup.setValue(this.defaultSelectedItem()); BI.each(this.radioGroup.getAllButtons(), function (i, button) { button.setInputValue(self.constants.defaultEditorValue); if (button.isEditorExist() === true && button.isSelected()) { button.setEnable(true); } else { button.setEnable(false); } }); } }, getCalculationValue: function () { var valueObject = this.getValue(); var type = valueObject.type, value = valueObject.value; switch (type) { case BICst.MULTI_DATE_DAY_PREV: return new Date().getOffsetDate(-1 * value); case BICst.MULTI_DATE_DAY_AFTER: return new Date().getOffsetDate(value); case BICst.MULTI_DATE_DAY_TODAY: return new Date(); case BICst.MULTI_DATE_MONTH_PREV: return new Date().getBeforeMultiMonth(value); case BICst.MULTI_DATE_MONTH_AFTER: return new Date().getAfterMultiMonth(value); case BICst.MULTI_DATE_MONTH_BEGIN: return new Date(new Date().getFullYear(), new Date().getMonth(), 1); case BICst.MULTI_DATE_MONTH_END: return new Date(new Date().getFullYear(), new Date().getMonth(), (new Date().getLastDateOfMonth()).getDate()); case BICst.MULTI_DATE_QUARTER_PREV: return new Date().getBeforeMulQuarter(value); case BICst.MULTI_DATE_QUARTER_AFTER: return new Date().getAfterMulQuarter(value); case BICst.MULTI_DATE_QUARTER_BEGIN: return new Date().getQuarterStartDate(); case BICst.MULTI_DATE_QUARTER_END: return new Date().getQuarterEndDate(); case BICst.MULTI_DATE_WEEK_PREV: return new Date().getOffsetDate(-7 * value); case BICst.MULTI_DATE_WEEK_AFTER: return new Date().getOffsetDate(7 * value); case BICst.MULTI_DATE_YEAR_PREV: return new Date((new Date().getFullYear() - 1 * value), new Date().getMonth(), new Date().getDate()); case BICst.MULTI_DATE_YEAR_AFTER: return new Date((new Date().getFullYear() + 1 * value), new Date().getMonth(), new Date().getDate()); case BICst.MULTI_DATE_YEAR_BEGIN: return new Date(new Date().getFullYear(), 0, 1); case BICst.MULTI_DATE_YEAR_END: return new Date(new Date().getFullYear(), 11, 31); } } }); BI.MultiDateCard.EVENT_CHANGE = "EVENT_CHANGE"; })(jQuery);BICst.MULTI_DATE_YMD_CARD = 1; BICst.MULTI_DATE_YEAR_CARD = 2; BICst.MULTI_DATE_QUARTER_CARD = 3; BICst.MULTI_DATE_MONTH_CARD = 4; BICst.MULTI_DATE_WEEK_CARD = 5; BICst.MULTI_DATE_DAY_CARD = 6; BICst.MULTI_DATE_SEGMENT_NUM = {}; BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_PREV] = BI.i18nText("BI-Multi_Date_Year_Prev"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_AFTER] = BI.i18nText("BI-Multi_Date_Year_Next"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_BEGIN] = BI.i18nText("BI-Multi_Date_Year_Begin"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_YEAR_END] = BI.i18nText("BI-Multi_Date_Year_End"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_PREV] = BI.i18nText("BI-Multi_Date_Quarter_Prev"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_AFTER] = BI.i18nText("BI-Multi_Date_Quarter_Next"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_BEGIN] = BI.i18nText("BI-Multi_Date_Quarter_Begin"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_QUARTER_END] = BI.i18nText("BI-Multi_Date_Quarter_End"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_PREV] = BI.i18nText("BI-Multi_Date_Month_Prev"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_AFTER] = BI.i18nText("BI-Multi_Date_Month_Next"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_BEGIN] = BI.i18nText("BI-Multi_Date_Month_Begin"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_MONTH_END] = BI.i18nText("BI-Multi_Date_Month_End"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_WEEK_PREV] = BI.i18nText("BI-Multi_Date_Week_Prev"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_WEEK_AFTER] = BI.i18nText("BI-Multi_Date_Week_Next"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_PREV] = BI.i18nText("BI-Multi_Date_Day_Prev"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_AFTER] = BI.i18nText("BI-Multi_Date_Day_Next"); BICst.MULTI_DATE_SEGMENT_NUM[BICst.MULTI_DATE_DAY_TODAY] = BI.i18nText("BI-Multi_Date_Today"); (function ($) { /** * 日期控件 * @class BI.MultiDateCombo * @extends BI.Widget */ BI.MultiDateCombo = BI.inherit(BI.Single, { constants: { popupHeight: 259, popupWidth: 270, comboAdjustHeight: 1, border: 1, DATE_MIN_VALUE: "1900-01-01", DATE_MAX_VALUE: "2099-12-31" }, _defaultConfig: function () { return BI.extend(BI.MultiDateCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-combo', height: 24 }); }, _init: function () { BI.MultiDateCombo.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.storeTriggerValue = ""; var date = new Date(); this.storeValue = null; this.trigger = BI.createWidget({ type: 'bi.date_trigger', min: this.constants.DATE_MIN_VALUE, max: this.constants.DATE_MAX_VALUE }); this.trigger.on(BI.DateTrigger.EVENT_KEY_DOWN, function(){ if(self.combo.isViewVisible()){ self.combo.hideView(); } }); this.trigger.on(BI.DateTrigger.EVENT_STOP, function(){ if(!self.combo.isViewVisible()){ self.combo.showView(); } }); this.trigger.on(BI.DateTrigger.EVENT_TRIGGER_CLICK, function(){ self.combo.toggle(); }); this.trigger.on(BI.DateTrigger.EVENT_FOCUS, function () { self.storeTriggerValue = self.trigger.getKey(); if(!self.combo.isViewVisible()){ self.combo.showView(); } self.fireEvent(BI.MultiDateCombo.EVENT_FOCUS); }); this.trigger.on(BI.DateTrigger.EVENT_ERROR, function () { self.storeValue = { year: date.getFullYear(), month: date.getMonth() }; self.popup.setValue(); self.fireEvent(BI.MultiDateCombo.EVENT_ERROR); }); this.trigger.on(BI.DateTrigger.EVENT_VALID, function () { self.fireEvent(BI.MultiDateCombo.EVENT_VALID); }); this.trigger.on(BI.DateTrigger.EVENT_CHANGE, function () { self.fireEvent(BI.MultiDateCombo.EVENT_CHANGE); }); this.trigger.on(BI.DateTrigger.EVENT_CONFIRM, function () { if(self.combo.isViewVisible()) { return; } var dateStore = self.storeTriggerValue; var dateObj = self.trigger.getKey(); if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { self.storeValue = self.trigger.getValue(); self.setValue(self.trigger.getValue()); } else if (BI.isEmptyString(dateObj)) { self.storeValue = null; self.trigger.setValue(); } self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM); }); this.popup = BI.createWidget({ type: "bi.multidate_popup", min: this.constants.DATE_MIN_VALUE, max: this.constants.DATE_MAX_VALUE }); this.popup.on(BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE, function () { self.setValue(); self.combo.hideView(); self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM); }); this.popup.on(BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE, function () { var date = new Date(); self.setValue({ year: date.getFullYear(), month: date.getMonth(), day: date.getDate() }); self.combo.hideView(); self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM); }); this.popup.on(BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM); }); this.popup.on(BI.MultiDatePopup.CALENDAR_EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); //self.fireEvent(BI.MultiDateCombo.EVENT_CHANGE); self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM); }); this.combo = BI.createWidget({ type: 'bi.combo', toggle: false, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, adjustLength: this.constants.comboAdjustHeight, popup: { el: this.popup, maxHeight: this.constants.popupHeight, width: this.constants.popupWidth, stopPropagation: false } }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.popup.setValue(self.storeValue); self.fireEvent(BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW); }); var triggerBtn = BI.createWidget({ type: "bi.trigger_icon_button", cls: "bi-trigger-date-button chart-date-normal-font", width: 30, height: 23 }); triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { if (self.combo.isViewVisible()) { self.combo.hideView(); } else { self.combo.showView(); } }); this.changeIcon = BI.createWidget({ type: "bi.icon_button", cls: "bi-trigger-date-change widget-date-h-change-font", width: 30, height: 23, invisible: true }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.combo, top: 0, left: 0, right: 0, bottom: 0 }, { el: triggerBtn, top: 0, left: 0 }, { el: this.changeIcon, top: 0, right: 0 }] }) }, _checkDynamicValue: function(v){ var type = null; if (BI.isNotNull(v)) { type = v.type } switch (type){ case BICst.MULTI_DATE_YEAR_PREV: case BICst.MULTI_DATE_YEAR_AFTER: case BICst.MULTI_DATE_YEAR_BEGIN: case BICst.MULTI_DATE_YEAR_END: case BICst.MULTI_DATE_QUARTER_PREV: case BICst.MULTI_DATE_QUARTER_AFTER: case BICst.MULTI_DATE_QUARTER_BEGIN: case BICst.MULTI_DATE_QUARTER_END: case BICst.MULTI_DATE_MONTH_PREV: case BICst.MULTI_DATE_MONTH_AFTER: case BICst.MULTI_DATE_MONTH_BEGIN: case BICst.MULTI_DATE_MONTH_END: case BICst.MULTI_DATE_WEEK_PREV: case BICst.MULTI_DATE_WEEK_AFTER: case BICst.MULTI_DATE_DAY_PREV: case BICst.MULTI_DATE_DAY_AFTER: case BICst.MULTI_DATE_DAY_TODAY: this.changeIcon.setVisible(true); break; default: this.changeIcon.setVisible(false); break; } }, setValue: function (v) { this.storeValue = v; this.popup.setValue(v); this.trigger.setValue(v); this._checkDynamicValue(v) }, getValue: function () { return this.storeValue; }, getKey: function(){ return this.trigger.getKey(); }, hidePopupView: function () { this.combo.hideView(); } }); $.shortcut('bi.multidate_combo', BI.MultiDateCombo); BI.MultiDateCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.MultiDateCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiDateCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiDateCombo.EVENT_VALID = "EVENT_VALID"; BI.MultiDateCombo.EVENT_ERROR = "EVENT_ERROR"; BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW = "BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW"; })(jQuery);(function ($) { /** * 普通控件 * * @class BI.DayCard * @extends BI.MultiDateCard */ BI.DayCard = BI.inherit(BI.MultiDateCard, { _defaultConfig: function () { return $.extend(BI.DayCard.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-daycard' }); }, _init: function () { BI.DayCard.superclass._init.apply(this, arguments); }, dateConfig: function(){ return [{ isEditorExist: true, selected: true, text: BI.i18nText("BI-Multi_Date_Day_Prev"), value: BICst.MULTI_DATE_DAY_PREV }, { isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Day_Next"), value: BICst.MULTI_DATE_DAY_AFTER }, { isEditorExist: false, value: BICst.MULTI_DATE_DAY_TODAY, text: BI.i18nText("BI-Multi_Date_Today") }]; }, defaultSelectedItem: function(){ return BICst.MULTI_DATE_DAY_PREV } }); BI.DayCard.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.daycard', BI.DayCard); })(jQuery);; (function ($) { /** * 普通控件 * * @class BI.MonthCard * @extends BI.MultiDateCard */ BI.MonthCard = BI.inherit(BI.MultiDateCard, { _defaultConfig: function () { return $.extend(BI.MonthCard.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-monthcard' }); }, _init: function () { BI.MonthCard.superclass._init.apply(this, arguments); }, dateConfig: function(){ return [{ selected: true, isEditorExist: true, value: BICst.MULTI_DATE_MONTH_PREV, text: BI.i18nText("BI-Multi_Date_Month_Prev") }, { isEditorExist: true, value: BICst.MULTI_DATE_MONTH_AFTER, text: BI.i18nText("BI-Multi_Date_Month_Next") }, { value: BICst.MULTI_DATE_MONTH_BEGIN, isEditorExist: false, text: BI.i18nText("BI-Multi_Date_Month_Begin") }, { value: BICst.MULTI_DATE_MONTH_END, isEditorExist: false, text: BI.i18nText("BI-Multi_Date_Month_End") }]; }, defaultSelectedItem: function(){ return BICst.MULTI_DATE_MONTH_PREV; } }); BI.MonthCard.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.monthcard', BI.MonthCard); })(jQuery);(function ($) { /** * 日期控件 * @class BI.MultiDatePopup * @extends BI.Widget */ BI.MultiDatePopup = BI.inherit(BI.Widget, { constants: { tabHeight: 30, tabWidth: 42, titleHeight: 27, itemHeight: 30, triggerHeight: 24, buttonWidth: 90, buttonHeight: 25, cardHeight: 229, cardWidth: 270, popupHeight: 259, popupWidth: 270, comboAdjustHeight: 1, ymdWidth: 58, lgap: 2, border: 1 }, _defaultConfig: function () { return BI.extend(BI.MultiDatePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-popup', width: 268, height: 260 }); }, _init: function () { BI.MultiDatePopup.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.storeValue = ""; this.textButton = BI.createWidget({ type: 'bi.text_button', forceCenter: true, cls: 'bi-multidate-popup-label', shadow: true, text: BI.i18nText("BI-Multi_Date_Today") }); this.textButton.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE); }); this.clearButton = BI.createWidget({ type: "bi.text_button", forceCenter: true, cls: 'bi-multidate-popup-button', shadow: true, text: BI.i18nText("BI-Basic_Clear") }); this.clearButton.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE); }); this.okButton = BI.createWidget({ type: "bi.text_button", forceCenter: true, cls: 'bi-multidate-popup-button', shadow: true, text: BI.i18nText("BI-Basic_OK") }); this.okButton.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE); }); this.dateTab = BI.createWidget({ type: 'bi.tab', tab: { cls: "bi-multidate-popup-tab", height: this.constants.tabHeight, items: BI.createItems([{ text: BI.i18nText("BI-Multi_Date_YMD"), value: BICst.MULTI_DATE_YMD_CARD, width: this.constants.ymdWidth }, { text: BI.i18nText("BI-Multi_Date_Year"), value: BICst.MULTI_DATE_YEAR_CARD }, { text: BI.i18nText("BI-Multi_Date_Quarter"), value: BICst.MULTI_DATE_QUARTER_CARD }, { text: BI.i18nText("BI-Multi_Date_Month"), value: BICst.MULTI_DATE_MONTH_CARD }, { text: BI.i18nText("BI-Multi_Date_Week"), value: BICst.MULTI_DATE_WEEK_CARD }, { text: BI.i18nText("BI-Multi_Date_Day"), value: BICst.MULTI_DATE_DAY_CARD }], { width: this.constants.tabWidth, textAlign: "center", height: this.constants.itemHeight, cls: 'bi-multidate-popup-item' }), layouts: [{ type: 'bi.left' }] }, cardCreator: function (v) { switch (v) { case BICst.MULTI_DATE_YMD_CARD: self.ymd = BI.createWidget({ type: "bi.date_calendar_popup", min: self.options.min, max: self.options.max }); self.ymd.on(BI.DateCalendarPopup.EVENT_CHANGE, function () { self.fireEvent(BI.MultiDatePopup.CALENDAR_EVENT_CHANGE); }); return self.ymd; case BICst.MULTI_DATE_YEAR_CARD: self.year = BI.createWidget({ type: "bi.yearcard" }); self.year.on(BI.MultiDateCard.EVENT_CHANGE, function (v) { self._setInnerValue(self.year, v); }); return self.year; case BICst.MULTI_DATE_QUARTER_CARD: self.quarter = BI.createWidget({ type: 'bi.quartercard' }); self.quarter.on(BI.MultiDateCard.EVENT_CHANGE, function (v) { self._setInnerValue(self.quarter, v); }); return self.quarter; case BICst.MULTI_DATE_MONTH_CARD: self.month = BI.createWidget({ type: 'bi.monthcard' }); self.month.on(BI.MultiDateCard.EVENT_CHANGE, function (v) { self._setInnerValue(self.month, v); }); return self.month; case BICst.MULTI_DATE_WEEK_CARD: self.week = BI.createWidget({ type: 'bi.weekcard' }); self.week.on(BI.MultiDateCard.EVENT_CHANGE, function (v) { self._setInnerValue(self.week, v); }); return self.week; case BICst.MULTI_DATE_DAY_CARD: self.day = BI.createWidget({ type: 'bi.daycard' }); self.day.on(BI.MultiDateCard.EVENT_CHANGE, function (v) { self._setInnerValue(self.day, v); }); return self.day; } } }); this.dateTab.setSelect(BICst.MULTI_DATE_YMD_CARD); this.cur = BICst.MULTI_DATE_YMD_CARD; this.dateTab.on(BI.Tab.EVENT_CHANGE, function () { var v = self.dateTab.getSelect(); switch (v) { case BICst.MULTI_DATE_YMD_CARD: var date = this.getTab(self.cur).getCalculationValue(); self.ymd.setValue({ year: date.getFullYear(), month: date.getMonth(), day: date.getDate() }); self._setInnerValue(self.ymd); break; case BICst.MULTI_DATE_YEAR_CARD: self.year.setValue(self.storeValue); self._setInnerValue(self.year); break; case BICst.MULTI_DATE_QUARTER_CARD: self.quarter.setValue(self.storeValue); self._setInnerValue(self.quarter); break; case BICst.MULTI_DATE_MONTH_CARD: self.month.setValue(self.storeValue); self._setInnerValue(self.month); break; case BICst.MULTI_DATE_WEEK_CARD: self.week.setValue(self.storeValue); self._setInnerValue(self.week); break; case BICst.MULTI_DATE_DAY_CARD: self.day.setValue(self.storeValue); self._setInnerValue(self.day); break; } self.cur = v; }); this.dateButton = BI.createWidget({ type: "bi.grid", items: [[this.clearButton, this.textButton, this.okButton]] }); BI.createWidget({ element: this, type: "bi.vtape", items: [{ el: this.dateTab }, { el: this.dateButton, height: 30 }] }); }, _setInnerValue: function (obj) { if (this.dateTab.getSelect() === BICst.MULTI_DATE_YMD_CARD) { this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.textButton.setEnable(true); } else { var date = obj.getCalculationValue(); date = date.print("%Y-%x-%e"); this.textButton.setValue(date); this.textButton.setEnable(false); } }, setValue: function (v) { this.storeValue = v; var self = this, date; var type, value; if (BI.isNotNull(v)) { type = v.type || BICst.MULTI_DATE_CALENDAR; value = v.value; if(BI.isNull(value)){ value = v; } } switch (type) { case BICst.MULTI_DATE_YEAR_PREV: case BICst.MULTI_DATE_YEAR_AFTER: case BICst.MULTI_DATE_YEAR_BEGIN: case BICst.MULTI_DATE_YEAR_END: this.dateTab.setSelect(BICst.MULTI_DATE_YEAR_CARD); this.year.setValue({type: type, value: value}); this.cur = BICst.MULTI_DATE_YEAR_CARD; self._setInnerValue(this.year); break; case BICst.MULTI_DATE_QUARTER_PREV: case BICst.MULTI_DATE_QUARTER_AFTER: case BICst.MULTI_DATE_QUARTER_BEGIN: case BICst.MULTI_DATE_QUARTER_END: this.dateTab.setSelect(BICst.MULTI_DATE_QUARTER_CARD); this.cur = BICst.MULTI_DATE_QUARTER_CARD; this.quarter.setValue({type: type, value: value}); self._setInnerValue(this.quarter); break; case BICst.MULTI_DATE_MONTH_PREV: case BICst.MULTI_DATE_MONTH_AFTER: case BICst.MULTI_DATE_MONTH_BEGIN: case BICst.MULTI_DATE_MONTH_END: this.dateTab.setSelect(BICst.MULTI_DATE_MONTH_CARD); this.cur = BICst.MULTI_DATE_MONTH_CARD; this.month.setValue({type: type, value: value}); self._setInnerValue(this.month); break; case BICst.MULTI_DATE_WEEK_PREV: case BICst.MULTI_DATE_WEEK_AFTER: this.dateTab.setSelect(BICst.MULTI_DATE_WEEK_CARD); this.cur = BICst.MULTI_DATE_WEEK_CARD; this.week.setValue({type: type, value: value}); self._setInnerValue(this.week); break; case BICst.MULTI_DATE_DAY_PREV: case BICst.MULTI_DATE_DAY_AFTER: case BICst.MULTI_DATE_DAY_TODAY: this.dateTab.setSelect(BICst.MULTI_DATE_DAY_CARD); this.cur = BICst.MULTI_DATE_DAY_CARD; this.day.setValue({type: type, value: value}); self._setInnerValue(this.day); break; default: if (BI.isNull(value) || BI.isEmptyObject(value)) { var date = new Date(); this.dateTab.setSelect(BICst.MULTI_DATE_YMD_CARD); this.ymd.setValue({ year: date.getFullYear(), month: date.getMonth(), day: date.getDate() }); this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")); } else { this.dateTab.setSelect(BICst.MULTI_DATE_YMD_CARD); this.ymd.setValue(value); this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")); } this.textButton.setEnable(true); break; } }, getValue: function () { var tab = this.dateTab.getSelect(); switch (tab) { case BICst.MULTI_DATE_YMD_CARD: return this.ymd.getValue(); case BICst.MULTI_DATE_YEAR_CARD: return this.year.getValue(); case BICst.MULTI_DATE_QUARTER_CARD: return this.quarter.getValue(); case BICst.MULTI_DATE_MONTH_CARD: return this.month.getValue(); case BICst.MULTI_DATE_WEEK_CARD: return this.week.getValue(); case BICst.MULTI_DATE_DAY_CARD: return this.day.getValue(); } } }); BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE"; BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE"; BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE"; BI.MultiDatePopup.CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE"; $.shortcut('bi.multidate_popup', BI.MultiDatePopup); })(jQuery);(function ($) { /** * 普通控件 * * @class BI.QuarterCard * @extends BI.MultiDateCard */ BI.QuarterCard = BI.inherit(BI.MultiDateCard, { _defaultConfig: function () { return $.extend(BI.QuarterCard.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-quartercard' }); }, _init: function () { BI.QuarterCard.superclass._init.apply(this, arguments); }, dateConfig: function(){ return [{ selected: true, value: BICst.MULTI_DATE_QUARTER_PREV, isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Quarter_Prev") }, { value: BICst.MULTI_DATE_QUARTER_AFTER, isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Quarter_Next") }, { value: BICst.MULTI_DATE_QUARTER_BEGIN, isEditorExist: false, text: BI.i18nText("BI-Multi_Date_Quarter_Begin") }, { value: BICst.MULTI_DATE_QUARTER_END, isEditorExist: false, text: BI.i18nText("BI-Multi_Date_Quarter_End") }] }, defaultSelectedItem: function(){ return BICst.MULTI_DATE_QUARTER_PREV; } }); BI.QuarterCard.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.quartercard', BI.QuarterCard); })(jQuery);(function ($) { /** * 普通控件 * * @class BI.MultiDateSegment * @extends BI.Single */ BI.MultiDateSegment = BI.inherit(BI.Single, { constants: { itemHeight: 24, maxGap: 15, minGap: 10, textWidth: 30, defaultEditorValue: "1" }, _defaultConfig: function () { return $.extend(BI.MultiDateSegment.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-segment', text: "", width: 130, height: 30, isEditorExist: true, selected: false, defaultEditorValue: "1" }); }, _init: function () { BI.MultiDateSegment.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: opts.selected }); this.radio.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.textEditor = BI.createWidget({ type: 'bi.text_editor', value: this.constants.defaultEditorValue, title:this.constants.defaultEditorValue, cls: 'bi-multidate-editor', width: this.constants.textWidth, height: this.constants.itemHeight }); this.textEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.textEditor.on(BI.TextEditor.EVENT_CONFIRM, function () { this.setTitle(this.getValue()); }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", cls: 'bi-multidate-normal-label', text: opts.text, height: this.constants.itemHeight }); this._createSegment(); }, _createSegment: function () { if (this.options.isEditorExist === true) { return BI.createWidget({ element: this, type: 'bi.left', items: [{ el: { type: "bi.center_adapt", items: [this.radio], height: this.constants.itemHeight }, lgap: 0 }, { el: { type: "bi.center_adapt", items: [this.textEditor], widgetName: 'textEditor' }, lgap: this.constants.maxGap }, { el: this.text, lgap: this.constants.minGap }] }); } return BI.createWidget({ element: this, type: 'bi.left', items: [{ el: { type: "bi.center_adapt", items: [this.radio], height: this.constants.itemHeight }, lgap: 0 }, { el: this.text, lgap: this.constants.maxGap }] }) }, setSelected: function (v) { if (BI.isNotNull(this.radio)) { this.radio.setSelected(v); } }, isSelected: function () { return this.radio.isSelected(); }, getValue: function () { return this.options.value; }, getInputValue: function () { return this.textEditor.getValue() | 0; }, setInputValue: function (v) { this.textEditor.setValue(v); }, isEditorExist: function () { return this.options.isEditorExist; }, setEnable: function (b) { BI.Editor.superclass.setEnable.apply(this, arguments); this.textEditor && this.textEditor.setEnable(b); } }); BI.MultiDateSegment.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.multidate_segment', BI.MultiDateSegment); })(jQuery);; (function ($) { /** * 普通控件 * * @class BI.WeekCard * @extends BI.MultiDateCard */ BI.WeekCard = BI.inherit(BI.MultiDateCard, { _defaultConfig: function () { return $.extend(BI.WeekCard.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-weekcard' }); }, _init: function () { BI.WeekCard.superclass._init.apply(this, arguments); }, dateConfig: function(){ return [{ selected: true, isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Week_Prev"), value: BICst.MULTI_DATE_WEEK_PREV }, { isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Week_Next"), value: BICst.MULTI_DATE_WEEK_AFTER }]; }, defaultSelectedItem: function(){ return BICst.MULTI_DATE_WEEK_PREV; } }); BI.WeekCard.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.weekcard', BI.WeekCard); })(jQuery);(function ($) { /** * 普通控件 * * @class BI.YearCard * @extends BI.MultiDateCard */ BI.YearCard = BI.inherit(BI.MultiDateCard, { _defaultConfig: function () { return $.extend(BI.YearCard.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multidate-yearcard' }); }, _init: function () { BI.YearCard.superclass._init.apply(this, arguments); }, dateConfig: function(){ return [{ selected: true, isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Year_Prev"), value: BICst.MULTI_DATE_YEAR_PREV }, { isEditorExist: true, text: BI.i18nText("BI-Multi_Date_Year_Next"), value: BICst.MULTI_DATE_YEAR_AFTER }, { isEditorExist: false, value: BICst.MULTI_DATE_YEAR_BEGIN, text: BI.i18nText("BI-Multi_Date_Year_Begin") }, { isEditorExist: false, value: BICst.MULTI_DATE_YEAR_END, text: BI.i18nText("BI-Multi_Date_Year_End") }] }, defaultSelectedItem: function(){ return BICst.MULTI_DATE_YEAR_PREV; } }); BI.YearCard.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.yearcard', BI.YearCard); })(jQuery);/** * @class BI.MultiLayerSelectTreeCombo * @extends BI.Widget */ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSelectTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer_select_tree-combo", isDefaultInit: false, height: 30, text: "", items: [] }); }, _init: function () { BI.MultiLayerSelectTreeCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.single_tree_trigger", text: o.text, height: o.height, items: o.items }); this.popup = BI.createWidget({ type: "bi.multilayer_select_tree_popup", isDefaultInit: o.isDefaultInit, items: o.items }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup } }); this.combo.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.popup.on(BI.MultiLayerSelectTreePopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE); }); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); }, populate: function (items) { this.combo.populate(items); } }); BI.MultiLayerSelectTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo);/** * guy * 二级树 * @class BI.MultiLayerSelectLevelTree * @extends BI.Select */ BI.MultiLayerSelectLevelTree = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSelectLevelTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer-select-level-tree", isDefaultInit: false, items: [], itemsCreator: BI.emptyFn }) }, _init: function () { BI.MultiLayerSelectLevelTree.superclass._init.apply(this, arguments); this.initTree(this.options.items); }, _formatItems: function (nodes, layer) { var self = this; BI.each(nodes, function (i, node) { var extend = {}; node.layer = layer; if (!BI.isKey(node.id)) { node.id = BI.UUID(); } if (node.isParent === true || BI.isNotEmptyArray(node.children)) { switch (i) { case 0 : extend.type = "bi.multilayer_select_tree_first_plus_group_node"; break; case nodes.length - 1 : extend.type = "bi.multilayer_select_tree_last_plus_group_node"; break; default : extend.type = "bi.multilayer_select_tree_mid_plus_group_node"; break; } BI.defaults(node, extend); self._formatItems(node.children, layer + 1); } else { switch (i) { case nodes.length - 1: extend.type = "bi.multilayer_single_tree_last_tree_leaf_item"; break; default : extend.type = "bi.multilayer_single_tree_mid_tree_leaf_item"; } BI.defaults(node, extend); } }); return nodes; }, _assertId: function (sNodes) { BI.each(sNodes, function (i, node) { node.id = node.id || BI.UUID(); }); }, //构造树结构, initTree: function (nodes) { var self = this, o = this.options; this.empty(); this._assertId(nodes); this.tree = BI.createWidget({ type: "bi.custom_tree", element: this, expander: { type: "bi.select_tree_expander", isDefaultInit: o.isDefaultInit, el: {}, popup: { type: "bi.custom_tree" } }, items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0), itemsCreator: o.itemsCreator, el: { type: "bi.button_tree", chooseType: BI.Selection.Single, layouts: [{ type: "bi.vertical" }] } }); this.tree.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.MultiLayerSelectLevelTree.EVENT_CHANGE, arguments); } }) }, populate: function (nodes) { this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0)); }, doBehavior: function () { this.tree.doBehavior.apply(this.tree, arguments); }, setValue: function (v) { this.tree.setValue(v); }, getValue: function () { return this.tree.getValue(); }, getAllLeaves: function () { return this.tree.getAllLeaves(); }, getNodeById: function (id) { return this.tree.getNodeById(id); }, getNodeByValue: function (id) { return this.tree.getNodeByValue(id); } }); BI.MultiLayerSelectLevelTree.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_select_level_tree", BI.MultiLayerSelectLevelTree);/** * Created by GUY on 2016/1/26. * * @class BI.MultiLayerSelectTreePopup * @extends BI.Pane */ BI.MultiLayerSelectTreePopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSelectTreePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer-select-tree-popup", tipText: BI.i18nText("BI-No_Selected_Item"), isDefaultInit: false, itemsCreator: BI.emptyFn, items: [] }); }, _init: function () { BI.MultiLayerSelectTreePopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: 'bi.multilayer_select_level_tree', isDefaultInit: o.isDefaultInit, items: o.items, itemsCreator: o.itemsCreator }); BI.createWidget({ type: "bi.vertical", scrolly: false, scrollable: true, element: this, items: [this.tree] }); this.tree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.tree.on(BI.MultiLayerSelectLevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.MultiLayerSelectTreePopup.EVENT_CHANGE); }); this.check(); }, getValue: function () { return this.tree.getValue(); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.tree.setValue(v); }, populate: function (items) { BI.MultiLayerSelectTreePopup.superclass.populate.apply(this, arguments); this.tree.populate(items); } }); BI.MultiLayerSelectTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_select_tree_popup", BI.MultiLayerSelectTreePopup);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSelectTreeFirstPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSelectTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-select-tree-first-plus-group-node bi-list-item-active", layer: 0,//第几层级 id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.select_tree_first_plus_group_node", stopPropagation: true, logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { self.setSelected(self.isSelected()); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, isOnce: function () { return true; }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, isSelected: function () { return this.node.isSelected(); }, setSelected: function (b) { BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setSelected.apply(this, arguments); this.node.setSelected(b); }, doClick: function () { BI.NodeButton.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments); this.node.setOpened(v); } }); $.shortcut("bi.multilayer_select_tree_first_plus_group_node", BI.MultiLayerSelectTreeFirstPlusGroupNode);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSelectTreeLastPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSelectTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-select-tree-last-plus-group-node bi-list-item-active", layer: 0,//第几层级 id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.select_tree_last_plus_group_node", stopPropagation: true, logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { self.setSelected(self.isSelected()); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, isSelected: function () { return this.node.isSelected(); }, setSelected: function (b) { BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setSelected.apply(this, arguments); this.node.setSelected(b); }, doClick: function () { BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments); this.node.setOpened(v); } }); $.shortcut("bi.multilayer_select_tree_last_plus_group_node", BI.MultiLayerSelectTreeLastPlusGroupNode);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSelectTreeMidPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSelectTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-select-tree-mid-plus-group-node bi-list-item-active", layer: 0,//第几层级 id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.select_tree_mid_plus_group_node", stopPropagation: true, logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { self.setSelected(self.isSelected()); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, isSelected: function () { return this.node.isSelected(); }, setSelected: function (b) { BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setSelected.apply(this, arguments); this.node.setSelected(b); }, doClick: function () { BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments); this.node.setOpened(v); } }); $.shortcut("bi.multilayer_select_tree_mid_plus_group_node", BI.MultiLayerSelectTreeMidPlusGroupNode);/** * 多层级下拉单选树 * Created by GUY on 2016/1/26. * * @class BI.MultiLayerSingleTreeCombo * @extends BI.Widget */ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer-singletree-combo", isDefaultInit: false, height: 30, text: "", itemsCreator: BI.emptyFn, items: [] }); }, _init: function () { BI.MultiLayerSingleTreeCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.single_tree_trigger", text: o.text, height: o.height, items: o.items }); this.popup = BI.createWidget({ type: "bi.multilayer_single_tree_popup", isDefaultInit: o.isDefaultInit, items: o.items }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup } }); this.combo.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.popup.on(BI.MultiLayerSingleTreePopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE); }); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); }, populate: function (items) { this.combo.populate(items); } }); BI.MultiLayerSingleTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo);/** * guy * 二级树 * @class BI.MultiLayerSingleLevelTree * @extends BI.Single */ BI.MultiLayerSingleLevelTree = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleLevelTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer-single-level-tree", isDefaultInit: false, items: [], itemsCreator: BI.emptyFn }) }, _init: function () { BI.MultiLayerSingleLevelTree.superclass._init.apply(this, arguments); this.initTree(this.options.items); }, _formatItems: function (nodes, layer) { var self = this; BI.each(nodes, function (i, node) { var extend = {}; node.layer = layer; if (!BI.isKey(node.id)) { node.id = BI.UUID(); } if (node.isParent === true || BI.isNotEmptyArray(node.children)) { switch (i) { case 0 : extend.type = "bi.multilayer_single_tree_first_plus_group_node"; break; case nodes.length - 1 : extend.type = "bi.multilayer_single_tree_last_plus_group_node"; break; default : extend.type = "bi.multilayer_single_tree_mid_plus_group_node"; break; } BI.defaults(node, extend); self._formatItems(node.children, layer + 1); } else { switch (i) { case nodes.length - 1: extend.type = "bi.multilayer_single_tree_last_tree_leaf_item"; break; default : extend.type = "bi.multilayer_single_tree_mid_tree_leaf_item"; } BI.defaults(node, extend); } }); return nodes; }, _assertId: function (sNodes) { BI.each(sNodes, function (i, node) { node.id = node.id || BI.UUID(); }); }, //构造树结构, initTree: function (nodes) { var self = this, o = this.options; this.empty(); this._assertId(nodes); this.tree = BI.createWidget({ type: "bi.custom_tree", element: this, expander: { isDefaultInit: o.isDefaultInit, el: {}, popup: { type: "bi.custom_tree" } }, items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0), itemsCreator: function (op, callback) { o.itemsCreator(op, function (items) { callback(BI.Tree.transformToTreeFormat(items), 0) }) }, el: { type: "bi.button_tree", chooseType: BI.Selection.Single, layouts: [{ type: "bi.vertical" }] } }); this.tree.on(BI.Controller.EVENT_CHANGE, function (type, v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.MultiLayerSingleLevelTree.EVENT_CHANGE, v); } }) }, populate: function (nodes) { this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0)); }, doBehavior: function () { this.tree.doBehavior.apply(this.tree, arguments); }, setValue: function (v) { this.tree.setValue(v); }, getValue: function () { return this.tree.getValue(); }, getAllLeaves: function () { return this.tree.getAllLeaves(); }, getNodeById: function (id) { return this.tree.getNodeById(id); }, getNodeByValue: function (id) { return this.tree.getNodeByValue(id); } }); BI.MultiLayerSingleLevelTree.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_single_level_tree", BI.MultiLayerSingleLevelTree); /** * Created by GUY on 2016/1/26. * * @class BI.MultiLayerSingleTreePopup * @extends BI.Pane */ BI.MultiLayerSingleTreePopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleTreePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multilayer-singletree-popup", tipText: BI.i18nText("BI-No_Selected_Item"), isDefaultInit: false, itemsCreator: BI.emptyFn, items: [] }); }, _init: function () { BI.MultiLayerSingleTreePopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: 'bi.multilayer_single_level_tree', isDefaultInit: o.isDefaultInit, items: o.items, itemsCreator: o.itemsCreator }); BI.createWidget({ type: "bi.vertical", scrolly: false, scrollable: true, element: this, items: [this.tree] }); this.tree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.tree.on(BI.MultiLayerSingleLevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.MultiLayerSingleTreePopup.EVENT_CHANGE); }); this.check(); }, getValue: function () { return this.tree.getValue(); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.tree.setValue(v); }, populate: function (items) { BI.MultiLayerSingleTreePopup.superclass.populate.apply(this, arguments); this.tree.populate(items); } }); BI.MultiLayerSingleTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multilayer_single_tree_popup", BI.MultiLayerSingleTreePopup);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeFirstPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSingleTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-single-tree-first-plus-group-node bi-list-item", layer: 0,//第几层级 id: "", pId: "", open: false, height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.first_plus_group_node", logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, doClick: function () { BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.node)) { this.node.setOpened(v); } } }); $.shortcut("bi.multilayer_single_tree_first_plus_group_node", BI.MultiLayerSingleTreeFirstPlusGroupNode);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeLastPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSingleTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-single-tree-last-plus-group-node bi-list-item", layer: 0,//第几层级 id: "", pId: "", open: false, height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.last_plus_group_node", logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, doClick: function () { BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.node)) { this.node.setOpened(v); } } }); $.shortcut("bi.multilayer_single_tree_last_plus_group_node", BI.MultiLayerSingleTreeLastPlusGroupNode);/** * 加号表示的组节点 * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeMidPlusGroupNode * @extends BI.NodeButton */ BI.MultiLayerSingleTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-multilayer-single-tree-mid-plus-group-node bi-list-item", layer: 0,//第几层级 id: "", pId: "", open: false, height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.node = BI.createWidget({ type: "bi.mid_plus_group_node", logic: { dynamic: true }, id: o.id, pId: o.pId, open: o.open, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.node.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.node); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.node.doRedMark.apply(this.node, arguments); }, unRedMark: function () { this.node.unRedMark.apply(this.node, arguments); }, doClick: function () { BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.doClick.apply(this, arguments); this.node.setSelected(this.isSelected()); }, setOpened: function (v) { BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.node)) { this.node.setOpened(v); } } }); $.shortcut("bi.multilayer_single_tree_mid_plus_group_node", BI.MultiLayerSingleTreeMidPlusGroupNode);/** * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeFirstTreeLeafItem * @extends BI.BasicButton */ BI.MultiLayerSingleTreeFirstTreeLeafItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-multilayer-single-tree-first-tree-leaf-item bi-list-item-active", logic: { dynamic: false }, layer: 0, id: "", pId: "", height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.item = BI.createWidget({ type: "bi.first_tree_leaf_item", logic: { dynamic: true }, id: o.id, pId: o.pId, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.item.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.item); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.item.doRedMark.apply(this.item, arguments); }, unRedMark: function () { this.item.unRedMark.apply(this.item, arguments); }, doHighLight: function () { this.item.doHighLight.apply(this.item, arguments); }, unHighLight: function () { this.item.unHighLight.apply(this.item, arguments); }, getId: function () { return this.options.id; }, getPId: function () { return this.options.pId; }, doClick: function () { BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.doClick.apply(this, arguments); this.item.setSelected(this.isSelected()); }, setSelected: function (v) { BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.setSelected.apply(this, arguments); this.item.setSelected(v); } }); $.shortcut("bi.multilayer_single_tree_first_tree_leaf_item", BI.MultiLayerSingleTreeFirstTreeLeafItem);/** * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeLastTreeLeafItem * @extends BI.BasicButton */ BI.MultiLayerSingleTreeLastTreeLeafItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-multilayer-single-tree-last-tree-leaf-item bi-list-item-active", logic: { dynamic: false }, layer: 0, id: "", pId: "", height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.item = BI.createWidget({ type: "bi.last_tree_leaf_item", logic: { dynamic: true }, id: o.id, pId: o.pId, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.item.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.item); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.item.doRedMark.apply(this.item, arguments); }, unRedMark: function () { this.item.unRedMark.apply(this.item, arguments); }, doHighLight: function () { this.item.doHighLight.apply(this.item, arguments); }, unHighLight: function () { this.item.unHighLight.apply(this.item, arguments); }, getId: function () { return this.options.id; }, getPId: function () { return this.options.pId; }, doClick: function () { BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.doClick.apply(this, arguments); this.item.setSelected(this.isSelected()); }, setSelected: function (v) { BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.setSelected.apply(this, arguments); this.item.setSelected(v); } }); $.shortcut("bi.multilayer_single_tree_last_tree_leaf_item", BI.MultiLayerSingleTreeLastTreeLeafItem);/** * * Created by GUY on 2016/1/27. * @class BI.MultiLayerSingleTreeMidTreeLeafItem * @extends BI.BasicButton */ BI.MultiLayerSingleTreeMidTreeLeafItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-multilayer-single-tree-mid-tree-leaf-item bi-list-item-active", logic: { dynamic: false }, layer: 0, id: "", pId: "", height: 25 }) }, _init: function () { BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.item = BI.createWidget({ type: "bi.mid_tree_leaf_item", logic: { dynamic: true }, id: o.id, pId: o.pId, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.item.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) {//本身实现click功能 return; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); var items = []; BI.count(0, o.layer, function () { items.push({ type: "bi.layout", cls: "base-line-conn-background", width: 13, height: o.height }) }); items.push(this.item); BI.createWidget({ type: "bi.td", element: this, columnSize: BI.makeArray(o.layer, 13), items: [items] }) }, doRedMark: function () { this.item.doRedMark.apply(this.item, arguments); }, unRedMark: function () { this.item.unRedMark.apply(this.item, arguments); }, doHighLight: function () { this.item.doHighLight.apply(this.item, arguments); }, unHighLight: function () { this.item.unHighLight.apply(this.item, arguments); }, getId: function () { return this.options.id; }, getPId: function () { return this.options.pId; }, doClick: function () { BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.doClick.apply(this, arguments); this.item.setSelected(this.isSelected()); }, setSelected: function (v) { BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.setSelected.apply(this, arguments); this.item.setSelected(v); } }); $.shortcut("bi.multilayer_single_tree_mid_tree_leaf_item", BI.MultiLayerSingleTreeMidTreeLeafItem);/** * * @class BI.MultiSelectCheckPane * @extends BI.Widget */ BI.MultiSelectCheckPane = BI.inherit(BI.Widget, { constants: { height: 25, lgap: 10, tgap: 5 }, _defaultConfig: function () { return BI.extend(BI.MultiSelectCheckPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multi-select-check-pane", items: [], itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, onClickContinueSelect: BI.emptyFn }); }, _init: function () { BI.MultiSelectCheckPane.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.storeValue = {}; this.display = BI.createWidget({ type: 'bi.display_selected_list', items: opts.items, itemsCreator: function (op, callback) { op = BI.extend(op || {}, { selected_values: self.storeValue.value }); if (self.storeValue.type === BI.Selection.Multi) { callback({ items: BI.map(self.storeValue.value, function (i, v) { var txt = opts.valueFormatter(v) || v; return { text: txt, value: v, title: txt } }) }); return; } opts.itemsCreator(op, callback); } }); this.continueSelect = BI.createWidget({ type: 'bi.text_button', text: BI.i18nText('BI-Continue_Select'), cls: 'multi-select-check-selected' }); this.continueSelect.on(BI.TextButton.EVENT_CHANGE, function () { opts.onClickContinueSelect(); }); BI.createWidget({ type: 'bi.vtape', element: this, items: [{ height: this.constants.height, el: { type: 'bi.left', cls: 'multi-select-continue-select', items: [ { el: { type: "bi.label", text: BI.i18nText('BI-Selected_Data') }, lgap: this.constants.lgap, tgap: this.constants.tgap }, { el: this.continueSelect, lgap: this.constants.lgap, tgap: this.constants.tgap }] } }, { height: 'fill', el: this.display }] }); }, setValue: function (v) { this.storeValue = v || {}; }, empty: function () { this.display.empty(); }, populate: function () { this.display.populate.apply(this.display, arguments); } }); $.shortcut("bi.multi_select_check_pane", BI.MultiSelectCheckPane);/** * * * 查看已选弹出层的展示面板 * @class BI.DisplaySelectedList * @extends BI.Widget */ BI.DisplaySelectedList = BI.inherit(BI.Pane, { constants: { height: 25, lgap: 10 }, _defaultConfig: function () { return BI.extend(BI.DisplaySelectedList.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-display-list", itemsCreator: BI.emptyFn, items: [] }); }, _init: function () { BI.DisplaySelectedList.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.hasNext = false; this.button_group = BI.createWidget({ type: "bi.list_pane", element: this, el: { type: "bi.loader", isDefaultInit: false, logic: { dynamic: true, scrolly: true }, items: this._createItems(opts.items), chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, layouts: [{ type: "bi.vertical", lgap: 10 }] }, itemsCreator: function (options, callback) { opts.itemsCreator(options, function (ob) { self.hasNext = !!ob.hasNext; callback(self._createItems(ob.items)); }) }, hasNext: function () { return self.hasNext; } }); }, _createItems: function (items) { return BI.createItems(items, { type: 'bi.icon_text_item', cls: 'cursor-default check-font display-list-item', once: true, invalid: true, selected: true, height: this.constants.height, logic: { dynamic: true } }); }, empty: function () { this.button_group.empty(); }, populate: function (items) { if (arguments.length === 0) { this.button_group.populate(); } else { this.button_group.populate(this._createItems(items)); } } }); $.shortcut('bi.display_selected_list', BI.DisplaySelectedList);/** * * @class BI.MultiSelectCombo * @extends BI.Single */ BI.MultiSelectCombo = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.MultiSelectCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-combo', itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, height: 28 }); }, _init: function () { BI.MultiSelectCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; var assertShowValue = function () { BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue); self.trigger.getSearcher().setState(self.storeValue); 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, masker: { offset: { left: 1, top: 1, right: 2, bottom: 33 } }, valueFormatter: o.valueFormatter, itemsCreator: function (op, callback) { o.itemsCreator(op, function (res) { if (op.times === 1 && BI.isNotNull(op.keywords)) { self.trigger.setValue(self.getValue()); } callback.apply(self, arguments); }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { self._setStartValue(""); this.getSearcher().setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { self._setStartValue(""); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE, function () { if (this.getSearcher().hasMatched()) { var keyword = this.getSearcher().getKeyword(); self._join({ type: BI.Selection.Multi, value: [keyword] }, function () { self.combo.setValue(self.storeValue); self._setStartValue(keyword); assertShowValue(); self.populate(); self._setStartValue(""); }) } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) { var last = BI.last(keywords); keywords = BI.initial(keywords || []); if (keywords.length > 0) { self._joinKeywords(keywords, function () { if (BI.isEndWithBlank(last)) { self.combo.setValue(self.storeValue); assertShowValue(); self.combo.populate(); self._setStartValue(""); } else { self.combo.setValue(self.storeValue); assertShowValue(); } }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) { if (obj instanceof BI.MultiSelectBar) { self._joinAll(this.getValue(), function () { assertShowValue(); }); } else { self._join(this.getValue(), function () {//安徽省 北京 assertShowValue(); }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () { this.getCounter().setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () { if (!self.combo.isViewVisible()) { self.combo.showView(); } }); this.combo = BI.createWidget({ type: "bi.combo", toggle: false, el: this.trigger, adjustLength: 1, popup: this.popup }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { this.setValue(self.storeValue); BI.nextTick(function () { self.populate(); }); }); this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { //important:关闭弹出时又可能没有退出编辑状态 self.trigger.stopEditing(); self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM); }); var triggerBtn = BI.createWidget({ type: "bi.trigger_icon_button", width: o.height, height: o.height, cls: "multi-select-trigger-icon-button" }); triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { self.trigger.getCounter().hideView(); if (self.combo.isViewVisible()) { self.combo.hideView(); } else { self.combo.showView(); } }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.combo, left: 0, right: 0, top: 0, bottom: 0 }, { el: triggerBtn, right: 0, top: 0, bottom: 0 }] }) }, _defaultState: function () { this.trigger.stopEditing(); this.combo.hideView(); }, _assertValue: function (val) { val || (val = {}); val.type || (val.type = BI.Selection.Multi); val.value || (val.value = []); }, _makeMap: function (values) { return BI.makeObject(values || []); }, _joinKeywords: function (keywords, callback) { var self = this, o = this.options; this._assertValue(this.storeValue); o.itemsCreator({ type: BI.MultiSelectCombo.REQ_GET_ALL_DATA, keywords: keywords }, function (ob) { var values = BI.pluck(ob.items, "value"); digest(values); }); function digest(items) { var selectedMap = self._makeMap(items); BI.each(keywords, function (i, val) { if (BI.isNotNull(selectedMap[val])) { self.storeValue.value[self.storeValue.type === BI.Selection.Multi ? "pushDistinct" : "remove"](val); } }); self._adjust(callback); } }, _joinAll: function (res, callback) { var self = this, o = this.options; this._assertValue(res); o.itemsCreator({ type: BI.MultiSelectCombo.REQ_GET_ALL_DATA, keywords: [this.trigger.getKey()] }, function (ob) { var items = BI.pluck(ob.items, "value"); if (self.storeValue.type === res.type) { var change = false; var map = self._makeMap(self.storeValue.value); BI.each(items, function (i, v) { if (BI.isNotNull(map[v])) { change = true; delete map[v]; } }); change && (self.storeValue.value = BI.values(map)); self._adjust(callback); return; } var selectedMap = self._makeMap(self.storeValue.value); var notSelectedMap = self._makeMap(res.value); var newItems = []; BI.each(items, function (i, item) { if (BI.isNotNull(selectedMap[items[i]])) { delete selectedMap[items[i]]; } if (BI.isNull(notSelectedMap[items[i]])) { newItems.push(item); } }); self.storeValue.value = newItems.concat(BI.values(selectedMap)); self._adjust(callback); }) }, _adjust: function (callback) { var self = this, o = this.options; if (!this._count) { o.itemsCreator({ type: BI.MultiSelectCombo.REQ_GET_DATA_LENGTH }, function (res) { self._count = res.count; adjust(); callback(); }); } else { adjust(); callback(); } function adjust() { if (self.storeValue.type === BI.Selection.All && self.storeValue.value.length >= self._count) { self.storeValue = { type: BI.Selection.Multi, value: [] } } else if (self.storeValue.type === BI.Selection.Multi && self.storeValue.value.length >= self._count) { self.storeValue = { type: BI.Selection.All, value: [] } } } }, _join: function (res, callback) { var self = this, o = this.options; this._assertValue(res); this._assertValue(this.storeValue); if (this.storeValue.type === res.type) { var map = this._makeMap(this.storeValue.value); BI.each(res.value, function (i, v) { if (!map[v]) { self.storeValue.value.push(v); map[v] = v; } }); var change = false; BI.each(res.assist, function (i, v) { if (BI.isNotNull(map[v])) { change = true; delete map[v]; } }); change && (this.storeValue.value = BI.values(map)); self._adjust(callback); return; } this._joinAll(res, callback); }, _setStartValue: function (value) { this._startValue = value; this.popup.setStartValue(value); }, setValue: function (v) { this.storeValue = v || {}; this._assertValue(this.storeValue); this.combo.setValue(this.storeValue); this.trigger.setValue(this.storeValue); }, getValue: function () { return this.storeValue; }, populate: function () { this._count = null; this.combo.populate.apply(this.combo, arguments); } }); BI.extend(BI.MultiSelectCombo, { REQ_GET_DATA_LENGTH: 0, REQ_GET_ALL_DATA: -1 }); BI.MultiSelectCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.multi_select_combo', BI.MultiSelectCombo);/** * 多选加载数据面板 * Created by guy on 15/11/2. * @class BI.MultiSelectLoader * @extends Widget */ BI.MultiSelectLoader = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiSelectLoader.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-loader', logic: { dynamic: true }, el: { height: 400 }, valueFormatter: BI.emptyFn, itemsCreator: BI.emptyFn, onLoaded: BI.emptyFn }); }, _init: function () { BI.MultiSelectLoader.superclass._init.apply(this, arguments); var self = this, opts = this.options; var hasNext = false; this.button_group = BI.createWidget({ type: "bi.select_list", element: this, logic: opts.logic, el: BI.extend({ onLoaded: opts.onLoaded, el: { type: "bi.loader", isDefaultInit: false, logic: { dynamic: true, scrolly: true }, el: { chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, behaviors: { redmark: function () { return true; } }, layouts: [{ type: "bi.vertical" }] } } }, opts.el), itemsCreator: function (op, callback) { var startValue = self._startValue; self.storeValue && (op = BI.extend(op || {}, { selected_values: BI.isKey(startValue) && self.storeValue.type === BI.Selection.Multi ? self.storeValue.value.concat(startValue) : self.storeValue.value })); opts.itemsCreator(op, function (ob) { hasNext = ob.hasNext; var firstItems = []; if (op.times === 1 && self.storeValue) { var json = BI.map(self.storeValue.value, function (i, v) { var txt = opts.valueFormatter(v) || v; return { text: txt, value: v, title: txt, selected: self.storeValue.type === BI.Selection.Multi } }); if (BI.isKey(self._startValue) && !self.storeValue.value.contains(self._startValue)) { var txt = opts.valueFormatter(startValue) || startValue; json.unshift({ text: txt, value: startValue, title: txt, selected: true }) } firstItems = self._createItems(json); } callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || ""); if (op.times === 1 && self.storeValue) { BI.isKey(startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](startValue); self.setValue(self.storeValue); } (op.times === 1) && self._scrollToTop(); }); }, hasNext: function () { return hasNext; } }); 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.MultiSelectLoader.EVENT_CHANGE, arguments); }); }, _createItems: function (items) { return BI.createItems(items, { type: "bi.multi_select_item", logic: this.options.logic, height: 25, selected: this.isAllSelected() }) }, _scrollToTop: function () { var self = this; BI.delay(function () { self.button_group.element.scrollTop(0); }, 30); }, isAllSelected: function () { return this.button_group.isAllSelected(); }, _assertValue: function (val) { val || (val = {}); val.type || (val.type = BI.Selection.Multi); val.value || (val.value = []); }, setStartValue: function (v) { this._startValue = v; }, setValue: function (v) { this.storeValue = v || {}; this._assertValue(this.storeValue); this.button_group.setValue(this.storeValue); }, getValue: function () { return this.button_group.getValue(); }, getAllButtons: function () { return this.button_group.getAllButtons(); }, empty: function () { this.button_group.empty(); }, populate: function (items) { this.button_group.populate.apply(this.button_group, arguments); }, setEnable: function (arg) { this.button_group.setEnable(arg); }, resetHeight: function (h) { this.button_group.resetHeight(h); }, resetWidth: function (w) { this.button_group.resetWidth(w); } }); BI.MultiSelectLoader.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.multi_select_loader', BI.MultiSelectLoader);/** * 带加载的多选下拉面板 * @class BI.MultiSelectPopupView * @extends Widget */ BI.MultiSelectPopupView = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiSelectPopupView.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-popup-view', maxWidth: 'auto', minWidth: 135, maxHeight: 400, valueFormatter: BI.emptyFn, itemsCreator: BI.emptyFn, onLoaded: BI.emptyFn }); }, _init: function () { BI.MultiSelectPopupView.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.loader = BI.createWidget({ type: "bi.multi_select_loader", itemsCreator: opts.itemsCreator, valueFormatter: opts.valueFormatter, onLoaded: opts.onLoaded }); this.popupView = BI.createWidget({ type: "bi.multi_popup_view", stopPropagation: false, maxWidth: opts.maxWidth, minWidth: opts.minWidth, maxHeight: opts.maxHeight, element: this, buttons: [BI.i18nText('BI-Basic_Clears'), BI.i18nText('BI-Basic_Sure')], el: this.loader }); this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () { self.fireEvent(BI.MultiSelectPopupView.EVENT_CHANGE); }); this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) { switch (index) { case 0: self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR); break; case 1: self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM); break; } }); }, isAllSelected: function () { return this.loader.isAllSelected(); }, setStartValue: function (v) { this.loader.setStartValue(v); }, setValue: function (v) { this.popupView.setValue(v); }, getValue: function () { return this.popupView.getValue(); }, populate: function (items) { this.popupView.populate.apply(this.popupView, arguments); }, setEnable: function (arg) { this.popupView.setEnable(arg); }, resetHeight: function (h) { this.popupView.resetHeight(h); }, resetWidth: function (w) { this.popupView.resetWidth(w); } }); BI.MultiSelectPopupView.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM = "EVENT_CLICK_CONFIRM"; BI.MultiSelectPopupView.EVENT_CLICK_CLEAR = "EVENT_CLICK_CLEAR"; $.shortcut('bi.multi_select_popup_view', BI.MultiSelectPopupView);/** * * 复选下拉框 * @class BI.MultiSelectTrigger * @extends BI.Trigger */ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { constants: { height: 14, rgap: 4, lgap: 4 }, _defaultConfig: function () { return BI.extend(BI.MultiSelectTrigger.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multi-select-trigger", itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, searcher: {}, switcher: {}, adapter: null, masker: {} }); }, _init: function () { BI.MultiSelectTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options; if (o.height) { this.setHeight(o.height - 2); } this.searcher = BI.createWidget(o.searcher, { type: "bi.multi_select_searcher", height: o.height, itemsCreator: o.itemsCreator, valueFormatter: o.valueFormatter, popup: {}, adapter: o.adapter, masker: o.masker }); this.searcher.on(BI.MultiSelectSearcher.EVENT_START, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_START); }); this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_PAUSE); }); this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_SEARCHING, arguments); }); this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_STOP); }); this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_CHANGE, arguments); }); this.numberCounter = BI.createWidget(o.switcher, { type: 'bi.multi_select_check_selected_switcher', valueFormatter: o.valueFormatter, itemsCreator: o.itemsCreator, adapter: o.adapter, masker: o.masker }); this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK); }); this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW); }); var wrapNumberCounter = BI.createWidget({ type: 'bi.right_vertical_adapt', hgap: 4, items: [{ el: this.numberCounter }] }); var wrapper = BI.createWidget({ type: 'bi.htape', element: this, items: [ { el: this.searcher, width: 'fill' }, { el: wrapNumberCounter, width: 0 }, { el: BI.createWidget(), width: 30 }] }); this.numberCounter.on(BI.Events.VIEW, function (b) { BI.nextTick(function () {//自动调整宽度 wrapper.attr("items")[1].width = (b === true ? self.numberCounter.element.outerWidth() + 8 : 0); wrapper.resize(); }); }); this.element.click(function (e) { if (self.element.__isMouseInBounds__(e) && !self.numberCounter.element.__isMouseInBounds__(e)) { self.numberCounter.hideView(); } }); }, getCounter: function () { return this.numberCounter; }, getSearcher: function () { return this.searcher; }, stopEditing: function () { this.searcher.stopSearch(); this.numberCounter.hideView(); }, setValue: function (ob) { this.searcher.setValue(ob); this.numberCounter.setValue(ob); }, setEnable: function (v) { this.searcher.setEnable(v); }, getKey: function () { return this.searcher.getKey(); }, getValue: function () { return this.searcher.getValue(); } }); BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK"; BI.MultiSelectTrigger.EVENT_COUNTER_CLICK = "EVENT_COUNTER_CLICK"; BI.MultiSelectTrigger.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiSelectTrigger.EVENT_START = "EVENT_START"; BI.MultiSelectTrigger.EVENT_STOP = "EVENT_STOP"; BI.MultiSelectTrigger.EVENT_PAUSE = "EVENT_PAUSE"; BI.MultiSelectTrigger.EVENT_SEARCHING = "EVENT_SEARCHING"; BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = "EVENT_BEFORE_COUNTER_POPUPVIEW"; $.shortcut('bi.multi_select_trigger', BI.MultiSelectTrigger);/** * 多选加载数据搜索loader面板 * Created by guy on 15/11/4. * @class BI.MultiSelectSearchLoader * @extends Widget */ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiSelectSearchLoader.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-search-loader', itemsCreator: BI.emptyFn, keywordGetter: BI.emptyFn, valueFormatter: BI.emptyFn, }); }, _init: function () { BI.MultiSelectSearchLoader.superclass._init.apply(this, arguments); var self = this, opts = this.options; var hasNext = false; this.button_group = BI.createWidget({ type: "bi.select_list", element: this, logic: { dynamic: false }, el: { tipText: BI.i18nText("BI-No_Select"), el: { type: "bi.loader", isDefaultInit: false, logic: { dynamic: true, scrolly: true }, 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 || {}, { selected_values: 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); } callback(firstItems.concat(self._createItems(ob.items)), keyword); if (op.times === 1 && self.storeValue) { self.setValue(self.storeValue); } }); }, hasNext: function () { return hasNext; } }); 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); }); }, _createItems: function (items) { return BI.createItems(items, { type: "bi.multi_select_item", logic: { dynamic: false }, height: 25, selected: this.isAllSelected() }) }, isAllSelected: function () { return this.button_group.isAllSelected(); }, _filterValues: function (src) { var o = this.options; var keyword = o.keywordGetter(); var values = BI.deepClone(src.value) || []; var newValues = BI.map(values, function (i, v) { return { text: o.valueFormatter(v) || v, value: v }; }); if (BI.isKey(keyword)) { var search = BI.Func.getSearchResult(newValues, keyword); values = search.matched.concat(search.finded); } return BI.map(values, function (i, v) { return { text: v.text, title: v.text, value: v.value, selected: src.type === BI.Selection.All } }) }, setValue: function (v) { this.storeValue = v; this.button_group.setValue(v); }, getValue: function () { return this.button_group.getValue(); }, getAllButtons: function () { return this.button_group.getAllButtons(); }, empty: function () { this.button_group.empty(); }, populate: function (items) { this.button_group.populate.apply(this.button_group, arguments); }, setEnable: function (arg) { this.button_group.setEnable(arg); }, resetHeight: function (h) { this.button_group.resetHeight(h); }, resetWidth: function (w) { this.button_group.resetWidth(w); } }); BI.MultiSelectSearchLoader.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.multi_select_search_loader', BI.MultiSelectSearchLoader);/** * * 在搜索框中输入文本弹出的面板 * @class BI.MultiSelectSearchPane * @extends Widget */ BI.MultiSelectSearchPane = BI.inherit(BI.Widget, { constants: { height: 25, lgap: 10, tgap: 5 }, _defaultConfig: function () { return BI.extend(BI.MultiSelectSearchPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multi-select-search-pane", itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, keywordGetter: BI.emptyFn }); }, _init: function () { BI.MultiSelectSearchPane.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tooltipClick = BI.createWidget({ type: "bi.label", invisible: true, text: BI.i18nText('BI-Click_Blank_To_Select'), cls: 'multi-select-toolbar', height: this.constants.height }); this.loader = BI.createWidget({ type: "bi.multi_select_search_loader", keywordGetter: o.keywordGetter, valueFormatter: o.valueFormatter, itemsCreator: function (op, callback) { o.itemsCreator.apply(self, [op, function (res) { callback(res); self.setKeyword(o.keywordGetter()); }]); } }); this.loader.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.resizer = BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.tooltipClick, height: 0 }, { el: this.loader }] }); this.tooltipClick.setVisible(false); }, setKeyword: function (keyword) { var btn; var isVisible = this.loader.getAllButtons().length > 0 && (btn = this.loader.getAllButtons()[0]) && (keyword === btn.getValue()); if (isVisible !== this.tooltipClick.isVisible()) { this.tooltipClick.setVisible(isVisible); this.resizer.attr("items")[0].height = (isVisible ? this.constants.height : 0); this.resizer.resize(); } }, isAllSelected: function () { return this.loader.isAllSelected(); }, hasMatched: function () { return this.tooltipClick.isVisible(); }, setValue: function (v) { this.loader.setValue(v); }, getValue: function () { return this.loader.getValue(); }, empty: function () { this.loader.empty(); }, populate: function (items) { this.loader.populate.apply(this.loader, arguments); } }); BI.MultiSelectSearchPane.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.multi_select_search_pane", BI.MultiSelectSearchPane);/** * 查看已选按钮 * Created by guy on 15/11/3. * @class BI.MultiSelectCheckSelectedButton * @extends BI.Single */ BI.MultiSelectCheckSelectedButton = BI.inherit(BI.Single, { _const: { checkSelected: BI.i18nText('BI-Check_Selected') }, _defaultConfig: function () { return BI.extend(BI.MultiSelectCheckSelectedButton.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-check-selected-button', itemsCreator: BI.emptyFn }); }, _init: function () { BI.MultiSelectCheckSelectedButton.superclass._init.apply(this, arguments); var self = this; this.numberCounter = BI.createWidget({ type: 'bi.text_button', element: this, hgap: 4, text: "0", textAlign: 'center', textHeight: 15 }); this.numberCounter.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.numberCounter.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE, arguments); }); this.numberCounter.element.hover(function () { self.numberCounter.setTag(self.numberCounter.getText()); self.numberCounter.setText(self._const.checkSelected); }, function () { self.numberCounter.setText(self.numberCounter.getTag()); }); this.setVisible(false); }, setValue: function (ob) { var self = this, o = this.options; ob || (ob = {}); ob.type || (ob.type = BI.Selection.Multi); ob.value || (ob.value = []); if (ob.type === BI.Selection.All) { o.itemsCreator({ type: BI.MultiSelectCombo.REQ_GET_DATA_LENGTH }, function (res) { var length = res.count - ob.value.length; BI.nextTick(function(){ self.numberCounter.setText(length); self.setVisible(length > 0); }); }); return; } BI.nextTick(function(){ self.numberCounter.setText(ob.value.length); self.setVisible(ob.value.length > 0); }) }, getValue: function () { } }); BI.MultiSelectCheckSelectedButton.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.multi_select_check_selected_button', BI.MultiSelectCheckSelectedButton);/** * 多选输入框 * Created by guy on 15/11/3. * @class BI.MultiSelectEditor * @extends Widget */ BI.MultiSelectEditor = BI.inherit(BI.Widget, { _const: { checkSelected: BI.i18nText('BI-Check_Selected') }, _defaultConfig: function () { return BI.extend(BI.MultiSelectEditor.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-editor', el: {} }); }, _init: function () { BI.MultiSelectEditor.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget(o.el, { type: 'bi.state_editor', element: this, height: o.height, watermark: BI.i18nText('BI-Basic_Search'), allowBlank: true }); this.editor.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.editor.on(BI.StateEditor.EVENT_PAUSE, function () { self.fireEvent(BI.MultiSelectEditor.EVENT_PAUSE); }); this.editor.on(BI.StateEditor.EVENT_CLICK_LABEL, function () { }); }, focus: function () { this.editor.focus(); }, blur: function () { this.editor.blur(); }, setState: function (state) { this.editor.setState(state); }, setValue: function (v) { this.editor.setValue(v); }, setEnable: function(v){ this.editor.setEnable(v); }, getValue: function () { var v = this.editor.getState(); if (BI.isArray(v) && v.length > 0) { return v[v.length - 1]; } else { return ""; } }, getKeywords: function () { var val = this.editor.getLastValidValue(); var keywords = val.match(/[\S]+/g); if (BI.isEndWithBlank(val)) { return keywords.concat([' ']); } return keywords; }, populate: function (items) { } }); BI.MultiSelectEditor.EVENT_PAUSE = "MultiSelectEditor.EVENT_PAUSE"; $.shortcut('bi.multi_select_editor', BI.MultiSelectEditor);/** * searcher * Created by guy on 15/11/3. * @class BI.MultiSelectSearcher * @extends Widget */ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiSelectSearcher.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-searcher', itemsCreator: BI.emptyFn, el: {}, popup: {}, valueFormatter: BI.emptyFn, adapter: null, masker: {} }); }, _init: function () { BI.MultiSelectSearcher.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget(o.el, { type: 'bi.multi_select_editor', height: o.height }); this.searcher = BI.createWidget({ type: "bi.searcher", element: this, height: o.height, isAutoSearch: false, isAutoSync: false, onSearch: function (op, callback) { callback(); }, el: this.editor, popup: BI.extend({ type: "bi.multi_select_search_pane", valueFormatter: o.valueFormatter, keywordGetter: function () { return self.editor.getValue(); }, itemsCreator: function (op, callback) { op.keyword = self.editor.getValue(); this.setKeyword(op.keyword); o.itemsCreator(op, callback); } }, o.popup), adapter: o.adapter, masker: o.masker }); this.searcher.on(BI.Searcher.EVENT_START, function () { self.fireEvent(BI.MultiSelectSearcher.EVENT_START); }); this.searcher.on(BI.Searcher.EVENT_PAUSE, function () { if (this.hasMatched()) { } self.fireEvent(BI.MultiSelectSearcher.EVENT_PAUSE); }); this.searcher.on(BI.Searcher.EVENT_STOP, function () { self.fireEvent(BI.MultiSelectSearcher.EVENT_STOP); }); this.searcher.on(BI.Searcher.EVENT_CHANGE, function () { self.fireEvent(BI.MultiSelectSearcher.EVENT_CHANGE, arguments); }); this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () { var keywords = this.getKeywords(); self.fireEvent(BI.MultiSelectSearcher.EVENT_SEARCHING, keywords); }); }, adjustView: function () { this.searcher.adjustView(); }, isSearching: function () { return this.searcher.isSearching(); }, stopSearch: function () { this.searcher.stopSearch(); }, getKeyword: function () { return this.editor.getValue(); }, hasMatched: function () { return this.searcher.hasMatched(); }, hasChecked: function () { return this.searcher.getView() && this.searcher.getView().hasChecked(); }, setState: function (ob) { ob || (ob = {}); ob.value || (ob.value = []); if (ob.type === BI.Selection.All) { this.editor.setState(BI.size(ob.value) > 0 ? BI.Selection.Multi : BI.Selection.All); } else { if (BI.size(ob.value) === 1) { this.editor.setState(ob.value[0] + ""); } else { this.editor.setState(BI.size(ob.value) > 0 ? BI.Selection.Multi : BI.Selection.None); } } }, setValue: function (ob) { this.setState(ob); this.searcher.setValue(ob); }, getKey: function () { return this.editor.getValue(); }, getValue: function () { return this.searcher.getValue(); }, setEnable: function (v) { this.editor.setEnable(v); }, populate: function (items) { this.searcher.populate.apply(this.searcher, arguments); } }); BI.MultiSelectSearcher.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiSelectSearcher.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiSelectSearcher.EVENT_START = "EVENT_START"; BI.MultiSelectSearcher.EVENT_STOP = "EVENT_STOP"; BI.MultiSelectSearcher.EVENT_PAUSE = "EVENT_PAUSE"; BI.MultiSelectSearcher.EVENT_SEARCHING = "EVENT_SEARCHING"; $.shortcut('bi.multi_select_searcher', BI.MultiSelectSearcher);/** * 查看已选switcher * Created by guy on 15/11/3. * @class BI.MultiSelectCheckSelectedSwitcher * @extends Widget */ BI.MultiSelectCheckSelectedSwitcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiSelectCheckSelectedSwitcher.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-select-check-selected-switcher', itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, el: {}, popup: {}, adapter: null, masker: {} }); }, _init: function () { BI.MultiSelectCheckSelectedSwitcher.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button = BI.createWidget(o.el, { type: "bi.multi_select_check_selected_button", itemsCreator: o.itemsCreator }); this.button.on(BI.Events.VIEW, function () { self.fireEvent(BI.Events.VIEW, arguments); }); this.switcher = BI.createWidget({ type: "bi.switcher", toggle: false, element: this, el: this.button, popup: BI.extend({ type: "bi.multi_select_check_pane", valueFormatter: o.valueFormatter, itemsCreator: o.itemsCreator, onClickContinueSelect: function () { self.switcher.hideView(); } }, o.popup), adapter: o.adapter, masker: o.masker }); this.switcher.on(BI.Switcher.EVENT_TRIGGER_CHANGE, function () { self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE); }); this.switcher.on(BI.Switcher.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW); }); this.switcher.on(BI.Switcher.EVENT_AFTER_POPUPVIEW, function () { var me = this; BI.nextTick(function () { me.populate(); }); }); this.switcher.element.click(function (e) { e.stopPropagation(); }); }, adjustView: function () { this.switcher.adjustView(); }, hideView: function () { this.switcher.empty(); this.switcher.hideView(); }, setValue: function (v) { this.switcher.setValue(v); }, setButtonChecked: function (v) { this.button.setValue(v) }, getValue: function () { }, populate: function (items) { this.switcher.populate.apply(this.switcher, arguments); } }); BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE = "MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE"; BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW = "MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW"; $.shortcut('bi.multi_select_check_selected_switcher', BI.MultiSelectCheckSelectedSwitcher);/** * Created by zcf on 2016/12/14. */ BI.MultiStringList = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiStringList.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-string-list', itemsCreator: BI.emptyFn, valueFormatter: BI.emptyFn, height: 25 }) }, _init: function () { BI.MultiStringList.superclass._init.apply(this, arguments); var self = this, o = this.options; var assertShowValue = function () { BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue); self.trigger.getSearcher().setState(self.storeValue); self.trigger.getCounter().setButtonChecked(self.storeValue); }; this.storeValue = {}; this.popup = BI.createWidget({ type: "bi.multi_select_loader", cls: "popup-multi-string-list", itemsCreator: o.itemsCreator, valueFormatter: o.valueFormatter, onLoaded: o.onLoaded, el: { height: "" } }); this.popup.on(BI.MultiSelectLoader.EVENT_CHANGE, function () { self.storeValue = this.getValue(); self._adjust(function () { assertShowValue(); self.fireEvent(BI.MultiStringList.EVENT_CHANGE); }); }); this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", height: o.height, adapter: this.popup, masker: { offset: { left: 1, top: 0, right: 2, bottom: 1 } }, valueFormatter: o.valueFormatter, itemsCreator: function (op, callback) { o.itemsCreator(op, function (res) { if (op.times === 1 && BI.isNotNull(op.keyword)) { self.trigger.setValue(self.getValue()); } callback.apply(self, arguments); }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { self._setStartValue(""); this.getSearcher().setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { self._setStartValue(""); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE, function () { if (this.getSearcher().hasMatched()) { var keyword = this.getSearcher().getKeyword(); self._join({ type: BI.Selection.Multi, value: [keyword] }, function () { self.trigger.setValue(self.storeValue); self.popup.setValue(self.storeValue); self._setStartValue(keyword); assertShowValue(); self.populate(); self._setStartValue(""); self.fireEvent(BI.MultiStringList.EVENT_CHANGE); }) } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) { var last = BI.last(keywords); keywords = BI.initial(keywords || []); if (keywords.length > 0) { self._joinKeywords(keywords, function () { if (BI.isEndWithBlank(last)) { self.trigger.setValue(self.storeValue); self.popup.setValue(self.storeValue); assertShowValue(); self.popup.populate(); self._setStartValue(""); } else { self.trigger.setValue(self.storeValue); self.popup.setValue(self.storeValue); assertShowValue(); } }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) { if (obj instanceof BI.MultiSelectBar) { self._joinAll(this.getValue(), function () { assertShowValue(); }); } else { self._join(this.getValue(), function () {//安徽省 北京 assertShowValue(); }); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () { this.getCounter().setValue(self.storeValue); }); var div = BI.createWidget({ type: "bi.layout" }); BI.createWidget({ type: "bi.vtape", element: this, height: "100%", width: "100%", items: [{ el: this.trigger, height: 25 }, { el: div, height: 2 }, { el: this.popup, height: "fill" }] }); }, _defaultState: function () { this.trigger.stopEditing(); }, _assertValue: function (val) { val || (val = {}); val.type || (val.type = BI.Selection.Multi); val.value || (val.value = []); }, _makeMap: function (values) { return BI.makeObject(values || []); }, _joinKeywords: function (keywords, callback) { var self = this, o = this.options; this._assertValue(this.storeValue); if (!this._allData) { o.itemsCreator({ type: BI.MultiStringList.REQ_GET_ALL_DATA }, function (ob) { self._allData = BI.pluck(ob.items, "value"); digest(self._allData); }) } else { digest(this._allData) } function digest(items) { var selectedMap = self._makeMap(items); BI.each(keywords, function (i, val) { if (BI.isNotNull(selectedMap[val])) { self.storeValue.value[self.storeValue.type === BI.Selection.Multi ? "pushDistinct" : "remove"](val); } }); self._adjust(callback); } }, _joinAll: function (res, callback) { var self = this, o = this.options; this._assertValue(res); o.itemsCreator({ type: BI.MultiStringList.REQ_GET_ALL_DATA, keyword: this.trigger.getKey() }, function (ob) { var items = BI.pluck(ob.items, "value"); if (self.storeValue.type === res.type) { var change = false; var map = self._makeMap(self.storeValue.value); BI.each(items, function (i, v) { if (BI.isNotNull(map[v])) { change = true; delete map[v]; } }); change && (self.storeValue.value = BI.values(map)); self._adjust(callback); return; } var selectedMap = self._makeMap(self.storeValue.value); var notSelectedMap = self._makeMap(res.value); var newItems = []; BI.each(items, function (i, item) { if (BI.isNotNull(selectedMap[items[i]])) { delete selectedMap[items[i]]; } if (BI.isNull(notSelectedMap[items[i]])) { newItems.push(item); } }); self.storeValue.value = newItems.concat(BI.values(selectedMap)); self._adjust(callback); }) }, _adjust: function (callback) { var self = this, o = this.options; if (!this._count) { o.itemsCreator({ type: BI.MultiStringList.REQ_GET_DATA_LENGTH }, function (res) { self._count = res.count; adjust(); callback(); }); } else { adjust(); callback(); } function adjust() { if (self.storeValue.type === BI.Selection.All && self.storeValue.value.length >= self._count) { self.storeValue = { type: BI.Selection.Multi, value: [] } } else if (self.storeValue.type === BI.Selection.Multi && self.storeValue.value.length >= self._count) { self.storeValue = { type: BI.Selection.All, value: [] } } } }, _join: function (res, callback) { var self = this, o = this.options; this._assertValue(res); this._assertValue(this.storeValue); if (this.storeValue.type === res.type) { var map = this._makeMap(this.storeValue.value); BI.each(res.value, function (i, v) { if (!map[v]) { self.storeValue.value.push(v); map[v] = v; } }); var change = false; BI.each(res.assist, function (i, v) { if (BI.isNotNull(map[v])) { change = true; delete map[v]; } }); change && (this.storeValue.value = BI.values(map)); self._adjust(callback); return; } this._joinAll(res, callback); }, _setStartValue: function (value) { this._startValue = value; this.popup.setStartValue(value); }, // isAllSelected: function () { // return this.popup.isAllSelected(); // }, resize: function () { this.trigger.getCounter().adjustView(); this.trigger.getSearcher().adjustView(); }, setEnable: function (v) { this.trigger.setEnable(v); this.popup.setEnable(v); }, setValue: function (v) { this.storeValue = v || {}; this._assertValue(this.storeValue); this.popup.setValue(this.storeValue); this.trigger.setValue(this.storeValue); }, getValue: function () { return this.storeValue; }, populate: function () { this._count = null; this._allData = null; this.popup.populate.apply(this.popup, arguments); this.trigger.populate.apply(this.trigger, arguments); } }); BI.extend(BI.MultiStringList, { REQ_GET_DATA_LENGTH: 0, REQ_GET_ALL_DATA: -1 }); BI.MultiStringList.EVENT_CHANGE = "BI.MultiStringList.EVENT_CHANGE"; $.shortcut("bi.multi_string_list", BI.MultiStringList);/** * * @class BI.MultiTreeCheckPane * @extends BI.Pane */ BI.MultiTreeCheckPane = BI.inherit(BI.Pane, { constants: { height: 25, lgap: 10, tgap: 5 }, _defaultConfig: function () { return BI.extend(BI.MultiTreeCheckPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multi-tree-check-pane", onClickContinueSelect: BI.emptyFn }); }, _init: function () { BI.MultiTreeCheckPane.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.selected_values = {}; var continueSelect = BI.createWidget({ type: 'bi.text_button', text: BI.i18nText('BI-Continue_Select'), cls: 'multi-tree-check-selected' }); continueSelect.on(BI.TextButton.EVENT_CHANGE, function () { opts.onClickContinueSelect(); BI.nextTick(function () { self.empty(); }); }); var backToPopup = BI.createWidget({ type: 'bi.left', cls: 'multi-tree-continue-select', items: [ { el: { type: "bi.label", text: BI.i18nText('BI-Selected_Data') }, lgap: this.constants.lgap, tgap: this.constants.tgap }, { el: continueSelect, lgap: this.constants.lgap, tgap: this.constants.tgap }] }); this.display = BI.createWidget({ type: "bi.display_tree", cls: "bi-multi-tree-display", itemsCreator: function (op, callback) { op.type = BI.TreeView.REQ_TYPE_SELECTED_DATA; opts.itemsCreator(op, callback); } }); this.display.on(BI.Events.AFTERINIT, function () { self.fireEvent(BI.Events.AFTERINIT); }); this.display.on(BI.TreeView.EVENT_INIT, function () { backToPopup.setVisible(false); }); this.display.on(BI.TreeView.EVENT_AFTERINIT, function () { backToPopup.setVisible(true); }); BI.createWidget({ type: 'bi.vtape', element: this, items: [{ height: this.constants.height, el: backToPopup }, { height: 'fill', el: this.display }] }); }, empty: function () { this.display.empty(); }, populate: function (configs) { this.display.stroke(configs); }, setValue: function (v) { v || (v = {}); this.display.setValue(v.value); }, getValue: function () { } }); BI.MultiTreeCheckPane.EVENT_CONTINUE_CLICK = "EVENT_CONTINUE_CLICK"; $.shortcut("bi.multi_tree_check_pane", BI.MultiTreeCheckPane);/** * * @class BI.MultiTreeCombo * @extends BI.Single */ BI.MultiTreeCombo = BI.inherit(BI.Single, { constants: { offset: { top: 1, left: 1, right: 2, bottom: 33 } }, _defaultConfig: function () { return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-combo', itemsCreator: BI.emptyFn, height: 25 }); }, _init: function () { BI.MultiTreeCombo.superclass._init.apply(this, arguments); 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, masker: { offset: this.constants.offset }, searcher: { type: "bi.multi_tree_searcher", itemsCreator: o.itemsCreator }, switcher: { el: { type: "bi.multi_tree_check_selected_button" }, popup: { type: "bi.multi_tree_check_pane", itemsCreator: o.itemsCreator } } }); this.combo = BI.createWidget({ type: "bi.combo", toggle: false, el: this.trigger, adjustLength: 1, popup: this.popup }); this.storeValue = {value: {}}; var change = false; var clear = false; //标识当前是否点击了清空 var isSearching = function () { return self.trigger.getSearcher().isSearching(); }; var isPopupView = function () { return self.combo.isViewVisible(); }; this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { self.storeValue = {value: self.combo.getValue()}; this.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { self.storeValue = {value: this.getValue()}; self.combo.setValue(self.storeValue); BI.nextTick(function () { if (isPopupView()) { self.combo.populate(); } }); }); function showCounter() { if (isSearching()) { self.storeValue = {value: self.trigger.getValue()}; } else if (isPopupView()) { self.storeValue = {value: self.combo.getValue()}; } self.trigger.setValue(self.storeValue); } this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () { if (want2showCounter === false) { want2showCounter = true; } if (isInit === true) { want2showCounter = null; showCounter(); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK, function () { self.combo.toggle(); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () { if (!self.combo.isViewVisible()) { self.combo.showView(); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function () { var val = { type: BI.Selection.Multi, value: this.getSearcher().hasChecked() ? {1: 1} : {} }; 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()) { return; } if (change === true) { self.storeValue = {value: self.combo.getValue()}; change = false; } self.combo.setValue(self.storeValue); self.populate(); }); this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () { if (isSearching()) { self.trigger.stopEditing(); self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM); return; } if (isPopupView()) { self.trigger.stopEditing(); self.storeValue = {value: self.combo.getValue()}; if (clear === true) { self.storeValue = {value: {}}; clear = false; change = false; } self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM); } }); var triggerBtn = BI.createWidget({ type: "bi.trigger_icon_button", width: o.height, height: o.height, cls: "multi-select-trigger-icon-button" }); triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { self.trigger.getCounter().hideView(); if (self.combo.isViewVisible()) { self.combo.hideView(); } else { self.combo.showView(); } }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.combo, left: 0, right: 0, top: 0, bottom: 0 }, { el: triggerBtn, right: 0, top: 0, bottom: 0 }] }) }, _defaultState: function () { this.trigger.stopEditing(); this.combo.hideView(); }, setEnable: function(v){ this.combo.setEnable(v); }, setValue: function (v) { this.storeValue.value = v || {}; this.combo.setValue({ value: v || {} }); }, getValue: function () { return this.storeValue.value; }, populate: function () { this.combo.populate.apply(this.combo, arguments); } }); BI.MultiTreeCombo.EVENT_CONFIRM = "MultiTreeCombo.EVENT_CONFIRM"; $.shortcut('bi.multi_tree_combo', BI.MultiTreeCombo);/** * 带加载的多选下拉面板 * @class BI.MultiTreePopup * @extends BI.Pane */ BI.MultiTreePopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.MultiTreePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-popup', maxWidth: 'auto', minWidth: 100, maxHeight: 400, onLoaded: BI.emptyFn }); }, _init: function () { BI.MultiTreePopup.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.selected_values = {}; this.tree = BI.createWidget({ type: "bi.sync_tree", height: 400, cls:"popup-view-tree", itemsCreator: opts.itemsCreator, onLoaded: opts.onLoaded }); this.popupView = BI.createWidget({ type: "bi.multi_popup_view", element: this, stopPropagation: false, maxWidth: opts.maxWidth, minWidth: opts.minWidth, maxHeight: opts.maxHeight, buttons: [BI.i18nText('BI-Basic_Clears'), BI.i18nText('BI-Basic_Sure')], el: this.tree }); this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) { switch (index) { case 0: self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CLEAR); break; case 1: self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CONFIRM); break; } }); this.tree.on(BI.TreeView.EVENT_CHANGE, function () { self.fireEvent(BI.MultiTreePopup.EVENT_CHANGE); }); this.tree.on(BI.TreeView.EVENT_AFTERINIT, function () { self.fireEvent(BI.MultiTreePopup.EVENT_AFTERINIT); }); }, getValue: function () { return this.tree.getValue(); }, setValue: function (v) { v || (v = {}); this.tree.setSelectedValue(v.value); }, populate: function (config) { this.tree.stroke(config); }, hasChecked: function () { return this.tree.hasChecked(); }, setEnable: function (arg) { this.popupView.setEnable(arg); }, resetHeight: function (h) { this.popupView.resetHeight(h); }, resetWidth: function (w) { this.popupView.resetWidth(w); } }); BI.MultiTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiTreePopup.EVENT_CLICK_CONFIRM = "EVENT_CLICK_CONFIRM"; BI.MultiTreePopup.EVENT_CLICK_CLEAR = "EVENT_CLICK_CLEAR"; BI.MultiTreePopup.EVENT_AFTERINIT = "EVENT_AFTERINIT"; $.shortcut('bi.multi_tree_popup_view', BI.MultiTreePopup);/** * * 在搜索框中输入文本弹出的面板 * @class BI.MultiTreeSearchPane * @extends BI.Pane */ BI.MultiTreeSearchPane = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.MultiTreeSearchPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-multi-tree-search-pane", itemsCreator: BI.emptyFn, keywordGetter: BI.emptyFn }); }, _init: function () { BI.MultiTreeSearchPane.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.partTree = BI.createWidget({ type: "bi.part_tree", element: this, tipText: BI.i18nText("BI-No_Select"), itemsCreator: function (op, callback) { op.keyword = opts.keywordGetter(); opts.itemsCreator(op, callback); } }); this.partTree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.partTree.on(BI.TreeView.EVENT_CHANGE, function () { self.fireEvent(BI.MultiTreeSearchPane.EVENT_CHANGE); }); }, hasChecked: function () { return this.partTree.hasChecked(); }, setValue: function (v) { v || (v = {}); this.partTree.setSelectedValue(v.value); }, getValue: function () { return this.partTree.getValue(); }, empty: function () { this.partTree.empty(); }, populate: function (op) { this.partTree.stroke.apply(this.partTree, arguments); } }); BI.MultiTreeSearchPane.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiTreeSearchPane.EVENT_CLICK_CONFIRM = "EVENT_CLICK_CONFIRM"; BI.MultiTreeSearchPane.EVENT_CLICK_CLEAR = "EVENT_CLICK_CLEAR"; $.shortcut("bi.multi_tree_search_pane", BI.MultiTreeSearchPane);/** * 查看已选按钮 * Created by guy on 15/11/3. * @class BI.MultiTreeCheckSelectedButton * @extends BI.Single */ BI.MultiTreeCheckSelectedButton = BI.inherit(BI.Single, { _const: { checkSelected: BI.i18nText('BI-Check_Selected') }, _defaultConfig: function () { return BI.extend(BI.MultiTreeCheckSelectedButton.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-check-selected-button', itemsCreator: BI.emptyFn }); }, _init: function () { BI.MultiTreeCheckSelectedButton.superclass._init.apply(this, arguments); var self = this; this.indicator = BI.createWidget({ type: 'bi.icon_button', cls: 'check-font trigger-check-selected', width: 15, height: 15, stopPropagation: true }); this.checkSelected = BI.createWidget({ type: 'bi.text_button', cls: "trigger-check-selected", invisible: true, hgap: 4, text: this._const.checkSelected, textAlign: 'center', textHeight: 15 }); this.checkSelected.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.checkSelected.on(BI.TextButton.EVENT_CHANGE, function () { self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.horizontal", element: this, items: [this.indicator, this.checkSelected] }) this.element.hover(function () { self.indicator.setVisible(false); self.checkSelected.setVisible(true); }, function () { self.indicator.setVisible(true); self.checkSelected.setVisible(false); }); this.setVisible(false); }, setValue: function (v) { v || (v = {}); this.setVisible(BI.size(v.value) > 0); } }); BI.MultiTreeCheckSelectedButton.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.multi_tree_check_selected_button', BI.MultiTreeCheckSelectedButton);/** * searcher * Created by guy on 15/11/3. * @class BI.MultiTreeSearcher * @extends Widget */ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiTreeSearcher.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-searcher', itemsCreator: BI.emptyFn, popup: {}, adapter: null, masker: {} }); }, _init: function () { BI.MultiTreeSearcher.superclass._init.apply(this, arguments); var self = this, o = this.options; this.editor = BI.createWidget({ type: 'bi.multi_select_editor', height: o.height, el: { type: "bi.simple_state_editor", height: o.height } }); this.searcher = BI.createWidget({ type: "bi.searcher", element: this, isAutoSearch: false, isAutoSync: false, onSearch: function (op, callback) { callback({ keyword: self.editor.getValue() }); }, el: this.editor, popup: BI.extend({ type: "bi.multi_tree_search_pane", keywordGetter: function () { return self.editor.getValue(); }, itemsCreator: function (op, callback) { op.keyword = self.editor.getValue(); o.itemsCreator(op, callback); } }, o.popup), adapter: o.adapter, masker: o.masker }); this.searcher.on(BI.Searcher.EVENT_START, function () { self.fireEvent(BI.MultiTreeSearcher.EVENT_START); }); this.searcher.on(BI.Searcher.EVENT_PAUSE, function () { if (this.hasMatched()) { } self.fireEvent(BI.MultiTreeSearcher.EVENT_PAUSE); }); this.searcher.on(BI.Searcher.EVENT_STOP, function () { self.fireEvent(BI.MultiTreeSearcher.EVENT_STOP); }); this.searcher.on(BI.Searcher.EVENT_CHANGE, function () { self.fireEvent(BI.MultiTreeSearcher.EVENT_CHANGE, arguments); }); }, adjustView: function () { this.searcher.adjustView(); }, isSearching: function () { return this.searcher.isSearching(); }, stopSearch: function () { this.searcher.stopSearch(); }, getKeyword: function () { return this.editor.getValue(); }, hasMatched: function () { return this.searcher.hasMatched(); }, hasChecked: function () { return this.searcher.getView() && this.searcher.getView().hasChecked(); }, setState: function (ob) { ob || (ob = {}); ob.value || (ob.value = []); if (ob.type === BI.Selection.All) { this.editor.setState(BI.size(ob.value) > 0 ? BI.Selection.Multi : BI.Selection.All); } else { this.editor.setState(BI.size(ob.value) > 0 ? BI.Selection.Multi : BI.Selection.None); } }, setValue: function (ob) { this.setState(ob); this.searcher.setValue(ob); }, getKey: function () { return this.editor.getValue(); }, setEnable: function(v){ this.editor.setEnable(v); }, getValue: function () { return this.searcher.getValue(); }, populate: function (items) { this.searcher.populate.apply(this.searcher, arguments); } }); BI.MultiTreeSearcher.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiTreeSearcher.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiTreeSearcher.EVENT_START = "EVENT_START"; BI.MultiTreeSearcher.EVENT_STOP = "EVENT_STOP"; BI.MultiTreeSearcher.EVENT_PAUSE = "EVENT_PAUSE"; $.shortcut('bi.multi_tree_searcher', BI.MultiTreeSearcher);/** * Created by zcf on 2016/12/20. */ BI.MultiTreeList = BI.inherit(BI.Widget, { constants: { offset: { left: 1, top: 0, right: 2, bottom: 1 } }, _defaultConfig: function () { return BI.extend(BI.MultiTreeList.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-multi-tree-combo', itemsCreator: BI.emptyFn, height: 25 }); }, _init: function () { BI.MultiTreeList.superclass._init.apply(this, arguments); var self = this, o = this.options; var isInit = false; var want2showCounter = false; this.popup = BI.createWidget({ type: "bi.multi_tree_list_popup", itemsCreator: o.itemsCreator }); this.popup.on(BI.MultiStringListPopup.EVENT_AFTER_INIT, 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, masker: { offset: this.constants.offset }, searcher: { type: "bi.multi_tree_searcher", itemsCreator: o.itemsCreator }, switcher: { el: { type: "bi.multi_tree_check_selected_button" }, popup: { type: "bi.multi_tree_check_pane", itemsCreator: o.itemsCreator } } }); this.storeValue = {value: {}}; var isSearching = function () { return self.trigger.getSearcher().isSearching(); }; this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { self.storeValue = {value: self.popup.getValue()}; this.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { self.storeValue = {value: this.getValue()}; self.trigger.setValue(self.storeValue); self.popup.setValue(self.storeValue); BI.nextTick(function () { self.trigger.populate(); self.popup.populate(); }); }); function showCounter() { if (isSearching()) { self.storeValue = {value: self.trigger.getValue()}; } else { self.storeValue = {value: self.popup.getValue()}; } self.trigger.setValue(self.storeValue); } this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () { if (want2showCounter === false) { want2showCounter = true; } if (isInit === true) { want2showCounter = null; showCounter(); } }); this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function () { var val = { type: BI.Selection.Multi, value: this.getSearcher().hasChecked() ? {1: 1} : {} }; this.getSearcher().setState(val); this.getCounter().setButtonChecked(val); }); this.popup.on(BI.MultiStringListPopup.EVENT_CHANGE, function () { showCounter(); var val = { type: BI.Selection.Multi, value: this.hasChecked() ? {1: 1} : {} }; self.trigger.getSearcher().setState(val); self.trigger.getCounter().setButtonChecked(val); self.fireEvent(BI.MultiTreeList.EVENT_CHANGE); }); var div = BI.createWidget({ type: "bi.layout" }); BI.createWidget({ type: "bi.vtape", element: this, height: "100%", width: "100%", items: [{ el: this.trigger, height: 25 }, { el: div, height: 2 }, { el: this.popup, height: "fill" }] }) }, _defaultState: function () { this.trigger.stopEditing(); }, resize: function () { this.trigger.getCounter().adjustView(); this.trigger.getSearcher().adjustView(); }, setEnable: function (v) { this.trigger.setEnable(v); this.popup.setEnable(v); }, setValue: function (v) { this.storeValue.value = v || {}; this.popup.setValue({ value: v || {} }); this.trigger.setValue({ value: v || {} }); }, getValue: function () { return this.storeValue.value; }, populate: function () { this.trigger.populate.apply(this.trigger, arguments); this.popup.populate.apply(this.popup, arguments); } }); BI.MultiTreeList.EVENT_CHANGE = "MultiTreeList.EVENT_CHANGE"; $.shortcut('bi.multi_tree_list', BI.MultiTreeList);/** * Created by zcf on 2016/12/21. */ BI.MultiStringListPopup=BI.inherit(BI.Widget,{ _defaultConfig:function () { return BI.extend(BI.MultiStringListPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-tree-list-popup", itemsCreator: BI.emptyFn }); }, _init:function () { BI.MultiStringListPopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.popup = BI.createWidget({ type: "bi.sync_tree", height: 400, element: this, itemsCreator: o.itemsCreator }); this.popup.on(BI.TreeView.EVENT_AFTERINIT, function () { self.fireEvent(BI.MultiStringListPopup.EVENT_AFTER_INIT) }); this.popup.on(BI.TreeView.EVENT_CHANGE, function () { self.fireEvent(BI.MultiStringListPopup.EVENT_CHANGE) }); }, hasChecked: function () { return this.popup.hasChecked(); }, getValue: function () { return this.popup.getValue(); }, setValue: function (v) { v || (v = {}); this.popup.setValue(v.value); }, populate: function (config) { this.popup.stroke(config); } }); BI.MultiStringListPopup.EVENT_AFTER_INIT="BI.MultiStringListPopup.EVENT_AFTER_INIT"; BI.MultiStringListPopup.EVENT_CHANGE="BI.MultiStringListPopup.EVENT_CHANGE"; $.shortcut("bi.multi_tree_list_popup",BI.MultiStringListPopup);//小于号的值为:0,小于等于号的值为:1 //closeMIn:最小值的符号,closeMax:最大值的符号 /** * Created by roy on 15/9/17. * */ BI.NumericalInterval = BI.inherit(BI.Single, { constants: { typeError: "typeBubble", numberError: "numberBubble", signalError: "signalBubble", editorWidth: 114, columns: 5, width: 30, rows: 1, numberErrorCls: "number-error", border: 1, less: 0, less_equal: 1, numTip: "" }, _defaultConfig: function () { var conf = BI.NumericalInterval.superclass._defaultConfig.apply(this, arguments) return BI.extend(conf, { extraCls: "bi-numerical-interval", height: 25 }) }, _init: function () { var self = this, c = this.constants, o = this.options; BI.NumericalInterval.superclass._init.apply(this, arguments) this.smallEditor = BI.createWidget({ type: "bi.sign_editor", height: o.height - 2, watermark: BI.i18nText("BI-Unrestricted"), allowBlank: true, value: o.min, level: "warning", tipType: "warning", quitChecker: function () { return false; }, validationChecker: function (v) { if (!BI.isNumeric(v)) { self.smallEditorBubbleType = c.typeError; return false; } return true; }, cls: "numerical-interval-small-editor" }); this.smallTip = BI.createWidget({ type: "bi.label", text: o.numTip, height: o.height - 2, invisible: true }); BI.createWidget({ type: "bi.absolute", element: this.smallEditor.element, items: [{ el: this.smallTip, top: 0, right: 5 }] }); this.bigEditor = BI.createWidget({ type: "bi.sign_editor", height: o.height - 2, watermark: BI.i18nText("BI-Unrestricted"), allowBlank: true, value: o.max, level: "warning", tipType: "warning", quitChecker: function () { return false; }, validationChecker: function (v) { if (!BI.isNumeric(v)) { self.bigEditorBubbleType = c.typeError; return false; } return true; }, cls: "numerical-interval-big-editor" }); this.bigTip = BI.createWidget({ type: "bi.label", text: o.numTip, height: o.height - 2, invisible: true }); BI.createWidget({ type: "bi.absolute", element: this.bigEditor.element, items: [{ el: this.bigTip, top: 0, right: 5 }] }); //this.smallCombo = BI.createWidget({ // type: "bi.numerical_interval_combo", // cls: "numerical-interval-small-combo", // height: o.height, // value: o.closemin ? 1 : 0, // offsetStyle: "left" //}); // //this.bigCombo = BI.createWidget({ // type: "bi.numerical_interval_combo", // cls: "numerical-interval-big-combo", // height: o.height, // value: o.closemax ? 1 : 0, // offsetStyle: "left" //}); this.smallCombo = BI.createWidget({ type: "bi.icon_combo", cls: "numerical-interval-small-combo", height: o.height - 2, items: [{ text: "(" + BI.i18nText("BI-Less_Than") + ")", iconClass: "less-font", value: 0 }, { text: "(" + BI.i18nText("BI-Less_And_Equal") + ")", value: 1, iconClass: "less-equal-font" }] }); if (o.closemin === true) { this.smallCombo.setValue(1); } else { this.smallCombo.setValue(0); } this.bigCombo = BI.createWidget({ type: "bi.icon_combo", cls: "numerical-interval-big-combo", height: o.height - 2, items: [{ text: "(" + BI.i18nText("BI-Less_Than") + ")", iconClass: "less-font", value: 0 }, { text: "(" + BI.i18nText("BI-Less_And_Equal") + ")", value: 1, iconClass: "less-equal-font" }] }); if (o.closemax === true) { this.bigCombo.setValue(1); } else { this.bigCombo.setValue(0); } this.label = BI.createWidget({ type: "bi.label", text: BI.i18nText("BI-Value"), textHeight: o.height - c.border * 2, width: c.width - c.border * 2, height: o.height - c.border * 2, level: "warning", tipType: "warning" }); this.left = BI.createWidget({ type: "bi.htape", items: [{ el: self.smallEditor }, { el: self.smallCombo, width: c.width - c.border * 2 }] }); this.right = BI.createWidget({ type: "bi.htape", items: [{ el: self.bigCombo, width: c.width - c.border * 2 }, { el: self.bigEditor }] }); BI.createWidget({ element: self, type: "bi.center", hgap: 15, height: o.height, items: [ { type: "bi.absolute", items: [{ el: self.left, left: -15, right: 0, top: 0, bottom: 0 }] }, { type: "bi.absolute", items: [{ el: self.right, left: 0, right: -15, top: 0, bottom: 0 }] } ] }); BI.createWidget({ element: self, type: "bi.horizontal_auto", items: [ self.label ] }); self._setValidEvent(self.bigEditor, c.bigEditor); self._setValidEvent(self.smallEditor, c.smallEditor); self._setErrorEvent(self.bigEditor, c.bigEditor); self._setErrorEvent(self.smallEditor, c.smallEditor); self._setBlurEvent(self.bigEditor); self._setBlurEvent(self.smallEditor); self._setFocusEvent(self.bigEditor); self._setFocusEvent(self.smallEditor); self._setComboValueChangedEvent(self.bigCombo); self._setComboValueChangedEvent(self.smallCombo); self._setEditorValueChangedEvent(self.bigEditor); self._setEditorValueChangedEvent(self.smallEditor); }, _checkValidation: function () { var self = this, c = this.constants, o = this.options; self._setTitle(""); BI.Bubbles.hide(c.typeError); BI.Bubbles.hide(c.numberError); BI.Bubbles.hide(c.signalError); if (!self.smallEditor.isValid() || !self.bigEditor.isValid()) { self.element.removeClass("number-error"); o.validation = "invalid"; return c.typeError; } else { if (BI.isEmptyString(self.smallEditor.getValue()) || BI.isEmptyString(self.bigEditor.getValue())) { self.element.removeClass("number-error"); o.validation = "valid"; return ""; } else { var smallValue = parseFloat(self.smallEditor.getValue()), bigValue = parseFloat(self.bigEditor.getValue()), bigComboValue = self.bigCombo.getValue(), smallComboValue = self.smallCombo.getValue(); if (bigComboValue[0] === c.less_equal && smallComboValue[0] === c.less_equal) { if (smallValue > bigValue) { self.element.addClass("number-error"); o.validation = "invalid"; return c.numberError; } else { self.element.removeClass("number-error"); o.validation = "valid"; return ""; } } else { if (smallValue > bigValue) { self.element.addClass("number-error"); o.validation = "invalid"; return c.numberError; } else if (smallValue === bigValue) { self.element.addClass("number-error"); o.validation = "invalid"; return c.signalError; } else { self.element.removeClass("number-error"); o.validation = "valid"; return ""; } } } } }, _setTitle: function (v) { var self = this; self.bigEditor.setTitle(v); self.smallEditor.setTitle(v); self.label.setTitle(v); }, _setFocusEvent: function (w) { var self = this, c = this.constants; w.on(BI.SignEditor.EVENT_FOCUS, function () { self._setTitle(""); switch (self._checkValidation()) { case c.typeError: BI.Bubbles.show(c.typeError, BI.i18nText("BI-Numerical_Interval_Input_Data"), self, { offsetStyle: "center" }); break; case c.numberError: BI.Bubbles.show(c.numberError, BI.i18nText("BI-Numerical_Interval_Number_Value"), self, { offsetStyle: "center" }); break; case c.signalError: BI.Bubbles.show(c.signalError, BI.i18nText("BI-Numerical_Interval_Signal_Value"), self, { offsetStyle: "center" }); break; default : return } }) }, _setBlurEvent: function (w) { var c = this.constants, self = this; w.on(BI.SignEditor.EVENT_BLUR, function () { BI.Bubbles.hide(c.typeError); BI.Bubbles.hide(c.numberError); BI.Bubbles.hide(c.signalError); switch (self._checkValidation()) { case c.typeError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data")); break; case c.numberError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value")); break; case c.signalError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value")); break; default: self._setTitle(""); } }) }, _setErrorEvent: function (w) { var c = this.constants, self = this w.on(BI.SignEditor.EVENT_ERROR, function () { self._checkValidation(); BI.Bubbles.show(c.typeError, BI.i18nText("BI-Numerical_Interval_Input_Data"), self, { offsetStyle: "center" }); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); }) }, _setValidEvent: function (w) { var self = this, c = this.constants; w.on(BI.SignEditor.EVENT_VALID, function () { switch (self._checkValidation()) { case c.numberError: BI.Bubbles.show(c.numberError, BI.i18nText("BI-Numerical_Interval_Number_Value"), self, { offsetStyle: "center" }); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); break; case c.signalError: BI.Bubbles.show(c.signalError, BI.i18nText("BI-Numerical_Interval_Signal_Value"), self, { offsetStyle: "center" }); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); break; default: self.fireEvent(BI.NumericalInterval.EVENT_VALID); } }) }, _setEditorValueChangedEvent: function (w) { var self = this, c = this.constants; w.on(BI.SignEditor.EVENT_CHANGE, function () { switch (self._checkValidation()) { case c.typeError: BI.Bubbles.show(c.typeError, BI.i18nText("BI-Numerical_Interval_Input_Data"), self, { offsetStyle: "center" }); break; case c.numberError: BI.Bubbles.show(c.numberError, BI.i18nText("BI-Numerical_Interval_Number_Value"), self, { offsetStyle: "center" }); break; case c.signalError: BI.Bubbles.show(c.signalError, BI.i18nText("BI-Numerical_Interval_Signal_Value"), self, { offsetStyle: "center" }); break; default : break; } self.fireEvent(BI.NumericalInterval.EVENT_CHANGE); }); }, _setComboValueChangedEvent: function (w) { var self = this, c = this.constants; w.on(BI.IconCombo.EVENT_CHANGE, function () { switch (self._checkValidation()) { case c.typeError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data")); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); break; case c.numberError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value")); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); break; case c.signalError: self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value")); self.fireEvent(BI.NumericalInterval.EVENT_ERROR); break; default : self.fireEvent(BI.NumericalInterval.EVENT_CHANGE); self.fireEvent(BI.NumericalInterval.EVENT_VALID); } }) }, isValid: function () { return this.options.validation === "valid"; }, setEnable: function (b) { this.smallEditor.setEnable(b); this.smallCombo.setEnable(b); this.bigEditor.setEnable(b); this.bigCombo.setEnable(b); }, setMinEnable: function (b) { this.smallEditor.setEnable(b); }, setCloseMinEnable: function (b) { this.smallCombo.setEnable(b); }, setMaxEnable: function (b) { this.bigEditor.setEnable(b); }, setCloseMaxEnable: function (b) { this.bigCombo.setEnable(b); }, showNumTip: function () { this.smallTip.setVisible(true); this.bigTip.setVisible(true); }, hideNumTip: function () { this.smallTip.setVisible(false); this.bigTip.setVisible(false); }, setNumTip: function(numTip) { this.smallTip.setText(numTip); this.bigTip.setText(numTip); }, getNumTip: function() { return this.smallTip.getText(); }, setValue: function (data) { data = data || {}; var self = this, combo_value; if (BI.isNumeric(data.min) || BI.isEmptyString(data.min)) { self.smallEditor.setValue(data.min); } if (!BI.isNotNull(data.min)) { self.smallEditor.setValue(""); } if (BI.isNumeric(data.max) || BI.isEmptyString(data.max)) { self.bigEditor.setValue(data.max); } if (!BI.isNotNull(data.max)) { self.bigEditor.setValue(""); } if (!BI.isNull(data.closemin)) { if (data.closemin === true) { combo_value = 1 } else { combo_value = 0 } self.smallCombo.setValue(combo_value); } if (!BI.isNull(data.closemax)) { if (data.closemax === true) { combo_value = 1 } else { combo_value = 0 } self.bigCombo.setValue(combo_value); } }, getValue: function () { var self = this, value = {}, minComboValue = self.smallCombo.getValue(), maxComboValue = self.bigCombo.getValue(); value.min = self.smallEditor.getValue(); value.max = self.bigEditor.getValue(); if (minComboValue[0] === 0) { value.closemin = false } else { value.closemin = true } if (maxComboValue[0] === 0) { value.closemax = false } else { value.closemax = true } return value; } }); BI.NumericalInterval.EVENT_CHANGE = "EVENT_CHANGE"; BI.NumericalInterval.EVENT_VALID = "EVENT_VALID"; BI.NumericalInterval.EVENT_ERROR = "EVENT_ERROR"; $.shortcut("bi.numerical_interval", BI.NumericalInterval);/** * * 表格 * * Created by GUY on 2015/9/22. * @class BI.PageTableCell * @extends BI.Single */ BI.PageTableCell = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.PageTableCell.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-page-table-cell", text: "", title: "" }) }, _init: function () { BI.PageTableCell.superclass._init.apply(this, arguments); var label = BI.createWidget({ type: "bi.label", element: this, textAlign: "left", whiteSpace: "nowrap", height: this.options.height, text: this.options.text, title: this.options.title, value: this.options.value, lgap: 5, rgap: 5 }); if (BI.isNotNull(this.options.styles) && BI.isObject(this.options.styles)) { this.element.css(this.options.styles); } } }); $.shortcut("bi.page_table_cell", BI.PageTableCell);/** * 分页表格 * * Created by GUY on 2016/2/15. * @class BI.PageTable * @extends BI.Widget */ BI.PageTable = BI.inherit(BI.Widget, { _const: { scrollWidth: 18, minScrollWidth: 100 }, _defaultConfig: function () { return BI.extend(BI.PageTable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-page-table", el: { type: "bi.sequence_table" }, pager: { horizontal: { pages: false, //总页数 curr: 1, //初始化当前页, pages为数字时可用 hasPrev: BI.emptyFn, hasNext: BI.emptyFn, firstPage: 1, lastPage: BI.emptyFn }, vertical: { pages: false, //总页数 curr: 1, //初始化当前页, pages为数字时可用 hasPrev: BI.emptyFn, hasNext: BI.emptyFn, firstPage: 1, lastPage: BI.emptyFn } }, itemsCreator: BI.emptyFn, isNeedFreeze: false,//是否需要冻结单元格 freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为true时生效 isNeedMerge: false,//是否需要合并单元格 mergeCols: [], //合并的单元格列号 mergeRule: BI.emptyFn, columnSize: [], minColumnSize: [], maxColumnSize: [], headerRowSize: 25, rowSize: 25, regionColumnSize: [], headerCellStyleGetter: BI.emptyFn, summaryCellStyleGetter: BI.emptyFn, sequenceCellStyleGetter: BI.emptyFn, header: [], items: [], //二维数组 //交叉表头 crossHeader: [], crossItems: [] }); }, _init: function () { BI.PageTable.superclass._init.apply(this, arguments); var self = this, o = this.options; this.hCurr = 1; this.vCurr = 1; this.table = BI.createWidget(o.el, { type: "bi.sequence_table", width: o.width, height: o.height - 30, isNeedResize: true, isResizeAdapt: false, isNeedFreeze: o.isNeedFreeze, freezeCols: o.freezeCols, isNeedMerge: o.isNeedMerge, mergeCols: o.mergeCols, mergeRule: o.mergeRule, columnSize: o.columnSize, minColumnSize: o.minColumnSize, maxColumnSize: o.maxColumnSize, headerRowSize: o.headerRowSize, rowSize: o.rowSize, regionColumnSize: o.regionColumnSize, headerCellStyleGetter: o.headerCellStyleGetter, summaryCellStyleGetter: o.summaryCellStyleGetter, sequenceCellStyleGetter: o.sequenceCellStyleGetter, header: o.header, items: o.items, //交叉表头 crossHeader: o.crossHeader, crossItems: o.crossItems }); this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); }); this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { o.regionColumnSize = this.getRegionColumnSize(); o.columnSize = this.getColumnSize(); self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); }); this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { o.regionColumnSize = this.getRegionColumnSize(); o.columnSize = this.getColumnSize(); self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); }); this.pager = BI.createWidget(o.pager, { type: "bi.direction_pager", height: 30 }); this.pager.on(BI.Pager.EVENT_CHANGE, function () { var vpage = this.getVPage && this.getVPage(); if (BI.isNull(vpage)) { vpage = this.getCurrentPage(); } var hpage = this.getHPage && this.getHPage(); o.itemsCreator({ vpage: vpage, hpage: hpage }, function (items, header, crossItems, crossHeader) { self.table.setVPage ? self.table.setVPage(vpage) : self.table.setCurrentPage(vpage); self.table.setHPage && self.table.setHPage(hpage); self.populate.apply(self, arguments); }); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.table, left: 0, top: 0 }, { el: this.pager, left: 0, right: 0, bottom: 0 }] }) }, setHPage: function (v) { this.hCurr = v; this.pager.setHPage && this.pager.setHPage(v); this.table.setHPage && this.table.setHPage(v); }, setVPage: function (v) { this.vCurr = v; this.pager.setVPage && this.pager.setVPage(v); this.table.setVPage && this.table.setVPage(v); }, getHPage: function () { var hpage = this.pager.getHPage && this.pager.getHPage(); if (BI.isNotNull(hpage)) { return hpage; } hpage = this.pager.getCurrentPage && this.pager.getCurrentPage(); if (BI.isNotNull(hpage)) { return hpage; } return this.hpage; }, getVPage: function () { var vpage = this.pager.getVPage && this.pager.getVPage(); if (BI.isNotNull(vpage)) { return vpage; } vpage = this.pager.getCurrentPage && this.pager.getCurrentPage(); if (BI.isNotNull(vpage)) { return vpage; } return this.vpage; }, setWidth: function (width) { BI.PageTable.superclass.setWidth.apply(this, arguments); this.table.setWidth(width); }, setHeight: function (height) { BI.PageTable.superclass.setHeight.apply(this, arguments); this.table.setHeight(height - 30); }, setColumnSize: function (columnSize) { this.options.columnSize = columnSize; this.table.setColumnSize(columnSize); }, getColumnSize: function () { return this.table.getColumnSize(); }, setRegionColumnSize: function (columnSize) { this.options.columnSize = columnSize; this.table.setRegionColumnSize(columnSize); }, getRegionColumnSize: function () { return this.table.getRegionColumnSize(); }, getVerticalScroll: function () { return this.table.getVerticalScroll(); }, restore: function () { this.table.restore(); }, attr: function () { BI.PageTable.superclass.attr.apply(this, arguments); this.table.attr.apply(this.table, arguments); }, populate: function () { this.pager.populate(); this.table.populate.apply(this.table, arguments); }, destroy: function () { this.table.destroy(); this.pager && this.pager.destroy(); BI.PageTable.superclass.destroy.apply(this, arguments); } }); $.shortcut('bi.page_table', BI.PageTable);/** * @class BI.DateParamCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.DateParamCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.DateParamCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-date-param-combo", width: 130, height: 30 }) }, _init: function () { BI.DateParamCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.text_trigger", cls: "param-trigger", height: o.height - 2 }); this.popup = BI.createWidget({ type: "bi.date_param_popup_view", maxHeight: 300 }); this.popup.on(BI.ParamPopupView.EVENT_CONFIRM, function(){ self.DateParamCombo.hideView(); }); this.DateParamCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: this.popup }); this.DateParamCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.setValue(self.getValue()); self.fireEvent(BI.DateParamCombo.EVENT_CONFIRM); }); this.DateParamCombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.setValue(self.getValue()); }); }, _getShowTextByValue: function(v){ v = v || {}; var value = v.value; var midText = (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + (value.soffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + value.svalue; switch (v.type) { case BICst.YEAR: return value.fvalue + BI.i18nText("BI-Year") + (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Year_Fen"); case BICst.YEAR_QUARTER: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Quarter_De"); case BICst.YEAR_MONTH: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Month_De"); case BICst.YEAR_WEEK: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Week_De"); case BICst.YEAR_DAY: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Day_De"); case BICst.MONTH_WEEK: return value.fvalue + BI.i18nText("BI-Basic_Month") + midText + BI.i18nText("BI-Week_De"); case BICst.MONTH_DAY: return value.fvalue + BI.i18nText("BI-Basic_Month") + midText + BI.i18nText("BI-Day_De"); } }, setValue: function (v) { this.DateParamCombo.setValue(v); this.trigger.setValue(this._getShowTextByValue(v)); }, setEnable: function (v) { BI.DateParamCombo.superclass.setEnable.apply(this, arguments); this.DateParamCombo.setEnable(v); }, getValue: function () { return this.DateParamCombo.getValue(); }, getCalculationValue: function(){ return this.popup.getCalculationValue(); } }); BI.DateParamCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.date_param_combo", BI.DateParamCombo);/** * 普通控件 * * @class BI.DateParamPopupView * @extends BI.ParamPopupView */ BI.DateParamPopupView = BI.inherit(BI.ParamPopupView, { _defaultConfig: function () { return BI.extend(BI.DateParamPopupView.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-date-param-popup' }); }, _init: function () { BI.DateParamPopupView.superclass._init.apply(this, arguments); }, dateConfig: function () { return [{ type: "bi.param3_date_item", value: BICst.YEAR, selected: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.YEAR_QUARTER, disabled: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.YEAR_MONTH, disabled: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.YEAR_WEEK, disabled: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.YEAR_DAY, disabled: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.MONTH_WEEK, disabled: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.MONTH_DAY, disabled: true }] } }); BI.DateParamPopupView.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.date_param_popup_view', BI.DateParamPopupView);/** * @class BI.DateIntervalParamCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.DateIntervalParamCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.DateIntervalParamCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-date-interval-param-combo", width: 130, height: 30 }) }, _init: function () { BI.DateIntervalParamCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.text_trigger", cls: "param-trigger", height: o.height - 2 }); this.popup = BI.createWidget({ type: "bi.date_interval_param_popup_view", maxHeight: 300 }); this.popup.on(BI.ParamPopupView.EVENT_CONFIRM, function(){ self.DateIntervalParamCombo.hideView(); }); this.DateIntervalParamCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: this.popup }); this.DateIntervalParamCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.setValue(self.getValue()); self.fireEvent(BI.DateIntervalParamCombo.EVENT_CONFIRM); }); this.DateIntervalParamCombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.setValue(self.getValue()); }); }, _getShowTextByValue: function(v){ v = v || {}; var value = v.value; var midText = (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + (value.soffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + value.svalue; switch (v.type) { case BICst.YEAR: return value.fvalue + BI.i18nText("BI-Year") + (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Year_Fen"); case BICst.YEAR_QUARTER: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Basic_Quarter"); case BICst.YEAR_MONTH: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Month_Fen"); case BICst.YEAR_WEEK: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Week"); case BICst.YEAR_DAY: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Day_De"); case BICst.MONTH_WEEK: return value.fvalue + BI.i18nText("BI-Basic_Month") + midText + BI.i18nText("BI-Week"); case BICst.MONTH_DAY: return value.fvalue + BI.i18nText("BI-Basic_Month") + midText + BI.i18nText("BI-Day_De"); } }, setValue: function (v) { this.DateIntervalParamCombo.setValue(v); this.trigger.setValue(this._getShowTextByValue(v)); }, setEnable: function (v) { BI.DateIntervalParamCombo.superclass.setEnable.apply(this, arguments); this.DateIntervalParamCombo.setEnable(v); }, getValue: function () { return this.DateIntervalParamCombo.getValue(); }, getCalculationValue: function(){ return this.popup.getCalculationValue(); } }); BI.DateIntervalParamCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.date_interval_param_combo", BI.DateIntervalParamCombo);/** * 普通控件 * * @class BI.DateIntervalParamPopupView * @extends BI.ParamPopupView */ BI.DateIntervalParamPopupView = BI.inherit(BI.ParamPopupView, { _defaultConfig: function () { return BI.extend(BI.DateIntervalParamPopupView.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-date-interval-param-popup' }); }, _init: function () { BI.DateIntervalParamPopupView.superclass._init.apply(this, arguments); }, dateConfig: function () { return [{ type: "bi.param0_date_item", value: BICst.YEAR, selected: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.YEAR_QUARTER, disabled: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.YEAR_MONTH, disabled: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.YEAR_WEEK, disabled: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.YEAR_DAY, disabled: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.MONTH_WEEK, disabled: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.MONTH_DAY, disabled: true }] } }); BI.DateIntervalParamPopupView.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.date_interval_param_popup_view', BI.DateIntervalParamPopupView);/** * 普通控件 * * @class BI.Param0DateItem * @extends BI.Single */ BI.Param0DateItem = BI.inherit(BI.Single, { constants: { itemHeight: 20, itemWidth: 20, textWidth: 40, comboWidth: 45 }, _defaultConfig: function () { return BI.extend(BI.Param0DateItem.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-param0-date-item', width: 310, height: 20, selected: false, defaultEditorValue: "0" }); }, _init: function () { BI.Param0DateItem.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: opts.selected }); this.radio.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.firstEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.firstCombo.setValue(0); BI.createWidget({ type: 'bi.inline', element: this, items: [{ type: "bi.center_adapt", items: [this.radio], width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstEditor, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Year"), width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstCombo, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Basic_De"), width: this.constants.itemWidth, height: this.constants.itemHeight }, { type: "bi.label", textAlign: "left", cls: 'param-label', text: BI.i18nText("BI-Year_Fen"), height: this.constants.itemHeight, lgap: 5 }] }); }, _assertValue: function(v){ var o = this.options; v = v || {}; v.fvalue = v.fvalue || o.defaultEditorValue; v.foffset = v.foffset || 0; return v; }, setSelected: function (v) { this.radio.setSelected(!!v); }, isSelected: function () { return this.radio.isSelected(); }, getInputValue: function () { return { fvalue: this.firstEditor.getValue() || 0, foffset: this.firstCombo.getValue()[0] }; }, setInputValue: function (v) { v = this._assertValue(v); this.firstEditor.setValue(v.fvalue); this.firstCombo.setValue([v.foffset]); }, getValue: function(){ return BICst.YEAR; }, setEnable: function (b) { this.firstEditor.setEnable(!!b); this.firstCombo.setEnable(!!b); } }); BI.Param0DateItem.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.param0_date_item', BI.Param0DateItem);/** * 普通控件 * * @class BI.Param1DateItem * @extends BI.Single */ BI.Param1DateItem = BI.inherit(BI.Single, { constants: { itemHeight: 20, itemWidth: 20, textWidth: 40, comboWidth: 45 }, _defaultConfig: function () { return BI.extend(BI.Param1DateItem.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-param1-date-item', value: BI.Param1DateItem.YEAR_DAY, width: 310, height: 20, selected: false, defaultEditorValue: "0" }); }, _init: function () { BI.Param1DateItem.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: opts.selected }); this.radio.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.firstEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.secondEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.secondEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.secondCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.firstCombo.setValue(0); this.secondCombo.setValue(0); var textJson = this._getTextByDateType(); BI.createWidget({ type: 'bi.inline', element: this, items: [{ type: "bi.center_adapt", items: [this.radio], width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstEditor, { type: "bi.label", textAlign: "center", cls: 'param-label', text: textJson.ftext, width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstCombo, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Basic_De"), width: this.constants.itemWidth, height: this.constants.itemHeight }, { el: this.secondCombo, rgap: 5 }, this.secondEditor, { type: "bi.label", textAlign: "left", cls: 'param-label', text: textJson.stext, height: this.constants.itemHeight, lgap: 5 }] }); }, _getTextByDateType: function(){ switch (this.options.value) { case BI.Param1DateItem.MONTH_WEEK: return {ftext: BI.i18nText("BI-Basic_Month"), stext: BI.i18nText("BI-Week_De")}; case BI.Param1DateItem.MONTH_DAY: return {ftext: BI.i18nText("BI-Basic_Month"), stext: BI.i18nText("BI-Day_De")}; case BI.Param1DateItem.YEAR_MONTH: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Month_De")}; case BI.Param1DateItem.YEAR_DAY: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Day_De")}; case BI.Param1DateItem.YEAR_QUARTER: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Quarter_De")}; case BI.Param1DateItem.YEAR_WEEK: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Week_De")}; } }, _assertValue: function(v){ var o = this.options; v = v || {}; v.fvalue = v.fvalue || o.defaultEditorValue; v.foffset = v.foffset || 0; v.svalue = v.svalue || o.defaultEditorValue; v.soffset = v.soffset || 0; return v; }, setSelected: function (v) { this.radio.setSelected(!!v); }, isSelected: function () { return this.radio.isSelected(); }, getValue: function () { return this.options.value; }, getInputValue: function(){ return { fvalue: this.firstEditor.getValue() || 0, foffset: this.firstCombo.getValue()[0], svalue: this.secondEditor.getValue() || 0, soffset: this.secondCombo.getValue()[0] }; }, setInputValue: function (v) { v = this._assertValue(v); this.firstEditor.setValue(v.fvalue); this.firstCombo.setValue([v.foffset]); this.secondEditor.setValue(v.svalue); this.secondCombo.setValue([v.soffset]); }, setEnable: function (b) { this.firstEditor.setEnable(!!b); this.secondEditor.setEnable(!!b); this.firstCombo.setEnable(!!b); this.secondCombo.setEnable(!!b); } }); BI.Param1DateItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.extend(BI.Param1DateItem , { YEAR_QUARTER: BICst.YEAR_QUARTER, YEAR_MONTH: BICst.YEAR_MONTH, YEAR_WEEK: BICst.YEAR_WEEK, YEAR_DAY: BICst.YEAR_DAY, MONTH_WEEK: BICst.MONTH_WEEK, MONTH_DAY: BICst.MONTH_DAY }); $.shortcut('bi.param1_date_item', BI.Param1DateItem);/** * 普通控件 * * @class BI.Param2DateItem * @extends BI.Single */ BI.Param2DateItem = BI.inherit(BI.Single, { constants: { itemHeight: 20, itemWidth: 20, textWidth: 40, comboWidth: 45 }, _defaultConfig: function () { return BI.extend(BI.Param2DateItem.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-param2-date-item', value: BI.Param2DateItem.YEAR_DAY, width: 310, height: 20, selected: false, defaultEditorValue: "0" }); }, _init: function () { BI.Param2DateItem.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: opts.selected }); this.radio.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.firstEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.secondEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.secondEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.secondCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.firstCombo.setValue(0); this.secondCombo.setValue(0); var textJson = this._getTextByDateType(); BI.createWidget({ type: 'bi.inline', element: this, items: [{ type: "bi.center_adapt", items: [this.radio], width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstEditor, { type: "bi.label", textAlign: "center", cls: 'param-label', text: textJson.ftext, width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstCombo, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Basic_De"), width: this.constants.itemWidth, height: this.constants.itemHeight }, { el: this.secondCombo, rgap: 5 }, this.secondEditor, { type: "bi.label", textAlign: "left", cls: 'param-label', text: textJson.stext, height: this.constants.itemHeight, lgap: 5 }] }); }, _getTextByDateType: function(){ switch (this.options.value) { case BI.Param2DateItem.MONTH_WEEK: return {ftext: BI.i18nText("BI-Basic_Month"), stext: BI.i18nText("BI-Week_Of_Week")}; case BI.Param2DateItem.MONTH_DAY: return {ftext: BI.i18nText("BI-Basic_Month"), stext: BI.i18nText("BI-Day_De")}; case BI.Param2DateItem.YEAR_MONTH: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Month_De_Month")}; case BI.Param2DateItem.YEAR_DAY: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Day_De")}; case BI.Param2DateItem.YEAR_QUARTER: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Quarter_Of_Quarter")}; case BI.Param2DateItem.YEAR_WEEK: return {ftext: BI.i18nText("BI-Year"), stext: BI.i18nText("BI-Week_Of_Week")}; } }, _assertValue: function(v){ var o = this.options; v = v || {}; v.fvalue = v.fvalue || o.defaultEditorValue; v.foffset = v.foffset || 0; v.svalue = v.svalue || o.defaultEditorValue; v.soffset = v.soffset || 0; return v; }, setSelected: function (v) { this.radio.setSelected(!!v); }, isSelected: function () { return this.radio.isSelected(); }, getValue: function () { return this.options.value; }, getInputValue: function(){ return { fvalue: this.firstEditor.getValue() || 0, foffset: this.firstCombo.getValue()[0], svalue: this.secondEditor.getValue() || 0, soffset: this.secondCombo.getValue()[0] }; }, setInputValue: function (v) { v = this._assertValue(v); this.firstEditor.setValue(v.fvalue); this.firstCombo.setValue([v.foffset]); this.secondEditor.setValue(v.svalue); this.secondCombo.setValue([v.soffset]); }, setEnable: function (b) { this.firstEditor.setEnable(!!b); this.secondEditor.setEnable(!!b); this.firstCombo.setEnable(!!b); this.secondCombo.setEnable(!!b); } }); BI.Param2DateItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.extend(BI.Param2DateItem , { YEAR_QUARTER: BICst.YEAR_QUARTER, YEAR_MONTH: BICst.YEAR_MONTH, YEAR_WEEK: BICst.YEAR_WEEK, YEAR_DAY: BICst.YEAR_DAY, MONTH_WEEK: BICst.MONTH_WEEK, MONTH_DAY: BICst.MONTH_DAY }); $.shortcut('bi.param2_date_item', BI.Param2DateItem);/** * 普通控件 * * @class BI.Param3DateItem * @extends BI.Single */ BI.Param3DateItem = BI.inherit(BI.Single, { constants: { itemHeight: 20, itemWidth: 20, textWidth: 40, comboWidth: 45 }, _defaultConfig: function () { return BI.extend(BI.Param3DateItem.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-param3-date-item', width: 310, height: 20, selected: false, defaultEditorValue: "0" }); }, _init: function () { BI.Param3DateItem.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.radio = BI.createWidget({ type: "bi.radio", selected: opts.selected }); this.radio.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.firstEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.firstCombo.setValue(0); BI.createWidget({ type: 'bi.inline', element: this, items: [{ type: "bi.center_adapt", items: [this.radio], width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstEditor, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Year"), width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstCombo, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Basic_De"), width: this.constants.itemWidth, height: this.constants.itemHeight }, { type: "bi.label", textAlign: "left", cls: 'param-label', text: BI.i18nText("BI-Multi_Date_Year_Begin"), height: this.constants.itemHeight, lgap: 5 }] }); }, _assertValue: function(v){ var o = this.options; v = v || {}; v.fvalue = v.fvalue || o.defaultEditorValue; v.foffset = v.foffset || 0; return v; }, setSelected: function (v) { this.radio.setSelected(!!v); }, isSelected: function () { return this.radio.isSelected(); }, getInputValue: function () { return { fvalue: this.firstEditor.getValue() || 0, foffset: this.firstCombo.getValue()[0] }; }, setInputValue: function (v) { v = this._assertValue(v); this.firstEditor.setValue(v.fvalue); this.firstCombo.setValue([v.foffset]); }, getValue: function(){ return BICst.YEAR; }, setEnable: function (b) { this.firstEditor.setEnable(!!b); this.firstCombo.setEnable(!!b); } }); BI.Param3DateItem.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.param3_date_item', BI.Param3DateItem);/** * @class BI.RangeValueCombo * @extend BI.Widget */ BI.RangeValueCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.RangeValueCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-range-value-combo", width: 100, height: 30 }) }, _init: function () { BI.RangeValueCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.dateRangeCombo = BI.createWidget({ type: "bi.text_value_combo", height: o.height, width: o.width, items: BICst.Date_Range_FILTER_COMBO }); this.dateRangeCombo.on(BI.TextValueCombo.EVENT_CHANGE, function(){ self.fireEvent(BI.RangeValueCombo.EVENT_CHANGE); }); BI.createWidget({ type: "bi.default", element: this, items: [this.dateRangeCombo] }); }, setValue: function (v) { v = v || {}; this.dateRangeCombo.setValue(v.type); }, getValue: function () { return { type: this.dateRangeCombo.getValue()[0] }; } }); BI.RangeValueCombo.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.range_value_combo", BI.RangeValueCombo);/** * @class BI.YearParamCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.YearParamCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearParamCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-param-combo", width: 130, height: 30 }) }, _init: function () { BI.YearParamCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.text_trigger", cls: "param-trigger", height: o.height - 2 }); this.popup = BI.createWidget({ type: 'bi.multi_popup_view', el: { type: "bi.button_tree", chooseType: BI.Selection.None, items: [{ type: "bi.year_param_item" }], layouts: [{ type: "bi.vertical", vgap: 5, hgap: 5 }] }, minWidth: 310, maxHeight: 300, stopPropagation: false }); this.popup.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function () { self.YearParamCombo.hideView(); }); this.YearParamCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: this.popup }); this.YearParamCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.setValue(self.getValue()); self.fireEvent(BI.YearParamCombo.EVENT_CONFIRM); }); this.YearParamCombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.setValue(self.getValue()); }); }, _getShowTextByValue: function(v){ v = v || {}; return v.fvalue + BI.i18nText("BI-Year") + (v.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Year_Fen"); }, getCalculationValue: function () { var value = this.YearParamCombo.getValue()[0]; var fPrevOrAfter = value.foffset === 0 ? -1 : 1; var start = new Date((new Date().getFullYear() + fPrevOrAfter * value.fvalue), 0, 1); var end = new Date(start.getFullYear(), 11, 31); return { start: start, end: end }; }, setValue: function (v) { v = v || {}; this.YearParamCombo.setValue(v.value); this.trigger.setValue(this._getShowTextByValue(v.value)); }, getValue: function () { return { type: BICst.YEAR, value: this.YearParamCombo.getValue()[0] } } }); BI.YearParamCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.year_param_combo", BI.YearParamCombo);/** * 普通控件 * * @class BI.YearParamItem * @extends BI.Single */ BI.YearParamItem = BI.inherit(BI.Single, { constants: { itemHeight: 20, itemWidth: 20, textWidth: 40, comboWidth: 45 }, _defaultConfig: function () { return BI.extend(BI.YearParamItem.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-year-param-item', width: 310, height: 20, defaultEditorValue: "0" }); }, _init: function () { BI.YearParamItem.superclass._init.apply(this, arguments); var self = this, opts = this.options; this.firstEditor = BI.createWidget({ type: 'bi.small_text_editor', value: opts.defaultEditorValue, validationChecker: function(v){ return BI.isNaturalNumber(v); }, errorText: BI.i18nText("BI-Please_Input_Integer"), width: this.constants.textWidth, height: this.constants.itemHeight }); this.firstEditor.on(BI.Controller.EVENT_CHANGE, function (v) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.firstCombo = BI.createWidget({ type: "bi.small_text_value_combo", width: this.constants.comboWidth, height: this.constants.itemHeight, items: BICst.BEFORE_AFTER_COMBO }); this.firstCombo.setValue(0); BI.createWidget({ type: 'bi.inline', element: this, items: [this.firstEditor, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Year"), width: this.constants.itemWidth, height: this.constants.itemHeight }, this.firstCombo, { type: "bi.label", textAlign: "center", cls: 'param-label', text: BI.i18nText("BI-Basic_De"), width: this.constants.itemWidth, height: this.constants.itemHeight }, { type: "bi.label", textAlign: "left", cls: 'param-label', text: BI.i18nText("BI-Year_Fen"), height: this.constants.itemHeight, lgap: 5 }] }); }, _assertValue: function(v){ var o = this.options; if(BI.isArray(v)){ v = v[0]; } v = v || {}; v.fvalue = v.fvalue || o.defaultEditorValue; v.foffset = v.foffset || 0; return v; }, setValue: function (v) { v = this._assertValue(v); this.firstEditor.setValue(v.fvalue); this.firstCombo.setValue([v.foffset]); }, getValue: function(){ return { fvalue: this.firstEditor.getValue() || 0, foffset: this.firstCombo.getValue()[0] }; } }); BI.YearParamItem.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.year_param_item', BI.YearParamItem);/** * @class BI.YearMonthParamCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.YearMonthParamCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearMonthParamCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-month-param-combo", width: 130, height: 30 }) }, _init: function () { BI.YearMonthParamCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.text_trigger", cls: "param-trigger", height: o.height - 2 }); this.popup = BI.createWidget({ type: "bi.year_month_param_popup_view", maxHeight: 300 }); this.popup.on(BI.ParamPopupView.EVENT_CONFIRM, function(){ self.YearMonthParamCombo.hideView(); }); this.YearMonthParamCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: this.popup }); this.YearMonthParamCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.setValue(self.getValue()); self.fireEvent(BI.YearMonthParamCombo.EVENT_CONFIRM); }); this.YearMonthParamCombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.setValue(self.getValue()); }); }, _getShowTextByValue: function(v){ v = v || {}; var value = v.value; var midText = (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + (value.soffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + value.svalue; switch (v.type) { case BICst.YEAR: return value.fvalue + BI.i18nText("BI-Year") + (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Year_Fen"); case BICst.YEAR_MONTH: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Month_De"); } }, setValue: function (v) { this.YearMonthParamCombo.setValue(v); this.trigger.setValue(this._getShowTextByValue(v)); }, setEnable: function (v) { BI.YearMonthParamCombo.superclass.setEnable.apply(this, arguments); this.YearMonthParamCombo.setEnable(v); }, getValue: function () { return this.YearMonthParamCombo.getValue(); }, getCalculationValue: function(){ return this.popup.getCalculationValue(); } }); BI.YearMonthParamCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.year_month_param_combo", BI.YearMonthParamCombo);/** * 普通控件 * * @class BI.YearMonthParamPopupView * @extends BI.ParamPopupView */ BI.YearMonthParamPopupView = BI.inherit(BI.ParamPopupView, { _defaultConfig: function () { return BI.extend(BI.YearMonthParamPopupView.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-year-month-param-popup' }); }, _init: function () { BI.YearMonthParamPopupView.superclass._init.apply(this, arguments); }, dateConfig: function () { return [{ type: "bi.param0_date_item", selected: true }, { type: "bi.param2_date_item", value: BI.Param2DateItem.YEAR_MONTH, disabled: true }] } }); BI.YearMonthParamPopupView.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.year_month_param_popup_view', BI.YearMonthParamPopupView);/** * @class BI.YearSeasonParamCombo * @extend BI.Widget * combo : text + icon, popup : text * 参见场景dashboard布局方式选择 */ BI.YearSeasonParamCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearSeasonParamCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-season-param-combo", width: 130, height: 30 }) }, _init: function () { BI.YearSeasonParamCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.text_trigger", cls: "param-trigger", height: o.height - 2 }); this.popup = BI.createWidget({ type: "bi.year_season_param_popup_view", maxHeight: 300 }); this.popup.on(BI.ParamPopupView.EVENT_CONFIRM, function(){ self.YearSeasonParamCombo.hideView(); }); this.YearSeasonParamCombo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: this.popup }); this.YearSeasonParamCombo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { self.setValue(self.getValue()); self.fireEvent(BI.YearSeasonParamCombo.EVENT_CONFIRM); }); this.YearSeasonParamCombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.setValue(self.getValue()); }); }, _getShowTextByValue: function(v){ v = v || {}; var value = v.value; var midText = (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + (value.soffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + value.svalue; switch (v.type) { case BICst.YEAR: return value.fvalue + BI.i18nText("BI-Year") + (value.foffset === 0 ? BI.i18nText("BI-Qian_First") : BI.i18nText("BI-Hou_Last")) + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Year_Fen"); case BICst.YEAR_QUARTER: return value.fvalue + BI.i18nText("BI-Year") + midText + BI.i18nText("BI-Quarter_De"); } }, setValue: function (v) { this.YearSeasonParamCombo.setValue(v); this.trigger.setValue(this._getShowTextByValue(v)); }, setEnable: function (v) { BI.YearSeasonParamCombo.superclass.setEnable.apply(this, arguments); this.YearSeasonParamCombo.setEnable(v); }, getValue: function () { return this.YearSeasonParamCombo.getValue(); //return BI.extend(this.popup.getCalculationValue(), this.YearSeasonParamCombo.getValue()); }, getCalculationValue: function(){ return this.popup.getCalculationValue(); } }); BI.YearSeasonParamCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.year_season_param_combo", BI.YearSeasonParamCombo);/** * 普通控件 * * @class BI.YearSeasonParamPopupView * @extends BI.ParamPopupView */ BI.YearSeasonParamPopupView = BI.inherit(BI.ParamPopupView, { _defaultConfig: function () { return BI.extend(BI.YearSeasonParamPopupView.superclass._defaultConfig.apply(this, arguments), { baseCls: 'bi-year-season-param-popup' }); }, _init: function () { BI.YearSeasonParamPopupView.superclass._init.apply(this, arguments); }, dateConfig: function () { return [{ type: "bi.param0_date_item", selected: true }, { type: "bi.param1_date_item", value: BI.Param1DateItem.YEAR_QUARTER, disabled: true }] } }); BI.YearSeasonParamPopupView.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.year_season_param_popup_view', BI.YearSeasonParamPopupView);/** * 路径选择 * * Created by GUY on 2015/12/4. * @class BI.PathChooser * @extends BI.Widget */ BI.PathChooser = BI.inherit(BI.Widget, { _const: { lineColor: "#c4c6c6", selectLineColor: "#009de3" }, _defaultConfig: function () { return BI.extend(BI.PathChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-path-chooser", items: [] }) }, _init: function () { BI.PathChooser.superclass._init.apply(this, arguments); this.populate(this.options.items); }, _createRegions: function (regions) { var self = this; this.regions = BI.createWidgets(BI.map(regions, function (i, region) { return { type: "bi.path_region", title: self.texts[region] || region } })); this.regionMap = {}; BI.each(regions, function (i, region) { self.regionMap[region] = i; }); this.container = BI.createWidget({ type: "bi.horizontal", verticalAlign: "top", scrollx: false, scrolly: false, hgap: 10, items: this.regions }); BI.createWidget({ type: "bi.vertical_adapt", element: this, scrollable: true, hgap: 10, items: [this.container] }); }, getRegionIndexById: function (id) { var node = this.store[id]; var regionType = node.get("region"); return this.regionMap[regionType]; }, _drawPath: function (start, offset, index) { var self = this; var starts = []; if (this.start.contains(start)) { starts = this.start; } else { starts = [start]; } BI.each(starts, function (i, s) { BI.each(self.radios[s], function (i, rad) { rad.setSelected(false); }); BI.each(self.lines[s], function (i, line) { line.attr("stroke", self._const.lineColor); }); BI.each(self.regionIndexes[s], function (i, idx) { self.regions[idx].reset(); }); }); BI.each(this.routes[start][index], function (i, id) { var regionIndex = self.getRegionIndexById(id); self.regions[regionIndex].setSelect(offset + index, id); }); var current = BI.last(this.routes[start][index]); while (current && this.routes[current] && this.routes[current].length === 1) { BI.each(this.routes[current][0], function (i, id) { var regionIndex = self.getRegionIndexById(id); self.regions[regionIndex].setSelect(0, id); }); this.lines[current][0].attr("stroke", self._const.selectLineColor).toFront(); current = BI.last(this.routes[current][0]); } this.lines[start][index].attr("stroke", self._const.selectLineColor).toFront(); this.radios[start] && this.radios[start][index] && this.radios[start][index].setSelected(true); }, _drawRadio: function (start, offset, index, x, y) { var self = this; var radio = BI.createWidget({ type: "bi.radio", cls: "path-chooser-radio", selected: offset + index === 0, start: start, index: index }); radio.on(BI.Radio.EVENT_CHANGE, function () { self._drawPath(start, offset, index); self.fireEvent(BI.PathChooser.EVENT_CHANGE, start, index); }); if (!this.radios[start]) { this.radios[start] = []; } this.radios[start].push(radio); BI.createWidget({ type: "bi.absolute", element: this.container, items: [{ el: radio, left: x - 6.5, top: y - 6.5 }] }) }, _drawLine: function (start, lines) { var self = this; if (!this.lines[start]) { this.lines[start] = []; } if (!this.pathes[start]) { this.pathes[start] = []; } var startRegionIndex = this.getRegionIndexById(start); //start所在的位置,然后接着往下画其他的路径 var offset = this.regions[startRegionIndex].getIndexByValue(start); BI.each(lines, function (i, line) { self.pathes[start][i] = []; var idx = i + offset; var path = ""; var stop = 47.5 + 29 * idx; var sleft = 50 + 100 * startRegionIndex; var radioStartX = sleft, radioStartY = stop; var etop = stop; var endRegionIndex = self.getRegionIndexById(BI.last(line)); var endOffset = self.regions[endRegionIndex].getIndexByValue(BI.last(line)); var eleft = 50 + 100 * endRegionIndex; if (self.start.contains(start)) { radioStartX = sleft - 50; path += "M" + (sleft - 50) + "," + stop; self.pathes[start][i].push({ x: sleft - 50, y: stop }) } else if (idx === 0) { radioStartX = sleft + 50; path += "M" + sleft + "," + stop; self.pathes[start][i].push({ x: sleft, y: stop }) } else { radioStartX = sleft + 50; path += "M" + sleft + "," + 47.5 + "L" + (sleft + 50) + "," + 47.5 + "L" + (sleft + 50) + "," + stop; self.pathes[start][i].push({ x: sleft, y: 47.5 }); self.pathes[start][i].push({ x: sleft + 50, y: 47.5 }); self.pathes[start][i].push({ x: sleft + 50, y: stop }); } if (idx > 0) { var endY = endOffset * 29 + 47.5; path += "L" + (eleft - 50) + "," + etop + "L" + (eleft - 50) + "," + endY + "L" + eleft + "," + endY; self.pathes[start][i].push({ x: eleft - 50, y: etop }); self.pathes[start][i].push({ x: eleft - 50, y: endY }); self.pathes[start][i].push({ x: eleft, y: endY }); } else { path += "L" + eleft + "," + etop; self.pathes[start][i].push({ x: eleft, y: etop }); } var graph = self.svg.path(path) .attr({ stroke: idx === 0 ? self._const.selectLineColor : self._const.lineColor, 'stroke-dasharray': '-' }); self.lines[start].push(graph); if (lines.length > 1) { self.lines[start][0].toFront(); } //第一个元素无论有多少个都要显示radio if (self.start.contains(start)) { self.lines[self.regions[0].getValueByIndex(0)][0].toFront(); } if (lines.length > 1 || self.start.contains(start)) { self._drawRadio(start, offset, i, radioStartX, radioStartY); } }); }, _drawLines: function (routes) { var self = this; this.lines = {}; this.pathes = {}; this.radios = {}; this.regionIndexes = {}; BI.each(routes, function (k, route) { if (!self.regionIndexes[k]) { self.regionIndexes[k] = []; } BI.each(route, function (i, rs) { BI.each(rs, function (j, id) { var regionIndex = self.getRegionIndexById(id); if (!BI.contains(self.regionIndexes[k], regionIndex)) { self.regionIndexes[k].push(regionIndex); } }); }) }); BI.each(routes, function (k, route) { self._drawLine(k, route); }); }, _pushNodes: function (nodes) { var self = this; var indexes = []; for (var i = 0; i < nodes.length; i++) { var id = nodes[i]; var index = self.getRegionIndexById(id); indexes.push(index); var region = self.regions[index]; if (i === nodes.length - 1) { if (!region.hasItem(id)) { region.addItem(id, self.texts[id]); } break; } if (i > 0 || self.start.contains(id)) { region.addItem(id, self.texts[id]); } } for (var i = BI.first(indexes); i < BI.last(indexes); i++) { if (!BI.contains(indexes, i)) { self.regions[i].addItem(""); } } }, _createNodes: function () { var self = this, o = this.options; this.store = {}; this.texts = {}; this.start = []; this.end = []; BI.each(o.items, function (i, item) { self.start.push(BI.first(item).value); self.end.push(BI.last(item).value); }); this.start = BI.uniq(this.start); this.end = BI.uniq(this.end); var regions = []; var tree = new BI.Tree(); var branches = {}, max = 0; BI.each(o.items, function (i, items) { BI.each(items, function (j, item) { if (!BI.has(branches, item.value)) { branches[item.value] = 0; } branches[item.value]++; max = Math.max(max, branches[item.value]); var prev = {}; if (j > 0) { prev = items[j - 1]; } var parent = self.store[prev.value || ""]; var node = self.store[item.value] || new BI.Node(item.value); node.set(item); self.store[item.value] = node; self.texts[item.value] = item.text; self.texts[item.region] = item.regionText; parent = BI.isNull(parent) ? tree.getRoot() : parent; if (parent.getChildIndex(item.value) === -1) { tree.addNode(parent, node); } }) }); //算出区域列表 tree.traverse(function (node) { BI.each(node.getChildren(), function (i, child) { if (BI.contains(regions, child.get("region"))) { var index1 = BI.indexOf(regions, node.get("region")); var index2 = BI.indexOf(regions, child.get("region")); //交换区域 if (index1 > index2) { var t = regions[index2]; for(var j =index2; j < index1; j++){ regions[j] = regions[j+1]; } regions[index1] = t; } } else { regions.push(child.get("region")); } }); }); this._createRegions(regions); //算出节点 BI.each(branches, function (k, branch) { if (branch < max) { delete branches[k]; } }); //过滤节点 var nodes = []; var n = tree.getRoot(); while (n && n.getChildrenLength() === 1) { if (BI.has(branches, n.getChildren()[0].id)) { delete branches[n.getChildren()[0].id]; n = n.getChildren()[0]; } else { n = null; } } tree.traverse(function (node) { if (BI.has(branches, node.id)) { nodes.push(node.id); delete branches[node.id]; } }); //填充节点 var routes = {}; var s, e; for (var i = 0, len = nodes.length; i < len + 1; i++) { if (len === 0) { s = []; BI.each(this.start, function (i, id) { s.push(tree.search(id)); }); e = []; BI.each(this.end, function (i, id) { e.push(tree.search(id)); }); } else if (i === len) { s = e; e = []; BI.each(this.end, function (i, id) { e.push(tree.search(id)); }); } else if (i === 0) { s = []; BI.each(this.start, function (i, id) { s.push(tree.search(id)); }); e = [tree.search(nodes[i])]; } else { s = [tree.search(e[0] || tree.getRoot(), nodes[i - 1])]; e = [tree.search(s[0], nodes[i])]; } BI.each(s, function (i, n) { tree._recursion(n, [n.id], function (node, route) { if (e.contains(node)) { if (!routes[n.id]) { routes[n.id] = []; } routes[n.id].push(route); self._pushNodes(route); if (e.length <= 1) { return true; } } }) }); } this.routes = routes; this._drawLines(routes); }, _unselectAllPath: function () { var self = this; BI.each(this.radios, function (idx, rad) { BI.each(rad, function (i, r) { r.setSelected(false); }); }); BI.each(this.lines, function (idx, line) { BI.each(line, function (i, li) { li.attr("stroke", self._const.lineColor); }); }); BI.each(this.regions, function (idx, region) { region.reset(); }); }, populate: function (items) { this.options.items = items || []; var self = this; this.empty(); if (this.options.items.length <= 0) { return; } this.svg = BI.createWidget({ type: "bi.svg" }); this._createNodes(); BI.createWidget({ type: "bi.absolute", element: this.container, items: [{ el: this.svg, top: 0, left: 0, right: 0, bottom: 0 }] }); }, setValue: function (v) { this._unselectAllPath(); var nodes = BI.keys(this.routes), self = this; var result = [], array = []; BI.each(v, function (i, val) { if (BI.contains(nodes, val)) { if (array.length > 0) { array.push(val); result.push(array); array = []; } } array.push(val); }); if (array.length > 0) { result.push(array); } //画这n条路径 BI.each(result, function (idx, path) { var start = path[0]; var index = BI.findIndex(self.routes[start], function (idx, p) { if (BI.isEqual(path, p)) { return true; } }); if (index >= 0) { var startRegionIndex = self.getRegionIndexById(start); var offset = self.regions[startRegionIndex].getIndexByValue(start); self._drawPath(start, offset, index); } }); }, getValue: function () { var path = []; BI.each(this.regions, function (i, region) { var val = region.getValue(); if (BI.isKey(val)) { path.push(val); } }); return path; } }); BI.PathChooser.EVENT_CHANGE = "PathChooser.EVENT_CHANGE"; $.shortcut("bi.path_chooser", BI.PathChooser);/** * 路径选择区域 * * Created by GUY on 2015/12/4. * @class BI.PathRegion * @extends BI.Widget */ BI.PathRegion = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.PathRegion.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-path-region", width: 80, title: "" }) }, _init: function () { BI.PathRegion.superclass._init.apply(this, arguments); var self = this, o = this.options; this.zIndex = 100; var title = BI.createWidget({ type: "bi.label", text: o.title, title: o.title, height: 30 }); title.element.css("zIndex", this.zIndex--); this.items = []; this.vertical = BI.createWidget({ type: "bi.vertical", element: this, bgap: 5, hgap: 10, items: [title] }) }, hasItem: function (val) { return BI.any(this.items, function (i, item) { return val === item.getValue(); }); }, addItem: function (value, text) { if (BI.isKey(value)) { var label = BI.createWidget({ type: "bi.label", cls: "path-region-label", text: text, value: value, title: text || value, height: 22 }); } else { var label = BI.createWidget({ type: "bi.layout", height: 24 }); } label.element.css("zIndex", this.zIndex--); this.items.push(label); this.vertical.addItem(label); if (this.items.length === 1) { this.setSelect(0, value); } }, reset: function () { BI.each(this.items, function (i, item) { item.element.removeClass("active"); }); }, setSelect: function (index, value) { this.reset(); if (this.items.length <= 0) { return; } if (this.items.length === 1) { this.items[0].element.addClass("active"); return; } if (this.items[index].attr("value") === value) { this.items[index].element.addClass("active"); } }, setValue: function (value) { this.setSelect(this.getIndexByValue(value), value); }, getValueByIndex: function (idx) { return this.items[idx].attr("value"); }, getIndexByValue: function (value) { return BI.findIndex(this.items, function (i, item) { return item.attr("value") === value; }); }, getValue: function () { var res; BI.any(this.items, function (i, item) { if (item.element.hasClass("active")) { res = item.getValue(); return true; } }); return res; } }); BI.PathRegion.EVENT_CHANGE = "PathRegion.EVENT_CHANGE"; $.shortcut("bi.path_region", BI.PathRegion);/** * 预览表列 * * Created by GUY on 2015/12/25. * @class BI.PreviewTableCell * @extends BI.Widget */ BI.PreviewTableCell = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.PreviewTableCell.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-preview-table-cell", text: "" }); }, _init: function () { BI.PreviewTableCell.superclass._init.apply(this, arguments); var self = this, o = this.options; BI.createWidget({ type: "bi.label", element: this, textAlign: "left", whiteSpace: "normal", height: this.options.height, text: this.options.text, value: this.options.value }) } }); $.shortcut('bi.preview_table_cell', BI.PreviewTableCell);/** * 预览表 * * Created by GUY on 2015/12/25. * @class BI.PreviewTableHeaderCell * @extends BI.Widget */ BI.PreviewTableHeaderCell = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.PreviewTableHeaderCell.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-preview-table-header-cell", text: "" }); }, _init: function () { BI.PreviewTableHeaderCell.superclass._init.apply(this, arguments); var self = this, o = this.options; BI.createWidget({ type: "bi.label", element: this, textAlign: "left", whiteSpace: "normal", height: this.options.height, text: this.options.text, value: this.options.value }) } }); $.shortcut('bi.preview_table_header_cell', BI.PreviewTableHeaderCell);/** * 预览表 * * Created by GUY on 2015/12/25. * @class BI.PreviewTable * @extends BI.Widget */ BI.PreviewTable = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.PreviewTable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-preview-table", isNeedFreeze: false, freezeCols: [], rowSize: null, columnSize: [], headerRowSize: 30, header: [], items: [] }); }, _init: function () { BI.PreviewTable.superclass._init.apply(this, arguments); var self = this, o = this.options; this.table = BI.createWidget({ type: "bi.table_view", element: this, isNeedResize: false, isResizeAdapt: false, isNeedFreeze: o.isNeedFreeze, freezeCols: o.freezeCols, rowSize: o.rowSize, columnSize: o.columnSize, headerRowSize: o.headerRowSize, header: BI.map(o.header, function (i, items) { return BI.map(items, function (j, item) { return BI.extend({ type: "bi.preview_table_header_cell" }, item); }); }), items: BI.map(o.items, function (i, items) { return BI.map(items, function (j, item) { return BI.extend({ type: "bi.preview_table_cell" }, item); }); }) }); this.table.on(BI.Table.EVENT_TABLE_AFTER_INIT, function () { self._adjustColumns(); self.fireEvent(BI.Table.EVENT_TABLE_AFTER_INIT, arguments); }); this.table.on(BI.Table.EVENT_TABLE_RESIZE, function () { self._adjustColumns(); }); }, //是否有自适应调节的列,即列宽为"" _hasAdaptCol: function (columnSize) { return BI.any(columnSize, function (i, size) { return size === ""; }) }, _isPercentage: function (columnSize) { return columnSize[0] <= 1; }, _adjustColumns: function () { var self = this, o = this.options; if (o.isNeedFreeze === true) { //如果存在百分比的情况 if (this._isPercentage(o.columnSize)) { if (this._hasAdaptCol(o.columnSize)) { var findCols = [], remain = 0; BI.each(o.columnSize, function (i, size) { if (size === "") { findCols.push(i); } else { remain += size; } }); remain = 1 - remain; var average = remain / findCols.length; BI.each(findCols, function (i, col) { o.columnSize[col] = average; }); } var isRight = BI.first(o.freezeCols) !== 0; var freezeSize = [], notFreezeSize = []; BI.each(o.columnSize, function (i, size) { if (o.freezeCols.contains(i)) { freezeSize.push(size); } else { notFreezeSize.push(size); } }); var sumFreezeSize = BI.sum(freezeSize), sumNotFreezeSize = BI.sum(notFreezeSize); BI.each(freezeSize, function (i, size) { freezeSize[i] = size / sumFreezeSize; }); BI.each(notFreezeSize, function (i, size) { notFreezeSize[i] = size / sumNotFreezeSize; }); this.table.setRegionColumnSize(isRight ? ["fill", sumFreezeSize] : [sumFreezeSize, "fill"]); this.table.setColumnSize(isRight ? (notFreezeSize.concat(freezeSize)) : (freezeSize.concat(notFreezeSize))); } } else { //如果存在自适应宽度的列或者是百分比计算的列,需要将整个表宽设为100% if (this._hasAdaptCol(o.columnSize) || this._isPercentage(o.columnSize)) { this.table.setRegionColumnSize(["100%"]); } } }, setColumnSize: function (columnSize) { return this.table.setColumnSize(columnSize); }, getColumnSize: function () { return this.table.getColumnSize(); }, getCalculateColumnSize: function () { return this.table.getCalculateColumnSize(); }, setHeaderColumnSize: function (columnSize) { return this.table.setHeaderColumnSize(columnSize); }, setRegionColumnSize: function (columnSize) { return this.table.setRegionColumnSize(columnSize); }, getRegionColumnSize: function () { return this.table.getRegionColumnSize(); }, getCalculateRegionColumnSize: function () { return this.table.getCalculateRegionColumnSize(); }, getCalculateRegionRowSize: function () { return this.table.getCalculateRegionRowSize(); }, getClientRegionColumnSize: function () { return this.table.getClientRegionColumnSize(); }, getScrollRegionColumnSize: function () { return this.table.getScrollRegionColumnSize() }, getScrollRegionRowSize: function () { return this.table.getScrollRegionRowSize() }, hasVerticalScroll: function () { return this.table.hasVerticalScroll(); }, setVerticalScroll: function (scrollTop) { return this.table.setVerticalScroll(scrollTop); }, setLeftHorizontalScroll: function (scrollLeft) { return this.table.setLeftHorizontalScroll(scrollLeft) }, setRightHorizontalScroll: function (scrollLeft) { return this.table.setRightHorizontalScroll(scrollLeft); }, getVerticalScroll: function () { return this.table.getVerticalScroll(); }, getLeftHorizontalScroll: function () { return this.table.getLeftHorizontalScroll(); }, getRightHorizontalScroll: function () { return this.table.getRightHorizontalScroll(); }, getColumns: function () { return this.table.getColumns(); }, populate: function (items, header) { this.table.populate(items, header); }, destroy: function () { this.table.destroy(); BI.PreviewTable.superclass.destroy.apply(this, arguments); } }); BI.PreviewTable.EVENT_CHANGE = "PreviewTable.EVENT_CHANGE"; $.shortcut('bi.preview_table', BI.PreviewTable);/** * 季度下拉框 * * Created by GUY on 2015/8/28. * @class BI.QuarterCombo * @extends BI.Widget */ BI.QuarterCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.QuarterCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-quarter-combo", height: 25 }); }, _init: function () { BI.QuarterCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.storeValue = ""; this.trigger = BI.createWidget({ type: "bi.quarter_trigger" }); this.trigger.on(BI.QuarterTrigger.EVENT_FOCUS, function () { self.storeValue = this.getKey(); }); this.trigger.on(BI.QuarterTrigger.EVENT_CHANGE, function () { self.combo.isViewVisible() && self.combo.hideView(); }); this.trigger.on(BI.QuarterTrigger.EVENT_START, function () { self.combo.isViewVisible() && self.combo.hideView(); }); this.trigger.on(BI.QuarterTrigger.EVENT_STOP, function(){ if (!self.combo.isViewVisible()) { self.combo.showView(); } }); this.trigger.on(BI.QuarterTrigger.EVENT_CONFIRM, function () { if(self.combo.isViewVisible()) { return; } if(this.getKey() && this.getKey() !== self.storeValue) { self.setValue(this.getKey()); }else if(!this.getKey()){ self.setValue(); } self.fireEvent(BI.QuarterCombo.EVENT_CONFIRM); }); this.popup = BI.createWidget({ type: "bi.quarter_popup" }); this.popup.on(BI.QuarterPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.QuarterCombo.EVENT_CONFIRM); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { minWidth: 85, el: this.popup } }); }, setValue: function (v) { this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue() || ""; } }); BI.QuarterCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.quarter_combo', BI.QuarterCombo);/** * 季度展示面板 * * Created by GUY on 2015/9/2. * @class BI.QuarterPopup * @extends BI.Trigger */ BI.QuarterPopup = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.QuarterPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-quarter-popup" }); }, _init: function () { BI.QuarterPopup.superclass._init.apply(this, arguments); var self = this; var items = [{ text: Date._QN[01], value: 1 }, { text: Date._QN[2], value: 2 }, { text: Date._QN[3], value: 3 }, { text: Date._QN[4], value: 4 }]; items = BI.map(items, function (j, item) { return BI.extend(item, { type: "bi.text_item", cls: "bi-list-item-active", textAlign: "left", whiteSpace: "nowrap", once: false, forceSelected: true, height: 25 }); }); this.quarter = BI.createWidget({ type: "bi.button_group", element: this, items: BI.createItems(items, {}), layouts: [{ type: "bi.vertical" }] }); this.quarter.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.MonthPopup.EVENT_CHANGE); } }) }, getValue: function () { return this.quarter.getValue()[0]; }, setValue: function (v) { this.quarter.setValue([v]); } }); BI.QuarterPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.quarter_popup", BI.QuarterPopup);/** * 季度trigger * * Created by GUY on 2015/8/21. * @class BI.QuarterTrigger * @extends BI.Trigger */ BI.QuarterTrigger = BI.inherit(BI.Trigger, { _const: { hgap: 4, vgap: 2, triggerWidth: 30, textWidth: 40, errorText: BI.i18nText("BI-Quarter_Trigger_Error_Text") }, _defaultConfig: function () { return BI.extend(BI.QuarterTrigger.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-quarter-trigger", height: 25 }); }, _init: function () { BI.QuarterTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.editor = BI.createWidget({ type: "bi.sign_editor", height: o.height, validationChecker: function (v) { return v === "" || (BI.isPositiveInteger(v) && v >= 1 && v <= 4); }, quitChecker: function (v) { return false; }, hgap: c.hgap, vgap: c.vgap, allowBlank: true, errorText: c.errorText }); this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.QuarterTrigger.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { self.fireEvent(BI.QuarterTrigger.EVENT_CHANGE); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { var value = self.editor.getValue(); if (BI.isNotNull(value)) { self.editor.setValue(value); self.editor.setTitle(value); } self.fireEvent(BI.QuarterTrigger.EVENT_CONFIRM); }); this.editor.on(BI.SignEditor.EVENT_SPACE, function () { if (self.editor.isValid()) { self.editor.blur(); } }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.QuarterTrigger.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_STOP, function () { self.fireEvent(BI.QuarterTrigger.EVENT_STOP); }); BI.createWidget({ element: this, type: 'bi.htape', items: [ { el: this.editor }, { el: { type: "bi.text_button", baseCls: "bi-trigger-quarter-text", text: BI.i18nText("BI-Multi_Date_Quarter"), width: c.textWidth }, width: c.textWidth }, { el: { type: "bi.trigger_icon_button", width: c.triggerWidth }, width: c.triggerWidth } ] }); }, setValue: function (v) { this.editor.setState(v); this.editor.setValue(v); this.editor.setTitle(v); }, getKey: function () { return this.editor.getValue(); } }); BI.QuarterTrigger.EVENT_FOCUS = "EVENT_FOCUS"; BI.QuarterTrigger.EVENT_CHANGE = "EVENT_CHANGE"; BI.QuarterTrigger.EVENT_START = "EVENT_START"; BI.QuarterTrigger.EVENT_STOP = "EVENT_STOP"; BI.QuarterTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut("bi.quarter_trigger", BI.QuarterTrigger);/** * 关联视图字段Item * * Created by GUY on 2015/12/23. * @class BI.RelationViewItem * @extends BI.Widget */ BI.RelationViewItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.RelationViewItem.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-relation-view-item", height: 25, hoverIn: BI.emptyFn, hoverOut: BI.emptyFn }); }, _init: function () { BI.RelationViewItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.element.hover(o.hoverIn, o.hoverOut); var items = []; if (o.isPrimary) { items.push({ type: "bi.icon", width: 16, height: 16, title: BI.i18nText("BI-Primary_Key") }); } items.push({ type: "bi.label", text: o.text, value: o.value, height: o.height, textAlign: "left", width: o.isPrimary ? 70 : 90 }); BI.createWidget({ type: "bi.vertical_adapt", element: this, items: items, cls: "primary-key-font", lgap: 5 }); }, enableHover: function (opt) { BI.RelationViewRegion.superclass.enableHover.apply(this, [{ container: "body" }]); }, setSelected: function (b) { this.element[b ? "addClass" : "removeClass"]("active"); } }); $.shortcut('bi.relation_view_item', BI.RelationViewItem);/** * 关联视图 * * Created by GUY on 2015/12/22. * @class BI.RelationView * @extends BI.Widget */ BI.RelationView = BI.inherit(BI.Widget, { _const: { lineColor: "#c4c6c6", selectLineColor: "#009de3" }, _defaultConfig: function () { return BI.extend(BI.RelationView.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-relation-view", items: [] }); }, _init: function () { BI.RelationView.superclass._init.apply(this, arguments); this.populate(this.options.items); }, _calculateWidths: function () { var widths = []; BI.each(this.views, function (i, items) { BI.each(items, function (j, obj) { if (!widths[j]) { widths[j] = BI.MIN; } widths[j] = Math.max(widths[j], obj.getWidth()); }) }); return widths; }, _calculateHeights: function () { var heights = BI.makeArray(BI.size(this.views), BI.MIN); BI.each(this.views, function (i, items) { BI.each(items, function (j, obj) { heights[i] = Math.max(heights[i], obj.getHeight()); }) }); return heights; }, _hoverIn: function (target) { var self = this, c = this._const; BI.each(this.relations, function (start, rs) { BI.each(rs, function (end, relation) { if (relation[0].primary.value === target || relation[0].foreign.value === target) { self.lines[start][end].attr("stroke", c.selectLineColor).toFront(); self.storeViews[start].setValue(relation[0].primary.value); self.storeViews[end].setValue(relation[0].foreign.value); } }); }); }, _hoverOut: function (target) { var self = this, c = this._const; BI.each(this.relations, function (start, rs) { BI.each(rs, function (end, relation) { if (relation[0].primary.value === target || relation[0].foreign.value === target) { self.lines[start][end].attr("stroke", c.lineColor); self.storeViews[start].setValue([]); self.storeViews[end].setValue([]); } }); }); }, previewRelationTables: function(relationTables, show) { if (!show) { BI.each(this.storeViews, function (i, view) { view.toggleRegion(true); view.setPreviewSelected(false); }); BI.each(this.lines, function (i, lines) { BI.each(lines, function (j, line) { line.show(); }); }); return; } BI.each(this.storeViews, function (id, view) { if (!relationTables.contains(id)) { view.toggleRegion(false); } else { view.setPreviewSelected(true); } }); BI.each(this.lines, function (id, lines) { BI.each(lines, function (cId, line) { if (!relationTables.contains(id) || !relationTables.contains(cId)) { line.hide(); } }); }); }, populate: function (items) { var self = this, o = this.options, c = this._const; o.items = items || []; this.empty(); this.svg = BI.createWidget({ type: "bi.svg" }); //算出所有的区域和关联 var regions = this.regions = {}, relations = this.relations = {}; BI.each(items, function (i, item) { var pr = item.primary.region, fr = item.foreign && item.foreign.region; if (pr && !relations[pr]) { relations[pr] = {}; } if (pr && fr && !relations[pr][fr]) { relations[pr][fr] = []; } if (pr && !regions[pr]) { regions[pr] = []; } if (fr && !regions[fr]) { regions[fr] = []; } if (pr && !BI.deepContains(regions[pr], item.primary)) { regions[pr].push(item.primary); } if (fr && !BI.deepContains(regions[fr], item.foreign)) { regions[fr].push(item.foreign); } pr && fr && relations[pr][fr].push(item); }); //求拓扑 var topology = []; var rs = BI.clone(regions), store = {}; while (!BI.isEmpty(rs)) { var clone = BI.clone(rs); BI.each(o.items, function (i, item) { if (!store[item.primary.region]) { delete clone[item.foreign && item.foreign.region]; } }); topology.push(BI.keys(clone)); BI.extend(store, clone); BI.each(clone, function (k, v) { delete rs[k]; }); } //构建视图 var views = this.views = {}, storeViews = this.storeViews = {}, indexes = this.indexes = {}; var verticals = []; BI.each(topology, function (i, items) { if (!views[i]) { views[i] = {}; } var horizontal = []; BI.each(items, function (j, region) { var items = regions[region]; views[i][j] = storeViews[region] = BI.createWidget({ type: "bi.relation_view_region_container", value: region, header: items[0].regionTitle, text: items.length > 0 ? items[0].regionText : "", handler: items.length > 0 ? items[0].regionHandler : BI.emptyFn, items: items, belongPackage: items.length > 0 ? items[0].belongPackage : true }); if (BI.isNotNull(items[0]) && BI.isNotNull(items[0].keyword)) { views[i][j].doRedMark(items[0].keyword); } views[i][j].on(BI.RelationViewRegionContainer.EVENT_HOVER_IN, function (v) { self._hoverIn(v); }); views[i][j].on(BI.RelationViewRegionContainer.EVENT_HOVER_OUT, function (v) { self._hoverOut(v); }); views[i][j].on(BI.RelationViewRegionContainer.EVENT_PREVIEW, function (v) { self.fireEvent(BI.RelationView.EVENT_PREVIEW, region, v); }); indexes[region] = {i: i, j: j}; horizontal.push(views[i][j]); }); verticals.push({ type: "bi.horizontal", items: horizontal }) }); //求每一行的高度 var heights = this._calculateHeights(); //求每一列的宽度 var widths = this._calculateWidths(); //求相对宽度和高度 var offsetWidths = [0], offsetHeights = [0]; BI.each(heights, function (i, h) { if (i === 0) { return; } offsetHeights[i] = offsetHeights[i - 1] + heights[i - 1]; }); BI.each(widths, function (i, w) { if (i === 0) { return; } offsetWidths[i] = offsetWidths[i - 1] + widths[i - 1]; }); //画线 var lines = this.lines = {};//缓存所有的线 BI.each(relations, function (start, rs) { BI.each(rs, function (end, relation) { var startIndex = indexes[start], endIndex = indexes[end]; var top = 0, right = 1, bottom = 2, left = 3; var startDirection = bottom, endDirection = top; // if (startIndex.j > endIndex.j) { // startDirection = left; // endDirection = right; // } else if (startIndex.j < endIndex.j) { // startDirection = right; // endDirection = left; // } else if (startIndex.i < endIndex.i) { // startDirection = bottom; // endDirection = top; // } else if (startIndex.i > endIndex.i) { // startDirection = top; // endDirection = bottom; // } var draw = function (i, j, direction, isForeign) { var x = offsetWidths[j] + (widths[j] - views[i][j].getWidth()) / 2; var y = offsetHeights[i] + (heights[i] - views[i][j].getHeight()) / 2; var path = "", position; switch (direction) { case top: position = isForeign ? views[i][j].getTopRightPosition() : views[i][j].getTopLeftPosition(); x += position.x; y += position.y; path = "M" + x + "," + y + "L" + x + "," + (y - 10); y -= 10; break; case right: position = views[i][j].getRightPosition(); x += position.x; y += position.y; path = "M" + x + "," + y + "L" + (x + 10) + "," + y; x += 10; break; case bottom: position = views[i][j].getBottomPosition(); x += position.x; y += position.y; path = "M" + x + "," + y + "L" + x + "," + (y + 10); y += 10; break; case left: position = views[i][j].getLeftPosition(); x += position.x; y += position.y; path = "M" + x + "," + y + "L" + (x - 10) + "," + y; x -= 10; break; } return {x: x, y: y, path: path}; }; var path = ""; var si = draw(startIndex.i, startIndex.j, startDirection); var ei = draw(endIndex.i, endIndex.j, endDirection, true); path += si.path + ei.path; if (!lines[start]) { lines[start] = {}; } path += "M" + si.x + "," + si.y + "L" + ei.x + "," + ei.y; var line = lines[start][end] = self.svg.path(path) .attr({"stroke": c.lineColor, "stroke-width": "2"}) .hover(function () { line.attr("stroke", c.selectLineColor).toFront(); storeViews[start].setValue(relation[0].primary.value); storeViews[end].setValue(relation[0].foreign.value); }, function () { line.attr("stroke", c.lineColor); storeViews[start].setValue([]); storeViews[end].setValue([]); }); }); }); var container = BI.createWidget(); BI.createWidget({ type: "bi.vertical", element: container, items: verticals }); BI.createWidget({ type: "bi.absolute", element: container, items: [{ el: this.svg, left: 0, right: 0, top: 0, bottom: 0 }] }); BI.createWidget({ type: "bi.center_adapt", scrollable: true, element: this, items: [container] }); } }); BI.RelationView.EVENT_CHANGE = "RelationView.EVENT_CHANGE"; BI.RelationView.EVENT_PREVIEW = "EVENT_PREVIEW"; $.shortcut('bi.relation_view', BI.RelationView);/** * Created by Young's on 2017/3/10. */ BI.RelationViewRegionContainer = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.RelationViewRegionContainer.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-relation-view-region-container", width: 150 }); }, _init: function () { BI.RelationViewRegionContainer.superclass._init.apply(this, arguments); var self = this, o = this.options; this.region = BI.createWidget({ type: "bi.relation_view_region", value: o.value, header: o.header, text: o.text, handler: o.handler, items: o.items, belongPackage: o.belongPackage }); this.region.on(BI.RelationViewRegion.EVENT_PREVIEW, function (v) { self.fireEvent(BI.RelationViewRegionContainer.EVENT_PREVIEW, v); }); this.region.on(BI.RelationViewRegion.EVENT_HOVER_IN, function (v) { self.fireEvent(BI.RelationViewRegionContainer.EVENT_HOVER_IN, v); }); this.region.on(BI.RelationViewRegion.EVENT_HOVER_OUT, function (v) { self.fireEvent(BI.RelationViewRegionContainer.EVENT_HOVER_OUT, v); }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.region], width: this.region.getWidth(), height: this.region.getHeight() }); }, doRedMark: function () { this.region.doRedMark.apply(this.region, arguments); }, unRedMark: function () { this.region.unRedMark.apply(this.region, arguments); }, getWidth: function () { return this.region.getWidth(); }, getHeight: function () { return this.region.getHeight(); }, //获取上方开始划线的位置 getTopLeftPosition: function () { return this.region.getTopLeftPosition(); }, getTopRightPosition: function () { return this.region.getTopRightPosition(); }, getBottomPosition: function () { return this.region.getBottomPosition(); }, getLeftPosition: function () { return this.region.getLeftPosition(); }, getRightPosition: function () { return this.region.getRightPosition(); }, setValue: function (v) { this.region.setValue(v); }, toggleRegion: function (v) { v === true ? this.region.element.fadeIn() : this.region.element.fadeOut(); }, setPreviewSelected: function(v) { this.region.setPreviewSelected(v); } }); BI.RelationViewRegionContainer.EVENT_HOVER_IN = "RelationViewRegion.EVENT_HOVER_IN"; BI.RelationViewRegionContainer.EVENT_HOVER_OUT = "RelationViewRegion.EVENT_HOVER_OUT"; BI.RelationViewRegionContainer.EVENT_PREVIEW = "RelationViewRegion.EVENT_PREVIEW"; $.shortcut("bi.relation_view_region_container", BI.RelationViewRegionContainer);/** * 关联视图 * * Created by GUY on 2015/12/23. * @class BI.RelationViewRegion * @extends BI.BasicButton */ BI.RelationViewRegion = BI.inherit(BI.BasicButton, { _defaultConfig: function () { return BI.extend(BI.RelationViewRegion.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-relation-view-region cursor-pointer", width: 150, text: "", value: "", header: "", items: [], belongPackage: true }); }, _init: function () { BI.RelationViewRegion.superclass._init.apply(this, arguments); var self = this, o = this.options; this.preview = BI.createWidget({ type: "bi.icon_button", cls: "relation-table-preview-font", width: 25, height: 25, stopPropagation: true }); this.preview.on(BI.IconButton.EVENT_CHANGE, function () { self.fireEvent(BI.RelationViewRegion.EVENT_PREVIEW, this.isSelected()); }); this.title = BI.createWidget({ type: "bi.label", height: 25, width: 70, text: o.text, value: o.value, textAlign: "left" }); //title放body上 if (BI.isKey(o.header)) { this.title.setTitle(o.header, { container: "body" }) } this.button_group = BI.createWidget({ type: "bi.button_group", items: this._createItems(o.items), layouts: [{ type: "bi.vertical" }] }); BI.createWidget({ type: "bi.vertical", element: this, items: [{ type: "bi.vertical", cls: "relation-view-region-container " + (o.belongPackage ? "" : "other-package"), items: [{ type: "bi.vertical_adapt", cls: "relation-view-region-title", items: [this.preview, this.title] }, this.button_group] }], hgap: 25, vgap: 20 }) }, _createItems: function (items) { var self = this; return BI.map(items, function (i, item) { return BI.extend(item, { type: "bi.relation_view_item", hoverIn: function () { self.setValue(item.value); self.fireEvent(BI.RelationViewRegion.EVENT_HOVER_IN, item.value); }, hoverOut: function () { self.setValue([]); self.fireEvent(BI.RelationViewRegion.EVENT_HOVER_OUT, item.value); } }) }); }, doRedMark: function () { this.title.doRedMark.apply(this.title, arguments); }, unRedMark: function () { this.title.unRedMark.apply(this.title, arguments); }, getWidth: function () { return this.options.width; }, getHeight: function () { return this.button_group.getAllButtons().length * 25 + 25 + 2 * 20 + 3; }, //获取上方开始划线的位置 getTopLeftPosition: function () { return { x: 25 + 10, y: 20 } }, getTopRightPosition: function () { return { x: this.getWidth() - 25 - 10, y: 20 } }, getBottomPosition: function () { return { x: 25 + 10, y: this.getHeight() - 20 } }, getLeftPosition: function () { return { x: 25, y: 20 + 10 } }, getRightPosition: function () { return { x: this.getWidth() - 25, y: 20 + 10 } }, setValue: function (v) { this.button_group.setValue(v); }, setPreviewSelected: function(v) { this.preview.setSelected(v); } }); BI.RelationViewRegion.EVENT_HOVER_IN = "RelationViewRegion.EVENT_HOVER_IN"; BI.RelationViewRegion.EVENT_HOVER_OUT = "RelationViewRegion.EVENT_HOVER_OUT"; BI.RelationViewRegion.EVENT_PREVIEW = "RelationViewRegion.EVENT_PREVIEW"; $.shortcut('bi.relation_view_region', BI.RelationViewRegion);/** * 完成搜索功能模块 * * Created by GUY on 2015/9/16. * @class BI.SelectDataSearcher * @extends BI.Widget */ BI.SelectDataSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataSearcher.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-searcher", packages: [], itemsCreator: BI.emptyFn }); }, _init: function () { BI.SelectDataSearcher.superclass._init.apply(this, arguments); var self = this, o = this.options; this.packagePane = BI.createWidget({ type: "bi.select_data_switcher", packages: o.packages, itemsCreator: function (op) { op.packageId = self.getPackageId(); if (!op.packageId) { return; } o.itemsCreator.apply(self, arguments); } }); this.packagePane.on(BI.SelectDataSwitcher.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearcher.EVENT_CLICK_PACKAGE, arguments); }); this.packagePane.on(BI.SelectDataSwitcher.EVENT_CLICK_ITEM, function () { self.fireEvent(BI.SelectDataSearcher.EVENT_CLICK_ITEM, arguments); }); this.searcherPane = BI.createWidget({ type: "bi.select_data_search_result_pane", itemsCreator: function (op) { op.packageId = self.getPackageId(); if (!op.packageId) { return; } o.itemsCreator.apply(self, arguments); } }); this.searcherPane.on(BI.SelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE, function () { self.searcher.doSearch(); }); this.searcherPane.on(BI.SelectDataSearchResultPane.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearcher.EVENT_CLICK_ITEM, arguments); }); this.searcher = BI.createWidget({ type: "bi.searcher", el: { type: "bi.small_search_editor" }, isAutoSearch: false, //是否自动搜索 isAutoSync: false, onSearch: function (op, populate) { o.itemsCreator(BI.extend(op, { packageId: self.getPackageId(), searchType: self.searcherPane.getSegmentValue() }), function (searchResult, matchResult) { populate(searchResult, matchResult, op.keyword); }) }, chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, popup: this.searcherPane, adapter: this.packagePane }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: { type: "bi.absolute", items: [{ el: this.searcher, left: 10, right: 10, top: 10 }] }, height: 45 }, this.packagePane] }) }, setEnable: function (v) { BI.SelectDataSearcher.superclass.setEnable.apply(this, arguments); this.packagePane.setEnable(v) }, setPackage: function (pId) { this.packagePane.setPackage(pId); }, getPackageId: function () { return this.packagePane.getPackageId(); }, setValue: function (v) { }, getValue: function () { return this.searcher.getValue(); }, populatePackages: function (packages) { this.options.packages = packages; this.packagePane.populatePackages(packages); this.searcher.stopSearch(); this.populate(); }, populate: function () { this.packagePane.populate.apply(this.packagePane, arguments); } }); BI.SelectDataSearcher.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; BI.SelectDataSearcher.EVENT_CLICK_PACKAGE = "EVENT_CLICK_PACKAGE"; $.shortcut('bi.select_data_searcher', BI.SelectDataSearcher);/** * 搜索结果面板 * * Created by GUY on 2015/9/16. * @class BI.SelectDataSearchResultPane * @extends BI.Widget */ BI.SelectDataSearchResultPane = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataSearchResultPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-search-result-pane bi-searcher-view", itemsCreator: BI.emptyFn }); }, _init: function () { BI.SelectDataSearchResultPane.superclass._init.apply(this, arguments); var self = this, o = this.options; this.segment = BI.createWidget({ type: "bi.select_data_search_segment", cls: "search-result-toolbar" }); this.segment.on(BI.SelectDataSearchSegment.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE); }); this.resultPane = BI.createWidget({ type: "bi.searcher_view", matcher: { type: "bi.select_data_tree", itemsCreator: o.itemsCreator }, searcher: { type: "bi.select_data_tree", itemsCreator: o.itemsCreator } }); this.resultPane.on(BI.SearcherView.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearchResultPane.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.segment, height: 60 }, { type: "bi.border", cls: "search-result-line", height: 2 }, { type: "bi.border", cls: "search-result-line", height: 1 }, { type: "bi.absolute", items: [{ el: this.resultPane, left: 0, right: 0, top: 0, bottom: 0 }] }] }); }, startSearch: function () { }, stopSearch: function () { }, empty: function () { this.resultPane.empty(); }, populate: function (searchResult, matchResult, keyword) { this.resultPane.populate.apply(this.resultPane, arguments); }, setValue: function (v) { }, getSegmentValue: function () { return this.segment.getValue(); }, getValue: function () { return this.resultPane.getValue(); } }); BI.SelectDataSearchResultPane.EVENT_CHANGE = "EVENT_CHANGE"; BI.SelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE = "EVENT_SEARCH_TYPE_CHANGE"; $.shortcut('bi.select_data_search_result_pane', BI.SelectDataSearchResultPane);/** * search面板选项栏 * * Created by GUY on 2015/9/16. * @class BI.SelectDataSearchSegment * @extends BI.Widget */ BI.SelectDataSearchSegment = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataSearchSegment.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-search-segment", height: 60 }); }, //创建所有数据和业务包选项 _createSectionTab: function () { var self = this; this.pack = BI.createWidget({ type: "bi.line_segment_button", height: 24, selected: true, text: BI.i18nText("BI-Current_Package"), value: BI.SelectDataSearchSegment.SECTION_PACKAGE }); this.all = BI.createWidget({ type: "bi.line_segment_button", height: 24, text: BI.i18nText("BI-All_Data"), value: BI.SelectDataSearchSegment.SECTION_ALL }); this.button_group = BI.createWidget({ type: "bi.line_segment", height: 25, items: [this.all, this.pack] }); this.button_group.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearchSegment.EVENT_CHANGE); }); return this.button_group; }, _createSegmet: function () { var self = this; this.segment = BI.createWidget({ type: "bi.segment", height: 20, cls: "search-segment-field-table", items: [{ text: BI.i18nText("BI-Basic_Field"), selected: true, value: BI.SelectDataSearchSegment.SECTION_FIELD }, { text: BI.i18nText("BI-Basic_Table"), value: BI.SelectDataSearchSegment.SECTION_TABLE }] }); this.segment.on(BI.Segment.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSearchSegment.EVENT_CHANGE); }); return this.segment; }, _init: function () { BI.SelectDataSearchSegment.superclass._init.apply(this, arguments); var self = this, o = this.options; BI.createWidget({ type: "bi.vertical", element: this, items: [this._createSectionTab(), { type: "bi.absolute", height: 35, items: [{ el: this._createSegmet(), top: 10, right: 10, left: 10, bottom: 5 }] }] }); }, setValue: function (v) { var self = this; BI.each([BI.SelectDataSearchSegment.SECTION_ALL, BI.SelectDataSearchSegment.SECTION_PACKAGE], function (i, key) { if (key & v) { self.button_group.setValue(key & v); } }); BI.each([BI.SelectDataSearchSegment.SECTION_FIELD, BI.SelectDataSearchSegment.SECTION_TABLE], function (i, key) { if (key & v) { self.segment.setValue(key & v); } }); }, getValue: function () { return this.button_group.getValue()[0] | this.segment.getValue()[0] } }); BI.extend(BI.SelectDataSearchSegment, { SECTION_ALL: 0x1, SECTION_PACKAGE: 0x10, SECTION_FIELD: 0x100, SECTION_TABLE: 0x1000 }); BI.SelectDataSearchSegment.EVENT_CHANGE = "SelectDataSearchSegment.EVENT_CHANGE"; $.shortcut('bi.select_data_search_segment', BI.SelectDataSearchSegment);/** * 切换业务包 * * Created by GUY on 2015/9/16. * @class BI.SelectDataSwitcher * @extends BI.Widget */ BI.SelectDataSwitcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataSwitcher.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-switcher", packages: [], itemsCreator: BI.emptyFn }); }, _init: function () { BI.SelectDataSwitcher.superclass._init.apply(this, arguments); var self = this, o = this.options; this.combo = BI.createWidget({ type: "bi.single_tree_combo", height: 25, items: o.packages }); this.combo.on(BI.SingleTreeCombo.EVENT_CHANGE, function () { self.tree.populate(); self.fireEvent(BI.SelectDataSwitcher.EVENT_CHANGE, arguments); }); this.tree = BI.createWidget({ type: "bi.select_data_tree", itemsCreator: function () { var args = Array.prototype.slice.call(arguments, 0); args[0].packageId = self.getPackageId(); o.itemsCreator.apply(self, args); } }); this.tree.on(BI.SelectDataTree.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataSwitcher.EVENT_CLICK_ITEM, arguments); }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: { type: "bi.absolute", hgap: 10, items: [{ el: this.combo }] }, height: 30 }, { el: this.tree }] }); }, setEnable: function (v) { BI.SelectDataSwitcher.superclass.setEnable.apply(this, arguments); this.tree.setEnable(v) }, setPackage: function (pId) { this.combo.setValue([pId]); this.tree.populate(); }, getPackageId: function () { return this.combo.getValue()[0]; }, setValue: function (v) { this.tree.setValue(v); }, getValue: function () { return this.tree.getValue(); }, populate: function () { this.tree.populate.apply(this.tree, arguments); }, populatePackages: function (pacakges) { this.options.packages = pacakges; var pId = this.getPackageId(); this.combo.populate(pacakges); if (BI.isKey(pId)) { this.combo.setValue(pId); } } }); BI.SelectDataSwitcher.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; BI.SelectDataSwitcher.EVENT_CHANGE = "SelectDataSwitcher.EVENT_CHANGE"; $.shortcut('bi.select_data_switcher', BI.SelectDataSwitcher);/** * 字段列表展开Expander * * Created by GUY on 2015/9/14. * @class BI.SelectDataExpander * @extends BI.Widget */ BI.SelectDataExpander = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataExpander.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-expander", el: {}, popup: { items: [], itemsCreator: BI.emptyFn } }); }, _init: function () { BI.SelectDataExpander.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(o.el); this.expander = BI.createWidget({ type: "bi.expander", element: this, isDefaultInit: false, el: this.trigger, popup: BI.extend({ type: "bi.select_data_loader" }, o.popup) }); this.expander.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.expander.on(BI.Expander.EVENT_EXPAND, function(){ }); this.expander.on(BI.Expander.EVENT_COLLAPSE, function(){ this.getView().hideView(); }); this.expander.on(BI.Expander.EVENT_AFTER_INIT, function () { this.getView().populate(); }); this.expander.on(BI.Expander.EVENT_CHANGE, function () { self.trigger.setValue(this.getValue()); }); }, setEnable: function (v) { BI.SelectDataExpander.superclass.setEnable.apply(this, arguments) this.expander.setEnable(v); this.trigger.setEnable(v) }, doBehavior: function () { this.trigger.doRedMark.apply(this.trigger, arguments); this.expander.doBehavior.apply(this.expander, arguments); }, setValue: function (v) { this.expander.setValue(v); }, getValue: function () { return this.expander.getValue(); }, showView: function(b){ this.expander.showView(); }, hideView: function(){ this.expander.hideView(); }, isExpanded: function () { return this.expander.isExpanded(); }, getAllLeaves: function () { return this.expander.getAllLeaves(); }, getNodeById: function (id) { return this.expander.getNodeById(id); }, getNodeByValue: function (value) { return this.expander.getNodeByValue(value); } }); $.shortcut("bi.select_data_expander", BI.SelectDataExpander);/** * 字段列表 * * Created by GUY on 2015/9/14. * @class BI.SelectDataLoader * @extends BI.Widget */ BI.SelectDataLoader = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataLoader.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-loader", items: [], el: {}, itemsCreator: BI.emptyFn }); }, _init: function () { BI.SelectDataLoader.superclass._init.apply(this, arguments); var self = this, o = this.options; this.loader = BI.createWidget({ type: "bi.loader", isDefaultInit: false, element: this, items: o.items, itemsCreator: o.itemsCreator, el: BI.extend({ type: "bi.button_tree", behaviors: { redmark: function () { return true; } }, chooseType: BI.Selection.Multi, layouts: [{ type: "bi.vertical", hgap: 0, vgap: 0 }] }, o.el) }); this.loader.on(BI.Controller.EVENT_CHANGE, function (type, val, ob) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { if (ob.isSelected()) { var index = this.getIndexByValue(val); if (index > -1) { var alls = this.getAllButtons(); if (index - 1 >= 0) { if (BI.isNotNull(alls[index - 1]) && BI.isFunction(alls[index - 1].isSelected) && alls[index - 1].isSelected()) { alls[index - 1].setBottomLineVisible(); ob.setTopLineVisible(); } } if (index + 1 <= alls.length - 1) { if (BI.isNotNull(alls[index + 1]) && BI.isFunction(alls[index + 1].isSelected) && alls[index + 1].isSelected()) { alls[index + 1].setTopLineVisible(); ob.setBottomLineVisible(); } } } } else { var index = this.getIndexByValue(val); if (index > -1) { var alls = this.getAllButtons(); if (index - 1 >= 0) { if (BI.isNotNull(alls[index - 1]) && BI.isFunction(alls[index - 1].isSelected) && alls[index - 1].isSelected()) { alls[index - 1].setBottomLineInVisible(); } } if (index + 1 <= alls.length - 1) { if (BI.isNotNull(alls[index + 1]) && BI.isFunction(alls[index + 1].isSelected) && alls[index + 1].isSelected()) { alls[index + 1].setTopLineInVisible(); } } } } self.fireEvent(BI.SelectDataLoader.EVENT_CHANGE); } }) }, setEnable: function (v) { BI.SelectDataLoader.superclass.setEnable.apply(this, arguments); this.loader.setEnable(v) }, doBehavior: function () { this.loader.doBehavior.apply(this.loader, arguments); }, populate: function () { this.loader.populate.apply(this.loader, arguments); }, getAllButtons: function(){ return this.loader.getAllButtons(); }, showView: function(b){ BI.each(this.loader.getAllButtons(),function(i, button){ button.showView && button.showView(b); }) }, hideView: function(b){ BI.each(this.loader.getAllButtons(),function(i, button){ button.hideView && button.hideView(b); }) }, setValue: function (v) { this.loader.setValue(v); }, getValue: function () { return this.loader.getValue(); }, empty: function () { this.loader.empty(); } }); BI.SelectDataLoader.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.select_data_loader", BI.SelectDataLoader);/** * Created by GUY on 2015/9/6. * @class BI.SelectDataLevelNode * @extends BI.NodeButton */ BI.SelectDataLevelNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { return BI.extend(BI.SelectDataLevelNode.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-select-data-level0-node bi-list-item", id: "", pId: "", layer: 0, open: false, height: 25 }) }, _init: function () { var title = this.options.title; var warningTitle = this.options.warningTitle; this.options.title = ""; this.options.warningTitle = ""; BI.SelectDataLevelNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.tree_group_node_checkbox" }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, keyword: o.keyword, title: title, warningTitle: warningTitle, disabled: o.disabled, py: o.py }); this.tip = BI.createWidget({ type: "bi.label", cls: "select-data-selected-count-label", whiteSpace: "nowrap", width: 25, height: o.height }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.layout" }, width: o.layer * 20 }, { width: 23, el: this.checkbox }, { el: this.text }, { width: 25, el: this.tip }] }) }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.SelectDataLevelNode.superclass.doClick.apply(this, arguments); this.checkbox.setSelected(this.isOpened()); }, setOpened: function (v) { BI.SelectDataLevelNode.superclass.setOpened.apply(this, arguments); this.checkbox.setSelected(v); }, setValue: function (items) { BI.SelectDataLevelNode.superclass.setValue.apply(this, arguments); if (BI.isEmpty(items)) { this.tip.setText(""); } else { this.tip.setText("(" + items.length + ")"); } this.tip.setTitle(items.toString()); }, setEnable: function (b) { BI.SelectDataLevelNode.superclass.setEnable.apply(this, arguments); this.checkbox.setEnable(b); this.text.setEnable(b); } }); $.shortcut("bi.select_data_level_node", BI.SelectDataLevelNode);/** * Created by GUY on 2015/9/15. * @class BI.SelectDataLevel1DateNode * @extends BI.NodeButton */ BI.SelectDataLevel1DateNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { return BI.extend(BI.SelectDataLevel1DateNode.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-select-data-level1-date-node bi-list-item", id: "", pId: "", layer: 1, open: false, height: 25 }) }, _getFieldClass: function (type) { switch (type) { case BICst.COLUMN.STRING: return "select-data-field-string-group-font"; case BICst.COLUMN.NUMBER: return "select-data-field-number-group-font"; case BICst.COLUMN.DATE: return "select-data-field-date-group-font"; case BICst.COLUMN.COUNTER: return "select-data-field-number-group-font"; default: return "select-data-field-date-group-font"; } }, _init: function () { BI.SelectDataLevel1DateNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button = BI.createWidget({ type: "bi.icon_text_item", cls: this._getFieldClass(o.fieldType), text: o.text, value: o.value, keyword: o.keyword, height: o.height, textLgap: 10, textRgap: 5 }); this.checkbox = BI.createWidget({ type: "bi.tree_group_node_checkbox" }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.button.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.layout" }, width: o.layer * 20 }, { el: this.button }, { el: this.checkbox, width: 25 }] }) }, doRedMark: function () { this.button.doRedMark.apply(this.button, arguments); }, unRedMark: function () { this.button.unRedMark.apply(this.button, arguments); }, doClick: function () { BI.SelectDataLevel1DateNode.superclass.doClick.apply(this, arguments); this.checkbox.setSelected(this.isOpened()); }, setOpened: function (v) { BI.SelectDataLevel1DateNode.superclass.setOpened.apply(this, arguments); this.checkbox.setSelected(v); }, setValue: function (items) { BI.SelectDataLevel1DateNode.superclass.setValue.apply(this, arguments); }, setEnable: function (b) { BI.SelectDataLevel1DateNode.superclass.setEnable.apply(this, arguments); this.checkbox.setEnable(b); } }); $.shortcut("bi.select_data_level1_date_node", BI.SelectDataLevel1DateNode);/** * Created by GUY on 2015/9/15. * @class BI.SelectDataLevel2DateNode * @extends BI.NodeButton */ BI.SelectDataLevel2DateNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { return BI.extend(BI.SelectDataLevel2DateNode.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-select-data-level2-date-node bi-list-item", id: "", pId: "", layer: 2, open: false, height: 25 }) }, _getFieldClass: function (type) { switch (type) { case BICst.COLUMN.STRING: return "select-data-field-string-group-font"; case BICst.COLUMN.NUMBER: return "select-data-field-number-group-font"; case BICst.COLUMN.DATE: return "select-data-field-date-group-font"; case BICst.COLUMN.COUNTER: return "select-data-field-number-group-font"; default: return "select-data-field-date-group-font"; } }, _init: function () { BI.SelectDataLevel2DateNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button = BI.createWidget({ type: "bi.icon_text_item", cls: this._getFieldClass(o.fieldType), text: o.text, value: o.value, keyword: o.keyword, height: o.height, textLgap: 10, textRgap: 5 }); this.checkbox = BI.createWidget({ type: "bi.tree_group_node_checkbox" }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.button.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.layout" }, width: o.layer * 20 }, { el: this.button }, { el: this.checkbox, width: 25 }] }) }, doRedMark: function () { this.button.doRedMark.apply(this.button, arguments); }, unRedMark: function () { this.button.unRedMark.apply(this.button, arguments); }, doClick: function () { BI.SelectDataLevel2DateNode.superclass.doClick.apply(this, arguments); this.checkbox.setSelected(this.isOpened()); }, setOpened: function (v) { BI.SelectDataLevel2DateNode.superclass.setOpened.apply(this, arguments); this.checkbox.setSelected(v); }, setValue: function (items) { BI.SelectDataLevel2DateNode.superclass.setValue.apply(this, arguments); }, setEnable: function (b) { BI.SelectDataLevel2DateNode.superclass.setEnable.apply(this, arguments); this.checkbox.setEnable(b); } }); $.shortcut("bi.select_data_level2_date_node", BI.SelectDataLevel2DateNode);/** * 字段列表展开Expander * * Created by GUY on 2015/9/14. * @class BI.SelectDataTree * @extends BI.Widget */ BI.SelectDataTree = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectDataTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-data-tree", el: {}, expander: {}, items: [], itemsCreator: BI.emptyFn }); }, _init: function () { BI.SelectDataTree.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: "bi.custom_tree", element: this, expander: BI.extend({ type: "bi.select_data_expander", el: {}, popup: { type: "bi.select_data_tree" } }, o.expander), items: o.items, itemsCreator: o.itemsCreator, el: BI.extend({ type: "bi.select_data_loader" }, o.el) }); this.tree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.tree.on(BI.CustomTree.EVENT_CHANGE, function () { self.fireEvent(BI.SelectDataTree.EVENT_CHANGE, arguments); }) }, setEnable: function (v) { BI.SelectDataTree.superclass.setEnable.apply(this, arguments); this.tree.setEnable(v) }, showView: function(b){ BI.each(this.tree.getAllButtons(),function(i, button){ button.showView && button.showView(b); }) }, hideView: function(b){ BI.each(this.tree.getAllButtons(),function(i, button){ button.hideView && button.hideView(b); }) }, getAllButtons: function(){ return this.tree.getAllButtons(); }, doBehavior: function () { this.tree.doBehavior.apply(this.tree, arguments); }, empty: function () { }, populate: function (items) { this.tree.populate.apply(this.tree, arguments); }, setValue: function (v) { this.tree.setValue(v); }, getValue: function () { //这里需要去重,因为很有可能expander中保存了之前的value值 return BI.uniq(this.tree.getValue()); } }); BI.SelectDataTree.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.select_data_tree", BI.SelectDataTree);/** * Created by GUY on 2015/9/6. * @class BI.SelectDataLevelItem * @extends BI.Single */ BI.SelectDataLevelItem = BI.inherit(BI.Single, { _defaultConfig: function () { return BI.extend(BI.SelectDataLevelItem.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-select-data-level0-item", height: 25, hgap: 0, layer: 1, fieldType: BICst.COLUMN.STRING, lgap: 0, rgap: 0 }) }, _getFieldClass: function (type) { switch (type) { case BICst.COLUMN.STRING: return "select-data-field-string-font"; case BICst.COLUMN.NUMBER: return "select-data-field-number-font"; case BICst.COLUMN.DATE: return "select-data-field-date-font"; case BICst.COLUMN.COUNTER: return "select-data-field-number-font"; default: return "select-data-field-number-font"; } }, _init: function () { BI.SelectDataLevelItem.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button = BI.createWidget({ type: "bi.blank_icon_text_item", trigger: "mousedown", cls: "select-data-level0-item-button " + this._getFieldClass(o.fieldType), blankWidth: o.layer * 20, text: o.text, value: o.value, keyword: o.keyword, height: 25, textLgap: 10, textRgap: 5 }); this.button.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, self.getValue(), self); }); this.topLine = BI.createWidget({ type: "bi.layout", height: 0, cls: "select-data-top-line" }); this.bottomLine = BI.createWidget({ type: "bi.layout", height: 0, cls: "select-data-bottom-line" }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.topLine, top: 0, left: o.lgap, right: o.rgap }, { el: this.bottomLine, bottom: 0, left: o.lgap, right: o.rgap }, { el: this.button, top: 0, left: o.lgap, right: o.rgap }] }); this.topLine.invisible(); this.bottomLine.invisible(); }, setEnable: function (v) { BI.SelectDataLevelItem.superclass.setEnable.apply(this, arguments) this.button.setEnable(v); try { this.button.element.draggable(v ? "enable" : "disable"); } catch (e) { } if (!v) { this.setSelected(false); } }, isSelected: function () { return this.button.isSelected(); }, setSelected: function (b) { this.button.setSelected(b); if (!b) { this.topLine.invisible(); this.bottomLine.invisible(); this.element.removeClass("select-data-item-top"); this.element.removeClass("select-data-item-bottom"); } }, setTopLineVisible: function () { this.topLine.visible(); this.element.addClass("select-data-item-top"); }, setTopLineInVisible: function () { this.topLine.invisible(); this.element.removeClass("select-data-item-top"); }, setBottomLineVisible: function () { this.bottomLine.visible(); this.element.addClass("select-data-item-bottom"); }, setBottomLineInVisible: function () { this.bottomLine.invisible(); this.element.removeClass("select-data-item-bottom"); }, doRedMark: function () { this.button.doRedMark.apply(this.button, arguments); }, unRedMark: function () { this.button.unRedMark.apply(this.button, arguments); }, doHighLight: function () { this.button.doHighLight.apply(this.button, arguments); }, unHighLight: function () { this.button.unHighLight.apply(this.button, arguments); } }); $.shortcut("bi.select_data_level_item", BI.SelectDataLevelItem);/** * 加号表示的组节点 * Created by GUY on 2015/9/6. * @class BI.SelectTreeFirstPlusGroupNode * @extends BI.NodeButton */ BI.SelectTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.SelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-select-tree-first-plus-group-node bi-list-item-active", logic: { dynamic: false }, id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.SelectTreeFirstPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.first_tree_node_checkbox", stopPropagation: true }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { if (this.isSelected()) { self.triggerExpand(); } else { self.triggerCollapse(); } } }); var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left); var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, { width: 25, el: this.checkbox }, this.text); BI.createWidget(BI.extend({ element: this }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, { items: items })))); }, isOnce: function () { return true; }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.NodeButton.superclass.doClick.apply(this, arguments); }, setOpened: function (v) { BI.SelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.checkbox)) { this.checkbox.setSelected(v); } } }); $.shortcut("bi.select_tree_first_plus_group_node", BI.SelectTreeFirstPlusGroupNode);/** * 加号表示的组节点 * Created by GUY on 2015/9/6. * @class BI.SelectTreeLastPlusGroupNode * @extends BI.NodeButton */ BI.SelectTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.SelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-select-tree-last-plus-group-node bi-list-item-active", logic: { dynamic: false }, id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.SelectTreeLastPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.last_tree_node_checkbox", stopPropagation: true }) this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { if (this.isSelected()) { self.triggerExpand(); } else { self.triggerCollapse(); } } }); var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left); var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, { width: 25, el: this.checkbox }, this.text); BI.createWidget(BI.extend({ element: this }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, { items: items })))); }, isOnce: function () { return true; }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.NodeButton.superclass.doClick.apply(this, arguments); }, setOpened: function (v) { BI.SelectTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.checkbox)) { this.checkbox.setSelected(v); } } }); $.shortcut("bi.select_tree_last_plus_group_node", BI.SelectTreeLastPlusGroupNode);/** * 加号表示的组节点 * Created by GUY on 2015/9/6. * @class BI.SelectTreeMidPlusGroupNode * @extends BI.NodeButton */ BI.SelectTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.SelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-select-tree-mid-plus-group-node bi-list-item-active", logic: { dynamic: false }, id: "", pId: "", readonly: true, open: false, height: 25 }) }, _init: function () { BI.SelectTreeMidPlusGroupNode.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.mid_tree_node_checkbox", stopPropagation: true }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { if (this.isSelected()) { self.triggerExpand(); } else { self.triggerCollapse(); } } }); var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left); var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, { width: 25, el: this.checkbox }, this.text); BI.createWidget(BI.extend({ element: this }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, { items: items })))); }, isOnce: function () { return true; }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.NodeButton.superclass.doClick.apply(this, arguments); }, setOpened: function (v) { BI.SelectTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments); if (BI.isNotNull(this.checkbox)) { this.checkbox.setSelected(v); } } }); $.shortcut("bi.select_tree_mid_plus_group_node", BI.SelectTreeMidPlusGroupNode);/** * @class BI.SelectTreeCombo * @extends BI.Widget */ BI.SelectTreeCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-tree-combo", height: 30, text: "", items: [] }); }, _init: function () { BI.SelectTreeCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.single_tree_trigger", text: o.text, height: o.height, items: o.items }); this.popup = BI.createWidget({ type: "bi.select_tree_popup", items: o.items }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup } }); this.combo.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.popup.on(BI.SingleTreePopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); }); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); }, populate: function (items) { this.combo.populate(items); } }); $.shortcut("bi.select_tree_combo", BI.SelectTreeCombo);/** * @class BI.SelectTreeExpander * @extends BI.Widget */ BI.SelectTreeExpander = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SelectTreeExpander.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-tree-expander", trigger: "click", toggle: true, direction: "bottom", isDefaultInit: true, el: {}, popup: {} }); }, _init: function () { BI.SelectTreeExpander.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(BI.extend({stopPropagation: true}, o.el)); this.trigger.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { if (this.isSelected()) { self.expander.setValue([]); } } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.expander = BI.createWidget({ type: "bi.expander", element: this, trigger: o.trigger, toggle: o.toggle, direction: o.direction, isDefaultInit: o.isDefaultInit, el: this.trigger, popup: o.popup }); this.expander.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.trigger.setSelected(false); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); }, setValue: function (v) { if (BI.contains(v, this.trigger.getValue())) { this.trigger.setSelected(true); this.expander.setValue([]); } else { this.trigger.setSelected(false); this.expander.setValue(v); } }, getValue: function () { if (this.trigger.isSelected()) { return [this.trigger.getValue()]; } return this.expander.getValue(); }, populate: function (items) { this.expander.populate(items); } }); $.shortcut("bi.select_tree_expander", BI.SelectTreeExpander);/** * @class BI.SelectTreePopup * @extends BI.Pane */ BI.SelectTreePopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.SelectTreePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-select-tree-popup", tipText: BI.i18nText("BI-No_Selected_Item"), items: [] }); }, _formatItems: function (nodes, layer) { var self = this; BI.each(nodes, function (i, node) { var extend = {layer: layer}; node.id = node.id || BI.UUID(); if (node.isParent === true || BI.isNotEmptyArray(node.children)) { switch (i) { case 0 : extend.type = "bi.select_tree_first_plus_group_node"; break; case nodes.length - 1 : extend.type = "bi.select_tree_last_plus_group_node"; break; default : extend.type = "bi.select_tree_mid_plus_group_node"; break; } BI.defaults(node, extend); self._formatItems(node.children); } else { switch (i) { case nodes.length - 1: extend.type = "bi.last_tree_leaf_item"; break; default : extend.type = "bi.mid_tree_leaf_item"; } BI.defaults(node, extend); } }); return nodes; }, _init: function () { BI.SelectTreePopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: 'bi.level_tree', expander: { type: "bi.select_tree_expander", isDefaultInit: true }, items: this._formatItems(BI.Tree.transformToTreeFormat(o.items)), chooseType: BI.Selection.Single }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.tree] }); this.tree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.tree.on(BI.LevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.SelectTreePopup.EVENT_CHANGE); }); this.check(); }, getValue: function () { return this.tree.getValue(); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.tree.setValue(v); }, populate: function (items) { BI.SelectTreePopup.superclass.populate.apply(this, arguments); this.tree.populate(items); } }); BI.SelectTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.select_tree_popup", BI.SelectTreePopup);/** * * Created by GUY on 2016/8/10. * @class BI.SequenceTableDynamicNumber * @extends BI.SequenceTableTreeNumber */ BI.SequenceTableDynamicNumber = BI.inherit(BI.SequenceTableTreeNumber, { _defaultConfig: function () { return BI.extend(BI.SequenceTableDynamicNumber.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-sequence-table-dynamic-number" }); }, _init: function () { BI.SequenceTableDynamicNumber.superclass._init.apply(this, arguments); }, _formatNumber: function (nodes) { var self = this, o = this.options; var result = []; var count = this._getStart(nodes); function getLeafCount(node) { var cnt = 0; if (BI.isNotEmptyArray(node.children)) { BI.each(node.children, function (index, child) { cnt += getLeafCount(child); }); if (node.children.length > 1 && BI.isNotEmptyArray(node.values)) { cnt++; } } else { cnt++; } return cnt; } var start = 0, top = 0; BI.each(nodes, function (i, node) { if (BI.isArray(node.children)) { BI.each(node.children, function (index, child) { var cnt = getLeafCount(child); result.push({ text: count++, start: start, top: top, cnt: cnt, index: index, height: cnt * o.rowSize }); start += cnt; top += cnt * o.rowSize; }); if (BI.isNotEmptyArray(node.values)) { result.push({ text: BI.i18nText("BI-Summary_Values"), start: start++, top: top, cnt: 1, isSummary: true, height: o.rowSize }); top += o.rowSize; } } }); return result; } }); $.shortcut('bi.sequence_table_dynamic_number', BI.SequenceTableDynamicNumber);/** * * Created by GUY on 2016/5/26. * @class BI.SequenceTableListNumber * @extends BI.Widget */ BI.SequenceTableListNumber = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SequenceTableListNumber.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-sequence-table-list-number", isNeedFreeze: false, scrollTop: 0, startSequence: 1,//开始的序号 headerRowSize: 25, rowSize: 25, header: [], items: [], //二维数组 //交叉表头 crossHeader: [], crossItems: [], pageSize: 20 }); }, _init: function () { BI.SequenceTableListNumber.superclass._init.apply(this, arguments); var self = this, o = this.options; this.start = o.startSequence; this.renderedCells = []; this.renderedKeys = []; this.header = BI.createWidget({ type: "bi.table_style_cell", cls: "sequence-table-title-cell", styleGetter: o.headerCellStyleGetter, text: BI.i18nText("BI-Number_Index") }); this.container = BI.createWidget({ type: "bi.absolute", width: 60, scrollable: false }); this.scrollContainer = BI.createWidget({ type: "bi.vertical", scrollable: false, scrolly: false, items: [this.container] }); this.layout = BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.header, height: o.headerRowSize * o.header.length }, { el: this.scrollContainer }] }); this._populate(); }, _layout: function () { var self = this, o = this.options; var headerHeight = o.headerRowSize * o.header.length; var items = this.layout.attr("items"); if (o.isNeedFreeze === false) { items[0].height = 0; } else if (o.isNeedFreeze === true) { items[0].height = headerHeight; } this.layout.attr("items", items); this.layout.resize(); this.container.setHeight(o.items.length * o.rowSize); this.scrollContainer.element.scrollTop(o.scrollTop); }, _calculateChildrenToRender: function () { var self = this, o = this.options; var scrollTop = BI.clamp(o.scrollTop, 0, o.rowSize * o.items.length - (o.height - o.header.length * o.headerRowSize) + BI.DOM.getScrollWidth()); var start = Math.floor(scrollTop / o.rowSize); var end = start + Math.floor((o.height - o.header.length * o.headerRowSize) / o.rowSize); var renderedCells = [], renderedKeys = []; for (var i = start, cnt = 0; i <= end && i < o.items.length; i++, cnt++) { var index = BI.deepIndexOf(this.renderedKeys, this.start + i); var top = i * o.rowSize; if (index > -1) { if (o.rowSize !== this.renderedCells[index]._height) { this.renderedCells[index]._height = o.rowSize; this.renderedCells[index].el.setHeight(o.rowSize); } if (this.renderedCells[index].top !== top) { this.renderedCells[index].top = top; this.renderedCells[index].el.element.css("top", top + "px"); } renderedCells.push(this.renderedCells[index]); } else { var child = BI.createWidget(BI.extend({ type: "bi.table_style_cell", cls: "sequence-table-number-cell", width: 60, height: o.rowSize, text: this.start + i, styleGetter: function (index) { return function () { return o.sequenceCellStyleGetter(self.start + i - 1); } }(cnt) })); renderedCells.push({ el: child, left: 0, top: top, _height: o.rowSize }); } renderedKeys.push(this.start + i); } //已存在的, 需要添加的和需要删除的 var existSet = {}, addSet = {}, deleteArray = []; BI.each(renderedKeys, function (i, key) { if (BI.deepContains(self.renderedKeys, key)) { existSet[i] = key; } else { addSet[i] = key; } }); BI.each(this.renderedKeys, function (i, key) { if (BI.deepContains(existSet, key)) { return; } if (BI.deepContains(addSet, key)) { return; } deleteArray.push(i); }); BI.each(deleteArray, function (i, index) { self.renderedCells[index].el.destroy(); }); var addedItems = []; BI.each(addSet, function (index) { addedItems.push(renderedCells[index]) }); BI.createWidget({ type: "bi.absolute", element: this.container, items: addedItems }); this.renderedCells = renderedCells; this.renderedKeys = renderedKeys; }, _populate: function () { this.header.populate(); this._layout(); this._calculateChildrenToRender(); }, setVerticalScroll: function (scrollTop) { if (this.options.scrollTop !== scrollTop) { this.options.scrollTop = scrollTop; this.scrollContainer.element.scrollTop(scrollTop); } }, getVerticalScroll: function () { return this.options.scrollTop; }, setVPage: function (v) { var o = this.options; this.start = (v - 1) * o.pageSize + 1; }, _restore: function () { var o = this.options; BI.each(this.renderedCells, function (i, cell) { cell.el.destroy(); }); this.renderedCells = []; this.renderedKeys = []; }, restore: function () { this._restore(); }, populate: function (items, header) { var o = this.options; if (items && items !== this.options.items) { o.items = items; this._restore(); } if (header && header !== this.options.header) { o.header = header; } this._populate(); } }); $.shortcut('bi.sequence_table_list_number', BI.SequenceTableListNumber);/** * 带有序号的表格 * * Created by GUY on 2016/5/26. * @class BI.SequenceTable * @extends BI.Widget */ BI.SequenceTable = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SequenceTable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-sequence-table", el: { type: "bi.adaptive_table" }, sequence: {}, isNeedResize: true, isResizeAdapt: false, isNeedFreeze: false,//是否需要冻结单元格 freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为true时生效 isNeedMerge: false,//是否需要合并单元格 mergeCols: [], //合并的单元格列号 mergeRule: BI.emptyFn, columnSize: [], minColumnSize: [], maxColumnSize: [], headerRowSize: 25, rowSize: 25, regionColumnSize: [], headerCellStyleGetter: BI.emptyFn, summaryCellStyleGetter: BI.emptyFn, sequenceCellStyleGetter: BI.emptyFn, header: [], items: [], //二维数组 //交叉表头 crossHeader: [], crossItems: [], showSequence: false, startSequence: 1//开始的序号 }); }, _init: function () { BI.SequenceTable.superclass._init.apply(this, arguments); var self = this, o = this.options; this.sequence = BI.createWidget(o.sequence, { type: "bi.sequence_table_list_number", invisible: o.showSequence === false, startSequence: o.startSequence, isNeedFreeze: o.isNeedFreeze, header: o.header, items: o.items, crossHeader: o.crossHeader, crossItems: o.crossItems, headerRowSize: o.headerRowSize, rowSize: o.rowSize, width: 60, height: o.height - BI.GridTableScrollbar.SIZE, headerCellStyleGetter: o.headerCellStyleGetter, summaryCellStyleGetter: o.summaryCellStyleGetter, sequenceCellStyleGetter: o.sequenceCellStyleGetter }); this.table = BI.createWidget(o.el, { type: "bi.adaptive_table", width: o.showSequence === true ? o.width - 60 : o.width, height: o.height, isNeedResize: o.isNeedResize, isResizeAdapt: o.isResizeAdapt, isNeedFreeze: o.isNeedFreeze, freezeCols: o.freezeCols, isNeedMerge: o.isNeedMerge, mergeCols: o.mergeCols, mergeRule: o.mergeRule, columnSize: o.columnSize, minColumnSize: o.minColumnSize, maxColumnSize: o.maxColumnSize, headerRowSize: o.headerRowSize, rowSize: o.rowSize, regionColumnSize: o.regionColumnSize, headerCellStyleGetter: o.headerCellStyleGetter, summaryCellStyleGetter: o.summaryCellStyleGetter, sequenceCellStyleGetter: o.sequenceCellStyleGetter, header: o.header, items: o.items, //交叉表头 crossHeader: o.crossHeader, crossItems: o.crossItems }); this.table.on(BI.Table.EVENT_TABLE_SCROLL, function (scroll) { if (self.sequence.getVerticalScroll() !== this.getVerticalScroll()) { self.sequence.setVerticalScroll(this.getVerticalScroll()); self.sequence.populate(); } self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); }); this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { o.regionColumnSize = this.getRegionColumnSize(); o.columnSize = this.getColumnSize(); self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); }); this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { o.regionColumnSize = this.getRegionColumnSize(); o.columnSize = this.getColumnSize(); self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); }); this.htape = BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.sequence, left: 0, top: 0 }, { el: this.table, top: 0, left: o.showSequence === true ? 60 : 0 }] }); this._populate(); }, _populate: function () { var o = this.options; this.sequence.attr({ items: o.items, header: o.header, crossItems: o.crossItems, crossHeader: o.crossHeader }); if (o.showSequence === true) { this.sequence.setVisible(true); this.table.element.css("left", "60px"); this.table.setWidth(o.width - 60); } else { this.sequence.setVisible(false); this.table.element.css("left", "0px"); this.table.setWidth(o.width); } }, setWidth: function (width) { BI.PageTable.superclass.setWidth.apply(this, arguments); this.table.setWidth(this.options.showSequence ? width - 60 : width); }, setHeight: function (height) { BI.PageTable.superclass.setHeight.apply(this, arguments); this.table.setHeight(height); this.sequence.setHeight(height - BI.GridTableScrollbar.SIZE); }, setColumnSize: function (columnSize) { this.options.columnSize = columnSize; this.table.setColumnSize(columnSize); }, getColumnSize: function () { return this.table.getColumnSize(); }, setRegionColumnSize: function (columnSize) { this.options.columnSize = columnSize; this.table.setRegionColumnSize(columnSize); }, getRegionColumnSize: function () { return this.table.getRegionColumnSize(); }, hasLeftHorizontalScroll: function () { return this.table.hasLeftHorizontalScroll(); }, hasRightHorizontalScroll: function () { return this.table.hasRightHorizontalScroll(); }, setVerticalScroll: function (scrollTop) { this.table.setVerticalScroll(scrollTop); this.sequence.setVerticalScroll(scrollTop); }, getVerticalScroll: function () { return this.table.getVerticalScroll(); }, setVPage: function (page) { this.sequence.setVPage && this.sequence.setVPage(page); }, setHPage: function (page) { this.sequence.setHPage && this.sequence.setHPage(page); }, attr: function () { BI.SequenceTable.superclass.attr.apply(this, arguments); this.table.attr.apply(this.table, arguments); this.sequence.attr.apply(this.sequence, arguments); }, restore: function () { this.table.restore(); this.sequence.restore(); }, populate: function (items, header, crossItems, crossHeader) { var o = this.options; if (items) { o.items = items; } if (header) { o.header = header; } if (crossItems) { o.crossItems = crossItems; } if (crossHeader) { o.crossHeader = crossHeader; } this._populate(); this.table.populate.apply(this.table, arguments); this.sequence.populate.apply(this.sequence, arguments); this.sequence.setVerticalScroll(this.table.getVerticalScroll()); }, destroy: function () { this.table.destroy(); BI.SequenceTable.superclass.destroy.apply(this, arguments); } }); $.shortcut('bi.sequence_table', BI.SequenceTable);/** * 简单的搜索功能 * * Created by GUY on 2015/9/16. * @class BI.SimpleSearcher * @extends BI.Widget */ BI.SimpleSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SimpleSearcher.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-simple-searcher", items: [], itemsCreator: BI.emptyFn, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE }); }, _init: function () { BI.SimpleSearcher.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.tree = BI.createWidget({ type: "bi.select_data_tree", items: o.items, el: { el: { chooseType: o.chooseType } }, itemsCreator: o.itemsCreator }); this.tree.on(BI.SelectDataTree.EVENT_CHANGE, function () { self.fireEvent(BI.SimpleSearcher.EVENT_CHANGE, arguments); }); this.searcher = BI.createWidget({ type: "bi.searcher", el: { type: "bi.small_search_editor" }, isAutoSearch: false, //是否自动搜索 isAutoSync: false, onSearch: function (op, populate) { o.itemsCreator(op, function (searchResult, matchResult) { populate(searchResult, matchResult, op.keyword); }) }, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, popup: { matcher: { type: "bi.select_data_tree", el: { el: { chooseType: o.chooseType } }, itemsCreator: o.itemsCreator }, searcher: { type: "bi.select_data_tree", el: { el: { chooseType: o.chooseType } }, itemsCreator: o.itemsCreator } }, adapter: this.tree }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: { type: "bi.absolute", items: [{ el: this.searcher, left: 10, right: 10, top: 10 }] }, height: 45 }, this.tree] }) }, stopSearch: function () { this.searcher.stopSearch(); }, setValue: function (v) { }, getValue: function () { return this.searcher.getValue(); }, populate: function () { this.tree.populate.apply(this.tree, arguments); } }); BI.SimpleSearcher.EVENT_CHANGE = "SimpleSearcher.EVENT_CHANGE"; $.shortcut('bi.simple_searcher', BI.SimpleSearcher);/** * 完成搜索功能模块 * * Created by GUY on 2015/9/16. * @class BI.SimpleSelectDataSearcher * @extends BI.Widget */ BI.SimpleSelectDataSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SimpleSelectDataSearcher.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-simple-select-data-searcher", items: [], itemsCreator: BI.emptyFn, popup: {}, adapter: {} }); }, _init: function () { BI.SimpleSelectDataSearcher.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.tree = BI.createWidget(o.adapter, { type: "bi.select_data_tree", items: o.items, el: { el: { chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE } }, itemsCreator: o.itemsCreator }); this.tree.on(BI.SelectDataTree.EVENT_CHANGE, function () { self.fireEvent(BI.SimpleSelectDataSearcher.EVENT_CLICK_ITEM, arguments); }); this.searcherPane = BI.createWidget(o.popup, { type: "bi.simple_select_data_search_result_pane", itemsCreator: o.itemsCreator }); this.searcherPane.on(BI.SimpleSelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE, function () { self.searcher.doSearch(); }); this.searcherPane.on(BI.SimpleSelectDataSearchResultPane.EVENT_CHANGE, function () { self.fireEvent(BI.SimpleSelectDataSearcher.EVENT_CLICK_ITEM, arguments); }); this.searcher = BI.createWidget({ type: "bi.searcher", el: { type: "bi.small_search_editor" }, isAutoSearch: false, //是否自动搜索 isAutoSync: false, onSearch: function (op, populate) { o.itemsCreator(BI.extend(op, { searchType: self.searcherPane.getSegmentValue() }), function (searchResult, matchResult) { populate(searchResult, matchResult, op.keyword); }) }, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, popup: this.searcherPane, adapter: this.tree }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: { type: "bi.absolute", items: [{ el: this.searcher, left: 10, right: 10, top: 10 }] }, height: 45 }, this.tree] }) }, stopSearch: function () { this.searcher.stopSearch(); }, setValue: function (v) { }, getValue: function () { return this.searcher.getValue(); }, populate: function () { this.tree.populate.apply(this.tree, arguments); } }); BI.SimpleSelectDataSearcher.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; $.shortcut('bi.simple_select_data_searcher', BI.SimpleSelectDataSearcher);/** * 搜索结果面板 * * Created by GUY on 2015/9/16. * @class BI.SimpleSelectDataSearchResultPane * @extends BI.Widget */ BI.SimpleSelectDataSearchResultPane = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SimpleSelectDataSearchResultPane.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-select-data-search-result-pane bi-select-data-search-result-pane bi-searcher-view", itemsCreator: BI.emptyFn, segment: {} }); }, _init: function () { BI.SimpleSelectDataSearchResultPane.superclass._init.apply(this, arguments); var self = this, o = this.options; this.segment = BI.createWidget(o.segment, { type: "bi.simple_select_data_search_segment", cls: "search-result-toolbar" }); this.segment.on(BI.SimpleSelectDataSearchSegment.EVENT_CHANGE, function () { self.fireEvent(BI.SimpleSelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE); }); this.resultPane = BI.createWidget({ type: "bi.searcher_view", matcher: { type: "bi.select_data_tree", el: { el: { chooseType: BI.Selection.Single } }, itemsCreator: o.itemsCreator }, searcher: { type: "bi.select_data_tree", el: { el: { chooseType: BI.Selection.Single } }, itemsCreator: o.itemsCreator } }); this.resultPane.on(BI.SearcherView.EVENT_CHANGE, function () { self.fireEvent(BI.SimpleSelectDataSearchResultPane.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.vtape", element: this, items: [{ el: this.segment, height: 30 }, { type: "bi.border", cls: "search-result-line", height: 2 }, { type: "bi.border", cls: "search-result-line", height: 1 }, { type: "bi.absolute", items: [{ el: this.resultPane, left: 0, right: 0, top: 0, bottom: 0 }] }] }); }, empty: function () { this.resultPane.empty(); }, populate: function (searchResult, matchResult, keyword) { this.resultPane.populate.apply(this.resultPane, arguments); }, setValue: function (v) { }, getSegmentValue: function () { return this.segment.getValue(); }, getValue: function () { return this.resultPane.getValue(); } }); BI.SimpleSelectDataSearchResultPane.EVENT_SEARCH_TYPE_CHANGE = "EVENT_SEARCH_TYPE_CHANGE"; BI.SimpleSelectDataSearchResultPane.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.simple_select_data_search_result_pane', BI.SimpleSelectDataSearchResultPane);/** * search面板选项栏 * * Created by GUY on 2015/9/16. * @class BI.SimpleSelectDataSearchSegment * @extends BI.Widget */ BI.SimpleSelectDataSearchSegment = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SimpleSelectDataSearchSegment.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-select-data-search-segment", height: 30, items: [{ text: BI.i18nText("BI-Basic_Field"), selected: true, value: BI.SelectDataSearchSegment.SECTION_FIELD }, { text: BI.i18nText("BI-Basic_Table"), value: BI.SelectDataSearchSegment.SECTION_TABLE }] }); }, _init: function () { BI.SimpleSelectDataSearchSegment.superclass._init.apply(this, arguments); var self = this, o = this.options; this.segment = BI.createWidget({ type: "bi.segment", height: 20, cls: "search-segment-field-table", items: o.items }); this.segment.on(BI.Segment.EVENT_CHANGE, function(){ self.fireEvent(BI.SimpleSelectDataSearchSegment.EVENT_CHANGE); }); BI.createWidget({ type: "bi.vertical", element: this, items: [{ type: "bi.absolute", height: o.height, items: [{ el: this.segment, top: 5, right: 10, left: 10, bottom: 5 }] }] }); }, setValue: function (v) { var self = this; BI.each([BI.SelectDataSearchSegment.SECTION_FIELD, BI.SelectDataSearchSegment.SECTION_TABLE], function (i, key) { if (key & v) { self.segment.setValue(key & v); } }); }, getValue: function () { return this.segment.getValue()[0] } }); BI.SimpleSelectDataSearchSegment.EVENT_CHANGE = "SimpleSelectDataSearchSegment.EVENT_CHANGE"; $.shortcut('bi.simple_select_data_search_segment', BI.SimpleSelectDataSearchSegment);/** * Created by GUY on 2015/9/6. * @class BI.SimpleSelectDataLevel0Node * @extends BI.NodeButton */ BI.SimpleSelectDataLevel0Node = BI.inherit(BI.NodeButton, { _defaultConfig: function () { return BI.extend(BI.SimpleSelectDataLevel0Node.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-simple-select-data-level0-node bi-list-item", id: "", pId: "", open: false, height: 25 }) }, _init: function () { BI.SimpleSelectDataLevel0Node.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.tree_group_node_checkbox" }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ width: 23, el: this.checkbox }, { el: this.text }] }) }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.SimpleSelectDataLevel0Node.superclass.doClick.apply(this, arguments); this.checkbox.setSelected(this.isOpened()); }, setOpened: function (v) { BI.SimpleSelectDataLevel0Node.superclass.setOpened.apply(this, arguments); this.checkbox.setSelected(v); }, setEnable: function (b) { BI.SimpleSelectDataLevel0Node.superclass.setEnable.apply(this, arguments); this.checkbox.setEnable(b); } }); $.shortcut("bi.simple_select_data_level0_node", BI.SimpleSelectDataLevel0Node);/** * Created by GUY on 2015/9/6. * @class BI.SimpleSelectDataLevel1Node * @extends BI.NodeButton */ BI.SimpleSelectDataLevel1Node = BI.inherit(BI.NodeButton, { _defaultConfig: function () { return BI.extend(BI.SimpleSelectDataLevel1Node.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-simple-select-data-level1-node bi-list-item", id: "", pId: "", open: false, height: 25 }) }, _init: function () { BI.SimpleSelectDataLevel1Node.superclass._init.apply(this, arguments); var self = this, o = this.options; this.checkbox = BI.createWidget({ type: "bi.tree_group_node_checkbox" }); this.text = BI.createWidget({ type: "bi.label", textAlign: "left", whiteSpace: "nowrap", textHeight: o.height, height: o.height, hgap: o.hgap, text: o.text, value: o.value, py: o.py }); this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { if(type === BI.Events.CLICK) { self.setSelected(self.isSelected()); } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.htape", element: this, items: [{ el: { type: "bi.layout" }, width: 10 },{ width: 23, el: this.checkbox }, { el: this.text }] }) }, doRedMark: function () { this.text.doRedMark.apply(this.text, arguments); }, unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); }, doClick: function () { BI.SimpleSelectDataLevel1Node.superclass.doClick.apply(this, arguments); this.checkbox.setSelected(this.isOpened()); }, setOpened: function (v) { BI.SimpleSelectDataLevel1Node.superclass.setOpened.apply(this, arguments); this.checkbox.setSelected(v); }, setEnable: function (b) { BI.SimpleSelectDataLevel1Node.superclass.setEnable.apply(this, arguments); this.checkbox.setEnable(b); } }); $.shortcut("bi.simple_select_data_level1_node", BI.SimpleSelectDataLevel1Node);/** * Created by zcf on 2016/9/22. */ BI.SingleSlider = BI.inherit(BI.Widget, { _constant: { EDITOR_WIDTH: 90, EDITOR_HEIGHT: 30, HEIGHT: 28, SLIDER_WIDTH_HALF: 15, SLIDER_WIDTH: 30, SLIDER_HEIGHT: 30, TRACK_HEIGHT: 24 }, _defaultConfig: function () { return BI.extend(BI.SingleSlider.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-slider bi-slider-track" }); }, _init: function () { BI.SingleSlider.superclass._init.apply(this, arguments); var self = this; var c = this._constant; this.enable = false; this.value = ""; this.backgroundTrack = BI.createWidget({ type: "bi.layout", cls: "background-track", height: c.TRACK_HEIGHT }); this.grayTrack = BI.createWidget({ type: "bi.layout", cls: "gray-track", height: 8 }); this.blueTrack = BI.createWidget({ type: "bi.layout", cls: "blue-track", height: 8 }); this.track = this._createTrackWrapper(); this.slider = BI.createWidget({ type: "bi.single_slider_slider" }); this.slider.element.draggable({ axis: "x", containment: this.grayTrack.element, scroll: false, drag: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1));//直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。 self._setBlueTrack(significantPercent); self._setLabelPosition(significantPercent); var v = self._getValueByPercent(significantPercent); self.label.setValue(v); self.value = v; }, stop: function (e, ui) { var percent = (ui.position.left) * 100 / (self._getGrayTrackLength()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setSliderPosition(significantPercent); self.fireEvent(BI.SingleSlider.EVENT_CHANGE); } }); var sliderVertical = BI.createWidget({ type: "bi.vertical", items: [{ type: "bi.absolute", items: [this.slider] }], hgap: c.SLIDER_WIDTH_HALF, height: c.SLIDER_HEIGHT }); sliderVertical.element.click(function (e) { if (self.enable) { var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF; var trackLength = self.track.element[0].scrollWidth; var percent = 0; if (offset < 0) { percent = 0 } if (offset > 0 && offset < (trackLength - c.SLIDER_WIDTH)) { percent = offset * 100 / self._getGrayTrackLength(); } if (offset > (trackLength - c.SLIDER_WIDTH)) { percent = 100 } var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setAllPosition(significantPercent); var v = self._getValueByPercent(significantPercent); self.label.setValue(v); self.value = v; self.fireEvent(BI.SingleSlider.EVENT_CHANGE); } }); this.label = BI.createWidget({ type: "bi.sign_editor", cls: "slider-editor-button", errorText: "", height: c.HEIGHT, width: c.EDITOR_WIDTH, allowBlank: false, validationChecker: function (v) { return self._checkValidation(v); }, quitChecker: function (v) { return self._checkValidation(v); } }); this.label.on(BI.SignEditor.EVENT_CONFIRM, function () { var percent = self._getPercentByValue(this.getValue()); var significantPercent = BI.parseFloat(percent.toFixed(1)); self._setAllPosition(significantPercent); self.fireEvent(BI.SingleSlider.EVENT_CHANGE); }); this._setVisible(false); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.track, width: "100%", height: c.TRACK_HEIGHT }] }], hgap: 7, height: c.TRACK_HEIGHT }, top: 33, left: 0, width: "100%" }, { el: sliderVertical, top: 30, left: 0, width: "100%" }, { el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [this.label] }], rgap: c.EDITOR_WIDTH, height: c.EDITOR_HEIGHT }, top: 0, left: 0, width: "100%" }] }) }, _createTrackWrapper: function () { return BI.createWidget({ type: "bi.absolute", items: [{ el: this.backgroundTrack, width: "100%" }, { el: { type: "bi.vertical", items: [{ type: "bi.absolute", items: [{ el: this.grayTrack, top: 0, left: 0, width: "100%" }, { el: this.blueTrack, top: 0, left: 0, width: "0%" }] }], hgap: 8, height: 8 }, top: 8, left: 0, width: "100%" }] }) }, _checkValidation: function (v) { return !(BI.isNull(v) || v < this.min || v > this.max) }, _setBlueTrack: function (percent) { this.blueTrack.element.css({"width": percent + "%"}); }, _setLabelPosition: function (percent) { this.label.element.css({"left": percent + "%"}); }, _setSliderPosition: function (percent) { this.slider.element.css({"left": percent + "%"}); }, _setAllPosition: function (percent) { this._setSliderPosition(percent); this._setLabelPosition(percent); this._setBlueTrack(percent); }, _setVisible: function (visible) { this.slider.setVisible(visible); this.label.setVisible(visible); }, _getGrayTrackLength: function () { return this.grayTrack.element[0].scrollWidth }, _getValueByPercent: function (percent) { var thousandth = BI.parseInt(percent * 10); return (((this.max - this.min) * thousandth) / 1000 + this.min); }, _getPercentByValue: function (v) { return (v - this.min) * 100 / (this.max - this.min); }, getValue: function () { return this.value; }, setValue: function (v) { var value = BI.parseFloat(v); if ((!isNaN(value))) { if (this._checkValidation(value)) { this.value = value; } if (value > this.max) { this.value = this.max; } if (value < this.min) { this.value = this.min; } } }, setMinAndMax: function (v) { var minNumber = BI.parseFloat(v.min); var maxNumber = BI.parseFloat(v.max); if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) { this.min = minNumber; this.max = maxNumber; } }, reset: function () { this._setVisible(false); this.enable = false; this.value = ""; this.min = 0; this.max = 0; this._setBlueTrack(0); }, populate: function () { if (!isNaN(this.min) && !isNaN(this.max)) { this._setVisible(true); this.enable = true; this.label.setErrorText(BI.i18nText("BI-Please_Enter") + this.min + "-" + this.max + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Basic_Number")); if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) { this.label.setValue(this.value); this._setAllPosition(this._getPercentByValue(this.value)); } else { this.label.setValue(this.max); this._setAllPosition(100); } } } }); BI.SingleSlider.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.single_slider", BI.SingleSlider);/** * Created by zcf on 2016/9/22. */ BI.Slider = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.Slider.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-slider-slider" }); }, _init: function () { BI.extend(BI.Slider.superclass._init.apply(this, arguments)); this.slider = BI.createWidget({ type: "bi.icon_button", cls: "widget-slider-icon", iconWidth: 30, iconHeight: 30, height: 30, width: 30 }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.slider, top: 0, left: -15 }], width: 0, height: 30 }); } }); $.shortcut("bi.single_slider_slider", BI.Slider);/** * @class BI.SingleTreeCombo * @extends BI.Widget */ BI.SingleTreeCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SingleTreeCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-tree-combo", trigger: {}, height: 30, text: "", items: [] }); }, _init: function () { BI.SingleTreeCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget(BI.extend({ type: "bi.single_tree_trigger", text: o.text, height: o.height, items: o.items }, o.trigger)); this.popup = BI.createWidget({ type: "bi.single_tree_popup", items: o.items }); this.combo = BI.createWidget({ type: "bi.combo", element: this, adjustLength: 2, el: this.trigger, popup: { el: this.popup } }); this.combo.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { self.fireEvent(BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW, arguments); }); this.popup.on(BI.SingleTreePopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.SingleTreeCombo.EVENT_CHANGE); }); }, populate: function (items) { this.combo.populate(items); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); } }); BI.SingleTreeCombo.EVENT_CHANGE = "SingleTreeCombo.EVENT_CHANGE"; BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; $.shortcut("bi.single_tree_combo", BI.SingleTreeCombo);/** * @class BI.SingleTreePopup * @extends BI.Pane */ BI.SingleTreePopup = BI.inherit(BI.Pane, { _defaultConfig: function () { return BI.extend(BI.SingleTreePopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-tree-popup", tipText: BI.i18nText("BI-No_Selected_Item"), items: [] }); }, _init: function () { BI.SingleTreePopup.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tree = BI.createWidget({ type: 'bi.level_tree', expander: { isDefaultInit: true }, items: o.items, chooseType: BI.Selection.Single }); BI.createWidget({ type: "bi.vertical", element: this, items: [this.tree] }); this.tree.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.tree.on(BI.LevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.SingleTreePopup.EVENT_CHANGE); }); this.check(); }, getValue: function () { return this.tree.getValue(); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.tree.setValue(v); }, populate: function (items) { BI.SingleTreePopup.superclass.populate.apply(this, arguments); this.tree.populate(items); } }); BI.SingleTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.single_tree_popup", BI.SingleTreePopup);/** * @class BI.SingleTreeTrigger * @extends BI.Trigger */ BI.SingleTreeTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { return BI.extend(BI.SingleTreeTrigger.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-single-tree-trigger", height: 30, text: "", items: [] }); }, _init: function () { BI.SingleTreeTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.select_text_trigger", element: this, text: o.text, items: o.items, height: o.height }); }, _checkTitle: function () { var self = this, val = this.getValue(); BI.any(this.options.items, function (i, item) { if (val.contains(item.value)) { self.trigger.setTitle(item.text || item.value); return true; } }); }, setValue: function (v) { v = BI.isArray(v) ? v : [v]; this.options.value = v; this.trigger.setValue(v); this._checkTitle(); }, getValue: function () { return this.options.value || []; }, populate: function (items) { BI.SingleTreeTrigger.superclass.populate.apply(this, arguments); this.trigger.populate(items); } }); $.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);BI.HorizontalDashLine = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.HorizontalDashLine.superclass._defaultConfig.apply(this, arguments), { baseCls:"bi-svg-line-horizontal", gap:5, line:8, stroke: "#009de3", fill:"white", height:3, width:200 }) }, _init: function () { BI.HorizontalDashLine.superclass._init.apply(this, arguments); var o = this.options; this.svg = BI.createWidget({ type:"bi.svg", element: this, height: o.height, width: o.width }) this.setMove() }, setLength : function (w) { if(w === this.options.width){ return; } BI.HorizontalDashLine.superclass.setWidth.apply(this, arguments); var o = this.options; this.setMove() }, setMove:function() { var o = this.options; this.svg.clear(); this.svg.path(this._createPath(0)).attr({ stroke: o.stroke, fill: o.fill }) }, _createPath : function (startPos) { var o = this.options; var path =""; for(var j = 0; j < o.height; j++) { for(var i = startPos - o.line; i < o.width; i+= o.line) { path +="M" + (i + j)+ ","+ j path +="L" + (i + j + o.line) + "," + j i+= o.gap } } return path; } }) $.shortcut("bi.horizontal_dash_line", BI.HorizontalDashLine);BI.VerticalDashLine = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.VerticalDashLine.superclass._defaultConfig.apply(this, arguments), { baseCls:"bi-svg-line-vertical", gap:5, line:8, stroke: "#009de3", fill:"white", height:200, width:3 }) }, _init: function () { BI.VerticalDashLine.superclass._init.apply(this, arguments); var o = this.options; this.svg = BI.createWidget({ type:"bi.svg", element: this, height: o.height, width: o.width }) this.setMove() }, setLength : function (w) { if(w === this.options.height){ return; } BI.VerticalDashLine.superclass.setHeight.apply(this, arguments); this.setMove() }, setMove:function() { var o = this.options; this.svg.clear(); this.svg.path(this._createPath(0)).attr({ stroke: o.stroke, fill: o.fill }) }, _createPath : function (startPos) { var o = this.options; var path =""; for(var j = 0; j < o.width; j++) { for(var i = startPos - o.line; i < o.height; i+= o.line) { path +="M"+ j + "," + (i + j) path +="L" + j + "," + (i + j + o.line) i+= o.gap } } return path; } }) $.shortcut("bi.vertical_dash_line", BI.VerticalDashLine);BI.TriangleDragButton = BI.inherit(BI.Widget, { _defaultConfig: function() { return BI.extend(BI.TriangleDragButton.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-triangle-drag-button", height : 30, width : 30, lineCount:6, stroke: "#009de3", fill:"white", drag : null }) }, _init : function() { BI.TriangleDragButton.superclass._init.apply(this, arguments); var o = this.options; var svg = BI.createWidget({ type:"bi.svg", element: this, height: o.height, width: o.width }) var path = ""; var h_step = o.height/ o.lineCount; var w_step = o.width/ o.lineCount; for(var i = 0; i < o.lineCount; i++){ path +="M0," +(h_step * (i + 1)); path +="L" + (w_step * (i + 1)) +",0" } svg.path(path).attr({ stroke: o.stroke, fill: o.fill }) this.reInitDrag(); }, reInitDrag : function () { var o = this.options; if(BI.isNotNull(o.drag)) { this.element.draggable(o.drag) } } }); $.shortcut("bi.triangle_drag_button", BI.TriangleDragButton);/** * 可以交换列位置的表格 * * @class BI.SortableTable * @extends BI.Widget */ BI.SortableTable = BI.inherit(BI.Widget, { _const: { perColumnSize: 100, dragButtonWidth: 24, dragButtonHeight: 24, lineCount: 6, lineWidth: 3 }, _defaultConfig: function () { return BI.extend(BI.SortableTable.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-sortable-table", headerRowSize: 30, footerRowSize: 25, rowSize: 25, sortable: true, header: [], items: [] //二维数组 }); }, _init: function () { BI.SortableTable.superclass._init.apply(this, arguments); var self = this, o = this.options; this.insertLine = []; this.table = BI.createWidget({ type: "bi.table_view", isNeedResize: false, isResizeAdapt: false, columnSize: [], headerRowSize: o.headerRowSize, footerRowSize: o.footerRowSize, rowSize: o.rowSize, regionColumnSize: false, header: o.header, items: o.items }); this.table.on(BI.Table.EVENT_TABLE_AFTER_INIT, function () { if(o.sortable === true){ self._initDrag(); self._createDashedLines(); self._createInsertLine(); } self.fireEvent(BI.Table.EVENT_TABLE_AFTER_INIT, arguments); }); this.table.on(BI.Table.EVENT_TABLE_RESIZE, function () { if(o.sortable === true){ self._createDashedLines(); self._createInsertLine(); } self.fireEvent(BI.Table.EVENT_TABLE_RESIZE, arguments); }); this.table.element.mousemove(function(e){ BI.each(self.dragHelpers, function(idx, dragHelper){ var visible = (idx === self._getMouseInColumnIndex(e)); dragHelper.setVisible(visible); BI.each(self.dragHelpersLines[idx], function(id, line){ line.setVisible(visible); }) }) }) this.table.element.hover(function(e){ }, function(e){ BI.each(self.dragHelpers, function(idx, dragHelper){ dragHelper.setVisible(false); BI.each(self.dragHelpersLines[idx], function(id, line){ line.setVisible(false); }) }) }); this.element.droppable({ accept: ".drag-header", drop: function (e, ui) { var absolutePosition = ui.position.left + self.table.getRightHorizontalScroll() + (e.pageX - ui.helper.offset().left); var dropPosition = self._getColumnsLeftBorderDistance(); var insertIndex = self._getNearIndexFromArray(dropPosition, absolutePosition) //这个insertIndex是包含原元素的index //调整item顺序,重新populate var flag = self._exchangeItemsAndHeaderPosition(ui.helper.data("index"), insertIndex) if(flag === true){ BI.nextTick(function(){ self.populate(o.items, o.header); }); self.fireEvent(BI.SortableTable.EVENT_CHANGE, ui.helper.data("index"), insertIndex); } } }); BI.createWidget({ type: "bi.vertical", scrollx: false, element: this, items: [this.table] }); }, /** * 插入到对应列的辅助线 * @private */ _createInsertLine: function(){ var self = this; var dropPosition = this._getColumnsLeftBorderDistance(); var height = this.table.getClientRegionRowSize()[0]; var lineObj = { type: "bi.layout", cls: "insert-help-line", invisible: true }; this.insertLine = [BI.createWidget(lineObj)]; var hearders = this.table.getColumns().header[0]; BI.each(hearders, function(idx, header){ var line = BI.createWidget(BI.extend(lineObj)); self.insertLine.push(line); }); BI.createWidget({ type: "bi.absolute", element: this.table.element, items: BI.map(self.insertLine, function(idx, line){ if(idx === self.insertLine.length - 1){ return { el: line, top: 0, height: height, right: 0 } } return { el: line, top: 0, height: height, left: dropPosition[idx] } }) }) }, _createDashedLines: function(){ var self = this, c = this._const, o = this.options; var RowsSize = this.table.getClientRegionRowSize(); var columnsSizes = this.table.getCalculateColumnSize(); var dropPosition = this._getColumnsLeftBorderDistance(); var len = this.table.getCalculateRegionColumnSize()[0]; this.dragHelpersLines = []; BI.each(this.table.getColumns().header[0], function(idx, header){ self.dragHelpersLines.push([BI.createWidget({ type:"bi.horizontal_dash_line", //上 width: columnsSizes[idx], height: c.lineWidth, invisible: true }),BI.createWidget({ type:"bi.vertical_dash_line", //右 width: c.lineWidth, height: RowsSize[0], invisible: true }),BI.createWidget({ type:"bi.horizontal_dash_line", //下 width: columnsSizes[idx], height: c.lineWidth, invisible: true }),BI.createWidget({ //左 type:"bi.vertical_dash_line", width: c.lineWidth, height: RowsSize[0], invisible: true })]); }); var length = this.dragHelpersLines.length; BI.createWidget({ type: "bi.absolute", element: self.table, items: BI.flatten(BI.map(this.dragHelpersLines, function(idx, children){ return BI.map(children, function(id, child){ var baseObj = { el: child, width: id % 2 === 0 ? columnsSizes[idx] : c.lineWidth, height: id % 2 === 0 ? c.lineWidth : RowsSize[0] } if(id === 0 || id === children.length - 1){ //上和左 return BI.extend({ top: 0, left: dropPosition[idx], }, baseObj) }else{ return BI.extend({ //右和下 bottom: 0, right: idx === length - 1 ? 0 : len - dropPosition[idx + 1], }, baseObj) } }); })) }) }, _initDrag: function(){ var self = this, c = this._const, o = this.options; this.dragHelpers = []; BI.each(this.table.getColumns().header[0], function(idx, header){ var dragButton = BI.createWidget({ type: "bi.triangle_drag_button", cls: "drag-header", width: c.dragButtonWidth, height: c.dragButtonHeight, lineCount: c.lineCount, invisible: true }); BI.createWidget({ type: "bi.absolute", element: header, items: [{ el: dragButton, top: 0, left: 0 }] }) dragButton.element.draggable({ axis: "x", //拖拽路径 revert: false, cursor: BICst.cursorUrl, cursorAt: {left: 5, top: 5}, containment: self.element, //约束拖拽区域 drag: function(e, ui){ self._showInsertHelpLine(e, ui); }, stop: function(){ BI.each(self.insertLine, function(idx, line){ line.setVisible(false); }) }, helper: function () { var RowsSize = self.table.getClientRegionRowSize(); var columnsSizes = self.table.getCalculateColumnSize(); var clone = BI.createWidget({ type: "bi.layout", cls: "sortable_table_drag_clone", data: {index: BI.parseInt(idx)}, width: columnsSizes[idx], height: RowsSize[0] }) clone.element.appendTo(self.element); return clone.element; } }) self.dragHelpers.push(dragButton); }); }, _getMouseInColumnIndex: function(e){ var dropPosition = this._getColumnsLeftBorderDistance(); var columnsSizes = this.table.getCalculateColumnSize(); var tableHeight = this.table.getClientRegionRowSize()[0]; var tableOffsetLeft = e.pageX - this.table.element.offset().left; var tableOffsetTop = this.table.element.offset().top; return BI.find(BI.makeArray(dropPosition.length, null), function(idx){ return !(tableOffsetLeft < dropPosition[idx] || tableOffsetLeft > dropPosition[idx] + columnsSizes[idx] || e.pageY < tableOffsetTop || e.pageY >= tableOffsetTop + tableHeight); }) }, _getColumnsLeftBorderDistance: function(){ var dropPosition = []; var columnSizes = this.table.getCalculateColumnSize(); BI.each(columnSizes, function(idx, columnSize){ if(idx === 0){ dropPosition.push(0) }else{ //+ 1边框偏移值 dropPosition.push(dropPosition[idx - 1] + columnSizes[idx - 1] + 1) } }); return dropPosition; }, _showInsertHelpLine: function(e, ui){ var absolutePosition = ui.position.left + this.table.getRightHorizontalScroll() + (e.pageX - ui.helper.offset().left); var dropPosition = this._getColumnsLeftBorderDistance(); var insertIndex = this._getNearIndexFromArray(dropPosition, absolutePosition); BI.each(this.insertLine, function(idx, line){ line.setVisible(insertIndex === idx); }) BI.each(this.dragHelpers, function(idx, helper){ helper.setVisible(false); }) }, _exchangeItemsAndHeaderPosition: function (sourceIndex, targetIndex) { var o = this.options; if(sourceIndex === targetIndex){ return false; } var header = BI.unzip(o.header); var items = BI.unzip(o.items); var sourceHeader = header[sourceIndex]; var sourceitems = items[sourceIndex]; header.splice(targetIndex, 0, sourceHeader); items.splice(targetIndex, 0, sourceitems); var deleteIndex = (sourceIndex < targetIndex) ? sourceIndex : sourceIndex + 1; BI.removeAt(header, deleteIndex); BI.removeAt(items, deleteIndex); o.header = BI.unzip(header); o.items = BI.unzip(items); return true; }, _getNearIndexFromArray: function (array, v) { var self = this; var index = 0; BI.some(array, function (idx, item) { if (idx === array.length - 1) { index = idx; //如果是最后一列,且鼠标位置超出最后一列的中间位置,表示插入到最后 var len = self.table.getCalculateRegionColumnSize()[0]; var columnSizes = self.table.getCalculateColumnSize(); if(v > len - columnSizes[idx] / 2){ index++; } } else { if (v < array[idx + 1]) { var avg = (item + array[idx + 1]) / 2; index = v < avg ? idx : idx + 1; return true; } } }) return index; }, getColumns: function(){ return this.table.getColumns(); }, setSortable: function(sortable){ this.options.sortable = sortable; }, populate: function (items, headers) { var self = this, o = this.options; o.header = headers; o.items = items; self.table.populate(o.items, o.header); }, destroy: function () { this.table.destroy(); BI.SortableTable.superclass.destroy.apply(this, arguments); } }); BI.SortableTable.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut('bi.sortable_table', BI.SortableTable);/** * 可以单选多选切换的树 * * Created by GUY on 2015/12/21. * @class BI.SwitchTree * @extends BI.Widget */ BI.SwitchTree = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.SwitchTree.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-switch-tree", items: [] }); }, _init: function () { BI.SwitchTree.superclass._init.apply(this, arguments); var self = this, o = this.options; this.tab = BI.createWidget({ type: "bi.tab", element: this, tab: null, defaultShowIndex: BI.SwitchTree.SelectType.SingleSelect, cardCreator: BI.bind(this._createTree, this) }); }, _createTree: function (type) { var self = this, o = this.options; switch (type) { case BI.SwitchTree.SelectType.SingleSelect: this.levelTree = BI.createWidget({ type: "bi.multilayer_single_level_tree", isDefaultInit: true, items: BI.deepClone(o.items) }); this.levelTree.on(BI.LevelTree.EVENT_CHANGE, function () { self.fireEvent(BI.SwitchTree.EVENT_CHANGE, arguments); }); return this.levelTree; case BI.SwitchTree.SelectType.MultiSelect: this.tree = BI.createWidget({ type: "bi.simple_tree", items: this._removeIsParent(BI.deepClone(o.items)) }); this.tree.on(BI.SimpleTreeView.EVENT_CHANGE, function () { self.fireEvent(BI.SwitchTree.EVENT_CHANGE, arguments); }); return this.tree; } }, _removeIsParent: function(items) { BI.each(items, function(i, item) { BI.isNotNull(item.isParent) && delete item.isParent; }); return items; }, switchSelect: function () { switch (this.getSelect()) { case BI.SwitchTree.SelectType.SingleSelect: this.setSelect(BI.SwitchTree.SelectType.MultiSelect); break; case BI.SwitchTree.SelectType.MultiSelect: this.setSelect(BI.SwitchTree.SelectType.SingleSelect); break; } }, setSelect: function (v) { this.tab.setSelect(v); }, getSelect: function () { return this.tab.getSelect(); }, setValue: function (v) { this.storeValue = v; switch (this.getSelect()) { case BI.SwitchTree.SelectType.SingleSelect: this.levelTree.setValue(v); break; case BI.SwitchTree.SelectType.MultiSelect: this.tree.setValue(v); break; } }, getValue: function () { return this.tab.getValue(); }, populate: function (items) { this.options.items = items; if (BI.isNotNull(this.levelTree)) { this.levelTree.populate(BI.deepClone(items)); } if (BI.isNotNull(this.tree)) { this.tree.populate(this._removeIsParent(BI.deepClone(items))); } } }); BI.SwitchTree.EVENT_CHANGE = "SwitchTree.EVENT_CHANGE"; BI.SwitchTree.SelectType = { SingleSelect: BI.Selection.Single, MultiSelect: BI.Selection.Multi }; $.shortcut('bi.switch_tree', BI.SwitchTree); /** * 文本组件中 编辑栏作为trigger * * Created by GameJian on 2016/1/24. */ BI.TextArea = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextArea.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-area" }); }, _init: function () { BI.TextArea.superclass._init.apply(this, arguments); var self = this, o = this.options; this.textarea = BI.createWidget({ type: "bi.textarea_editor", width: "100%", height: "100%" }); this.textarea.on(BI.TextAreaEditor.EVENT_FOCUS, function () { self.combo.showView(); }); this.textarea.on(BI.TextAreaEditor.EVENT_BLUR, function () { if (BI.isEmptyString(this.getValue()) && !self.combo.isViewVisible()) { self._showLabel(); } else { self._showInput(); } self.fireEvent(BI.TextArea.EVENT_VALUE_CHANGE, arguments) }); this.toolbar = BI.createWidget({ type: "bi.text_toolbar" }); this.toolbar.on(BI.TextToolbar.EVENT_CHANGE, function () { var style = this.getValue(); self.textarea.setStyle(style); self.element.css(style); self.fireEvent(BI.TextArea.EVENT_VALUE_CHANGE, arguments); }); this.combo = BI.createWidget({ type: "bi.combo", toggle: false, direction: "top", isNeedAdjustWidth: false, isNeedAdjustHeight: false, adjustLength: 1, el: this.textarea, popup: { el: this.toolbar, width: 253, height: 30, stopPropagation: false } }); this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () { if (BI.isNotEmptyString(self.textarea.getValue())) { self._showInput(); } else { self._showLabel(); } }); this.label = BI.createWidget({ type: "bi.text_button", cls: "text-area-editor-text-button-label", whiteSpace: "normal", text: BI.i18nText("BI-Click_To_Input_Text") }); this.label.on(BI.TextButton.EVENT_CHANGE, function () { self._showInput(); self.textarea.focus(); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.combo, left: 10, right: 10, top: 10, bottom: 10 }, { el: this.label, left: 0, right: 0, top: 0, bottom: 0 }] }); }, _showInput: function () { this.label.setVisible(false); }, _showLabel: function () { this.label.setVisible(true); }, setValue: function (v) { v || (v = {}); if (BI.isNotEmptyString(v.content)) { this._showInput(); } this.textarea.setValue(v.content); this.toolbar.setValue(v.style); this.textarea.setStyle(v.style); this.element.css(v.style); }, getValue: function () { return {style: this.toolbar.getValue(), content: this.textarea.getValue()}; } }); BI.TextArea.EVENT_VALUE_CHANGE = "EVENT_VALUE_CHANGE"; $.shortcut("bi.text_area", BI.TextArea);/** * 对齐方式选择 * * Created by GUY on 2015/11/26. * @class BI.TextToolbarAlignChooser * @extends BI.Widget */ BI.TextToolbarAlignChooser = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextToolbarAlignChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-toolbar-align-chooser", width: 60, height: 20 }); }, _init: function () { BI.TextToolbarAlignChooser.superclass._init.apply(this, arguments); var self = this, o = this.options; this.button_group = BI.createWidget({ type: "bi.button_group", element: this, items: BI.createItems([{ cls: "align-chooser-button text-align-left-font", selected: true, title: BI.i18nText("BI-Word_Align_Left"), value: BI.TextToolbarAlignChooser.TEXT_ALIGN_LEFT }, { cls: "align-chooser-button text-align-center-font", title: BI.i18nText("BI-Word_Align_Middle"), value: BI.TextToolbarAlignChooser.TEXT_ALIGN_CENTER }, { cls: "align-chooser-button text-align-right-font", title: BI.i18nText("BI-Word_Align_Right"), value: BI.TextToolbarAlignChooser.TEXT_ALIGN_RIGHT }], { type: "bi.icon_button", height: o.height }), layouts: [{ type: "bi.center" }] }); this.button_group.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); this.button_group.on(BI.ButtonGroup.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbarAlignChooser.EVENT_CHANGE, arguments); }); }, setValue: function (v) { this.button_group.setValue(v); }, getValue: function () { return this.button_group.getValue()[0]; } }); BI.extend(BI.TextToolbarAlignChooser, { TEXT_ALIGN_LEFT: "left", TEXT_ALIGN_CENTER: "center", TEXT_ALIGN_RIGHT: "right" }); BI.TextToolbarAlignChooser.EVENT_CHANGE = "BI.TextToolbarAlignChooser.EVENT_CHANGE"; $.shortcut('bi.text_toolbar_align_chooser', BI.TextToolbarAlignChooser);/** * 颜色选择trigger * * Created by GUY on 2015/11/26. * @class BI.TextToolbarBackgroundChooserTrigger * @extends BI.Widget */ BI.TextToolbarBackgroundChooserTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { var conf = BI.TextToolbarBackgroundChooserTrigger.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-toolbar-background-chooser-trigger", width: 20, height: 20 }); }, _init: function () { BI.TextToolbarBackgroundChooserTrigger.superclass._init.apply(this, arguments); this.font = BI.createWidget({ type: "bi.icon_button", cls: "text-background-font" }); this.underline = BI.createWidget({ type: "bi.icon_button", cls: "text-color-underline-font" }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.font, top: 3, left: 2 }, { el: this.underline, top: 9, left: 2 }] }) }, setValue: function (color) { this.underline.element.css("color", color); }, getValue: function () { return this.font.element.css("color"); } }); $.shortcut('bi.text_toolbar_background_chooser_trigger', BI.TextToolbarBackgroundChooserTrigger);/** * 颜色选择trigger * * Created by GUY on 2015/11/26. * @class BI.TextToolbarColorChooserTrigger * @extends BI.Widget */ BI.TextToolbarColorChooserTrigger = BI.inherit(BI.Trigger, { _defaultConfig: function () { var conf = BI.TextToolbarColorChooserTrigger.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-toolbar-color-chooser-trigger", width: 20, height: 20 }); }, _init: function () { BI.TextToolbarColorChooserTrigger.superclass._init.apply(this, arguments); this.font = BI.createWidget({ type: "bi.icon_button", cls: "text-color-font" }); this.underline = BI.createWidget({ type: "bi.icon_button", cls: "text-color-underline-font" }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.font, top: 4, left: 2 },{ el: this.underline, top: 9, left: 2 }] }) }, setValue: function (color) { this.underline.element.css("color", color); }, getValue: function () { return this.font.element.css("color"); } }); $.shortcut('bi.text_toolbar_color_chooser_trigger', BI.TextToolbarColorChooserTrigger);/** * 字体大小选择 * * Created by GUY on 2015/11/26. * @class BI.TextToolbarSizeChooser * @extends BI.Widget */ BI.TextToolbarSizeChooser = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextToolbarSizeChooser.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-toolbar-size-chooser", width: 50, height: 20 }); }, _items: [{ value: 12 }, { value: 14, selected: true }, { value: 16 }, { value: 18 }, { value: 20 }, { value: 22 }, { value: 24 }, { value: 26 }, { value: 28 }, { value: 30 }, { value: 32 }, { value: 34 }, { value: 36 }, { value: 38 }, { value: 40 }, { value: 64 }, { value: 128 }], _init: function () { BI.TextToolbarSizeChooser.superclass._init.apply(this, arguments); var self = this, o = this.options; this.trigger = BI.createWidget({ type: "bi.editor_trigger", cls: "text-toolbar-size-chooser-editor-trigger", height: o.height, triggerWidth: 12, validationChecker: function (size) { return BI.isInteger(size) && size > 0; }, value: 14 }); this.trigger.on(BI.EditorTrigger.EVENT_CHANGE, function () { self.setValue(BI.parseInt(this.getValue())); self.fireEvent(BI.TextToolbarSizeChooser.EVENT_CHANGE, arguments); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, el: this.trigger, adjustLength: 1, popup: { maxWidth: o.width, minWidth: o.width, el: { type: "bi.button_group", items: BI.createItems(this._items, { type: "bi.single_select_item" }), layouts: [{ type: "bi.vertical" }] } } }); this.combo.on(BI.Combo.EVENT_CHANGE, function () { this.hideView(); self.fireEvent(BI.TextToolbarSizeChooser.EVENT_CHANGE, arguments); }) }, setValue: function (v) { this.combo.setValue(v); }, getValue: function () { return BI.parseInt(this.trigger.getValue()); } }); BI.TextToolbarSizeChooser.EVENT_CHANGE = "BI.TextToolbarSizeChooser.EVENT_CHANGE"; $.shortcut('bi.text_toolbar_size_chooser', BI.TextToolbarSizeChooser);/** * 颜色选择 * * Created by GUY on 2015/11/26. * @class BI.TextToolbar * @extends BI.Widget */ BI.TextToolbar = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TextToolbar.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-text-toolbar", width: 253, height: 28 }); }, _init: function () { BI.TextToolbar.superclass._init.apply(this, arguments); var self = this, o = this.options; this.size = BI.createWidget({ type: "bi.text_toolbar_size_chooser", cls: "text-toolbar-size-chooser-trigger", title: BI.i18nText("BI-Font_Size") }); this.size.on(BI.TextToolbarSizeChooser.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.bold = BI.createWidget({ type: "bi.icon_button", title: BI.i18nText("BI-Basic_Bold"), height: 20, width: 20, cls: "text-toolbar-button bi-list-item-active text-bold-font" }); this.bold.on(BI.IconButton.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.italic = BI.createWidget({ type: "bi.icon_button", title: BI.i18nText("BI-Basic_Italic"), height: 20, width: 20, cls: "text-toolbar-button bi-list-item-active text-italic-font" }); this.italic.on(BI.IconButton.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.underline = BI.createWidget({ type: "bi.icon_button", title: BI.i18nText("BI-Underline"), height: 20, width: 20, cls: "text-toolbar-button bi-list-item-active text-underline-font" }); this.underline.on(BI.IconButton.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.colorchooser = BI.createWidget({ type: "bi.color_chooser", el: { type: "bi.text_toolbar_color_chooser_trigger", title: BI.i18nText("BI-Font_Colour"), cls: "text-toolbar-button" } }); this.colorchooser.on(BI.ColorChooser.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.backgroundchooser = BI.createWidget({ type: "bi.color_chooser", el: { type: "bi.text_toolbar_background_chooser_trigger", title: BI.i18nText("BI-Widget_Background_Colour"), cls: "text-toolbar-button" } }); this.backgroundchooser.on(BI.ColorChooser.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); this.alignchooser = BI.createWidget({ type: "bi.text_toolbar_align_chooser", cls: "text-toolbar-button" }); this.alignchooser.on(BI.TextToolbarAlignChooser.EVENT_CHANGE, function () { self.fireEvent(BI.TextToolbar.EVENT_CHANGE, arguments); }); BI.createWidget({ type: "bi.left", element: this, items: [this.size, this.bold, this.italic, this.underline, this.colorchooser, this.backgroundchooser, this.alignchooser], hgap: 3, vgap: 3 }) }, isColorChooserVisible: function () { return this.colorchooser.isViewVisible(); }, isBackgroundChooserVisible: function () { return this.backgroundchooser.isViewVisible(); }, setValue: function (v) { v || (v = {}); this.size.setValue(v["fontSize"] || 14); this.bold.setSelected(v["fontWeight"] === "bold"); this.italic.setSelected(v["fontStyle"] === "italic"); this.underline.setSelected(v["textDecoration"] === "underline"); this.colorchooser.setValue(v["color"] || "#000000"); this.backgroundchooser.setValue(v["backgroundColor"] || "#ffffff"); this.alignchooser.setValue(v["textAlign"] || "left"); }, getValue: function () { return { "fontSize": this.size.getValue(), "fontWeight": this.bold.isSelected() ? "bold" : "normal", "fontStyle": this.italic.isSelected() ? "italic" : "normal", "textDecoration": this.underline.isSelected() ? "underline" : "initial", "color": this.colorchooser.getValue(), "backgroundColor": this.backgroundchooser.getValue(), "textAlign": this.alignchooser.getValue() } } }); BI.TextToolbar.EVENT_CHANGE = "BI.TextToolbar.EVENT_CHANGE"; $.shortcut('bi.text_toolbar', BI.TextToolbar);/** * Created by Baron on 2015/10/19. */ BI.TimeInterval = BI.inherit(BI.Single, { constants: { height: 25, width: 25, lgap: 15, offset: -15, timeErrorCls: "time-error", DATE_MIN_VALUE: "1900-01-01", DATE_MAX_VALUE: "2099-12-31" }, _defaultConfig: function () { var conf = BI.TimeInterval.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { extraCls: "bi-time-interval" }) }, _init: function () { var self = this; BI.TimeInterval.superclass._init.apply(this, arguments); this.left = this._createCombo(); this.right = this._createCombo(); this.label = BI.createWidget({ type: 'bi.label', height: this.constants.height, width: this.constants.width, text: "-" }); BI.createWidget({ element: self, type: "bi.center", hgap: 15, height: this.constants.height, items: [{ type: "bi.absolute", items: [{ el: self.left, left: this.constants.offset, right: 0, top: 0, bottom: 0 }] }, { type: "bi.absolute", items: [{ el: self.right, left: 0, right: this.constants.offset, top: 0, bottom: 0 }] }] }); BI.createWidget({ type: "bi.horizontal_auto", element: this, items: [ self.label ] }); }, _createCombo: function () { var self = this; var combo = BI.createWidget({ type: 'bi.multidate_combo' }); combo.on(BI.MultiDateCombo.EVENT_ERROR, function () { self._clearTitle(); self.element.removeClass(self.constants.timeErrorCls); self.fireEvent(BI.TimeInterval.EVENT_ERROR); }); combo.on(BI.MultiDateCombo.EVENT_VALID, function(){ BI.Bubbles.hide("error"); var smallDate = self.left.getKey(), bigDate = self.right.getKey(); if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) { self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")); self.element.addClass(self.constants.timeErrorCls); BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, { offsetStyle: "center" }); self.fireEvent(BI.TimeInterval.EVENT_ERROR); } else { self._clearTitle(); self.element.removeClass(self.constants.timeErrorCls); } }); combo.on(BI.MultiDateCombo.EVENT_FOCUS, function(){ BI.Bubbles.hide("error"); var smallDate = self.left.getKey(), bigDate = self.right.getKey(); if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) { self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")); self.element.addClass(self.constants.timeErrorCls); BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, { offsetStyle: "center" }); self.fireEvent(BI.TimeInterval.EVENT_ERROR); } else { self._clearTitle(); self.element.removeClass(self.constants.timeErrorCls); } }); combo.on(BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW, function () { self.left.hidePopupView(); self.right.hidePopupView(); }); //combo.on(BI.MultiDateCombo.EVENT_CHANGE, function () { // BI.Bubbles.hide("error"); // var smallDate = self.left.getKey(), bigDate = self.right.getKey(); // if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) { // self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")); // self.element.addClass(self.constants.timeErrorCls); // BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, { // offsetStyle: "center" // }); // self.fireEvent(BI.TimeInterval.EVENT_ERROR); // } else { // self._clearTitle(); // self.element.removeClass(self.constants.timeErrorCls); // } //}); combo.on(BI.MultiDateCombo.EVENT_CONFIRM, function(){ BI.Bubbles.hide("error"); var smallDate = self.left.getKey(), bigDate = self.right.getKey(); if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) { self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")); self.element.addClass(self.constants.timeErrorCls); self.fireEvent(BI.TimeInterval.EVENT_ERROR); }else{ self._clearTitle(); self.element.removeClass(self.constants.timeErrorCls); self.fireEvent(BI.TimeInterval.EVENT_CHANGE); } }); return combo; }, _dateCheck: function (date) { return Date.parseDateTime(date, "%Y-%x-%d").print("%Y-%x-%d") == date || Date.parseDateTime(date, "%Y-%X-%d").print("%Y-%X-%d") == date || Date.parseDateTime(date, "%Y-%x-%e").print("%Y-%x-%e") == date || Date.parseDateTime(date, "%Y-%X-%e").print("%Y-%X-%e") == date; }, _checkVoid: function (obj) { return !Date.checkVoid(obj.year, obj.month, obj.day, this.constants.DATE_MIN_VALUE, this.constants.DATE_MAX_VALUE)[0]; }, _check: function (smallDate, bigDate) { var smallObj = smallDate.match(/\d+/g), bigObj = bigDate.match(/\d+/g); return this._dateCheck(smallDate) && Date.checkLegal(smallDate) && this._checkVoid({ year: smallObj[0], month: smallObj[1], day: smallObj[2] }) && this._dateCheck(bigDate) && Date.checkLegal(bigDate) && this._checkVoid({ year: bigObj[0], month: bigObj[1], day: bigObj[2] }); }, _compare: function (smallDate, bigDate) { smallDate = Date.parseDateTime(smallDate, "%Y-%X-%d").print("%Y-%X-%d"); bigDate = Date.parseDateTime(bigDate, "%Y-%X-%d").print("%Y-%X-%d"); return BI.isNotNull(smallDate) && BI.isNotNull(bigDate) && smallDate > bigDate; }, _setTitle: function (v) { this.left.setTitle(v); this.right.setTitle(v); this.label.setTitle(v); }, _clearTitle: function () { this.left.setTitle(""); this.right.setTitle(""); this.label.setTitle(""); }, setValue: function (date) { date = date || {}; this.left.setValue(date.start); this.right.setValue(date.end); }, getValue: function () { return {start: this.left.getValue(), end: this.right.getValue()}; } }); BI.TimeInterval.EVENT_VALID = "EVENT_VALID"; BI.TimeInterval.EVENT_ERROR = "EVENT_ERROR"; BI.TimeInterval.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.time_interval", BI.TimeInterval);/** * Created by Young's on 2016/4/22. */ BI.DayTimeSetting = BI.inherit(BI.Widget, { _defaultConfig: function(){ return BI.extend(BI.DayTimeSetting.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-time-setting-day", day: 1 }) }, _init: function(){ BI.DayTimeSetting.superclass._init.apply(this, arguments); var self = this, o = this.options; var decrease = BI.createWidget({ type: "bi.text_button", cls: "operator-button", text: "-", height: 28, width: 28 }); decrease.on(BI.Button.EVENT_CHANGE, function(){ var day = BI.parseInt(self.day.getValue()); if(day === 1) { day = 31; } else { day --; } self.day.setValue(day); self.fireEvent(BI.DayTimeSetting.EVENT_CHANGE); }); var increase = BI.createWidget({ type: "bi.text_button", cls: "operator-button", text: "+", height: 28, width: 28 }); increase.on(BI.Button.EVENT_CHANGE, function(){ var day = BI.parseInt(self.day.getValue()); if(day === 31) { day = 1; } else { day ++; } self.day.setValue(day); self.fireEvent(BI.DayTimeSetting.EVENT_CHANGE); }); this.day = BI.createWidget({ type: "bi.label", value: o.day, height: 30, width: 40 }); BI.createWidget({ type: "bi.left", element: this, items: [decrease, this.day, increase, { type: "bi.label", text: BI.i18nText("BI-Day_Ri"), height: 30, width: 20 }], height: 30 }) }, getValue: function(){ return BI.parseInt(this.day.getValue()); }, setValue: function(v) { this.day.setValue(v); } }); BI.DayTimeSetting.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.day_time_setting", BI.DayTimeSetting);/** * Created by Young's on 2016/4/22. */ BI.HourTimeSetting = BI.inherit(BI.Widget, { _defaultConfig: function(){ return BI.extend(BI.HourTimeSetting.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-time-setting-hour", hour: 0 }) }, _init: function(){ BI.HourTimeSetting.superclass._init.apply(this, arguments); var self = this, o = this.options; var decrease = BI.createWidget({ type: "bi.text_button", cls: "operator-button", text: "-", height: 28, width: 28 }); decrease.on(BI.Button.EVENT_CHANGE, function(){ var hour = BI.parseInt(self.hour.getValue()); if(hour === 0) { hour = 23; } else { hour --; } self.hour.setValue(hour); self.fireEvent(BI.HourTimeSetting.EVENT_CHANGE); }); var increase = BI.createWidget({ type: "bi.text_button", cls: "operator-button", text: "+", height: 28, width: 28 }); increase.on(BI.Button.EVENT_CHANGE, function(){ var hour = BI.parseInt(self.hour.getValue()); hour === 23 ? (hour = 0) : (hour ++); self.hour.setValue(hour); self.fireEvent(BI.HourTimeSetting.EVENT_CHANGE); }); this.hour = BI.createWidget({ type: "bi.label", value: o.hour, height: 30, width: 40 }); BI.createWidget({ type: "bi.left", element: this, items: [decrease, this.hour, increase, { type: "bi.label", text: BI.i18nText("BI-Hour_Dian"), height: 30, width: 20 }], height: 30 }) }, getValue: function(){ return BI.parseInt(this.hour.getValue()); }, setValue: function(v) { this.hour.setValue(v); } }); BI.HourTimeSetting.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.hour_time_setting", BI.HourTimeSetting);BI.TreeLabel = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.TreeLabel.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-tree-label", itemsCreator: BI.emptyFn, titles: [], items: [] }) }, _init: function () { BI.TreeLabel.superclass._init.apply(this, arguments); var self = this, o = this.options; this.titles = o.titles; this.items = o.items; this.view = BI.createWidget({ type: "bi.tree_label_view", element: this, titles: o.titles, items: o.items }); this.view.on(BI.TreeLabelView.EVENT_CHANGE, function (floors) { var op = {}; if (floors !== self.view.getMaxFloor() - 1) { op.floors = floors; op.selectedValues = self.getValue(); self._itemsCreator(op); } self.fireEvent(BI.TreeLabel.EVENT_CHANGE, arguments); }); }, _itemsCreator: function (options) { var self = this, o = this.options; o.itemsCreator(options, function (data) { self.populate(data); }) }, populate: function (v) { this.view.populate(v); }, getValue: function () { return this.view.getValue(); } }); BI.TreeLabel.EVENT_CHANGE = "BI.TreeLabel.EVENT_CHANGE"; $.shortcut('bi.tree_label', BI.TreeLabel);BI.TreeLabelView = BI.inherit(BI.Widget, { _constant: { LIST_LABEL_HEIGHT: 40, DEFAULT_LEFT_GAP: 5 }, _defaultConfig: function () { return BI.extend(BI.TreeLabelView.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-tree-label-view", titleWidth: 60, titles: [], items: [] }) }, _init: function () { BI.TreeLabelView.superclass._init.apply(this, arguments); this.items = []; this._initView(); }, _initView: function () { var self = this, o = this.options; this.title = BI.createWidget({ type: "bi.button_group", height: this._constant.LIST_LABEL_HEIGHT * o.titles.length, layouts: [{ type: "bi.vertical" }] }); this.right = BI.createWidget({ type: "bi.button_group", cls: "list-label-group", height: this._constant.LIST_LABEL_HEIGHT * this.items.length, layouts: [{ type: "bi.horizontal" }] }); this._setTitles(o.titles); this._setItems(o.items); BI.createWidget({ type: "bi.absolute", items: [{ el: this.title, left: 0, right: 0, top: 0, bottom: 0, width: 60 }, { el: this.right, left: 65, right: 0, top: 0, bottom: 0 }], element: this }); }, _setItems: function (items) { var self = this; var length = this.right.getAllButtons().length; var deletes = []; for (var i = 0; i < length; i++) { deletes.push(i); } this.right.removeItemAt(deletes); self.items = []; BI.each(items, function (idx, values) { var labelItems = []; BI.each(values, function (idx, value) { labelItems.push({ title: value, text: value, value: value }) }); var temp = BI.createWidget({ type: "bi.list_label", items: labelItems, showTitle: false }); temp.on(BI.ListLabel.EVENT_CHANGE, function () { self.fireEvent(BI.TreeLabelView.EVENT_CHANGE, idx); }); self.items.push(temp); }); var temp = BI.createWidget({ type: "bi.default", items: self.items }); this.right.addItems([temp]); this.right.setHeight(self.items.length * this._constant.LIST_LABEL_HEIGHT); }, _setTitles: function (titles) { var length = this.title.getAllButtons().length; var deletes = [], titleItems = []; for (var i = 0; i < length; i++) { deletes.push(i); } BI.each(titles, function (idx, title) { titleItems.push({ text: title, value: title, title: title }); }); this.title.removeItemAt(deletes); this.title.addItems(BI.createItems(titleItems, { type: "bi.label", height: this._constant.LIST_LABEL_HEIGHT, width: this.options.titleWidth })); this.title.setHeight(titles.length * this._constant.LIST_LABEL_HEIGHT); }, _setValue: function (values) { BI.each(this.items, function (idx, item) { values[idx] && item.setValue(values[idx]); }) }, populate: function(v) { v.titles && this._setTitles(v.titles); v.items && this._setItems(v.items); v.values && this._setValue(v.values); }, getMaxFloor: function () { return this.items.length || 0; }, getValue: function () { var result = []; BI.each(this.items, function (idx, item) { result.push(item.getValue()); }); return result; } }); BI.TreeLabelView.EVENT_CHANGE = "BI.TreeLabelView.EVENT_CHANGE"; $.shortcut('bi.tree_label_view', BI.TreeLabelView);/** * Created by Young's on 2016/4/21. */ BI.UploadFileWithProgress = BI.inherit(BI.Widget, { _constants: { UPLOAD_PROGRESS: "__upload_progress__" }, _defaultConfig: function () { return BI.extend(BI.UploadFileWithProgress.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-upload-file-with-progress", progressEL: BICst.BODY_ELEMENT, multiple: false, maxSize: 1024 * 1024, accept: "", url: "" }) }, _init: function () { BI.UploadFileWithProgress.superclass._init.apply(this, arguments); var self = this, o = this.options; this.file = BI.createWidget({ type: "bi.multifile_editor", width: "100%", height: "100%", name: o.name, url: o.url, multiple: o.multiple, accept: o.accept, maxSize: o.maxSize }); this.file.on(BI.MultifileEditor.EVENT_CHANGE, function () { self.fireEvent(BI.UploadFileWithProgress.EVENT_CHANGE, arguments); }); this.file.on(BI.MultifileEditor.EVENT_UPLOADSTART, function () { self.progressBar = BI.createWidget({ type: "bi.progress_bar", width: 300 }); BI.createWidget({ type: "bi.center_adapt", element: BI.Layers.create(self._constants.UPLOAD_PROGRESS, self.options.progressEL), items: [self.progressBar], width: "100%", height: "100%" }); BI.Layers.show(self._constants.UPLOAD_PROGRESS); self.fireEvent(BI.UploadFileWithProgress.EVENT_UPLOADSTART, arguments); }); this.file.on(BI.MultifileEditor.EVENT_ERROR, function () { BI.Layers.remove(self._constants.UPLOAD_PROGRESS); self.fireEvent(BI.UploadFileWithProgress.EVENT_ERROR, arguments); }); this.file.on(BI.MultifileEditor.EVENT_PROGRESS, function (data) { var process = Math.ceil(data.loaded / data.total * 100); self.progressBar.setValue(process > 100 ? 100 : process); self.fireEvent(BI.UploadFileWithProgress.EVENT_PROGRESS, arguments); }); this.file.on(BI.MultifileEditor.EVENT_UPLOADED, function () { BI.Layers.remove(self._constants.UPLOAD_PROGRESS); self.fireEvent(BI.UploadFileWithProgress.EVENT_UPLOADED, arguments); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: { type: "bi.adaptive", scrollable: false, items: [this.file] }, top: 0, right: 0, left: 0, bottom: 0 }] }); }, select: function () { this.file.select(); }, getValue: function () { return this.file.getValue(); }, upload: function () { this.file.upload(); }, reset: function () { this.file.reset(); }, setEnable: function (enable) { BI.MultiFile.superclass.setEnable.apply(this, arguments); this.file.setEnable(enable); } }); BI.UploadFileWithProgress.EVENT_CHANGE = "EVENT_CHANGE"; BI.UploadFileWithProgress.EVENT_UPLOADSTART = "EVENT_UPLOADSTART"; BI.UploadFileWithProgress.EVENT_ERROR = "EVENT_ERROR"; BI.UploadFileWithProgress.EVENT_PROGRESS = "EVENT_PROGRESS"; BI.UploadFileWithProgress.EVENT_UPLOADED = "EVENT_UPLOADED"; $.shortcut("bi.upload_file_with_progress", BI.UploadFileWithProgress);/** * web组件 * Created by GameJian on 2016/3/1. */ BI.WebPage = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.WebPage.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-web-page" }) }, _init: function () { BI.WebPage.superclass._init.apply(this, arguments); var self = this, o = this.options; this.iframe = BI.createWidget({ type: "bi.iframe" }); this.label = BI.createWidget({ type: "bi.label", cls: "web-page-text-button-label", whiteSpace: "normal", text: BI.i18nText("BI-Not_Add_Url") }); this.del = BI.createWidget({ type: "bi.bubble_combo", el: { type: "bi.icon_button", cls: "web-page-button img-shutdown-font", title: BI.i18nText("BI-Basic_Delete"), height: 24, width: 24 }, popup: { type: "bi.bubble_bar_popup_view", buttons: [{ value: BI.i18nText(BI.i18nText("BI-Basic_Sure")), handler: function () { self.fireEvent(BI.WebPage.EVENT_DESTROY) } }, { value: BI.i18nText("BI-Basic_Cancel"), level: "ignore", handler: function () { self.del.hideView(); } }], el: { type: "bi.vertical_adapt", items: [{ type: "bi.label", text: BI.i18nText("BI-Sure_Delete_Current_Component"), cls: "web-page-delete-label", textAlign: "left", width: 300 }], width: 300, height: 100, hgap: 20 }, maxHeight: 140, minWidth: 340 }, invisible: true, stopPropagation: true }); this.href = BI.createWidget({ type: "bi.image_button_href", cls: "web-page-button" }); this.href.on(BI.ImageButtonHref.EVENT_CHANGE, function () { var url = this.getValue(); self.setValue(this.getValue()); self._checkUrl(url); self.fireEvent(BI.WebPage.EVENT_VALUE_CHANGE); }); BI.createWidget({ type: "bi.absolute", element: this, items: [{ el: this.iframe }, { el: this.del, right: 4, top: 8 }, { el: this.href, right: 36, top: 8 }, { el: this.label, top: 32, left: 0, bottom: 0, right: 0 }] }); this.setToolbarVisible(false); this._showLabel(); }, _checkUrl: function(url){ BI.Bubbles.hide(this.getName()); if(BI.isEmptyString(url)){ BI.Bubbles.show(this.getName(), BI.i18nText("BI-Click_To_Add_Hyperlink"), this.href, { offsetStyle: "left" }); } }, _hideLabel: function () { this.label.invisible() }, isSelected: function () { return this.href.isSelected(); }, _showLabel: function () { this.label.visible() }, setToolbarVisible: function (v) { this.href.setVisible(v); this.del.setVisible(v); }, getValue: function () { return this.href.getValue() }, setValue: function (url) { var self = this; if (BI.isNotEmptyString(url)) { self._hideLabel(); } else { this.setToolbarVisible(true); this.href.showView(); } this.href.setValue(url); this.iframe.setSrc(BI.Func.formatAddress(url)) } }); BI.WebPage.EVENT_DESTROY = "EVENT_DESTROY"; BI.WebPage.EVENT_VALUE_CHANGE = "EVENT_VALUE_CHANGE"; $.shortcut("bi.web_page", BI.WebPage);/** * 年份下拉框 * * Created by GUY on 2015/8/28. * @class BI.YearCombo * @extends BI.Widget */ BI.YearCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-combo", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 height: 25 }); }, _init: function () { BI.YearCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.storeValue = ""; this.trigger = BI.createWidget({ type: "bi.year_trigger", min: o.min, max: o.max }); this.trigger.on(BI.YearTrigger.EVENT_FOCUS, function () { self.storeValue = this.getKey(); }); this.trigger.on(BI.YearTrigger.EVENT_START, function () { self.combo.isViewVisible() && self.combo.hideView(); }); this.trigger.on(BI.YearTrigger.EVENT_STOP, function () { self.combo.showView(); }); this.trigger.on(BI.YearTrigger.EVENT_ERROR, function () { self.combo.isViewVisible() && self.combo.hideView(); }); this.trigger.on(BI.YearTrigger.EVENT_CONFIRM, function () { if(self.combo.isViewVisible()) { return; } if (this.getKey() && this.getKey() !== self.storeValue) { self.setValue(this.getKey()); } else if (!this.getKey()) { self.setValue(); } self.fireEvent(BI.YearCombo.EVENT_CONFIRM); }); this.popup = BI.createWidget({ type: "bi.year_popup", min: o.min, max: o.max }); this.popup.on(BI.YearPopup.EVENT_CHANGE, function () { self.setValue(self.popup.getValue()); self.combo.hideView(); self.fireEvent(BI.YearCombo.EVENT_CONFIRM); }); this.combo = BI.createWidget({ type: "bi.combo", element: this, isNeedAdjustHeight: false, isNeedAdjustWidth: false, el: this.trigger, popup: { minWidth: 85, stopPropagation: false, el: this.popup } }); this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { var value = self.trigger.getKey(); if (BI.isNotNull(value)) { self.popup.setValue(value); } else if(!value && value !== self.storeValue){ self.popup.setValue(self.storeValue); }else { self.setValue(); } }); }, setValue: function (v) { this.trigger.setValue(v); this.popup.setValue(v); }, getValue: function () { return this.popup.getValue(); } }); BI.YearCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.year_combo', BI.YearCombo);/** * 年份展示面板 * * Created by GUY on 2015/9/2. * @class BI.YearPopup * @extends BI.Trigger */ BI.YearPopup = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearPopup.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-popup", min: '1900-01-01', //最小日期 max: '2099-12-31' //最大日期 }); }, _createYearCalendar: function (v) { var o = this.options, y = this._year; var calendar = BI.createWidget({ type: "bi.year_calendar", min: o.min, max: o.max, logic: { dynamic: true }, year: y + v * 12 }); calendar.setValue(this._year); return calendar; }, _init: function () { BI.YearPopup.superclass._init.apply(this, arguments); var self = this; this.selectedYear = this._year = new Date().getFullYear(); var backBtn = BI.createWidget({ type: "bi.icon_button", cls: "pre-page-h-font", width: 25, height: 25, value: -1 }); var preBtn = BI.createWidget({ type: "bi.icon_button", cls: "next-page-h-font", width: 25, height: 25, value: 1 }); this.navigation = BI.createWidget({ type: "bi.navigation", element: this, logic: { dynamic: true }, tab: { cls: "year-popup-navigation", height: 25, items: [backBtn, preBtn] }, cardCreator: BI.bind(this._createYearCalendar, this), afterCardShow: function () { this.setValue(self.selectedYear); var calendar = this.getSelectedCard(); backBtn.setEnable(!calendar.isFrontYear()); preBtn.setEnable(!calendar.isFinalYear()); } }); this.navigation.on(BI.Navigation.EVENT_CHANGE, function () { self.selectedYear = this.getValue(); self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); self.fireEvent(BI.YearPopup.EVENT_CHANGE, self.selectedYear); }); }, getValue: function () { return this.selectedYear; }, setValue: function (v) { var o = this.options; if (Date.checkVoid(v, 1, 1, o.min, o.max)[0]) { v = new Date().getFullYear(); this.selectedYear = ""; this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)); this.navigation.setValue(""); } else { this.selectedYear = v; this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)); this.navigation.setValue(v); } } }); BI.YearPopup.EVENT_CHANGE = "EVENT_CHANGE"; $.shortcut("bi.year_popup", BI.YearPopup);/** * 年份trigger * * Created by GUY on 2015/8/21. * @class BI.YearTrigger * @extends BI.Trigger */ BI.YearTrigger = BI.inherit(BI.Trigger, { _const: { hgap: 4, vgap: 2, triggerWidth: 25, errorText: BI.i18nText("BI-Please_Input_Integer"), errorTextInvalid: BI.i18nText("BI-Year_Trigger_Invalid_Text") }, _defaultConfig: function () { return BI.extend(BI.YearTrigger.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-year-trigger", min: '1900-01-01', //最小日期 max: '2099-12-31', //最大日期 height: 25 }); }, _init: function () { BI.YearTrigger.superclass._init.apply(this, arguments); var self = this, o = this.options, c = this._const; this.editor = BI.createWidget({ type: "bi.sign_editor", height: o.height, validationChecker: function (v) { self.editor.setErrorText(!BI.isPositiveInteger(v) ? c.errorText : c.errorTextInvalid); return v === "" || (BI.isPositiveInteger(v) && !Date.checkVoid(v, 1, 1, o.min, o.max)[0]); }, quitChecker: function (v) { return false; }, hgap: c.hgap, vgap: c.vgap, allowBlank: true, errorText: c.errorText }) this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { self.fireEvent(BI.YearTrigger.EVENT_FOCUS); }); this.editor.on(BI.SignEditor.EVENT_STOP, function () { self.fireEvent(BI.YearTrigger.EVENT_STOP); }); this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { var value = self.editor.getValue(); if (BI.isNotNull(value)) { self.editor.setValue(value); self.editor.setTitle(value); } self.fireEvent(BI.YearTrigger.EVENT_CONFIRM); }) this.editor.on(BI.SignEditor.EVENT_SPACE, function () { if (self.editor.isValid()) { self.editor.blur(); } }); this.editor.on(BI.SignEditor.EVENT_START, function () { self.fireEvent(BI.YearTrigger.EVENT_START); }); this.editor.on(BI.SignEditor.EVENT_ERROR, function () { self.fireEvent(BI.YearTrigger.EVENT_ERROR); }); BI.createWidget({ element: this, type: 'bi.htape', items: [ { el: this.editor }, { el: { type: "bi.text_button", baseCls: "bi-trigger-year-text", text: BI.i18nText("BI-Multi_Date_Year"), width: c.triggerWidth }, width: c.triggerWidth }, { el: { type: "bi.trigger_icon_button", width: c.triggerWidth }, width: c.triggerWidth } ] }); }, setValue: function (v) { this.editor.setState(v); this.editor.setValue(v); this.editor.setTitle(v); }, getKey: function () { return this.editor.getValue() | 0; } }); BI.YearTrigger.EVENT_FOCUS = "EVENT_FOCUS"; BI.YearTrigger.EVENT_ERROR = "EVENT_ERROR"; BI.YearTrigger.EVENT_START = "EVENT_START"; BI.YearTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.YearTrigger.EVENT_STOP = "EVENT_STOP"; $.shortcut("bi.year_trigger", BI.YearTrigger);/** * 年份 + 月份下拉框 * * @class BI.YearMonthCombo * @extends BI.Widget */ BI.YearMonthCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearMonthCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-month-combo", height: 25 }); }, _init: function () { BI.YearMonthCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.year = BI.createWidget({ type: "bi.year_combo" }); this.month = BI.createWidget({ type: "bi.month_combo" }); this.year.on(BI.YearCombo.EVENT_CONFIRM, function(){ self.fireEvent(BI.YearMonthCombo.EVENT_CONFIRM); }); this.month.on(BI.MonthCombo.EVENT_CONFIRM, function(){ self.fireEvent(BI.YearMonthCombo.EVENT_CONFIRM); }); BI.createWidget({ type: "bi.center", element: this, hgap: 5, items: [this.year, this.month] }); }, setValue: function (v) { v = v || {}; this.month.setValue(v.month); this.year.setValue(v.year); }, getValue: function () { return { year: this.year.getValue(), month: this.month.getValue() }; } }); BI.YearMonthCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.year_month_combo', BI.YearMonthCombo);/** * 年份 + 月份下拉框 * * @class BI.YearQuarterCombo * @extends BI.Widget */ BI.YearQuarterCombo = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.YearQuarterCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-year-quarter-combo", height: 25 }); }, _init: function () { BI.YearQuarterCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; this.year = BI.createWidget({ type: "bi.year_combo" }); this.quarter = BI.createWidget({ type: "bi.quarter_combo" }); this.year.on(BI.YearCombo.EVENT_CONFIRM, function(){ self.fireEvent(BI.YearQuarterCombo.EVENT_CONFIRM); }); this.quarter.on(BI.QuarterCombo.EVENT_CONFIRM, function(){ self.fireEvent(BI.YearQuarterCombo.EVENT_CONFIRM); }); BI.createWidget({ type: "bi.center", element: this, hgap: 5, items: [this.year, this.quarter] }); }, setValue: function (v) { v = v || {}; this.quarter.setValue(v.quarter); this.year.setValue(v.year); }, getValue: function () { return { year: this.year.getValue(), quarter: this.quarter.getValue() }; } }); BI.YearQuarterCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; $.shortcut('bi.year_quarter_combo', BI.YearQuarterCombo);/** * 简单的复选下拉树控件, 适用于数据量少的情况 * * Created by GUY on 2015/10/29. * @class BI.TreeValueChooserCombo * @extends BI.Widget */ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { _const: { perPage: 10 }, _defaultConfig: function () { return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-tree-value-chooser-combo", width: 200, height: 30, items: null, itemsCreator: BI.emptyFn }); }, _init: function () { BI.TreeValueChooserCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; if (BI.isNotNull(o.items)) { this._initData(o.items); } this.combo = BI.createWidget({ type: 'bi.multi_tree_combo', element: this.element, itemsCreator: BI.bind(this._itemsCreator, this), width: o.width, height: o.height }); this.combo.on(BI.MultiTreeCombo.EVENT_CONFIRM, function () { self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM); }); }, _initData: function (items) { this.items = items; var nodes = BI.Tree.transformToTreeFormat(items); this.tree = new BI.Tree(); this.tree.initTree(nodes); this._initMap(); this._initFloors(); }, _initMap: function () { var map = this.map = {}; BI.each(this.items, function (i, item) { map[item.value] = item; }); }, _initFloors: function () { this.floors = -1; var root = this.tree.getRoot(); while (root) { this.floors++; root = root.getChildren()[0]; } }, _itemsCreator: function (options, callback) { var self = this, o = this.options; if (!this.items) { o.itemsCreator({}, function (items) { self._initData(items); call(); }); } else { call(); } function call() { switch (options.type) { case BI.TreeView.REQ_TYPE_INIT_DATA: self._reqInitTreeNode(options, callback); break; case BI.TreeView.REQ_TYPE_ADJUST_DATA: self._reqAdjustTreeNode(options, callback); break; case BI.TreeView.REQ_TYPE_CALCULATE_SELECT_DATA: self._reqSelectedTreeNode(options, callback); break; case BI.TreeView.REQ_TYPE_SELECTED_DATA: self._reqDisplayTreeNode(options, callback); break; default : self._reqTreeNode(options, callback); break; } } }, _reqDisplayTreeNode: function (op, callback) { var self = this; var result = []; var selected_values = op.selected_values; if (selected_values == null || BI.isEmpty(selected_values)) { callback({}); return; } doCheck(0, [], selected_values); callback({ items: result }); function doCheck(floor, parent_values, selected) { if (floor >= self.floors) { return; } if (selected == null || BI.isEmpty(selected)) { var children = self._getChildren(parent_values); BI.each(children, function (i, child) { var newParents = BI.clone(parent_values); newParents.push(child.value); var llen = self._getChildCount(newParents); createOneJson(child, llen); doCheck(floor + 1, newParents, {}); }); return; } BI.each(selected, function (k) { var node = self._getNode(k); var newParents = BI.clone(parent_values); newParents.push(node.value); createOneJson(node, getCount(selected[k], newParents)); doCheck(floor + 1, newParents, selected[k]); }) } function getCount(jo, parent_values) { if (jo == null) { return 0; } if (BI.isEmpty(jo)) { return self._getChildCount(parent_values); } return BI.size(jo); } function createOneJson(node, llen) { result.push({ id: node.id, pId: node.pId, text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""), value: node.value, open: true }); } }, _reqSelectedTreeNode: function (op, callback) { var self = this; var selected_values = op.selected_values; var not_selected_value = op.not_selected_value || {}; var keyword = op.keyword || ""; var parent_values = op.parent_values || []; if (selected_values == null || BI.isEmpty(selected_values)) { callback({}); return; } dealWithSelectedValues(selected_values); callback(selected_values); function dealWithSelectedValues(selected_values) { var p = BI.clone(parent_values); p.push(not_selected_value); if (isChild(selected_values, p)) { var result = []; var finded = search(parent_values.length + 1, parent_values, not_selected_value, result); if (finded === true) { var next = selected_values; BI.each(p, function (i, v) { var t = next[v]; if (t == null) { if (BI.isEmpty(next)) { var split = p.slice(0, i); var expanded = self._getChildren(split); BI.each(expanded, function (m, child) { if (i === p.length - 1 && child.value === not_selected_value) { return true; } next[child.value] = {}; }); next = next[v]; } else { next = {}; next[v] = {}; } } else { next = t; } }); if (result.length > 0) { BI.each(result, function (i, strs) { self._buildTree(selected_values, strs); }) } } } } function search(deep, parents, current, result) { var newParents = BI.clone(parents); newParents.push(current); if (self._isMatch(current, keyword)) { return true; } if (deep >= self.floors) { return false; } var children = self._getChildren(newParents); var notSearch = []; var can = false; BI.each(children, function (i, child) { if (search(deep + 1, newParents, child.value, result)) { can = true; } else { notSearch.push(child.value); } }); if (can === true) { BI.each(notSearch, function (i, v) { var next = BI.clone(newParents); next.push(v); result.push(next); }); } return can; } function isChild(selected_values, parents) { var t = selected_values; for (var i = 0; i < parents.length; i++) { var v = parents[i]; if (!BI.has(t, v)) { return false; } t = t[v]; if (t == null || BI.isEmpty(t)) { return true; } } return true; } }, _reqAdjustTreeNode: function (op, callback) { var self = this; var result = []; var selected_values = op.selected_values; if (selected_values == null || BI.isEmpty(selected_values)) { callback({}); return; } BI.each(selected_values, function (k, v) { result.push([k]); }); dealWithSelectedValues(selected_values, []); var jo = {}; BI.each(result, function (i, strs) { self._buildTree(jo, strs); }); callback(jo); function dealWithSelectedValues(selected, parents) { if (selected == null || BI.isEmpty(selected)) { return true; } var can = true; BI.each(selected, function (k, v) { var p = BI.clone(parents); p.push(k); if (!dealWithSelectedValues(selected[k], p)) { BI.each(selected[k], function (nk, nv) { var t = BI.clone(p); t.push(nk); result.push(t); }); can = false; } }); return can && isAllSelected(selected, parents); } function isAllSelected(selected, parents) { return BI.isEmpty(selected) || self._getChildCount(parents) === BI.size(selected); } }, _reqInitTreeNode: function (op, callback) { var self = this; var result = []; var keyword = op.keyword || ""; var selected_values = op.selected_values; var last_search_value = op.last_search_value || ""; var output = search(); BI.nextTick(function () { callback({ hasNext: output.length > self._const.perPage, items: result, last_search_value: BI.last(output) }) }); function search() { var children = self._getChildren([]); var start = children.length; if (last_search_value !== "") { for (var j = 0, len = start; j < len; j++) { if (children[j].value === last_search_value) { start = j + 1; break; } } } else { start = 0; } var output = []; for (var i = start, len = children.length; i < len; i++) { if (output.length < self._const.perPage) { var find = nodeSearch(1, [], children[i].value, false, result); } else if (output.length === self._const.perPage) { var find = nodeSearch(1, [], children[i].value, false, []); } if (find[0] === true) { output.push(children[i].value); } if (output.length > self._const.perPage) { break; } } return output; } function nodeSearch(deep, parent_values, current, isAllSelect, result) { if (self._isMatch(current, keyword)) { var checked = isAllSelect || isSelected(parent_values, current); createOneJson(parent_values, current, false, checked, !isAllSelect && isHalf(parent_values, current), true, result); return [true, checked]; } if (deep >= self.floors) { return [false, false]; } var newParents = BI.clone(parent_values); newParents.push(current); var children = self._getChildren(newParents); var can = false, checked = false; var isCurAllSelected = isAllSelect || isAllSelected(parent_values, current); BI.each(children, function (i, child) { var state = nodeSearch(deep + 1, newParents, child.value, isCurAllSelected, result); if (state[1] === true) { checked = true; } if (state[0] === true) { can = true; } }); if (can === true) { checked = isCurAllSelected || (isSelected(parent_values, current) && checked); createOneJson(parent_values, current, true, checked, false, false, result); } return [can, checked]; } function createOneJson(parent_values, value, isOpen, checked, half, flag, result) { var node = self.map[value]; result.push({ id: node.id, pId: node.pId, text: node.text, value: node.value, title: node.title, isParent: parent_values.length + 1 < self.floors, open: isOpen, checked: checked, halfCheck: half, flag: flag }); } function isHalf(parent_values, value) { var find = findSelectedObj(parent_values); if (find == null) { return null; } return BI.any(find, function (v, ob) { if (v === value) { if (ob != null && !BI.isEmpty(ob)) { return true; } } }); } function isAllSelected(parent_values, value) { var find = findSelectedObj(parent_values); if (find == null) { return null; } return BI.any(find, function (v, ob) { if (v === value) { if (ob != null && BI.isEmpty(ob)) { return true; } } }); } function isSelected(parent_values, value) { var find = findSelectedObj(parent_values); if (find == null) { return false; } return BI.any(find, function (v) { if (v === value) { return true; } }); } function findSelectedObj(parent_values) { var find = selected_values; if (find == null) { return null; } BI.every(parent_values, function (i, v) { find = find[v]; if (find == null) { return false; } return true; }); return find; } }, _reqTreeNode: function (op, callback) { var self = this; var result = []; var times = op.times; var check_state = op.check_state || {}; var parent_values = op.parent_values || []; var selected_values = op.selected_values; var valueMap = {}; if (judgeState(parent_values, selected_values, check_state)) { valueMap = dealWidthSelectedValue(parent_values, selected_values); } var nodes = this._getChildren(parent_values); for (var i = (times - 1) * this._const.perPage; nodes[i] && i < times * this._const.perPage; i++) { var state = getCheckState(nodes[i].value, parent_values, valueMap, check_state); result.push({ id: nodes[i].id, pId: nodes[i].pId, value: nodes[i].value, text: nodes[i].text, times: 1, isParent: parent_values.length + 1 < this.floors, checked: state[0], halfCheck: state[1] }) } BI.nextTick(function () { callback({ items: result, hasNext: nodes.length > times * self._const.perPage }); }); function judgeState(parent_values, selected_value, check_state) { var checked = check_state.checked, half = check_state.half; if (parent_values.length > 0 && !checked) { return false; } return (parent_values.length === 0 || (checked && half) && !BI.isEmpty(selected_value)); } function dealWidthSelectedValue(parent_values, selected_values) { var valueMap = {}; BI.each(parent_values, function (i, v) { selected_values = selected_values[v]; }); BI.each(selected_values, function (value, obj) { if (BI.isNull(obj)) { valueMap[value] = [0, 0]; return; } if (BI.isEmpty(obj)) { valueMap[value] = [2, 0]; return; } var nextNames = {}; BI.each(obj, function (t, o) { if (BI.isNull(o) || BI.isEmpty(o)) { nextNames[t] = true; } }); valueMap[value] = [1, BI.size(nextNames)]; }); return valueMap; } function getCheckState(current, parent_values, valueMap, check_state) { var checked = check_state.checked, half = check_state.half; var hasChild = parent_values.length + 1 < self.floors; var tempCheck = false, halfCheck = false; if (BI.has(valueMap, current)) { //可能是半选 if (valueMap[current][0] === 1) { var values = BI.clone(parent_values); values.push(current); if (hasChild && self._getChildCount(values) != valueMap[current][1]) { halfCheck = true; } } else if (valueMap[current][0] === 2) { tempCheck = true; } } var check; if (!checked && !halfCheck && !tempCheck) { check = BI.has(valueMap, current); } else { check = ((tempCheck || checked) && !half) || BI.has(valueMap, current); } return [check, halfCheck]; } }, _buildTree: function (jo, values) { var t = jo; BI.each(values, function (i, v) { if (!BI.has(t, v)) { t[v] = {}; } t = t[v]; }); }, _isMatch: function (value, keyword) { var finded = BI.Func.getSearchResult([value], keyword); return finded.finded.length > 0 || finded.matched.length > 0; }, _getNode: function (v) { return this.tree.search(v, "value"); }, _getChildren: function (parent_values) { if (parent_values.length > 0) { var value = BI.last(parent_values); var parent = this.tree.search(value, "value"); } else { var parent = this.tree.getRoot(); } return parent.getChildren(); }, _getChildCount: function (parent_values) { return this._getChildren(parent_values).length; }, setValue: function (v) { this.combo.setValue(v); }, getValue: function () { return this.combo.getValue(); }, populate: function () { this.combo.populate.apply(this, arguments); } }); BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM"; $.shortcut('bi.tree_value_chooser_combo', BI.TreeValueChooserCombo);/** * 简单的复选下拉框控件, 适用于数据量少的情况 * 封装了字段处理逻辑 * * Created by GUY on 2015/10/29. * @class BI.ValueChooserCombo * @extends BI.Widget */ BI.ValueChooserCombo = BI.inherit(BI.Widget, { _const: { perPage: 10 }, _defaultConfig: function () { return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-value-chooser-combo", width: 200, height: 30, items: null, itemsCreator: BI.emptyFn, cache: true }); }, _init: function () { BI.ValueChooserCombo.superclass._init.apply(this, arguments); var self = this, o = this.options; if (BI.isNotNull(o.items)) { this.items = o.items; } this.combo = BI.createWidget({ type: 'bi.multi_select_combo', element: this.element, itemsCreator: BI.bind(this._itemsCreator, this), valueFormatter: function (v) { var text = v; if (BI.isNotNull(self.items)) { BI.some(self.items, function (i, item) { if (item.value === v) { text = item.text; return true; } }); } return text; }, width: o.width, height: o.height }); this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () { self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM); }); }, _getItemsByTimes: function (items, times) { var res = []; for (var i = (times - 1) * this._const.perPage; items[i] && i < times * this._const.perPage; i++) { res.push(items[i]); } return res; }, _hasNextByTimes: function (items, times) { return times * this._const.perPage < items.length; }, _itemsCreator: function (options, callback) { var self = this, o = this.options; if (!o.cache || !this.items) { o.itemsCreator({}, function (items) { self.items = items; call(items); }); } else { call(this.items); } function call(items) { var keywords = (options.keywords || []).slice(); if (options.keyword) { keywords.push(options.keyword); } BI.each(keywords, function (i, kw) { var search = BI.Func.getSearchResult(items, kw); items = search.matched.concat(search.finded); }); if (options.selected_values) {//过滤 var filter = BI.makeObject(options.selected_values, true); items = BI.filter(items, function (i, ob) { return !filter[ob.value]; }); } if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) { callback({ items: items }); return; } if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) { callback({count: items.length}); return; } callback({ items: self._getItemsByTimes(items, options.times), hasNext: self._hasNextByTimes(items, options.times) }); } }, setValue: function (v) { this.combo.setValue(v); }, getValue: function () { var val = this.combo.getValue() || {}; return { type: val.type, value: val.value } }, populate: function () { this.combo.populate.apply(this, arguments); } }); BI.ValueChooserCombo.EVENT_CONFIRM = "ValueChooserCombo.EVENT_CONFIRM"; $.shortcut('bi.value_chooser_combo', BI.ValueChooserCombo);