EmpTrigger.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * 选择员工TreeGrid
  3. * <br>
  4. * FormDetail表fd_dbfind配置ET
  5. * DetailGrid表dg_dbbutton配置-4
  6. */
  7. Ext.define('erp.view.core.trigger.EmpTrigger', {
  8. extend : 'Ext.form.field.Trigger',
  9. alias : 'widget.emptrigger',
  10. triggerCls : 'x-form-search-trigger',
  11. initComponent : function() {
  12. this.addEvents({
  13. aftertrigger : true,
  14. beforetrigger : true
  15. });
  16. this.callParent(arguments);
  17. },
  18. listeners : {
  19. focus : function(f) {
  20. if (!f.readOnly) {
  21. var trigger = this;
  22. trigger.lastTriggerId = trigger.id;
  23. if (!trigger.ownerCt && !trigger.owner) {
  24. var grid = Ext.ComponentQuery.query('gridpanel');
  25. Ext.Array.each(grid, function(g, index) {
  26. Ext.Array.each(g.columns, function(column, index1) {
  27. if (column.dataIndex == trigger.name) {
  28. dbfind = column.dbfind;
  29. trigger.owner = g;
  30. }
  31. });
  32. });
  33. }
  34. }
  35. }
  36. },
  37. onTriggerClick : function() {
  38. var trigger = this;
  39. if (!trigger.ownerCt) {
  40. if (trigger.owner.selModel) {
  41. trigger.record = trigger.owner.selModel.selected.items[0];
  42. }
  43. }
  44. this.showWin();
  45. },
  46. showWin : function() {
  47. this.fireEvent('beforetrigger', this);
  48. var win = Ext.getCmp('tri-emp-win');
  49. if (!win) {
  50. var me = this, url = basePath + 'jsps/common/empdbfind.jsp?tid=' + this.id;
  51. win = Ext.create('Ext.Window', {
  52. id : 'tri-emp-win',
  53. title : '员工资料',
  54. height : "100%",
  55. width : "80%",
  56. maximizable : true,
  57. buttonAlign : 'center',
  58. layout : 'anchor',
  59. modal : true,
  60. closeAction: 'hide',
  61. items: [{
  62. tag : 'iframe',
  63. frame : true,
  64. anchor : '100% 100%',
  65. layout : 'fit',
  66. html : '<iframe src="' + url + '" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  67. }],
  68. buttons : [{
  69. text : $I18N.common.button.erpConfirmButton,
  70. iconCls: 'x-button-icon-save',
  71. cls: 'x-btn-gray',
  72. handler: function(btn) {
  73. me.onConfirm();
  74. }
  75. },{
  76. text : $I18N.common.button.erpCloseButton,
  77. iconCls: 'x-button-icon-close',
  78. cls: 'x-btn-gray',
  79. handler : function(btn){
  80. btn.ownerCt.ownerCt.hide();
  81. }
  82. }]
  83. });
  84. }
  85. win.show();
  86. },
  87. onConfirm: function() {
  88. var me = this, contentwindow = Ext.getCmp('tri-emp-win').body.dom.getElementsByTagName('iframe')[0].contentWindow;
  89. var tree = contentwindow.Ext.getCmp('emptreegrid');
  90. var datas = tree.getChecked(), record = this.record, trigger = this, grid = this.owner;
  91. if(this.ownerCt) {
  92. me.fireEvent('aftertrigger', me, datas);
  93. this.fireEvent('aftertrigger',this,datas);
  94. } else {
  95. var dbfinds = this.owner.dbfinds;
  96. if(dbfinds != null){
  97. var keys = Ext.Object.getKeys(datas[0].raw.data);
  98. Ext.each(datas, function(d, i){
  99. if(i > 0){
  100. record = trigger.next(grid, record);
  101. }
  102. if(record && d && d.raw) {
  103. Ext.each(dbfinds, function(dbfind, index){
  104. if(Ext.isEmpty(dbfind.trigger) || dbfind.trigger == trigger.name) {
  105. var ss = dbfind.dbGridField.split(';');
  106. for(var i in ss) {
  107. if(Ext.Array.contains(keys, ss[i])) {
  108. record.set(dbfind.field, d.raw.data[ss[i]]);
  109. }
  110. }
  111. }
  112. });
  113. }
  114. });
  115. }
  116. }
  117. Ext.getCmp('tri-emp-win').hide();
  118. },
  119. /**
  120. * 递归grid的下一条
  121. */
  122. next: function(grid, record){
  123. record = record || grid.selModel.lastSelected;
  124. if(record){
  125. //递归查找下一条,并取到数据
  126. var d = grid.store.getAt(record.index + 1);
  127. if(d){
  128. return d;
  129. } else {
  130. if(record.index + 1 < grid.store.data.items.length){
  131. this.next(grid, d);
  132. }
  133. }
  134. }
  135. }
  136. });