Browse Source

combobox添加清空按钮/课程表时间段自动输入控制

zhuth 7 years ago
parent
commit
11f716f38e

+ 7 - 6
frontend/pc-web/app/view/Interaction/homework/List.js

@@ -62,7 +62,8 @@ Ext.define('school.view.interaction.homework.List', {
                 fieldLabel: '发布状态',
                 displayField: 'name',
                 valueField: 'value',
-                editable: true,
+                editable: false,
+                clearable: true,
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['name', 'value'],
                     data: [
@@ -72,11 +73,11 @@ Ext.define('school.view.interaction.homework.List', {
                 }),
                 minChars: 0,
                 queryMode: 'local'
-            // }, {
-            //     xtype: 'condatefield',
-            //     name: 'publish_date',
-            //     fieldLabel: '发布时间',
-            //     columnWidth: 0.5
+            }, {
+                xtype: 'condatefield',
+                name: 'publish_date',
+                fieldLabel: '发布时间',
+                columnWidth: 0.5
             }],
 
             gridConfig: {

+ 4 - 2
frontend/pc-web/app/view/Interaction/mailbox/List.js

@@ -58,7 +58,8 @@ Ext.define('school.view.interaction.mailbox.List', {
                 name: 'mb_reply',
                 displayField: 'name',
                 valueField: 'value',
-                editable: true,
+                editable: false,
+                clearable: true,
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['name', 'value'],
                     data: [['已回复', 3], ['未回复', 0]]
@@ -74,7 +75,8 @@ Ext.define('school.view.interaction.mailbox.List', {
                 name: 'mb_ignore',
                 displayField: 'name',
                 valueField: 'value',
-                editable: true,
+                editable: false,
+                clearable: true,
                 value: '0',
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['name', 'value'],

+ 7 - 6
frontend/pc-web/app/view/Interaction/notice/List.js

@@ -29,18 +29,19 @@ Ext.define('school.view.interaction.notice.List', {
                 fieldLabel: '发布状态',
                 displayField: 'name',
                 valueField: 'value',
-                editable: true,
+                editable: false,
+                clearable: true,
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['name', 'value'],
                     data: [['已发布', 1], ['未发布', 2]]
                 }),
                 minChars: 0,
                 queryMode: 'local'
-            // }, {
-            //     xtype: 'condatefield',
-            //     name: 'publish_date',
-            //     fieldLabel: '发布时间',
-            //     columnWidth: 0.5
+            }, {
+                xtype: 'condatefield',
+                name: 'publish_date',
+                fieldLabel: '发布时间',
+                columnWidth: 0.5
             }],
         
             gridConfig: {

+ 5 - 0
frontend/pc-web/app/view/Interaction/score/List.js

@@ -55,6 +55,11 @@ Ext.define('school.view.interaction.score.List', {
                 getCondition: function (value) {
                     return ' (sd_stu like\'%' + value + '%\') ';
                 }
+            }, {
+                xtype: 'condatefield',
+                name: 'si_examdate',
+                fieldLabel: '考试时间',
+                columnWidth: 0.5
             }],
 
             gridConfig: {

+ 91 - 16
frontend/pc-web/app/view/Interaction/timetable/Detail.js

@@ -17,7 +17,10 @@ Ext.define('school.view.interaction.timetable.Detail', {
 
     START_TIME: Ext.Date.parse('08:00', 'H:i'), // 开始上课时间
     END_TIME: Ext.Date.parse('22:00', 'H:i'), // 结束上课时间
-    MIN_WHILE: 10, // 一节课最小时间(分钟)
+    MIN_MIN_WHILE: 5, // 最小一节课时间(分钟)
+    CLASS_TIME: 30, // 一节课时间(分钟)
+    MIN_BREAK_TIME: 5, // 最小课间休息时间(分钟)
+    BREAK_TIME: 5, // 课间休息时间(分钟)
 
 
     initComponent: function () {
@@ -164,8 +167,9 @@ Ext.define('school.view.interaction.timetable.Detail', {
                 deleteDetailUrl: '/api/school/curriculum/deleteDetail',
                 allowEmpty: true,
                 showCount: false,
-                emptyRows: 10,
+                emptyRows: 8,
                 rowViewModel: {},
+                minHeight: 350,
                 columns: [{
                     text: 'id',
                     dataIndex: 'id',
@@ -186,7 +190,6 @@ Ext.define('school.view.interaction.timetable.Detail', {
                         },
                         items: [{
                             xtype: 'button',
-                            text: '0:00',
                             bind: {
                                 text: '{record._timeText1}',
                             },
@@ -197,7 +200,21 @@ Ext.define('school.view.interaction.timetable.Detail', {
                                 padding: 0
                             },
                             handler: function(btn) {
-                                me.currentRecord = btn.ownerCt.$widgetRecord;
+                                let record = btn.ownerCt.$widgetRecord;
+                                let store = record.store;
+                                let idx = record.get('lessons') - 2;
+                                let preRecord, preDate;
+
+                                if(idx > -1) {
+                                    preRecord = store.getAt(idx);
+                                    preDate = preRecord.get('_time2');
+
+                                    if(!!preDate && Ext.Date.format(preDate, 'H:i') != '00:00') {
+                                        record.set('startTime', Ext.Date.format(Ext.Date.add(preDate, Ext.Date.MINUTE, me.BREAK_TIME), 'H:i:s'));
+                                    }
+                                }
+                                
+                                me.currentRecord = record;
                             },
                             menu: {
                                 xtype: 'menu',
@@ -207,18 +224,46 @@ Ext.define('school.view.interaction.timetable.Detail', {
                                     maxHeight: 300,
                                     increment: 5,
                                     format: 'H:i',
-                                    minValue: Ext.Date.parse('08:00', 'H:i'),
-                                    maxValue: Ext.Date.parse('22:00', 'H:i'),
+                                    minValue: me.START_TIME,
+                                    maxValue: me.END_TIME,
                                     listeners: {
                                         select: function(model, record, index, eOpts) {
                                             me.onSelectPeriod0(this, this.up(), record);
                                         },
                                     }
-                                }]
+                                }],
+                                listeners: {
+                                    beforeshow: function(th, eOpts) {
+                                        let record = th.ownerCmp.ownerCt.$widgetRecord
+                                        let picker = th.down('timepicker');
+                                        let store = th.ownerCmp.ownerCt.$widgetRecord.store;
+                                        let idx = record.get('lessons') - 2;
+                                        let preRecord, preDate, minValue;
+                                        
+                                        me.currentRecord = record;
+
+                                        if(idx > -1) {
+                                            preRecord = store.getAt(idx);
+                                            preDate = preRecord.get('_time2');
+                                            if(Ext.Date.format(preDate, 'H:i') == '00:00') {
+                                                school.util.BaseUtil.showErrorToast('请先完成上一课时设置');
+                                                return false;
+                                            }
+                                            if(Ext.Date.format(preDate, 'H:i') == '22:00') {
+                                                school.util.BaseUtil.showErrorToast('已无可用课时(08:00~22:00)');
+                                                return false;
+                                            }
+                                            minValue = Ext.Date.add(preDate, Ext.Date.MINUTE, me.BREAK_TIME);
+                                        }else {
+                                            minValue = Ext.Date.parse('08:00', 'H:i');
+                                        }
+
+                                        picker.setMinValue(minValue)
+                                    },
+                                }
                             },
                         }, {
                             xtype: 'button',
-                            text: '0:00',
                             bind: {
                                 text: '{record._timeText2}',
                             },
@@ -228,16 +273,26 @@ Ext.define('school.view.interaction.timetable.Detail', {
                                 width: '74px',
                                 padding: 0
                             },
+                            handler: function(btn) {
+                                let record = btn.ownerCt.$widgetRecord;
+                                let startDate = record.get('_time1');
+                                
+                                if(Ext.Date.format(startDate, 'H:i') != '00:00') {
+                                    record.set('endTime', Ext.Date.format(Ext.Date.add(startDate, Ext.Date.MINUTE, me.CLASS_TIME), 'H:i:s'));
+                                }
+
+                                me.currentRecord = record;
+                            },
                             menu: {
                                 xtype: 'menu',
                                 plain: true,
                                 items: [{
                                     xtype: 'timepicker',
                                     maxHeight: 300,
-                                    increment: 10,
+                                    increment: 5,
                                     format: 'H:i',
-                                    minValue: Ext.Date.parse('08:00', 'H:i'),
-                                    maxValue: Ext.Date.parse('22:00', 'H:i'),
+                                    minValue: me.START_TIME,
+                                    maxValue: me.END_TIME,
                                     listeners: {
                                         select: function(model, record, index, eOpts) {
                                             me.onSelectPeriod1(this, this.up(), record);
@@ -246,10 +301,18 @@ Ext.define('school.view.interaction.timetable.Detail', {
                                 }],
                                 listeners: {
                                     beforeshow: function(th, eOpts) {
-                                        me.currentRecord = th.ownerCmp.ownerCt.$widgetRecord;
+                                        let record = th.ownerCmp.ownerCt.$widgetRecord;
                                         let picker = th.down('timepicker');
-                                        let startDate = me.currentRecord.get('_time1') || Ext.Date.parse('08:00', 'H:i');
-                                        let minValue = Ext.Date.add(startDate, Ext.Date.MINUTE, me.MIN_WHILE);
+
+                                        if(Ext.Date.format(record.get('_time1'), 'H:i') == '00:00') {
+                                            school.util.BaseUtil.showErrorToast('请先设置开始时间');
+                                            return false;
+                                        }
+
+                                        let startDate = record.get('_time1') || Ext.Date.parse('08:00', 'H:i');
+                                        let minValue = Ext.Date.add(startDate, Ext.Date.MINUTE, me.MIN_MIN_WHILE);
+                                        me.currentRecord = record;
+
                                         picker.setMinValue(minValue)
                                     },
                                 }
@@ -294,15 +357,27 @@ Ext.define('school.view.interaction.timetable.Detail', {
 
     onSelectPeriod0: function(picker, menu, record) {
         let me = this;
-        me.currentRecord.set('startTime', Ext.Date.format(record.get('date'), 'H:i:s'));
+        let cRecord = me.currentRecord;
+        let store = cRecord.store,
+        preIdx = cRecord.get('lessons') - 2, preRecord;
+
+        cRecord.set('startTime', Ext.Date.format(record.get('date'), 'H:i:s'));
         menu.setVisible(false);
+
+        if(preIdx > -1) {
+            preRecord = store.getAt(preIdx);
+            if(!!preRecord) {
+                let breakTime = Math.abs(Ext.Date.diff(cRecord.get('_time1'), preRecord.get('_time2'), Ext.Date.MINUTE));
+                me.BREAK_TIME = breakTime;
+            }
+        }
     },
 
     onSelectPeriod1: function(picker, menu, record) {
         let me = this;
         me.currentRecord.set('endTime', Ext.Date.format(record.get('date'), 'H:i:s'));
         menu.setVisible(false);
-        let classTime = Math.abs(Ext.Date.diff(me.currentRecord.get('_time1'), record.get('date'), Ext.Date.MINUTE));
+        let classTime = Math.abs(Ext.Date.diff(me.currentRecord.get('_time1'), me.currentRecord.get('_time2'), Ext.Date.MINUTE));
         me.CLASS_TIME = classTime;
     },
 

+ 2 - 0
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -89,6 +89,8 @@ Ext.define('school.view.interaction.timetable.List', {
                 queryModel: 'local',
                 displayField: 'value',
                 valueField: 'value',
+                editable: false,
+                clearable: true,
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['value'],
                     data: [['第一学期'], ['第二学期']]

+ 2 - 10
frontend/pc-web/app/view/basic/subject/List.js

@@ -59,18 +59,10 @@ Ext.define('school.view.basic.subject.List', {
                     align: 'center',
                     items: [{
                         tooltip: '编辑',
-                        iconCls: 'x-fa fa-pencil fa-fw',
-                        scope:this,
-                        listeners: {
-                            click: function() {
-                                debugger;
-                            }
-                        }
+                        iconCls: 'x-fa fa-pencil fa-fw'
                     },{
-                        text:'删除',
                         iconCls:'x-fa fa-trash-o fa-fw',
-                        tooltip: '删除',
-                        scope:this
+                        tooltip: '删除'
                     }],
                     listeners: {
                         click: 'onActionClick'

+ 13 - 5
frontend/pc-web/app/view/core/form/field/DetailGridField.js

@@ -38,8 +38,8 @@ Ext.define('school.view.core.form.field.DetailGridField', {
 
         addRows = function(id) {
             var grid = Ext.getCmp(id);
-            if(grid.editable && !grid.readOnly) {
-                grid.addDetail(0);
+            if(grid.editable && !grid.readOnly && grid.fireEvent('beforeAddRow', grid, 0, null, null) != false) {
+                grid.addDetail(0, null, null);
             }
         };
 
@@ -119,7 +119,9 @@ Ext.define('school.view.core.form.field.DetailGridField', {
                     if(target.classList.contains('fa-minus')) {
                         me.deleteDetail(detno);
                     }else if(target.classList.contains('fa-plus')) {
-                        me.addDetail(detno);
+                        if(me.fireEvent('beforeAddRow', me, detno, null, record) != false) {
+                            me.addDetail(detno, null, record);
+                        }
                     }
                 },
                 scope: me
@@ -227,7 +229,12 @@ Ext.define('school.view.core.form.field.DetailGridField', {
         store.insert(store.indexOf(selectedRecord) + 1, datas);
     },
 
-    addDetail: function(v, d) {
+    /**
+     * v: 上一条记录的detno值
+     * d: 可设置的新增初始值
+     * r: 上一条记录的record
+     */
+    addDetail: function(v, d, lr) {
         var me = this;
         if(!me.editable || me.readOnly) {
             return;
@@ -248,7 +255,7 @@ Ext.define('school.view.core.form.field.DetailGridField', {
 
         var data = d || Ext.clone(me.defaultRecord);
         data[detnoColumn] = v + 1;
-        var r = store.insert(store.indexOf(selectedRecord) + 1, data);
+        var r = store.insert(store.indexOf(selectedRecord) + 1, data)[0];
 
         store.each(function(s) {
             var itemFields = s.fields,
@@ -270,6 +277,7 @@ Ext.define('school.view.core.form.field.DetailGridField', {
             }
         });
 
+        me.fireEvent('afterAddRow', me, r, lr);
         me.fireEvent('validChange');
         return r;
     },

+ 37 - 0
frontend/pc-web/overrides/form/field/ComboBox.js

@@ -0,0 +1,37 @@
+Ext.define("school.override.form.field.ComboBox", {
+    override: "Ext.form.field.ComboBox",
+    
+    clearable: false,
+
+    config: {
+        triggers: {
+            clear: {
+                weight: -1,
+                cls: 'fa-times',
+                hidden: true,
+                onFieldFocus: function() {
+                    if(this.field.clearable) {
+                        this.setHidden(false);
+                    }
+                },
+                onFieldBlur: function() {
+                    if(this.field.clearable) {
+                        this.setHidden(true);
+                    }
+                },
+                handler: function() {
+                    if(this.clearable) {
+                        this.setValue(null)
+                        this.triggers.clear.setHidden(true)
+                    }
+                }
+            },
+            picker: {
+                handler: 'onTriggerClick',
+                scope: 'this',
+                focusOnMousedown: true
+            }
+        }
+    },
+
+});