import _ from 'lodash'
export default function () {
Ext.define('Yvan.DateTimePicker', {
extend: 'Ext.picker.Date',
alias: 'datetimepicker',
alternateClassName: 'Ext.DateTimePicker',
renderTpl: [
'
',
'',
'
',
'',
'',
'',
'',
' {.:this.firstInitial} ',
' | ',
'',
'
',
'',
'',
'',
'',
'{#:this.isEndOfWeek}',
'',
'',
' | ',
'',
'
',
'',
'
',
'
',
'',
'',
// These elements are used with Assistive Technologies such as screen readers
'
{todayText}.
',
'
{ariaMinText}.
',
'
{ariaMaxText}.
',
'
{ariaDisabledDaysText}.
',
'
{ariaDisabledDatesText}.
',
'
',
{
firstInitial: function (value) {
return Ext.picker.Date.prototype.getDayInitial(value);
},
isEndOfWeek: function (value) {
// convert from 1 based index to 0 based
// by decrementing value once.
value--;
// eslint-disable-next-line vars-on-top
var end = value % 7 === 0 && value !== 0;
return end ? '' : '';
},
renderTodayBtn: function (values, out) {
Ext.DomHelper.generateMarkup(values.$comp.todayBtn.getRenderTree(), out);
},
renderMonthBtn: function (values, out) {
Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out);
}
}
],
beforeRender() {
var me = this,
today = Ext.Date.format(new Date(), me.format);
this.superclass.beforeRender.call(this)
function handleInput(extHandle, $input) {
$input.on('mousewheel', (e) => {
e.stopPropagation()
const event = e.originalEvent
let delta = 0
if (event.wheelDelta) {
delta = event.wheelDelta / 120;
} else if (event.detail) {
delta = -event.detail / 3;
}
if (_.trim(extHandle.getValue()) === '') {
extHandle.setValue(extHandle.minValue)
} else {
const v = parseInt('' + extHandle.getValue())
if (v + delta > extHandle.maxValue) {
extHandle.setValue(extHandle.minValue)
} else if (v + delta < extHandle.minValue) {
extHandle.setValue(extHandle.maxValue)
} else {
extHandle.setValue(v + delta)
}
}
// console.log('delta', delta)
// $input.focus()
})
}
me.input1 = Ext.create('Ext.form.field.Number', {
minValue: 0,
maxValue: 23,
flex: 1,
enableKeyEvents: true,
fieldLabel: '时',
labelWidth: 20,
hideLabel: true,
spinDownEnabled: false,
spinUpEnabled: false,
style: {
marginLeft: '5px',
},
listeners: {
afterrender(sender) {
const $input = $(sender.inputEl.dom)
handleInput(me.input1, $input)
},
change(sender, e) {
if (me.getValue()) {
me.value.setHours(sender.getValue());
}
},
}
});
me.input2 = Ext.create('Ext.form.field.Number', {
minValue: 0,
maxValue: 59,
flex: 1,
enableKeyEvents: true,
fieldLabel: ' ',
hideLabel: false,
labelWidth: 8,
spinDownEnabled: false,
spinUpEnabled: false,
listeners: {
afterrender(sender) {
const $input = $(sender.inputEl.dom)
handleInput(me.input2, $input)
},
change(sender, e) {
if (me.getValue()) {
me.value.setMinutes(sender.getValue());
}
},
}
});
me.input3 = Ext.create('Ext.form.field.Number', {
minValue: 0,
maxValue: 59,
flex: 1,
enableKeyEvents: true,
fieldLabel: ' ',
hideLabel: false,
labelWidth: 8,
spinDownEnabled: false,
spinUpEnabled: false,
style: {
marginRight: '5px',
},
listeners: {
afterrender(sender) {
const $input = $(sender.inputEl.dom)
handleInput(me.input3, $input)
},
change(sender, e) {
if (me.getValue()) {
me.value.setSeconds(sender.getValue());
}
},
}
});
me.confirmBtn = new Ext.button.Button({
text: '确认',
handler: me.confirmClick,
scope: me
});
me.tdBtn = new Ext.button.Button({
text: '今天',
handler: me.selectToday,
scope: me
});
me.todayBtn = Ext.create('Ext.container.Container', {
layout: 'anchor', border: false,
defaults: {
border: false, anchor: '100%',
margin: '0 0 5 0',
},
items: [
{
layout: 'hbox',
items: [
me.input1,
me.input2,
me.input3,
]
},
{
layout: 'hbox',
items: [
me.confirmBtn,
me.tdBtn,
]
}
]
});
},
// finishRenderChildren() {
// var me = this;
//
// this.superclass.finishRenderChildren.call(this);
// //*
// me.input1.finishRender();
// me.input2.finishRender();
// me.input3.finishRender();
// //
// me.tdBtn.finishRender();
// me.confirmBtn.finishRender();
// },
setValue(value) {
//this.value = Ext.Date.clearTime(value, true);
this.value = value;
this.input1.setValue(this.value.getHours());
this.input2.setValue(this.value.getMinutes());
this.input3.setValue(this.value.getSeconds());
return this.update(this.value);
},
selectDate: function (value) {
if (this.showTime) {
value.setHours(this.input1.getValue());
value.setMinutes(this.input2.getValue());
value.setSeconds(this.input3.getValue());
}
this.value = value;
return this.update(this.value);
},
setDisabledStatus: function (disabled) {
var me = this;
debugger
// me.callParent();
if (me.showTime) {
me.confirmBtn.setDisabled(disabled);
}
if (me.isShowFooter()) {
me.footerContainer.setDisabled(disabled);
}
},
handleDateClick: function (e, t) {
var me = this,
handler = me.handler;
// e.stopEvent();
if (!me.disabled && t.dateValue && !Ext.fly(t.parentNode).hasCls(me.disabledCellCls)) {
me.doCancelFocus = me.focusOnSelect === false;
me.selectDate(new Date(t.dateValue));
delete me.doCancelFocus;
/* 有时间输入时单击事件不退出选择,只移动光标 */
if (me.showTime) {
return;
}
me.fireEvent('select', me, me.value);
if (handler) {
handler.call(me.scope || me, me, me.value);
}
me.onSelect();
}
},
selectToday: function () {
var me = this,
btn = me.todayBtn,
handler = me.handler;
if (btn && !btn.disabled) {
me.value = new Date();
me.update(me.value);
me.fireEvent('select', me, me.value);
if (handler) {
handler.call(me.scope || me, me, me.value);
}
me.onSelect();
}
return me;
},
confirmClick: function () {
var me = this,
btn = me.confirmBtn,
handler = me.handler;
if (btn && !btn.disabled) {
me.fireEvent('select', me, me.value);
if (handler) {
handler.call(me.scope || me, me, me.value);
}
me.onSelect();
}
return me;
},
selectedUpdate: function (date) {
var me = this,
//t = date.getTime(),
t = Ext.Date.clearTime(date, true).getTime(),
cells = me.cells,
cls = me.selectedCls,
cellItems = cells.elements,
c,
cLen = cellItems.length,
cell;
cells.removeCls(cls);
for (c = 0; c < cLen; c++) {
cell = Ext.fly(cellItems[c]);
if (cell.dom.firstChild.dateValue == t) {
me.fireEvent('highlightitem', me, cell);
cell.addCls(cls);
if (me.isVisible() && !me.doCancelFocus) {
Ext.fly(cell.dom.firstChild).focus(50);
}
break;
}
}
},
// private, inherit docs
beforeDestroy: function () {
var me = this;
if (me.rendered) {
Ext.destroy(
me.input1,
me.input2,
me.input3,
me.confirmBtn,
me.tdBtn,
me.todayBtn
);
}
me.superclass.beforeDestroy.call(this)
}
})
}