123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- /**
- * 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<gridKeys.length;i++){
- var gridkeyvalue = Ext.getCmp(gridKeys[i]).value;
-
- if(i==0){
- if(gridkeyvalue){
- dbGridCondition = mappinggirdKeys[i] + " IS '"+gridkeyvalue+"' ";
- }else{
- showError(gridErrorMessages[i]);
- return;
- }
- }else{
- if(gridkeyvalue){
- dbGridCondition =dbGridCondition+" AND "+ mappinggirdKeys[i] + " IS '"+gridkeyvalue+"' ";
- }else{
- showError(gridErrorMessages[i]);
- return;
- }
- }
- }
- }
- if(this.dbBaseCondition){
- dbBaseCondition = this.dbBaseCondition;
- }
- if(!trigger.ownerCt){// 如果是grid的dbfind
- var grid = Ext.ComponentQuery.query('gridpanel');
- Ext.Array.each(grid, function(g, index){
- Ext.Array.each(g.columns,function(column){
- if(column.dataIndex == key) {
- dbfind = column.dbfind;
- trigger.owner = g;
- }
- });
- });
- if(trigger.owner.editingPlugin.activeEditor.field.id == trigger.id) {
- trigger.record = trigger.owner.editingPlugin.activeRecord;
- } else {
- trigger.record = trigger.owner.selModel.lastSelected;
- }
- }else caller=caller||trigger.ownerCt.caller;
- var keyValue = this.value;// 当前值
- keyValue = keyValue == null ? '' : keyValue;
- var _config=getUrlParam('_config');
- var dbwin = this.createWin();
- dbwin.show();
- if(this.multistore){
- this.showButtons();
- } else {
- trigger.multiValue = new Object();
- var iframe = dbwin.getEl().down('iframe');
- if(!iframe) {
- dbwin.add({
- tag : 'iframe',
- frame : true,
- anchor : '100% 100%',
- layout : 'fit',
- html : '<iframe src="#" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
- });
- 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 : '<span style="font-size:13px;font-weight:bold;">只显示已选中数据</span>',
- 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);
- }
- }
- }
- }
- }
- });
|