MultiDbfindTrigger2.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /**
  2. * multi dbfind trigger
  3. * 改了下MultiDbfindTrigger的赋值方式,在grid中也会把多选的值用#号连接
  4. */
  5. Ext.define('erp.view.core.trigger.MultiDbfindTrigger2', {
  6. extend: 'Ext.form.field.Trigger',
  7. alias: 'widget.multidbfindtrigger2',
  8. triggerCls: 'x-form-search-trigger',
  9. onTriggerClick: function() {
  10. this.setFieldStyle('background:#C6E2FF;');
  11. var trigger = this,// 放大镜所在
  12. key = this.name,// name属性
  13. dbfind = '',// 需要dbfind的表和字段
  14. dbBaseCondition = '',
  15. dbCondition = '',
  16. dbGridCondition = '',
  17. dbKey = this.dbKey,
  18. mappingKey = this.mappingKey,
  19. mappinggirdKey = this.mappinggirdKey,
  20. gridKey = this.gridKey,
  21. gridErrorMessage = this.gridErrorMessage;
  22. window.onTriggerClick = this.id;
  23. // 存在查询条件的字段
  24. if(dbKey){
  25. var dbKeyValue = Ext.getCmp(dbKey).value;
  26. if(dbKeyValue){
  27. dbCondition = mappingKey + " IS '" + dbKeyValue + "'";
  28. } else {
  29. showError(this.dbMessage);
  30. return
  31. }
  32. }
  33. if(gridKey){
  34. var gridKeys = gridKey.split('|');
  35. var mappinggirdKeys;
  36. var gridErrorMessages;
  37. if(mappinggirdKey){
  38. mappinggirdKeys = mappinggirdKey.split('|');
  39. gridErrorMessages = this.gridErrorMessage.split('|');
  40. }
  41. for(var i=0;i<gridKeys.length;i++){
  42. var gridkeyvalue = Ext.getCmp(gridKeys[i]).value;
  43. if(i==0){
  44. if(gridkeyvalue){
  45. dbGridCondition = mappinggirdKeys[i] + " IS '"+gridkeyvalue+"' ";
  46. }else{
  47. showError(gridErrorMessages[i]);
  48. return
  49. }
  50. }else{
  51. if(gridkeyvalue){
  52. dbGridCondition =dbGridCondition+" AND "+ mappinggirdKeys[i] + " IS '"+gridkeyvalue+"' ";
  53. }else{
  54. showError(gridErrorMessages[i]);
  55. return
  56. }
  57. }
  58. }
  59. // var gridkeyvalue = Ext.getCmp(gridKey).value;
  60. // if(gridkeyvalue){
  61. // dbGridCondition = this.mappinggirdKey + " IS '" + gridkeyvalue + "'";
  62. // } else {
  63. // showError(this.gridErrorMessage);
  64. // return
  65. // }
  66. }
  67. if(this.dbBaseCondition){
  68. dbBaseCondition = this.dbBaseCondition;
  69. }
  70. if(!trigger.ownerCt){// 如果是grid的dbfind
  71. var grid = Ext.ComponentQuery.query('gridpanel');
  72. Ext.Array.each(grid, function(g, index){
  73. Ext.Array.each(g.columns,function(column){
  74. if(column.dataIndex == key) {
  75. dbfind = column.dbfind;
  76. trigger.owner = g;
  77. }
  78. });
  79. });
  80. if(trigger.owner.editingPlugin.activeEditor.field.id == trigger.id) {
  81. trigger.record = trigger.owner.editingPlugin.activeRecord;
  82. } else {
  83. trigger.record = trigger.owner.selModel.lastSelected;
  84. }
  85. }
  86. var keyValue = this.value;// 当前值
  87. keyValue = keyValue == null ? '' : keyValue;
  88. var dbwin = this.createWin();
  89. dbwin.show();
  90. if(this.multistore){
  91. this.showButtons();
  92. } else {
  93. trigger.multiValue = new Object();
  94. var iframe = dbwin.getEl().down('iframe');
  95. if(!iframe) {
  96. dbwin.add({
  97. tag : 'iframe',
  98. frame : true,
  99. anchor : '100% 100%',
  100. layout : 'fit',
  101. html : '<iframe src="#" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  102. });
  103. iframe = dbwin.getEl().down('iframe');
  104. }
  105. iframe.dom.src = basePath + 'jsps/common/multidbfind.jsp?key=' +
  106. key + "&dbfind=" + dbfind +
  107. "&dbGridCondition=" + dbGridCondition + "&dbCondition=" + dbCondition +
  108. "&dbBaseCondition=" + dbBaseCondition + "&keyValue=&caller=" + caller +
  109. "&trigger=" + trigger.id;
  110. }
  111. },
  112. createWin: function() {
  113. var trigger = this;
  114. this.win = Ext.create('Ext.Window', {
  115. title: '查找',
  116. height: "100%",
  117. width: "80%",
  118. maximizable : true,
  119. buttonAlign : 'center',
  120. layout : 'anchor',
  121. items: [],
  122. dbtriggr: trigger,
  123. closeAction: 'hide',
  124. buttons : [{
  125. text : '确 认',
  126. iconCls: 'x-button-icon-save',
  127. id:'mutidbaffirm',
  128. cls: 'x-btn-gray',
  129. handler : function(){
  130. trigger.onConfirm();
  131. }
  132. },{
  133. text : '关 闭',
  134. iconCls: 'x-button-icon-close',
  135. cls: 'x-btn-gray',
  136. handler : function(btn){
  137. btn.ownerCt.ownerCt.close();
  138. }
  139. }]
  140. });
  141. return this.win;
  142. },
  143. showButtons: function() {
  144. var value = this.value, dbwin = this.win;
  145. dbwin.add({
  146. id: 'multigrid',
  147. xtype: 'gridpanel',
  148. height: '100%',
  149. autoScroll: true,
  150. columnLines : true,
  151. columns: [{
  152. header: 'Button',
  153. dataIndex: 'display' ,
  154. flex: 1
  155. }, {
  156. header: 'name',
  157. dataIndex: 'value',
  158. flex: 1
  159. }],
  160. store: this.multistore,
  161. selModel: Ext.create('Ext.selection.CheckboxModel',{
  162. ignoreRightMouseSelection : false,
  163. listeners:{
  164. selectionchange:function(selectionModel, selected, options){
  165. }
  166. },
  167. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  168. view.el.focus();
  169. var me = Ext.getCmp('multigrid');
  170. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  171. if(contains(value, record.data['value'], true)){
  172. me.selModel.deselect(record);
  173. me.multiselected = me.multiselected.replace('#' + record.data['value'], '');
  174. value = value.replace(record.data['value'], '');
  175. checkbox.setAttribute('class','x-grid-row-checker');
  176. } else {
  177. if(checkbox.getAttribute('class') == 'x-grid-row-checker'){
  178. checkbox.setAttribute('class','x-grid-row-checker-checked');//只是修改了其样式,并没有将record加到selModel里面
  179. me.multiselected = me.multiselected + '#' + record.data['value'];
  180. } else {
  181. me.multiselected = me.multiselected.replace('#' + record.data['value'], '');
  182. checkbox.setAttribute('class','x-grid-row-checker');
  183. }
  184. }
  185. }
  186. }),
  187. listeners: {
  188. afterrender: function(){
  189. var me = this;
  190. var selected = new Array();
  191. me.multiselected = '';
  192. Ext.each(me.store.data.items, function(){
  193. if(contains(value, this.data['value'], true)){
  194. selected.push(this);
  195. me.multiselected = me.multiselected + '#' + this.data['value'];
  196. }
  197. });
  198. me.selModel.select(selected);
  199. }
  200. }
  201. });
  202. },
  203. onConfirm: function() {
  204. var trigger = this;
  205. if(trigger.multistore){
  206. var me = Ext.getCmp('multigrid');
  207. trigger.setValue(me.multiselected.substring(1));
  208. this.win.close();
  209. } else {
  210. if(!trigger.ownerCt){
  211. var grid = trigger.owner;
  212. var record = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] || grid.selModel.lastSelected;//detailgrid里面selected
  213. // var record = grid.selModel.lastSelected;
  214. Ext.each(trigger.multiValue, function(item, index){
  215. if(record) {
  216. if(item && item.data){
  217. Ext.Array.each(Ext.Object.getKeys(item.data), function(k){
  218. Ext.Array.each(grid.dbfinds,function(ds){
  219. if(Ext.isEmpty(ds.trigger) || ds.trigger == trigger.name) {
  220. if(Ext.Array.contains(ds.dbGridField.split(';'), k)) {
  221. //record.set(ds.field, item.data[k]);
  222. var value=record.get(ds.field)?record.get(ds.field):'';
  223. if(!Ext.Array.contains(value.split('#'), item.data[k])){
  224. record.set(ds.field,value==""? item.data[k]:value+'#'+item.data[k]);
  225. }
  226. }
  227. }
  228. });
  229. });
  230. }
  231. }
  232. });
  233. } else {
  234. var k = Ext.Object.getKeys(trigger.multiValue),cp;
  235. Ext.each(k, function(key){
  236. cp = Ext.getCmp(key);
  237. if(cp.setValue !== undefined)
  238. cp.setValue(trigger.multiValue[key]);
  239. });
  240. trigger.setValue(trigger.multiValue[trigger.name]);
  241. }
  242. trigger.fireEvent('aftertrigger', trigger, trigger.multiRecords);
  243. this.win.close();
  244. }
  245. },
  246. /**
  247. * 递归grid的下一条
  248. */
  249. next: function(grid, record){
  250. record = record || grid.selModel.lastSelected;
  251. if(record){
  252. //递归查找下一条,并取到数据
  253. var store = grid.store, idx = store.indexOf(record),
  254. d = store.getAt(idx + 1), len = store.data.items.length;
  255. if(d){
  256. return d;
  257. } else {
  258. if(idx + 1 < len){
  259. this.next(grid, d);
  260. } else {
  261. if (grid.GridUtil) {
  262. grid.GridUtil.add10EmptyItems(grid);
  263. return this.next(grid, record);
  264. }
  265. }
  266. }
  267. }
  268. }
  269. });