Ext.QuickTips.init(); Ext.define('erp.controller.oa.custom.MultiForm', { extend: 'Ext.app.Controller', requires: ['erp.util.FormUtil', 'erp.util.GridUtil'], views:[ 'oa.custom.MultiForm','oa.custom.CustomGrid','ma.MyForm','ma.MyDetail','core.button.DeleteDetail','core.toolbar.Toolbar', 'core.trigger.DbfindTrigger','core.trigger.MultiDbfindTrigger','core.grid.TfColumn','core.grid.YnColumn', 'core.button.UUListener', 'core.button.DbfindButton','core.button.ComboButton', 'core.form.YnField', 'core.button.Sync' ], init:function(){ var me = this; me.FormUtil = Ext.create('erp.util.FormUtil'); me.GridUtil = Ext.create('erp.util.GridUtil'); this.control({ 'erpSyncButton': { afterrender: function(btn){ btn.autoClearCache = true; } }, 'multidbfindtrigger': { render: function(field){ if(field.name == 'fo_button4add' || field.name == 'fo_button4rw'){ var fields = Ext.Object.getKeys($I18N.common.button); var values = Ext.Object.getValues($I18N.common.button); var data = []; Ext.each(fields, function(f, index){ var o = {}; o.value = fields[index]; o.display = values[index]; data.push(o); }); field.multistore = {fields:['display', 'value'],data:data}; } } }, 'mygrid': { select: function(selModel, record){ this.GridUtil.onGridItemClick(selModel, record); var grid=Ext.getCmp('grid'); if(record&&record.data.fd_dbfind) grid.down('erpDbfindButton').setDisabled(false); else if(record && record.data.fd_type == 'C') grid.down('erpComboButton').setDisabled(false); else { grid.down('erpComboButton').setDisabled(true); grid.down('erpDbfindButton').setDisabled(true); } } }, 'mydetail': { select: function(selModel, record){ this.GridUtil.onGridItemClick(selModel, record, 'detail'); var grid=Ext.getCmp('detail'); if(record&&record.data.dg_dbbutton) grid.down('erpDbfindButton').setDisabled(false); else if(record && record.data.dg_type == 'combo') grid.down('erpComboButton').setDisabled(false); else { grid.down('erpComboButton').setDisabled(true); grid.down('erpDbfindButton').setDisabled(true); } } }, 'button[name=save]': { click: function(btn){ //序列号 Ext.getCmp('fo_seq').setValue(Ext.getCmp('fo_table').value.toUpperCase().split(' ')[0] + '_SEQ'); var dt = Ext.getCmp('fo_detailtable').value; if(dt != null && dt != ''){ Ext.getCmp('fo_detailseq').setValue(dt.toUpperCase().split(' ')[0] + '_SEQ'); /*var dm =Ext.getCmp('fo_detailmainkeyfield').value; if(dm == null || dm == ''){ showError("请选择从表与主表关联的字段!");return; }*/ } //TODO var grid = Ext.getCmp('grid'); var val = Ext.getCmp('fo_table').value.toUpperCase().split(' ')[0]; Ext.Array.each(grid.store.data.items, function(item){ if(item.data['fd_field'] != null && item.data['fd_field'] != ''){ if(item.data['fd_table'].toUpperCase() != val) { item.set('fd_table', val); } } }); //判断detailtable的主键字段是否加到了detailgrid里面 //me.insertKeyField(); //判断detailtable与主表关联的字段是否加到了detailgrid里面 //me.insertMainField(); me.save(); } }, 'erpDeleteDetailButton': { afterrender: function(btn){ btn.ownerCt.add({ xtype:'erpDbfindButton', }); btn.ownerCt.add({ xtype:'erpComboButton', }); } }, /** * 下拉框设置 */ 'erpComboButton': { click: function(btn){ var activeTab = btn.up('tabpanel').getActiveTab(); var record = activeTab.down('gridpanel').selModel.lastSelected; if(record) { if(activeTab.id == 'maintab'){ if(record.data.fd_type == 'C') { btn.comboSet(Ext.getCmp('fo_caller').value, record.data.fd_field); } } else { if(record.data.dg_type == 'combo') btn.comboSet(Ext.getCmp('fo_caller').value, record.data.dg_field); } } } }, /** * DBFind设置 */ 'erpDbfindButton': { click: function(btn){ var activeTab = btn.up('tabpanel').getActiveTab(); var record = activeTab.down('gridpanel').selModel.lastSelected; if(record) { if(activeTab.id == 'maintab'){ if(record.data.fd_dbfind) btn.dbfindSetUI(Ext.getCmp('fo_caller').value, record.data.fd_field); }else { if(record.data.dg_dbbutton) btn.dbfindSetGrid(Ext.getCmp('fo_caller').value, activeTab.down('gridpanel'), record.data.dg_field); } } } }, 'button[name=delete]': { click: function(btn){ me.FormUtil.onDelete(Ext.getCmp('fo_id').value); } }, 'button[name=close]': { click: function(btn){ me.FormUtil.beforeClose(me); } }, /*'textfield[name=fo_table]': { change: function(field){ var grid = Ext.getCmp('grid'); if(grid) { var val = field.value.toUpperCase().split(' ')[0]; Ext.Array.each(grid.store.data.items, function(item){ if(item.data['fd_field'] != null && item.data['fd_field'] != ''){ var t = item.data['fd_table']; if(val != t.toUpperCase()){ item.set('fd_table', val); } } }); } } },*/ 'textfield[name=fo_detailtable]': { change: function(field){ var grid = Ext.getCmp('detail'); if(grid) { var val = field.value.toUpperCase().split(' ')[0]; Ext.each(grid.store.items, function(){ var t = this.data['dg_table']; if(t != null && t != ''){ if(val != t.toUpperCase()){ this.set('dg_table', val); } } }); } } }, 'panel[id=detailtab]': { activate: function(){ // var dt = Ext.getCmp('fo_detailtable').value; // if(dt == null || dt == ''){ // showError("[主表]->[从表资料]->[明细表名]还未填写!"); // Ext.getCmp('mytab').setActiveTab(0); // } else { // //判断detailtable的主键字段是否加到了detailgrid里面 // me.insertKeyField(); // //判断detailtable与主表关联的字段是否加到了detailgrid里面 // me.insertMainField(); // } } }, 'button[name=preview]': { click: function(){ } }, 'erpCloseButton':{ beforerender:function(btn){ btn.handler= function(btn){ var win = parent.Ext.ComponentQuery.query('window'); if(win){ Ext.each(win, function(){ this.close(); }); } else { window.close(); } }; } } }); }, insertKeyField: function(){ var grid = Ext.getCmp('detail'); var field = Ext.getCmp('fo_detailkeyfield'); var count = 0; Ext.each(grid.store.data.items, function(){ var logic = this.data['dg_logictype']; var t = this.data['dg_field']; if(field.value.toUpperCase() == t.toUpperCase()){ this.set('dg_logictype', 'keyField'); logic = 'keyField'; if(count >= 2){ if(this.data['dg_id'] == null || this.data['dg_id'] == ''){ grid.store.remove(this); } } } if(logic == 'keyField'){ count++; if(count < 2 && field.value.toUpperCase() != t.toUpperCase()){ this.set('dg_field', field.value); } if(count >= 2){ if(this.data['dg_id'] == null || this.data['dg_id'] == ''){ grid.store.remove(this); } } } }); if(count == 0){ grid.store.add({ dg_sequence: grid.store.data.items[grid.store.data.length-1].data['dg_sequence'] + 1, dg_logictype: 'keyField', dg_field: field.value, dg_caption: 'ID', dg_table: Ext.getCmp('fo_detailtable').value, dg_caller: Ext.getCmp('fo_caller').value, dg_width: 0, dg_visible: '0', dg_type: 'numbercolumn', dg_editable: '0', dg_dbbutton: '0' }); } else if(count > 1){ showError("您的从表中有" + count + "个逻辑类型为[主键字段]的字段,请仔细核查!"); } }, insertMainField: function(){ var grid = Ext.getCmp('detail'); var field = Ext.getCmp('fo_detailmainkeyfield'); var count = 0; Ext.each(grid.store.data.items, function(){ var logic = this.data['dg_logictype']; var t = this.data['dg_field']; if(field.value.toUpperCase() == t.toUpperCase()){ this.set('dg_logictype', 'mainField'); logic = 'mainField'; if(count >= 2){ if(this.data['dg_id'] == null || this.data['dg_id'] == ''){ grid.store.remove(this); } } } if(logic == 'mainField'){ count++; if(count < 2 && field.value.toUpperCase() != t.toUpperCase()){ this.set('dg_field', field.value); } if(count >= 2){ if(this.data['dg_id'] == null || this.data['dg_id'] == ''){ grid.store.remove(this); } } } }); if(count == 0){ grid.store.add({ dg_sequence: grid.store.data.items[grid.store.data.length-1].data['dg_sequence'] + 1, dg_logictype: 'mainField', dg_field: field.value, dg_caption: 'MainID', dg_table: Ext.getCmp('fo_detailtable').value, dg_caller: Ext.getCmp('fo_caller').value, dg_width: 0, dg_visible: '0', dg_type: 'text', dg_editable: '0', dg_dbbutton: '0' }); } else if(count > 1){ showError("您的从表中有" + count + "个逻辑类型为[关联主表字段]的字段,请仔细核查!"); } }, createPreForm: function(){ var form = Ext.create('Ext.form.Panel', { }); }, createPreGrid: function(){ }, createFormItem: function(record){ }, save: function(){ var grid = Ext.getCmp('grid'), items = grid.store.data.items; var field = Ext.getCmp('fo_table'),val = field.value.split(' ')[0]; Ext.Array.each(items, function(item){ if(item.data['fd_field'] != null && item.data['fd_field'] != '' && Ext.isEmpty('fd_table')){ item.set('fd_table', val); } }); var detail = Ext.getCmp('detail'),records = detail.store.data.items; field = Ext.getCmp('fo_detailtable'),val = field.value.split(' ')[0]; Ext.Array.each(records, function(item){ if(item.data['dg_field'] != null && item.data['dg_field'] != '' && Ext.isEmpty('dg_table')){ item.set('dg_table', val); } }); var me = this; if(! me.FormUtil.checkForm()){ return; } if(!Ext.getCmp('fo_flowcaller').value){ Ext.getCmp('fo_flowcaller').setValue(Ext.getCmp('fo_caller').value); } var dd = grid.getChange(),de = detail.getChange(); var form=Ext.getCmp('form'); if(Ext.getCmp('fo_id').value){ me.FormUtil.update(form.getValues(), Ext.encode(dd.added), Ext.encode(dd.updated), Ext.encode(dd.deleted), Ext.encode(de.added), Ext.encode(de.updated), Ext.encode(de.deleted)); }else { me.FormUtil.getSeqId(form); //从表更新相应的dg_caller var adddetail=de.added; Ext.Array.each(adddetail,function(d){ if(!d['dg_caller']){ d.set('dg_caller',Ext.getCmp('fo_caller').value); } }); me.FormUtil.save(form.getValues(),Ext.encode(dd.added), Ext.encode(adddetail)); } } });