Ext.define('school.view.interaction.timetable.Detail', { extend: 'school.view.core.form.FormPanel', xtype: 'interaction-timetable-detail', controller: 'interaction-timetable-detail', _title: '课程表', _idField: 'id', _codeField: null, // _readUrl: 'http://10.1.80.47:9520/api/school/curriculum/read', _readUrl: '/api/school/curriculum/read', // _saveUrl: 'http://10.1.80.47:9520/api/school/curriculum/save', _saveUrl: '/api/school/curriculum/save', _deleteUrl: '/api/school/curriculum/delete', initId: 0, cls: 'timetable', START_TIME: Ext.Date.parse('08:00', 'H:i'), // 开始上课时间 END_TIME: Ext.Date.parse('22:00', 'H:i'), // 结束上课时间 MIN_MIN_WHILE: 5, // 最小一节课时间(分钟) CLASS_TIME: 30, // 一节课时间(分钟) MIN_BREAK_TIME: 5, // 最小课间休息时间(分钟) BREAK_TIME: 5, // 课间休息时间(分钟) initComponent: function () { let me = this; Ext.apply(this, { defaultItems: [{ xtype: 'hidden', name: 'id', fieldLabel: 'id' }, { xtype: 'textfield', name: 'name', fieldLabel: '课表名称' }, { xtype: 'numberfield', name: 'gradeId', fieldLabel: '年级ID', hidden: true }, { xtype: 'gradecombo', name: 'gradeName', fieldLabel: '年级', allowBlank: false, listeners: { select: function (combo, record, eOpts) { combo.up('form').getForm().findField('gradeId').setValue(record.get('grade_id')); combo.up('form').getForm().findField('clazzId').setValue(null); combo.up('form').getForm().findField('clazzName').setValue(null); } } }, { xtype: 'numberfield', name: 'clazzId', fieldLabel: '班级ID', hidden: true }, { xtype: 'classcombo', name: 'clazzName', fieldLabel: '班级', allowBlank: false, listeners: { expand: function (combo, eOpts) { combo.store.clearFilter(); var gradeCombo = combo.up('form').getForm().findField('gradeName'); var gradeName = gradeCombo.getValue(); var filter = new Ext.util.Filter({ property: 'clazz_grade', value: gradeName }); if (!!gradeName) { combo.store.setFilters([filter]); } }, select: function (combo, record, eOpts) { combo.up('form').getForm().findField('clazzId').setValue(record.get('clazz_id')); combo.up('form').getForm().findField('gradeId').setValue(record.get('grade_id')); combo.up('form').getForm().findField('gradeName').setValue(record.get('clazz_grade')); } } }, { xtype: 'combobox', name: 'termPart', fieldLabel: '学年', allowBlank: false, queryModel: 'local', displayField: 'value', valueField: 'value', store: Ext.create('Ext.data.ArrayStore', { fields: ['value'], data: (function() { let now = new Date(); let year = now.getFullYear(); let op = [], o1, o2; o1 = [(year - 1) + '-' + year]; o2 = [year + '-' + (year + 1)]; op.push(o1); op.push(o2); return op; })() }), defaultValue: (function() { let now = new Date(); let year = now.getFullYear(); let month = now.getMonth() + 1; let o1, o2; o1 = [(year - 1) + '-' + year]; o2 = [year + '-' + (year + 1)]; return (month < 9) ? o1[0] : o2[0] })() }, { xtype: "combobox", name: "termName", fieldLabel: "学期", allowBlank: false, queryModel: 'local', displayField: 'value', valueField: 'value', store: Ext.create('Ext.data.ArrayStore', { fields: ['value'], data: [['第一学期'], ['第二学期']] }), defaultValue: (function() { let now = new Date(); let month = now.getMonth() + 1; return (month < 9) ? '第一学期' : '第二学期' })() }, { xtype: "textfield", name: "creatorName", fieldLabel: "录入人", defaultValue: school.util.BaseUtil.getCurrentUser().username, readOnly: true }, { xtype: 'datefield', name: 'createTime', fieldLabel: '录入时间', format: 'Y-m-d H:i:s', defaultValue: new Date(), readOnly: true }, { xtype: 'combobox', name: 'status', fieldLabel: '状态', displayField: 'name', valueField: 'value', editable: false, readOnly: true, minChars: 0, queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { fields: ['name', 'value'], data: [['已生效', '1'], ['未生效', '0']] }), defaultValue: 0 }, { name: "timetable", xtype: "detailGridField", idColumn: 'id', detnoColumn: 'lessons', storeModel: 'school.model.Timetable', deleteDetailUrl: '/api/school/curriculum/deleteDetail', allowEmpty: true, showCount: false, emptyRows: 8, rowViewModel: {}, minHeight: 350, columns: [{ text: 'id', dataIndex: 'id', hidden: true }, { text: '时间段', xtype: 'widgetcolumn', width: 200, padding: 0, hidden: true, tdCls: 'x-period-column', getBindField: function(c) { return ['startTime', 'endTime'] }, widget: { xtype: 'container', style: { textAlign: 'center' }, items: [{ xtype: 'button', bind: { text: '{record._timeText1}', }, style: { margin: '5px', height: '22px', width: '74px', padding: 0 }, handler: function(btn) { 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' && Ext.Date.add(preDate, Ext.Date.MINUTE, me.BREAK_TIME) <= Ext.Date.parse(Ext.Date.format(preDate, 'Y-m-d') + ' 22:00:00', 'Y-m-d H:i:s')) { 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', plain: true, items: [{ xtype: 'timepicker', maxHeight: 300, increment: 5, format: '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.add(preDate, Ext.Date.MINUTE, me.BREAK_TIME) >= Ext.Date.parse(Ext.Date.format(preDate, 'Y-m-d') + ' 22:00:00', 'Y-m-d H:i:s')) { school.util.BaseUtil.showErrorToast('可用课程时间不足(08:00~22:00)'); } minValue = Ext.Date.add(preDate, Ext.Date.MINUTE, me.MIN_BREAK_TIME); }else { minValue = Ext.Date.parse('08:00', 'H:i'); } picker.setMinValue(minValue) }, } }, }, { xtype: 'button', bind: { text: '{record._timeText2}', }, style: { margin: '5px', height: '22px', 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' && Ext.Date.add(startDate, Ext.Date.MINUTE, me.CLASS_TIME) <= Ext.Date.parse(Ext.Date.format(startDate, 'Y-m-d') + ' 22:00:00', 'Y-m-d H:i:s')) { 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: 5, format: 'H:i', minValue: me.START_TIME, maxValue: me.END_TIME, listeners: { select: function(model, record, index, eOpts) { me.onSelectPeriod1(this, this.up(), record); }, } }], listeners: { beforeshow: function(th, eOpts) { let record = th.ownerCmp.ownerCt.$widgetRecord; let picker = th.down('timepicker'); 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) }, } }, }] } }, { text: '星期一', dataIndex: 'mon', xtype: 'subjectcolumn' }, { text: '星期二', dataIndex: 'tues', xtype: 'subjectcolumn' }, { text: '星期三', dataIndex: 'wed', xtype: 'subjectcolumn' }, { text: '星期四', dataIndex: 'thur', xtype: 'subjectcolumn' }, { text: '星期五', dataIndex: 'fri', xtype: 'subjectcolumn' }, { text: '星期六', dataIndex: 'sat', xtype: 'subjectcolumn', hidden: true }, { text: '星期日', dataIndex: 'sunday', xtype: 'subjectcolumn', hidden: true }] }], // toolBtns: [{ // xtype: 'button', // text: '发布', // hidden: true, // bind: { // text: '{status == 1 ? "反启用" : "启用"}', // hidden: '{!id}' // }, // handler: 'onPublish' // }] }); this.callParent(); }, onSelectPeriod0: function(picker, menu, record) { let me = this; 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'), me.currentRecord.get('_time2'), Ext.Date.MINUTE)); me.CLASS_TIME = classTime; }, refresh: function() { Ext.StoreMgr.get('store_grade').load(); Ext.StoreMgr.get('store_class').load(); Ext.StoreMgr.get('store_subject').load(); } });