/** * 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.callParent(arguments); if(me.clearable) { me.trigger2Cls = 'x-form-clear-trigger'; if(!me.onTrigger2Click) { me.onTrigger2Click = function(){ this.setValue(null); }; } } }, onTriggerClick: function() { this.setFieldStyle('background:#C6E2FF;'); 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=" + dbfind + "&dbGridCondition=" + dbGridCondition + "&dbCondition=" + dbCondition + "&dbBaseCondition=" + dbBaseCondition + "&keyValue=&caller=" + caller + "&trigger=" + trigger.id; } }, createWin: function() { var trigger = this; this.win = Ext.create('Ext.Window', { title: '查找', height: "100%", width: "80%", maximizable : true, buttonAlign : 'center', layout : 'anchor', items: [], dbtriggr: trigger, closeAction: 'hide', buttons : [{ text : '确 认', iconCls: 'x-button-icon-save', id:'mutidbaffirm', cls: 'x-btn-gray', handler : function(){ trigger.onConfirm(); } },{ text : '关 闭', iconCls: 'x-button-icon-close', cls: 'x-btn-gray', handler : function(btn){ btn.ownerCt.ownerCt.close(); } }] }); return this.win; }, showButtons: function() { var value = this.value, dbwin = this.win; dbwin.add({ id: 'multigrid', xtype: 'gridpanel', height: '100%', autoScroll: true, columnLines : true, columns: [{ header: 'Button', dataIndex: 'display' , flex: 1 }, { header: 'name', dataIndex: 'value', flex: 1 }], store: this.multistore, selModel: Ext.create('Ext.selection.CheckboxModel',{ ignoreRightMouseSelection : false, listeners:{ selectionchange:function(selectionModel, selected, options){ } }, onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法 view.el.focus(); var me = Ext.getCmp('multigrid'); var checkbox = item.childNodes[0].childNodes[0].childNodes[0]; if(contains(value, record.data['value'], true)){ me.selModel.deselect(record); me.multiselected = me.multiselected.replace('#' + record.data['value'], ''); value = value.replace(record.data['value'], ''); 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 = me.multiselected + '#' + record.data['value']; } else { me.multiselected = me.multiselected.replace('#' + record.data['value'], ''); checkbox.setAttribute('class','x-grid-row-checker'); } } } }), listeners: { afterrender: function(){ var me = this; var selected = new Array(); me.multiselected = ''; Ext.each(me.store.data.items, function(){ if(contains(value, this.data['value'], true)){ selected.push(this); me.multiselected = me.multiselected + '#' + this.data['value']; } }); me.selModel.select(selected); } } }); }, onConfirm: function() { var trigger = this; if(trigger.multistore){ var me = Ext.getCmp('multigrid'); trigger.setValue(me.multiselected.substring(1)); 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 // var record = grid.selModel.lastSelected; Ext.each(trigger.multiValue, function(item, index){ if(index > 0){ record = trigger.next(grid, record); } if(record) { if(item && item.data){ Ext.Array.each(Ext.Object.getKeys(item.data), 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.data[k]); } } }); }); } } }); } else { 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]); } trigger.fireEvent('aftertrigger', trigger, trigger.multiRecords); this.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); } } } } } });