/** * multi dbfind trigger * */ Ext.define('erp.view.core.trigger.MultiDbfindTrigger', { extend: 'Ext.form.field.Trigger', alias: 'widget.multidbfindtrigger', triggerCls: 'x-form-search-trigger', initComponent: function() { var me = this; me.addEvents({ aftertrigger: true, beforetrigger: true }); me.callParent(arguments); if(me.clearable) { me.trigger2Cls = 'x-form-clear-trigger'; if(!me.onTrigger2Click) { me.onTrigger2Click = function(){ this.setValue(null); }; } } }, onTriggerClick: function() { var trigger = this; this.setFieldStyle('background:#C6E2FF;'); this.fireEvent('beforetrigger', trigger); var trigger = this,// 放大镜所在 key = this.name,// name属性 dbfind = '',// 需要dbfind的表和字段 dbBaseCondition = '', dbCondition = '', dbGridCondition = '', dbKey = this.dbKey, mappingKey = this.mappingKey, mappinggirdKey = this.mappinggirdKey, gridKey = this.gridKey, gridErrorMessage = this.gridErrorMessage; window.onTriggerClick = this.id; // 存在查询条件的字段 if(dbKey){ var dbKeyValue = Ext.getCmp(dbKey).value; if(dbKeyValue){ dbCondition = mappingKey + " IS '" + dbKeyValue + "'"; } else { showError(this.dbMessage); return; } } if(gridKey){ var gridKeys = gridKey.split('|'); var mappinggirdKeys; var gridErrorMessages; if(mappinggirdKey){ mappinggirdKeys = mappinggirdKey.split('|'); gridErrorMessages = this.gridErrorMessage.split('|'); } for(var i=0;i' }); iframe = dbwin.getEl().down('iframe'); } iframe.dom.src = basePath + 'jsps/common/multidbfind.jsp?key=' + key + "&dbfind=" + encodeURIComponent(dbfind) + "&dbGridCondition=" + encodeURIComponent(dbGridCondition) + "&dbCondition=" + encodeURIComponent(dbCondition) + "&dbBaseCondition=" + encodeURIComponent(dbBaseCondition) + "&keyValue=&caller=" + caller +"&_config="+_config+ "&trigger=" + trigger.id; } }, createWin: function() { var trigger = this; this.win = Ext.create('Ext.Window', { title: '查找', height: "100%", width: "80%", maximizable : true, buttonAlign : 'left', layout : 'anchor', items: [], dbtriggr: trigger, closeAction: 'hide', buttons : [{ xtype:'panel', width:150, height:25, border:false, bodyStyle:'background-color:#e8e8e8', items:[{ boxLabel : '只显示已选中数据', xtype:'checkbox', style:'margin-left:10px;', align:'left', hidden:true, width:140, id:'onlyChecked', listeners:{ change:function( f, newValue, oldValue, eOpts ){ var win = trigger.win; var findgrid = win.getEl().down('iframe').dom.contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');//所有 var resgrid = win.getEl().down('iframe').dom.contentWindow.document.defaultView.Ext.getCmp('dbfindresultgrid');//选中 if(newValue){ findgrid.hide(); var datachecked=new Array(); Ext.each(Ext.Object.getKeys(resgrid.selectObject),function(k){ datachecked.push(resgrid.selectObject[k]); }); resgrid.selectAll=false; resgrid.store.loadData(datachecked); resgrid.selModel.selectAll(); resgrid.show(); }else{ findgrid.show(); findgrid.selectAll=false; findgrid.selModel.deselectAll(); findgrid.selectDefaultRecord(); resgrid.hide(); } } } }] },'->',{ text : '确 认', iconCls: 'x-button-icon-save', id:'mutidbaffirm', cls: 'x-btn-gray', handler : function(){ trigger.onConfirm(); } },{ text : '按条件全选', iconCls: 'x-button-icon-save', cls: 'x-btn-gray', handler : function(){ trigger.onConfirm(true); } },{ text : '关 闭', iconCls: 'x-button-icon-close', cls: 'x-btn-gray', style:'margin-right:140px', handler : function(btn){ btn.ownerCt.ownerCt.close(); } } ,'->' ] }); return this.win; }, showButtons: function() { var value = this.value, dbwin = this.win, grid = dbwin.down('gridpanel'); if (grid) { grid.store.loadData(this.multistore); } else { grid = dbwin.add({ xtype: 'gridpanel', height: '100%', autoScroll: true, columnLines : true, columns: [{ text: '描述', dataIndex: 'display' , flex: 1, filter: { xtype: 'textfield' } }, { text: '代码', dataIndex: 'value', flex: 1, filter: { xtype: 'textfield' } }], store: this.multistore, plugins: [Ext.create('erp.view.core.grid.HeaderFilter', { ignoreCase: true })], selModel: Ext.create('Ext.selection.CheckboxModel',{ ignoreRightMouseSelection : false, listeners:{ selectionchange:function(selectionModel, selected, options){ if(selected.length==0&&selectionModel.store.data.length>0){//取消全选 Ext.each(selectionModel.store.data.items,function(item){ Ext.Array.remove(grid.multiselected, item.data.value); }); }else{ Ext.each(selected,function(s){ grid.multiselected.push(s.data.value); }); } grid.multiselected=Ext.Array.unique(grid.multiselected); } }, onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法 view.el.focus(); var me = view.ownerCt, val = record.get('value'); var checkbox = item.childNodes[0].childNodes[0].childNodes[0]; if(contains(value, val, true)){ me.selModel.deselect(record); Ext.Array.remove(me.multiselected, val); checkbox.setAttribute('class','x-grid-row-checker'); } else { if(checkbox.getAttribute('class') == 'x-grid-row-checker'){ checkbox.setAttribute('class','x-grid-row-checker-checked');//只是修改了其样式,并没有将record加到selModel里面 me.multiselected.push(val); } else { Ext.Array.remove(me.multiselected, val); checkbox.setAttribute('class','x-grid-row-checker'); } } } }) }); grid.store.on('datachanged', function(){ var selected = new Array(); grid.store.each(function(){ if(Ext.Array.contains(grid.multiselected, this.get('value'))){ selected.push(this); } }); grid.selModel.select(selected); }); } var selected = new Array(); grid.multiselected = Ext.isEmpty(value) ? [] : value.split('#'); grid.store.each(function(){ if(contains(value, this.data['value'], true)){ selected.push(this); } }); grid.selModel.select(selected); }, onConfirm: function(selectAll) { var trigger = this; if(trigger.multistore){ var grid = this.win.down('gridpanel'); if(selectAll&&grid.store.data.length>0){//按条件全选 Ext.each(grid.store.data.items,function(item){ grid.multiselected.push(item.data.value); }); } grid.multiselected=Ext.Array.unique(grid.multiselected); trigger.setValue(grid.multiselected.join('#')); this.win.close(); } else { if(!trigger.ownerCt){ var grid = trigger.owner; var record = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] || grid.selModel.lastSelected;//detailgrid里面selected if(selectAll) { trigger.getAllData(trigger, grid, record); } else { var win = trigger.win; var findgrid = win.getEl().down('iframe').dom.contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');//所有 findgrid.setMultiValues(); Ext.each(trigger.multiValue, function(item, index){ if(index > 0){ record = trigger.next(grid, record); } if(record) { if(item){ Ext.Array.each(Ext.Object.getKeys(item), function(k){ Ext.Array.each(grid.dbfinds,function(ds){ if(Ext.isEmpty(ds.trigger) || ds.trigger == trigger.name) { if(Ext.Array.contains(ds.dbGridField.split(';'), k)) { record.set(ds.field, item[k]); } } }); }); } } }); } } else { var win = trigger.win; var findgrid = win.getEl().down('iframe').dom.contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');//所有 findgrid.setMultiValues(); var k = Ext.Object.getKeys(trigger.multiValue),cp; Ext.each(k, function(key){ cp = Ext.getCmp(key); if(cp.setValue !== undefined) cp.setValue(trigger.multiValue[key]); }); trigger.setValue(trigger.multiValue[trigger.name]); } if(!selectAll) { trigger.fireEvent('aftertrigger', trigger, trigger.multiRecords); this.win.close(); } } }, /** * 全选模式下,取全部满足条件的数据 */ getAllData: function(trigger, grid, record) { var win = this.win, g = win.getEl().down('iframe').dom.contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel'); g.setLoading(true); g.getAllData(function(datas){ if(datas) { Ext.each(datas, function(item, index){ if(index > 0){ record = trigger.next(grid, record); } if(record) { Ext.Array.each(Ext.Object.getKeys(item), function(k){ Ext.Array.each(grid.dbfinds, function(ds){ if(Ext.isEmpty(ds.trigger) || ds.trigger == trigger.name) { if(Ext.Array.contains(ds.dbGridField.split(';'), k)) { record.set(ds.field, item[k]); } } }); }); } }); } g.setLoading(false); trigger.fireEvent('aftertrigger', trigger, datas); win.close(); }); }, /** * 递归grid的下一条 */ next: function(grid, record){ record = record || grid.selModel.lastSelected; if(record){ //递归查找下一条,并取到数据 var store = grid.store, idx = store.indexOf(record), d = store.getAt(idx + 1), len = store.data.items.length; if(d){ return d; } else { if(idx + 1 < len){ this.next(grid, d); } else { if (grid.GridUtil) { grid.GridUtil.add10EmptyItems(grid); return this.next(grid, record); } } } } } });