diff --git a/changelog.md b/changelog.md index ead4d92ef0..cf2eccb141 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,6 @@ # 更新日志 2.0(2020-07) +- 修复了日期类型控件设置一个不在minDate和maxDate之间的日期值时,面板灰化与翻页按钮状态不对的问题 - BI.OB的on方法返回一个解除监听的函数 - 修复了grid_view执行_unMount时不调用子组件的_unMount的问题 - combo新增belowMouse属性,允许popup在点击处弹出 diff --git a/src/case/calendar/calendar.js b/src/case/calendar/calendar.js index 9d2ed758b1..56507ab349 100644 --- a/src/case/calendar/calendar.js +++ b/src/case/calendar/calendar.js @@ -23,8 +23,6 @@ BI.Calendar = BI.inherit(BI.Widget, { var self = this, o = this.options, log = {}, De = BI.getDate(); var mins = o.min.match(/\d+/g); var maxs = o.max.match(/\d+/g); - Y < (mins[0] | 0) && (Y = (mins[0] | 0)); - Y > (maxs[0] | 0) && (Y = (maxs[0] | 0)); De.setFullYear(Y, M, D); log.ymd = [De.getFullYear(), De.getMonth(), De.getDate()]; diff --git a/src/widget/date/calendar/picker.date.js b/src/widget/date/calendar/picker.date.js index 2d840b2b07..bf6abd3781 100644 --- a/src/widget/date/calendar/picker.date.js +++ b/src/widget/date/calendar/picker.date.js @@ -136,49 +136,68 @@ BI.DatePicker = BI.inherit(BI.Widget, { if (!BI.contains(allowMonth, month)) { month = allowMonth[0]; } + return month; }, _getAllowMonths: function () { - var self = this, o = this.options; - var minDate = BI.parseDateTime(o.min, "%Y-%X-%d"); - var maxDate = BI.parseDateTime(o.max, "%Y-%X-%d"); - minDate.setDate(1); - maxDate.setDate(1); - var calcMin = BI.print(minDate, "%Y-%X-%d"); - var calcMax = BI.print(maxDate, "%Y-%X-%d"); + var obj = this._getCheckMinMaxDate(); + var year = this.year.getValue() || this._year; return BI.filter(BI.range(1, 13), function (idx, v) { - return !BI.checkDateVoid(self.year.getValue(), v, 1, calcMin, calcMax)[0]; + return !BI.checkDateVoid(year, v, 1, obj.min, obj.max)[0]; }); }, + // 上一年月不合法则灰化 _checkLeftValid: function () { - var o = this.options; - var minDate = BI.parseDateTime(o.min, "%Y-%X-%d"); - var valid = !(this._month <= (minDate.getMonth() + 1) && this._year <= minDate.getFullYear()); + var obj = this._getCheckMinMaxDate(); + var year = this._month === 1 ? this._year - 1 : this._year; + var month = this._month === 1 ? 12 : this.month - 1; + var valid = BI.isNull(BI.checkDateVoid(year, month, 1, obj.min, obj.max)[0]); this.left.setEnable(valid); return valid; }, + // 下一年月不合法则灰化 _checkRightValid: function () { - var o = this.options; - var maxDate = BI.parseDateTime(o.max, "%Y-%X-%d"); - var valid = !(this._month >= (maxDate.getMonth() + 1) && this._year >= maxDate.getFullYear()); + var obj = this._getCheckMinMaxDate(); + var year = this._month === 12 ? this._year + 1 : this._year; + var month = this._month === 12 ? 1 : this.month + 1; + var valid = BI.isNull(BI.checkDateVoid(year, month, 1, obj.min, obj.max)[0]); this.right.setEnable(valid); return valid; }, + _getCheckMinMaxDate() { + var o = this.options; + var minDate = BI.parseDateTime(o.min, "%Y-%X-%d"); + var maxDate = BI.parseDateTime(o.max, "%Y-%X-%d"); + minDate.setDate(1); + maxDate.setDate(1); + + return { + min: BI.print(minDate, "%Y-%X-%d"), + max: BI.print(maxDate, "%Y-%X-%d") + }; + }, + setMinDate: function (minDate) { this.options.min = minDate; this.year.setMinDate(minDate); + this._refreshMonth(); + this._checkLeftValid(); + this._checkRightValid(); }, setMaxDate: function (maxDate) { this.options.max = maxDate; this.year.setMaxDate(maxDate); + this._refreshMonth(); + this._checkLeftValid(); + this._checkRightValid(); }, setValue: function (ob) {