CateTreeDbfindTrigger.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. /**
  2. * multi dbfind trigger
  3. *
  4. */
  5. Ext.define('erp.view.core.trigger.CateTreeDbfindTrigger', {
  6. extend: 'Ext.form.field.Trigger',
  7. alias: 'widget.cateTreeDbfindTrigger',
  8. triggerCls: 'x-form-search-trigger',
  9. initComponent: function() {
  10. this.addEvents({
  11. aftertrigger: true,
  12. beforetrigger: true
  13. });
  14. this.callParent(arguments);
  15. },
  16. autoDbfind: true,
  17. mode: 'SINGLE',
  18. listeners: {
  19. focus: function(f){
  20. if(!f.readOnly) {
  21. var trigger = this;
  22. trigger.lastTriggerId = trigger.id;
  23. if(!trigger.ownerCt){
  24. if(!trigger.owner){
  25. var grid = Ext.ComponentQuery.query('gridpanel');
  26. Ext.Array.each(grid, function(g, index){
  27. Ext.Array.each(g.columns, function(column){
  28. if(column.dataIndex == trigger.name) {
  29. dbfind = column.dbfind;
  30. trigger.owner = g;
  31. }
  32. });
  33. });
  34. }
  35. if(trigger.owner.editingPlugin.activeEditor.field.id == trigger.id) {
  36. trigger.record = trigger.owner.editingPlugin.activeRecord;
  37. } else {
  38. trigger.record = trigger.owner.selModel.lastSelected;
  39. }
  40. var index = trigger.record.index;
  41. if(index != null){
  42. trigger.lastTriggerId = trigger.id + '---' + index;
  43. } else {
  44. trigger.lastTriggerId = null;
  45. }
  46. }
  47. }
  48. },
  49. blur: function(f){
  50. if(this.lastTriggerId && !f.readOnly){
  51. var which = 'form';
  52. var cal = caller;
  53. var key = this.name;
  54. var con = key + " like '%" + this.value + "%'";
  55. var currrecord = null;
  56. if(contains(this.lastTriggerId, '---', true) && !this.ownerCt){
  57. which = 'grid';
  58. var grid = Ext.ComponentQuery.query('gridpanel');
  59. Ext.Array.each(grid, function(g, index){
  60. Ext.Array.each(g.columns,function(column){
  61. if(column.dataIndex == key) {
  62. dbfind = column.dbfind;
  63. }
  64. });
  65. });
  66. cal = dbfind.split('|')[0];
  67. con = dbfind.split('|')[1] + " like '%" + this.value + "%'";
  68. currrecord = this.owner.selModel.lastSelected;
  69. if(this.value != null && this.value != ''){
  70. var record = this.owner.store.getAt(this.lastTriggerId.split('---')[1]);
  71. this.owner.selModel.select(record);
  72. }
  73. }
  74. if(this.value != null && this.value != '' && this.lastTriggerId &&
  75. !this.readOnly && this.autoDbfind){
  76. this.autoDbfind(which, cal, key, con);//光标移开后自动dbfind
  77. if(currrecord){
  78. this.owner.selModel.select(currrecord);
  79. }
  80. }
  81. }
  82. }
  83. },
  84. onTriggerClick: function() {
  85. var trigger = this;//放大镜所在
  86. var key = this.name;//name属性
  87. var dbfind = '';//需要dbfind的表和字段
  88. var keyValue = this.value;//当前值
  89. var record = null;
  90. if(!trigger.ownerCt){
  91. if(trigger.owner.selModel){
  92. record = trigger.owner.selModel.selected.items[0];
  93. }
  94. }
  95. var dbwin = Ext.getCmp('cate-dbwin');
  96. if(!dbwin) {
  97. dbwin = new Ext.window.Window({
  98. id : 'cate-dbwin',
  99. title: '查找',
  100. height: "100%",
  101. width: "80%",
  102. maximizable : true,
  103. buttonAlign : 'center',
  104. layout : 'anchor',
  105. modal:true,
  106. items: [],
  107. buttons : [{
  108. text : '确 认',
  109. iconCls: 'x-button-icon-save',
  110. cls: 'x-btn-gray',
  111. handler : function(){
  112. var contentwindow = Ext.getCmp('cate-dbwin').body.dom.getElementsByTagName('iframe')[0].contentWindow;
  113. var tree = contentwindow.Ext.getCmp('tree-panel');
  114. var data = tree.getChecked();
  115. if(trigger.mode == 'MULTI') {
  116. trigger.setMultiData(data);
  117. Ext.getCmp('cate-dbwin').hide();
  118. return;
  119. }
  120. var dbfinds;
  121. var catecode = data[0].data.qtip;
  122. var cateid = data[0].data.id;
  123. var catecurrency = data[0].raw.currency;
  124. var catename = data[0].raw.caname;
  125. var catetypename = data[0].raw.typename;
  126. var cateclass = data[0].raw.caclass;
  127. var cateasstype = data[0].raw.caasstype;
  128. var cateassname = data[0].raw.caassname;
  129. var calevel = data[0].raw.calevel;
  130. if(!trigger.ownerCt){
  131. dbfinds = trigger.owner.dbfinds;
  132. if(dbfinds!=null){
  133. var keys = Ext.Object.getKeys(data[0].raw.data);
  134. Ext.each(dbfinds,function(dbfind,index){
  135. if(Ext.isEmpty(dbfind.trigger) || dbfind.trigger == trigger.name) {
  136. var ss = dbfind.dbGridField.split(';');
  137. for(var i in ss) {
  138. if(Ext.Array.contains(keys, ss[i])) {
  139. record.set(dbfind.field, data[0].raw.data[ss[i]]);
  140. }
  141. }
  142. }
  143. });
  144. }
  145. } else {
  146. //form 中的
  147. dbfinds = tree.dbfinds;
  148. if(dbfinds && dbfinds.length > 0) {
  149. Ext.each(dbfinds, function(dbfind, index){
  150. if(dbfind.ca_id){
  151. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_id,value:cateid}]);
  152. }
  153. if(dbfind.ca_code){
  154. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_code,value:catecode}]);
  155. }
  156. if(dbfind.ca_name){
  157. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_name,value:catename}]);
  158. }
  159. if(dbfind.ca_currency){
  160. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_currency,value:catecurrency}]);
  161. }
  162. if(dbfind.ca_typename){
  163. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_typename,value:catetypename}]);
  164. }
  165. if(dbfind.ca_class){
  166. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_class,value:cateclass}]);
  167. }
  168. if(dbfind.ca_asstype){
  169. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_asstype,value:cateasstype}]);
  170. }
  171. if(dbfind.ca_assname){
  172. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_assname,value:cateassname}]);
  173. }
  174. if(dbfind.ca_level){
  175. trigger.ownerCt.getForm().setValues([{id:dbfind.ca_level,value:calevel}]);
  176. }
  177. });
  178. } else {
  179. trigger.setValue(catecode);
  180. }
  181. }
  182. trigger.fireEvent('aftertrigger', trigger, data);
  183. Ext.getCmp('cate-dbwin').hide();
  184. }
  185. },{
  186. text : '关 闭',
  187. iconCls: 'x-button-icon-close',
  188. cls: 'x-btn-gray',
  189. handler : function(){
  190. Ext.getCmp('cate-dbwin').hide();
  191. }
  192. }]
  193. });
  194. dbwin.add({
  195. tag : 'iframe',
  196. frame : true,
  197. anchor : '100% 100%',
  198. layout : 'fit',
  199. html : '<iframe id="iframe_dbfind_'+caller+"_"+key+"="+keyValue+'" src="'+basePath+'jsps/common/catetreepaneldbfind.jsp?key='+key+"&dbfind="+dbfind+"&caller1="+caller+"&keyValue="+keyValue+"&trigger="+trigger.id+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  200. });
  201. }
  202. dbwin.show();
  203. },
  204. setMultiData: function(data) {
  205. var me = this;
  206. if(!this.ownerCt){
  207. var grid = trigger.owner;
  208. var record = grid.selModel.lastSelected;
  209. Ext.each(data, function(item, index){
  210. if(index > 0){
  211. record = me.next(grid, record);
  212. }
  213. if(record) {
  214. if(item && item.data){
  215. Ext.Array.each(Ext.Object.getKeys(item.data), function(k){
  216. Ext.Array.each(grid.dbfinds,function(ds){
  217. if(Ext.isEmpty(ds.trigger) || ds.trigger == trigger.name) {
  218. if(Ext.Array.contains(ds.dbGridField.split(';'), k)) {
  219. record.set(ds.field, item.data[k]);
  220. }
  221. }
  222. });
  223. });
  224. }
  225. }
  226. });
  227. } else {
  228. var val = [];
  229. Ext.each(data, function(item, index){
  230. val.push(item.raw.data.ca_code);
  231. });
  232. this.setValue(val.join('#'));
  233. }
  234. this.fireEvent('aftertrigger', this, data);
  235. },
  236. /**
  237. * 递归grid的下一条
  238. */
  239. next: function(grid, record){
  240. record = record || grid.selModel.lastSelected;
  241. if(record){
  242. //递归查找下一条,并取到数据
  243. var d = grid.store.getAt(record.index + 1);
  244. if(d){
  245. return d;
  246. } else {
  247. if(record.index + 1 < grid.store.data.items.length){
  248. this.next(grid, d);
  249. }
  250. }
  251. }
  252. },
  253. autoDbfind: function(which, caller, field, condition){
  254. var me = this;
  255. Ext.Ajax.request({
  256. url : basePath + 'common/autoDbfind.action',
  257. params: {
  258. which: which,
  259. caller: caller,
  260. field: field,
  261. condition: condition
  262. },
  263. async: false,
  264. method : 'post',
  265. callback : function(options,success,response){
  266. var res = new Ext.decode(response.responseText);
  267. if(res.exceptionInfo){
  268. showError(res.exceptionInfo);return;
  269. }
  270. if(res.data){
  271. var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  272. me.autoSetValue(data[0], res.dbfinds || me.owner.dbfinds);
  273. } else {
  274. me.onTriggerClick();
  275. }
  276. }
  277. });
  278. },
  279. autoSetValue: function(data, dbfinds){
  280. var trigger = this;
  281. var triggerV = null;
  282. if(!trigger.ownerCt){//如果是grid的dbfind
  283. var grid = trigger.owner;
  284. var record = grid.selModel.lastSelected;//detailgrid里面selected
  285. Ext.Array.each(Ext.Object.getKeys(data),function(k){
  286. Ext.Array.each(dbfinds,function(ds){
  287. if(ds.trigger == trigger.name ||Ext.isEmpty(ds.trigger)) {
  288. if(Ext.Array.contains(ds.dbGridField.split(';'), k)) {//k == ds.dbGridField//支持多dbgrid的字段对应grid同一字段
  289. if(ds.field == trigger.name){
  290. triggerV = data[k];//trigger所在位置赋值
  291. }
  292. record.set(ds.field, data[k]);
  293. }
  294. }
  295. });
  296. });
  297. } else {
  298. var ff;
  299. Ext.Array.each(Ext.Object.getKeys(data),function(k){
  300. Ext.Array.each(dbfinds,function(ds){
  301. if(k == ds.dbGridField) {
  302. if(Ext.getCmp(ds.field)){
  303. if(trigger.name == ds.field){
  304. triggerV = data[k];
  305. } else {
  306. ff = Ext.getCmp(ds.field);
  307. if(ff && ff.setValue)
  308. ff.setValue(data[k]);
  309. }
  310. }
  311. }
  312. });
  313. });
  314. }
  315. trigger.setValue(triggerV);
  316. data.data = data;
  317. trigger.fireEvent('aftertrigger', trigger, data);
  318. trigger.lastTriggerId = null;
  319. }
  320. });