fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

212 lines
7.6 KiB

BI.DynamicDateTimeSelect = BI.inherit(BI.Widget, {
props: {
baseCls: "bi-date-time-select"
},
render: function () {
var self = this;
return {
type: "bi.center_adapt",
items: [{
type: "bi.vertical_adapt",
items: [{
el: {
type: "bi.number_editor",
ref: function () {
self.hour = this;
},
validationChecker: function (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 24;
},
errorText: function (v) {
if(BI.isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-23\"");
}
return BI.i18nText("BI-Numerical_Interval_Input_Data");
},
listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM,
action: function () {
var value = this.getValue();
self._checkHour(value);
this.setValue(self._formatValueToDoubleDigit(value));
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);
}
}, {
eventName: BI.SignEditor.EVENT_CHANGE,
action: function () {
var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.HOUR);
this.setValue(value);
}
}],
width: 60,
height: 24
}
}, {
type: "bi.label",
text: ":",
width: 20
}, {
type: "bi.number_editor",
ref: function () {
self.minute = this;
},
validationChecker: function (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 60;
},
errorText: function (v) {
if(BI.isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-59\"");
}
return BI.i18nText("BI-Numerical_Interval_Input_Data");
},
listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM,
action: function () {
var value = this.getValue();
self._checkMinute(value);
this.setValue(self._formatValueToDoubleDigit(value), BI.DynamicDateTimeSelect.MINUTE);
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);
}
}, {
eventName: BI.SignEditor.EVENT_CHANGE,
action: function () {
var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.MINUTE);
this.setValue(value);
}
}],
width: 60,
height: 24
}, {
type: "bi.label",
text: ":",
width: 20
}, {
type: "bi.number_editor",
ref: function () {
self.second = this;
},
validationChecker: function (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 60;
},
errorText: function (v) {
if(BI.isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-59\"");
}
return BI.i18nText("BI-Numerical_Interval_Input_Data");
},
listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM,
action: function () {
var value = this.getValue();
self._checkSecond(value);
this.setValue(self._formatValueToDoubleDigit(value));
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);
}
}],
width: 60,
height: 24
}]
}]
};
},
_checkBorder: function (v) {
v = v || {};
this._checkHour(v.hour);
this._checkMinute(v.minute);
this._checkSecond(v.second);
},
_checkHour: function (value) {
this.hour.setDownEnable(BI.parseInt(value) > 0);
this.hour.setUpEnable(BI.parseInt(value) < 23);
},
_checkMinute: function (value) {
this.minute.setDownEnable(BI.parseInt(value) > 0);
this.minute.setUpEnable(BI.parseInt(value) < 59);
},
_checkSecond: function (value) {
this.second.setDownEnable(BI.parseInt(value) > 0);
this.second.setUpEnable(BI.parseInt(value) < 59);
},
_autoSwitch: function (v, type) {
var limit = 0;
var value = v + "";
switch (type) {
case BI.DynamicDateTimeSelect.HOUR:
limit = 2;
break;
case BI.DynamicDateTimeSelect.MINUTE:
limit = 5;
break;
default:
break;
}
if(value.length === 1 && BI.parseInt(value) > limit) {
value = "0" + value;
}
if (value.length === 2) {
switch (type) {
case BI.DynamicDateTimeSelect.HOUR:
this.hour.isEditing() && this.minute.focus();
break;
case BI.DynamicDateTimeSelect.MINUTE:
this.minute.isEditing() && this.second.focus();
break;
case BI.DynamicDateTimeSelect.SECOND:
default:
break;
}
}
return value;
},
_formatValueToDoubleDigit: function (v) {
if(BI.isNull(v) || BI.isEmptyString(v)) {
v = 0;
}
var value = BI.parseInt(v);
if(value < 10) {
value = "0" + value;
}
return value;
},
_assertValue: function (v) {
v = v || {};
v.hour = this._formatValueToDoubleDigit(v.hour) || "00";
v.minute = this._formatValueToDoubleDigit(v.minute) || "00";
v.second = this._formatValueToDoubleDigit(v.second) || "00";
return v;
},
getValue: function () {
return {
hour: BI.parseInt(this.hour.getValue()),
minute: BI.parseInt(this.minute.getValue()),
second: BI.parseInt(this.second.getValue())
};
},
setValue: function (v) {
v = this._assertValue(v);
this.hour.setValue(v.hour);
this.minute.setValue(v.minute);
this.second.setValue(v.second);
this._checkBorder(v);
}
});
BI.DynamicDateTimeSelect.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.shortcut("bi.dynamic_date_time_select", BI.DynamicDateTimeSelect);
BI.extend(BI.DynamicDateTimeSelect, {
HOUR: 1,
MINUTE: 2,
SECOND: 3
});