diff --git a/demo/js/widget/numbereditor/demo.number_editor.js b/demo/js/widget/numbereditor/demo.number_editor.js index c78238052..9a57706bd 100644 --- a/demo/js/widget/numbereditor/demo.number_editor.js +++ b/demo/js/widget/numbereditor/demo.number_editor.js @@ -7,7 +7,7 @@ Demo.FileManager = BI.inherit(BI.Widget, { }, render: function () { - var editor = BI.createWidget({ + var editor1 = BI.createWidget({ type: "bi.number_editor", validationChecker: function (v) { return BI.parseFloat(v) <= 100 && BI.parseFloat(v) >= 0; @@ -16,21 +16,50 @@ Demo.FileManager = BI.inherit(BI.Widget, { width: 150, errorText: "hahah" }); - editor.on(BI.NumberEditor.EVENT_CHANGE, function () { + editor1.on(BI.NumberEditor.EVENT_CHANGE, function () { if (BI.parseFloat(this.getValue()) < 1) { - editor.setDownEnable(false); + editor1.setDownEnable(false); } else { - editor.setDownEnable(true); + editor1.setDownEnable(true); } - BI.Msg.toast(editor.getValue()); + BI.Msg.toast(editor1.getValue()); }); + + + var editor2 = BI.createWidget({ + type: "bi.number_editor", + validationChecker: function (v) { + return BI.parseFloat(v) <= 100 && BI.parseFloat(v) >= 0; + }, + valueFormatter: (v) => `${v}$`, + valueParser: (v) => v.replace(/\$\s?|(,*)/g, ''), + height: 24, + width: 150, + errorText: "hahah" + }); + editor2.on(BI.NumberEditor.EVENT_CHANGE, function () { + if (BI.parseFloat(this.getValue()) < 1) { + editor2.setDownEnable(false); + } else { + editor2.setDownEnable(true); + } + BI.Msg.toast(editor2.getValue()); + }); + return { type: "bi.vertical", - items: [{ - el: editor, - height: 24 - }] + hgap: 20, + vgap: 20, + items: [ + { + el: editor1, + height: 24 + }, { + el: editor2, + height: 24 + } + ] }; } }); -BI.shortcut("demo.number_editor", Demo.FileManager); \ No newline at end of file +BI.shortcut("demo.number_editor", Demo.FileManager); diff --git a/dist/font/iconfont.eot b/dist/font/iconfont.eot index e80c660e5..ac0a97fe4 100644 Binary files a/dist/font/iconfont.eot and b/dist/font/iconfont.eot differ diff --git a/dist/font/iconfont.ttf b/dist/font/iconfont.ttf index 193c5da6a..ed9114ed8 100644 Binary files a/dist/font/iconfont.ttf and b/dist/font/iconfont.ttf differ diff --git a/dist/font/iconfont.woff b/dist/font/iconfont.woff index 0eae8de52..fb9750bb1 100644 Binary files a/dist/font/iconfont.woff and b/dist/font/iconfont.woff differ diff --git a/dist/font/iconfont.woff2 b/dist/font/iconfont.woff2 index 637a9d9ad..dbb237c0f 100644 Binary files a/dist/font/iconfont.woff2 and b/dist/font/iconfont.woff2 differ diff --git a/package.json b/package.json index f2dffe84d..bea49278e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220906163624", + "version": "2.0.20220916093936", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", diff --git a/src/base/pager/pager.js b/src/base/pager/pager.js index 129db1b8d..06514fb99 100644 --- a/src/base/pager/pager.js +++ b/src/base/pager/pager.js @@ -235,6 +235,7 @@ BI.Pager = BI.inherit(BI.Widget, { setAllPages: function (pages) { this.options.pages = pages; + this._populate(); }, hasPrev: function (v) { diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index 8fa304890..77bfd1036 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -26,6 +26,7 @@ BI.BasicButton = BI.inherit(BI.Single, { trigger: null, handler: BI.emptyFn, bubble: null, + debounce: true }); }, @@ -222,10 +223,10 @@ BI.BasicButton = BI.inherit(BI.Single, { }); // 之后的300ms点击无效 - var onClick = BI.debounce(this._doClick, BI.EVENT_RESPONSE_TIME, { + var onClick = o.debounce ? BI.debounce(this._doClick, BI.EVENT_RESPONSE_TIME, { "leading": true, "trailing": false, - }); + }) : this._doClick; function ev(e) { if (o.stopEvent) { diff --git a/src/case/button/icon/icon.change.js b/src/case/button/icon/icon.change.js index 8790008e2..e65160879 100644 --- a/src/case/button/icon/icon.change.js +++ b/src/case/button/icon/icon.change.js @@ -31,8 +31,11 @@ BI.IconChangeButton = BI.inherit(BI.Single, { }, _init: function () { - BI.IconChangeButton.superclass._init.apply(this, arguments); var self = this, o = this.options; + o.iconCls = BI.isFunction(o.iconCls) ? this.__watch(o.iconCls, function (context, newValue) { + self.setIcon(newValue); + }) : o.iconCls; + BI.IconChangeButton.superclass._init.apply(this, arguments); this.button = BI.createWidget({ type: "bi.icon_button", element: this, @@ -80,4 +83,4 @@ BI.IconChangeButton = BI.inherit(BI.Single, { } }); BI.IconChangeButton.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.icon_change_button", BI.IconChangeButton); \ No newline at end of file +BI.shortcut("bi.icon_change_button", BI.IconChangeButton); diff --git a/src/case/colorchooser/colorchooser.js b/src/case/colorchooser/colorchooser.js index 991be4a77..df4d9eb1b 100644 --- a/src/case/colorchooser/colorchooser.js +++ b/src/case/colorchooser/colorchooser.js @@ -39,7 +39,7 @@ BI.ColorChooser = BI.inherit(BI.Widget, { width: o.el.type ? o.width : o.width - 2, height: o.el.type ? o.height : o.height - 2 }, o.el), - popup: { + popup: () => ({ el: BI.extend({ type: "bi.hex_color_chooser_popup", recommendColorsGetter: o.recommendColorsGetter, @@ -64,13 +64,13 @@ BI.ColorChooser = BI.inherit(BI.Widget, { }, o.popup), value: o.value, width: 300 - }, + }), value: o.value }); var fn = function () { var color = self.colorPicker.getValue(); - self.trigger.setValue(color); + self.setValue(color); }; this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () { @@ -98,7 +98,8 @@ BI.ColorChooser = BI.inherit(BI.Widget, { }, setValue: function (color) { - this.combo.setValue((color || "").toLowerCase()); + this.options.value = (color || "").toLowerCase(); + this.combo.setValue(this.options.value); }, getValue: function () { diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index b9aaac2ba..f6794f7bd 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -13,6 +13,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { text: "", value: "", defaultText: "", + el: {}, allowClear: false, status: "success", // success | warning | error, title: null, @@ -71,20 +72,24 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { } } ], + ...o.el }; + let changeTag = false; const popup = { type: "bi.text_value_combo_popup", ref: ref => this.popup = ref, chooseType: o.chooseType, - value: o.value, items: o.items, listeners: [ { eventName: BI.TextValueComboPopup.EVENT_CHANGE, action: (...args) => { + changeTag = true; this.setValue(this.popup.getValue()); - this.combo.hideView(); - this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, ...args); + if (o.chooseType === BI.ButtonGroup.CHOOSE_TYPE_SINGLE) { + this.combo.hideView(); + this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, ...args); + } } }, { eventName: BI.Controller.EVENT_CHANGE, @@ -102,6 +107,21 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { direction: o.direction, adjustLength: 2, el: trigger, + listeners: [ + { + eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, + action: (...args) => { + changeTag = false; + } + }, { + eventName: BI.Combo.EVENT_AFTER_HIDEVIEW, + action: (...args) => { + if (o.chooseType !== BI.ButtonGroup.CHOOSE_TYPE_SINGLE && changeTag) { + this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, ...args); + } + } + } + ], popup: { el: popup, value: o.value, @@ -113,7 +133,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { mounted: function () { const o = this.options; - if (BI.isKey(o.value)) { + if (BI.isKey(o.value) || BI.isObject(o.value)) { this._checkError(o.value); } }, @@ -132,11 +152,9 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { var vals = BI.isArray(v) ? v : [v]; - var result = BI.find(this.options.items, function (idx, item) { - return BI.contains(vals, item.value); - }); + var result = BI.intersection(BI.map(this.options.items, (i, item) => item.value), vals); - if (BI.isNull(result)) { + if (result.length !== vals.length) { this.setStatus("error"); } else { this.setStatus("success"); diff --git a/src/case/combo/textvaluecombo/combo.textvaluesmall.js b/src/case/combo/textvaluecombo/combo.textvaluesmall.js index b6609544b..155b124ce 100644 --- a/src/case/combo/textvaluecombo/combo.textvaluesmall.js +++ b/src/case/combo/textvaluecombo/combo.textvaluesmall.js @@ -15,65 +15,45 @@ BI.SmallTextValueCombo = BI.inherit(BI.Widget, { }); }, - _init: function () { - var self = this, o = this.options; - o.value = BI.isFunction(o.value) ? this.__watch(o.value, function (context, newValue) { - self.setValue(newValue); - }) : o.value; - o.items = BI.isFunction(o.items) ? this.__watch(o.items, function (context, newValue) { - self.populate(newValue); - }) : o.items; - BI.SmallTextValueCombo.superclass._init.apply(this, arguments); - this.trigger = BI.createWidget(o.el, { - type: "bi.small_select_text_trigger", - items: o.items, + render: function () { + var o = this.options; + return { + type: "bi.text_value_combo", + ref: (_ref) => { + this.combo = _ref; + }, 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, - container: o.container, - adjustLength: 2, - el: this.trigger, - popup: { - el: this.popup, - maxHeight: 240, - minHeight: 25 - } - }); - - if(BI.isKey(o.value)){ - this.setValue(o.value); + el: { + type: "bi.small_select_text_trigger", + ...o.el + }, + text: o.text, + value: o.value, + defaultText: o.defaultText, + allowClear: o.allowClear, + status: o.status, + title: o.title, + listeners: [{ + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: (...args) => { + this.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE, ...args); + } + }] } }, setValue: function (v) { - this.trigger.setValue(v); - this.popup.setValue(v); + this.combo.setValue(v); }, getValue: function () { - return this.popup.getValue(); + return this.combo.getValue(); }, populate: function (items) { - this.options.items = items; - this.SmallTextValueCombo.populate(items); + this.combo.populate(items); } }); BI.SmallTextValueCombo.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.small_text_value_combo", BI.SmallTextValueCombo); \ No newline at end of file +BI.shortcut("bi.small_text_value_combo", BI.SmallTextValueCombo); diff --git a/src/case/combo/textvaluecombo/popup.textvalue.js b/src/case/combo/textvaluecombo/popup.textvalue.js index 6702f8bfa..1876c9a55 100644 --- a/src/case/combo/textvaluecombo/popup.textvalue.js +++ b/src/case/combo/textvaluecombo/popup.textvalue.js @@ -39,7 +39,7 @@ BI.TextValueComboPopup = BI.inherit(BI.Pane, { var o = this.options; return BI.map(items, function (i, item) { return BI.extend({ - type: "bi.single_select_item", + type: o.chooseType === BI.ButtonGroup.CHOOSE_TYPE_SINGLE ? "bi.single_select_item" : "bi.multi_select_item", textAlign: o.textAlign, title: item.title || item.text }, item); diff --git a/src/case/pager/pager.js b/src/case/pager/pager.detail.js similarity index 99% rename from src/case/pager/pager.js rename to src/case/pager/pager.detail.js index 0f6bac9b5..36e8392f6 100644 --- a/src/case/pager/pager.js +++ b/src/case/pager/pager.detail.js @@ -223,6 +223,7 @@ BI.DetailPager = BI.inherit(BI.Widget, { setAllPages: function (pages) { this.options.pages = pages; + this._populate(); }, hasPrev: function (v) { diff --git a/src/case/trigger/trigger.text.select.js b/src/case/trigger/trigger.text.select.js index 3be2d7757..5a171be2e 100644 --- a/src/case/trigger/trigger.text.select.js +++ b/src/case/trigger/trigger.text.select.js @@ -52,7 +52,6 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { _digest: function (val, items) { var o = this.options; - val = BI.isArray(val) ? val[0] : val; // 提升valueFormatter的优先级 if (o.valueFormatter !== BI.emptyFn && BI.isFunction(o.valueFormatter)) { @@ -61,16 +60,19 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { }; } + val = BI.isArray(val) ? val.slice() : [val]; + var result = []; var formatItems = BI.Tree.transformToArrayFormat(items); BI.each(formatItems, function (i, item) { - if (val === item.value && !BI.contains(result, item.text || item.value)) { + if (BI.contains(val, item.value) && !BI.contains(result, item.text || item.value)) { result.push(item.text || item.value); + BI.remove(val, item.value); } }); - if (result.length > 0) { + if (result.length > 0 && val.length === 0) { return { textCls: "", text: result.join(","), @@ -84,7 +86,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { }; } return { - text: o.text + text, }; } }, diff --git a/src/core/4.widget.js b/src/core/4.widget.js index df560dc24..957ae836f 100644 --- a/src/core/4.widget.js +++ b/src/core/4.widget.js @@ -743,6 +743,7 @@ }, _unMount: function () { + this._assetMounted(); this.__destroy(); this.fireEvent(BI.Events.UNMOUNT); this.purgeListeners(); diff --git a/src/core/platform/web/jquery/_jquery.js b/src/core/platform/web/jquery/_jquery.js index 8c83f4356..0c7f0479e 100644 --- a/src/core/platform/web/jquery/_jquery.js +++ b/src/core/platform/web/jquery/_jquery.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.12.4 + * jQuery JavaScript Library v3.6.1 * http://jquery.com/ * * Includes Sizzle.js @@ -63,16 +63,15 @@ var support = {}; - var - version = "1.12.4", + version = "3.6.1", // Define a local copy of jQuery - jQuery = function( selector, context ) { + jQuery = function (selector, context) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); + return new jQuery.fn.init(selector, context); }, // Support: Android<4.1, IE<9 @@ -10537,54 +10536,82 @@ s.jsonpCallback = originalSettings.jsonpCallback; // save the callback name for future use - oldCallbacks.push( callbackName ); + oldCallbacks.push(callbackName); } // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); + if (responseContainer && jQuery.isFunction(overwritten)) { + overwritten(responseContainer[0]); } responseContainer = overwritten = undefined; - } ); + }); // Delegate to script return "script"; } - } ); - + }); +// Support: Safari 8 only +// In Safari 8 documents created via document.implementation.createHTMLDocument +// collapse sibling forms: the second one becomes a child of the first one. +// Because of that, this security measure has to be disabled in Safari 8. +// https://bugs.webkit.org/show_bug.cgi?id=137337 + support.createHTMLDocument = (function () { + var body = document.implementation.createHTMLDocument("").body; + body.innerHTML = "
"; + return body.childNodes.length === 2; + })(); // data: string of html // context (optional): If specified, the fragment will be created in this context, // defaults to document // keepScripts (optional): If true, will include scripts passed in the html string - jQuery.parseHTML = function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { + jQuery.parseHTML = function (data, context, keepScripts) { + if (!data || typeof data !== "string") { return null; } - if ( typeof context === "boolean" ) { + if (typeof context === "boolean") { keepScripts = context; context = false; } - context = context || document; - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; + var base, parsed, scripts; + + if (!context) { + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation + if (support.createHTMLDocument) { + context = document.implementation.createHTMLDocument(""); + + // Set the base href for the created document + // so any parsed elements with URLs + // are based on the document's URL (gh-2965) + base = context.createElement("base"); + base.href = document.location.href; + context.head.appendChild(base); + } else { + context = document; + } + } + + parsed = rsingleTag.exec(data); + scripts = !keepScripts && []; // Single tag - if ( parsed ) { - return [ context.createElement( parsed[ 1 ] ) ]; + if (parsed) { + return [context.createElement(parsed[1])]; } - parsed = buildFragment( [ data ], context, scripts ); + parsed = buildFragment([data], context, scripts); - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); + if (scripts && scripts.length) { + jQuery(scripts).remove(); } - return jQuery.merge( [], parsed.childNodes ); + return jQuery.merge([], parsed.childNodes); }; diff --git a/src/less/base/trigger/trigger.less b/src/less/base/trigger/trigger.less index bcd89590a..70e1f277f 100644 --- a/src/less/base/trigger/trigger.less +++ b/src/less/base/trigger/trigger.less @@ -1,7 +1,7 @@ @import "../../index.less"; .bi-trigger{ - & .bi-trigger-icon-button{ + & .bi-trigger-icon-button, &.bi-trigger-icon-button { font-size: @font-size-16; } -} \ No newline at end of file +} diff --git a/src/less/core/utils/common.less b/src/less/core/utils/common.less index 76a93b316..0a0b0e53b 100644 --- a/src/less/core/utils/common.less +++ b/src/less/core/utils/common.less @@ -2,6 +2,19 @@ .base-disabled { cursor: not-allowed !important; + .cursor-pointer { + cursor: not-allowed !important; + } + .cursor-default { + cursor: not-allowed !important; + } + .cursor-move { + cursor: not-allowed !important; + } + .cursor-text{ + cursor: not-allowed !important; + } + color: @color-bi-text-disabled !important; & .bi-input { @@ -41,6 +54,18 @@ .base-invalid { cursor: default !important; + .cursor-pointer { + cursor: default !important; + } + .cursor-default { + cursor: default !important; + } + .cursor-move { + cursor: default !important; + } + .cursor-text{ + cursor: default !important; + } } //focus时边框高亮 diff --git a/src/less/widget/multilayersingletree/multilayersingletree.combo.less b/src/less/widget/multilayersingletree/multilayersingletree.combo.less index 15df50877..b190d19c1 100644 --- a/src/less/widget/multilayersingletree/multilayersingletree.combo.less +++ b/src/less/widget/multilayersingletree/multilayersingletree.combo.less @@ -1,6 +1,16 @@ @import "../../index.less"; +@val: transform .3s ease; .bi-multilayer-single-tree-combo { + + // 此combo的trigger_button是absolute上去的,与bi-combo在同一层级,独立写一下 + & .bi-combo.bi-combo-popup + .bi-trigger-icon-button { + & .x-icon { + .rotate(180deg); + .transition(@val); + } + } + &.status-error { &.bi-border, &.bi-border-bottom { border-color: @border-color-negative; diff --git a/src/widget/dynamicdate/dynamicdate.trigger.js b/src/widget/dynamicdate/dynamicdate.trigger.js index 1412fae69..012f6c722 100644 --- a/src/widget/dynamicdate/dynamicdate.trigger.js +++ b/src/widget/dynamicdate/dynamicdate.trigger.js @@ -9,7 +9,7 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { iconWidth: 24 }, - props: { + props: () => ({ extraCls: "bi-date-trigger", min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 @@ -17,8 +17,8 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { iconWidth: 24, format: "", // 显示的日期格式化方式 allowEdit: true, // 是否允许编辑 - watermark: "" - }, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + }), _init: function () { BI.DynamicDateTrigger.superclass._init.apply(this, arguments); @@ -44,7 +44,7 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { hgap: c.hgap, vgap: c.vgap, allowBlank: true, - watermark: BI.isKey(o.watermark) ? o.watermark : BI.i18nText("BI-Basic_Unrestricted"), + watermark: o.watermark, errorText: function (v) { var str = ""; if (!BI.isKey(o.format)) { diff --git a/src/widget/multilayerdownlist/popup.downlist.js b/src/widget/multilayerdownlist/popup.downlist.js index 7483349de..8fbacd285 100644 --- a/src/widget/multilayerdownlist/popup.downlist.js +++ b/src/widget/multilayerdownlist/popup.downlist.js @@ -99,7 +99,7 @@ BI.MultiLayerDownListPopup = BI.inherit(BI.Pane, { item.el.logic = { dynamic: true }; - item.el.height = sourceItem.el.height || self.constants.height; + item.el.height = sourceItem.el.height || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT; item.el.iconCls2 = self.constants.nextIcon; item.popup = { lgap: 1, @@ -183,7 +183,7 @@ BI.MultiLayerDownListPopup = BI.inherit(BI.Pane, { if (BI.isNotEmptyArray(child.children)) { item.type = "bi.down_list_group_item"; item.iconCls2 = self.constants.nextIcon; - item.height = child.height || self.constants.height; + item.height = child.height || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT; self._createChildren(item, child); } targetItem.items.push(item); diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index e748ee1c5..7263346b0 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -35,7 +35,6 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { var baseConfig = this._getBaseConfig(); - if (o.allowEdit) { return { type: "bi.absolute", @@ -210,7 +209,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { var self = this, o = this.options; return { type: "bi.trigger_icon_button", - cls: "trigger-icon-button", + cls: "bi-trigger trigger-icon-button", ref: function (_ref) { self.triggerBtn = _ref; }, diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index 364f1e008..d06f1a8c6 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -33,14 +33,48 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; - return (o.itemsCreator === BI.emptyFn) ? this._getSyncConfig() : this._getAsyncConfig(); + var cls = (o.simple ? "bi-border-bottom " : "bi-border bi-border-radius ") + (BI.isKey(o.status) ? ("status-" + o.status) : ""); + + var baseConfig = this._getBaseConfig(); + + if (o.allowEdit) { + return { + type: "bi.absolute", + cls, + items: [ + { + el: BI.extend(baseConfig, this._getSearchConfig()), + top: 0, bottom: 0, right: 0, left: 0 + }, { + el: self._getTriggerIconButton(), + top: 0, bottom: 0, right: 0, + }, + ] + }; + } + + return BI.extend(baseConfig, { + el: { + type: "bi.single_tree_trigger", + ref: function (_ref) { + self.textTrigger = _ref; + }, + text: o.text, + defaultText: o.defaultText, + height: o.height, + items: o.items, + value: o.value, + tipType: o.tipType, + warningTitle: o.warningTitle, + valueFormatter: o.valueFormatter, + }, + }, { cls }); }, _getBaseConfig: function () { var self = this, o = this.options; return { type: "bi.combo", - cls: (o.simple ? "bi-border-bottom" : "bi-border bi-border-radius ") + (BI.isKey(o.status) ? ("status-" + o.status) : ""), container: o.container, destroyWhenHide: o.destroyWhenHide, adjustLength: 2, @@ -152,7 +186,7 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { // IE11下,popover(position: fixed)下放置下拉控件(position: fixed), 滚动的时候会异常卡顿 // 通过container参数将popup放置于popover之外解决此问题, 其他下拉控件由于元素少或者有分页,所以 // 卡顿不明显, 先在此做尝试, 并在FineUI特殊处理待解决文档中标记跟踪 - return !(o.container && self.trigger.getSearcher().isSearching() && self.trigger.getSearcher().getView().element.find(e.target).length > 0); + return (o.container && self.trigger.getSearcher().isSearching() && self.trigger.getSearcher().getView().element.find(e.target).length > 0) ? false : self.triggerBtn?.element.find(e.target).length === 0; }, listeners: [{ eventName: BI.Combo.EVENT_AFTER_HIDEVIEW, @@ -168,46 +202,29 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { }; }, - _getSyncConfig: function () { - var o = this.options, self = this; - var baseConfig = this._getBaseConfig(); - return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : { - el: { - type: "bi.single_tree_trigger", - ref: function (_ref) { - self.textTrigger = _ref; - }, - text: o.text, - defaultText: o.defaultText, - height: o.height, - items: o.items, - value: o.value, - tipType: o.tipType, - warningTitle: o.warningTitle, - valueFormatter: o.valueFormatter, - }, - }); - }, - - _getAsyncConfig: function () { - var o = this.options, self = this; - var baseConfig = this._getBaseConfig(); - return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : { - el: { - type: "bi.single_tree_trigger", - ref: function (_ref) { - self.textTrigger = _ref; - }, - text: o.text, - defaultText: o.defaultText, - height: o.height, - items: o.items, - value: o.value, - tipType: o.tipType, - warningTitle: o.warningTitle, - valueFormatter: o.valueFormatter, + _getTriggerIconButton: function () { + var self = this, o = this.options; + return { + type: "bi.trigger_icon_button", + cls: "bi-trigger trigger-icon-button", + ref: function (_ref) { + self.triggerBtn = _ref; }, - }); + width: o.height, + height: o.height, + listeners: [ + { + eventName: BI.TriggerIconButton.EVENT_CHANGE, + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + } + } + ] + }; }, getSearcher: function () { diff --git a/src/widget/multilayersingletree/multilayersingletree.trigger.js b/src/widget/multilayersingletree/multilayersingletree.trigger.js index b4f5c8dd9..617c70d7b 100644 --- a/src/widget/multilayersingletree/multilayersingletree.trigger.js +++ b/src/widget/multilayersingletree/multilayersingletree.trigger.js @@ -102,17 +102,8 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { }] }, width: "fill", - }, { - el: { - type: "bi.trigger_icon_button", - cls: "trigger-icon-button", - ref: function (_ref) { - self.triggerBtn = _ref; - }, - width: 24, - }, - width: 24 - } + rgap: 24, + }, ] }; }, diff --git a/src/widget/numbereditor/number.editor.js b/src/widget/numbereditor/number.editor.js index 596105947..3e99c6677 100644 --- a/src/widget/numbereditor/number.editor.js +++ b/src/widget/numbereditor/number.editor.js @@ -10,6 +10,9 @@ BI.NumberEditor = BI.inherit(BI.Widget, { valueFormatter: function (v) { return v; }, + valueParser: function (v) { + return v; + }, value: 0, allowBlank: false, errorText: "", @@ -30,14 +33,19 @@ BI.NumberEditor = BI.inherit(BI.Widget, { value: o.valueFormatter(o.value), validationChecker: function (v) { // 不设置validationChecker就自动检测 - if(o.validationChecker === BI.emptyFn && !self._checkValueInRange(v)) { + var parsedValue = o.valueParser(v); + if (o.validationChecker === BI.emptyFn && !self._checkValueInRange(parsedValue)) { return false; } - return o.validationChecker(v); + return o.validationChecker(parsedValue); }, errorText: o.errorText }); this.editor.on(BI.TextEditor.EVENT_CHANGE, function () { + // 大多数时候valueFormatter往往需要配合valueParser一起使用 + var value = this.getValue(); + var parsedValue = o.valueParser(value); + this.setValue(o.valueFormatter(parsedValue)); self.fireEvent(BI.NumberEditor.EVENT_CHANGE); }); this.editor.on(BI.TextEditor.EVENT_ERROR, function () { @@ -57,6 +65,7 @@ BI.NumberEditor = BI.inherit(BI.Widget, { type: "bi.icon_button", forceNotSelected: true, trigger: "lclick,", + debounce: false, cls: (o.simple ? "solid-triangle-top-font " : "add-up-font bi-border-left ") + "top-button bi-list-item-active2 icon-size-12" }); this.topBtn.on(BI.IconButton.EVENT_CHANGE, function () { @@ -68,6 +77,7 @@ BI.NumberEditor = BI.inherit(BI.Widget, { type: "bi.icon_button", trigger: "lclick,", forceNotSelected: true, + debounce: false, cls: (o.simple ? "solid-triangle-bottom-font " : "minus-down-font bi-border-left ") + "bottom-button bi-list-item-active2 icon-size-12" }); this.bottomBtn.on(BI.IconButton.EVENT_CHANGE, function () { @@ -154,4 +164,4 @@ BI.NumberEditor = BI.inherit(BI.Widget, { }); BI.NumberEditor.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.NumberEditor.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.number_editor", BI.NumberEditor); \ No newline at end of file +BI.shortcut("bi.number_editor", BI.NumberEditor); diff --git a/src/widget/time/time.trigger.js b/src/widget/time/time.trigger.js index cd8e25cd4..6b089fa86 100644 --- a/src/widget/time/time.trigger.js +++ b/src/widget/time/time.trigger.js @@ -23,12 +23,13 @@ DEFAULT_HOUR: "00" }, - props: { + props: () => ({ extraCls: "bi-time-trigger", value: {}, format: "", - allowEdit: false - }, + allowEdit: false, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + }), render: function () { var self = this, o = this.options; @@ -52,7 +53,7 @@ value: this._formatValue(o.value), hgap: 4, allowBlank: true, - watermark: BI.isKey(o.watermark) ? o.watermark : BI.i18nText("BI-Basic_Unrestricted"), + watermark: o.watermark, title: BI.bind(this._getTitle, this), listeners: [{ eventName: "EVENT_KEY_DOWN", @@ -185,7 +186,7 @@ focus: function () { this.editor.focus(); }, - + blur: function () { this.editor.blur(); }, @@ -195,4 +196,4 @@ } }); BI.shortcut("bi.time_trigger", BI.TimeTrigger); -})(); \ No newline at end of file +})(); diff --git a/src/widget/timeinterval/dateinterval.js b/src/widget/timeinterval/dateinterval.js index e20188d37..f6b2176c6 100644 --- a/src/widget/timeinterval/dateinterval.js +++ b/src/widget/timeinterval/dateinterval.js @@ -24,8 +24,8 @@ BI.DateInterval = BI.inherit(BI.Single, { BI.DateInterval.superclass._init.apply(this, arguments); o.value = o.value || {}; - this.left = this._createCombo(o.value.start); - this.right = this._createCombo(o.value.end); + this.left = this._createCombo(o.value.start, o.watermark?.start); + this.right = this._createCombo(o.value.end, o.watermark?.end); this.label = BI.createWidget({ type: "bi.label", height: o.height, @@ -65,7 +65,7 @@ BI.DateInterval = BI.inherit(BI.Single, { }); }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this, o = this.options; var combo = BI.createWidget({ type: "bi.dynamic_date_combo", @@ -74,7 +74,7 @@ BI.DateInterval = BI.inherit(BI.Single, { maxDate: o.maxDate, simple: o.simple, behaviors: o.behaviors, - watermark: o.watermark, + watermark: watermark, value: v, height: o.height, listeners: [{ diff --git a/src/widget/timeinterval/timeinterval.js b/src/widget/timeinterval/timeinterval.js index 95fd88bfe..3910c77e8 100644 --- a/src/widget/timeinterval/timeinterval.js +++ b/src/widget/timeinterval/timeinterval.js @@ -24,8 +24,8 @@ BI.TimeInterval = BI.inherit(BI.Single, { BI.TimeInterval.superclass._init.apply(this, arguments); o.value = o.value || {}; - this.left = this._createCombo(o.value.start); - this.right = this._createCombo(o.value.end); + this.left = this._createCombo(o.value.start, o.watermark?.start); + this.right = this._createCombo(o.value.end, o.watermark?.end); this.label = BI.createWidget({ type: "bi.label", height: o.height, @@ -65,7 +65,7 @@ BI.TimeInterval = BI.inherit(BI.Single, { }); }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this, o = this.options; var combo = BI.createWidget({ type: "bi.dynamic_date_time_combo", @@ -74,7 +74,7 @@ BI.TimeInterval = BI.inherit(BI.Single, { minDate: o.minDate, maxDate: o.maxDate, behaviors: o.behaviors, - watermark: o.watermark, + watermark: watermark, value: v, height: o.height, }); @@ -202,4 +202,4 @@ BI.TimeInterval = BI.inherit(BI.Single, { BI.TimeInterval.EVENT_VALID = "EVENT_VALID"; BI.TimeInterval.EVENT_ERROR = "EVENT_ERROR"; BI.TimeInterval.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.time_interval", BI.TimeInterval); \ No newline at end of file +BI.shortcut("bi.time_interval", BI.TimeInterval); diff --git a/src/widget/timeinterval/timeperiods.js b/src/widget/timeinterval/timeperiods.js index 45c5a970f..5a0edf56d 100644 --- a/src/widget/timeinterval/timeperiods.js +++ b/src/widget/timeinterval/timeperiods.js @@ -51,7 +51,7 @@ ref: function (_ref) { self.left = _ref; } - }, this._createCombo(o.value.start)), + }, this._createCombo(o.value.start, o.watermark?.start)), left: this.constants.offset, right: 0, top: 0, @@ -64,7 +64,7 @@ ref: function (_ref) { self.right = _ref; } - }, this._createCombo(o.value.end)), + }, this._createCombo(o.value.end, o.watermark?.end)), left: 0, right: this.constants.offset, top: 0, @@ -80,13 +80,14 @@ }; }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this; var o = this.options; return { type: "bi.time_combo", value: v, height: o.height, + watermark: watermark, listeners: [{ eventName: BI.TimeCombo.EVENT_BEFORE_POPUPVIEW, action: function () { @@ -119,4 +120,4 @@ BI.TimePeriods.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.TimePeriods.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.time_periods", BI.TimePeriods); -})(); \ No newline at end of file +})(); diff --git a/src/widget/yearinterval/yearinterval.js b/src/widget/yearinterval/yearinterval.js index 7c27f24f4..9f48d7f5f 100644 --- a/src/widget/yearinterval/yearinterval.js +++ b/src/widget/yearinterval/yearinterval.js @@ -23,8 +23,8 @@ BI.YearInterval = BI.inherit(BI.Single, { var self = this, o = this.options; o.value = o.value || {}; - this.left = this._createCombo(o.value.start); - this.right = this._createCombo(o.value.end); + this.left = this._createCombo(o.value.start, o.watermark?.start); + this.right = this._createCombo(o.value.end, o.watermark?.end); return [{ type: "bi.center", @@ -63,7 +63,7 @@ BI.YearInterval = BI.inherit(BI.Single, { }] }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this, o = this.options; var combo = BI.createWidget({ type: "bi.dynamic_year_combo", @@ -73,6 +73,7 @@ BI.YearInterval = BI.inherit(BI.Single, { height: o.height, behaviors: o.behaviors, value: v, + watermark: watermark, listeners: [{ eventName: BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW, action: function () { @@ -206,4 +207,4 @@ BI.YearInterval.EVENT_VALID = "EVENT_VALID"; BI.YearInterval.EVENT_ERROR = "EVENT_ERROR"; BI.YearInterval.EVENT_CHANGE = "EVENT_CHANGE"; BI.YearInterval.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; -BI.shortcut("bi.year_interval", BI.YearInterval); \ No newline at end of file +BI.shortcut("bi.year_interval", BI.YearInterval); diff --git a/src/widget/yearmonth/combo.yearmonth.js b/src/widget/yearmonth/combo.yearmonth.js index 45431225b..a6de2de6f 100644 --- a/src/widget/yearmonth/combo.yearmonth.js +++ b/src/widget/yearmonth/combo.yearmonth.js @@ -23,7 +23,8 @@ BI.DynamicYearMonthCombo = BI.inherit(BI.Single, { min: o.minDate, max: o.maxDate, height: o.height - border, - value: o.value || "" + value: o.value || "", + watermark: o.watermark, }); this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN, function () { self.combo.isViewVisible() && self.combo.hideView(); diff --git a/src/widget/yearmonth/trigger.yearmonth.js b/src/widget/yearmonth/trigger.yearmonth.js index 56a6b420a..7995a007b 100644 --- a/src/widget/yearmonth/trigger.yearmonth.js +++ b/src/widget/yearmonth/trigger.yearmonth.js @@ -5,12 +5,16 @@ BI.DynamicYearMonthTrigger = BI.inherit(BI.Trigger, { iconWidth: 24 }, - props: { + props: () => ({ extraCls: "bi-year-month-trigger", min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 - height: 24 - }, + height: 24, + watermark: { + year: BI.i18nText("BI-Basic_Unrestricted"), + month: BI.i18nText("BI-Basic_Unrestricted"), + }, + }), beforeInit: function (callback) { var o = this.options; @@ -80,7 +84,7 @@ BI.DynamicYearMonthTrigger = BI.inherit(BI.Trigger, { quitChecker: function () { return false; }, - watermark: BI.i18nText("BI-Basic_Unrestricted"), + watermark: isYear ? o.watermark?.year : o.watermark.month, errorText: function (v) { var year = isYear ? v : self.yearEditor.getValue(); var month = isYear ? self.monthEditor.getValue() : v; @@ -288,4 +292,4 @@ BI.DynamicYearMonthTrigger.EVENT_START = "EVENT_START"; BI.DynamicYearMonthTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.DynamicYearMonthTrigger.EVENT_STOP = "EVENT_STOP"; BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; -BI.shortcut("bi.dynamic_year_month_trigger", BI.DynamicYearMonthTrigger); \ No newline at end of file +BI.shortcut("bi.dynamic_year_month_trigger", BI.DynamicYearMonthTrigger); diff --git a/src/widget/yearmonthinterval/yearmonthinterval.js b/src/widget/yearmonthinterval/yearmonthinterval.js index c915c51f3..85e982e22 100644 --- a/src/widget/yearmonthinterval/yearmonthinterval.js +++ b/src/widget/yearmonthinterval/yearmonthinterval.js @@ -19,8 +19,8 @@ BI.YearMonthInterval = BI.inherit(BI.Single, { BI.YearMonthInterval.superclass._init.apply(this, arguments); o.value = o.value || {}; - this.left = this._createCombo(o.value.start); - this.right = this._createCombo(o.value.end); + this.left = this._createCombo(o.value.start, o.watermark?.start); + this.right = this._createCombo(o.value.end, o.watermark?.end); this.label = BI.createWidget({ type: "bi.label", height: o.height, @@ -61,7 +61,7 @@ BI.YearMonthInterval = BI.inherit(BI.Single, { }); }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this, o = this.options; var combo = BI.createWidget({ type: "bi.dynamic_year_month_combo", @@ -71,6 +71,7 @@ BI.YearMonthInterval = BI.inherit(BI.Single, { maxDate: o.maxDate, behaviors: o.behaviors, value: v, + watermark: watermark, listeners: [{ eventName: BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW, action: function () { diff --git a/src/widget/yearquarter/combo.yearquarter.js b/src/widget/yearquarter/combo.yearquarter.js index 16537990c..9ec93454b 100644 --- a/src/widget/yearquarter/combo.yearquarter.js +++ b/src/widget/yearquarter/combo.yearquarter.js @@ -26,7 +26,8 @@ BI.DynamicYearQuarterCombo = BI.inherit(BI.Widget, { min: o.minDate, max: o.maxDate, height: o.height - border, - value: o.value || "" + value: o.value || "", + watermark: o.watermark, }); this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN, function () { self.combo.isViewVisible() && self.combo.hideView(); diff --git a/src/widget/yearquarter/trigger.yearquarter.js b/src/widget/yearquarter/trigger.yearquarter.js index ea7cb6f4e..84bda3b3f 100644 --- a/src/widget/yearquarter/trigger.yearquarter.js +++ b/src/widget/yearquarter/trigger.yearquarter.js @@ -5,12 +5,16 @@ BI.DynamicYearQuarterTrigger = BI.inherit(BI.Trigger, { iconWidth: 24 }, - props: { + props: () => ({ extraCls: "bi-year-quarter-trigger", min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 - height: 24 - }, + height: 24, + watermark: { + year: BI.i18nText("BI-Basic_Unrestricted"), + quarter: BI.i18nText("BI-Basic_Unrestricted"), + }, + }), _init: function () { BI.DynamicYearQuarterTrigger.superclass._init.apply(this, arguments); @@ -96,7 +100,7 @@ BI.DynamicYearQuarterTrigger = BI.inherit(BI.Trigger, { BI.getQuarter(end) ); }, - watermark: BI.i18nText("BI-Basic_Unrestricted"), + watermark: isYear ? o.watermark?.year : o.watermark?.quarter, hgap: c.hgap, vgap: c.vgap, allowBlank: true @@ -272,4 +276,4 @@ BI.DynamicYearQuarterTrigger.EVENT_CONFIRM = "EVENT_CONFIRM"; BI.DynamicYearQuarterTrigger.EVENT_STOP = "EVENT_STOP"; BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; BI.DynamicYearQuarterTrigger.EVENT_VALID = "EVENT_VALID"; -BI.shortcut("bi.dynamic_year_quarter_trigger", BI.DynamicYearQuarterTrigger); \ No newline at end of file +BI.shortcut("bi.dynamic_year_quarter_trigger", BI.DynamicYearQuarterTrigger); diff --git a/src/widget/yearquarterinterval/yearquarterinterval.js b/src/widget/yearquarterinterval/yearquarterinterval.js index e148a92f0..f23134a09 100644 --- a/src/widget/yearquarterinterval/yearquarterinterval.js +++ b/src/widget/yearquarterinterval/yearquarterinterval.js @@ -23,8 +23,8 @@ BI.YearQuarterInterval = BI.inherit(BI.Single, { var self = this, o = this.options; o.value = o.value || {}; - this.left = this._createCombo(o.value.start); - this.right = this._createCombo(o.value.end); + this.left = this._createCombo(o.value.start, o.watermark?.start); + this.right = this._createCombo(o.value.end, o.watermark?.end); return [{ type: "bi.center", @@ -63,7 +63,7 @@ BI.YearQuarterInterval = BI.inherit(BI.Single, { }] }, - _createCombo: function (v) { + _createCombo: function (v, watermark) { var self = this, o = this.options; var combo = BI.createWidget({ type: "bi.dynamic_year_quarter_combo", @@ -73,6 +73,7 @@ BI.YearQuarterInterval = BI.inherit(BI.Single, { behaviors: o.behaviors, value: v, height: o.height, + watermark: watermark, listeners: [{ eventName: BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW, action: function () { @@ -204,4 +205,4 @@ BI.YearQuarterInterval.EVENT_VALID = "EVENT_VALID"; BI.YearQuarterInterval.EVENT_ERROR = "EVENT_ERROR"; BI.YearQuarterInterval.EVENT_CHANGE = "EVENT_CHANGE"; BI.YearQuarterInterval.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; -BI.shortcut("bi.year_quarter_interval", BI.YearQuarterInterval); \ No newline at end of file +BI.shortcut("bi.year_quarter_interval", BI.YearQuarterInterval); diff --git a/webpack/attachments.js b/webpack/attachments.js index bf16b1505..94274e1b3 100644 --- a/webpack/attachments.js +++ b/webpack/attachments.js @@ -233,13 +233,13 @@ const demo = [].concat( basicAttachmentMap.polyfill, basicAttachmentMap.core, basicAttachmentMap.fix, + basicAttachmentMap.config, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, basicAttachmentMap.router, sync(["public/less/app.less", "public/less/**/*.less"]), [fixCompact, workerCompact], - basicAttachmentMap.config, basicAttachmentMap.ts, sync(["demo/less/*.less", "demo/less/**/*.less", "demo/app.js", "demo/js/**/*.js", "demo/config.js"]), );