BOMManyGrid.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. emptyText : $I18N.common.grid.emptyText,
  8. useArrows: true,
  9. rootVisible: false,
  10. bodyStyle:'background-color:#f1f1f1;',
  11. initComponent : function(){
  12. Ext.override(Ext.data.AbstractStore,{
  13. indexOf: Ext.emptyFn
  14. });
  15. var gridParam = {caller: caller, condition: ''};
  16. this.getGridColumnsAndStore(this, 'common/singleGridPanel.action', gridParam, "");
  17. this.callParent(arguments);
  18. this.GridUtil = new Object();
  19. this.GridUtil.getGridColumnsAndStore = this.getGridColumnsAndStore;
  20. },
  21. listeners: {//滚动条有时候没反应,添加此监听器
  22. scrollershow: function(scroller) {
  23. if (scroller && scroller.scrollEl) {
  24. scroller.clearManagedListeners();
  25. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  26. }
  27. }
  28. },
  29. columns: new Array(),
  30. getGridColumnsAndStore: function(grid, url, param, no){
  31. var me = Ext.getCmp('querygrid') || this;
  32. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(true);
  33. Ext.Ajax.request({
  34. url : basePath + url,
  35. params: param,
  36. method : 'post',
  37. async: false,
  38. callback : function(options,success,response){
  39. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(false);
  40. var res = new Ext.decode(response.responseText);
  41. if(res.exceptionInfo){
  42. showError(res.exceptionInfo);
  43. } else {
  44. if(me.columns.length == 0){
  45. Ext.each(res.columns, function(c){
  46. c = me.removeKeys(c, ['locked', 'summaryType', 'logic', 'renderer']);
  47. me.columns.push(c);
  48. });
  49. }
  50. if(!me.store){
  51. me.store = Ext.create('Ext.data.TreeStore', {
  52. fields: res.fields,
  53. root : {
  54. text: 'root',
  55. id: 'root',
  56. expanded: true
  57. }
  58. });
  59. }
  60. if(res.data){
  61. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  62. me.store.setRootNode({
  63. text: 'root',
  64. id: 'root',
  65. expanded: true,
  66. children: me.parseGrid2Tree(tree)
  67. });
  68. }
  69. }
  70. }
  71. });
  72. },
  73. removeKeys: function(obj, keys){
  74. var o = new Object();
  75. var key = Ext.Object.getKeys(obj);
  76. Ext.each(key, function(k){
  77. if(!Ext.Array.contains(keys, k)){
  78. o[k] = obj[k];
  79. }
  80. });
  81. return o;
  82. },
  83. /**
  84. * 加载子节点
  85. */
  86. loadChildNodes: function(record){
  87. var me = this;
  88. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(true);
  89. Ext.Ajax.request({
  90. url : basePath + 'common/singleGridPanel.action',
  91. params: {
  92. caller: caller,
  93. condition: 'bd_motherid=' + record.data['bd_sonbomid']
  94. },
  95. method : 'post',
  96. async: false,
  97. callback : function(options,success,response){
  98. parent.Ext.getCmp("content-panel").getActiveTab().setLoading(false);
  99. var res = new Ext.decode(response.responseText);
  100. if(res.exceptionInfo){
  101. showError(res.exceptionInfo);
  102. } else {
  103. if(res.data){
  104. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  105. var nodes = me.parseGrid2Tree(tree)[0].children;
  106. Ext.each(nodes, function(n){
  107. n.bs_node = Number(record.data['bs_node']) + 1;
  108. });
  109. record.appendChild(nodes);
  110. record.expand(false,true);
  111. }
  112. }
  113. }
  114. });
  115. },
  116. /**
  117. * 把筛选出来的BOMDetail的数据转化成Tree格式数据
  118. * @param details {Array} BOMDetails
  119. * @return TreeNodes
  120. */
  121. parseGrid2Tree: function(details){
  122. var tree = new Array();
  123. var me = this;
  124. Ext.each(details, function(node, index){
  125. if(me.isParentCode(details, node.bd_mothercode)){
  126. var n = me.getParentNode(tree, node);
  127. n.children = n.children || new Array();
  128. n.children.push(me.getTreeNode(details, node, node.bd_mothercode, index, 2));
  129. }
  130. });
  131. return tree;
  132. },
  133. /**
  134. * 将BOMDetail及其下级BOM解析成Tree格式
  135. * @param details {Array} BOMDetails
  136. * @param node BOM节点
  137. * @param pId parentId
  138. * @param index 节点的id由prodcode而来,加pId和index主要为了防止id重复
  139. * @param tier 层级
  140. */
  141. getTreeNode: function(details, node, pId, index, tier){
  142. var me = this;
  143. node.id = node.bd_soncode + index;
  144. node.parentId = pId;
  145. node.qtip = node.bd_soncode;
  146. node.bs_node = tier;
  147. var array = me.getNodeChilds(details, node);
  148. if(array.length > 0){
  149. node.cls = "x-tree-cls-parent";
  150. node.leaf = false;
  151. node.children = node.children || new Array();
  152. Ext.each(array, function(a, idx){
  153. node.children.push(me.getTreeNode(details, a, node.bd_soncode + index, idx, tier + 1));
  154. });
  155. } else {
  156. if(node.bd_sonbomid > 0 ){
  157. node.cls = "x-tree-cls-parent";
  158. node.leaf = false;
  159. } else {
  160. node.leaf = true;
  161. node.cls = "x-tree-cls-node";
  162. }
  163. }
  164. return node;
  165. },
  166. /**
  167. * @param details {Array} BOMDetails
  168. * @param node BOM节点
  169. * @return node的下级BOM
  170. */
  171. getNodeChilds: function(details, node){
  172. var array = new Array();
  173. Ext.each(details, function(d){
  174. if(d.bd_bomid == node.bd_sonbomid){//根据ID
  175. array.push(d);
  176. }
  177. });
  178. return array;
  179. },
  180. /**
  181. * 判断code是否是最上层的BOM
  182. * @param details {Array} BOMDetails
  183. * @param code bd_mothercode
  184. * @return true-是/false-否
  185. */
  186. isParentCode: function(details, code){
  187. var bool = true;
  188. Ext.each(details, function(d){
  189. if(d.bd_soncode == code){
  190. bool = false;
  191. }
  192. });
  193. return bool;
  194. },
  195. getParentNode: function(tree, node){
  196. var o = null;
  197. Ext.each(tree, function(t){
  198. if(t.id == node.bd_mothercode){
  199. o = t;
  200. }
  201. });
  202. if(o == null){
  203. o = new Object();
  204. o.id = node.bd_mothercode;
  205. o.cls = "x-tree-cls-root";
  206. o.parentId = "0";
  207. o.bd_soncode = node.bd_mothercode;
  208. o.bd_sonname = node.bd_mothername;
  209. o.bd_sonspec = node.bd_motherspec;
  210. o.bs_node = 1;
  211. o.qtip = node.bd_mothercode;
  212. tree.push(o);
  213. }
  214. return o;
  215. }
  216. });