BOMTreeGrid.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. Ext.define('erp.view.pm.bom.BOMTreeGrid',{
  2. extend: 'Ext.tree.Panel',
  3. alias: 'widget.bomTreeGrid',
  4. region: 'south',
  5. layout : 'fit',
  6. id: 'querygrid',
  7. cls: 'custom',
  8. emptyText : $I18N.common.grid.emptyText,
  9. useArrows: true,
  10. rootVisible: false,
  11. bodyStyle:'background-color:#f1f1f1;',
  12. BaseUtil: Ext.create('erp.util.BaseUtil'),
  13. initComponent : function(){
  14. Ext.override(Ext.data.AbstractStore,{
  15. indexOf: Ext.emptyFn
  16. });
  17. //var gridParam = {caller: caller, condition: this.emptyCondition};
  18. var gridParam = {caller: caller, condition:null};
  19. this.beforeQuery(caller, this.emptyCondition);
  20. this.getGridColumnsAndStore(this, gridParam);
  21. this.callParent(arguments);
  22. this.GridUtil = new Object();
  23. this.GridUtil.getGridColumnsAndStore = this.getGridColumnsAndStore;
  24. this.GridUtil.loadNewStore = this.getGridColumnsAndStore;
  25. },
  26. listeners: {//滚动条有时候没反应,添加此监听器
  27. scrollershow: function(scroller) {
  28. if (scroller && scroller.scrollEl) {
  29. scroller.clearManagedListeners();
  30. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  31. }
  32. }
  33. },
  34. defaultCondition: 'bs_sonbomid > 0',
  35. emptyCondition: '1=2',
  36. columns: new Array(),
  37. getGridColumnsAndStore: function(grid, param){
  38. var me = Ext.getCmp('querygrid') || this;
  39. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(true);
  40. Ext.Ajax.request({
  41. url : basePath + 'common/singleGridPanel.action',
  42. params: param,
  43. method : 'post',
  44. async: false,
  45. callback : function(options, success, response){
  46. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(false);
  47. var res = new Ext.decode(response.responseText);
  48. if(res.exceptionInfo){
  49. showError(res.exceptionInfo);
  50. } else {
  51. if(me.columns.length == 0){
  52. Ext.each(res.columns, function(c){
  53. c = me.removeKeys(c, ['locked', 'summaryType', 'logic', 'renderer']);
  54. me.columns.push(c);
  55. });
  56. }
  57. if(!me.store){
  58. me.store = Ext.create('Ext.data.TreeStore', {
  59. fields: res.fields,
  60. root : {
  61. text: 'root',
  62. id: 'root',
  63. expanded: true
  64. }
  65. });
  66. }
  67. if(res.data){
  68. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  69. me.store.setRootNode({
  70. text: 'root',
  71. id: 'root',
  72. expanded: true,
  73. children: me.parseGrid2Tree(tree)
  74. });
  75. }
  76. }
  77. }
  78. });
  79. },
  80. removeKeys: function(obj, keys){
  81. var o = new Object();
  82. var key = Ext.Object.getKeys(obj);
  83. Ext.each(key, function(k){
  84. if(!Ext.Array.contains(keys, k)){
  85. o[k] = obj[k];
  86. }
  87. });
  88. return o;
  89. },
  90. /**
  91. * 加载子节点
  92. */
  93. loadChildNodes: function(record){
  94. var me = this;
  95. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(true);
  96. Ext.Ajax.request({
  97. url : basePath + 'common/singleGridPanel.action',
  98. params: {
  99. caller: caller,
  100. condition: 'bs_bomid=' + record.data['bs_sonbomid'] + ' AND bs_topbomid=' + record.data['bs_topbomid'] +
  101. ' AND bs_level=\'' + me.getChildLevel(record) + '\''
  102. },
  103. method : 'post',
  104. async: false,
  105. callback : function(options,success,response){
  106. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(false);
  107. var res = new Ext.decode(response.responseText);
  108. if(res.exceptionInfo){
  109. showError(res.exceptionInfo);
  110. } else {
  111. if(res.data){
  112. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  113. var nodes = me.parseGrid2Tree(tree);
  114. record.appendChild(nodes);
  115. record.expand(false,true);
  116. }
  117. }
  118. }
  119. });
  120. },
  121. getChildLevel: function(record) {
  122. var lev = Number(record.data['bs_level'].substr(record.data['bs_level'].lastIndexOf('.') + 1)),
  123. s = '';
  124. for(var i = 0;i <= lev;i ++) {
  125. s += '.';
  126. }
  127. s += (lev + 1);
  128. return s;
  129. },
  130. /**
  131. * 把筛选出来的BOMDetail的数据转化成Tree格式数据
  132. * @param details {Array} BOMDetails
  133. * @return TreeNodes
  134. */
  135. parseGrid2Tree: function(data){
  136. var tree = new Array();
  137. Ext.each(data, function(d, index){
  138. if(d.bs_sonbomid > 0) {
  139. d.cls = 'x-tree-cls-parent';
  140. d.leaf = false;
  141. } else {
  142. d.leaf = true;
  143. d.cls = 'x-tree-cls-node';
  144. }
  145. tree.push(d);
  146. });
  147. return tree;
  148. },
  149. beforeQuery: function(call, cond) {
  150. Ext.Ajax.request({
  151. url: basePath + 'common/form/beforeQuery.action',
  152. params: {
  153. caller: call,
  154. condition: cond
  155. },
  156. async: false,
  157. callback: function(opt, s, r) {
  158. var rs = Ext.decode(r.responseText);
  159. if(rs.exceptionInfo) {
  160. showError(rs.exceptionInfo);
  161. }
  162. }
  163. });
  164. }
  165. });