Browse Source

Merge branch 'es6' of ssh://code.fineres.com:7999/~treecat/fineui into es6

es6
Treecat 2 years ago
parent
commit
12808c22af
  1. 1
      es6.js
  2. 6
      src/case/linearsegment/linear.segment.js
  3. 12
      src/core/2.base.js
  4. 212
      src/widget/datepane/card.static.datepane.js
  5. 326
      src/widget/datepane/datepane.js
  6. 2
      src/widget/datepane/index.js
  7. 124
      src/widget/datetime/datetime.combo.js
  8. 114
      src/widget/datetime/datetime.popup.js
  9. 92
      src/widget/datetime/datetime.trigger.js
  10. 3
      src/widget/datetime/index.js
  11. 195
      src/widget/datetimepane/card.static.datetimepane.js
  12. 319
      src/widget/datetimepane/datetimepane.js
  13. 2
      src/widget/datetimepane/index.js
  14. 206
      src/widget/dynamicdate/dynamicdate.caculate.js
  15. 535
      src/widget/dynamicdate/dynamicdate.card.js
  16. 406
      src/widget/dynamicdate/dynamicdate.combo.js
  17. 153
      src/widget/dynamicdate/dynamicdate.param.item.js
  18. 388
      src/widget/dynamicdate/dynamicdate.popup.js
  19. 449
      src/widget/dynamicdate/dynamicdate.trigger.js
  20. 6
      src/widget/dynamicdate/index.js
  21. 409
      src/widget/dynamicdatetime/dynamicdatetime.combo.js
  22. 417
      src/widget/dynamicdatetime/dynamicdatetime.popup.js
  23. 269
      src/widget/dynamicdatetime/dynamicdatetime.timeselect.js
  24. 536
      src/widget/dynamicdatetime/dynamicdatetime.trigger.js
  25. 4
      src/widget/dynamicdatetime/index.js
  26. 18
      src/widget/index.js
  27. 166
      src/widget/time/datetime.popup.js
  28. 3
      src/widget/time/index.js
  29. 450
      src/widget/time/time.combo.js
  30. 349
      src/widget/time/time.trigger.js

1
es6.js

@ -44,6 +44,7 @@ const target = [
"makeArrayByArray", "makeArrayByArray",
"VerticalAlign", "VerticalAlign",
"transformItems", "transformItems",
"print",
]; ];
// 加载模块 // 加载模块

6
src/case/linearsegment/linear.segment.js

@ -25,12 +25,12 @@ export class LinearSegment extends Widget {
value: o.value, value: o.value,
listeners: [{ listeners: [{
eventName: "__EVENT_CHANGE__", eventName: "__EVENT_CHANGE__",
action () { action: (...args) => {
this.fireEvent("__EVENT_CHANGE__", arguments); this.fireEvent("__EVENT_CHANGE__", ...args);
}, },
}, { }, {
eventName: "EVENT_CHANGE", eventName: "EVENT_CHANGE",
action () { action: () => {
this.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
}, },
}], }],

12
src/core/2.base.js

@ -1230,22 +1230,22 @@ export function parseDateTime(str, fmt) {
// if (!a[i]) { // if (!a[i]) {
// continue; // continue;
// } // }
if (isNaN(y)) { if (_global.isNaN(y)) {
y = today.getFullYear(); y = today.getFullYear();
} }
if (isNaN(m)) { if (_global.isNaN(m)) {
m = today.getMonth(); m = today.getMonth();
} }
if (isNaN(d)) { if (_global.isNaN(d)) {
d = today.getDate(); d = today.getDate();
} }
if (isNaN(hr)) { if (_global.isNaN(hr)) {
hr = today.getHours(); hr = today.getHours();
} }
if (isNaN(min)) { if (_global.isNaN(min)) {
min = today.getMinutes(); min = today.getMinutes();
} }
if (isNaN(sec)) { if (_global.isNaN(sec)) {
sec = today.getSeconds(); sec = today.getSeconds();
} }
if (y !== 0) { if (y !== 0) {

212
src/widget/datepane/card.static.datepane.js

@ -1,185 +1,207 @@
/** import { shortcut, Widget, extend, createWidget, bind, isNull, each, isNotEmptyString, getDate, getMonthDays } from "@/core";
* Created by zcf on 2017/2/20. import { DatePicker, DateCalendarPopup } from "../date/calendar";
*/ import { Calendar } from "@/case";
BI.StaticDatePaneCard = BI.inherit(BI.Widget, { import { Navigation } from "@/base";
_defaultConfig: function () {
var conf = BI.StaticDatePaneCard.superclass._defaultConfig.apply(this, arguments); @shortcut()
return BI.extend(conf, { export class StaticDatePaneCard extends Widget {
static xtype = "bi.static_date_pane_card";
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW =
"EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
_defaultConfig() {
const conf = super._defaultConfig(...arguments);
return extend(conf, {
baseCls: "bi-date-pane", baseCls: "bi-date-pane",
min: "1900-01-01", // 最小日期 min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期 max: "2099-12-31", // 最大日期
selectedTime: null selectedTime: null,
}); });
}, }
_init: function () {
BI.StaticDatePaneCard.superclass._init.apply(this, arguments); _init() {
var self = this, o = this.options; super._init(...arguments);
const o = this.options;
this.today = BI.getDate(); this.today = getDate();
this._year = this.today.getFullYear(); this._year = this.today.getFullYear();
this._month = this.today.getMonth() + 1; this._month = this.today.getMonth() + 1;
this.selectedTime = o.selectedTime || { this.selectedTime = o.selectedTime || {
year: this._year, year: this._year,
month: this._month month: this._month,
}; };
this.datePicker = BI.createWidget({ this.datePicker = createWidget({
type: "bi.date_picker", type: "bi.date_picker",
behaviors: o.behaviors, behaviors: o.behaviors,
min: o.min, min: o.min,
max: o.max max: o.max,
}); });
this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () { this.datePicker.on(DatePicker.EVENT_CHANGE, () => {
var value = self.datePicker.getValue(); const value = this.datePicker.getValue();
var monthDay = BI.getMonthDays(BI.getDate(value.year, value.month - 1, 1)); const monthDay = getMonthDays(
var day = self.selectedTime.day || 0; getDate(value.year, value.month - 1, 1)
);
let day = this.selectedTime.day || 0;
if (day > monthDay) { if (day > monthDay) {
day = monthDay; day = monthDay;
} }
self.selectedTime = { this.selectedTime = {
year: value.year, year: value.year,
month: value.month month: value.month,
}; };
day !== 0 && (self.selectedTime.day = day); day !== 0 && (this.selectedTime.day = day);
self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)); this.calendar.setSelect(
self.calendar.setValue(self.selectedTime); Calendar.getPageByDateJSON(this.selectedTime)
day !== 0 && self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); );
}); this.calendar.setValue(this.selectedTime);
this.datePicker.on(BI.DatePicker.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, function () { day !== 0 && this.fireEvent(DateCalendarPopup.EVENT_CHANGE);
self.fireEvent(BI.StaticDatePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
}); });
this.datePicker.on(
DatePicker.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW,
() => {
this.fireEvent(
StaticDatePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW
);
}
);
this.calendar = BI.createWidget({ this.calendar = createWidget({
direction: "custom", direction: "custom",
// logic: { // logic: {
// dynamic: false // dynamic: false
// }, // },
type: "bi.navigation", type: "bi.navigation",
tab: this.datePicker, tab: this.datePicker,
cardCreator: BI.bind(this._createNav, this) cardCreator: bind(this._createNav, this),
}); });
this.calendar.on(BI.Navigation.EVENT_CHANGE, function () { this.calendar.on(Navigation.EVENT_CHANGE, () => {
self.selectedTime = self.calendar.getValue(); this.selectedTime = this.calendar.getValue();
self.calendar.empty(); this.calendar.empty();
self.setValue(self.selectedTime); this.setValue(this.selectedTime);
self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); this.fireEvent(DateCalendarPopup.EVENT_CHANGE);
}); });
this.setValue(o.selectedTime); this.setValue(o.selectedTime);
BI.createWidget({ createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
items: [{ items: [
el: this.datePicker, {
height: 40 el: this.datePicker,
}, this.calendar], height: 40,
hgap: 10 },
this.calendar
],
hgap: 10,
}); });
BI.createWidget({ createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
items: [{ items: [
el: { {
type: "bi.layout", el: {
cls: "bi-split-top" type: "bi.layout",
}, cls: "bi-split-top",
height: 1, },
top: 40, height: 1,
left: 0, top: 40,
right: 0 left: 0,
}] right: 0,
}
],
}); });
}
}, _createNav(v) {
const date = Calendar.getDateJSONByPage(v);
_createNav: function (v) { const calendar = createWidget({
var date = BI.Calendar.getDateJSONByPage(v);
var calendar = BI.createWidget({
type: "bi.calendar", type: "bi.calendar",
logic: { logic: {
dynamic: false dynamic: false,
}, },
min: this.options.min, min: this.options.min,
max: this.options.max, max: this.options.max,
year: date.year, year: date.year,
month: date.month, month: date.month,
day: this.selectedTime.day day: this.selectedTime.day,
}); });
return calendar; return calendar;
}, }
_getNewCurrentDate: function () { _getNewCurrentDate() {
var today = BI.getDate(); const today = getDate();
return { return {
year: today.getFullYear(), year: today.getFullYear(),
month: today.getMonth() + 1 month: today.getMonth() + 1,
}; };
}, }
_setCalenderValue: function (date) { _setCalenderValue(date) {
this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)); this.calendar.setSelect(Calendar.getPageByDateJSON(date));
this.calendar.setValue(date); this.calendar.setValue(date);
this.selectedTime = date; this.selectedTime = date;
}, }
_setDatePicker: function (timeOb) { _setDatePicker(timeOb) {
if (BI.isNull(timeOb) || BI.isNull(timeOb.year) || BI.isNull(timeOb.month)) { if (isNull(timeOb) || isNull(timeOb.year) || isNull(timeOb.month)) {
this.datePicker.setValue(this._getNewCurrentDate()); this.datePicker.setValue(this._getNewCurrentDate());
} else { } else {
this.datePicker.setValue(timeOb); this.datePicker.setValue(timeOb);
} }
}, }
_setCalendar: function (timeOb) { _setCalendar(timeOb) {
if (BI.isNull(timeOb) || BI.isNull(timeOb.day)) { if (isNull(timeOb) || isNull(timeOb.day)) {
this.calendar.empty(); this.calendar.empty();
this._setCalenderValue(this._getNewCurrentDate()); this._setCalenderValue(this._getNewCurrentDate());
} else { } else {
this._setCalenderValue(timeOb); this._setCalenderValue(timeOb);
} }
}, }
_checkMin: function () { _checkMin() {
var o = this.options; const o = this.options;
BI.each(this.calendar.getAllCard(), function (idx, calendar) { each(this.calendar.getAllCard(), (idx, calendar) => {
calendar.setMinDate(o.min); calendar.setMinDate(o.min);
}); });
}, }
_checkMax: function () { _checkMax() {
var o = this.options; const o = this.options;
BI.each(this.calendar.getAllCard(), function (idx, calendar) { each(this.calendar.getAllCard(), (idx, calendar) => {
calendar.setMaxDate(o.max); calendar.setMaxDate(o.max);
}); });
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (BI.isNotEmptyString(this.options.min)) { if (isNotEmptyString(this.options.min)) {
this.options.min = minDate; this.options.min = minDate;
this.datePicker.setMinDate(minDate); this.datePicker.setMinDate(minDate);
this._checkMin(); this._checkMin();
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (BI.isNotEmptyString(this.options.max)) { if (isNotEmptyString(this.options.max)) {
this.options.max = maxDate; this.options.max = maxDate;
this.datePicker.setMaxDate(maxDate); this.datePicker.setMaxDate(maxDate);
this._checkMax(); this._checkMax();
} }
}, }
setValue: function (timeOb) { setValue(timeOb) {
this._setDatePicker(timeOb); this._setDatePicker(timeOb);
this._setCalendar(timeOb); this._setCalendar(timeOb);
}, }
getValue: function () { getValue() {
return this.selectedTime; return this.selectedTime;
} }
}
});
BI.StaticDatePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
BI.shortcut("bi.static_date_pane_card", BI.StaticDatePaneCard);

326
src/widget/datepane/datepane.js

@ -1,14 +1,26 @@
BI.DynamicDatePane = BI.inherit(BI.Widget, { import { shortcut, Widget, createItems, i18nText, isEmptyObject, isNull, isEmptyString, isNotEmptyObject, getDate } from "@/core";
import { ButtonGroup, TextButton } from "@/base";
import { DynamicDateHelper, DynamicDateCombo, DynamicDatePopup } from "../dynamicdate";
props: { @shortcut()
export class DynamicDatePane extends Widget {
static xtype = "bi.dynamic_date_pane";
static EVENT_CHANGE = "EVENT_CHANGE";
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
static Static = 1;
static Dynamic = 2;
props = {
baseCls: "bi-dynamic-date-pane", baseCls: "bi-dynamic-date-pane",
minDate: "1900-01-01", minDate: "1900-01-01",
maxDate: "2099-12-31", maxDate: "2099-12-31",
supportDynamic: true supportDynamic: true,
}, }
render: function () { render() {
var self = this, o = this.options; const o = this.options;
return { return {
type: "bi.vtape", type: "bi.vtape",
items: [{ items: [{
@ -17,201 +29,193 @@ BI.DynamicDatePane = BI.inherit(BI.Widget, {
invisible: !o.supportDynamic, invisible: !o.supportDynamic,
cls: "bi-split-bottom", cls: "bi-split-bottom",
height: 30, height: 30,
items: BI.createItems([{ items: createItems([{
text: BI.i18nText("BI-Multi_Date_YMD"), text: i18nText("BI-Multi_Date_YMD"),
value: BI.DynamicDatePane.Static value: DynamicDatePane.Static,
}, { }, {
text: BI.i18nText("BI-Basic_Dynamic_Title"), text: i18nText("BI-Basic_Dynamic_Title"),
value: BI.DynamicDatePane.Dynamic value: DynamicDatePane.Dynamic,
}], { }], {
textAlign: "center" textAlign: "center",
}), }),
listeners: [{ listeners: [{
eventName: BI.ButtonGroup.EVENT_CHANGE, eventName: ButtonGroup.EVENT_CHANGE,
action: function () { action: () => {
var value = this.getValue()[0]; let date;
self.dateTab.setSelect(value); const value = this.switcher.getValue()[0];
this.dateTab.setSelect(value);
switch (value) { switch (value) {
case BI.DynamicDatePane.Static: case DynamicDatePane.Static:
var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue()); date = DynamicDateHelper.getCalculation(this.dynamicPane.getValue());
self.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
}); });
break; break;
case BI.DynamicDatePane.Dynamic: case DynamicDatePane.Dynamic:
self.dynamicPane.setValue({ this.dynamicPane.setValue({
year: 0 year: 0,
}); });
break; break;
default: default:
break; break;
} }
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE); this.fireEvent(DynamicDatePane.EVENT_CHANGE);
} },
}], }],
ref: function () { ref: _ref => {
self.switcher = this; this.switcher = _ref;
} },
}, },
height: o.supportDynamic ? 30 : 0 height: o.supportDynamic ? 30 : 0,
}, { }, {
type: "bi.tab", type: "bi.tab",
ref: function () { ref: _ref => {
self.dateTab = this; this.dateTab = _ref;
}, },
showIndex: BI.DynamicDatePane.Static, showIndex: DynamicDatePane.Static,
cardCreator: function (v) { cardCreator: v => {
switch (v) { switch (v) {
case BI.DynamicDatePane.Static: case DynamicDatePane.Static:
return { return {
type: "bi.static_date_pane_card", type: "bi.static_date_pane_card",
min: o.minDate,
max: o.maxDate,
behaviors: o.behaviors,
listeners: [{
eventName: "EVENT_CHANGE",
action: () => {
this.fireEvent(DynamicDatePane.EVENT_CHANGE);
},
}, {
eventName: "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW",
action: () => {
this.fireEvent(DynamicDatePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
},
}],
ref: _ref => {
this.ymd = _ref;
},
};
case DynamicDatePane.Dynamic:
default:
return {
type: "bi.vtape",
items: [{
type: "bi.dynamic_date_card",
min: o.minDate, min: o.minDate,
max: o.maxDate, max: o.maxDate,
behaviors: o.behaviors, ref: _ref => {
listeners: [{ this.dynamicPane = _ref;
eventName: "EVENT_CHANGE", },
action: function () { }, {
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE); el: {
} type: "bi.center",
}, { items: [{
eventName: "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW", type: "bi.text_button",
action: function () { cls: "bi-high-light bi-border-top",
self.fireEvent(BI.DynamicDatePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); shadow: true,
} text: i18nText("BI-Basic_Clear"),
}], textHeight: 23,
ref: function () { listeners: [{
self.ymd = this; eventName: TextButton.EVENT_CHANGE,
} action: () => {
}; this.setValue();
case BI.DynamicDatePane.Dynamic: this.fireEvent(DynamicDatePane.EVENT_CHANGE);
default: },
return { }],
type: "bi.vtape", }, {
items: [{ type: "bi.text_button",
type: "bi.dynamic_date_card", cls: "bi-border-left bi-high-light bi-border-top",
min: o.minDate, textHeight: 23,
max: o.maxDate, shadow: true,
ref: function () { text: i18nText("BI-Basic_OK"),
self.dynamicPane = this; listeners: [{
} eventName: TextButton.EVENT_CHANGE,
}, { action: () => {
el: { const type = this.dateTab.getSelect();
type: "bi.center", if (type === DynamicDateCombo.Dynamic) {
items: [{ this.dynamicPane.checkValidation(true) && this.fireEvent(DynamicDatePopup.EVENT_CHANGE);
type: "bi.text_button", } else {
cls: "bi-high-light bi-border-top", this.fireEvent(DynamicDatePane.EVENT_CHANGE);
shadow: true,
text: BI.i18nText("BI-Basic_Clear"),
textHeight: 23,
listeners: [{
eventName: BI.TextButton.EVENT_CHANGE,
action: function () {
self.setValue();
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE);
} }
}] },
}, { }],
type: "bi.text_button", }],
cls: "bi-border-left bi-high-light bi-border-top", },
textHeight: 23, height: 24,
shadow: true, }],
text: BI.i18nText("BI-Basic_OK"), };
listeners: [{
eventName: BI.TextButton.EVENT_CHANGE,
action: function () {
var type = self.dateTab.getSelect();
if (type === BI.DynamicDateCombo.Dynamic) {
self.dynamicPane.checkValidation(true) && self.fireEvent(BI.DynamicDatePopup.EVENT_CHANGE);
} else {
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE);
}
}
}]
}]
},
height: 24
}]
};
} }
} },
}] }],
}; };
}, }
created: function () { created() {
this.setValue(this.options.value); this.setValue(this.options.value);
}, }
_checkValueValid: function (value) { _checkValueValid(value) {
return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value); return isNull(value) || isEmptyObject(value) || isEmptyString(value);
}, }
_checkValue: function (v) { _checkValue(v) {
switch (v.type) { switch (v.type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return BI.isNotEmptyObject(v.value); return isNotEmptyObject(v.value);
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
return true; return true;
} }
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (this.options.minDate !== minDate) { if (this.options.minDate !== minDate) {
this.options.minDate = minDate; this.options.minDate = minDate;
this.ymd.setMinDate(minDate); this.ymd.setMinDate(minDate);
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (this.options.maxDate !== maxDate) { if (this.options.maxDate !== maxDate) {
this.options.maxDate = maxDate; this.options.maxDate = maxDate;
this.ymd.setMaxDate(maxDate); this.ymd.setMaxDate(maxDate);
} }
}, }
setValue: function (v) { setValue(v) {
v = v || {}; v = v || {};
var type = v.type || BI.DynamicDateCombo.Static; const type = v.type || DynamicDateCombo.Static;
var value = v.value || v; const value = v.value || v;
this.switcher.setValue(type); this.switcher.setValue(type);
this.dateTab.setSelect(type); this.dateTab.setSelect(type);
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
this.dynamicPane.setValue(value); this.dynamicPane.setValue(value);
break; break;
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
if (this._checkValueValid(value)) { if (this._checkValueValid(value)) {
var date = BI.getDate(); const date = getDate();
this.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1 month: date.getMonth() + 1,
}); });
} else { } else {
this.ymd.setValue(value); this.ymd.setValue(value);
} }
break; break;
} }
}, }
getValue: function () { getValue() {
var type = this.dateTab.getSelect(); const type = this.dateTab.getSelect();
return { return {
type: type, type,
value: type === BI.DynamicDatePane.Static ? this.dateTab.getValue() : this.dynamicPane.getValue() value: type === DynamicDatePane.Static ? this.dateTab.getValue() : this.dynamicPane.getValue(),
}; };
} }
}); }
BI.DynamicDatePane.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDatePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_pane", BI.DynamicDatePane);
BI.extend(BI.DynamicDatePane, {
Static: 1,
Dynamic: 2
});

2
src/widget/datepane/index.js

@ -0,0 +1,2 @@
export { StaticDatePaneCard } from "./card.static.datepane";
export { DynamicDatePane } from "./datepane";

124
src/widget/datetime/datetime.combo.js

@ -1,64 +1,75 @@
/** import { shortcut, extend, getDate, isNotNull, createWidget } from "@/core";
* Created by Urthur on 2017/7/14. import { Single, Combo, IconButton } from "@/base";
*/ import { DateTimePopup } from "./datetime.popup";
BI.DateTimeCombo = BI.inherit(BI.Single, {
constants: { @shortcut()
export class DateTimeCombo extends Single {
static xtype = "bi.date_time_combo"
constants = {
popupHeight: 290, popupHeight: 290,
popupWidth: 270, popupWidth: 270,
comboAdjustHeight: 1, comboAdjustHeight: 1,
border: 1, border: 1,
iconWidth: 24 iconWidth: 24,
}, };
_defaultConfig: function (conf) {
return BI.extend(BI.DateTimeCombo.superclass._defaultConfig.apply(this, arguments), { static EVENT_CANCEL = "EVENT_CANCEL"
baseCls: "bi-date-time-combo bi-focus-shadow " + (conf.simple ? "bi-border-bottom" : "bi-border bi-border-radius"), static EVENT_CONFIRM = "EVENT_CONFIRM"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"
_defaultConfig(conf) {
return extend(super._defaultConfig(...arguments), {
baseCls: `bi-date-time-combo bi-focus-shadow ${conf.simple ? "bi-border-bottom" : "bi-border bi-border-radius"}`,
width: 200, width: 200,
height: 24, height: 24,
minDate: "1900-01-01", minDate: "1900-01-01",
maxDate: "2099-12-31" maxDate: "2099-12-31",
}); });
}, }
_init: function () {
BI.DateTimeCombo.superclass._init.apply(this, arguments); _init() {
var self = this, opts = this.options; super._init(...arguments);
var date = BI.getDate(); const opts = this.options;
this.storeValue = BI.isNotNull(opts.value) ? opts.value : { const date = getDate();
this.storeValue = isNotNull(opts.value) ? opts.value : {
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate(), day: date.getDate(),
hour: date.getHours(), hour: date.getHours(),
minute: date.getMinutes(), minute: date.getMinutes(),
second: date.getSeconds() second: date.getSeconds(),
}; };
this.trigger = BI.createWidget({ this.trigger = createWidget({
type: "bi.date_time_trigger", type: "bi.date_time_trigger",
height: opts.height, height: opts.height,
min: opts.minDate, min: opts.minDate,
max: opts.maxDate, max: opts.maxDate,
value: opts.value value: opts.value,
}); });
this.popup = BI.createWidget({ this.popup = createWidget({
type: "bi.date_time_popup", type: "bi.date_time_popup",
behaviors: opts.behaviors, behaviors: opts.behaviors,
min: opts.minDate, min: opts.minDate,
max: opts.maxDate, max: opts.maxDate,
value: opts.value value: opts.value,
}); });
self.setValue(this.storeValue); this.setValue(this.storeValue);
this.popup.on(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE, function () { this.popup.on(DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE, () => {
self.setValue(self.storeValue); this.setValue(this.storeValue);
self.hidePopupView(); this.hidePopupView();
self.fireEvent(BI.DateTimeCombo.EVENT_CANCEL); this.fireEvent(DateTimeCombo.EVENT_CANCEL);
}); });
this.popup.on(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE, function () { this.popup.on(DateTimePopup.BUTTON_OK_EVENT_CHANGE, () => {
self.storeValue = self.popup.getValue(); this.storeValue = this.popup.getValue();
self.setValue(self.storeValue); this.setValue(this.storeValue);
self.hidePopupView(); this.hidePopupView();
self.fireEvent(BI.DateTimeCombo.EVENT_CONFIRM); this.fireEvent(DateTimeCombo.EVENT_CONFIRM);
}); });
this.combo = BI.createWidget({ this.combo = createWidget({
type: "bi.combo", type: "bi.combo",
container: opts.container, container: opts.container,
toggle: false, toggle: false,
@ -69,56 +80,51 @@ BI.DateTimeCombo = BI.inherit(BI.Single, {
popup: { popup: {
el: this.popup, el: this.popup,
width: this.constants.popupWidth, width: this.constants.popupWidth,
stopPropagation: false stopPropagation: false,
}, },
// DEC-4250 和复选下拉一样,点击不收起 // DEC-4250 和复选下拉一样,点击不收起
hideChecker: function (e) { hideChecker (e) {
return triggerBtn.element.find(e.target).length === 0; return triggerBtn.element.find(e.target).length === 0;
} },
}); });
this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () { this.combo.on(Combo.EVENT_BEFORE_POPUPVIEW, () => {
self.popup.setValue(self.storeValue); this.popup.setValue(this.storeValue);
self.fireEvent(BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW); this.fireEvent(DateTimeCombo.EVENT_BEFORE_POPUPVIEW);
}); });
var triggerBtn = BI.createWidget({ const triggerBtn = createWidget({
type: "bi.icon_button", type: "bi.icon_button",
cls: "bi-trigger-icon-button date-font", cls: "bi-trigger-icon-button date-font",
width: this.constants.iconWidth, width: this.constants.iconWidth,
height: opts.height, height: opts.height,
}); });
triggerBtn.on(BI.IconButton.EVENT_CHANGE, function () { triggerBtn.on(IconButton.EVENT_CHANGE, () => {
if (self.combo.isViewVisible()) { if (this.combo.isViewVisible()) {
// self.combo.hideView(); // this.combo.hideView();
} else { } else {
self.combo.showView(); this.combo.showView();
} }
}); });
BI.createWidget({ createWidget({
type: "bi.htape", type: "bi.htape",
columnSize: ["", this.constants.iconWidth], columnSize: ["", this.constants.iconWidth],
element: this, element: this,
items: [this.combo, triggerBtn] items: [this.combo, triggerBtn],
}); });
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
this.popup.setValue(v); this.popup.setValue(v);
this.trigger.setValue(v); this.trigger.setValue(v);
}, }
getValue: function () {
getValue() {
return this.storeValue; return this.storeValue;
}, }
hidePopupView: function () { hidePopupView() {
this.combo.hideView(); this.combo.hideView();
} }
}); }
BI.DateTimeCombo.EVENT_CANCEL = "EVENT_CANCEL";
BI.DateTimeCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.DateTimeCombo.EVENT_CHANGE = "EVENT_CHANGE";
BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
BI.shortcut("bi.date_time_combo", BI.DateTimeCombo);

114
src/widget/datetime/datetime.popup.js

@ -1,113 +1,121 @@
/** import { shortcut, Widget, extend, createWidget, i18nText, isNull, getDate } from "@/core";
* Created by Urthur on 2017/7/14. import { TextButton } from "@/base";
*/ import { DateCalendarPopup } from "../date/calendar";
BI.DateTimePopup = BI.inherit(BI.Widget, {
_defaultConfig: function () { @shortcut()
return BI.extend(BI.DateTimePopup.superclass._defaultConfig.apply(this, arguments), { export class DateTimePopup extends Widget {
static xtype = "bi.date_time_popup"
static BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE"
static BUTTON_CANCEL_EVENT_CHANGE = "BUTTON_CANCEL_EVENT_CHANGE"
static CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE"
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-date-time-popup", baseCls: "bi-date-time-popup",
width: 268, width: 268,
height: 374 height: 374,
}); });
}, }
_init: function () {
BI.DateTimePopup.superclass._init.apply(this, arguments); _init() {
var self = this, opts = this.options; super._init(...arguments);
this.cancelButton = BI.createWidget({ const opts = this.options;
this.cancelButton = createWidget({
type: "bi.text_button", type: "bi.text_button",
cls: "multidate-popup-button bi-border-top bi-border-right", cls: "multidate-popup-button bi-border-top bi-border-right",
shadow: true, shadow: true,
text: BI.i18nText("BI-Basic_Cancel") text: i18nText("BI-Basic_Cancel"),
}); });
this.cancelButton.on(BI.TextButton.EVENT_CHANGE, function () { this.cancelButton.on(TextButton.EVENT_CHANGE, () => {
self.fireEvent(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE); this.fireEvent(DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE);
}); });
this.okButton = BI.createWidget({ this.okButton = createWidget({
type: "bi.text_button", type: "bi.text_button",
cls: "multidate-popup-button bi-border-top", cls: "multidate-popup-button bi-border-top",
shadow: true, shadow: true,
text: BI.i18nText("BI-Basic_OK") text: i18nText("BI-Basic_OK"),
}); });
this.okButton.on(BI.TextButton.EVENT_CHANGE, function () { this.okButton.on(TextButton.EVENT_CHANGE, () => {
self.fireEvent(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE); this.fireEvent(DateTimePopup.BUTTON_OK_EVENT_CHANGE);
}); });
this.dateCombo = BI.createWidget({ this.dateCombo = createWidget({
type: "bi.date_calendar_popup", type: "bi.date_calendar_popup",
behaviors: opts.behaviors, behaviors: opts.behaviors,
min: self.options.min, min: this.options.min,
max: self.options.max max: this.options.max,
}); });
self.dateCombo.on(BI.DateCalendarPopup.EVENT_CHANGE, function () { this.dateCombo.on(DateCalendarPopup.EVENT_CHANGE, () => {
self.fireEvent(BI.DateTimePopup.CALENDAR_EVENT_CHANGE); this.fireEvent(DateTimePopup.CALENDAR_EVENT_CHANGE);
}); });
this.dateButton = BI.createWidget({ this.dateButton = createWidget({
type: "bi.grid", type: "bi.grid",
items: [[this.cancelButton, this.okButton]] items: [
[this.cancelButton, this.okButton]
],
}); });
BI.createWidget({ createWidget({
element: this, element: this,
type: "bi.vtape", type: "bi.vtape",
items: [{ items: [{
el: this.dateCombo el: this.dateCombo,
}, { }, {
el: { el: {
type: "bi.center_adapt", type: "bi.center_adapt",
cls: "bi-split-top", cls: "bi-split-top",
items: [{ items: [{
type: "bi.dynamic_date_time_select", type: "bi.dynamic_date_time_select",
ref: function (_ref) { ref: _ref => {
self.timeSelect = _ref; this.timeSelect = _ref;
} },
}] }],
}, },
height: 50 height: 50,
}, { }, {
el: this.dateButton, el: this.dateButton,
height: 30 height: 30,
}] }],
}); });
this.setValue(opts.value); this.setValue(opts.value);
}, }
setValue: function (v) { setValue(v) {
var value = v, date; const value = v;
if (BI.isNull(value)) { let date;
date = BI.getDate(); if (isNull(value)) {
date = getDate();
this.dateCombo.setValue({ this.dateCombo.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
}); });
this.timeSelect.setValue({ this.timeSelect.setValue({
hour: date.getHours(), hour: date.getHours(),
minute: date.getMinutes(), minute: date.getMinutes(),
second: date.getSeconds() second: date.getSeconds(),
}); });
} else { } else {
this.dateCombo.setValue({ this.dateCombo.setValue({
year: value.year, year: value.year,
month: value.month, month: value.month,
day: value.day day: value.day,
}); });
this.timeSelect.setValue({ this.timeSelect.setValue({
hour: value.hour, hour: value.hour,
minute: value.minute, minute: value.minute,
second: value.second second: value.second,
}); });
} }
}, }
getValue: function () { getValue() {
return BI.extend({ return extend({
year: this.dateCombo.getValue().year, year: this.dateCombo.getValue().year,
month: this.dateCombo.getValue().month, month: this.dateCombo.getValue().month,
day: this.dateCombo.getValue().day day: this.dateCombo.getValue().day,
}, this.timeSelect.getValue()); }, this.timeSelect.getValue());
} }
}); }
BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE";
BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE = "BUTTON_CANCEL_EVENT_CHANGE";
BI.DateTimePopup.CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE";
BI.shortcut("bi.date_time_popup", BI.DateTimePopup);

92
src/widget/datetime/datetime.trigger.js

@ -1,63 +1,75 @@
/** import {
* Created by Urthur on 2017/7/14. shortcut,
*/ extend,
BI.DateTimeTrigger = BI.inherit(BI.Trigger, { createWidget,
_const: { isNull,
getDate,
print
} from "@/core";
import {
Trigger
} from "@/base";
@shortcut()
export class DateTimeTrigger extends Trigger {
static xtype = "bi.date_time_trigger"
_const = {
hgap: 4, hgap: 4,
iconWidth:24 iconWidth: 24,
}, };
_defaultConfig: function () { _defaultConfig() {
return BI.extend(BI.DateTimeTrigger.superclass._defaultConfig.apply(this, arguments), { return extend(super._defaultConfig(...arguments), {
extraCls: "bi-date-time-trigger", extraCls: "bi-date-time-trigger",
min: "1900-01-01", // 最小日期 min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期 max: "2099-12-31", // 最大日期
height: 24, height: 24,
width: 200 width: 200,
}); });
}, }
_init: function () {
BI.DateTimeTrigger.superclass._init.apply(this, arguments); _init() {
var self = this, o = this.options, c = this._const; super._init(...arguments);
this.text = BI.createWidget({ const o = this.options,
c = this._const;
this.text = createWidget({
type: "bi.label", type: "bi.label",
textAlign: "left", textAlign: "left",
height: o.height, height: o.height,
width: o.width, width: o.width,
hgap: c.hgap hgap: c.hgap,
}); });
BI.createWidget({ createWidget({
type: "bi.htape", type: "bi.htape",
element: this, element: this,
items: [{ items: [{
el: this.text el: this.text,
},{ }, {
el: BI.createWidget(), el: createWidget(),
width: this._const.iconWidth width: this._const.iconWidth,
}] }],
}); });
this.setValue(o.value); this.setValue(o.value);
}, }
_printTime: function (v) { _printTime(v) {
return v < 10 ? "0" + v : v; return v < 10 ? `0${v}` : v;
}, }
setValue: function (v) {
var self = this;
var value = v, dateStr;
if(BI.isNull(value)) {
value = BI.getDate();
dateStr = BI.print(value, "%Y-%X-%d %H:%M:%S");
} else {
var date = BI.getDate(value.year, value.month - 1, value.day, value.hour, value.minute, value.second);
dateStr = BI.print(date, "%Y-%X-%d %H:%M:%S");
setValue(v) {
let value = v,
dateStr;
if (isNull(value)) {
value = getDate();
dateStr = print(value, "%Y-%X-%d %H:%M:%S");
} else {
const date = getDate(value.year, value.month - 1, value.day, value.hour, value.minute, value.second);
dateStr = print(date, "%Y-%X-%d %H:%M:%S");
} }
this.text.setText(dateStr); this.text.setText(dateStr);
this.text.setTitle(dateStr); this.text.setTitle(dateStr);
} }
}
});
BI.shortcut("bi.date_time_trigger", BI.DateTimeTrigger);

3
src/widget/datetime/index.js

@ -0,0 +1,3 @@
export { DateTimeCombo } from "./datetime.combo";
export { DateTimePopup } from "./datetime.popup";
export { DateTimeTrigger } from "./datetime.trigger";

195
src/widget/datetimepane/card.static.datetimepane.js

@ -1,205 +1,216 @@
BI.StaticDateTimePaneCard = BI.inherit(BI.Widget, { import { shortcut, Widget, extend, getDate, createWidget, bind, isNull, each, isNotEmptyString, getMonthDays } from "@/core";
_defaultConfig: function () { import { DatePicker, DateCalendarPopup } from "../date/calendar";
var conf = BI.StaticDateTimePaneCard.superclass._defaultConfig.apply(this, arguments); import { Calendar } from "@/case";
return BI.extend(conf, { import { Navigation } from "@/base";
import { DynamicDateTimeSelect } from "../dynamicdatetime/dynamicdatetime.timeselect";
@shortcut()
export class StaticDateTimePaneCard extends Widget {
static xtype = "bi.static_date_time_pane_card"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
_defaultConfig() {
const conf = super._defaultConfig(...arguments);
return extend(conf, {
baseCls: "bi-date-time-pane", baseCls: "bi-date-time-pane",
min: "1900-01-01", // 最小日期 min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期 max: "2099-12-31", // 最大日期
selectedTime: null selectedTime: null,
}); });
}, }
_init: function () {
BI.StaticDateTimePaneCard.superclass._init.apply(this, arguments); _init() {
var self = this, o = this.options; super._init(...arguments);
const o = this.options;
this.today = BI.getDate(); this.today = getDate();
this._year = this.today.getFullYear(); this._year = this.today.getFullYear();
this._month = this.today.getMonth() + 1; this._month = this.today.getMonth() + 1;
this.selectedTime = o.selectedTime || { this.selectedTime = o.selectedTime || {
year: this._year, year: this._year,
month: this._month month: this._month,
}; };
this.datePicker = BI.createWidget({ this.datePicker = createWidget({
type: "bi.date_picker", type: "bi.date_picker",
behaviors: o.behaviors, behaviors: o.behaviors,
min: o.min, min: o.min,
max: o.max max: o.max,
}); });
this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () { this.datePicker.on(DatePicker.EVENT_CHANGE, () => {
var value = self.datePicker.getValue(); const value = this.datePicker.getValue();
var monthDay = BI.getMonthDays(BI.getDate(value.year, value.month - 1, 1)); const monthDay = getMonthDays(getDate(value.year, value.month - 1, 1));
var day = self.selectedTime.day || 0; let day = this.selectedTime.day || 0;
if (day > monthDay) { if (day > monthDay) {
day = monthDay; day = monthDay;
} }
self.selectedTime = BI.extend(self.selectedTime, { this.selectedTime = extend(this.selectedTime, {
year: value.year, year: value.year,
month: value.month month: value.month,
}); });
day !== 0 && (self.selectedTime.day = day); day !== 0 && (this.selectedTime.day = day);
self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)); this.calendar.setSelect(Calendar.getPageByDateJSON(this.selectedTime));
self.calendar.setValue(self.selectedTime); this.calendar.setValue(this.selectedTime);
day !== 0 && self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); day !== 0 && this.fireEvent(DateCalendarPopup.EVENT_CHANGE);
}); });
this.datePicker.on(BI.DatePicker.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, function () { this.datePicker.on(DatePicker.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, () => {
self.fireEvent(BI.StaticDateTimePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); this.fireEvent(StaticDateTimePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
}); });
this.calendar = BI.createWidget({ this.calendar = createWidget({
direction: "custom", direction: "custom",
// logic: { // logic: {
// dynamic: false // dynamic: false
// }, // },
type: "bi.navigation", type: "bi.navigation",
tab: this.datePicker, tab: this.datePicker,
cardCreator: BI.bind(this._createNav, this) cardCreator: bind(this._createNav, this),
}); });
this.calendar.on(BI.Navigation.EVENT_CHANGE, function () { this.calendar.on(Navigation.EVENT_CHANGE, () => {
self.selectedTime = BI.extend(self.calendar.getValue(), self.timeSelect.getValue()); this.selectedTime = extend(this.calendar.getValue(), this.timeSelect.getValue());
self.calendar.empty(); this.calendar.empty();
self.setValue(self.selectedTime); this.setValue(this.selectedTime);
self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE); this.fireEvent(DateCalendarPopup.EVENT_CHANGE);
}); });
BI.createWidget({ createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
hgap: 10, hgap: 10,
items: [{ items: [{
el: this.datePicker, el: this.datePicker,
height: 40 height: 40,
}, this.calendar, { }, this.calendar, {
el: { el: {
type: "bi.dynamic_date_time_select", type: "bi.dynamic_date_time_select",
cls: "bi-split-top", cls: "bi-split-top",
ref: function () { ref: _ref => {
self.timeSelect = this; this.timeSelect = _ref;
}, },
listeners: [{ listeners: [{
eventName: BI.DynamicDateTimeSelect.EVENT_CONFIRM, eventName: DynamicDateTimeSelect.EVENT_CONFIRM,
action: function () { action: () => {
self.selectedTime = BI.extend(self.calendar.getValue(), self.timeSelect.getValue()); this.selectedTime = extend(this.calendar.getValue(), this.timeSelect.getValue());
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}] }],
}, },
height: 40 height: 40,
}] }],
}); });
BI.createWidget({ createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
items: [{ items: [{
el: { el: {
type: "bi.layout", type: "bi.layout",
cls: "bi-split-top" cls: "bi-split-top",
}, },
height: 1, height: 1,
top: 40, top: 40,
left: 0, left: 0,
right: 0 right: 0,
}] }],
}); });
this.setValue(o.selectedTime); this.setValue(o.selectedTime);
}
}, _createNav(v) {
const date = Calendar.getDateJSONByPage(v);
_createNav: function (v) { const calendar = createWidget({
var date = BI.Calendar.getDateJSONByPage(v);
var calendar = BI.createWidget({
type: "bi.calendar", type: "bi.calendar",
logic: { logic: {
dynamic: false dynamic: false,
}, },
min: this.options.min, min: this.options.min,
max: this.options.max, max: this.options.max,
year: date.year, year: date.year,
month: date.month, month: date.month,
day: this.selectedTime.day day: this.selectedTime.day,
}); });
return calendar; return calendar;
}, }
_getNewCurrentDate: function () { _getNewCurrentDate() {
var today = BI.getDate(); const today = getDate();
return { return {
year: today.getFullYear(), year: today.getFullYear(),
month: today.getMonth() + 1 month: today.getMonth() + 1,
}; };
}, }
_setCalenderValue: function (date) { _setCalenderValue(date) {
this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)); this.calendar.setSelect(Calendar.getPageByDateJSON(date));
this.calendar.setValue(date); this.calendar.setValue(date);
this.selectedTime = BI.extend({}, this.timeSelect.getValue(), date); this.selectedTime = extend({}, this.timeSelect.getValue(), date);
}, }
_setDatePicker: function (timeOb) { _setDatePicker(timeOb) {
if (BI.isNull(timeOb) || BI.isNull(timeOb.year) || BI.isNull(timeOb.month)) { if (isNull(timeOb) || isNull(timeOb.year) || isNull(timeOb.month)) {
this.datePicker.setValue(this._getNewCurrentDate()); this.datePicker.setValue(this._getNewCurrentDate());
} else { } else {
this.datePicker.setValue(timeOb); this.datePicker.setValue(timeOb);
} }
}, }
_setCalendar: function (timeOb) { _setCalendar(timeOb) {
if (BI.isNull(timeOb) || BI.isNull(timeOb.day)) { if (isNull(timeOb) || isNull(timeOb.day)) {
this.calendar.empty(); this.calendar.empty();
this._setCalenderValue(this._getNewCurrentDate()); this._setCalenderValue(this._getNewCurrentDate());
} else { } else {
this._setCalenderValue(timeOb); this._setCalenderValue(timeOb);
} }
}, }
_checkMin: function () { _checkMin() {
var o = this.options; const o = this.options;
BI.each(this.calendar.getAllCard(), function (idx, calendar) { each(this.calendar.getAllCard(), (idx, calendar) => {
calendar.setMinDate(o.min); calendar.setMinDate(o.min);
}); });
}, }
_checkMax: function () { _checkMax() {
var o = this.options; const o = this.options;
BI.each(this.calendar.getAllCard(), function (idx, calendar) { each(this.calendar.getAllCard(), (idx, calendar) => {
calendar.setMaxDate(o.max); calendar.setMaxDate(o.max);
}); });
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (BI.isNotEmptyString(this.options.min)) { if (isNotEmptyString(this.options.min)) {
this.options.min = minDate; this.options.min = minDate;
this.datePicker.setMinDate(minDate); this.datePicker.setMinDate(minDate);
this._checkMin(); this._checkMin();
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (BI.isNotEmptyString(this.options.max)) { if (isNotEmptyString(this.options.max)) {
this.options.max = maxDate; this.options.max = maxDate;
this.datePicker.setMaxDate(maxDate); this.datePicker.setMaxDate(maxDate);
this._checkMax(); this._checkMax();
} }
}, }
setValue: function (timeOb) { setValue(timeOb) {
timeOb = timeOb || {}; timeOb = timeOb || {};
this._setDatePicker(timeOb); this._setDatePicker(timeOb);
this._setCalendar(timeOb); this._setCalendar(timeOb);
this.timeSelect.setValue({ this.timeSelect.setValue({
hour: timeOb.hour, hour: timeOb.hour,
minute: timeOb.minute, minute: timeOb.minute,
second: timeOb.second second: timeOb.second,
}); });
}, }
getValue: function () { getValue() {
return this.selectedTime; return this.selectedTime;
} }
}
});
BI.StaticDateTimePaneCard.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.static_date_time_pane_card", BI.StaticDateTimePaneCard);

319
src/widget/datetimepane/datetimepane.js

@ -1,14 +1,28 @@
BI.DynamicDateTimePane = BI.inherit(BI.Widget, { import { shortcut, Widget, createItems, i18nText, isNull, isEmptyObject, isEmptyString, isNotEmptyObject, getDate } from "@/core";
import { ButtonGroup, TextButton } from "@/base";
import { DynamicDatePane } from "../datepane";
import { DynamicDateCombo, DynamicDateHelper } from "../dynamicdate";
props: { @shortcut()
export class DynamicDateTimePane extends Widget {
static xtype = "bi.dynamic_date_time_pane"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
static Static = 1
static Dynamic = 2
props = {
baseCls: "bi-dynamic-date-pane", baseCls: "bi-dynamic-date-pane",
minDate: "1900-01-01", minDate: "1900-01-01",
maxDate: "2099-12-31", maxDate: "2099-12-31",
supportDynamic: true, supportDynamic: true,
}, };
render: function () { render() {
var self = this, o = this.options; const o = this.options;
return { return {
type: "bi.vtape", type: "bi.vtape",
items: [{ items: [{
@ -17,198 +31,191 @@ BI.DynamicDateTimePane = BI.inherit(BI.Widget, {
invisible: !o.supportDynamic, invisible: !o.supportDynamic,
cls: "bi-split-bottom", cls: "bi-split-bottom",
height: 30, height: 30,
items: BI.createItems([{ items: createItems([{
text: BI.i18nText("BI-Multi_Date_YMD"), text: i18nText("BI-Multi_Date_YMD"),
value: BI.DynamicDateTimePane.Static value: DynamicDateTimePane.Static,
}, { }, {
text: BI.i18nText("BI-Basic_Dynamic_Title"), text: i18nText("BI-Basic_Dynamic_Title"),
value: BI.DynamicDateTimePane.Dynamic value: DynamicDateTimePane.Dynamic,
}], { }], {
textAlign: "center" textAlign: "center",
}), }),
listeners: [{ listeners: [{
eventName: BI.ButtonGroup.EVENT_CHANGE, eventName: ButtonGroup.EVENT_CHANGE,
action: function () { action: () => {
var value = this.getValue()[0]; const value = this.switcher.getValue()[0];
self.dateTab.setSelect(value); let date;
this.dateTab.setSelect(value);
switch (value) { switch (value) {
case BI.DynamicDateTimePane.Static: case DynamicDateTimePane.Static:
var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue()); date = DynamicDateHelper.getCalculation(this.dynamicPane.getValue());
self.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
}); });
break; break;
case BI.DynamicDateTimePane.Dynamic: case DynamicDateTimePane.Dynamic:
self.dynamicPane.setValue({ this.dynamicPane.setValue({
year: 0 year: 0,
}); });
break; break;
default: default:
break; break;
} }
self.fireEvent(BI.DynamicDateTimePane.EVENT_CHANGE); this.fireEvent(DynamicDateTimePane.EVENT_CHANGE);
} },
}], }],
ref: function () { ref: _ref => {
self.switcher = this; this.switcher = _ref;
} },
}, },
height: o.supportDynamic ? 30 : 0 height: o.supportDynamic ? 30 : 0,
}, { }, {
type: "bi.tab", type: "bi.tab",
ref: function () { ref: _ref => {
self.dateTab = this; this.dateTab = _ref;
}, },
showIndex: BI.DynamicDateTimePane.Static, showIndex: DynamicDateTimePane.Static,
cardCreator: function (v) { cardCreator: v => {
switch (v) { switch (v) {
case BI.DynamicDateTimePane.Static: case DynamicDateTimePane.Static:
return { return {
type: "bi.static_date_time_pane_card", type: "bi.static_date_time_pane_card",
min: o.minDate,
max: o.maxDate,
behaviors: o.behaviors,
listeners: [{
eventName: "EVENT_CHANGE",
action: () => {
this.fireEvent(DynamicDateTimePane.EVENT_CHANGE);
},
}, {
eventName: "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW",
action: () => {
this.fireEvent(DynamicDateTimePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
},
}],
ref: _ref => {
this.ymd = _ref;
},
};
case DynamicDateTimePane.Dynamic:
default:
return {
type: "bi.vtape",
items: [{
type: "bi.dynamic_date_card",
min: o.minDate, min: o.minDate,
max: o.maxDate, max: o.maxDate,
behaviors: o.behaviors, ref: _ref => {
listeners: [{ this.dynamicPane = _ref;
eventName: "EVENT_CHANGE", },
action: function () { }, {
self.fireEvent(BI.DynamicDateTimePane.EVENT_CHANGE); el: {
} type: "bi.center",
}, { items: [{
eventName: "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW", type: "bi.text_button",
action: function () { cls: "bi-high-light bi-border-top",
self.fireEvent(BI.DynamicDateTimePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); shadow: true,
} text: i18nText("BI-Basic_Clear"),
}], textHeight: 23,
ref: function () { listeners: [{
self.ymd = this; eventName: TextButton.EVENT_CHANGE,
} action: () => {
}; this.setValue();
case BI.DynamicDateTimePane.Dynamic: this.fireEvent(DynamicDatePane.EVENT_CHANGE);
default: },
return { }],
type: "bi.vtape", }, {
items: [{ type: "bi.text_button",
type: "bi.dynamic_date_card", cls: "bi-border-left bi-high-light bi-border-top",
min: o.minDate, textHeight: 23,
max: o.maxDate, shadow: true,
ref: function () { text: i18nText("BI-Basic_OK"),
self.dynamicPane = this; listeners: [{
} eventName: TextButton.EVENT_CHANGE,
}, { action: () => {
el: { const type = this.dateTab.getSelect();
type: "bi.center", if (type === DynamicDateCombo.Dynamic) {
items: [{ this.dynamicPane.checkValidation(true) && this.fireEvent(DynamicDatePane.EVENT_CHANGE);
type: "bi.text_button", } else {
cls: "bi-high-light bi-border-top", this.fireEvent(DynamicDatePane.EVENT_CHANGE);
shadow: true,
text: BI.i18nText("BI-Basic_Clear"),
textHeight: 23,
listeners: [{
eventName: BI.TextButton.EVENT_CHANGE,
action: function () {
self.setValue();
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE);
} }
}] },
}, { }],
type: "bi.text_button", }],
cls: "bi-border-left bi-high-light bi-border-top", },
textHeight: 23, height: 24,
shadow: true, }],
text: BI.i18nText("BI-Basic_OK"), };
listeners: [{
eventName: BI.TextButton.EVENT_CHANGE,
action: function () {
var type = self.dateTab.getSelect();
if (type === BI.DynamicDateCombo.Dynamic) {
self.dynamicPane.checkValidation(true) && self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE);
} else {
self.fireEvent(BI.DynamicDatePane.EVENT_CHANGE);
}
}
}]
}]
},
height: 24
}]
};
} }
} },
}] }],
}; };
}, }
created: function () { created() {
this.setValue(this.options.value); this.setValue(this.options.value);
}, }
_checkValueValid: function (value) { _checkValueValid(value) {
return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value); return isNull(value) || isEmptyObject(value) || isEmptyString(value);
}, }
_checkValue: function (v) { _checkValue(v) {
switch (v.type) { switch (v.type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return BI.isNotEmptyObject(v.value); return isNotEmptyObject(v.value);
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
return true; return true;
} }
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (this.options.minDate !== minDate) { if (this.options.minDate !== minDate) {
this.options.minDate = minDate; this.options.minDate = minDate;
this.ymd.setMinDate(minDate); this.ymd.setMinDate(minDate);
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (this.options.maxDate !== maxDate) { if (this.options.maxDate !== maxDate) {
this.options.maxDate = maxDate; this.options.maxDate = maxDate;
this.ymd.setMaxDate(maxDate); this.ymd.setMaxDate(maxDate);
} }
}, }
setValue: function (v) { setValue(v) {
v = v || {}; v = v || {};
var type = v.type || BI.DynamicDateTimePane.Static; const type = v.type || DynamicDateTimePane.Static;
var value = v.value || v; const value = v.value || v;
this.switcher.setValue(type); this.switcher.setValue(type);
this.dateTab.setSelect(type); this.dateTab.setSelect(type);
switch (type) { switch (type) {
case BI.DynamicDateTimePane.Dynamic: case DynamicDateTimePane.Dynamic:
this.dynamicPane.setValue(value); this.dynamicPane.setValue(value);
break; break;
case BI.DynamicDateTimePane.Static: case DynamicDateTimePane.Static:
default: default:
if (this._checkValueValid(value)) { if (this._checkValueValid(value)) {
var date = BI.getDate(); const date = getDate();
this.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1 month: date.getMonth() + 1,
}); });
} else { } else {
this.ymd.setValue(value); this.ymd.setValue(value);
} }
break; break;
} }
}, }
getValue: function () { getValue() {
return { return {
type: this.dateTab.getSelect(), type: this.dateTab.getSelect(),
value: this.dateTab.getValue() value: this.dateTab.getValue(),
}; };
} }
}); }
BI.DynamicDateTimePane.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateTimePane.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_time_pane", BI.DynamicDateTimePane);
BI.extend(BI.DynamicDateTimePane, {
Static: 1,
Dynamic: 2
});

2
src/widget/datetimepane/index.js

@ -0,0 +1,2 @@
export { StaticDateTimePaneCard } from "./card.static.datetimepane";
export { DynamicDateTimePane } from "./datetimepane";

206
src/widget/dynamicdate/dynamicdate.caculate.js

@ -1,117 +1,119 @@
!(function () { import { isNotNull, parseInt, getDate, i18nText, size, getOffsetQuarter, getOffsetMonth, getOffsetDate, getLastDateOfMonth, getWeekStartDate, getWeekEndDate, getQuarterStartDate, getQuarterEndDate, print } from "@/core";
BI.DynamicDateHelper = {}; import { DynamicDateCard } from "./dynamicdate.card";
BI.extend(BI.DynamicDateHelper, {
getCalculation: function (obj) {
var date = BI.getDate();
return this.getCalculationByDate(date, obj); export const DynamicDateHelper = {
}, getCalculation (obj) {
const date = getDate();
getDescription: function (obj) { return this.getCalculationByDate(date, obj);
var value = ""; },
var endText = "";
if(BI.isNotNull(obj.year)) { getDescription (obj) {
if(BI.parseInt(obj.year) !== 0) { let value = "";
value += Math.abs(obj.year) + BI.i18nText("BI-Basic_Year") + (obj.year < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); let endText = "";
} if (isNotNull(obj.year)) {
endText = getPositionText(BI.i18nText("BI-Basic_Year"), obj.position); if (parseInt(obj.year) !== 0) {
} value += Math.abs(obj.year) + i18nText("BI-Basic_Year") + (obj.year < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
if(BI.isNotNull(obj.quarter)) { }
if(BI.parseInt(obj.quarter) !== 0) { endText = getPositionText(i18nText("BI-Basic_Year"), obj.position);
value += Math.abs(obj.quarter) + BI.i18nText("BI-Basic_Single_Quarter") + (obj.quarter < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); }
} if (isNotNull(obj.quarter)) {
endText = getPositionText(BI.i18nText("BI-Basic_Single_Quarter"), obj.position); if (parseInt(obj.quarter) !== 0) {
} value += Math.abs(obj.quarter) + i18nText("BI-Basic_Single_Quarter") + (obj.quarter < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
if(BI.isNotNull(obj.month)) {
if(BI.parseInt(obj.month) !== 0) {
value += Math.abs(obj.month) + BI.i18nText("BI-Basic_Month") + (obj.month < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind"));
}
endText = getPositionText(BI.i18nText("BI-Basic_Month"), obj.position);
} }
if(BI.isNotNull(obj.week)) { endText = getPositionText(i18nText("BI-Basic_Single_Quarter"), obj.position);
if(BI.parseInt(obj.week) !== 0) { }
value += Math.abs(obj.week) + BI.i18nText("BI-Basic_Week") + (obj.week < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); if (isNotNull(obj.month)) {
} if (parseInt(obj.month) !== 0) {
endText = getPositionText(BI.i18nText("BI-Basic_Week"), obj.position); value += Math.abs(obj.month) + i18nText("BI-Basic_Month") + (obj.month < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
if(BI.isNotNull(obj.day)) { endText = getPositionText(i18nText("BI-Basic_Month"), obj.position);
if(BI.parseInt(obj.day) !== 0) { }
value += Math.abs(obj.day) + BI.i18nText("BI-Basic_Day") + (obj.day < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); if (isNotNull(obj.week)) {
} if (parseInt(obj.week) !== 0) {
endText = BI.size(obj) === 1 ? getPositionText(BI.i18nText("BI-Basic_Month"), obj.position) : ""; value += Math.abs(obj.week) + i18nText("BI-Basic_Week") + (obj.week < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
if(BI.isNotNull(obj.workDay) && BI.parseInt(obj.workDay) !== 0) { endText = getPositionText(i18nText("BI-Basic_Week"), obj.position);
value += Math.abs(obj.workDay) + BI.i18nText("BI-Basic_Work_Day") + (obj.workDay < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); }
if (isNotNull(obj.day)) {
if (parseInt(obj.day) !== 0) {
value += Math.abs(obj.day) + i18nText("BI-Basic_Day") + (obj.day < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
return value + endText; endText = size(obj) === 1 ? getPositionText(i18nText("BI-Basic_Month"), obj.position) : "";
}
if (isNotNull(obj.workDay) && parseInt(obj.workDay) !== 0) {
value += Math.abs(obj.workDay) + i18nText("BI-Basic_Work_Day") + (obj.workDay < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
}
return value + endText;
function getPositionText (baseText, position) { function getPositionText (baseText, position) {
switch (position) { switch (position) {
case BI.DynamicDateCard.OFFSET.BEGIN: case DynamicDateCard.OFFSET.BEGIN:
return baseText + BI.i18nText("BI-Basic_Begin_Start"); return baseText + i18nText("BI-Basic_Begin_Start");
case BI.DynamicDateCard.OFFSET.END: case DynamicDateCard.OFFSET.END:
return baseText + BI.i18nText("BI-Basic_End_Stop"); return baseText + i18nText("BI-Basic_End_Stop");
case BI.DynamicDateCard.OFFSET.CURRENT: case DynamicDateCard.OFFSET.CURRENT:
default: default:
return BI.i18nText("BI-Basic_Current_Day"); return i18nText("BI-Basic_Current_Day");
}
} }
}, }
},
getCalculationByDate: function (date, obj) { getCalculationByDate (date, obj) {
if (BI.isNotNull(obj.year)) { if (isNotNull(obj.year)) {
date = BI.getDate((date.getFullYear() + BI.parseInt(obj.year)), date.getMonth(), date.getDate()); date = getDate((date.getFullYear() + parseInt(obj.year)), date.getMonth(), date.getDate());
} }
if (BI.isNotNull(obj.quarter)) { if (isNotNull(obj.quarter)) {
date = BI.getOffsetQuarter(date, BI.parseInt(obj.quarter)); date = getOffsetQuarter(date, parseInt(obj.quarter));
} }
if (BI.isNotNull(obj.month)) { if (isNotNull(obj.month)) {
date = BI.getOffsetMonth(date, BI.parseInt(obj.month)); date = getOffsetMonth(date, parseInt(obj.month));
} }
if (BI.isNotNull(obj.week)) { if (isNotNull(obj.week)) {
date = BI.getOffsetDate(date, BI.parseInt(obj.week) * 7); date = getOffsetDate(date, parseInt(obj.week) * 7);
} }
if (BI.isNotNull(obj.day)) { if (isNotNull(obj.day)) {
date = BI.getOffsetDate(date, BI.parseInt(obj.day)); date = getOffsetDate(date, parseInt(obj.day));
} }
if (BI.isNotNull(obj.workDay)) { if (isNotNull(obj.workDay)) {
// 配置了节假日就按照节假日计算工作日偏移,否则按正常的天去算 // 配置了节假日就按照节假日计算工作日偏移,否则按正常的天去算
if(BI.isNotNull(BI.holidays)) { if (isNotNull(BI.holidays)) {
var count = Math.abs(obj.workDay); const count = Math.abs(obj.workDay);
for (var i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
date = BI.getOffsetDate(date, obj.workDay < 0 ? -1 : 1); date = getOffsetDate(date, obj.workDay < 0 ? -1 : 1);
if(BI.isNotNull(BI.holidays[BI.print(date, "%Y-%X-%d")])) { if (isNotNull(BI.holidays[print(date, "%Y-%X-%d")])) {
i--; i--;
}
} }
} else {
date = BI.getOffsetDate(date, BI.parseInt(obj.workDay));
} }
} else {
date = getOffsetDate(date, parseInt(obj.workDay));
} }
if (BI.isNotNull(obj.position) && obj.position !== BI.DynamicDateCard.OFFSET.CURRENT) { }
date = this.getBeginDate(date, obj); if (isNotNull(obj.position) && obj.position !== DynamicDateCard.OFFSET.CURRENT) {
} date = this.getBeginDate(date, obj);
}
return BI.getDate(date.getFullYear(), date.getMonth(), date.getDate()); return getDate(date.getFullYear(), date.getMonth(), date.getDate());
}, },
getBeginDate: function (date, obj) { getBeginDate (date, obj) {
if (BI.isNotNull(obj.day)) { if (isNotNull(obj.day)) {
return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), date.getMonth(), 1) : BI.getDate(date.getFullYear(), date.getMonth(), (BI.getLastDateOfMonth(date)).getDate()); return obj.position === DynamicDateCard.OFFSET.BEGIN ? getDate(date.getFullYear(), date.getMonth(), 1) : getDate(date.getFullYear(), date.getMonth(), (getLastDateOfMonth(date)).getDate());
} }
if (BI.isNotNull(obj.week)) { if (isNotNull(obj.week)) {
return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getWeekStartDate(date) : BI.getWeekEndDate(date); return obj.position === DynamicDateCard.OFFSET.BEGIN ? getWeekStartDate(date) : getWeekEndDate(date);
} }
if (BI.isNotNull(obj.month)) { if (isNotNull(obj.month)) {
return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), date.getMonth(), 1) : BI.getDate(date.getFullYear(), date.getMonth(), (BI.getLastDateOfMonth(date)).getDate()); return obj.position === DynamicDateCard.OFFSET.BEGIN ? getDate(date.getFullYear(), date.getMonth(), 1) : getDate(date.getFullYear(), date.getMonth(), (getLastDateOfMonth(date)).getDate());
} }
if (BI.isNotNull(obj.quarter)) { if (isNotNull(obj.quarter)) {
return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getQuarterStartDate(date) : BI.getQuarterEndDate(date); return obj.position === DynamicDateCard.OFFSET.BEGIN ? getQuarterStartDate(date) : getQuarterEndDate(date);
} }
if (BI.isNotNull(obj.year)) { if (isNotNull(obj.year)) {
return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), 0, 1) : BI.getDate(date.getFullYear(), 11, 31); return obj.position === DynamicDateCard.OFFSET.BEGIN ? getDate(date.getFullYear(), 0, 1) : getDate(date.getFullYear(), 11, 31);
}
return date;
} }
});
})(); return date;
},
};

535
src/widget/dynamicdate/dynamicdate.card.js

@ -1,89 +1,111 @@
BI.DynamicDateCard = BI.inherit(BI.Widget, { import { shortcut, Widget, i18nText, createItems, each, isNotNull, map, has, bind, last, extend, checkDateVoid, isNull, isNotEmptyString, parseDateTime, any } from "@/core";
import { ButtonGroup, Bubbles } from "@/base";
import { MultiSelectItem } from "@/case";
import { DynamicDateHelper } from "./dynamicdate.caculate";
props: { @shortcut()
baseCls: "bi-dynamic-date-card" export class DynamicDateCard extends Widget {
}, static xtype = "bi.dynamic_date_card";
static TYPE = {
YEAR: 1,
QUARTER: 2,
MONTH: 3,
WEEK: 4,
DAY: 5,
WORK_DAY: 6,
};
static OFFSET = {
CURRENT: 1,
BEGIN: 2,
END: 3,
};
render: function () { props = {
var self = this; baseCls: "bi-dynamic-date-card",
this.position = BI.DynamicDateCard.OFFSET.CURRENT; };
render() {
this.position = DynamicDateCard.OFFSET.CURRENT;
return { return {
type: "bi.vertical", type: "bi.vertical",
items: [{ items: [{
el: { el: {
type: "bi.label", type: "bi.label",
text: BI.i18nText("BI-Multi_Date_Relative_Current_Time"), text: i18nText("BI-Multi_Date_Relative_Current_Time"),
textAlign: "left", textAlign: "left",
lgap: 10 lgap: 10,
}, },
tgap: 10, tgap: 10,
bgap: 5 bgap: 5,
}, { }, {
type: "bi.button_group", type: "bi.button_group",
ref: function () { ref: _ref => {
self.checkgroup = this; this.checkgroup = _ref;
}, },
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, chooseType: ButtonGroup.CHOOSE_TYPE_MULTI,
lgap: 4, lgap: 4,
value: [BI.DynamicDateCard.TYPE.YEAR], value: [DynamicDateCard.TYPE.YEAR],
items: BI.createItems([{ items: createItems([{
text: BI.i18nText("BI-Basic_Year"), text: i18nText("BI-Basic_Year"),
value: BI.DynamicDateCard.TYPE.YEAR value: DynamicDateCard.TYPE.YEAR,
}, { }, {
text: BI.i18nText("BI-Basic_Single_Quarter"), text: i18nText("BI-Basic_Single_Quarter"),
value: BI.DynamicDateCard.TYPE.QUARTER value: DynamicDateCard.TYPE.QUARTER,
}, { }, {
text: BI.i18nText("BI-Basic_Month"), text: i18nText("BI-Basic_Month"),
value: BI.DynamicDateCard.TYPE.MONTH value: DynamicDateCard.TYPE.MONTH,
}, { }, {
text: BI.i18nText("BI-Basic_Week"), text: i18nText("BI-Basic_Week"),
value: BI.DynamicDateCard.TYPE.WEEK value: DynamicDateCard.TYPE.WEEK,
}, { }, {
text: BI.i18nText("BI-Basic_Day"), text: i18nText("BI-Basic_Day"),
value: BI.DynamicDateCard.TYPE.DAY value: DynamicDateCard.TYPE.DAY,
}], { }], {
type: "bi.multi_select_item", type: "bi.multi_select_item",
logic: { logic: {
dynamic: true dynamic: true,
}, },
iconWrapperWidth: 26, iconWrapperWidth: 26,
}), }),
layouts: [{ layouts: [{
type: "bi.left", type: "bi.left",
rgap: 4 rgap: 4,
}], }],
listeners: [{ listeners: [{
eventName: BI.ButtonGroup.EVENT_CHANGE, eventName: ButtonGroup.EVENT_CHANGE,
action: function () { action: () => {
var value = self.checkgroup.getValue(); const value = this.checkgroup.getValue();
if(value.length !== 0) { if (value.length !== 0) {
self.workDayBox.setSelected(false); this.workDayBox.setSelected(false);
} }
var plainValue = {}; const plainValue = {};
BI.each(self.resultPane.getAllButtons(), function (idx, button) { each(this.resultPane.getAllButtons(), (idx, button) => {
var value = button.getValue(); const value = button.getValue();
if(BI.isNotNull(value.dateType)) { if (isNotNull(value.dateType)) {
plainValue[value.dateType] = { plainValue[value.dateType] = {
value: value.value, value: value.value,
offset: value.offset offset: value.offset,
}; };
} }
}); });
self.resultPane.populate(self._getParamJson(BI.map(self.checkgroup.getValue(), function (idx, v) { this.resultPane.populate(this._getParamJson(map(this.checkgroup.getValue(), (idx, v) => {
var obj = { const obj = {
dateType: v dateType: v,
}; };
if(BI.has(plainValue, v)) { if (has(plainValue, v)) {
obj.value = plainValue[v].value; obj.value = plainValue[v].value;
obj.offset = plainValue[v].offset; obj.offset = plainValue[v].offset;
} }
return obj; return obj;
}))); })));
self.position = BI.DynamicDateCard.OFFSET.CURRENT; this.position = DynamicDateCard.OFFSET.CURRENT;
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}] }],
}, { }, {
type: "bi.vertical_adapt", type: "bi.vertical_adapt",
lgap: 2, lgap: 2,
@ -91,283 +113,287 @@ BI.DynamicDateCard = BI.inherit(BI.Widget, {
el: { el: {
type: "bi.multi_select_item", type: "bi.multi_select_item",
iconWrapperWidth: 26, iconWrapperWidth: 26,
ref: function () { ref: _ref => {
self.workDayBox = this; this.workDayBox = _ref;
}, },
logic: { logic: {
dynamic: true dynamic: true,
}, },
text: BI.i18nText("BI-Basic_Work_Day"), text: i18nText("BI-Basic_Work_Day"),
value: BI.DynamicDateCard.TYPE.WORK_DAY, value: DynamicDateCard.TYPE.WORK_DAY,
listeners: [{ listeners: [{
eventName: BI.MultiSelectItem.EVENT_CHANGE, eventName: MultiSelectItem.EVENT_CHANGE,
action: function () { action: () => {
if(this.isSelected()) { if (this.workDayBox.isSelected()) {
self.checkgroup.setValue(); this.checkgroup.setValue();
} }
self.resultPane.populate(this.isSelected() ? self._getParamJson([{ this.resultPane.populate(this.workDayBox.isSelected() ? this._getParamJson([{
dateType: BI.DynamicDateCard.TYPE.WORK_DAY dateType: DynamicDateCard.TYPE.WORK_DAY,
}]) : []); }]) : []);
self.position = BI.DynamicDateCard.OFFSET.CURRENT; this.position = DynamicDateCard.OFFSET.CURRENT;
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}] }],
} },
}], }],
ref: function () { ref: _ref => {
self.workDay = this; this.workDay = _ref;
} },
}, { }, {
type: "bi.button_group", type: "bi.button_group",
items: this._getParamJson([{ items: this._getParamJson([{
dateType: BI.DynamicDateCard.TYPE.YEAR dateType: DynamicDateCard.TYPE.YEAR,
}]), }]),
ref: function () { ref: _ref => {
self.resultPane = this; this.resultPane = _ref;
}, },
layouts: [{ layouts: [{
type: "bi.vertical", type: "bi.vertical",
bgap: 10, bgap: 10,
hgap: 10 hgap: 10,
}] }],
}] }],
}; };
}, }
_getParamJson: function (values, positionValue) { _getParamJson(values, positionValue) {
var self = this, o = this.options; const items = map(values, (idx, value) => {
var items = BI.map(values, function (idx, value) {
return { return {
el: { el: {
type: "bi.dynamic_date_param_item", type: "bi.dynamic_date_param_item",
validationChecker: BI.bind(self._checkDate, self), validationChecker: bind(this._checkDate, this),
dateType: value.dateType, dateType: value.dateType,
value: value.value, value: value.value,
offset: value.offset, offset: value.offset,
listeners: [{ listeners: [{
eventName: "EVENT_CHANGE", eventName: "EVENT_CHANGE",
action: function () { action: () => {
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}, { }, {
eventName: "EVENT_INPUT_CHANGE", eventName: "EVENT_INPUT_CHANGE",
action: function () { action () {
BI.Bubbles.hide("dynamic-date-error"); Bubbles.hide("dynamic-date-error");
} },
}] }],
}, },
tgap: idx === 0 ? 5 : 0 tgap: idx === 0 ? 5 : 0,
}; };
}); });
if(values.length === 1 && values[0].dateType === BI.DynamicDateCard.TYPE.DAY) { if (values.length === 1 && values[0].dateType === DynamicDateCard.TYPE.DAY) {
var comboItems = this._getText(BI.DynamicDateCard.TYPE.MONTH); const comboItems = this._getText(DynamicDateCard.TYPE.MONTH);
comboItems[0].text = BI.i18nText("BI-Basic_Empty"); comboItems[0].text = i18nText("BI-Basic_Empty");
items.push({ items.push({
type: "bi.text_value_combo", type: "bi.text_value_combo",
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
items: comboItems, items: comboItems,
container: null, container: null,
value: positionValue || BI.DynamicDateCard.OFFSET.CURRENT, value: positionValue || DynamicDateCard.OFFSET.CURRENT,
ref: _ref => {
this.textValueCombo = _ref;
},
listeners: [{ listeners: [{
eventName: "EVENT_CHANGE", eventName: "EVENT_CHANGE",
action: function () { action: () => {
self.position = this.getValue()[0]; this.position = this.textValueCombo.getValue()[0];
this.setValue(self.position); this.textValueCombo.setValue(this.position);
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}] }],
}); });
}else{ } else {
if(values.length !== 0 && BI.last(values).dateType !== BI.DynamicDateCard.TYPE.DAY && BI.last(values).dateType !== BI.DynamicDateCard.TYPE.WORK_DAY) { if (values.length !== 0 && last(values).dateType !== DynamicDateCard.TYPE.DAY && last(values).dateType !== DynamicDateCard.TYPE.WORK_DAY) {
items.push({ items.push({
type: "bi.text_value_combo", type: "bi.text_value_combo",
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
container: null, container: null,
items: this._getText(BI.last(values).dateType), items: this._getText(last(values).dateType),
value: positionValue || BI.DynamicDateCard.OFFSET.CURRENT, value: positionValue || DynamicDateCard.OFFSET.CURRENT,
ref: _ref => {
this.textValueCombo = _ref;
},
listeners: [{ listeners: [{
eventName: "EVENT_CHANGE", eventName: "EVENT_CHANGE",
action: function () { action: () => {
self.position = this.getValue()[0]; this.position = this.textValueCombo.getValue()[0];
this.setValue(self.position); this.textValueCombo.setValue(this.position);
self.fireEvent("EVENT_CHANGE"); this.fireEvent("EVENT_CHANGE");
} },
}] }],
}); });
} }
} }
return items; return items;
}, }
_checkDate: function (obj) { _checkDate(obj) {
var o = this.options; const o = this.options;
var date = BI.DynamicDateHelper.getCalculation(BI.extend(this._getValue(), this._digestDateTypeValue(obj))); const date = DynamicDateHelper.getCalculation(extend(this._getValue(), this._digestDateTypeValue(obj)));
return !BI.checkDateVoid(date.getFullYear(), date.getMonth() + 1, date.getDate(), o.min, o.max)[0]; return !checkDateVoid(date.getFullYear(), date.getMonth() + 1, date.getDate(), o.min, o.max)[0];
}, }
_getText: function (lastValue) { _getText(lastValue) {
switch (lastValue) { switch (lastValue) {
case BI.DynamicDateCard.TYPE.YEAR: case DynamicDateCard.TYPE.YEAR:
return [{ return [{
text: BI.i18nText("BI-Basic_Current_Day"), text: i18nText("BI-Basic_Current_Day"),
value: BI.DynamicDateCard.OFFSET.CURRENT value: DynamicDateCard.OFFSET.CURRENT,
}, { }, {
text: BI.i18nText("BI-Basic_Year_Begin"), text: i18nText("BI-Basic_Year_Begin"),
value: BI.DynamicDateCard.OFFSET.BEGIN value: DynamicDateCard.OFFSET.BEGIN,
}, { }, {
text: BI.i18nText("BI-Basic_Year_End"), text: i18nText("BI-Basic_Year_End"),
value: BI.DynamicDateCard.OFFSET.END value: DynamicDateCard.OFFSET.END,
}]; }];
case BI.DynamicDateCard.TYPE.QUARTER: case DynamicDateCard.TYPE.QUARTER:
return [{ return [{
text: BI.i18nText("BI-Basic_Current_Day"), text: i18nText("BI-Basic_Current_Day"),
value: BI.DynamicDateCard.OFFSET.CURRENT value: DynamicDateCard.OFFSET.CURRENT,
}, { }, {
text: BI.i18nText("BI-Basic_Quarter_Begin"), text: i18nText("BI-Basic_Quarter_Begin"),
value: BI.DynamicDateCard.OFFSET.BEGIN value: DynamicDateCard.OFFSET.BEGIN,
}, { }, {
text: BI.i18nText("BI-Basic_Quarter_End"), text: i18nText("BI-Basic_Quarter_End"),
value: BI.DynamicDateCard.OFFSET.END value: DynamicDateCard.OFFSET.END,
}]; }];
case BI.DynamicDateCard.TYPE.MONTH: case DynamicDateCard.TYPE.MONTH:
return [{ return [{
text: BI.i18nText("BI-Basic_Current_Day"), text: i18nText("BI-Basic_Current_Day"),
value: BI.DynamicDateCard.OFFSET.CURRENT value: DynamicDateCard.OFFSET.CURRENT,
}, { }, {
text: BI.i18nText("BI-Basic_Month_Begin"), text: i18nText("BI-Basic_Month_Begin"),
value: BI.DynamicDateCard.OFFSET.BEGIN value: DynamicDateCard.OFFSET.BEGIN,
}, { }, {
text: BI.i18nText("BI-Basic_Month_End"), text: i18nText("BI-Basic_Month_End"),
value: BI.DynamicDateCard.OFFSET.END value: DynamicDateCard.OFFSET.END,
}]; }];
case BI.DynamicDateCard.TYPE.WEEK: case DynamicDateCard.TYPE.WEEK:
default: default:
return [{ return [{
text: BI.i18nText("BI-Basic_Current_Day"), text: i18nText("BI-Basic_Current_Day"),
value: BI.DynamicDateCard.OFFSET.CURRENT value: DynamicDateCard.OFFSET.CURRENT,
}, { }, {
text: BI.i18nText("BI-Basic_Week_Begin"), text: i18nText("BI-Basic_Week_Begin"),
value: BI.DynamicDateCard.OFFSET.BEGIN value: DynamicDateCard.OFFSET.BEGIN,
}, { }, {
text: BI.i18nText("BI-Basic_Week_End"), text: i18nText("BI-Basic_Week_End"),
value: BI.DynamicDateCard.OFFSET.END value: DynamicDateCard.OFFSET.END,
}]; }];
} }
}, }
_createValue: function (type, v) { _createValue(type, v) {
return { return {
dateType: type, dateType: type,
value: Math.abs(v), value: Math.abs(v),
offset: v > 0 ? 1 : 0 offset: v > 0 ? 1 : 0,
}; };
}, }
_digestDateTypeValue: function (value) { _digestDateTypeValue(value) {
var valueMap = {}; const valueMap = {};
switch (value.dateType) { switch (value.dateType) {
case BI.DynamicDateCard.TYPE.YEAR: case DynamicDateCard.TYPE.YEAR:
valueMap.year = (value.offset === 0 ? -value.value : +value.value); valueMap.year = (value.offset === 0 ? -value.value : +value.value);
break; break;
case BI.DynamicDateCard.TYPE.QUARTER: case DynamicDateCard.TYPE.QUARTER:
valueMap.quarter = (value.offset === 0 ? -value.value : +value.value); valueMap.quarter = (value.offset === 0 ? -value.value : +value.value);
break; break;
case BI.DynamicDateCard.TYPE.MONTH: case DynamicDateCard.TYPE.MONTH:
valueMap.month = (value.offset === 0 ? -value.value : +value.value); valueMap.month = (value.offset === 0 ? -value.value : +value.value);
break; break;
case BI.DynamicDateCard.TYPE.WEEK: case DynamicDateCard.TYPE.WEEK:
valueMap.week = (value.offset === 0 ? -value.value : +value.value); valueMap.week = (value.offset === 0 ? -value.value : +value.value);
break; break;
case BI.DynamicDateCard.TYPE.DAY: case DynamicDateCard.TYPE.DAY:
valueMap.day = (value.offset === 0 ? -value.value : +value.value); valueMap.day = (value.offset === 0 ? -value.value : +value.value);
break; break;
case BI.DynamicDateCard.TYPE.WORK_DAY: case DynamicDateCard.TYPE.WORK_DAY:
valueMap.workDay = (value.offset === 0 ? -value.value : +value.value); valueMap.workDay = (value.offset === 0 ? -value.value : +value.value);
break; break;
default: default:
break; break;
} }
if (BI.isNull(value.dateType)) { if (isNull(value.dateType)) {
valueMap.position = this.position || BI.DynamicDateCard.OFFSET.CURRENT; valueMap.position = this.position || DynamicDateCard.OFFSET.CURRENT;
} }
return valueMap; return valueMap;
}, }
setMinDate: function(minDate) { setMinDate(minDate) {
if (BI.isNotEmptyString(this.options.min)) { if (isNotEmptyString(this.options.min)) {
this.options.min = minDate; this.options.min = minDate;
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (BI.isNotEmptyString(this.options.max)) { if (isNotEmptyString(this.options.max)) {
this.options.max = maxDate; this.options.max = maxDate;
} }
}, }
setValue: function (v) { setValue(v) {
v = v || {}; v = v || {};
this.position = v.position || BI.DynamicDateCard.OFFSET.CURRENT; this.position = v.position || DynamicDateCard.OFFSET.CURRENT;
var values = []; const values = [];
var valuesItems = []; const valuesItems = [];
if(BI.isNotNull(v.year)) { if (isNotNull(v.year)) {
values.push(BI.DynamicDateCard.TYPE.YEAR); values.push(DynamicDateCard.TYPE.YEAR);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.YEAR, v.year)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.YEAR, v.year));
} }
if(BI.isNotNull(v.quarter)) { if (isNotNull(v.quarter)) {
values.push(BI.DynamicDateCard.TYPE.QUARTER); values.push(DynamicDateCard.TYPE.QUARTER);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.QUARTER, v.quarter)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.QUARTER, v.quarter));
} }
if(BI.isNotNull(v.month)) { if (isNotNull(v.month)) {
values.push(BI.DynamicDateCard.TYPE.MONTH); values.push(DynamicDateCard.TYPE.MONTH);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.MONTH, v.month)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.MONTH, v.month));
} }
if(BI.isNotNull(v.week)) { if (isNotNull(v.week)) {
values.push(BI.DynamicDateCard.TYPE.WEEK); values.push(DynamicDateCard.TYPE.WEEK);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WEEK, v.week)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.WEEK, v.week));
} }
if(BI.isNotNull(v.day)) { if (isNotNull(v.day)) {
values.push(BI.DynamicDateCard.TYPE.DAY); values.push(DynamicDateCard.TYPE.DAY);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.DAY, v.day)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.DAY, v.day));
} }
if(BI.isNotNull(v.workDay)) { if (isNotNull(v.workDay)) {
values.push(BI.DynamicDateCard.TYPE.WORK_DAY); values.push(DynamicDateCard.TYPE.WORK_DAY);
valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WORK_DAY, v.workDay)); valuesItems.push(this._createValue(DynamicDateCard.TYPE.WORK_DAY, v.workDay));
} }
this.checkgroup.setValue(values); this.checkgroup.setValue(values);
this.workDayBox.setSelected(BI.isNotNull(v.workDay)); this.workDayBox.setSelected(isNotNull(v.workDay));
this.resultPane.populate(this._getParamJson(valuesItems, v.position)); this.resultPane.populate(this._getParamJson(valuesItems, v.position));
}, }
_getValue: function () { _getValue() {
var self = this; const valueMap = {};
var valueMap = {}; const selectValues = this.checkgroup.getValue();
var selectValues = this.checkgroup.getValue(); const buttons = this.resultPane.getAllButtons();
var buttons = this.resultPane.getAllButtons(); if (selectValues.length !== 0) {
if(selectValues.length !== 0) { each(buttons, (idx, button) => {
BI.each(buttons, function (idx, button) { const value = button.getValue();
var value = button.getValue(); extend(valueMap, this._digestDateTypeValue(value));
BI.extend(valueMap, self._digestDateTypeValue(value));
}); });
} }
if(this.workDayBox.isSelected()) { if (this.workDayBox.isSelected()) {
var value = buttons[0].getValue(); const value = buttons[0].getValue();
valueMap.workDay = (value.offset === 0 ? -value.value : +value.value); valueMap.workDay = (value.offset === 0 ? -value.value : +value.value);
} }
return valueMap; return valueMap;
}, }
_getErrorText: function () { _getErrorText() {
var o = this.options; const o = this.options;
var start = BI.parseDateTime(o.min, "%Y-%X-%d"); const start = parseDateTime(o.min, "%Y-%X-%d");
var end = BI.parseDateTime(o.max, "%Y-%X-%d"); const end = parseDateTime(o.max, "%Y-%X-%d");
return BI.i18nText("BI-Basic_Date_Range_Error", return i18nText("BI-Basic_Date_Range_Error",
start.getFullYear(), start.getFullYear(),
start.getMonth() + 1, start.getMonth() + 1,
start.getDate(), start.getDate(),
@ -375,49 +401,28 @@ BI.DynamicDateCard = BI.inherit(BI.Widget, {
end.getMonth() + 1, end.getMonth() + 1,
end.getDate() end.getDate()
); );
}, }
getValue: function () { getValue() {
return this.checkValidation() ? this._getValue() : {}; return this.checkValidation() ? this._getValue() : {};
}, }
getInputValue: function () { getInputValue() {
return this._getValue(); return this._getValue();
}, }
checkValidation: function (show) { checkValidation(show) {
var buttons = this.resultPane.getAllButtons(); const buttons = this.resultPane.getAllButtons();
var errorText; let errorText;
var invalid = BI.any(buttons, function (idx, button) { let invalid = any(buttons, (idx, button) => button.checkValidation && !button.checkValidation());
return button.checkValidation && !button.checkValidation();
});
if (invalid) { if (invalid) {
errorText = BI.i18nText("BI-Please_Input_Natural_Number"); errorText = i18nText("BI-Please_Input_Natural_Number");
} else { } else {
invalid = !this._checkDate(this._getValue()); invalid = !this._checkDate(this._getValue());
errorText = this._getErrorText(); errorText = this._getErrorText();
} }
invalid && show && BI.Bubbles.show("dynamic-date-error", errorText, this.resultPane); invalid && show && Bubbles.show("dynamic-date-error", errorText, this.resultPane);
return !invalid; return !invalid;
},
});
BI.shortcut("bi.dynamic_date_card", BI.DynamicDateCard);
BI.extend(BI.DynamicDateCard, {
TYPE: {
YEAR: 1,
QUARTER: 2,
MONTH: 3,
WEEK: 4,
DAY: 5,
WORK_DAY: 6
},
OFFSET: {
CURRENT: 1,
BEGIN: 2,
END: 3
} }
}
});

406
src/widget/dynamicdate/dynamicdate.combo.js

@ -1,13 +1,13 @@
BI.DynamicDateCombo = BI.inherit(BI.Single, { import { shortcut, getDate, toPix, isEqual, isNotEmptyString, isEmptyString, isNotNull, isNotEmptyObject, checkDateVoid } from "@/core";
constants: { import { Single, Combo } from "@/base";
popupHeight: 259, import { DynamicDateTrigger } from "./dynamicdate.trigger";
popupWidth: 270, import { DynamicDatePopup } from "./dynamicdate.popup";
comboAdjustHeight: 1,
border: 1,
iconWidth: 24
},
props: { @shortcut()
export class DynamicDateCombo extends Single {
static xtype = "bi.dynamic_date_combo"
props = {
baseCls: "bi-dynamic-date-combo", baseCls: "bi-dynamic-date-combo",
height: 24, height: 24,
minDate: "1900-01-01", minDate: "1900-01-01",
@ -16,32 +16,46 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, {
allowEdit: true, allowEdit: true,
supportDynamic: true, supportDynamic: true,
attributes: { attributes: {
tabIndex: -1 tabIndex: -1,
}, },
isNeedAdjustHeight: false, isNeedAdjustHeight: false,
isNeedAdjustWidth: false isNeedAdjustWidth: false,
}, };
static EVENT_KEY_DOWN = "EVENT_KEY_DOWN"
static EVENT_CONFIRM = "EVENT_CONFIRM"
static EVENT_FOCUS = "EVENT_FOCUS"
static EVENT_BLUR = "EVENT_BLUR"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_VALID = "EVENT_VALID"
static EVENT_ERROR = "EVENT_ERROR"
static EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
_init: function () { static Static = 1;
BI.DynamicDateCombo.superclass._init.apply(this, arguments); static Dynamic = 2;
},
_init() {
super._init(...arguments);
}
render: function () { render() {
var self = this, opts = this.options; const opts = this.options;
this.storeTriggerValue = ""; this.storeTriggerValue = "";
var date = BI.getDate(); const date = getDate();
this.storeValue = opts.value; this.storeValue = opts.value;
var border = opts.simple ? 1 : 2; const border = opts.simple ? 1 : 2;
return { return {
type: "bi.absolute", type: "bi.absolute",
items: [{ items: [{
el: { el: {
type: "bi.combo", type: "bi.combo",
cls: (opts.simple ? "bi-border-bottom" : "bi-border bi-border-radius") + " bi-focus-shadow", cls: `${opts.simple ? "bi-border-bottom" : "bi-border bi-border-radius"} bi-focus-shadow`,
container: opts.container, container: opts.container,
ref: function () { ref: _ref => {
self.combo = this; this.combo = _ref;
}, },
toggle: false, toggle: false,
isNeedAdjustHeight: opts.isNeedAdjustHeight, isNeedAdjustHeight: opts.isNeedAdjustHeight,
@ -50,16 +64,16 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, {
el: { el: {
type: "bi.horizontal_fill", type: "bi.horizontal_fill",
columnSize: [this.constants.iconWidth, "fill"], columnSize: [this.constants.iconWidth, "fill"],
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
items: [{ items: [{
el: { el: {
type: "bi.icon_button", type: "bi.icon_button",
cls: "bi-trigger-icon-button date-change-h-font", cls: "bi-trigger-icon-button date-change-h-font",
width: BI.toPix(opts.height, border), width: toPix(opts.height, border),
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
ref: function () { ref: _ref => {
self.changeIcon = this; this.changeIcon = _ref;
} },
}, },
}, { }, {
type: "bi.dynamic_date_trigger", type: "bi.dynamic_date_trigger",
@ -69,86 +83,86 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, {
format: opts.format, format: opts.format,
allowEdit: opts.allowEdit, allowEdit: opts.allowEdit,
watermark: opts.watermark, watermark: opts.watermark,
iconWidth: BI.toPix(opts.height, border), iconWidth: toPix(opts.height, border),
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
value: opts.value, value: opts.value,
ref: function () { ref: _ref => {
self.trigger = this; this.trigger = _ref;
}, },
listeners: [{ listeners: [{
eventName: BI.DynamicDateTrigger.EVENT_KEY_DOWN, eventName: DynamicDateTrigger.EVENT_KEY_DOWN,
action: function () { action: (...args) => {
if (self.combo.isViewVisible()) { if (this.combo.isViewVisible()) {
self.combo.hideView(); this.combo.hideView();
} }
self.fireEvent(BI.DynamicDateCombo.EVENT_KEY_DOWN, arguments); this.fireEvent(DynamicDateCombo.EVENT_KEY_DOWN, ...args);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_STOP, eventName: DynamicDateTrigger.EVENT_STOP,
action: function () { action: () => {
if (!self.combo.isViewVisible()) { if (!this.combo.isViewVisible()) {
self.combo.showView(); this.combo.showView();
} }
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_FOCUS, eventName: DynamicDateTrigger.EVENT_FOCUS,
action: function () { action: () => {
self.storeTriggerValue = self.trigger.getKey(); this.storeTriggerValue = this.trigger.getKey();
if (!self.combo.isViewVisible()) { if (!this.combo.isViewVisible()) {
self.combo.showView(); this.combo.showView();
} }
self.fireEvent(BI.DynamicDateCombo.EVENT_FOCUS); this.fireEvent(DynamicDateCombo.EVENT_FOCUS);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_BLUR, eventName: DynamicDateTrigger.EVENT_BLUR,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateCombo.EVENT_BLUR); this.fireEvent(DynamicDateCombo.EVENT_BLUR);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_ERROR, eventName: DynamicDateTrigger.EVENT_ERROR,
action: function () { action: () => {
self.storeValue = { this.storeValue = {
type: BI.DynamicDateCombo.Static, type: DynamicDateCombo.Static,
value: { value: {
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1 month: date.getMonth() + 1,
} },
}; };
self.combo.element.addClass("error"); this.combo.element.addClass("error");
self.fireEvent(BI.DynamicDateCombo.EVENT_ERROR); this.fireEvent(DynamicDateCombo.EVENT_ERROR);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_VALID, eventName: DynamicDateTrigger.EVENT_VALID,
action: function () { action: () => {
self.storeValue = self.trigger.getValue(); this.storeValue = this.trigger.getValue();
self.combo.element.removeClass("error"); this.combo.element.removeClass("error");
self.fireEvent(BI.DynamicDateCombo.EVENT_VALID); this.fireEvent(DynamicDateCombo.EVENT_VALID);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_CHANGE, eventName: DynamicDateTrigger.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateCombo.EVENT_CHANGE); this.fireEvent(DynamicDateCombo.EVENT_CHANGE);
} },
}, { }, {
eventName: BI.DynamicDateTrigger.EVENT_CONFIRM, eventName: DynamicDateTrigger.EVENT_CONFIRM,
action: function () { action: () => {
var dateStore = self.storeTriggerValue; const dateStore = this.storeTriggerValue;
var dateObj = self.trigger.getKey(); const dateObj = this.trigger.getKey();
if (self.combo.isViewVisible() || BI.isEqual(dateObj, dateStore)) { if (this.combo.isViewVisible() || isEqual(dateObj, dateStore)) {
return; return;
} }
if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { if (isNotEmptyString(dateObj) && !isEqual(dateObj, dateStore)) {
self.storeValue = self.trigger.getValue(); this.storeValue = this.trigger.getValue();
self.setValue(self.trigger.getValue()); this.setValue(this.trigger.getValue());
} else if (BI.isEmptyString(dateObj)) { } else if (isEmptyString(dateObj)) {
self.storeValue = null; this.storeValue = null;
self.trigger.setValue(); this.trigger.setValue();
} }
self._checkDynamicValue(self.storeValue); this._checkDynamicValue(this.storeValue);
self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateCombo.EVENT_CONFIRM);
} },
}] }],
}] }],
}, },
adjustLength: this.constants.comboAdjustHeight, adjustLength: this.constants.comboAdjustHeight,
popup: { popup: {
@ -159,54 +173,54 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, {
behaviors: opts.behaviors, behaviors: opts.behaviors,
min: opts.minDate, min: opts.minDate,
max: opts.maxDate, max: opts.maxDate,
ref: function () { ref: _ref => {
self.popup = this; this.popup = _ref;
}, },
listeners: [{ listeners: [{
eventName: BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE, eventName: DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE,
action: function () { action: () => {
self.setValue(); this.setValue();
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE, eventName: DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE,
action: function () { action: () => {
var date = BI.getDate(); const date = getDate();
self.setValue({ this.setValue({
type: BI.DynamicDateCombo.Static, type: DynamicDateCombo.Static,
value: { value: {
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
} },
}); });
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE, eventName: DynamicDatePopup.BUTTON_OK_EVENT_CHANGE,
action: function () { action: () => {
var value = self.popup.getValue(); const value = this.popup.getValue();
if (self._checkValue(value)) { if (this._checkValue(value)) {
self.setValue(value); this.setValue(value);
} }
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDatePopup.EVENT_CHANGE, eventName: DynamicDatePopup.EVENT_CHANGE,
action: function () { action: () => {
self.setValue(self.popup.getValue()); this.setValue(this.popup.getValue());
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDatePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, eventName: DynamicDatePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); this.fireEvent(DynamicDateCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
} },
}] }],
}, },
}, },
// // DEC-4250 和复选下拉一样,点击triggerBtn不默认收起 // // DEC-4250 和复选下拉一样,点击triggerBtn不默认收起
@ -214,120 +228,106 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, {
// return self.triggerBtn.element.find(e.target).length === 0; // return self.triggerBtn.element.find(e.target).length === 0;
// }, // },
listeners: [{ listeners: [{
eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, eventName: Combo.EVENT_BEFORE_POPUPVIEW,
action: function () { action: () => {
self.popup.setMinDate(opts.minDate); this.popup.setMinDate(opts.minDate);
self.popup.setMaxDate(opts.maxDate); this.popup.setMaxDate(opts.maxDate);
self.popup.setValue(self.storeValue); this.popup.setValue(this.storeValue);
self.fireEvent(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW); this.fireEvent(DynamicDateCombo.EVENT_BEFORE_POPUPVIEW);
} },
}] }],
}, },
top: 0, top: 0,
left: 0, left: 0,
right: 0, right: 0,
bottom: 0 bottom: 0,
}] }],
}; };
}, }
created: function () { created() {
this._checkDynamicValue(this.storeValue); this._checkDynamicValue(this.storeValue);
}, }
_checkDynamicValue: function (v) { _checkDynamicValue(v) {
var o = this.options; let type = null;
var type = null; if (isNotNull(v)) {
if (BI.isNotNull(v)) {
type = v.type; type = v.type;
} }
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
this.changeIcon.setVisible(true); this.changeIcon.setVisible(true);
// this.comboWrapper.attr("items")[0].width = o.height - this.options.simple ? 1 : 2; // this.comboWrapper.attr("items")[0].width = o.height - this.options.simple ? 1 : 2;
// this.comboWrapper.resize(); // this.comboWrapper.resize();
break; break;
default: default:
// this.comboWrapper.attr("items")[0].width = 0; // this.comboWrapper.attr("items")[0].width = 0;
// this.comboWrapper.resize(); // this.comboWrapper.resize();
this.changeIcon.setVisible(false); this.changeIcon.setVisible(false);
break; break;
} }
}, }
_checkValue: function (v) { _checkValue(v) {
var o = this.options; const o = this.options;
let value;
switch (v.type) { switch (v.type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return BI.isNotEmptyObject(v.value); return isNotEmptyObject(v.value);
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
var value = v.value || {}; value = v.value || {};
return !BI.checkDateVoid(value.year, value.month, value.day, o.minDate, o.maxDate)[0]; return !checkDateVoid(value.year, value.month, value.day, o.minDate, o.maxDate)[0];
default: default:
return true; return true;
} }
}, }
_defaultState: function () { _defaultState() {
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
var o = this.options; const o = this.options;
o.minDate = minDate; o.minDate = minDate;
this.trigger.setMinDate(minDate); this.trigger.setMinDate(minDate);
this.popup && this.popup.setMinDate(minDate); this.popup && this.popup.setMinDate(minDate);
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
var o = this.options; const o = this.options;
o.maxDate = maxDate; o.maxDate = maxDate;
this.trigger.setMaxDate(maxDate); this.trigger.setMaxDate(maxDate);
this.popup && this.popup.setMaxDate(maxDate); this.popup && this.popup.setMaxDate(maxDate);
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
this.trigger.setValue(v); this.trigger.setValue(v);
this._checkDynamicValue(v); this._checkDynamicValue(v);
}, }
getValue: function () {
getValue() {
return this.storeValue; return this.storeValue;
}, }
getKey: function () {
getKey() {
return this.trigger.getKey(); return this.trigger.getKey();
}, }
hidePopupView: function () {
hidePopupView() {
this.combo.hideView(); this.combo.hideView();
}, }
focus: function () { focus() {
this.trigger.focus(); this.trigger.focus();
}, }
blur: function () { blur() {
this.trigger.blur(); this.trigger.blur();
}, }
setWaterMark: function (v) { setWaterMark(v) {
this.trigger.setWaterMark(v); this.trigger.setWaterMark(v);
} }
}); }
BI.DynamicDateCombo.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
BI.DynamicDateCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.DynamicDateCombo.EVENT_FOCUS = "EVENT_FOCUS";
BI.DynamicDateCombo.EVENT_BLUR = "EVENT_BLUR";
BI.DynamicDateCombo.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateCombo.EVENT_VALID = "EVENT_VALID";
BI.DynamicDateCombo.EVENT_ERROR = "EVENT_ERROR";
BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
BI.DynamicDateCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_combo", BI.DynamicDateCombo);
BI.extend(BI.DynamicDateCombo, {
Static: 1,
Dynamic: 2
});

153
src/widget/dynamicdate/dynamicdate.param.item.js

@ -1,130 +1,137 @@
BI.DynamicDateParamItem = BI.inherit(BI.Widget, { import { shortcut, Widget, toPix, isNaturalNumber, i18nText } from "@/core";
import { DynamicDateCard } from "./dynamicdate.card";
import { SignEditor, TextValueCombo } from "@/case";
props: function() { @shortcut()
export class DynamicDateParamItem extends Widget {
static xtype = "bi.dynamic_date_param_item"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_INPUT_CHANGE = "EVENT_INPUT_CHANGE"
props() {
return { return {
baseCls: "bi-dynamic-date-param-item", baseCls: "bi-dynamic-date-param-item",
dateType: BI.DynamicDateCard.TYPE.YEAR, dateType: DynamicDateCard.TYPE.YEAR,
validationChecker: function() { validationChecker () {
return true; return true;
}, },
value: 0, value: 0,
offset: 0, offset: 0,
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
} };
}, }
render: function () { render() {
var self = this, o = this.options; const o = this.options;
return { return {
type: "bi.htape", type: "bi.htape",
items: [{ items: [{
el: { el: {
type: "bi.sign_editor", type: "bi.sign_editor",
cls: "bi-border bi-focus-shadow bi-border-radius", cls: "bi-border bi-focus-shadow bi-border-radius",
height: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 2), height: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 2),
validationChecker: function (v) { validationChecker (v) {
return BI.isNaturalNumber(v); return isNaturalNumber(v);
}, },
value: o.value, value: o.value,
ref: function () { ref: _ref => {
self.editor = this; this.editor = _ref;
}, },
errorText: function () { errorText () {
return BI.i18nText("BI-Please_Input_Natural_Number"); return i18nText("BI-Please_Input_Natural_Number");
}, },
allowBlank: false, allowBlank: false,
listeners: [{ listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM, eventName: SignEditor.EVENT_CONFIRM,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE); this.fireEvent(DynamicDateParamItem.EVENT_CHANGE);
} },
}, { }, {
eventName: BI.SignEditor.EVENT_CHANGE, eventName: SignEditor.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateParamItem.EVENT_INPUT_CHANGE); this.fireEvent(DynamicDateParamItem.EVENT_INPUT_CHANGE);
} },
}] }],
}, },
width: 60 width: 60,
}, { }, {
el: { el: {
type: "bi.label", type: "bi.label",
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
text: this._getText() text: this._getText(),
}, },
width: o.dateType === BI.DynamicDateCard.TYPE.WORK_DAY ? 60 : 20 width: o.dateType === DynamicDateCard.TYPE.WORK_DAY ? 60 : 20,
}, { }, {
type: "bi.text_value_combo", type: "bi.text_value_combo",
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
items: [{ items: [{
text: BI.i18nText("BI-Basic_Front"), text: i18nText("BI-Basic_Front"),
value: 0 value: 0,
}, { }, {
text: BI.i18nText("BI-Basic_Behind"), text: i18nText("BI-Basic_Behind"),
value: 1 value: 1,
}], }],
ref: function () { ref: _ref => {
self.offsetCombo = this; this.offsetCombo = _ref;
}, },
container: null, container: null,
value: o.offset, value: o.offset,
listeners: [{ listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE, eventName: BI.TextValueCombo.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE); this.fireEvent(DynamicDateParamItem.EVENT_CHANGE);
} },
}] }],
}] }],
}; };
}, }
_getText: function () { _getText() {
var text = ""; let text = "";
switch (this.options.dateType) { switch (this.options.dateType) {
case BI.DynamicDateCard.TYPE.YEAR: case DynamicDateCard.TYPE.YEAR:
text = BI.i18nText("BI-Basic_Year"); text = i18nText("BI-Basic_Year");
break; break;
case BI.DynamicDateCard.TYPE.QUARTER: case DynamicDateCard.TYPE.QUARTER:
text = BI.i18nText("BI-Basic_Single_Quarter"); text = i18nText("BI-Basic_Single_Quarter");
break; break;
case BI.DynamicDateCard.TYPE.MONTH: case DynamicDateCard.TYPE.MONTH:
text = BI.i18nText("BI-Basic_Month"); text = i18nText("BI-Basic_Month");
break; break;
case BI.DynamicDateCard.TYPE.WEEK: case DynamicDateCard.TYPE.WEEK:
text = BI.i18nText("BI-Basic_Week"); text = i18nText("BI-Basic_Week");
break; break;
case BI.DynamicDateCard.TYPE.DAY: case DynamicDateCard.TYPE.DAY:
text = BI.i18nText("BI-Basic_Day"); text = i18nText("BI-Basic_Day");
break; break;
case BI.DynamicDateCard.TYPE.WORK_DAY: case DynamicDateCard.TYPE.WORK_DAY:
default: default:
text = BI.i18nText("BI-Basic_Work_Day"); text = i18nText("BI-Basic_Work_Day");
break; break;
} }
return text; return text;
}, }
checkValidation: function () { checkValidation() {
return BI.isNaturalNumber(this.editor.getValue()); return isNaturalNumber(this.editor.getValue());
}, }
setValue: function (v) { setValue(v) {
v = v || {}; v = v || {};
v.value = v.value || 0; v.value = v.value || 0;
v.offset = v.offset || 0; v.offset = v.offset || 0;
this.editor.setValue(v.value); this.editor.setValue(v.value);
this.offsetCombo.setValue(v.offset); this.offsetCombo.setValue(v.offset);
}, }
getValue: function () { getValue() {
return { return {
dateType: this.options.dateType, dateType: this.options.dateType,
value: this.editor.getValue(), value: this.editor.getValue(),
offset: this.offsetCombo.getValue()[0] offset: this.offsetCombo.getValue()[0],
}; };
} }
}
});
BI.DynamicDateParamItem.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateParamItem.EVENT_INPUT_CHANGE = "EVENT_INPUT_CHANGE";
BI.shortcut("bi.dynamic_date_param_item", BI.DynamicDateParamItem);

388
src/widget/dynamicdate/dynamicdate.popup.js

@ -1,257 +1,267 @@
BI.DynamicDatePopup = BI.inherit(BI.Widget, { import { shortcut, Widget, createWidget, i18nText, toPix, createItems, isNull, isEmptyObject, isEmptyString, getDate, checkDateVoid, print } from "@/core";
constants: { import { DynamicDateCombo } from "./dynamicdate.combo";
tabHeight: 40, import { TextButton, Tab } from "@/base";
}, import { DateCalendarPopup } from "../date/calendar";
import { DynamicDateHelper } from "./dynamicdate.caculate";
props: { @shortcut()
export class DynamicDatePopup extends Widget {
static xtype = "bi.dynamic_date_popup"
props = {
baseCls: "bi-dynamic-date-popup", baseCls: "bi-dynamic-date-popup",
width: 272, width: 272,
supportDynamic: true, supportDynamic: true,
}, };
static EVENT_CHANGE = "EVENT_CHANGE"
static BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE"
static BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE"
static BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
_init: function () { _init() {
BI.DynamicDatePopup.superclass._init.apply(this, arguments); super._init(...arguments);
var self = this, opts = this.options, c = this.constants; const opts = this.options;
this.storeValue = {type: BI.DynamicDateCombo.Static}; this.storeValue = {
BI.createWidget({ type: DynamicDateCombo.Static,
};
createWidget({
element: this, element: this,
type: "bi.vertical", type: "bi.vertical",
items: [{ items: [{
el: this._getTabJson() el: this._getTabJson(),
}, { }, {
el: { el: {
type: "bi.grid", type: "bi.grid",
items: [[{ items: [
type: "bi.text_button", [{
cls: "bi-high-light bi-split-top", type: "bi.text_button",
shadow: true, cls: "bi-high-light bi-split-top",
text: BI.i18nText("BI-Basic_Clear"), shadow: true,
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), text: i18nText("BI-Basic_Clear"),
listeners: [{ textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
self.fireEvent(BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE); action: () => {
} this.fireEvent(DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE);
}] },
}, { }],
type: "bi.text_button", }, {
cls: "bi-split-left bi-split-right bi-high-light bi-split-top", type: "bi.text_button",
shadow: true, cls: "bi-split-left bi-split-right bi-high-light bi-split-top",
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), shadow: true,
text: BI.i18nText("BI-Multi_Date_Today"), textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
disabled: this._checkTodayValid(), text: i18nText("BI-Multi_Date_Today"),
ref: function () { disabled: this._checkTodayValid(),
self.todayButton = this; ref: _ref => {
}, this.todayButton = _ref;
listeners: [{ },
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
self.fireEvent(BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE); action: () => {
} this.fireEvent(DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE);
}] },
}, { }],
type: "bi.text_button", }, {
cls: "bi-high-light bi-split-top", type: "bi.text_button",
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), cls: "bi-high-light bi-split-top",
shadow: true, textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
text: BI.i18nText("BI-Basic_OK"), shadow: true,
listeners: [{ text: i18nText("BI-Basic_OK"),
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
var type = self.dateTab.getSelect(); action: () => {
if (type === BI.DynamicDateCombo.Dynamic) { const type = this.dateTab.getSelect();
self.dynamicPane.checkValidation(true) && self.fireEvent(BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE); if (type === DynamicDateCombo.Dynamic) {
} else { this.dynamicPane.checkValidation(true) && this.fireEvent(DynamicDatePopup.BUTTON_OK_EVENT_CHANGE);
self.fireEvent(BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE); } else {
} this.fireEvent(DynamicDatePopup.BUTTON_OK_EVENT_CHANGE);
} }
},
}],
}] }]
}]], ],
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
}, },
}] }],
}); });
this.setValue(opts.value); this.setValue(opts.value);
}, }
_getTabJson: function () { _getTabJson() {
var self = this, o = this.options; const o = this.options;
return { return {
type: "bi.tab", type: "bi.tab",
logic: { logic: {
dynamic: true dynamic: true,
}, },
ref: function () { ref: _ref => {
self.dateTab = this; this.dateTab = _ref;
}, },
tab: { tab: {
type: "bi.linear_segment", type: "bi.linear_segment",
invisible: !o.supportDynamic, invisible: !o.supportDynamic,
cls: "bi-split-bottom", cls: "bi-split-bottom",
height: this.constants.tabHeight, height: this.constants.tabHeight,
items: BI.createItems([{ items: createItems([{
text: BI.i18nText("BI-Multi_Date_YMD"), text: i18nText("BI-Multi_Date_YMD"),
value: BI.DynamicDateCombo.Static value: DynamicDateCombo.Static,
}, { }, {
text: BI.i18nText("BI-Basic_Dynamic_Title"), text: i18nText("BI-Basic_Dynamic_Title"),
value: BI.DynamicDateCombo.Dynamic value: DynamicDateCombo.Dynamic,
}], { }], {
textAlign: "center" textAlign: "center",
}) }),
}, },
cardCreator: function (v) { cardCreator: v => {
switch (v) { switch (v) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return { return {
type: "bi.dynamic_date_card", type: "bi.dynamic_date_card",
cls: "dynamic-date-pane", cls: "dynamic-date-pane",
listeners: [{ listeners: [{
eventName: "EVENT_CHANGE", eventName: "EVENT_CHANGE",
action: function () { action: () => {
self._setInnerValue(self.year, v); this._setInnerValue(this.year, v);
} },
}], }],
min: self.options.min, min: this.options.min,
max: self.options.max, max: this.options.max,
ref: function () { ref: _ref => {
self.dynamicPane = this; this.dynamicPane = _ref;
} },
}; };
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
return { return {
type: "bi.date_calendar_popup", type: "bi.date_calendar_popup",
behaviors: o.behaviors, behaviors: o.behaviors,
min: self.options.min, min: this.options.min,
max: self.options.max, max: this.options.max,
listeners: [{ listeners: [{
eventName: BI.DateCalendarPopup.EVENT_CHANGE, eventName: DateCalendarPopup.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.DynamicDatePopup.EVENT_CHANGE); this.fireEvent(DynamicDatePopup.EVENT_CHANGE);
} },
}, { }, {
eventName: BI.DateCalendarPopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, eventName: DateCalendarPopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW,
action: function () { action: () => {
self.fireEvent(BI.DynamicDatePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); this.fireEvent(DynamicDatePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
} },
}], }],
ref: function () { ref: _ref => {
self.ymd = this; this.ymd = _ref;
} },
}; };
} }
}, },
listeners: [{ listeners: [{
eventName: BI.Tab.EVENT_CHANGE, eventName: Tab.EVENT_CHANGE,
action: function () { action: () => {
var v = self.dateTab.getSelect(); const v = this.dateTab.getSelect();
let date;
switch (v) { switch (v) {
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue()); date = DynamicDateHelper.getCalculation(this.dynamicPane.getValue());
self.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
});
this._setInnerValue();
break;
case DynamicDateCombo.Dynamic:
default:
if (this.storeValue && this.storeValue.type === DynamicDateCombo.Dynamic) {
this.dynamicPane.setValue(this.storeValue.value);
} else {
this.dynamicPane.setValue({
year: 0,
}); });
self._setInnerValue(); }
break; this._setInnerValue();
case BI.DynamicDateCombo.Dynamic: break;
default:
if(self.storeValue && self.storeValue.type === BI.DynamicDateCombo.Dynamic) {
self.dynamicPane.setValue(self.storeValue.value);
}else{
self.dynamicPane.setValue({
year: 0
});
}
self._setInnerValue();
break;
} }
} },
}] }],
}; };
}, }
_setInnerValue: function () { _setInnerValue() {
if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) { if (this.dateTab.getSelect() === DynamicDateCombo.Static) {
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
this.todayButton.setEnable(!this._checkTodayValid()); this.todayButton.setEnable(!this._checkTodayValid());
} else { } else {
var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getInputValue()); let date = DynamicDateHelper.getCalculation(this.dynamicPane.getInputValue());
date = BI.print(date, "%Y-%X-%d"); date = print(date, "%Y-%X-%d");
this.todayButton.setValue(date); this.todayButton.setValue(date);
this.todayButton.setEnable(false); this.todayButton.setEnable(false);
} }
}, }
_checkValueValid: function (value) { _checkValueValid(value) {
return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value); return isNull(value) || isEmptyObject(value) || isEmptyString(value);
}, }
_checkTodayValid: function () { _checkTodayValid() {
var o = this.options; const o = this.options;
var today = BI.getDate(); const today = getDate();
return !!BI.checkDateVoid(today.getFullYear(), today.getMonth() + 1, today.getDate(), o.min, o.max)[0];
}, return !!checkDateVoid(today.getFullYear(), today.getMonth() + 1, today.getDate(), o.min, o.max)[0];
}
setMinDate: function (minDate) { setMinDate(minDate) {
if (this.options.min !== minDate) { if (this.options.min !== minDate) {
this.options.min = minDate; this.options.min = minDate;
this.ymd && this.ymd.setMinDate(minDate); this.ymd && this.ymd.setMinDate(minDate);
this.dynamicPane && this.dynamicPane.setMinDate(minDate); this.dynamicPane && this.dynamicPane.setMinDate(minDate);
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (this.options.max !== maxDate) { if (this.options.max !== maxDate) {
this.options.max = maxDate; this.options.max = maxDate;
this.ymd && this.ymd.setMaxDate(maxDate); this.ymd && this.ymd.setMaxDate(maxDate);
this.dynamicPane && this.dynamicPane.setMaxDate(maxDate); this.dynamicPane && this.dynamicPane.setMaxDate(maxDate);
} }
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
var self = this;
var type, value;
v = v || {}; v = v || {};
type = v.type || BI.DynamicDateCombo.Static; const type = v.type || DynamicDateCombo.Static;
value = v.value || v; const value = v.value || v;
this.dateTab.setSelect(type); this.dateTab.setSelect(type);
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
this.dynamicPane.setValue(value); this.dynamicPane.setValue(value);
self._setInnerValue(); this._setInnerValue();
break; break;
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
if (this._checkValueValid(value)) { if (this._checkValueValid(value)) {
var date = BI.getDate(); const date = getDate();
this.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
}); });
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
} else { } else {
this.ymd.setValue(value); this.ymd.setValue(value);
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
} }
this.todayButton.setEnable(!this._checkTodayValid()); this.todayButton.setEnable(!this._checkTodayValid());
break; break;
} }
}, }
getValue: function () { getValue() {
return { return {
type: this.dateTab.getSelect(), type: this.dateTab.getSelect(),
value: this.dateTab.getValue() value: this.dateTab.getValue(),
}; };
} }
}); }
BI.DynamicDatePopup.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE";
BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE";
BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE";
BI.DynamicDatePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_popup", BI.DynamicDatePopup);

449
src/widget/dynamicdate/dynamicdate.trigger.js

@ -1,59 +1,84 @@
BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { import { shortcut, i18nText, createWidget, isKey, checkDateLegal, parseDateTime, bind, isNotNull, isNotEmptyString, isEqual, isEmptyObject, getDate, isEmptyString, isNull, each, checkDateVoid, print } from "@/core";
_const: { import { Trigger } from "@/base";
import { SignEditor } from "@/case";
import { DynamicDateCombo } from "./dynamicdate.combo";
import { DynamicDateHelper } from "./dynamicdate.caculate";
@shortcut()
export class DynamicDateTrigger extends Trigger {
static xtype = "bi.dynamic_date_trigger"
_const = {
hgap: 4, hgap: 4,
vgap: 2, vgap: 2,
yearLength: 4, yearLength: 4,
yearMonthLength: 6, yearMonthLength: 6,
yearFullMonthLength: 7, yearFullMonthLength: 7,
compareFormat: "%Y-%X-%d", compareFormat: "%Y-%X-%d",
iconWidth: 24
},
props: () => ({
extraCls: "bi-date-trigger",
min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期
height: 24,
iconWidth: 24, iconWidth: 24,
format: "", // 显示的日期格式化方式 };
allowEdit: true, // 是否允许编辑
watermark: BI.i18nText("BI-Basic_Unrestricted"), static EVENT_BLUR = "EVENT_BLUR"
}), static EVENT_FOCUS = "EVENT_FOCUS"
static EVENT_START = "EVENT_START"
static EVENT_STOP = "EVENT_STOP"
static EVENT_CONFIRM = "EVENT_CONFIRM"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_VALID = "EVENT_VALID"
static EVENT_ERROR = "EVENT_ERROR"
static EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK"
static EVENT_KEY_DOWN = "EVENT_KEY_DOWN"
props() {
return {
extraCls: "bi-date-trigger",
min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期
height: 24,
iconWidth: 24,
format: "", // 显示的日期格式化方式
allowEdit: true, // 是否允许编辑
watermark: i18nText("BI-Basic_Unrestricted"),
};
}
_init: function () { _init() {
BI.DynamicDateTrigger.superclass._init.apply(this, arguments); super._init(...arguments);
var self = this, o = this.options, c = this._const; const o = this.options,
c = this._const;
this.storeTriggerValue = ""; this.storeTriggerValue = "";
this.editor = BI.createWidget({ this.editor = createWidget({
type: "bi.sign_editor", type: "bi.sign_editor",
simple: o.simple, simple: o.simple,
height: o.height, height: o.height,
validationChecker: function (v) { validationChecker: v => {
var formatStr = self._getStandardDateStr(v); const formatStr = this._getStandardDateStr(v);
var date = formatStr.match(/\d+/g); const date = formatStr.match(/\d+/g);
!BI.isKey(o.format) && self._autoAppend(v, date); !isKey(o.format) && this._autoAppend(v, date);
return self._dateCheck(formatStr) && BI.checkDateLegal(formatStr) && self._checkVoid({
return this._dateCheck(formatStr) && checkDateLegal(formatStr) && this._checkVoid({
year: date[0] | 0, year: date[0] | 0,
month: date[1] | 0, month: date[1] | 0,
day: date[2] | 0 day: date[2] | 0,
}); });
}, },
quitChecker: function () { quitChecker () {
return false; return false;
}, },
hgap: c.hgap, hgap: c.hgap,
vgap: c.vgap, vgap: c.vgap,
allowBlank: true, allowBlank: true,
watermark: o.watermark, watermark: o.watermark,
errorText: function (v) { errorText: v => {
var str = ""; let str = "";
if (!BI.isKey(o.format)) { if (!isKey(o.format)) {
if (!self._dateCheck(v)) { if (!this._dateCheck(v)) {
str = self.editor.isEditing() ? BI.i18nText("BI-Date_Trigger_Error_Text") : BI.i18nText("BI-Year_Trigger_Invalid_Text"); str = this.editor.isEditing() ? i18nText("BI-Date_Trigger_Error_Text") : i18nText("BI-Year_Trigger_Invalid_Text");
} else { } else {
var start = BI.parseDateTime(o.min, "%Y-%X-%d"); const start = parseDateTime(o.min, "%Y-%X-%d");
var end = BI.parseDateTime(o.max, "%Y-%X-%d"); const end = parseDateTime(o.max, "%Y-%X-%d");
str = BI.i18nText("BI-Basic_Date_Range_Error", str = i18nText("BI-Basic_Date_Range_Error",
start.getFullYear(), start.getFullYear(),
start.getMonth() + 1, start.getMonth() + 1,
start.getDate(), start.getDate(),
@ -66,276 +91,274 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, {
return str; return str;
}, },
title: BI.bind(this._getTitle, this) title: bind(this._getTitle, this),
}); });
this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () { this.editor.on(SignEditor.EVENT_KEY_DOWN, (...args) => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_KEY_DOWN, arguments); this.fireEvent(DynamicDateTrigger.EVENT_KEY_DOWN, ...args);
}); });
this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { this.editor.on(SignEditor.EVENT_FOCUS, () => {
self.storeTriggerValue = self.getKey(); this.storeTriggerValue = this.getKey();
self.fireEvent(BI.DynamicDateTrigger.EVENT_FOCUS); this.fireEvent(DynamicDateTrigger.EVENT_FOCUS);
}); });
this.editor.on(BI.SignEditor.EVENT_BLUR, function () { this.editor.on(SignEditor.EVENT_BLUR, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_BLUR); this.fireEvent(DynamicDateTrigger.EVENT_BLUR);
}); });
this.editor.on(BI.SignEditor.EVENT_STOP, function () { this.editor.on(SignEditor.EVENT_STOP, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_STOP); this.fireEvent(DynamicDateTrigger.EVENT_STOP);
}); });
this.editor.on(BI.SignEditor.EVENT_VALID, function () { this.editor.on(SignEditor.EVENT_VALID, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_VALID); this.fireEvent(DynamicDateTrigger.EVENT_VALID);
}); });
this.editor.on(BI.SignEditor.EVENT_ERROR, function () { this.editor.on(SignEditor.EVENT_ERROR, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_ERROR); this.fireEvent(DynamicDateTrigger.EVENT_ERROR);
}); });
this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { this.editor.on(SignEditor.EVENT_CONFIRM, () => {
var value = self.editor.getValue(); const value = this.editor.getValue();
if (BI.isNotNull(value)) { if (isNotNull(value)) {
self.editor.setState(value); this.editor.setState(value);
} }
if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { if (isNotEmptyString(value) && !isEqual(this.storeTriggerValue, this.getKey())) {
var formatStr = self._getStandardDateStr(value); const formatStr = this._getStandardDateStr(value);
var date = formatStr.match(/\d+/g); const date = formatStr.match(/\d+/g);
self.storeValue = { this.storeValue = {
type: BI.DynamicDateCombo.Static, type: DynamicDateCombo.Static,
value: { value: {
year: date[0] | 0, year: date[0] | 0,
month: date[1] | 0, month: date[1] | 0,
day: date[2] | 0 day: date[2] | 0,
} },
}; };
} }
self.fireEvent(BI.DynamicDateTrigger.EVENT_CONFIRM); this.fireEvent(DynamicDateTrigger.EVENT_CONFIRM);
}); });
this.editor.on(BI.SignEditor.EVENT_SPACE, function () { this.editor.on(SignEditor.EVENT_SPACE, () => {
if (self.editor.isValid()) { if (this.editor.isValid()) {
self.editor.blur(); this.editor.blur();
} }
}); });
this.editor.on(BI.SignEditor.EVENT_START, function () { this.editor.on(SignEditor.EVENT_START, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_START); this.fireEvent(DynamicDateTrigger.EVENT_START);
}); });
this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { this.editor.on(SignEditor.EVENT_CHANGE, () => {
self.fireEvent(BI.DynamicDateTrigger.EVENT_CHANGE); this.fireEvent(DynamicDateTrigger.EVENT_CHANGE);
}); });
BI.createWidget({ createWidget({
type: "bi.htape", type: "bi.htape",
element: this, element: this,
columnSize: ["", this._const.iconWidth], columnSize: ["", this._const.iconWidth],
items: [{ items: [{
el: this.editor el: this.editor,
}, { }, {
el: { el: {
type: "bi.icon_button", type: "bi.icon_button",
cls: "bi-trigger-icon-button date-font", cls: "bi-trigger-icon-button date-font",
width: this._const.iconWidth width: this._const.iconWidth,
}, },
width: this._const.iconWidth width: this._const.iconWidth,
}] }],
}); });
!o.allowEdit && BI.createWidget({ !o.allowEdit && createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
items: [{ items: [{
el: { el: {
type: "bi.text", type: "bi.text",
title: BI.bind(this._getTitle, this) title: bind(this._getTitle, this),
}, },
left: 0, left: 0,
right: o.iconWidth, right: o.iconWidth,
top: 0, top: 0,
bottom: 0 bottom: 0,
}] }],
}); });
this.setValue(o.value); this.setValue(o.value);
}, }
_getTitle: function () { _getTitle() {
var storeValue = this.storeValue || {}; const storeValue = this.storeValue || {};
if (BI.isEmptyObject(storeValue)) { if (isEmptyObject(storeValue)) {
return this.options.watermark; return this.options.watermark;
} }
var type = storeValue.type || BI.DynamicDateCombo.Static; const type = storeValue.type || DynamicDateCombo.Static;
var value = storeValue.value; const value = storeValue.value;
let text, date, dateStr;
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
var text = this._getText(value); text = this._getText(value);
var date = BI.getDate(); date = getDate();
date = BI.DynamicDateHelper.getCalculation(value); date = DynamicDateHelper.getCalculation(value);
var dateStr = BI.print(date, this._getFormatString()); dateStr = print(date, this._getFormatString());
return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr);
case BI.DynamicDateCombo.Static: return isEmptyString(text) ? dateStr : (`${text}:${dateStr}`);
default: case DynamicDateCombo.Static:
if (BI.isNull(value) || BI.isNull(value.day)) { default:
return ""; if (isNull(value) || isNull(value.day)) {
} return "";
return BI.print(BI.getDate(value.year, (value.month - 1), value.day), this._getFormatString()); }
return print(getDate(value.year, (value.month - 1), value.day), this._getFormatString());
} }
}, }
_getStandardDateStr: function (v) { _getStandardDateStr(v) {
var c = this._const; const c = this._const;
var result = [0, 1, 2]; let result = [0, 1, 2];
var formatArray = this._getFormatString().match(/%./g); const formatArray = this._getFormatString().match(/%./g);
BI.each(formatArray, function (idx, v) { each(formatArray, (idx, v) => {
switch (v) { switch (v) {
case "%Y": case "%Y":
case "%y": case "%y":
result[0] = idx; result[0] = idx;
break; break;
case "%X": case "%X":
case "%x": case "%x":
result[1] = idx; result[1] = idx;
break; break;
case "%d": case "%d":
case "%e": case "%e":
default: default:
result[2] = idx; result[2] = idx;
break; break;
} }
}); });
// 这边不能直接用\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = = // 这边不能直接用\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = =
// 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心 // 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心
var date = BI.parseDateTime(v, this._getFormatString()); const date = parseDateTime(v, this._getFormatString());
if(BI.print(date, this._getFormatString()) === v) { if (print(date, this._getFormatString()) === v) {
v = BI.print(date, c.compareFormat); v = print(date, c.compareFormat);
result = [0, 1, 2]; result = [0, 1, 2];
} }
var dateArray = v.match(/\d+/g); const dateArray = v.match(/\d+/g);
var newArray = []; const newArray = [];
BI.each(dateArray, function (idx) { each(dateArray, idx => {
newArray[idx] = dateArray[result[idx]]; newArray[idx] = dateArray[result[idx]];
}); });
// 这边之所以不直接返回join结果是因为年的格式可能只有2位,所以需要format一下 // 这边之所以不直接返回join结果是因为年的格式可能只有2位,所以需要format一下
if(newArray.length === result.length && newArray[0].length === 2) { if (newArray.length === result.length && newArray[0].length === 2) {
return BI.print(BI.parseDateTime(newArray.join("-"), c.compareFormat), c.compareFormat); return print(parseDateTime(newArray.join("-"), c.compareFormat), c.compareFormat);
} }
// 这边format成-20-也没关系, 反正都是不合法的 // 这边format成-20-也没关系, 反正都是不合法的
return newArray.join("-"); return newArray.join("-");
}, }
_getFormatString: function () { _getFormatString() {
return this.options.format || this._const.compareFormat; return this.options.format || this._const.compareFormat;
}, }
_dateCheck(date) {
return print(parseDateTime(date, "%Y-%x-%d"), "%Y-%x-%d") === date ||
print(parseDateTime(date, "%Y-%X-%d"), "%Y-%X-%d") === date ||
print(parseDateTime(date, "%Y-%x-%e"), "%Y-%x-%e") === date ||
print(parseDateTime(date, "%Y-%X-%e"), "%Y-%X-%e") === date;
}
_dateCheck: function (date) { _checkVoid(obj) {
return BI.print(BI.parseDateTime(date, "%Y-%x-%d"), "%Y-%x-%d") === date || return !checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0];
BI.print(BI.parseDateTime(date, "%Y-%X-%d"), "%Y-%X-%d") === date || }
BI.print(BI.parseDateTime(date, "%Y-%x-%e"), "%Y-%x-%e") === date ||
BI.print(BI.parseDateTime(date, "%Y-%X-%e"), "%Y-%X-%e") === date; _autoAppend(v, dateObj) {
}, const splitMonth = v.split("-")[1];
_checkVoid: function (obj) { if (isNotNull(dateObj) && checkDateLegal(v)) {
return !BI.checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0];
},
_autoAppend: function (v, dateObj) {
if (BI.isNotNull(dateObj) && BI.checkDateLegal(v)) {
switch (v.length) { switch (v.length) {
case this._const.yearLength: case this._const.yearLength:
if (this._yearCheck(v)) { if (this._yearCheck(v)) {
this.editor.setValue(v + "-"); this.editor.setValue(`${v}-`);
} }
break; break;
case this._const.yearMonthLength: case this._const.yearMonthLength:
case this._const.yearFullMonthLength: case this._const.yearFullMonthLength:
var splitMonth = v.split("-")[1]; if ((isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) {
if ((BI.isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) { this.editor.setValue(`${v}-`);
this.editor.setValue(v + "-"); }
} break;
break; default:
} }
} }
}, }
_yearCheck: function (v) { _yearCheck(v) {
var date = BI.print(BI.parseDateTime(v, this._getFormatString()), this._const.compareFormat); const date = print(parseDateTime(v, this._getFormatString()), this._const.compareFormat);
return BI.print(BI.parseDateTime(v, "%Y"), "%Y") === v && date >= this.options.min && date <= this.options.max;
}, return print(parseDateTime(v, "%Y"), "%Y") === v && date >= this.options.min && date <= this.options.max;
}
_monthCheck: function (v) { _monthCheck(v) {
var date = BI.parseDateTime(v, this._getFormatString()); const date = parseDateTime(v, this._getFormatString());
var dateStr = BI.print(date, this._const.compareFormat); const dateStr = print(date, this._const.compareFormat);
return (date.getMonth() >= 0 && (BI.print(BI.parseDateTime(v, "%Y-%X"), "%Y-%X") === v ||
BI.print(BI.parseDateTime(v, "%Y-%x"), "%Y-%x") === v)) && dateStr >= this.options.min && dateStr <= this.options.max; return (date.getMonth() >= 0 && (print(parseDateTime(v, "%Y-%X"), "%Y-%X") === v ||
}, print(parseDateTime(v, "%Y-%x"), "%Y-%x") === v)) && dateStr >= this.options.min && dateStr <= this.options.max;
}
_setInnerValue: function (date) { _setInnerValue(date) {
var dateStr = BI.print(date, this._getFormatString()); const dateStr = print(date, this._getFormatString());
this.editor.setState(dateStr); this.editor.setState(dateStr);
this.editor.setValue(dateStr); this.editor.setValue(dateStr);
}, }
_getText: function (obj) { _getText(obj) {
return BI.DynamicDateHelper.getDescription(obj); return DynamicDateHelper.getDescription(obj);
}, }
setValue: function (v) { setValue(v) {
var type, value, self = this; let type, value;
var date = BI.getDate(); let date = getDate();
this.storeValue = v; this.storeValue = v;
if (BI.isNotNull(v)) { if (isNotNull(v)) {
type = v.type || BI.DynamicDateCombo.Static; type = v.type || DynamicDateCombo.Static;
value = v.value || v; value = v.value || v;
} }
const text = this._getText(value);
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
var text = this._getText(value); date = DynamicDateHelper.getCalculation(value);
date = BI.DynamicDateHelper.getCalculation(value); this._setInnerValue(date, text);
this._setInnerValue(date, text); break;
break; case DynamicDateCombo.Static:
case BI.DynamicDateCombo.Static: default:
default: if (isNull(value) || isNull(value.day)) {
if (BI.isNull(value) || BI.isNull(value.day)) { this.editor.setState("");
this.editor.setState(""); this.editor.setValue("");
this.editor.setValue(""); } else {
} else { const dateStr = print(getDate(value.year, (value.month - 1), value.day), this._getFormatString());
var dateStr = BI.print(BI.getDate(value.year, (value.month - 1), value.day), this._getFormatString()); this.editor.setState(dateStr);
this.editor.setState(dateStr); this.editor.setValue(dateStr);
this.editor.setValue(dateStr); }
} break;
break;
} }
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (BI.isNotEmptyString(this.options.min)) { if (isNotEmptyString(this.options.min)) {
this.options.min = minDate; this.options.min = minDate;
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (BI.isNotEmptyString(this.options.max)) { if (isNotEmptyString(this.options.max)) {
this.options.max = maxDate; this.options.max = maxDate;
} }
}, }
getKey: function () { getKey() {
return this.editor.getValue(); return this.editor.getValue();
}, }
getValue: function () {
getValue() {
return this.storeValue; return this.storeValue;
}, }
focus: function () { focus() {
this.editor.focus(); this.editor.focus();
}, }
blur: function () { blur() {
this.editor.blur(); this.editor.blur();
}, }
setWaterMark: function (v) { setWaterMark(v) {
this.editor.setWaterMark(v); this.editor.setWaterMark(v);
} }
}); }
BI.DynamicDateTrigger.EVENT_BLUR = "EVENT_BLUR";
BI.DynamicDateTrigger.EVENT_FOCUS = "EVENT_FOCUS";
BI.DynamicDateTrigger.EVENT_START = "EVENT_START";
BI.DynamicDateTrigger.EVENT_STOP = "EVENT_STOP";
BI.DynamicDateTrigger.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.DynamicDateTrigger.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateTrigger.EVENT_VALID = "EVENT_VALID";
BI.DynamicDateTrigger.EVENT_ERROR = "EVENT_ERROR";
BI.DynamicDateTrigger.EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK";
BI.DynamicDateTrigger.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
BI.shortcut("bi.dynamic_date_trigger", BI.DynamicDateTrigger);

6
src/widget/dynamicdate/index.js

@ -0,0 +1,6 @@
export { DynamicDateHelper } from "./dynamicdate.caculate";
export { DynamicDateCard } from "./dynamicdate.card";
export { DynamicDateCombo } from "./dynamicdate.combo";
export { DynamicDateParamItem } from "./dynamicdate.param.item";
export { DynamicDatePopup } from "./dynamicdate.popup";
export { DynamicDateTrigger } from "./dynamicdate.trigger";

409
src/widget/dynamicdatetime/dynamicdatetime.combo.js

@ -1,13 +1,17 @@
BI.DynamicDateTimeCombo = BI.inherit(BI.Single, { import { shortcut, getDate, toPix, isEqual, isNotEmptyString, isEmptyString, isNotNull, isNotEmptyObject, checkDateVoid } from "@/core";
constants: { import { Single, Combo } from "@/base";
popupHeight: 259, import { DynamicDateTimeTrigger } from "./dynamicdatetime.trigger";
popupWidth: 270, import { DynamicDateTimePopup } from "./dynamicdatetime.popup";
comboAdjustHeight: 1, import { DynamicDateCombo } from "../dynamicdate";
border: 1,
iconWidth: 24
},
props: { @shortcut()
export class DynamicDateTimeCombo extends Single {
static xtype = "bi.dynamic_date_time_combo"
static Static = 1
static Dynamic = 2
props = {
baseCls: "bi-dynamic-date--time-combo", baseCls: "bi-dynamic-date--time-combo",
height: 24, height: 24,
minDate: "1900-01-01", minDate: "1900-01-01",
@ -16,33 +20,44 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {
allowEdit: true, allowEdit: true,
supportDynamic: true, supportDynamic: true,
attributes: { attributes: {
tabIndex: -1 tabIndex: -1,
}, },
isNeedAdjustHeight: false, isNeedAdjustHeight: false,
isNeedAdjustWidth: false isNeedAdjustWidth: false,
}, };
_init: function () { static EVENT_KEY_DOWN = "EVENT_KEY_DOWN"
BI.DynamicDateTimeCombo.superclass._init.apply(this, arguments); static EVENT_CONFIRM = "EVENT_CONFIRM"
}, static EVENT_FOCUS = "EVENT_FOCUS"
static EVENT_BLUR = "EVENT_BLUR"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_VALID = "EVENT_VALID"
static EVENT_ERROR = "EVENT_ERROR"
static EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
render: function () {
var self = this, opts = this.options; _init() {
super._init(...arguments);
}
render() {
const opts = this.options;
this.storeTriggerValue = ""; this.storeTriggerValue = "";
var date = BI.getDate(); const date = getDate();
this.storeValue = opts.value; this.storeValue = opts.value;
var border = opts.simple ? 1 : 2; const border = opts.simple ? 1 : 2;
return { return {
type: "bi.absolute", type: "bi.absolute",
items: [{ items: [{
el: { el: {
type: "bi.combo", type: "bi.combo",
cls: (opts.simple ? "bi-border-bottom" : "bi-border bi-border-radius") + " bi-focus-shadow", cls: `${opts.simple ? "bi-border-bottom" : "bi-border bi-border-radius"} bi-focus-shadow`,
destroyWhenHide: true, destroyWhenHide: true,
container: opts.container, container: opts.container,
ref: function () { ref: _ref => {
self.combo = this; this.combo = _ref;
}, },
toggle: false, toggle: false,
isNeedAdjustHeight: opts.isNeedAdjustHeight, isNeedAdjustHeight: opts.isNeedAdjustHeight,
@ -50,16 +65,16 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {
el: { el: {
type: "bi.horizontal_fill", type: "bi.horizontal_fill",
columnSize: [this.constants.iconWidth, "fill"], columnSize: [this.constants.iconWidth, "fill"],
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
items: [{ items: [{
el: { el: {
type: "bi.icon_button", type: "bi.icon_button",
cls: "bi-trigger-icon-button date-change-h-font", cls: "bi-trigger-icon-button date-change-h-font",
width: this.constants.iconWidth, width: this.constants.iconWidth,
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
ref: function () { ref: _ref => {
self.changeIcon = this; this.changeIcon = _ref;
} },
}, },
}, { }, {
type: "bi.dynamic_date_time_trigger", type: "bi.dynamic_date_time_trigger",
@ -70,90 +85,90 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {
watermark: opts.watermark, watermark: opts.watermark,
format: opts.format, format: opts.format,
iconWidth: this.constants.iconWidth, iconWidth: this.constants.iconWidth,
height: BI.toPix(opts.height, border), height: toPix(opts.height, border),
value: opts.value, value: opts.value,
ref: function () { ref: _ref => {
self.trigger = this; this.trigger = _ref;
}, },
listeners: [{ listeners: [{
eventName: BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN, eventName: DynamicDateTimeTrigger.EVENT_KEY_DOWN,
action: function () { action: (...args) => {
if (self.combo.isViewVisible()) { if (this.combo.isViewVisible()) {
self.combo.hideView(); this.combo.hideView();
} }
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_KEY_DOWN, arguments); this.fireEvent(DynamicDateTimeCombo.EVENT_KEY_DOWN, ...args);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_STOP, eventName: DynamicDateTimeTrigger.EVENT_STOP,
action: function () { action: () => {
if (!self.combo.isViewVisible()) { if (!this.combo.isViewVisible()) {
self.combo.showView(); this.combo.showView();
} }
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK, eventName: DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK,
action: function () { action: () => {
self.combo.toggle(); this.combo.toggle();
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_FOCUS, eventName: DynamicDateTimeTrigger.EVENT_FOCUS,
action: function () { action: () => {
self.storeTriggerValue = self.trigger.getKey(); this.storeTriggerValue = this.trigger.getKey();
if (!self.combo.isViewVisible()) { if (!this.combo.isViewVisible()) {
self.combo.showView(); this.combo.showView();
} }
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_FOCUS); this.fireEvent(DynamicDateTimeCombo.EVENT_FOCUS);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_BLUR, eventName: DynamicDateTimeTrigger.EVENT_BLUR,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BLUR); this.fireEvent(DynamicDateTimeCombo.EVENT_BLUR);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_ERROR, eventName: DynamicDateTimeTrigger.EVENT_ERROR,
action: function () { action: () => {
self.storeValue = { this.storeValue = {
type: BI.DynamicDateTimeCombo.Static, type: DynamicDateTimeCombo.Static,
value: { value: {
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1 month: date.getMonth() + 1,
} },
}; };
self.combo.element.addClass("error"); this.combo.element.addClass("error");
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_ERROR); this.fireEvent(DynamicDateTimeCombo.EVENT_ERROR);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_VALID, eventName: DynamicDateTimeTrigger.EVENT_VALID,
action: function () { action: () => {
self.storeValue = self.trigger.getValue(); this.storeValue = this.trigger.getValue();
self.combo.element.removeClass("error"); this.combo.element.removeClass("error");
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_VALID); this.fireEvent(DynamicDateTimeCombo.EVENT_VALID);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_CHANGE, eventName: DynamicDateTimeTrigger.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CHANGE); this.fireEvent(DynamicDateTimeCombo.EVENT_CHANGE);
} },
}, { }, {
eventName: BI.DynamicDateTimeTrigger.EVENT_CONFIRM, eventName: DynamicDateTimeTrigger.EVENT_CONFIRM,
action: function () { action: () => {
var dateStore = self.storeTriggerValue; const dateStore = this.storeTriggerValue;
var dateObj = self.trigger.getKey(); const dateObj = this.trigger.getKey();
if (self.combo.isViewVisible() || BI.isEqual(dateObj, dateStore)) { if (this.combo.isViewVisible() || isEqual(dateObj, dateStore)) {
return; return;
} }
if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { if (isNotEmptyString(dateObj) && !isEqual(dateObj, dateStore)) {
self.storeValue = self.trigger.getValue(); this.storeValue = this.trigger.getValue();
self.setValue(self.trigger.getValue()); this.setValue(this.trigger.getValue());
} else if (BI.isEmptyString(dateObj)) { } else if (isEmptyString(dateObj)) {
self.storeValue = null; this.storeValue = null;
self.trigger.setValue(); this.trigger.setValue();
} }
self._checkDynamicValue(self.storeValue); this._checkDynamicValue(this.storeValue);
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeCombo.EVENT_CONFIRM);
} },
}] }],
}] }],
}, },
adjustLength: this.constants.comboAdjustHeight, adjustLength: this.constants.comboAdjustHeight,
popup: { popup: {
@ -164,67 +179,67 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {
behaviors: opts.behaviors, behaviors: opts.behaviors,
min: opts.minDate, min: opts.minDate,
max: opts.maxDate, max: opts.maxDate,
ref: function () { ref: _ref => {
self.popup = this; this.popup = _ref;
}, },
listeners: [{ listeners: [{
eventName: BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE, eventName: DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE,
action: function () { action: () => {
self.setValue(); this.setValue();
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE, eventName: DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE,
action: function () { action: () => {
var date = BI.getDate(); const date = getDate();
self.setValue({ this.setValue({
type: BI.DynamicDateTimeCombo.Static, type: DynamicDateTimeCombo.Static,
value: { value: {
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate(), day: date.getDate(),
hour: 0, hour: 0,
minute: 0, minute: 0,
second: 0 second: 0,
} },
}); });
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE, eventName: DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE,
action: function () { action: () => {
var value = self.popup.getValue(); const value = this.popup.getValue();
if (self._checkValue(value)) { if (this._checkValue(value)) {
self.setValue(value); this.setValue(value);
} }
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDateTimePopup.EVENT_CHANGE, eventName: DynamicDateTimePopup.EVENT_CHANGE,
action: function () { action: () => {
self.setValue(self.popup.getValue()); this.setValue(this.popup.getValue());
self.combo.hideView(); this.combo.hideView();
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeCombo.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.DynamicDateTimePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, eventName: DynamicDateTimePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW,
action: function () { action: () => {
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); this.fireEvent(DynamicDateTimeCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
} },
}] }],
}, },
}, },
listeners: [{ listeners: [{
eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, eventName: Combo.EVENT_BEFORE_POPUPVIEW,
action: function () { action: () => {
self.popup.setMinDate(opts.minDate); this.popup.setMinDate(opts.minDate);
self.popup.setMaxDate(opts.maxDate); this.popup.setMaxDate(opts.maxDate);
self.popup.setValue(self.storeValue); this.popup.setValue(this.storeValue);
self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW); this.fireEvent(DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW);
} },
}], }],
// // DEC-4250 和复选下拉一样,点击不收起 // // DEC-4250 和复选下拉一样,点击不收起
// hideChecker: function (e) { // hideChecker: function (e) {
@ -234,108 +249,92 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {
top: 0, top: 0,
left: 0, left: 0,
right: 0, right: 0,
bottom: 0 bottom: 0,
}] }],
}; };
}, }
created: function () { created() {
this._checkDynamicValue(this.storeValue); this._checkDynamicValue(this.storeValue);
}, }
_checkDynamicValue: function (v) { _checkDynamicValue(v) {
var o = this.options; let type = null;
var type = null; if (isNotNull(v)) {
if (BI.isNotNull(v)) {
type = v.type; type = v.type;
} }
switch (type) { switch (type) {
case BI.DynamicDateTimeCombo.Dynamic: case DynamicDateTimeCombo.Dynamic:
this.changeIcon.setVisible(true); this.changeIcon.setVisible(true);
// this.comboWrapper.attr("items")[0].width = o.height - (this.options.simple ? 1 : 2); // this.comboWrapper.attr("items")[0].width = o.height - (this.options.simple ? 1 : 2);
// this.comboWrapper.resize(); // this.comboWrapper.resize();
break; break;
default: default:
// this.comboWrapper.attr("items")[0].width = 0; // this.comboWrapper.attr("items")[0].width = 0;
// this.comboWrapper.resize(); // this.comboWrapper.resize();
this.changeIcon.setVisible(false); this.changeIcon.setVisible(false);
break; break;
} }
}, }
_checkValue: function (v) { _checkValue(v) {
var o = this.options; const o = this.options;
const value = v.value || {};
switch (v.type) { switch (v.type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return BI.isNotEmptyObject(v.value); return isNotEmptyObject(v.value);
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
var value = v.value || {}; return !checkDateVoid(value.year, value.month, value.day, o.minDate, o.maxDate)[0];
default:
return !BI.checkDateVoid(value.year, value.month, value.day, o.minDate, o.maxDate)[0]; return true;
default:
return true;
} }
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
var o = this.options; const o = this.options;
o.minDate = minDate; o.minDate = minDate;
this.trigger.setMinDate(minDate); this.trigger.setMinDate(minDate);
this.popup && this.popup.setMinDate(minDate); this.popup && this.popup.setMinDate(minDate);
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
var o = this.options; const o = this.options;
o.maxDate = maxDate; o.maxDate = maxDate;
this.trigger.setMaxDate(maxDate); this.trigger.setMaxDate(maxDate);
this.popup && this.popup.setMaxDate(maxDate); this.popup && this.popup.setMaxDate(maxDate);
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
this.trigger.setValue(v); this.trigger.setValue(v);
this._checkDynamicValue(v); this._checkDynamicValue(v);
}, }
getValue: function () {
getValue() {
return this.storeValue; return this.storeValue;
}, }
getKey: function () {
getKey() {
return this.trigger.getKey(); return this.trigger.getKey();
}, }
hidePopupView: function () {
hidePopupView() {
this.combo.hideView(); this.combo.hideView();
}, }
isValid: function () { isValid() {
return this.trigger.isValid(); return this.trigger.isValid();
}, }
focus: function () { focus() {
this.trigger.focus(); this.trigger.focus();
}, }
blur: function () { blur() {
this.trigger.blur(); this.trigger.blur();
}, }
setWaterMark: function (v) { setWaterMark(v) {
this.trigger.setWaterMark(v); this.trigger.setWaterMark(v);
} }
}); }
BI.DynamicDateTimeCombo.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
BI.DynamicDateTimeCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.DynamicDateTimeCombo.EVENT_FOCUS = "EVENT_FOCUS";
BI.DynamicDateTimeCombo.EVENT_BLUR = "EVENT_BLUR";
BI.DynamicDateTimeCombo.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateTimeCombo.EVENT_VALID = "EVENT_VALID";
BI.DynamicDateTimeCombo.EVENT_ERROR = "EVENT_ERROR";
BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
BI.DynamicDateTimeCombo.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_time_combo", BI.DynamicDateTimeCombo);
BI.extend(BI.DynamicDateTimeCombo, {
Static: 1,
Dynamic: 2
});

417
src/widget/dynamicdatetime/dynamicdatetime.popup.js

@ -1,271 +1,280 @@
BI.DynamicDateTimePopup = BI.inherit(BI.Widget, { import { shortcut, Widget, createWidget, toPix, i18nText, createItems, print, isNull, isEmptyObject, isEmptyString, getDate, checkDateVoid, extend } from "@/core";
constants: { import { DynamicDateCombo, DynamicDateHelper } from "../dynamicdate";
tabHeight: 40, import { TextButton, Tab } from "@/base";
buttonHeight: 24 import { DateCalendarPopup } from "../date/calendar";
}, import { DynamicDateTimeCombo } from "./dynamicdatetime.combo";
props: { @shortcut()
export class DynamicDateTimePopup extends Widget {
static xtype = "bi.dynamic_date_time_popup"
props = {
baseCls: "bi-dynamic-date-time-popup", baseCls: "bi-dynamic-date-time-popup",
width: 272, width: 272,
supportDynamic: true, supportDynamic: true,
}, };
static EVENT_CHANGE = "EVENT_CHANGE"
static BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE"
static BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE"
static BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE"
static EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW"
_init: function () { _init() {
BI.DynamicDateTimePopup.superclass._init.apply(this, arguments); super._init(...arguments);
var self = this, opts = this.options, c = this.constants; const opts = this.options;
this.storeValue = {type: BI.DynamicDateCombo.Static}; this.storeValue = {
BI.createWidget({ type: DynamicDateCombo.Static,
};
createWidget({
element: this, element: this,
type: "bi.vertical", type: "bi.vertical",
items: [{ items: [{
el: this._getTabJson() el: this._getTabJson(),
}, { }, {
el: { el: {
type: "bi.grid", type: "bi.grid",
items: [[{ items: [
type: "bi.text_button", [{
cls: "bi-high-light bi-split-top", type: "bi.text_button",
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), cls: "bi-high-light bi-split-top",
shadow: true, textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
text: BI.i18nText("BI-Basic_Clear"), shadow: true,
listeners: [{ text: i18nText("BI-Basic_Clear"),
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
self.fireEvent(BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE); action: () => {
} this.fireEvent(DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE);
}] },
}, { }],
type: "bi.text_button", }, {
cls: "bi-split-left bi-split-right bi-high-light bi-split-top", type: "bi.text_button",
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), cls: "bi-split-left bi-split-right bi-high-light bi-split-top",
shadow: true, textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
text: BI.i18nText("BI-Multi_Date_Today"), shadow: true,
disabled: this._checkTodayValid(), text: i18nText("BI-Multi_Date_Today"),
ref: function () { disabled: this._checkTodayValid(),
self.todayButton = this; ref: _ref => {
}, this.todayButton = _ref;
listeners: [{ },
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
self.fireEvent(BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE); action: () => {
} this.fireEvent(DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE);
}] },
}, { }],
type: "bi.text_button", }, {
cls: "bi-high-light bi-split-top", type: "bi.text_button",
textHeight: BI.toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1), cls: "bi-high-light bi-split-top",
shadow: true, textHeight: toPix(BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT, 1),
text: BI.i18nText("BI-Basic_OK"), shadow: true,
listeners: [{ text: i18nText("BI-Basic_OK"),
eventName: BI.TextButton.EVENT_CHANGE, listeners: [{
action: function () { eventName: TextButton.EVENT_CHANGE,
var type = self.dateTab.getSelect(); action: () => {
if (type === BI.DynamicDateCombo.Dynamic) { const type = this.dateTab.getSelect();
self.dynamicPane.checkValidation(true) && self.fireEvent(BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE); if (type === DynamicDateCombo.Dynamic) {
} else { this.dynamicPane.checkValidation(true) && this.fireEvent(DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE);
self.fireEvent(BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE) } else {
} this.fireEvent(DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE);
} }
},
}],
}] }]
}]], ],
height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT height: BI.SIZE_CONSANTS.TOOL_BAR_HEIGHT,
} },
}] }],
}); });
this.setValue(opts.value); this.setValue(opts.value);
}, }
_getTabJson: function () { _getTabJson() {
var self = this, o = this.options; const o = this.options;
return { return {
type: "bi.tab", type: "bi.tab",
logic: { logic: {
dynamic: true dynamic: true,
}, },
ref: function () { ref: _ref => {
self.dateTab = this; this.dateTab = _ref;
}, },
tab: { tab: {
type: "bi.linear_segment", type: "bi.linear_segment",
invisible: !o.supportDynamic, invisible: !o.supportDynamic,
cls: "bi-split-bottom", cls: "bi-split-bottom",
height: this.constants.tabHeight, height: this.constants.tabHeight,
items: BI.createItems([{ items: createItems([{
text: BI.i18nText("BI-Multi_Date_YMD"), text: i18nText("BI-Multi_Date_YMD"),
value: BI.DynamicDateCombo.Static value: DynamicDateCombo.Static,
}, { }, {
text: BI.i18nText("BI-Basic_Dynamic_Title"), text: i18nText("BI-Basic_Dynamic_Title"),
value: BI.DynamicDateCombo.Dynamic value: DynamicDateCombo.Dynamic,
}], { }], {
textAlign: "center" textAlign: "center",
}) }),
}, },
cardCreator: function (v) { cardCreator: v => {
switch (v) { switch (v) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
return { return {
type: "bi.dynamic_date_card", type: "bi.dynamic_date_card",
cls: "dynamic-date-pane", cls: "dynamic-date-pane",
listeners: [{
eventName: "EVENT_CHANGE",
action: () => {
this._setInnerValue(this.year, v);
},
}],
ref: _ref => {
this.dynamicPane = _ref;
},
min: this.options.min,
max: this.options.max,
};
case DynamicDateCombo.Static:
default:
return {
type: "bi.vertical",
items: [{
type: "bi.date_calendar_popup",
behaviors: o.behaviors,
min: this.options.min,
max: this.options.max,
ref: _ref => {
this.ymd = _ref;
},
listeners: [{ listeners: [{
eventName: "EVENT_CHANGE", eventName: DateCalendarPopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW,
action: function () { action: () => {
self._setInnerValue(self.year, v); this.fireEvent(DynamicDateTimePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW);
} },
}], }],
ref: function () { }, {
self.dynamicPane = this; el: {
}, type: "bi.dynamic_date_time_select",
min: self.options.min, cls: "bi-split-top",
max: self.options.max, ref: _ref => {
}; this.timeSelect = _ref;
case BI.DynamicDateCombo.Static:
default:
return {
type: "bi.vertical",
items: [{
type: "bi.date_calendar_popup",
behaviors: o.behaviors,
min: self.options.min,
max: self.options.max,
ref: function () {
self.ymd = this;
}, },
listeners: [{ height: 40,
eventName: BI.DateCalendarPopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW, },
action: function () { }],
self.fireEvent(BI.DynamicDateTimePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW); };
}
}],
}, {
el: {
type: "bi.dynamic_date_time_select",
cls: "bi-split-top",
ref: function () {
self.timeSelect = this;
},
height: 40
}
}]
};
} }
}, },
listeners: [{ listeners: [{
eventName: BI.Tab.EVENT_CHANGE, eventName: Tab.EVENT_CHANGE,
action: function () { action: () => {
var v = self.dateTab.getSelect(); const v = this.dateTab.getSelect();
const date = DynamicDateHelper.getCalculation(this.dynamicPane.getValue());
switch (v) { switch (v) {
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue()); this.ymd.setValue({
self.ymd.setValue({ year: date.getFullYear(),
year: date.getFullYear(), month: date.getMonth() + 1,
month: date.getMonth() + 1, day: date.getDate(),
day: date.getDate() });
this.timeSelect.setValue();
this._setInnerValue();
break;
case DynamicDateCombo.Dynamic:
default:
if (this.storeValue && this.storeValue.type === DynamicDateCombo.Dynamic) {
this.dynamicPane.setValue(this.storeValue.value);
} else {
this.dynamicPane.setValue({
year: 0,
}); });
self.timeSelect.setValue(); }
self._setInnerValue(); this._setInnerValue();
break; break;
case BI.DynamicDateCombo.Dynamic:
default:
if(self.storeValue && self.storeValue.type === BI.DynamicDateCombo.Dynamic) {
self.dynamicPane.setValue(self.storeValue.value);
}else{
self.dynamicPane.setValue({
year: 0
});
}
self._setInnerValue();
break;
} }
} },
}] }],
}; };
}, }
_setInnerValue: function () { _setInnerValue() {
if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) { if (this.dateTab.getSelect() === DynamicDateCombo.Static) {
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
this.todayButton.setEnable(!this._checkTodayValid()); this.todayButton.setEnable(!this._checkTodayValid());
} else { } else {
var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getInputValue()); let date = DynamicDateHelper.getCalculation(this.dynamicPane.getInputValue());
date = BI.print(date, "%Y-%X-%d"); date = print(date, "%Y-%X-%d");
this.todayButton.setValue(date); this.todayButton.setValue(date);
this.todayButton.setEnable(false); this.todayButton.setEnable(false);
} }
}, }
_checkValueValid: function (value) { _checkValueValid(value) {
return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value); return isNull(value) || isEmptyObject(value) || isEmptyString(value);
}, }
_checkTodayValid: function () { _checkTodayValid() {
var o = this.options; const o = this.options;
var today = BI.getDate(); const today = getDate();
return !!BI.checkDateVoid(today.getFullYear(), today.getMonth() + 1, today.getDate(), o.min, o.max)[0];
}, return !!checkDateVoid(today.getFullYear(), today.getMonth() + 1, today.getDate(), o.min, o.max)[0];
}
setMinDate: function (minDate) { setMinDate(minDate) {
if (this.options.min !== minDate) { if (this.options.min !== minDate) {
this.options.min = minDate; this.options.min = minDate;
this.ymd.setMinDate(minDate); this.ymd.setMinDate(minDate);
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (this.options.max !== maxDate) { if (this.options.max !== maxDate) {
this.options.max = maxDate; this.options.max = maxDate;
this.ymd.setMaxDate(maxDate); this.ymd.setMaxDate(maxDate);
} }
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
var self = this;
var type, value;
v = v || {}; v = v || {};
type = v.type || BI.DynamicDateCombo.Static; const type = v.type || DynamicDateCombo.Static;
value = v.value || v; const value = v.value || v;
this.dateTab.setSelect(type); this.dateTab.setSelect(type);
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
this.dynamicPane.setValue(value); this.dynamicPane.setValue(value);
self._setInnerValue(); this._setInnerValue();
break; break;
case BI.DynamicDateCombo.Static: case DynamicDateCombo.Static:
default: default:
if (this._checkValueValid(value)) { if (this._checkValueValid(value)) {
var date = BI.getDate(); const date = getDate();
this.ymd.setValue({ this.ymd.setValue({
year: date.getFullYear(), year: date.getFullYear(),
month: date.getMonth() + 1, month: date.getMonth() + 1,
day: date.getDate() day: date.getDate(),
}); });
this.timeSelect.setValue(); this.timeSelect.setValue();
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
} else { } else {
this.ymd.setValue(value); this.ymd.setValue(value);
this.timeSelect.setValue({ this.timeSelect.setValue({
hour: value.hour, hour: value.hour,
minute: value.minute, minute: value.minute,
second: value.second second: value.second,
}); });
this.todayButton.setValue(BI.i18nText("BI-Multi_Date_Today")); this.todayButton.setValue(i18nText("BI-Multi_Date_Today"));
} }
this.todayButton.setEnable(!this._checkTodayValid()); this.todayButton.setEnable(!this._checkTodayValid());
break; break;
} }
}, }
getValue: function () { getValue() {
var type = this.dateTab.getSelect(); const type = this.dateTab.getSelect();
return { return {
type: type, type,
value: type === BI.DynamicDateTimeCombo.Static ? BI.extend(this.ymd.getValue(), this.timeSelect.getValue()) : this.dynamicPane.getValue() value: type === DynamicDateTimeCombo.Static ? extend(this.ymd.getValue(), this.timeSelect.getValue()) : this.dynamicPane.getValue(),
}; };
} }
}); }
BI.DynamicDateTimePopup.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE";
BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE";
BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE";
BI.DynamicDateTimePopup.EVENT_BEFORE_YEAR_MONTH_POPUPVIEW = "EVENT_BEFORE_YEAR_MONTH_POPUPVIEW";
BI.shortcut("bi.dynamic_date_time_popup", BI.DynamicDateTimePopup);

269
src/widget/dynamicdatetime/dynamicdatetime.timeselect.js

@ -1,11 +1,21 @@
BI.DynamicDateTimeSelect = BI.inherit(BI.Widget, { import { shortcut, Widget, isNaturalNumber, parseInt, isNumeric, i18nText, isNull, isEmptyString } from "@/core";
import { SignEditor } from "@/case";
props: { @shortcut()
baseCls: "bi-date-time-select" export class DynamicDateTimeSelect extends Widget {
}, static xtype = "bi.dynamic_date_time_select"
render: function () { static HOUR = 1
var self = this; static MINUTE = 2
static SECOND = 3
static EVENT_CONFIRM = "EVENT_CONFIRM"
props = {
baseCls: "bi-date-time-select",
};
render() {
return { return {
type: "bi.center_adapt", type: "bi.center_adapt",
items: [{ items: [{
@ -13,200 +23,197 @@ BI.DynamicDateTimeSelect = BI.inherit(BI.Widget, {
items: [{ items: [{
el: { el: {
type: "bi.number_editor", type: "bi.number_editor",
ref: function () { ref: _ref => {
self.hour = this; this.hour = _ref;
}, },
validationChecker: function (v) { validationChecker (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 24; return isNaturalNumber(v) && parseInt(v) < 24;
}, },
errorText: function (v) { errorText (v) {
if(BI.isNumeric(v)) { if (isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-23\""); return i18nText("BI-Basic_Input_From_To_Number", "\"00-23\"");
} }
return BI.i18nText("BI-Numerical_Interval_Input_Data");
return i18nText("BI-Numerical_Interval_Input_Data");
}, },
listeners: [{ listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM, eventName: SignEditor.EVENT_CONFIRM,
action: function () { action: () => {
var value = this.getValue(); const value = this.hour.getValue();
self._checkHour(value); this._checkHour(value);
this.setValue(self._formatValueToDoubleDigit(value)); this.hour.setValue(this._formatValueToDoubleDigit(value));
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeSelect.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.SignEditor.EVENT_CHANGE, eventName: SignEditor.EVENT_CHANGE,
action: function () { action: () => {
var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.HOUR); const value = this._autoSwitch(this.hour.getValue(), DynamicDateTimeSelect.HOUR);
this.setValue(value); this.hour.setValue(value);
} },
}], }],
width: 60, width: 60,
height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
} },
}, { }, {
type: "bi.label", type: "bi.label",
text: ":", text: ":",
width: 20 width: 20,
}, { }, {
type: "bi.number_editor", type: "bi.number_editor",
ref: function () { ref: _ref => {
self.minute = this; this.minute = _ref;
}, },
validationChecker: function (v) { validationChecker (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 60; return isNaturalNumber(v) && parseInt(v) < 60;
}, },
errorText: function (v) { errorText (v) {
if(BI.isNumeric(v)) { if (isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-59\""); return i18nText("BI-Basic_Input_From_To_Number", "\"00-59\"");
} }
return BI.i18nText("BI-Numerical_Interval_Input_Data");
return i18nText("BI-Numerical_Interval_Input_Data");
}, },
listeners: [{ listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM, eventName: SignEditor.EVENT_CONFIRM,
action: function () { action: () => {
var value = this.getValue(); const value = this.minute.getValue();
self._checkMinute(value); this._checkMinute(value);
this.setValue(self._formatValueToDoubleDigit(value), BI.DynamicDateTimeSelect.MINUTE); this.minute.setValue(this._formatValueToDoubleDigit(value), DynamicDateTimeSelect.MINUTE);
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeSelect.EVENT_CONFIRM);
} },
}, { }, {
eventName: BI.SignEditor.EVENT_CHANGE, eventName: SignEditor.EVENT_CHANGE,
action: function () { action: () => {
var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.MINUTE); const value = this._autoSwitch(this.getValue(), DynamicDateTimeSelect.MINUTE);
this.setValue(value); this.minute.setValue(value);
} },
}], }],
width: 60, width: 60,
height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
}, { }, {
type: "bi.label", type: "bi.label",
text: ":", text: ":",
width: 20 width: 20,
}, { }, {
type: "bi.number_editor", type: "bi.number_editor",
ref: function () { ref: _ref => {
self.second = this; this.second = _ref;
}, },
validationChecker: function (v) { validationChecker (v) {
return BI.isNaturalNumber(v) && BI.parseInt(v) < 60; return isNaturalNumber(v) && parseInt(v) < 60;
}, },
errorText: function (v) { errorText (v) {
if(BI.isNumeric(v)) { if (isNumeric(v)) {
return BI.i18nText("BI-Basic_Input_From_To_Number", "\"00-59\""); return i18nText("BI-Basic_Input_From_To_Number", "\"00-59\"");
} }
return BI.i18nText("BI-Numerical_Interval_Input_Data");
return i18nText("BI-Numerical_Interval_Input_Data");
}, },
listeners: [{ listeners: [{
eventName: BI.SignEditor.EVENT_CONFIRM, eventName: SignEditor.EVENT_CONFIRM,
action: function () { action: () => {
var value = this.getValue(); const value = this.second.getValue();
self._checkSecond(value); this._checkSecond(value);
this.setValue(self._formatValueToDoubleDigit(value)); this.second.setValue(this._formatValueToDoubleDigit(value));
self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeSelect.EVENT_CONFIRM);
} },
}], }],
width: 60, width: 60,
height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
}] }],
}] }],
}; };
}, }
_checkBorder: function (v) { _checkBorder(v) {
v = v || {}; v = v || {};
this._checkHour(v.hour); this._checkHour(v.hour);
this._checkMinute(v.minute); this._checkMinute(v.minute);
this._checkSecond(v.second); this._checkSecond(v.second);
}, }
_checkHour: function (value) { _checkHour(value) {
this.hour.setDownEnable(BI.parseInt(value) > 0); this.hour.setDownEnable(parseInt(value) > 0);
this.hour.setUpEnable(BI.parseInt(value) < 23); this.hour.setUpEnable(parseInt(value) < 23);
}, }
_checkMinute: function (value) { _checkMinute(value) {
this.minute.setDownEnable(BI.parseInt(value) > 0); this.minute.setDownEnable(parseInt(value) > 0);
this.minute.setUpEnable(BI.parseInt(value) < 59); this.minute.setUpEnable(parseInt(value) < 59);
}, }
_checkSecond: function (value) { _checkSecond(value) {
this.second.setDownEnable(BI.parseInt(value) > 0); this.second.setDownEnable(parseInt(value) > 0);
this.second.setUpEnable(BI.parseInt(value) < 59); this.second.setUpEnable(parseInt(value) < 59);
}, }
_autoSwitch: function (v, type) { _autoSwitch(v, type) {
var limit = 0; let limit = 0;
var value = v + ""; let value = `${v}`;
switch (type) { switch (type) {
case BI.DynamicDateTimeSelect.HOUR: case DynamicDateTimeSelect.HOUR:
limit = 2; limit = 2;
break; break;
case BI.DynamicDateTimeSelect.MINUTE: case DynamicDateTimeSelect.MINUTE:
limit = 5; limit = 5;
break; break;
default: default:
break; break;
} }
if(value.length === 1 && BI.parseInt(value) > limit) { if (value.length === 1 && parseInt(value) > limit) {
value = "0" + value; value = `0${value}`;
} }
if (value.length === 2) { if (value.length === 2) {
switch (type) { switch (type) {
case BI.DynamicDateTimeSelect.HOUR: case DynamicDateTimeSelect.HOUR:
this.hour.isEditing() && this.minute.focus(); this.hour.isEditing() && this.minute.focus();
break; break;
case BI.DynamicDateTimeSelect.MINUTE: case DynamicDateTimeSelect.MINUTE:
this.minute.isEditing() && this.second.focus(); this.minute.isEditing() && this.second.focus();
break; break;
case BI.DynamicDateTimeSelect.SECOND: case DynamicDateTimeSelect.SECOND:
default: default:
break; break;
} }
} }
return value; return value;
}, }
_formatValueToDoubleDigit: function (v) { _formatValueToDoubleDigit(v) {
if(BI.isNull(v) || BI.isEmptyString(v)) { if (isNull(v) || isEmptyString(v)) {
v = 0; v = 0;
} }
var value = BI.parseInt(v); let value = parseInt(v);
if(value < 10) { if (value < 10) {
value = "0" + value; value = `0${value}`;
} }
return value; return value;
}, }
_assertValue: function (v) { _assertValue(v) {
v = v || {}; v = v || {};
v.hour = this._formatValueToDoubleDigit(v.hour) || "00"; v.hour = this._formatValueToDoubleDigit(v.hour) || "00";
v.minute = this._formatValueToDoubleDigit(v.minute) || "00"; v.minute = this._formatValueToDoubleDigit(v.minute) || "00";
v.second = this._formatValueToDoubleDigit(v.second) || "00"; v.second = this._formatValueToDoubleDigit(v.second) || "00";
return v; return v;
}, }
getValue: function () { getValue() {
return { return {
hour: BI.parseInt(this.hour.getValue()), hour: parseInt(this.hour.getValue()),
minute: BI.parseInt(this.minute.getValue()), minute: parseInt(this.minute.getValue()),
second: BI.parseInt(this.second.getValue()) second: parseInt(this.second.getValue()),
}; };
}, }
setValue: function (v) { setValue(v) {
v = this._assertValue(v); v = this._assertValue(v);
this.hour.setValue(v.hour); this.hour.setValue(v.hour);
this.minute.setValue(v.minute); this.minute.setValue(v.minute);
this.second.setValue(v.second); this.second.setValue(v.second);
this._checkBorder(v); 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
});

536
src/widget/dynamicdatetime/dynamicdatetime.trigger.js

@ -1,59 +1,82 @@
BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, { import { shortcut, i18nText, createWidget, isKey, checkDateLegal, parseDateTime, bind, isNotNull, isNotEmptyString, isEqual, isEmptyObject, isEmptyString, isNull, getDate, each, isNumeric, checkDateVoid, parseInt, size, print } from "@/core";
_const: { import { Trigger } from "@/base";
import { SignEditor } from "@/case";
import { DynamicDateCombo, DynamicDateCard, DynamicDateHelper } from "../dynamicdate";
@shortcut()
export class DynamicDateTimeTrigger extends Trigger {
static xtype = "bi.dynamic_date_time_trigger"
_const = {
hgap: 4, hgap: 4,
vgap: 2, vgap: 2,
yearLength: 4, yearLength: 4,
yearMonthLength: 6, yearMonthLength: 6,
yearFullMonthLength: 7, yearFullMonthLength: 7,
compareFormat: "%Y-%X-%d %H:%M:%S", compareFormat: "%Y-%X-%d %H:%M:%S",
iconWidth: 24
},
props: () => ({
extraCls: "bi-date-time-trigger",
min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期
height: 24,
iconWidth: 24, iconWidth: 24,
format: "", // 显示的日期格式化方式 };
allowEdit: true, // 是否允许编辑
watermark: BI.i18nText("BI-Basic_Unrestricted"), static EVENT_BLUR = "EVENT_BLUR"
}), static EVENT_FOCUS = "EVENT_FOCUS"
static EVENT_START = "EVENT_START"
static EVENT_STOP = "EVENT_STOP"
static EVENT_CONFIRM = "EVENT_CONFIRM"
static EVENT_CHANGE = "EVENT_CHANGE"
static EVENT_VALID = "EVENT_VALID"
static EVENT_ERROR = "EVENT_ERROR"
static EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK"
static EVENT_KEY_DOWN = "EVENT_KEY_DOWN"
_init: function () { props() {
BI.DynamicDateTimeTrigger.superclass._init.apply(this, arguments); return {
var self = this, o = this.options, c = this._const; extraCls: "bi-date-time-trigger",
min: "1900-01-01", // 最小日期
max: "2099-12-31", // 最大日期
height: 24,
iconWidth: 24,
format: "", // 显示的日期格式化方式
allowEdit: true, // 是否允许编辑
watermark: i18nText("BI-Basic_Unrestricted"),
};
}
_init() {
super._init(...arguments);
const o = this.options,
c = this._const;
this.storeTriggerValue = ""; this.storeTriggerValue = "";
this.editor = BI.createWidget({ this.editor = createWidget({
type: "bi.sign_editor", type: "bi.sign_editor",
simple: o.simple, simple: o.simple,
height: o.height, height: o.height,
validationChecker: function (v) { validationChecker: v => {
var formatStr = self._getStandardDateStr(v); const formatStr = this._getStandardDateStr(v);
var date = formatStr.match(/\d+/g); const date = formatStr.match(/\d+/g);
!BI.isKey(o.format) && self._autoAppend(v, date); !isKey(o.format) && this._autoAppend(v, date);
return self._dateCheck(formatStr) && BI.checkDateLegal(formatStr) && self._checkVoid({
return this._dateCheck(formatStr) && checkDateLegal(formatStr) && this._checkVoid({
year: date[0] | 0, year: date[0] | 0,
month: date[1] | 0, month: date[1] | 0,
day: date[2] | 0 day: date[2] | 0,
}); });
}, },
quitChecker: function () { quitChecker () {
return false; return false;
}, },
hgap: c.hgap, hgap: c.hgap,
vgap: c.vgap, vgap: c.vgap,
allowBlank: true, allowBlank: true,
watermark: o.watermark, watermark: o.watermark,
errorText: function (v) { errorText: v => {
var str = ""; let str = "";
if (!BI.isKey(o.format)) { if (!isKey(o.format)) {
if (!self._dateCheck(v)) { if (!this._dateCheck(v)) {
str = self.editor.isEditing() ? BI.i18nText("BI-Date_Trigger_Error_Text") : BI.i18nText("BI-Year_Trigger_Invalid_Text"); str = this.editor.isEditing() ? i18nText("BI-Date_Trigger_Error_Text") : i18nText("BI-Year_Trigger_Invalid_Text");
} else { } else {
var start = BI.parseDateTime(o.min, "%Y-%X-%d"); const start = parseDateTime(o.min, "%Y-%X-%d");
var end = BI.parseDateTime(o.max, "%Y-%X-%d"); const end = parseDateTime(o.max, "%Y-%X-%d");
str = BI.i18nText("BI-Basic_Date_Range_Error", str = i18nText("BI-Basic_Date_Range_Error",
start.getFullYear(), start.getFullYear(),
start.getMonth() + 1, start.getMonth() + 1,
start.getDate(), start.getDate(),
@ -66,348 +89,347 @@ BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, {
return str; return str;
}, },
title: BI.bind(this._getTitle, this) title: bind(this._getTitle, this),
}); });
this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () { this.editor.on(SignEditor.EVENT_KEY_DOWN, (...args) => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN, arguments); this.fireEvent(DynamicDateTimeTrigger.EVENT_KEY_DOWN, ...args);
}); });
this.editor.on(BI.SignEditor.EVENT_FOCUS, function () { this.editor.on(SignEditor.EVENT_FOCUS, () => {
self.storeTriggerValue = self.getKey(); this.storeTriggerValue = this.getKey();
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_FOCUS); this.fireEvent(DynamicDateTimeTrigger.EVENT_FOCUS);
}); });
this.editor.on(BI.SignEditor.EVENT_BLUR, function () { this.editor.on(SignEditor.EVENT_BLUR, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_BLUR); this.fireEvent(DynamicDateTimeTrigger.EVENT_BLUR);
}); });
this.editor.on(BI.SignEditor.EVENT_STOP, function () { this.editor.on(SignEditor.EVENT_STOP, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_STOP); this.fireEvent(DynamicDateTimeTrigger.EVENT_STOP);
}); });
this.editor.on(BI.SignEditor.EVENT_VALID, function () { this.editor.on(SignEditor.EVENT_VALID, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_VALID); this.fireEvent(DynamicDateTimeTrigger.EVENT_VALID);
}); });
this.editor.on(BI.SignEditor.EVENT_ERROR, function () { this.editor.on(SignEditor.EVENT_ERROR, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_ERROR); this.fireEvent(DynamicDateTimeTrigger.EVENT_ERROR);
}); });
this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () { this.editor.on(SignEditor.EVENT_CONFIRM, () => {
var value = self.editor.getValue(); const value = this.editor.getValue();
if (BI.isNotNull(value)) { if (isNotNull(value)) {
self.editor.setState(value); this.editor.setState(value);
} }
if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { if (isNotEmptyString(value) && !isEqual(this.storeTriggerValue, this.getKey())) {
var formatStr = self._getStandardDateStr(value); const formatStr = this._getStandardDateStr(value);
var date = formatStr.match(/\d+/g); const date = formatStr.match(/\d+/g);
self.storeValue = { this.storeValue = {
type: BI.DynamicDateCombo.Static, type: DynamicDateCombo.Static,
value: { value: {
year: date[0] | 0, year: date[0] | 0,
month: date[1] | 0, month: date[1] | 0,
day: date[2] | 0, day: date[2] | 0,
hour: date[3] | 0, hour: date[3] | 0,
minute: date[4] | 0, minute: date[4] | 0,
second: date[5] | 0 second: date[5] | 0,
} },
}; };
} }
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CONFIRM); this.fireEvent(DynamicDateTimeTrigger.EVENT_CONFIRM);
}); });
this.editor.on(BI.SignEditor.EVENT_START, function () { this.editor.on(SignEditor.EVENT_START, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_START); this.fireEvent(DynamicDateTimeTrigger.EVENT_START);
}); });
this.editor.on(BI.SignEditor.EVENT_CHANGE, function () { this.editor.on(SignEditor.EVENT_CHANGE, () => {
self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CHANGE); this.fireEvent(DynamicDateTimeTrigger.EVENT_CHANGE);
}); });
BI.createWidget({ createWidget({
type: "bi.htape", type: "bi.htape",
element: this, element: this,
columnSize: ["", this._const.iconWidth], columnSize: ["", this._const.iconWidth],
items: [{ items: [{
el: this.editor el: this.editor,
}, { }, {
el: { el: {
type: "bi.icon_button", type: "bi.icon_button",
cls: "bi-trigger-icon-button date-font", cls: "bi-trigger-icon-button date-font",
}, },
width: o.iconWidth width: o.iconWidth,
}] }],
}); });
!o.allowEdit && BI.createWidget({ !o.allowEdit && createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
items: [{ items: [{
el: { el: {
type: "bi.text", type: "bi.text",
title: BI.bind(this._getTitle, this) title: bind(this._getTitle, this),
}, },
left: 0, left: 0,
right: o.iconWidth, right: o.iconWidth,
top: 0, top: 0,
bottom: 0 bottom: 0,
}] }],
}); });
this.setValue(o.value); this.setValue(o.value);
}, }
_getTitle: function () { _getTitle() {
var o = this.options; const o = this.options;
var storeValue = this.storeValue || {}; const storeValue = this.storeValue || {};
if (BI.isEmptyObject(storeValue)) { if (isEmptyObject(storeValue)) {
return o.watermark; return o.watermark;
} }
var type = storeValue.type || BI.DynamicDateCombo.Static; const type = storeValue.type || DynamicDateCombo.Static;
var value = storeValue.value; const value = storeValue.value;
const text = this._getText(value);
const date = DynamicDateHelper.getCalculation(value);
const dateStr = print(date, this._getFormatString());
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
var text = this._getText(value); return isEmptyString(text) ? dateStr : (`${text}:${dateStr}`);
var date = BI.DynamicDateHelper.getCalculation(value); case DynamicDateCombo.Static:
var dateStr = BI.print(date, this._getFormatString()); default:
return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr); if (isNull(value) || isNull(value.day)) {
case BI.DynamicDateCombo.Static: return "";
default: }
if (BI.isNull(value) || BI.isNull(value.day)) {
return ""; return print(getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0,
} value.second || 0), this._getFormatString());
return BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0,
value.second || 0), this._getFormatString());
} }
}, }
_getStandardDateStr: function (v) { _getStandardDateStr(v) {
var c = this._const; const c = this._const;
var result = []; let result = [];
var hasSecond = false; let hasSecond = false;
var formatArray = this._getFormatString().match(/%./g); const formatArray = this._getFormatString().match(/%./g);
BI.each(formatArray, function (idx, v) { each(formatArray, (idx, v) => {
switch (v) { switch (v) {
case "%Y": case "%Y":
case "%y": case "%y":
result[0] = idx; result[0] = idx;
break; break;
case "%X": case "%X":
case "%x": case "%x":
result[1] = idx; result[1] = idx;
break; break;
case "%d": case "%d":
case "%e": case "%e":
result[2] = idx; result[2] = idx;
break; break;
case "%S": case "%S":
hasSecond = true; hasSecond = true;
break; break;
default: default:
break; break;
} }
}); });
// 这边不能直接用\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = = // 这边不能直接用\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = =
// 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心 // 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心
var date = BI.parseDateTime(v, this._getFormatString()); const date = parseDateTime(v, this._getFormatString());
if (BI.print(date, this._getFormatString()) === v) { if (print(date, this._getFormatString()) === v) {
v = BI.print(date, c.compareFormat); v = print(date, c.compareFormat);
result = [0, 1, 2]; result = [0, 1, 2];
} }
var dateArray = v.match(/\d+/g) || []; const dateArray = v.match(/\d+/g) || [];
var newArray = []; const newArray = [];
// 处理乱序的年月日 // 处理乱序的年月日
BI.each(dateArray.slice(0, 3), function (idx) { each(dateArray.slice(0, 3), idx => {
newArray[idx] = dateArray[result[idx]]; newArray[idx] = dateArray[result[idx]];
}); });
// 拼接时分秒和pm // 拼接时分秒和pm
var suffixArray = dateArray.slice(3); const suffixArray = dateArray.slice(3);
// 时分秒补0 // 时分秒补0
BI.each(suffixArray, function (idx, v) { each(suffixArray, (idx, v) => {
BI.isNumeric(v) && v.length === 1 && (suffixArray[idx] = "0" + v); isNumeric(v) && v.length === 1 && (suffixArray[idx] = `0${v}`);
}); });
// hh:mm // hh:mm
if (suffixArray.length === 2 && !hasSecond) { if (suffixArray.length === 2 && !hasSecond) {
suffixArray.push("00"); suffixArray.push("00");
} }
var suffixString = suffixArray.join(":"); const suffixString = suffixArray.join(":");
var dateString = newArray.slice(0, 3).join("-"); let dateString = newArray.slice(0, 3).join("-");
if (BI.isNotEmptyString(suffixString)) { if (isNotEmptyString(suffixString)) {
dateString += " " + suffixString; dateString += ` ${suffixString}`;
} }
return dateString; return dateString;
}, }
_getFormatString: function () { _getFormatString() {
return this.options.format || this._const.compareFormat; return this.options.format || this._const.compareFormat;
}, }
_dateCheck(date) {
return print(parseDateTime(date, "%Y-%x-%d %H:%M:%S"), "%Y-%x-%d %H:%M:%S") === date ||
print(parseDateTime(date, "%Y-%X-%d %H:%M:%S"), "%Y-%X-%d %H:%M:%S") === date ||
print(parseDateTime(date, "%Y-%x-%e %H:%M:%S"), "%Y-%x-%e %H:%M:%S") === date ||
print(parseDateTime(date, "%Y-%X-%e %H:%M:%S"), "%Y-%X-%e %H:%M:%S") === date ||
_dateCheck: function (date) { print(parseDateTime(date, "%Y-%x-%d"), "%Y-%x-%d") === date ||
return BI.print(BI.parseDateTime(date, "%Y-%x-%d %H:%M:%S"), "%Y-%x-%d %H:%M:%S") === date || print(parseDateTime(date, "%Y-%X-%d"), "%Y-%X-%d") === date ||
BI.print(BI.parseDateTime(date, "%Y-%X-%d %H:%M:%S"), "%Y-%X-%d %H:%M:%S") === date || print(parseDateTime(date, "%Y-%x-%e"), "%Y-%x-%e") === date ||
BI.print(BI.parseDateTime(date, "%Y-%x-%e %H:%M:%S"), "%Y-%x-%e %H:%M:%S") === date || print(parseDateTime(date, "%Y-%X-%e"), "%Y-%X-%e") === date;
BI.print(BI.parseDateTime(date, "%Y-%X-%e %H:%M:%S"), "%Y-%X-%e %H:%M:%S") === date || }
BI.print(BI.parseDateTime(date, "%Y-%x-%d"), "%Y-%x-%d") === date || _checkVoid(obj) {
BI.print(BI.parseDateTime(date, "%Y-%X-%d"), "%Y-%X-%d") === date || return !checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0];
BI.print(BI.parseDateTime(date, "%Y-%x-%e"), "%Y-%x-%e") === date || }
BI.print(BI.parseDateTime(date, "%Y-%X-%e"), "%Y-%X-%e") === date;
}, _autoAppend(v, dateObj) {
_checkVoid: function (obj) { if (isNotNull(dateObj) && checkDateLegal(v)) {
return !BI.checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0]; const splitMonth = v.split("-")[1];
},
_autoAppend: function (v, dateObj) {
if (BI.isNotNull(dateObj) && BI.checkDateLegal(v)) {
switch (v.length) { switch (v.length) {
case this._const.yearLength: case this._const.yearLength:
if (this._yearCheck(v)) { if (this._yearCheck(v)) {
this.editor.setValue(v + "-"); this.editor.setValue(`${v}-`);
} }
break; break;
case this._const.yearMonthLength: case this._const.yearMonthLength:
case this._const.yearFullMonthLength: case this._const.yearFullMonthLength:
var splitMonth = v.split("-")[1]; if ((isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) {
if ((BI.isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) { this.editor.setValue(`${v}-`);
this.editor.setValue(v + "-"); }
} break;
break; default:
} }
} }
}, }
_yearCheck: function (v) { _yearCheck(v) {
var date = BI.print(BI.parseDateTime(v, "%Y-%X-%d"), "%Y-%X-%d"); const date = print(parseDateTime(v, "%Y-%X-%d"), "%Y-%X-%d");
return BI.print(BI.parseDateTime(v, "%Y"), "%Y") === v && date >= this.options.min && date <= this.options.max;
}, return print(parseDateTime(v, "%Y"), "%Y") === v && date >= this.options.min && date <= this.options.max;
}
_monthCheck: function (v) { _monthCheck(v) {
var date = BI.parseDateTime(v, "%Y-%X-%d"); const date = parseDateTime(v, "%Y-%X-%d");
var dateStr = BI.print(date, "%Y-%X-%d"); const dateStr = print(date, "%Y-%X-%d");
return (date.getMonth() > 0 && (BI.print(BI.parseDateTime(v, "%Y-%X"), "%Y-%X") === v ||
BI.print(BI.parseDateTime(v, "%Y-%x"), "%Y-%x") === v)) && dateStr >= this.options.min && dateStr <= this.options.max; return (date.getMonth() > 0 && (print(parseDateTime(v, "%Y-%X"), "%Y-%X") === v ||
}, print(parseDateTime(v, "%Y-%x"), "%Y-%x") === v)) && dateStr >= this.options.min && dateStr <= this.options.max;
}
_setInnerValue: function (date) { _setInnerValue(date) {
var dateStr = BI.print(date, this._getFormatString()); const dateStr = print(date, this._getFormatString());
this.editor.setState(dateStr); this.editor.setState(dateStr);
this.editor.setValue(dateStr); this.editor.setValue(dateStr);
}, }
_getText: function (obj) { _getText(obj) {
var value = ""; let value = "";
var endText = ""; let endText = "";
if (BI.isNotNull(obj.year)) { if (isNotNull(obj.year)) {
if (BI.parseInt(obj.year) !== 0) { if (parseInt(obj.year) !== 0) {
value += Math.abs(obj.year) + BI.i18nText("BI-Basic_Year") + (obj.year < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.year) + i18nText("BI-Basic_Year") + (obj.year < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
endText = getPositionText(BI.i18nText("BI-Basic_Year"), obj.position); endText = getPositionText(i18nText("BI-Basic_Year"), obj.position);
} }
if (BI.isNotNull(obj.quarter)) { if (isNotNull(obj.quarter)) {
if (BI.parseInt(obj.quarter) !== 0) { if (parseInt(obj.quarter) !== 0) {
value += Math.abs(obj.quarter) + BI.i18nText("BI-Basic_Single_Quarter") + (obj.quarter < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.quarter) + i18nText("BI-Basic_Single_Quarter") + (obj.quarter < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
endText = getPositionText(BI.i18nText("BI-Basic_Single_Quarter"), obj.position); endText = getPositionText(i18nText("BI-Basic_Single_Quarter"), obj.position);
} }
if (BI.isNotNull(obj.month)) { if (isNotNull(obj.month)) {
if (BI.parseInt(obj.month) !== 0) { if (parseInt(obj.month) !== 0) {
value += Math.abs(obj.month) + BI.i18nText("BI-Basic_Month") + (obj.month < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.month) + i18nText("BI-Basic_Month") + (obj.month < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
endText = getPositionText(BI.i18nText("BI-Basic_Month"), obj.position); endText = getPositionText(i18nText("BI-Basic_Month"), obj.position);
} }
if (BI.isNotNull(obj.week)) { if (isNotNull(obj.week)) {
if (BI.parseInt(obj.week) !== 0) { if (parseInt(obj.week) !== 0) {
value += Math.abs(obj.week) + BI.i18nText("BI-Basic_Week") + (obj.week < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.week) + i18nText("BI-Basic_Week") + (obj.week < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
endText = getPositionText(BI.i18nText("BI-Basic_Week"), obj.position); endText = getPositionText(i18nText("BI-Basic_Week"), obj.position);
} }
if (BI.isNotNull(obj.day)) { if (isNotNull(obj.day)) {
if (BI.parseInt(obj.day) !== 0) { if (parseInt(obj.day) !== 0) {
value += Math.abs(obj.day) + BI.i18nText("BI-Basic_Day") + (obj.day < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.day) + i18nText("BI-Basic_Day") + (obj.day < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
endText = BI.size(obj) === 1 ? getPositionText(BI.i18nText("BI-Basic_Month"), obj.position) : ""; endText = size(obj) === 1 ? getPositionText(i18nText("BI-Basic_Month"), obj.position) : "";
} }
if (BI.isNotNull(obj.workDay) && BI.parseInt(obj.workDay) !== 0) { if (isNotNull(obj.workDay) && parseInt(obj.workDay) !== 0) {
value += Math.abs(obj.workDay) + BI.i18nText("BI-Basic_Work_Day") + (obj.workDay < 0 ? BI.i18nText("BI-Basic_Front") : BI.i18nText("BI-Basic_Behind")); value += Math.abs(obj.workDay) + i18nText("BI-Basic_Work_Day") + (obj.workDay < 0 ? i18nText("BI-Basic_Front") : i18nText("BI-Basic_Behind"));
} }
return value + endText; return value + endText;
function getPositionText(baseText, position) { function getPositionText(baseText, position) {
switch (position) { switch (position) {
case BI.DynamicDateCard.OFFSET.BEGIN: case DynamicDateCard.OFFSET.BEGIN:
return baseText + BI.i18nText("BI-Basic_Begin_Start"); return baseText + i18nText("BI-Basic_Begin_Start");
case BI.DynamicDateCard.OFFSET.END: case DynamicDateCard.OFFSET.END:
return baseText + BI.i18nText("BI-Basic_End_Stop"); return baseText + i18nText("BI-Basic_End_Stop");
case BI.DynamicDateCard.OFFSET.CURRENT: case DynamicDateCard.OFFSET.CURRENT:
default: default:
return BI.i18nText("BI-Basic_Current_Day"); return i18nText("BI-Basic_Current_Day");
} }
} }
}, }
setMinDate: function (minDate) { setMinDate(minDate) {
if (BI.isNotEmptyString(this.options.min)) { if (isNotEmptyString(this.options.min)) {
this.options.min = minDate; this.options.min = minDate;
} }
}, }
setMaxDate: function (maxDate) { setMaxDate(maxDate) {
if (BI.isNotEmptyString(this.options.max)) { if (isNotEmptyString(this.options.max)) {
this.options.max = maxDate; this.options.max = maxDate;
} }
}, }
setValue: function (v) { setValue(v) {
var type, value, self = this; let type, value;
var date = BI.getDate(); let date = getDate();
this.storeValue = v; this.storeValue = v;
if (BI.isNotNull(v)) { if (isNotNull(v)) {
type = v.type || BI.DynamicDateCombo.Static; type = v.type || DynamicDateCombo.Static;
value = v.value || v; value = v.value || v;
} }
const text = this._getText(value);
switch (type) { switch (type) {
case BI.DynamicDateCombo.Dynamic: case DynamicDateCombo.Dynamic:
var text = this._getText(value); date = DynamicDateHelper.getCalculation(value);
date = BI.DynamicDateHelper.getCalculation(value); this._setInnerValue(date, text);
this._setInnerValue(date, text); break;
break; case DynamicDateCombo.Static:
case BI.DynamicDateCombo.Static: default:
default: if (isNull(value) || isNull(value.day)) {
if (BI.isNull(value) || BI.isNull(value.day)) { this.editor.setState("");
this.editor.setState(""); this.editor.setValue("");
this.editor.setValue(""); } else {
} else { const dateStr = print(getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0,
var dateStr = BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0, value.second || 0), this._getFormatString());
value.second || 0), this._getFormatString()); this.editor.setState(dateStr);
this.editor.setState(dateStr); this.editor.setValue(dateStr);
this.editor.setValue(dateStr); }
} break;
break;
} }
}, }
getKey: function () { getKey() {
return this.editor.getValue(); return this.editor.getValue();
}, }
getValue: function () {
getValue() {
return this.storeValue; return this.storeValue;
}, }
isValid: function () { isValid() {
return this.editor.isValid(); return this.editor.isValid();
}, }
focus: function () { focus() {
this.editor.focus(); this.editor.focus();
}, }
blur: function () { blur() {
this.editor.blur(); this.editor.blur();
}, }
setWaterMark: function (v) { setWaterMark(v) {
this.editor.setWaterMark(v); this.editor.setWaterMark(v);
} }
}); }
BI.DynamicDateTimeTrigger.EVENT_BLUR = "EVENT_BLUR";
BI.DynamicDateTimeTrigger.EVENT_FOCUS = "EVENT_FOCUS";
BI.DynamicDateTimeTrigger.EVENT_START = "EVENT_START";
BI.DynamicDateTimeTrigger.EVENT_STOP = "EVENT_STOP";
BI.DynamicDateTimeTrigger.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.DynamicDateTimeTrigger.EVENT_CHANGE = "EVENT_CHANGE";
BI.DynamicDateTimeTrigger.EVENT_VALID = "EVENT_VALID";
BI.DynamicDateTimeTrigger.EVENT_ERROR = "EVENT_ERROR";
BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK";
BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
BI.shortcut("bi.dynamic_date_time_trigger", BI.DynamicDateTimeTrigger);

4
src/widget/dynamicdatetime/index.js

@ -0,0 +1,4 @@
export { DynamicDateTimeSelect } from "./dynamicdatetime.timeselect";
export { DynamicDateTimeCombo } from "./dynamicdatetime.combo";
export { DynamicDateTimePopup } from "./dynamicdatetime.popup";
export { DynamicDateTimeTrigger } from "./dynamicdatetime.trigger";

18
src/widget/index.js

@ -1,12 +1,30 @@
import { Collapse } from "./collapse/collapse"; import { Collapse } from "./collapse/collapse";
import * as calendar from "./date/calendar"; import * as calendar from "./date/calendar";
import * as dynamicdate from "./dynamicdate";
import * as datepane from "./datepane";
import * as datetime from "./datetime";
import * as datetimepane from "./datetimepane";
import * as dynamicdatetime from "./dynamicdatetime";
import * as time from "./time";
Object.assign(BI, { Object.assign(BI, {
Collapse, Collapse,
...calendar, ...calendar,
...dynamicdate,
...datepane,
...datetime,
...datetimepane,
...dynamicdatetime,
...time,
}); });
export * from "./date/calendar"; export * from "./date/calendar";
export * from "./dynamicdate";
export * from "./datepane";
export * from "./datetime";
export * from "./datetimepane";
export * from "./dynamicdatetime";
export * from "./time";
export { export {
Collapse Collapse
}; };

166
src/widget/time/datetime.popup.js

@ -1,94 +1,102 @@
!(function () { import { shortcut, Widget, i18nText, CenterAdaptLayout, GridLayout, isNull, isEmptyObject, isEmptyString } from "@/core";
BI.TimePopup = BI.inherit(BI.Widget, { import { TextButton } from "@/base";
props: { import { DynamicDateTimeSelect } from "../dynamicdatetime";
baseCls: "bi-date-time-popup",
height: 68
},
render: function () {
var self = this, o = this.options;
return { @shortcut()
type: "bi.vtape", export class TimePopup extends Widget {
items: [{ static xtype = "bi.time_popup"
el: {
type: "bi.center_adapt", props = {
cls: "bi-split-top", baseCls: "bi-date-time-popup",
items: [{ height: 68,
type: "bi.dynamic_date_time_select", };
value: o.value,
ref: function (_ref) { static BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE"
self.timeSelect = _ref; static BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE"
} static BUTTON_NOW_EVENT_CHANGE = "BUTTON_NOW_EVENT_CHANGE"
}] static CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE"
},
hgap: 10, render() {
height: 44 const o = this.options;
}, {
el: { return {
type: "bi.grid", type: "bi.vtape",
items: [[{ items: [{
type: "bi.text_button", el: {
type: CenterAdaptLayout.xtype,
cls: "bi-split-top",
items: [{
type: DynamicDateTimeSelect.xtype,
value: o.value,
ref: _ref => {
this.timeSelect = _ref;
},
}],
},
hgap: 10,
height: 44,
}, {
el: {
type: GridLayout.xtype,
items: [
[{
type: TextButton.xtype,
cls: "bi-high-light bi-split-top", cls: "bi-high-light bi-split-top",
shadow: true, shadow: true,
text: BI.i18nText("BI-Basic_Clears"), text: i18nText("BI-Basic_Clears"),
listeners: [{ listeners: [{
eventName: BI.TextButton.EVENT_CHANGE, eventName: TextButton.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE); this.fireEvent(TimePopup.BUTTON_CLEAR_EVENT_CHANGE);
} },
}] }],
}, { }, {
type: "bi.text_button", type: TextButton.xtype,
cls: "bi-split-left bi-split-right bi-high-light bi-split-top", cls: "bi-split-left bi-split-right bi-high-light bi-split-top",
shadow: true, shadow: true,
text: BI.i18nText("BI-Basic_Now"), text: i18nText("BI-Basic_Now"),
listeners: [{ listeners: [{
eventName: BI.TextButton.EVENT_CHANGE, eventName: TextButton.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.TimePopup.BUTTON_NOW_EVENT_CHANGE); this.fireEvent(TimePopup.BUTTON_NOW_EVENT_CHANGE);
} },
}] }],
}, { }, {
type: "bi.text_button", type: TextButton.xtype,
cls: "bi-high-light bi-split-top", cls: "bi-high-light bi-split-top",
shadow: true, shadow: true,
text: BI.i18nText("BI-Basic_OK"), text: i18nText("BI-Basic_OK"),
listeners: [{ listeners: [{
eventName: BI.TextButton.EVENT_CHANGE, eventName: TextButton.EVENT_CHANGE,
action: function () { action: () => {
self.fireEvent(BI.TimePopup.BUTTON_OK_EVENT_CHANGE); this.fireEvent(TimePopup.BUTTON_OK_EVENT_CHANGE);
} },
}] }],
}]] }]
}, ],
height: 24 },
}] height: 24,
}; }],
}, };
}
setValue: function (value) { setValue(value) {
if (this._checkValueValid(value)) { if (this._checkValueValid(value)) {
this.timeSelect.setValue(); this.timeSelect.setValue();
} else { } else {
this.timeSelect.setValue({ this.timeSelect.setValue({
hour: value.hour, hour: value.hour,
minute: value.minute, minute: value.minute,
second: value.second second: value.second,
}); });
} }
}, }
getValue: function () { getValue() {
return this.timeSelect.getValue(); return this.timeSelect.getValue();
}, }
_checkValueValid: function (value) { _checkValueValid(value) {
return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value); return isNull(value) || isEmptyObject(value) || isEmptyString(value);
} }
}); }
BI.TimePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE";
BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE";
BI.TimePopup.BUTTON_NOW_EVENT_CHANGE = "BUTTON_NOW_EVENT_CHANGE";
BI.TimePopup.CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE";
BI.shortcut("bi.time_popup", BI.TimePopup);
})();

3
src/widget/time/index.js

@ -0,0 +1,3 @@
export { TimePopup } from "./datetime.popup";
export { TimeCombo } from "./time.combo";
export { TimeTrigger } from "./time.trigger";

450
src/widget/time/time.combo.js

@ -1,247 +1,245 @@
/** import { shortcut, toPix, getDate, isNotEmptyString, isEqual, isEmptyString, AbsoluteLayout } from "@/core";
* 时间选择 import { Single, IconButton, Combo } from "@/base";
* qcc import { TimePopup } from "./datetime.popup";
* 2019/2/28
*/
!(function () { @shortcut()
BI.TimeCombo = BI.inherit(BI.Single, { export class TimeCombo extends Single {
constants: { static xtype = "bi.time_combo"
popupHeight: 80,
popupWidth: 240,
comboAdjustHeight: 1,
border: 1,
iconWidth: 24
},
props: {
baseCls: "bi-time-combo",
height: 24,
format: "",
allowEdit: false,
isNeedAdjustHeight: false,
isNeedAdjustWidth: false
},
_init: function () { static EVENT_KEY_DOWN = "EVENT_KEY_DOWN"
var o = this.options; static EVENT_CONFIRM = "EVENT_CONFIRM"
BI.TimeCombo.superclass._init.apply(this, arguments); static EVENT_CHANGE = "EVENT_CHANGE"
}, static EVENT_VALID = "EVENT_VALID"
static EVENT_ERROR = "EVENT_ERROR"
static EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"
render: function () { constants = {
var self = this, opts = this.options; popupHeight: 80,
this.storeTriggerValue = ""; popupWidth: 240,
this.storeValue = opts.value; comboAdjustHeight: 1,
border: 1,
iconWidth: 24,
}
var popup = { props = {
type: "bi.time_popup", baseCls: "bi-time-combo",
value: opts.value, height: 24,
listeners: [{ format: "",
eventName: BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE, allowEdit: false,
action: function () { isNeedAdjustHeight: false,
self.setValue(); isNeedAdjustWidth: false,
self.hidePopupView(); };
self.fireEvent(BI.TimeCombo.EVENT_CONFIRM);
} _init() {
}, { super._init(...arguments);
eventName: BI.TimePopup.BUTTON_OK_EVENT_CHANGE, }
action: function () {
self.setValue(self.popup.getValue()); render() {
self.hidePopupView(); const opts = this.options;
self.fireEvent(BI.TimeCombo.EVENT_CONFIRM); this.storeTriggerValue = "";
} this.storeValue = opts.value;
}, {
eventName: BI.TimePopup.BUTTON_NOW_EVENT_CHANGE, const popup = {
action: function () { type: "bi.time_popup",
self._setNowTime(); value: opts.value,
} listeners: [{
}], eventName: TimePopup.BUTTON_CLEAR_EVENT_CHANGE,
ref: function (_ref) { action: () => {
self.popup = _ref; this.setValue();
} this.hidePopupView();
}; this.fireEvent(TimeCombo.EVENT_CONFIRM);
return { },
type: "bi.absolute", }, {
items: [{ eventName: TimePopup.BUTTON_OK_EVENT_CHANGE,
action: () => {
this.setValue(this.popup.getValue());
this.hidePopupView();
this.fireEvent(TimeCombo.EVENT_CONFIRM);
},
}, {
eventName: TimePopup.BUTTON_NOW_EVENT_CHANGE,
action: () => {
this._setNowTime();
},
}],
ref: _ref => {
this.popup = _ref;
},
};
return {
type: AbsoluteLayout.xtype,
items: [{
el: {
type: Combo.xtype,
cls: "bi-border bi-border-radius",
container: opts.container,
toggle: false,
isNeedAdjustHeight: opts.isNeedAdjustHeight,
isNeedAdjustWidth: opts.isNeedAdjustWidth,
el: { el: {
type: "bi.combo", type: "bi.horizontal_fill",
cls: "bi-border bi-border-radius", columnSize: ["fill", this.constants.iconWidth],
container: opts.container, height: toPix(opts.height, 2),
toggle: false, items: [{
isNeedAdjustHeight: opts.isNeedAdjustHeight, type: "bi.time_trigger",
isNeedAdjustWidth: opts.isNeedAdjustWidth, height: toPix(opts.height, 2),
el: { allowEdit: opts.allowEdit,
type: "bi.horizontal_fill", watermark: opts.watermark,
columnSize: ["fill", this.constants.iconWidth], format: opts.format,
height: BI.toPix(opts.height, 2), value: opts.value,
items: [{ ref: _ref => {
type: "bi.time_trigger", this.trigger = _ref;
height: BI.toPix(opts.height, 2), },
allowEdit: opts.allowEdit, listeners: [{
watermark: opts.watermark, eventName: "EVENT_KEY_DOWN",
format: opts.format, action: () => {
value: opts.value, if (this.combo.isViewVisible()) {
ref: function (_ref) { this.combo.hideView();
self.trigger = _ref;
},
listeners: [{
eventName: "EVENT_KEY_DOWN",
action: function () {
if (self.combo.isViewVisible()) {
self.combo.hideView();
}
self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN, arguments);
}
}, {
eventName: "EVENT_STOP",
action: function () {
if (!self.combo.isViewVisible()) {
self.combo.showView();
}
}
}, {
eventName: "EVENT_FOCUS",
action: function () {
self.storeTriggerValue = self.trigger.getKey();
if (!self.combo.isViewVisible()) {
self.combo.showView();
}
self.fireEvent("EVENT_FOCUS");
} }
}, { this.fireEvent(TimeCombo.EVENT_KEY_DOWN, arguments);
eventName: "EVENT_BLUR", },
action: function () { }, {
self.fireEvent("EVENT_BLUR"); eventName: "EVENT_STOP",
} action: () => {
}, { if (!this.combo.isViewVisible()) {
eventName: "EVENT_ERROR", this.combo.showView();
action: function () {
var date = BI.getDate();
self.storeValue = {
hour: date.getHours(),
minute: date.getMinutes(),
second: date.getSeconds()
};
self.fireEvent("EVENT_ERROR");
}
}, {
eventName: "EVENT_VALID",
action: function () {
self.fireEvent("EVENT_VALID");
}
}, {
eventName: "EVENT_CHANGE",
action: function () {
self.fireEvent("EVENT_CHANGE");
} }
}, { },
eventName: "EVENT_CONFIRM", }, {
action: function () { eventName: "EVENT_FOCUS",
if (self.combo.isViewVisible()) { action: () => {
return; this.storeTriggerValue = this.trigger.getKey();
} if (!this.combo.isViewVisible()) {
var dateStore = self.storeTriggerValue; this.combo.showView();
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("EVENT_CONFIRM");
} }
}] this.fireEvent("EVENT_FOCUS");
},
}, { }, {
el: { eventName: "EVENT_BLUR",
type: "bi.icon_button", action: () => {
cls: "bi-trigger-icon-button time-font", this.fireEvent("EVENT_BLUR");
width: this.constants.iconWidth, },
listeners: [{ }, {
eventName: BI.IconButton.EVENT_CHANGE, eventName: "EVENT_ERROR",
action: function () { action: () => {
if (self.combo.isViewVisible()) { const date = getDate();
// self.combo.hideView(); this.storeValue = {
} else { hour: date.getHours(),
self.combo.showView(); minute: date.getMinutes(),
} second: date.getSeconds(),
} };
}], this.fireEvent("EVENT_ERROR");
ref: function (_ref) { },
self.triggerBtn = _ref; }, {
eventName: "EVENT_VALID",
action: () => {
this.fireEvent("EVENT_VALID");
},
}, {
eventName: "EVENT_CHANGE",
action: () => {
this.fireEvent("EVENT_CHANGE");
},
}, {
eventName: "EVENT_CONFIRM",
action: () => {
if (this.combo.isViewVisible()) {
return;
}
const dateStore = this.storeTriggerValue;
const dateObj = this.trigger.getKey();
if (isNotEmptyString(dateObj) && !isEqual(dateObj, dateStore)) {
this.storeValue = this.trigger.getValue();
this.setValue(this.trigger.getValue());
} else if (isEmptyString(dateObj)) {
this.storeValue = null;
this.trigger.setValue();
} }
this.fireEvent("EVENT_CONFIRM");
}, },
}], }],
}, }, {
adjustLength: this.constants.comboAdjustHeight, el: {
popup: { type: IconButton.xtype,
el: popup, cls: "bi-trigger-icon-button time-font",
width: opts.isNeedAdjustWidth ? opts.width : this.constants.popupWidth, width: this.constants.iconWidth,
stopPropagation: false listeners: [{
}, eventName: IconButton.EVENT_CHANGE,
hideChecker: function (e) { action: () => {
return self.triggerBtn.element.find(e.target).length === 0; if (this.combo.isViewVisible()) {
}, // this.combo.hideView();
listeners: [{ } else {
eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, this.combo.showView();
action: function () { }
self.popup.setValue(self.storeValue); },
self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW); }],
} ref: _ref => {
this.triggerBtn = _ref;
},
},
}], }],
ref: function (_ref) {
self.combo = _ref;
}
}, },
top: 0, adjustLength: this.constants.comboAdjustHeight,
left: 0, popup: {
right: 0, el: popup,
bottom: 0 width: opts.isNeedAdjustWidth ? opts.width : this.constants.popupWidth,
}] stopPropagation: false,
}; },
}, hideChecker: e => this.triggerBtn.element.find(e.target).length === 0,
listeners: [{
eventName: Combo.EVENT_BEFORE_POPUPVIEW,
action: () => {
this.popup.setValue(this.storeValue);
this.fireEvent(TimeCombo.EVENT_BEFORE_POPUPVIEW);
},
}],
ref: _ref => {
this.combo = _ref;
},
},
top: 0,
left: 0,
right: 0,
bottom: 0,
}],
};
}
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
this.trigger.setValue(v); this.trigger.setValue(v);
}, }
getValue: function () {
return this.storeValue;
},
hidePopupView: function () { getValue() {
this.combo.hideView(); return this.storeValue;
}, }
_setNowTime: function () { hidePopupView() {
var date = BI.getDate(); this.combo.hideView();
var nowTome = { }
hour: date.getHours(),
minute: date.getMinutes(),
second: date.getSeconds()
};
this.setValue(nowTome);
this.hidePopupView();
this.fireEvent(BI.TimeCombo.EVENT_CONFIRM);
},
focus: function () { _setNowTime() {
this.trigger.focus(); const date = getDate();
}, const nowTome = {
hour: date.getHours(),
minute: date.getMinutes(),
second: date.getSeconds(),
};
this.setValue(nowTome);
this.hidePopupView();
this.fireEvent(TimeCombo.EVENT_CONFIRM);
}
blur: function () { focus() {
this.trigger.blur(); this.trigger.focus();
}, }
setWaterMark: function (v) { blur() {
this.trigger.setWaterMark(v); this.trigger.blur();
} }
});
BI.TimeCombo.EVENT_KEY_DOWN = "EVENT_KEY_DOWN"; setWaterMark(v) {
BI.TimeCombo.EVENT_CONFIRM = "EVENT_CONFIRM"; this.trigger.setWaterMark(v);
BI.TimeCombo.EVENT_CHANGE = "EVENT_CHANGE"; }
BI.TimeCombo.EVENT_VALID = "EVENT_VALID"; }
BI.TimeCombo.EVENT_ERROR = "EVENT_ERROR";
BI.TimeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
BI.shortcut("bi.time_combo", BI.TimeCombo);
})();

349
src/widget/time/time.trigger.js

@ -1,202 +1,193 @@
!(function () { import { shortcut, i18nText, bind, isNotNull, isNotEmptyString, isEqual, AbsoluteLayout, any, print, parseDateTime, isEmptyObject, getDate, isNotEmptyObject } from "@/core";
BI.TimeTrigger = BI.inherit(BI.Trigger, { import { Trigger, Text } from "@/base";
import { SignEditor } from "@/case";
_const: { @shortcut()
COMPARE_FORMAT: "%H:%M:%S", export class TimeTrigger extends Trigger {
COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S %P", static xtype = "bi.time_trigger"
FORMAT_ARRAY: [
"%H:%M:%S", // HH:mm:ss
"%I:%M:%S", // hh:mm:ss
"%l:%M:%S", // h:mm:ss
"%k:%M:%S", // H:mm:ss
"%l:%M:%S %p", // h:mm:ss a
"%l:%M:%S %P", // h:mm:ss a
"%H:%M:%S %p", // HH:mm:ss a
"%H:%M:%S %P", // HH:mm:ss a
"%l:%M", // h:mm
"%k:%M", // H:mm
"%I:%M", // hh:mm
"%H:%M", // HH:mm
"%M:%S" // mm:ss
],
DEFAULT_DATE_STRING: "2000-01-01",
DEFAULT_HOUR: "00"
},
props: () => ({ _const = {
COMPARE_FORMAT: "%H:%M:%S",
COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S %P",
FORMAT_ARRAY: ["%H:%M:%S", "%I:%M:%S", "%l:%M:%S", "%k:%M:%S", "%l:%M:%S %p", "%l:%M:%S %P", "%H:%M:%S %p", "%H:%M:%S %P", "%l:%M", "%k:%M", "%I:%M", "%H:%M", "%M:%S"],
DEFAULT_DATE_STRING: "2000-01-01",
DEFAULT_HOUR: "00",
};
props() {
return {
extraCls: "bi-time-trigger", extraCls: "bi-time-trigger",
value: {}, value: {},
format: "", format: "",
allowEdit: false, allowEdit: false,
watermark: BI.i18nText("BI-Basic_Unrestricted"), watermark: i18nText("BI-Basic_Unrestricted"),
}), };
}
render: function () { render() {
var self = this, o = this.options; const o = this.options;
this.storeTriggerValue = ""; this.storeTriggerValue = "";
this.storeValue = o.value; this.storeValue = o.value;
return {
type: "bi.absolute", return {
items: [{ type: AbsoluteLayout.xtype,
el: { items: [{
type: "bi.sign_editor", el: {
height: o.height, type: SignEditor.xtype,
validationChecker: function (v) { height: o.height,
return self._dateCheck(v); validationChecker: v => this._dateCheck(v),
quitChecker () {
return false;
},
ref: _ref => {
this.editor = _ref;
},
value: this._formatValue(o.value),
hgap: 4,
allowBlank: true,
watermark: o.watermark,
title: bind(this._getTitle, this),
listeners: [{
eventName: "EVENT_KEY_DOWN",
action: (...args) => {
this.fireEvent("EVENT_KEY_DOWN", ...args);
}, },
quitChecker: function () { }, {
return false; eventName: "EVENT_FOCUS",
action: () => {
this.storeTriggerValue = this.getKey();
this.fireEvent("EVENT_FOCUS");
}, },
ref: function (_ref) { }, {
self.editor = _ref; eventName: "EVENT_BLUR",
action: () => {
this.fireEvent("EVENT_BLUR");
}, },
value: this._formatValue(o.value), }, {
hgap: 4, eventName: "EVENT_STOP",
allowBlank: true, action: () => {
watermark: o.watermark, this.fireEvent("EVENT_STOP");
title: BI.bind(this._getTitle, this), },
listeners: [{ }, {
eventName: "EVENT_KEY_DOWN", eventName: "EVENT_VALID",
action: function () { action: () => {
self.fireEvent("EVENT_KEY_DOWN", arguments); this.fireEvent("EVENT_VALID");
} },
}, { }, {
eventName: "EVENT_FOCUS", eventName: "EVENT_ERROR",
action: function () { action: () => {
self.storeTriggerValue = self.getKey(); this.fireEvent("EVENT_ERROR");
self.fireEvent("EVENT_FOCUS"); },
} }, {
}, { eventName: "EVENT_CONFIRM",
eventName: "EVENT_BLUR", action: () => {
action: function () { const value = this.editor.getValue();
self.fireEvent("EVENT_BLUR"); if (isNotNull(value)) {
} this.editor.setState(value);
}, {
eventName: "EVENT_STOP",
action: function () {
self.fireEvent("EVENT_STOP");
}
}, {
eventName: "EVENT_VALID",
action: function () {
self.fireEvent("EVENT_VALID");
}
}, {
eventName: "EVENT_ERROR",
action: function () {
self.fireEvent("EVENT_ERROR");
}
}, {
eventName: "EVENT_CONFIRM",
action: function () {
var value = self.editor.getValue();
if (BI.isNotNull(value)) {
self.editor.setState(value);
}
if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) {
var date = value.match(/\d+/g);
self.storeValue = {
hour: date[0] | 0,
minute: date[1] | 0,
second: date[2] | 0
};
}
self.fireEvent("EVENT_CONFIRM");
}
}, {
eventName: "EVENT_START",
action: function () {
self.fireEvent("EVENT_START");
} }
}, { if (isNotEmptyString(value) && !isEqual(this.storeTriggerValue, this.getKey())) {
eventName: "EVENT_CHANGE", const date = value.match(/\d+/g);
action: function () { this.storeValue = {
self.fireEvent("EVENT_CHANGE"); hour: date[0] | 0,
minute: date[1] | 0,
second: date[2] | 0,
};
} }
}] this.fireEvent("EVENT_CONFIRM");
}, },
left: 0, }, {
right: 0, eventName: "EVENT_START",
top: 0, action: () => {
bottom: 0 this.fireEvent("EVENT_START");
}, { },
el: { }, {
type: "bi.text", eventName: "EVENT_CHANGE",
invisible: o.allowEdit, action: () => {
cls: "show-text", this.fireEvent("EVENT_CHANGE");
title: BI.bind(this._getTitle, this), },
hgap: 4 }],
}, },
left: 0, left: 0,
right: 0, right: 0,
top: 0, top: 0,
bottom: 0 bottom: 0,
}] }, {
}; el: {
}, type: Text.xtype,
invisible: o.allowEdit,
cls: "show-text",
title: bind(this._getTitle, this),
hgap: 4,
},
left: 0,
right: 0,
top: 0,
bottom: 0,
}],
};
}
_dateCheck: function (date) { _dateCheck(date) {
var c = this._const; const c = this._const;
var self = this;
return BI.any(c.FORMAT_ARRAY, function (idx, format) { return any(c.FORMAT_ARRAY, (idx, format) => print(parseDateTime(`${c.DEFAULT_DATE_STRING} ${this._getCompleteHMS(date, format)}`, c.COMPLETE_COMPARE_FORMAT), format) === date);
return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + self._getCompleteHMS(date, format), c.COMPLETE_COMPARE_FORMAT), format) === date; }
});
},
_getCompleteHMS: function (str, format) { _getCompleteHMS(str, format) {
var c = this._const; const c = this._const;
switch (format) { switch (format) {
case "%M:%S": case "%M:%S":
str = c.DEFAULT_HOUR + ":" + str; str = `${c.DEFAULT_HOUR}:${str}`;
break; break;
default: default:
break; break;
} }
return str;
}, return str;
}
_getTitle: function () { _getTitle() {
var storeValue = this.storeValue || {}; const storeValue = this.storeValue || {};
if (BI.isEmptyObject(storeValue)) { if (isEmptyObject(storeValue)) {
return this.options.watermark; return this.options.watermark;
} }
var date = BI.getDate(); const date = getDate();
return BI.print(BI.getDate(date.getFullYear(), 0, 1, storeValue.hour, storeValue.minute, storeValue.second), this._getFormatString());
}, return print(getDate(date.getFullYear(), 0, 1, storeValue.hour, storeValue.minute, storeValue.second), this._getFormatString());
}
_getFormatString: function () { _getFormatString() {
return this.options.format || this._const.COMPARE_FORMAT; return this.options.format || this._const.COMPARE_FORMAT;
}, }
_formatValue: function (v) { _formatValue(v) {
var now = BI.getDate(); const now = getDate();
return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : "";
}, return isNotEmptyObject(v) ? print(getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : "";
}
getKey: function () { getKey() {
return this.editor.getValue(); return this.editor.getValue();
}, }
setValue: function (v) { setValue(v) {
this.storeValue = v; this.storeValue = v;
this.editor.setValue(this._formatValue(v)); this.editor.setValue(this._formatValue(v));
}, }
getValue: function () { getValue() {
return this.storeValue; return this.storeValue;
}, }
focus: function () { focus() {
this.editor.focus(); this.editor.focus();
}, }
blur: function () { blur() {
this.editor.blur(); this.editor.blur();
}, }
setWaterMark: function (v) { setWaterMark(v) {
this.editor.setWaterMark(v); this.editor.setWaterMark(v);
} }
}); }
BI.shortcut("bi.time_trigger", BI.TimeTrigger);
})();

Loading…
Cancel
Save