Browse Source

日期区间组件提交

zhouy 7 years ago
parent
commit
e51ae3fdd6

+ 237 - 0
frontend/saas-web/app/view/core/form/ConDateField.js

@@ -0,0 +1,237 @@
+/**
+ * Created by UAS30 on 2018/10/11.
+ */
+Ext.define('saas.view.core.form.ConDateField', {
+    extend: 'Ext.form.FieldContainer',
+    alias: 'widget.condatefield',
+    layout: 'hbox',
+    valuePrint:"",
+    ombineErrors: true,
+    items: [],
+    showscope: true,
+    defaults: {
+        margin: '0 0 0 0'
+    },
+    initComponent : function(){
+        this.cls = (this.cls || '') + ' x-form-field-multi';
+        this.callParent(arguments);
+        var me = this, allowBlank = (Ext.isDefined(me.allowBlank) ? me.allowBlank : true);
+        me.combo = Ext.create('Ext.form.field.ComboBox', {
+            width: 100,
+            editable: false,
+            hidden: !me.showscope,
+            fieldStyle: 'background:#C1CDC1',
+            store: Ext.create('Ext.data.Store', {
+                fields: ['display', 'value'],
+                data : [
+                    {"display":"-请选择-", "value": 7},
+                    {"display":"今天", "value": 1},
+                    {"display":"昨天", "value": 2},
+                    {"display":"本月", "value": 3},
+                    {"display":"上个月", "value": 4},
+                    {"display":"本年度", "value": 5},
+                    {"display":"上年度", "value": 6},
+                    {"display":"近半年", "value": 8},
+                    {"display":"自定义", "value": 7}
+                ]
+            }),
+            triggerAction: 'all',
+            forceSelection: true,
+            queryMode: 'local',
+            displayField: 'display',
+            valueField: 'value',
+            value: 3,
+            listeners: {
+                select: function(combo, records, obj){
+                    me.setDateFieldValue(combo.value);
+                }
+            }
+        });
+        me.insert(0, me.combo);
+        me.from = me.insert(1, {
+            xtype: 'datefield',
+            name: me.name + '_from',
+            format: 'Y-m-d',
+            allowBlank: allowBlank,
+            flex: 1,
+            fieldStyle: me.fieldStyle,
+            listeners: {
+                change: function(f){
+                    var from =me.from.value,to = me.to.value;
+                    var v = me.items.items[0].value;
+                    if(v != 7) {
+                        me.to.setMinValue(me.from.value);
+                    }
+                    from = from == null || from == '' ? to == null || to == '' ? '' : to : from;
+                    to = to == null || to == '' ? from == null || from == '' ? '' : from : to;
+                    me.firstVal = from;
+                    me.secondVal = to;
+                    if(to!=''&&from!=''){
+                        me.value = "BETWEEN to_date('" + Ext.Date.format(from,'Y-m-d') + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
+                            + Ext.Date.format(to,'Y-m-d') + " 23:59:59','yyyy-MM-dd HH24:mi:ss')";
+                        if(me.ownerCt){
+                            var tablename = me.ownerCt.tablename;
+                            me.valuePrint="{"+tablename+"."+me.name+"}>=date('"+Ext.Date.format(from,'Y-m-d')+"') and {"+tablename+"."+me.name+"}<=date('"+Ext.Date.format(to,'Y-m-d')+"')";
+                        }
+                    }else {
+                        me.value=null;
+                    }
+                }
+            }
+        });
+        me.to = me.insert(2, {
+            xtype: 'datefield',
+            name: me.name + '_to',
+            allowBlank: allowBlank,
+            format: 'Y-m-d',
+            flex: 1,
+            fieldStyle: me.fieldStyle,
+            listeners: {
+                change: function(){
+                    var from = me.from.value, to =me.to.value;
+                    var v = me.items.items[0].value;
+                    me.from.setMaxValue(me.to.value);
+                    from = from == null || from == '' ? to == null || to == '' ? '' : to : from;
+                    to = to == null || to == '' ? from == null || from == '' ? '' : from : to;
+                    me.firstVal = from;
+                    me.secondVal = to;
+                    if(to!=''&& from!=''){
+                        me.value = "BETWEEN to_date('" + Ext.Date.format(from,'Y-m-d') + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
+                            + Ext.Date.format(to,'Y-m-d') + " 23:59:59','yyyy-MM-dd HH24:mi:ss')";
+                        if(me.ownerCt){
+                            var tablename = me.ownerCt.tablename;
+                            me.valuePrint = "{"+tablename+"."+me.name+"}>=date('"+Ext.Date.format(from,'Y-m-d')+"') and {"+tablename+"."+me.name+"}<=date('"+Ext.Date.format(to,'Y-m-d')+"')";
+                        }
+                    }else {
+                        me.value=null;
+                    }
+                }
+            }
+        });
+        var t = this.value;
+        if(!t || !t in [1,2,3,4,5,6,7]) {
+            t = 3;
+        }
+        this.value = null;
+        this.setValue(t);
+    },
+    setDateFieldValue: function(v){
+        v = Number(v);
+        var me = this,from =me.from ,to=me.to;
+        var now = new Date();                    //当前日期
+        var nowDay = now.getDate();              //当前日
+        var nowMonth = now.getMonth();           //当前月
+        var nowYear = now.getYear();             //当前年
+        nowYear += (nowYear < 2000) ? 1900 : 0;
+        var maxDate = null;
+        var minDate = null;
+        switch (v) {
+            case 1://今天
+                minDate = now;
+                maxDate = now;
+                break;
+            case 2://昨天
+                minDate = new Date(nowYear, nowMonth, nowDay - 1);
+                maxDate = new Date(nowYear, nowMonth, nowDay - 1);
+                break;
+            case 3://本月
+                minDate = Ext.Date.getFirstDateOfMonth(now);
+                maxDate = Ext.Date.getLastDateOfMonth(now);
+                break;
+            case 4://上个月
+                minDate = Ext.Date.getFirstDateOfMonth(new Date(nowYear, nowMonth - 1, 1));
+                maxDate = Ext.Date.getLastDateOfMonth(new Date(nowYear, nowMonth - 1, 1));
+                break;
+            case 5://本年度
+                minDate = new Date(nowYear, 0, 1);
+                maxDate = new Date(nowYear, 11, 31);
+                break;
+            case 6://上年度
+                minDate = new Date(nowYear - 1, 0, 1);
+                maxDate = new Date(nowYear - 1, 11, 31);
+                break;
+            case 8://近半年
+                if(nowMonth > 5){
+                    minDate = new Date(nowYear, nowMonth-6, nowDay);
+                }else{
+                    minDate = new Date(nowYear - 1, 12 - 6 + nowMonth, nowDay);
+                }
+                maxDate = new Date(nowYear, nowMonth, nowDay);
+                break;
+            case 7://自定义
+                minDate = new Date(1970, 0, 1);
+                maxDate = new Date(nowYear + 100, 11, 31);
+                break;
+            default:
+                minDate = new Date(1970, 0, 1);
+                maxDate = new Date(nowYear + 100, 11, 31);
+                break;
+        }
+        from.setMaxValue(maxDate);
+        from.setMinValue(minDate);
+        to.setMaxValue(maxDate);
+        to.setMinValue(minDate);
+        if(v == 7) {
+            from.setValue(null);
+            to.setValue(null);
+            me.firstVal = null;
+            me.secondVal = null;
+            from.setEditable(true);
+            to.setEditable(true);
+        } else {
+            from.setValue(minDate);
+            to.setValue(maxDate);
+            me.firstVal = minDate;
+            me.secondVal = maxDate;
+            from.setEditable(false);
+            to.setEditable(false);
+        }
+    },
+    setValue: function(v){
+        if (v) {
+            this.combo.setValue(v);
+            this.setDateFieldValue(v);
+        }
+    },
+    getValue: function(){
+        return this.value;
+    },
+    listeners: {
+        afterrender: function(){
+            var tablename = this.ownerCt == null ? '' : this.ownerCt.tablename;
+            if(this.firstVal != null && this.secondVal != null) {
+                this.valuePrint = "{"+tablename+"."+this.name+"}>=date('"+Ext.Date.toString(this.firstVal)+"') and {"
+                    +tablename+"."+this.name+"}<=date('"+Ext.Date.toString(this.secondVal)+"')";
+            }
+        }
+    },
+    hideScope: function(bool) {
+        if(bool)
+            this.items.items[0].hide();
+        else
+            this.items.items[0].show();
+    },
+    mregex: /^[1-9]\d{3}[0-1]\d$/,
+    setMonthValue: function(val) {
+        if(this.mregex.test(val)) {
+            var me = this,
+                d = Ext.Date.parse(val + '01', 'Ymd'),
+                f = Ext.Date.getFirstDateOfMonth(d),
+                l = Ext.Date.getLastDateOfMonth(d);
+            var from =me.from,to=me.to;
+            from.setMaxValue(l);
+            from.setMinValue(f);
+            to.setMaxValue(l);
+            to.setMinValue(f);
+            from.setValue(f);
+            to.setValue(l);
+        }
+    },
+    getFilter: function() {
+        var me = this, fromVal = me.from.getValue(), toVal = me.to.getValue();
+        return (fromVal || toVal) ? {
+            "gte": fromVal ? Ext.Date.format(fromVal, 'Y-m-d') : null,
+            "lte": toVal ? Ext.Date.format(toVal, 'Y-m-d') : null
+        } : null;
+    }
+});

+ 1 - 1
frontend/saas-web/app/view/core/view/BoundListAdd.js

@@ -256,7 +256,7 @@ Ext.define('saas.view.core.view.BoundListAdd', {
             border: true,
             ownerCt: me,
             items:[{
-                text:'add',
+                text:'新增',
                 handler:me.addHandler,
                 scope:me
             }],

+ 38 - 0
frontend/saas-web/app/view/test/order/FormController.js

@@ -1,6 +1,44 @@
 Ext.define('saas.view.test.order.FormController', {
     extend: 'saas.view.core.form.FormPanelController',
     alias: 'controller.test-order-formcontroller',
+    init: function (view) {
+        var me = this;
+        this.control({
+            /**放大镜新增demo*/
+            "field[name=combo]":{
+                beforerender:function(f){
+                    f.addHandler=me.addCombo;
+
+                }
+            }
+
+        });
+
+    },
+    addCombo:function(){
+        var combo=this.ownerCmp;
+        Ext.create('Ext.window.Window',{
+            layout:'vbox',
+            bodyPadding: 15,
+            width:500,
+            items:[{
+                fieldLabel:'实际值',
+                xtype:'textfield'
+            },{
+                fieldLabel:'显示值',
+                xtype:'textfield'
+            }],
+            buttons:[{
+                text:'确认',
+                handler:function(b){
+                    combo.setValue('ok');
+                    b.up('window').close();
+                }
+            }],
+            renderTo:this.ownerCmp.ownerCt.getEl()
+        }).show();
+
+    }
 
 
 });