/** * form配置的grid 相当于form组件 可自定义数据 */ Ext.define('erp.view.core.grid.ItemGrid',{ extend: 'Ext.grid.Panel', alias: 'widget.itemgrid', region: 'south', layout : 'fit', // id: 'grid1', // height:200, emptyText : $I18N.common.grid.emptyText, columnLines : true, autoScroll : true, store: [], columns: [], readOnly : true, GridUtil: Ext.create('erp.util.GridUtil'), // plugins: Ext.create('Ext.grid.plugin.CellEditing', { // // clicksToEdit: 1 // }), initComponent : function(){ var me = this; var logic = this.logic; var value = this.value; me.caller = logic; me.readOnly = true; me.plugins = new Ext.create('Ext.grid.plugin.CellEditing',{ id : 'plugins_'+me.id, clicksToEdit: 1 }); var objectArray = new Array(); if(this.iniValue!= null &&this.iniValue!= ''){ //解析 this.defaultValue 的数据 //this.defaultValue 的数据格式为 columnname1:cn11,cn12,cn13;columnname2:cn21,cn22,cn23 var defaultColumns = this.iniValue.split(';'); //得到[{columnname1:cn11,cn12,cn13},{columnname2:cn21,cn22,cn23}] var c = defaultColumns[0].split(':'); var vc = c[1].split(','); for(var i = 0; i < vc.length;i++){ var o = new Object(); objectArray.push(o); } Ext.each(defaultColumns,function(dColumn,index){ var dd = dColumn.split(':'); var vd = dd[1].split(','); Ext.each(objectArray,function(o,index){ o[dd[0]] = vd[index]; }); }); } var condition = "ig_mainid = '"+value+"'"; var gridParam = {caller: logic , condition: condition}; me.getGridColumnsAndStore(this, 'common/singleGridPanel.action', gridParam, objectArray);//从后台拿到gridpanel的配置及数据 this.callParent(arguments); }, //把初始化的数据初始化grid initGridData: function(grid, count, append, objectArray){ var store = grid.store, items = store.data.items, arr = new Array(); var detno = grid.detno; count = objectArray.length; append = append === undefined ? true : false; if(detno){ var index = items.length == 0 ? 0 : Number(store.last().get(detno)); for(var i=0;i < count;i++ ){ var o = new Object(); o[detno] = index + i + 1; arr.push(o); } } else { for(var i=0;i < count;i++ ){ var o = new Object(); arr.push(o); } } store.loadData(objectArray, append); var i = 0; store.each(function(item, x){ if(item.index) { i = item.index; } else { if (i) { item.index = i++; } else { item.index = x; } } }); }, getGridColumnsAndStore: function(grid, url, param, objectArray){ var me = this; grid.setLoading(true); Ext.Ajax.request({//拿到grid的columns url : basePath + url, params: param, async: (grid.sync ? false : true), method : 'post', callback : function(options,success,response){ grid.setLoading(false); var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return; } if(res.columns){ var limits = res.limits, limitArr = new Array(); if(limits != null && limits.length > 0) {//权限外字段 limitArr = Ext.Array.pluck(limits, 'lf_field'); } Ext.each(res.columns, function(column, y){ // column有取别名 if(column.dataIndex.indexOf(' ') > -1) { column.dataIndex = column.dataIndex.split(' ')[1]; } //power if(limitArr.length > 0 && Ext.Array.contains(limitArr, column.dataIndex)) { column.hidden = true; } //renderer me.GridUtil.setRenderer(grid, column); //logictype me.GridUtil.setLogicType(grid, column); }); //data var data = []; if(!res.data || res.data.length == 2){ if (grid.buffered) { me.GridUtil.add10EmptyData(grid.detno, data); me.GridUtil.add10EmptyData(grid.detno, data);//添加20条空白数据 } else { grid.on('reconfigure', function(){// 改为Grid加载后再添加空行,节约200~700ms me.initGridData(grid, 40, false,objectArray); }); } } else { data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')); } //store var store = me.GridUtil.setStore(grid, res.fields, data, grid.groupField, grid.necessaryField); //view if(grid.selModel && grid.selModel.views == null){ grid.selModel.views = []; } //dbfind if(res.dbfinds && res.dbfinds.length > 0){ grid.dbfinds = res.dbfinds; } //reconfigure if(grid.sync) {//同步加载的Grid grid.reconfigure(store, res.columns); grid.on('afterrender', function(){ me.GridUtil.setToolbar(grid, grid.columns, grid.necessaryField, limitArr); }); } else { //toolbar if (grid.generateSummaryData === undefined) {// 改为Grid加载后再添加合计,节约60ms me.GridUtil.setToolbar(grid, res.columns, grid.necessaryField, limitArr); } grid.reconfigure(store, res.columns); } if(grid.buffered) {//缓冲数据的Grid grid.verticalScroller = Ext.create('Ext.grid.PagingScroller', { activePrefetch: false, store: store }); store.guaranteeRange(0, store.pageSize - 1); } var form = Ext.ComponentQuery.query('form'); if(form && form.length > 0){ grid.readOnly = form[0].readOnly;//grid不可编辑 } } else { grid.hide(); var form = Ext.ComponentQuery.query('form')[0]; if(form) { if(form.items.items.length == 0) { form.on('afterload', function(){ me.GridUtil.updateFormPosition(form);//字段较少时,修改form布局 }); } else { me.GridUtil.updateFormPosition(form);//字段较少时,修改form布局 } } } } }); }, saveValue:function(){ var me = this; Ext.Ajax.request({//拿到grid的columns url : basePath + 'common/getSequenceId.action', params: { seqname:'itemgrid_main_seq', _token: me.id }, async: false, method : 'post', callback : function(options,success,response){ var res = Ext.decode(response.responseText); if(res.id){ me.value = res.id; Ext.each(me.store.data.items,function(item,index){ item.set('ig_mainid',res.id); }); var jsondata = me.GridUtil.getGridStore(me); Ext.Ajax.request({ url : basePath + 'common/saveItemGrid.action', params: { data:jsondata }, async: false, method:'post' }); } else if(res.exceptionInfo){ showError(res.exceptionInfo);return; } } }); }, updateValue:function(){ var me = this; var jsondata = me.GridUtil.getGridStore(me); Ext.Ajax.request({//拿到grid的columns url : basePath + 'common/updateItemGrid.action', params: { data:jsondata }, async: false, method : 'post' }); } });