DocumentPowerTreeGrid.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /**
  2. * ERP项目gridpanel样式7:DocumentPower专用treegrid
  3. */
  4. Ext.define('erp.view.core.grid.DocumentPowerTreeGrid',{
  5. extend: 'Ext.tree.Panel',
  6. alias: 'widget.erpDocumentPowerTreeGrid',
  7. region: 'south',
  8. layout : 'fit',
  9. id: 'treegrid',
  10. emptyText : $I18N.common.grid.emptyText,
  11. useArrows: true,
  12. rootVisible: false,
  13. singleExpand: true,
  14. updateNodes: [],
  15. store: Ext.create('Ext.data.TreeStore', {
  16. fields: fields,
  17. root : {
  18. text: 'root',
  19. id: 'root',
  20. expanded: true
  21. }
  22. }),
  23. columns: columns,
  24. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  25. clicksToEdit: 1
  26. }),
  27. tbar: [{
  28. iconCls: 'tree-save',
  29. text: $I18N.common.button.erpSaveButton,
  30. handler: function(){
  31. var treegrid = Ext.getCmp('treegrid'),
  32. nodes = treegrid.store.tree.root.childNodes;
  33. Ext.each(nodes, function(){
  34. treegrid.checkChild(this);
  35. });
  36. treegrid.saveNode();
  37. }
  38. },{
  39. xtype: 'erpDistributeButton',
  40. disabled: false
  41. }],
  42. bodyStyle:'background-color:#f1f1f1;',
  43. initComponent : function(){
  44. Ext.override(Ext.data.AbstractStore,{
  45. indexOf: Ext.emptyFn
  46. });
  47. this.callParent(arguments);
  48. this.getTreeGridNode(0);
  49. },
  50. listeners: {//滚动条有时候没反应,添加此监听器
  51. scrollershow: function(scroller) {
  52. if (scroller && scroller.scrollEl) {
  53. scroller.clearManagedListeners();
  54. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  55. }
  56. }
  57. },
  58. getTreeGridNode: function(id){
  59. var me = this;
  60. var activeTab = me.getActiveTab();
  61. activeTab.setLoading(true);
  62. Ext.Ajax.request({//拿到tree数据
  63. url : basePath + 'common/singleGridPanel.action',
  64. params: {
  65. caller: caller,
  66. condition: "dcp_parentid=" + id
  67. },
  68. callback : function(options,success,response){
  69. var res = new Ext.decode(response.responseText);
  70. activeTab.setLoading(false);
  71. if(res.data){
  72. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  73. Ext.each(tree, function(d){
  74. d.powername = d.dcp_powername;
  75. d.isempower = d.dcp_isempower;
  76. d.id = d.dcp_id;
  77. d.parentId = d.dcp_parentid;
  78. d.cls = 'x-tree-cls-node';
  79. d.leaf = d.dcp_isleaf == 'T';
  80. if(!d.leaf){
  81. d.cls = 'x-tree-cls-root';
  82. }
  83. });
  84. me.store.setRootNode({
  85. text: 'root',
  86. id: 'root',
  87. expanded: true,
  88. children: tree
  89. });
  90. Ext.each(me.store.tree.root.childNodes, function(){
  91. this.dirty = false;
  92. });
  93. } else if(res.exceptionInfo){
  94. showError(res.exceptionInfo);
  95. }
  96. }
  97. });
  98. },
  99. checkChild: function(record){
  100. var me = this;
  101. if(!record.data['leaf']){
  102. if(record.childNodes.length > 0){
  103. Ext.each(record.childNodes, function(){
  104. me.checkChild(this);
  105. });
  106. }
  107. } else {
  108. if(record.dirty){
  109. me.updateNodes.push(record);
  110. }
  111. }
  112. },
  113. saveNode: function(){
  114. var me = this;
  115. me.getUpdateNodes();
  116. var update = new Array();
  117. var index = 0;
  118. Ext.each(me.updateNodes, function(){
  119. if(this.data.dcp_powername != null && this.data.dcp_powername != ''){
  120. var o = {
  121. dcp_id: this.data.dcp_id,
  122. dcp_powername: this.data.dcp_powername,
  123. dcp_parentid: this.data.dcp_parentid,
  124. dcp_isleaf: this.data.dcp_isleaf,
  125. dcp_isempower: this.data.dcp_isempower
  126. };
  127. update[index++] = Ext.JSON.encode(o);
  128. }
  129. });
  130. if(update.length > 0){
  131. var activeTab = me.getActiveTab();
  132. activeTab.setLoading(true);
  133. Ext.Ajax.request({
  134. url : basePath + 'ma/saveDocumentPower.action',
  135. params: {
  136. update: unescape(update.toString().replace(/\\/g,"%"))
  137. },
  138. callback : function(options,success,response){
  139. var res = new Ext.decode(response.responseText);
  140. activeTab.setLoading(false);
  141. if(res.success){
  142. me.updateNodes = [];
  143. me.getTreeGridNode(0);
  144. } else if(res.exceptionInfo){
  145. showError(res.exceptionInfo);
  146. }
  147. }
  148. });
  149. }
  150. },
  151. getExpandItem: function(root){
  152. var me = this;
  153. if(!root){
  154. root = this.store.tree.root;
  155. }
  156. var node = null;
  157. if(root.childNodes.length > 0){
  158. Ext.each(root.childNodes, function(){
  159. if(this.isExpanded()){
  160. node = this;
  161. if(this.childNodes.length > 0){
  162. var n = me.getExpandItem(this);
  163. node = n == null ? node : n;
  164. }
  165. }
  166. });
  167. }
  168. return node;
  169. },
  170. getUpdateNodes: function(root){
  171. var me = this;
  172. if(!root){
  173. root = this.store.tree.root;
  174. me.updateNodes = [];
  175. }
  176. if(root.childNodes.length > 0){
  177. Ext.each(root.childNodes, function(){
  178. if(this.dirty){
  179. if(this.data['dcp_id'] != null && this.data['dcp_id'] != ''){
  180. me.updateNodes.push(this);
  181. }
  182. }
  183. if(this.data['leaf'] == false && this.childNodes.length > 0){
  184. me.getUpdateNodes(this);
  185. }
  186. });
  187. } else {
  188. if(root.dirty){
  189. if(root.data['dcp_id'] != null && root.data['dcp_id'] != ''){
  190. me.updateNodes.push(root);
  191. }
  192. }
  193. }
  194. },
  195. getActiveTab: function(){
  196. var tab = null;
  197. if(Ext.getCmp("content-panel")){
  198. tab = Ext.getCmp("content-panel").getActiveTab();
  199. }
  200. if(!tab){
  201. var win = parent.Ext.ComponentQuery.query('window');
  202. if(win.length > 0){
  203. tab = win[win.length-1];
  204. }
  205. }
  206. if(!tab && parent.Ext.getCmp("content-panel"))
  207. tab = parent.Ext.getCmp("content-panel").getActiveTab();
  208. if(!tab && parent.parent.Ext.getCmp("content-panel"))
  209. tab = parent.parent.Ext.getCmp("content-panel").getActiveTab();
  210. return tab;
  211. }
  212. });