|
|
@@ -2,18 +2,20 @@
|
|
|
* @Description: 日期筛选头-日期选择组件
|
|
|
* @Author: hy
|
|
|
* @Date: 2019-08-12 18:37:09
|
|
|
- * @LastEditTime: 2019-08-12 18:39:58
|
|
|
+ * @LastEditTime: 2019-08-13 17:54:46
|
|
|
*/
|
|
|
Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
extend: 'Ext.picker.Date',
|
|
|
alias: 'widget.dateTypePicker',
|
|
|
xtype: 'dateTypePicker',
|
|
|
+ nextText: '',
|
|
|
+ prevText: '',
|
|
|
+ monthYearText: '',
|
|
|
renderTpl: [
|
|
|
'<div id="{id}-innerEl" data-ref="innerEl" role="presentation">',
|
|
|
- '<div id="{id}-topButtons" data-ref="topButtons" class="{baseCls}-buttons" role="heading">',
|
|
|
- '<tpl for="topButtons">',
|
|
|
- '{%this.renderButtons(values, out)%}',
|
|
|
- '</tpl>',
|
|
|
+ '<tpl if="showTopButtons">',
|
|
|
+ '<div id="{id}-topButtons" data-ref="topButtons" class="{baseCls}-buttons" role="heading">',
|
|
|
+ '</tpl>',
|
|
|
'</div>',
|
|
|
'<div class="{baseCls}-header">',
|
|
|
'<div id="{id}-prevEl" data-ref="prevEl" class="{baseCls}-prev {baseCls}-arrow" role="presentation" title="{prevText}"></div>',
|
|
|
@@ -41,10 +43,9 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
'</tr>',
|
|
|
'</tbody>',
|
|
|
'</table>',
|
|
|
- '<div id="{id}-bottomButtons" data-ref="bottomButtons" class="{baseCls}-buttons" role="presentation">',
|
|
|
- '<tpl for="bottomButtons">',
|
|
|
- '{%this.renderButtons(values, out)%}',
|
|
|
- '</tpl>',
|
|
|
+ '<tpl if="showBottomButtons">',
|
|
|
+ '<div id="{id}-bottomButtons" data-ref="bottomButtons" class="{baseCls}-buttons" role="presentation">',
|
|
|
+ '</tpl>',
|
|
|
'</div>',
|
|
|
'</div>',
|
|
|
{
|
|
|
@@ -63,83 +64,82 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
},
|
|
|
renderMonthBtn: function(values, out) {
|
|
|
Ext.DomHelper.generateMarkup(values.$comp.monthBtn.getRenderTree(), out);
|
|
|
- },
|
|
|
- renderButtons: function(button, out) {
|
|
|
- Ext.DomHelper.generateMarkup(button.getRenderTree(), out);
|
|
|
}
|
|
|
}
|
|
|
],
|
|
|
- beforeRender: function() {
|
|
|
- /*
|
|
|
- * days array for looping through 6 full weeks (6 weeks * 7 days)
|
|
|
- * Note that we explicitly force the size here so the template creates
|
|
|
- * all the appropriate cells.
|
|
|
- */
|
|
|
+ onRender: function(container, position) {
|
|
|
var me = this,
|
|
|
- encode = Ext.String.htmlEncode,
|
|
|
- days = new Array(me.numDays),
|
|
|
- today = Ext.Date.format(new Date(), me.format);
|
|
|
- if (me.padding && !me.width) {
|
|
|
- me.cacheWidth();
|
|
|
- }
|
|
|
+ dateCellSelector = 'div.' + me.baseCls + '-date';
|
|
|
+
|
|
|
+ me.callParent(arguments);
|
|
|
+
|
|
|
+ me.cells = me.eventEl.select('tbody td');
|
|
|
+ me.textNodes = me.eventEl.query(dateCellSelector);
|
|
|
+
|
|
|
+ me.eventEl.set({ 'aria-labelledby': me.monthBtn.id });
|
|
|
+
|
|
|
+ me.mon(me.eventEl, {
|
|
|
+ scope: me,
|
|
|
+ mousewheel: me.handleMouseWheel,
|
|
|
+ click: {
|
|
|
+ fn: me.handleDateClick,
|
|
|
+ delegate: dateCellSelector
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //添加按钮
|
|
|
+ const tbarEl = document.getElementById(me.id+'-topButtons'),
|
|
|
+ bbarEl = document.getElementById(me.id+'-bottomButtons');
|
|
|
if (me.showTopButtons){
|
|
|
me.equal = new Ext.button.Button({
|
|
|
+ renderTo : tbarEl,
|
|
|
margin:'5 0 0 8',
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
text: '等于',
|
|
|
+ name: 'equal',
|
|
|
tabIndex: -1,
|
|
|
ariaRole: 'presentation',
|
|
|
- handler: Ext.emptyFn,
|
|
|
+ handler: me.changeType,
|
|
|
scope: me
|
|
|
});
|
|
|
me.begin = new Ext.button.Button({
|
|
|
+ renderTo : tbarEl,
|
|
|
margin:'5 0 0 0',
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
text: '开始于',
|
|
|
+ name: 'begin',
|
|
|
tabIndex: -1,
|
|
|
ariaRole: 'presentation',
|
|
|
- handler: Ext.emptyFn,
|
|
|
+ handler: me.changeType,
|
|
|
scope: me
|
|
|
});
|
|
|
me.end = new Ext.button.Button({
|
|
|
+ renderTo : tbarEl,
|
|
|
margin:'5 0 0 0',
|
|
|
+ name: 'end',
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
text: '结束于',
|
|
|
tabIndex: -1,
|
|
|
ariaRole: 'presentation',
|
|
|
- handler: Ext.emptyFn,
|
|
|
+ handler: me.changeType,
|
|
|
scope: me
|
|
|
});
|
|
|
me.between = new Ext.button.Button({
|
|
|
+ renderTo : tbarEl,
|
|
|
+ name: 'between',
|
|
|
margin:'5 8 0 0',
|
|
|
ownerCt: me,
|
|
|
- ownerLayout: me.getComponentLayout(),
|
|
|
text: '介于',
|
|
|
tabIndex: -1,
|
|
|
- ariaRole: 'presentation',
|
|
|
- handler: Ext.emptyFn,
|
|
|
- scope: me
|
|
|
+ handler: me.changeType,
|
|
|
+ scope : me
|
|
|
});
|
|
|
}
|
|
|
- me.monthBtn = new Ext.button.Button({
|
|
|
- ownerCt: me,
|
|
|
- ownerLayout: me.getComponentLayout(),
|
|
|
- text: '',
|
|
|
- tooltip: me.monthYearText,
|
|
|
- tabIndex: -1,
|
|
|
- ariaRole: 'presentation',
|
|
|
- showEmptyMenu: false,
|
|
|
- menu: [],
|
|
|
- listeners: {
|
|
|
- click: me.doShowMonthPicker,
|
|
|
- scope: me
|
|
|
- }
|
|
|
- });
|
|
|
if (me.showBottomButtons) {
|
|
|
me.nowDayBtn = new Ext.button.Button({
|
|
|
+ renderTo : bbarEl,
|
|
|
margin:'0 0 0 5',
|
|
|
ui: me.footerButtonUI,
|
|
|
ownerCt: me,
|
|
|
@@ -151,6 +151,7 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
scope: me
|
|
|
});
|
|
|
me.nowMonthBtn = new Ext.button.Button({
|
|
|
+ renderTo : bbarEl,
|
|
|
ui: me.footerButtonUI,
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
@@ -161,6 +162,7 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
scope: me
|
|
|
});
|
|
|
me.preMonthBtn = new Ext.button.Button({
|
|
|
+ renderTo : bbarEl,
|
|
|
ui: me.footerButtonUI,
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
@@ -171,6 +173,7 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
scope: me
|
|
|
});
|
|
|
me.nowYearBtn = new Ext.button.Button({
|
|
|
+ renderTo : bbarEl,
|
|
|
ui: me.footerButtonUI,
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
@@ -181,6 +184,7 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
scope: me
|
|
|
});
|
|
|
me.preYearBtn = new Ext.button.Button({
|
|
|
+ renderTo : bbarEl,
|
|
|
ui: me.footerButtonUI,
|
|
|
ownerCt: me,
|
|
|
ownerLayout: me.getComponentLayout(),
|
|
|
@@ -191,23 +195,96 @@ Ext.define('uas.view.plugins.gridHeaderFilter.field.date.DateTypePicker', {
|
|
|
scope: me
|
|
|
});
|
|
|
}
|
|
|
- me.callParent();
|
|
|
- Ext.applyIf(me, {
|
|
|
- renderData: {}
|
|
|
- });
|
|
|
- Ext.apply(me.renderData, {
|
|
|
- dayNames: me.dayNames,
|
|
|
- topButtons: me.showTopButtons?[me.equal,me.begin,me.end,me.between]:[],
|
|
|
- bottomButtons: me.showBottomButtons?[me.nowDayBtn,me.nowMonthBtn,me.preMonthBtn,me.nowYearBtn,me.preYearBtn]:[],
|
|
|
- prevText: encode(me.prevText),
|
|
|
- nextText: encode(me.nextText),
|
|
|
- todayText: encode(me.todayText),
|
|
|
- ariaMinText: encode(me.ariaMinText),
|
|
|
- ariaMaxText: encode(me.ariaMaxText),
|
|
|
- ariaDisabledDaysText: encode(me.ariaDisabledDaysText),
|
|
|
- ariaDisabledDatesText: encode(me.ariaDisabledDatesText),
|
|
|
- days: days
|
|
|
- });
|
|
|
- me.protoEl.unselectable();
|
|
|
+ },
|
|
|
+ showMonthPicker: function(animate) {
|
|
|
+ var me = this,
|
|
|
+ el = me.el,
|
|
|
+ picker,
|
|
|
+ datePicker2 = me.pickerField.datePicker2,
|
|
|
+ size;
|
|
|
+ if(me.cls!=='x-datepicker2'&&!datePicker2.hidden){
|
|
|
+ size = {
|
|
|
+ height:el.getSize().height-30,
|
|
|
+ width:el.getSize().width
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ size = el.getSize();
|
|
|
+ }
|
|
|
+ if (me.rendered && !me.disabled) {
|
|
|
+ picker = me.createMonthPicker();
|
|
|
+ if (!picker.isVisible()) {
|
|
|
+ picker.setValue(me.getActive());
|
|
|
+ picker.setSize(size);
|
|
|
+
|
|
|
+ // Null out floatParent so that the [-1, -1] position is not made relative to this
|
|
|
+ picker.floatParent = null;
|
|
|
+ picker.setPosition(-el.getBorderWidth('l'), -el.getBorderWidth('t'));
|
|
|
+ if (me.shouldAnimate(animate)) {
|
|
|
+ me.runAnimation(false);
|
|
|
+ } else {
|
|
|
+ picker.show();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return me;
|
|
|
+ },
|
|
|
+ changeType:function(btn,e){
|
|
|
+ const datePicker = btn.ownerCt,
|
|
|
+ { pickerField,begin,end,equal,between } = datePicker,
|
|
|
+ { datePicker2 } = pickerField,
|
|
|
+ filterContainer = pickerField.ownerCt,
|
|
|
+ { operator } = filterContainer,
|
|
|
+ XY = pickerField.getAlignToXY(pickerField.inputEl),
|
|
|
+ selectCls = 'x-datepicker-tbar-active';
|
|
|
+ if(!btn.hasCls(selectCls)){
|
|
|
+ //移除样式
|
|
|
+ begin.removeCls(selectCls);
|
|
|
+ end.removeCls(selectCls);
|
|
|
+ equal.removeCls(selectCls);
|
|
|
+ between.removeCls(selectCls);
|
|
|
+ //添加选中样式
|
|
|
+ btn.addCls(selectCls);
|
|
|
+ if(btn.text==='介于'){
|
|
|
+ datePicker2.showAt(XY[0],XY[1]+238)
|
|
|
+ pickerField.onFocus();
|
|
|
+ pickerField.focusEl.focus();
|
|
|
+ }else{
|
|
|
+ datePicker2.hide();
|
|
|
+ }
|
|
|
+ operator.operateText = btn.text;
|
|
|
+ operator.operate = btn.name;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ listeners:{
|
|
|
+ beforerender:function(){
|
|
|
+ const me = this;
|
|
|
+ Ext.apply(me.renderData, {
|
|
|
+ showTopButtons: me.showTopButtons,
|
|
|
+ showBottomButtons: me.showBottomButtons,
|
|
|
+ });
|
|
|
+ },
|
|
|
+ select: function(me,date){
|
|
|
+ const { pickerField } = me;
|
|
|
+ const filterContainer = pickerField.ownerCt;
|
|
|
+ const { operator } = filterContainer;
|
|
|
+ var format = 'Y-m-d';
|
|
|
+ var value = '';
|
|
|
+ if(operator.operate==='equal'){
|
|
|
+ value = Ext.Date.format(date,format);
|
|
|
+ pickerField.setValue('='+value);
|
|
|
+ me.hide();
|
|
|
+ }else if(operator.operate==='begin'){
|
|
|
+ value = Ext.Date.format(date,format);
|
|
|
+ pickerField.setValue('>='+value);
|
|
|
+ me.hide();
|
|
|
+ }else if(operator.operate==='end'){
|
|
|
+ value = Ext.Date.format(date,format);
|
|
|
+ pickerField.setValue('<='+value);
|
|
|
+ me.hide();
|
|
|
+ }else if(operator.operate==='between'){
|
|
|
+
|
|
|
+ }
|
|
|
+ pickerField.blur();
|
|
|
+ },
|
|
|
}
|
|
|
});
|