Ext.define('erp.view.core.picker.TimePicker', { extend: 'Ext.Component', requires: ['Ext.XTemplate', 'Ext.Date', 'Ext.button.Button'], alias: 'widget.timepicker', alternateClassName: 'Ext.TimePicker', renderTpl: [ '
', '
', '
— 小时 —
', '', '', '', '
', '
', '
— 分钟 —
', '', '', '', '
', '
', '
', '', '
', '
' ], okText: '确认', cancelText: '取消', baseCls: Ext.baseCSSPrefix + 'timepicker', showButtons: true, smallCls: Ext.baseCSSPrefix + 'monthpicker-small', totalYears: 10, yearOffset: 5, monthOffset: 6, width: 178, hours:['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23'], minutes:['0','5','10','15','20','25','30','35','40','45','50','55'], initComponent: function(){ var me = this; me.selectedCls = me.baseCls + '-selected'; me.addEvents( 'cancelclick', 'hourclick', 'hourdblclick', 'okclick', 'select', 'minuteclick', 'minutedblclick' ); if (me.small) { me.addCls(me.smallCls); } me.setValue(me.value); this.callParent(); }, // private, inherit docs onRender: function(ct, position){ var me = this, i = 0, months = [], shortName = Ext.Date.getShortMonthName, monthLen = me.monthOffset; for (; i < monthLen; ++i) { months.push(shortName(i), shortName(i + monthLen)); } Ext.apply(me.renderData, { hours: me.hours, minutes: me.minutes, showButtons: me.showButtons }); me.addChildEls('bodyEl', 'buttonsEl'); me.callParent(arguments); }, // private, inherit docs afterRender: function(){ var me = this, body = me.bodyEl, buttonsEl = me.buttonsEl; me.callParent(); me.mon(body, 'click', me.onBodyClick, me); me.mon(body, 'dblclick', me.onBodyClick, me); // keep a reference to the year/month elements since we'll be re-using them me.minutes = body.select('.' + me.baseCls + '-minute a'); me.hours = body.select('.' + me.baseCls + '-hour a'); if (me.showButtons) { me.okBtn = Ext.create('Ext.button.Button', { text: me.okText, renderTo: buttonsEl, handler: me.onOkClick, scope: me }); me.cancelBtn = Ext.create('Ext.button.Button', { text: me.cancelText, renderTo: buttonsEl, handler: me.onCancelClick, scope: me }); } }, setValue: function(value){ var me = this; if (!value) { me.value = [null, null]; }else { var arrs=me.value.split(":"), hour=arrs[0], minute=arrs[1]; hour =hour.charAt(0)=='0'? Number(hour.charAt(1)):Number(hour); minute =minute.charAt(0)=='0'? Number(minute.charAt(1)):Number(minute); me.value=[hour,minute]; } if (me.rendered) { me.hours.removeCls(cls); me.minutes.removeCls(cls); me.minutes.each(function(el, all, index){ el.dom.innerHTML = minute; if (el.dom.innerHTML == minute) { el.dom.className = me.selectedCls; } }); if (hour !== null) { me.hours.item(hour).addCls(me.selectedCls); } } return me; }, getValue: function(){ return this.value; }, hasSelection: function(){ var value = this.value; return value[0] !== null && value[1] !== null; }, updateBody: function(){ var me = this, hours = me.hours, minutes = me.minutes, cls = me.selectedCls, hour = me.value[0], minute = me.value[1]; if (me.rendered) { hours.removeCls(cls); minutes.removeCls(cls); minutes.each(function(el, all, index){ el.dom.innerHTML = minute; if (el.dom.innerHTML == minute) { el.dom.className = cls; } }); if (hour !== null) { hours.item(hour).addCls(cls); } } }, getYear: function(defaultValue, offset) { var year = this.value[1]; offset = offset || 0; return year === null ? defaultValue : year + offset; }, onBodyClick: function(e, t) { var me = this, isDouble = e.type == 'dblclick'; if (e.getTarget('.' + me.baseCls + '-hour')) { e.stopEvent(); me.onHourClick(t, isDouble); } else if (e.getTarget('.' + me.baseCls + '-minute')) { e.stopEvent(); me.onMinuteClick(t, isDouble); } }, adjustYear: function(offset){ if (typeof offset != 'number') { offset = this.totalYears; } this.activeYear += offset; this.updateBody(); }, onOkClick: function(){ this.fireEvent('okclick', this, this.value); }, onCancelClick: function(){ this.fireEvent('cancelclick', this); this.hide(); }, onHourClick: function(target, isDouble){ var me = this; me.value[0] = target.innerText; me.hours.removeCls(me.selectedCls); me.hours.each(function(el, all, index){ if (el.dom.innerText == me.value[0] ) { el.dom.className = me.selectedCls; } }); me.fireEvent('hour' + (isDouble ? 'dbl' : '') + 'click', me, me.value); me.fireEvent('select', me, me.value); }, onMinuteClick: function(target, isDouble){ var me = this; me.value[1]=target.innerText; me.minutes.removeCls(me.selectedCls); me.minutes.each(function(el, all, index){ if (el.dom.innerText == me.value[1] ) { el.dom.className = me.selectedCls; } }); me.fireEvent('minute' + (isDouble ? 'dbl' : '') + 'click', me, me.value); me.fireEvent('select', me, me.value); }, resolveOffset: function(index, offset){ if (index % 2 === 0) { return (index / 2); } else { return offset + Math.floor(index / 2); } }, beforeDestroy: function(){ var me = this; me.hours = me.minutes = null; Ext.destroyMembers(me, 'backRepeater', 'nextRepeater', 'okBtn', 'cancelBtn'); me.callParent(); } });