DbfindTrigger.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. /**
  2. * dbfind trigger
  3. * 支持带条件dbfind
  4. */
  5. Ext.define('erp.view.core.trigger.DbfindTrigger', {
  6. extend: 'Ext.form.ComboBox',
  7. alias: 'widget.dbfindtrigger',
  8. triggerCls: 'x-form-search-trigger',
  9. autoDbfind: true,
  10. autoShowTriggerWin:true,
  11. isCommonChange:false,
  12. triggerName:null,
  13. lastTriggerValue:null,
  14. /*displayField: 'name',*/
  15. searchField:'',
  16. searchTable:'',
  17. searchFieldArray:'',
  18. configSearchCondition:'1=1',
  19. ignoreMonitorTab:false,
  20. ifsearch:true,
  21. searchTpl:true,
  22. canblur : true,
  23. defaultListConfig:{
  24. maxHeight:210,
  25. autoScroll:true,
  26. minWidth:530
  27. },
  28. lastQueryValue:'',
  29. minChars:1, // 设置用户输入字符多少时触发查询
  30. tpl: '',
  31. /*enableKeyEvents:true,*/
  32. //输入值之后进行模糊查询
  33. doQuery: function(queryString, forceAll, rawQuery) {
  34. queryString = queryString || '';
  35. var me = this;
  36. me.fireEvent('beforetrigger', me);//同步触发放大镜前事件
  37. if(me.lastQueryValue!=queryString){
  38. var judge=me.judgeForm(me);
  39. var newtpl=[];
  40. var field=[];
  41. var sfield='';
  42. var dbfind='';
  43. var name=me.name;
  44. me.lastQueryValue=queryString;
  45. var dbCaller=me.dbCaller|| (typeof caller === 'undefined' ? '' : caller);
  46. if(dbCaller==''&&typeof(me.ownerCt)!== 'undefined'&&typeof(me.ownerCt.caller)!== 'undefined'){
  47. dbCaller=me.ownerCt.caller;//FORM
  48. }
  49. if (!me.ownerCt || me.column) {//GRID
  50. if(me.column.dataIndex == name){
  51. dbfind = me.column.dbfind;
  52. var config=dbfind.split("|");
  53. dbCaller=config[0];
  54. }
  55. }
  56. if(me.ifsearch){
  57. if(queryString.trim()==''){
  58. me.collapse( );
  59. }else{
  60. if((me.searchTable.trim()==""||me.searchField.trim()=="")&&!me.searchTpl){
  61. me.ifsearch=false;
  62. me.collapse( );
  63. }else{
  64. if(me.configSearchCondition!=null && me.configSearchCondition.trim()!=''){
  65. var res=me.getSearchData(me.searchTable,me.searchField,queryString,me.configSearchCondition,dbCaller,name,me,judge,me.searchTpl);
  66. }else{
  67. var res=me.getSearchData(me.searchTable,me.searchField,queryString,me.getCondition('1=1'),dbCaller,name,me,judge,me.searchTpl);
  68. }
  69. if(res.tpl!=null && res.tpl.trim()!=""){
  70. //加载tpl模板
  71. var data =Ext.decode(res.tpl.replace(/,}/g, '}').replace(/,]/g, ']'));
  72. newtpl=data;
  73. if(newtpl.length>0){
  74. var span="";
  75. var width=0;
  76. for(var i=0;i<newtpl.length;i++){
  77. if(i==0){
  78. span=span+'<span style="width:'+newtpl[i].width+'px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;float:left;">{'+newtpl[i].field+'}</span>';//display:block;
  79. }else{
  80. span=span+'<span style="width:'+newtpl[i].width+'px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;float:left;margin-left:10px;">{'+newtpl[i].field+'}</span>';
  81. }
  82. if(newtpl[i].dbField=="true"){
  83. me.searchFieldArray=newtpl[i].field;
  84. }
  85. width=width+newtpl[i].width+20;
  86. field.push(newtpl[i].field);
  87. sfield=sfield+newtpl[i].field+',';
  88. }
  89. me.defaultListConfig.minWidth=width+10;
  90. me.defaultListConfig.maxHeight=210;
  91. me.defaultListConfig.autoScroll=true;
  92. me.searchField=sfield.substring(0,sfield.length-1);
  93. me.tpl=Ext.create('Ext.XTemplate',
  94. '<ul style="padding-left: 0px;"><tpl for=".">',
  95. '<li role="option" class="x-boundlist-item" style="list-style:none;">' ,
  96. '<div style="height:20px;">',
  97. ''+span+'',
  98. '</li>',
  99. '</tpl></ul>'
  100. );
  101. me.store=Ext.create('Ext.data.Store', {
  102. fields: field,
  103. data : []
  104. });
  105. }else{
  106. me.ifsearch=false;
  107. }
  108. }
  109. var scondition=res.searchCondition;
  110. if(!me.configSearchCondition || me.configSearchCondition=='1=1'){
  111. if(scondition==null || scondition.trim()=='') scondition=null;
  112. me.configSearchCondition=me.getCondition(scondition);
  113. }
  114. if(res.searchtable!=null && res.searchtable.trim()!=''){
  115. me.searchTable=res.searchtable;
  116. }
  117. if(res.data!=null && res.data.trim()!=''){
  118. data =Ext.decode(res.data);
  119. if(data.length>0){
  120. me.store.loadData(data,false);
  121. me.expand();
  122. }else{
  123. me.collapse( );
  124. }
  125. }else{
  126. me.collapse( );
  127. }
  128. }
  129. }
  130. }else{
  131. return true;
  132. }
  133. return true;
  134. }else{
  135. return false;
  136. }
  137. },
  138. initComponent: function() {
  139. var me = this;
  140. me.addEvents({
  141. aftertrigger: true,
  142. beforetrigger: true
  143. });
  144. if(!me.ownerCt) {
  145. Ext.defer(function(){
  146. me.getOwner();
  147. }, 50);
  148. }
  149. this.displayField='display';
  150. this.valueField='value';
  151. this.queryMode='local';
  152. if(me.clearable) {
  153. me.trigger2Cls = 'x-form-clear-trigger';
  154. if(!me.onTrigger2Click) {
  155. me.onTrigger2Click = function(){
  156. this.setValue(null);
  157. };
  158. }
  159. }
  160. if(me.value){
  161. me.store=Ext.create('Ext.data.Store', {
  162. fields: ['display','value'],
  163. data : [{
  164. 'display':me.value,
  165. 'value':me.value
  166. }]
  167. });
  168. }
  169. me.displayTpl='<tpl for=".">' +
  170. '{[typeof values === "object" ? values["' + me.displayField + '"]:values]}' +
  171. '<tpl if="xindex < xcount">' + me.delimiter + '</tpl>' +
  172. '</tpl>';
  173. me.callParent(arguments);
  174. },
  175. getOwner: function() {
  176. var me = this;
  177. if (me.el) {
  178. var gridEl = me.el.up('.x-grid');
  179. if (gridEl) {
  180. var grid = Ext.getCmp(gridEl.id);
  181. if (grid) {
  182. me.owner = grid;
  183. me.column = grid.down('gridcolumn[dataIndex=' + me.name + ']');
  184. }
  185. }
  186. }
  187. },
  188. listeners: {
  189. select:function(combo,records,eOpts){
  190. var con ="";
  191. var which = 'form';
  192. var cal = combo.dbCaller||caller;
  193. var key = combo.triggerName||combo.name;
  194. if (!combo.ownerCt || combo.column) {
  195. which = 'grid';
  196. dbfind = combo.column.dbfind;
  197. cal = dbfind.split('|')[0];
  198. Ext.each(records,function(data){
  199. con = !Ext.isEmpty(data.data[Ext.util.Format.lowercase(combo.searchFieldArray)]) ? (combo.searchFieldArray + " = '" + data.data[Ext.util.Format.lowercase(combo.searchFieldArray)].replace(/\'/g,"''") + "'") : null;
  200. });
  201. }else{
  202. Ext.each(records,function(data){
  203. con = !Ext.isEmpty(data.data[Ext.util.Format.lowercase(combo.searchFieldArray)]) ? (combo.searchFieldArray + " = '" + data.data[Ext.util.Format.lowercase(combo.searchFieldArray)].replace(/\'/g,"''") + "'") : null;
  204. });
  205. }
  206. combo.setSelectValue(which, cal, key, combo.getCondition(con)); //光标移开后自动dbfind
  207. },
  208. focus: function(f) {
  209. var trigger = this;
  210. trigger.lastTriggerValue=trigger.value;
  211. trigger.lastQueryValue=trigger.value;//focus时 给lastTriggerValue和lastQueryValue赋值,autoSetValue后将lastTriggerValue和lastQueryValue清空,解决明细放大镜第一行联想后其他行联想无效
  212. trigger.lastTriggerId = trigger.id;
  213. if (!trigger.ownerCt || trigger.column) {
  214. if (!trigger.owner) {
  215. trigger.getOwner();
  216. }
  217. var owner = trigger.owner;
  218. if(owner.lockedGrid){
  219. owner = owner.lockedGrid;
  220. }
  221. if (owner.editingPlugin.activeEditor.field.id == trigger.id) {
  222. trigger.record = owner.editingPlugin.activeRecord;
  223. } else {
  224. trigger.record = owner.selModel.lastSelected;
  225. }
  226. var index = trigger.owner.store.indexOf(trigger.record);
  227. if (index != null) {
  228. trigger.lastTriggerId = trigger.id + '---' + index;
  229. } else {
  230. trigger.lastTriggerId = null;
  231. }
  232. }
  233. },
  234. blur: function(f) {
  235. if(f.canblur){
  236. this.triggerblur.apply(this, [f]);
  237. }
  238. }
  239. },
  240. triggerblur: function(f) {
  241. if (!f.readOnly) {
  242. if(this.lastTriggerId){
  243. var which = 'form';
  244. var cal = this.dbCaller||caller;
  245. var key = this.triggerName||this.name;
  246. var con = !Ext.isEmpty(this.lastValue) ? (key + " like '%" + this.lastValue.replace(/\'/g,"''") + "%'") : null;
  247. var currrecord = null;
  248. if (!this.ownerCt || this.column) {
  249. which = 'grid';
  250. dbfind = this.column.dbfind;
  251. cal = dbfind.split('|')[0];
  252. con = con ? (dbfind.split('|')[1] + " like '%" + this.lastValue.replace(/\'/g,"''") + "%'") : null;
  253. currrecord = this.owner.selModel.lastSelected;
  254. if (this.lastValue != null && this.lastValue != '') {
  255. var record = this.owner.store.getAt(this.lastTriggerId.split('---')[1]);
  256. this.owner.selModel.select(record);
  257. }
  258. }
  259. if((which=='form' && this.lastTriggerValue==this.lastValue) || (which=='grid' && this.record && (this.lastTriggerValue ==this.record.get(this.name) && this.lastTriggerValue==this.value )))
  260. return;
  261. if(!this.autoDbfind && f.lastValue){
  262. f.setValue(f.lastValue);
  263. }
  264. if (this.lastValue != null && this.lastValue != '' && this.lastTriggerId && !this.readOnly && this.autoDbfind) {
  265. if(false === f.fireEvent('beforetrigger', f))
  266. return;
  267. this.autoDbfind(which, cal, key, this.getCondition(con)); //光标移开后自动dbfind
  268. if (currrecord) {
  269. this.owner.selModel.select(currrecord);
  270. }
  271. }
  272. }
  273. if(!this.lastValue && (this.dbfinds || (this.owner && this.owner.dbfinds))){
  274. var dbfinds = this.dbfinds || this.owner.dbfinds;
  275. this.resetDbfindValue(dbfinds);
  276. }
  277. }
  278. },
  279. onTriggerClick: function() {
  280. var trigger = this,
  281. bool = true; // 放大镜所在
  282. bool = trigger.fireEvent('beforetrigger', trigger);
  283. dbCaller=this.dbCaller|| (typeof caller === 'undefined' ? '' : caller);
  284. if(dbCaller==''&&typeof(trigger.ownerCt)!== 'undefined'&&typeof(trigger.ownerCt.caller)!== 'undefined'){
  285. dbCaller=trigger.ownerCt.caller;
  286. }
  287. if (bool == false) {
  288. return;
  289. }
  290. this.setFieldStyle('background:#C6E2FF;');
  291. var key = this.triggerName||this.name,
  292. // name属性
  293. dbfind = '',
  294. // 需要dbfind的表和字段
  295. dbBaseCondition = '',
  296. dbCondition = '',
  297. dbGridCondition = '',
  298. findConfig = this.findConfig,
  299. dbKey = this.dbKey,
  300. mappingKey = this.mappingKey,
  301. gridKey = this.gridKey,
  302. mappinggirdKey = this.mappinggirdKey;
  303. window.onTriggerClick = this.id;
  304. // 存在查询条件的字段
  305. if (findConfig) {
  306. dbCondition = (typeof findConfig == 'function' ? findConfig.call(null) : findConfig);
  307. }
  308. if (dbKey) {
  309. var dbKeyValue ='';
  310. if(Ext.getCmp(dbKey)){
  311. dbKeyValue = Ext.getCmp(dbKey).value;
  312. }else if(trigger.ownerCt.xtype=="myform"){//mutilform中移除了id属性,无法通过id查找
  313. dbKeyValue=trigger.ownerCt.down("field[name='"+dbKey+"']").value;
  314. }
  315. //var dbKeyValue = Ext.getCmp(dbKey).value;
  316. if (dbKeyValue) {
  317. dbCondition = mappingKey + " IS '" + dbKeyValue + "'";
  318. } else {
  319. showError(this.dbMessage);
  320. return;
  321. }
  322. }
  323. if (gridKey) {
  324. var gridKeys = gridKey.split('|');
  325. var mappinggirdKeys = mappinggirdKey.split('|');
  326. var gridErrorMessages = this.gridErrorMessage.split('|');
  327. for (var i = 0; i < gridKeys.length; i++) {
  328. var gridkeyvalue = Ext.getCmp(gridKeys[i]).value;
  329. if (i == 0) {
  330. if (gridkeyvalue) {
  331. dbGridCondition = mappinggirdKeys[i] + " IS '" + gridkeyvalue + "' ";
  332. } else {
  333. showError(gridErrorMessages[i]);
  334. return;
  335. }
  336. } else {
  337. if (gridkeyvalue) {
  338. dbGridCondition = dbGridCondition + " AND " + mappinggirdKeys[i] + " IS '" + gridkeyvalue + "' ";
  339. } else {
  340. showError(gridErrorMessages[i]);
  341. return;
  342. }
  343. }
  344. }
  345. }
  346. if (this.dbBaseCondition) {
  347. dbBaseCondition = this.dbBaseCondition;
  348. }
  349. if (!trigger.ownerCt || trigger.column) { // 如果是grid的dbfind
  350. var grid = Ext.ComponentQuery.query('gridpanel');
  351. if(!trigger.dbfind){
  352. if(trigger.column.dataIndex == key){//
  353. dbfind = trigger.column.dbfind;
  354. }else{
  355. Ext.Array.each(grid,
  356. function(g, index) {
  357. Ext.Array.each(g.columns,
  358. function(column) {
  359. if (column.dataIndex == key ) {
  360. dbfind = column.dbfind;
  361. trigger.owner = g;
  362. }
  363. });
  364. });
  365. }
  366. }else dbfind=trigger.dbfind;
  367. }
  368. var keyValue = this.lastValue, ob = this.dbOrderby || ''; // 当前值
  369. keyValue = keyValue == null ? '': keyValue;
  370. var width = Ext.isIE ? screen.width * 0.7 * 0.9 : '80%',
  371. height = Ext.isIE ? screen.height * 0.75 : '95%';
  372. //针对有些特殊窗口显示较小
  373. width =this.winWidth ? this.winWidth:width;
  374. height=this.winHeight ? this.winHeight:height;
  375. var _config=getUrlParam('_config');
  376. var dbwin = new Ext.window.Window({
  377. id: 'dbwin',
  378. title: '查找',
  379. height: height,
  380. width: width,
  381. maximizable: true,
  382. buttonAlign: 'center',
  383. layout: 'anchor',
  384. items: [{
  385. tag: 'iframe',
  386. frame: true,
  387. anchor: '100% 100%',
  388. layout: 'fit',
  389. html: '<iframe id="iframe_dbfind" src="' + basePath + 'jsps/common/dbfind.jsp?key=' + key + "&dbfind=" + encodeURIComponent(dbfind) + "&dbGridCondition=" + encodeURIComponent(dbGridCondition) + "&dbCondition=" + encodeURIComponent(dbCondition) + "&dbBaseCondition=" + encodeURIComponent(dbBaseCondition) + "&keyValue=" + encodeURIComponent(keyValue) + "&trigger=" + trigger.id + "&caller=" + dbCaller +"&_config="+_config+"&ob=" + ob + '" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  390. }],
  391. buttons: [{
  392. text: '关 闭',
  393. iconCls: 'x-button-icon-close',
  394. cls: 'x-btn-gray',
  395. handler: function() {
  396. Ext.getCmp('dbwin').close();
  397. }
  398. },
  399. {
  400. text: '重置条件',
  401. id: 'reset',
  402. cls: 'x-btn-gray',
  403. hidden: true,
  404. handler: function() {
  405. var grid = Ext.getCmp('dbwin').el.dom.getElementsByTagName('iframe')[0].contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');
  406. grid.resetCondition();
  407. grid.getCount();
  408. }
  409. }]
  410. });
  411. dbwin.show();
  412. trigger.lastTriggerId = null;
  413. },
  414. getSearchData:function(table,field,condition,configSearchCondition,dbCaller,name,me,judge,searchTpl){
  415. var data="";
  416. var con = this.getExtraCondition();
  417. if(con!=''){
  418. condition += " AND " + con;
  419. }
  420. Ext.Ajax.request({
  421. url: basePath + 'common/getSearchData.action',
  422. params: {
  423. table: table,
  424. field: field,
  425. condition:condition,
  426. configSearchCondition:configSearchCondition,
  427. name: name,
  428. caller: dbCaller,
  429. type:judge,
  430. searchTpl:searchTpl
  431. },
  432. async: false,
  433. method: 'post',
  434. callback: function(options, success, response) {
  435. var res = new Ext.decode(response.responseText);
  436. if (res.exceptionInfo) {
  437. showError(res.exceptionInfo);
  438. return;
  439. }
  440. if (res.success) {
  441. me.searchTpl=false;
  442. data=res;
  443. }else{
  444. me.ifsearch=false;
  445. }
  446. }
  447. });
  448. return data;
  449. },
  450. judgeForm:function(trigger){
  451. trigger.lastTriggerId = trigger.id;
  452. var judge='form';
  453. if (!trigger.ownerCt) {
  454. if (!trigger.owner) {
  455. trigger.getOwner();
  456. }
  457. if (trigger.owner.editingPlugin.activeEditor.field.id == trigger.id) {
  458. trigger.record = trigger.owner.editingPlugin.activeRecord;
  459. } else {
  460. trigger.record = trigger.owner.selModel.lastSelected;
  461. }
  462. var index = trigger.owner.store.indexOf(trigger.record);
  463. if (index != null) {
  464. judge='grid';
  465. } else {
  466. judge ='form';
  467. }
  468. }
  469. return judge;
  470. },
  471. getCondition: function(triggerCond) {
  472. var condition = [], findConfig = this.findConfig,
  473. dbKey = this.dbKey, mappingKey = this.mappingKey,
  474. gridKey = this.gridKey, mappinggirdKey = this.mappinggirdKey;
  475. // 存在查询条件的字段
  476. if (findConfig) {
  477. condition.push(typeof findConfig == 'function' ? findConfig.call(null) : findConfig);
  478. }
  479. if (dbKey) {
  480. var dbKeyValue = Ext.getCmp(dbKey).value;
  481. if (dbKeyValue) {
  482. condition.push(mappingKey + "='" + dbKeyValue + "'");
  483. } else {
  484. throw new Error(this.dbMessage);
  485. }
  486. }
  487. if (gridKey) {
  488. var gridKeys = gridKey.split('|');
  489. var mappinggirdKeys = mappinggirdKey.split('|');
  490. var gridErrorMessages = this.gridErrorMessage.split('|');
  491. for (var i = 0; i < gridKeys.length; i++) {
  492. var gridkeyvalue = Ext.getCmp(gridKeys[i]).value;
  493. if (gridkeyvalue) {
  494. condition.push(mappinggirdKeys[i] + "='" + gridkeyvalue + "'");
  495. } else {
  496. throw new Error(gridErrorMessages[i]);
  497. }
  498. }
  499. }
  500. if (this.dbBaseCondition) {
  501. condition.push(this.dbBaseCondition);
  502. }
  503. triggerCond && (condition.push(triggerCond));
  504. return condition.join(" AND ");
  505. },
  506. autoDbfind: function(which, caller, field, condition) {
  507. var me = this;
  508. Ext.Ajax.request({
  509. url: basePath + 'common/autoDbfind.action',
  510. params: {
  511. which: which,
  512. caller: caller,
  513. field: field,
  514. condition: condition,
  515. _config:getUrlParam('_config')
  516. },
  517. async: false,
  518. method: 'post',
  519. callback: function(options, success, response) {
  520. var res = new Ext.decode(response.responseText);
  521. if (res.exceptionInfo) {
  522. showError(res.exceptionInfo);
  523. return;
  524. }
  525. if (res.data) {
  526. var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  527. me.dbfinds= res.dbfinds || me.owner.dbfinds;
  528. me.autoSetValue(data[0], res.dbfinds || me.owner.dbfinds);
  529. } else {
  530. if (me.autoShowTriggerWin)
  531. me.onTriggerClick();
  532. }
  533. }
  534. });
  535. },
  536. setSelectValue: function(which, caller, field, condition) {
  537. var me = this;
  538. Ext.Ajax.request({
  539. url: basePath + 'common/autoDbfind.action',
  540. params: {
  541. which: which,
  542. caller: caller,
  543. field: field,
  544. condition: condition,
  545. _config:getUrlParam('_config')
  546. },
  547. async: false,
  548. method: 'post',
  549. callback: function(options, success, response) {
  550. var res = new Ext.decode(response.responseText);
  551. if (res.exceptionInfo) {
  552. showError(res.exceptionInfo);
  553. return;
  554. }
  555. if (res.data) {
  556. var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  557. me.dbfinds= res.dbfinds || me.owner.dbfinds;
  558. me.autoSetValue(data[0], res.dbfinds || me.owner.dbfinds);
  559. } else {
  560. if (me.autoShowTriggerWin)
  561. me.onTriggerClick();
  562. }
  563. }
  564. });
  565. },
  566. autoSetValue: function(data, dbfinds) {
  567. var trigger = this;
  568. var triggerV = null;
  569. if (!trigger.ownerCt || trigger.column) { //如果是grid的dbfind
  570. var grid = trigger.owner;
  571. var record = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] || grid.selModel.lastSelected; //detailgrid里面selected
  572. Ext.Array.each(Ext.Object.getKeys(data),
  573. function(k) {
  574. Ext.Array.each(dbfinds,
  575. function(ds) {
  576. if (ds.trigger == trigger.name || Ext.isEmpty(ds.trigger)) {
  577. if (Ext.Array.contains(ds.dbGridField.split(';'), k)) { //k == ds.dbGridField//支持多dbgrid的字段对应grid同一字段
  578. if (ds.field == trigger.name) {
  579. triggerV = data[k]; //trigger所在位置赋值
  580. }
  581. record.set(ds.field, data[k]);
  582. }
  583. }
  584. });
  585. });
  586. } else {
  587. var ff;
  588. Ext.Array.each(Ext.Object.getKeys(data),
  589. function(k) {
  590. Ext.Array.each(dbfinds,
  591. function(ds) {
  592. if (k == ds.dbGridField) {
  593. if (trigger.name == ds.field||trigger.name.substring(0,trigger.name.indexOf('-new'))==ds.field) {
  594. triggerV = data[k];
  595. } else {
  596. ff = Ext.getCmp(ds.field);
  597. if (ff && ff.setValue) ff.setValue(data[k]);
  598. }
  599. }
  600. });
  601. });
  602. }
  603. trigger.setValue(triggerV);
  604. data.data = data;
  605. trigger.lastTriggerValue='';
  606. trigger.fireEvent('aftertrigger', trigger, data);
  607. trigger.lastTriggerId = null;
  608. trigger.lastQueryValue='';
  609. },
  610. getValue: function() {
  611. var me = this,
  612. val = me.rawToValue(me.processRawValue(me.getRawValue()));
  613. me.value = val;
  614. return val;
  615. },
  616. resetDbfindValue:function(dbfinds){
  617. var trigger = this;
  618. var triggerV = null;
  619. if (!trigger.ownerCt) {
  620. var grid = trigger.owner;
  621. var record = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] || grid.selModel.lastSelected; //detailgrid里面selected
  622. Ext.Array.each(dbfinds,function(ds) {
  623. if(ds.trigger==trigger.name){
  624. record.set(ds.field, null);
  625. }
  626. });
  627. } else {
  628. var ff;
  629. Ext.Array.each(dbfinds,function(ds) {
  630. ff=Ext.getCmp(ds.field);
  631. if(ff) ff.setValue(null);
  632. });
  633. }
  634. trigger.setValue(null);
  635. trigger.fireEvent('aftertrigger', trigger, null);
  636. trigger.lastTriggerId = null;
  637. },
  638. getExtraCondition: function(){ //从表放大镜额外条件
  639. var me = this;
  640. var condition = [];
  641. if((!me.ownerCt || me.column) && me.column.dbfind){//如果是grid的dbfind
  642. var dbfind = me.column.dbfind;
  643. var cond = dbfind.split('|')[2];
  644. if(cond){
  645. var first = cond.split('&');
  646. if(first){
  647. for(var i = 0;i<first.length;i++){
  648. var second = first[i].split('IS');
  649. var other=second[1].split('}');
  650. if(second[1].split(':')[0].replace('{','')=='MAIN'){
  651. var formfield = other[0].split(':')[1];
  652. var field = Ext.getCmp(''+formfield+'');
  653. if(field!=null && field.value!=''){
  654. if(other[1]){
  655. condition.push(second[0] +"='"+field.value+"'"+other[1]);
  656. }else{
  657. condition.push(second[0] +"='"+field.value+"'");
  658. }
  659. }
  660. }else if(second[1].split(':')[0].replace('{','')=='DETAIL'){
  661. var gridfield = other[0].split(':')[1];
  662. var value = me.record.data[gridfield];
  663. if(value != null && value!=''){
  664. if(other[1]){
  665. condition.push(second[0] +"='"+value+"'"+other[1]);
  666. }else{
  667. condition.push(second[0] +"='"+value+"'");
  668. }
  669. }
  670. }
  671. }
  672. }
  673. }
  674. }
  675. return condition.join(' AND ');
  676. }
  677. });