SysCheckTreeGrid.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. Ext.define('erp.view.ma.SysCheckTreeGrid',{
  2. extend: 'Ext.tree.Panel',
  3. alias: 'widget.erpSysCheckTreeGrid',
  4. region: 'south',
  5. layout : 'fit',
  6. id: 'treegrid',
  7. emptyText : $I18N.common.grid.emptyText,
  8. rootVisible: false,
  9. singleExpand: true,
  10. containerScroll : true,
  11. collapsible : true,
  12. autoScroll: true,
  13. store: Ext.create('Ext.data.TreeStore', {
  14. fields:[
  15. {
  16. type : 'int',
  17. name : 'orgid'
  18. },
  19. {
  20. type : 'string',
  21. name : 'orgname'
  22. },
  23. {
  24. type : 'int',
  25. name : 'warncount'
  26. },
  27. {
  28. type : 'int',
  29. name : 'publishcount'
  30. },
  31. {
  32. type : 'int',
  33. name : 'publishamountcount'
  34. },
  35. {
  36. type : 'string',
  37. name : 'orgheader'
  38. },
  39. {
  40. type : 'string',
  41. name : 'details'
  42. } ],
  43. root : {
  44. text: 'root',
  45. id: 'root',
  46. expanded: true
  47. }
  48. }),
  49. columns: [ {
  50. name : 'orgid',
  51. dataIndex : 'orgid',
  52. id : 'orgid',
  53. header : '组织ID',
  54. width : 0,
  55. cls : 'x-grid-header-1'
  56. }, {
  57. name : 'orgname',
  58. id : 'orgname',
  59. dataIndex : 'orgname',
  60. xtype:'treecolumn',
  61. header : '对象名称',
  62. flex:1,
  63. cls : 'x-grid-header-1'
  64. }, {
  65. name : 'warncount',
  66. id : 'warncount',
  67. dataIndex : 'warncount',
  68. header : '提醒总数',
  69. summaryType : 'sum',
  70. align:'center',
  71. cls : 'x-grid-header-1',
  72. }, {
  73. name : 'publishcount',
  74. id : 'publishcount',
  75. dataIndex : 'publishcount',
  76. header : '处罚总数',
  77. align:'center',
  78. summaryType : 'sum',
  79. cls : 'x-grid-header-1'
  80. }, {
  81. name : 'publishamountcount',
  82. id : 'publishamountcount',
  83. dataIndex : 'publishamountcount',
  84. header : '处罚分总数',
  85. align:'center',
  86. summaryType : 'sum',
  87. cls : 'x-grid-header-1'
  88. }, {
  89. name : 'orgheader',
  90. id : 'orgheader',
  91. dataIndex : 'orgheader',
  92. header : '组织负责人',
  93. cls : 'x-grid-header-1'
  94. }, {
  95. name : 'details',
  96. id : 'details',
  97. dataIndex : 'details',
  98. header : '详细信息',
  99. width:0,
  100. cls : 'x-grid-header-1'
  101. } ],
  102. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  103. clicksToEdit: 1
  104. }),
  105. bodyStyle:'background-color:#f1f1f1;',
  106. initComponent : function(){
  107. Ext.override(Ext.data.AbstractStore,{
  108. indexOf: Ext.emptyFn
  109. });
  110. this.getTreeGridNode();
  111. this.callParent(arguments);
  112. },
  113. listeners: {//滚动条有时候没反应,添加此监听器
  114. scrollershow: function(scroller) {
  115. if (scroller && scroller.scrollEl) {
  116. scroller.clearManagedListeners();
  117. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  118. }
  119. }
  120. },
  121. getTreeGridNode: function(condition){
  122. var me = this;
  123. var activeTab = me.getActiveTab();
  124. activeTab.setLoading(true);
  125. Ext.Ajax.request({//拿到tree数据
  126. url : basePath + 'ma/SysCheck/getTreeData.action',
  127. async: false,
  128. params: {
  129. condition: condition,
  130. parentid:0
  131. },
  132. callback : function(options,success,response){
  133. var res = new Ext.decode(response.responseText);
  134. activeTab.setLoading(false);
  135. if(res.data){
  136. var tree = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  137. /* Ext.each(tree, function(d){
  138. d.parentId = d.po_parentid;
  139. d.cls = 'x-tree-cls-node';
  140. d.leaf = d.po_isleaf == 'T';
  141. if(!d.leaf){
  142. d.cls = 'x-tree-cls-root';
  143. }
  144. });*/
  145. me.store.setRootNode({
  146. text: 'root',
  147. id: 'root',
  148. expanded: true,
  149. children: tree
  150. });
  151. Ext.each(me.store.tree.root.childNodes, function(){
  152. this.dirty = false;
  153. });
  154. } else if(res.exceptionInfo){
  155. showError(res.exceptionInfo);
  156. }
  157. }
  158. });
  159. },
  160. checkChild: function(record){
  161. var me = this;
  162. if(!record.data['leaf']){
  163. if(record.childNodes.length > 0){
  164. if(record.data['po_id'] == null || record.data['po_id'] == ''){
  165. warnMsg('如果在节点' + record.data['po_powername'] + '下添加子节点,需先保存该节点,是否保存?', function(btn){
  166. if(btn == 'yes'){
  167. if(items[0].data['po_powername'] == null || items[0].data['po_powername'] == ''){
  168. showError('请先描述该节点');
  169. return;
  170. } else {
  171. me.saveNodes.push(items[0]);
  172. me.saveNode();
  173. }
  174. } else if(btn == 'no'){
  175. return;
  176. }
  177. });
  178. }
  179. Ext.each(record.childNodes, function(){
  180. me.checkChild(this);
  181. });
  182. }
  183. } else {
  184. if(record.dirty){
  185. if(record.data['po_id'] == null || record.data['po_id'] == ''){
  186. me.saveNodes.push(record);
  187. } else {
  188. me.updateNodes.push(record);
  189. }
  190. }
  191. }
  192. },
  193. saveNode: function(){
  194. var me = this;
  195. me.getUpdateNodes();
  196. var save = new Array();
  197. var update = new Array();
  198. var index = 0;
  199. Ext.each(me.saveNodes, function(){
  200. if(this.data.po_powername != null && this.data.po_powername != ''){
  201. var o = {
  202. po_id: this.data.po_id,
  203. po_powername: this.data.po_powername,
  204. po_parentid: this.data.po_parentid,
  205. po_isleaf: this.data.po_isleaf,
  206. po_code: this.data.po_code
  207. };
  208. save[index++] = Ext.JSON.encode(o);
  209. }
  210. });
  211. index = 0;
  212. Ext.each(me.updateNodes, function(){
  213. if(this.data.po_powername != null && this.data.po_powername != ''){
  214. var o = {
  215. po_id: this.data.po_id,
  216. po_powername: this.data.po_powername,
  217. po_parentid: this.data.po_parentid,
  218. po_isleaf: this.data.po_isleaf,
  219. po_code: this.data.po_code
  220. };
  221. update[index++] = Ext.JSON.encode(o);
  222. }
  223. });
  224. if(save.length > 0 || update.length > 0){
  225. var activeTab = me.getActiveTab();
  226. activeTab.setLoading(true);
  227. Ext.Ajax.request({
  228. url : basePath + 'ma/savePower.action',
  229. params: {
  230. save: unescape(save.toString().replace(/\\/g,"%")),
  231. update: unescape(update.toString().replace(/\\/g,"%"))
  232. },
  233. callback : function(options,success,response){
  234. var res = new Ext.decode(response.responseText);
  235. activeTab.setLoading(false);
  236. if(res.success){
  237. me.saveNodes = [];
  238. me.updateNodes = [];
  239. me.getTreeGridNode(0);
  240. } else if(res.exceptionInfo){
  241. showError(res.exceptionInfo);
  242. }
  243. }
  244. });
  245. }
  246. },
  247. getExpandItem: function(root){
  248. var me = this;
  249. if(!root){
  250. root = this.store.tree.root;
  251. }
  252. var node = null;
  253. if(root.childNodes.length > 0){
  254. Ext.each(root.childNodes, function(){
  255. if(this.isExpanded()){
  256. node = this;
  257. if(this.childNodes.length > 0){
  258. var n = me.getExpandItem(this);
  259. node = n == null ? node : n;
  260. }
  261. }
  262. });
  263. }
  264. return node;
  265. },
  266. deleteNode: function(record){
  267. var me = this;
  268. if(record){
  269. var activeTab = me.getActiveTab();
  270. activeTab.setLoading(true);
  271. Ext.Ajax.request({
  272. url : basePath + 'ma/deletePower.action',
  273. params: {
  274. id: Number(record.data['po_id'])
  275. },
  276. callback : function(options,success,response){
  277. var res = new Ext.decode(response.responseText);
  278. activeTab.setLoading(false);
  279. if(res.success){
  280. record.remove(true);
  281. } else if(res.exceptionInfo){
  282. showError(res.exceptionInfo);
  283. }
  284. }
  285. });
  286. }
  287. },
  288. getUpdateNodes: function(root){
  289. var me = this;
  290. if(!root){
  291. root = this.store.tree.root;
  292. me.updateNodes = [];
  293. }
  294. if(root.childNodes.length > 0){
  295. Ext.each(root.childNodes, function(){
  296. if(this.dirty){
  297. if(this.data['po_id'] != null && this.data['po_id'] != ''){
  298. me.updateNodes.push(this);
  299. }
  300. }
  301. if(this.data['leaf'] == false && this.childNodes.length > 0){
  302. me.getUpdateNodes(this);
  303. }
  304. });
  305. } else {
  306. if(root.dirty){
  307. if(root.data['po_id'] != null && root.data['po_id'] != ''){
  308. me.updateNodes.push(root);
  309. }
  310. }
  311. }
  312. },
  313. getActiveTab: function(){
  314. var tab = null;
  315. if(Ext.getCmp("content-panel")){
  316. tab = Ext.getCmp("content-panel").getActiveTab();
  317. }
  318. if(!tab){
  319. var win = parent.Ext.ComponentQuery.query('window');
  320. if(win.length > 0){
  321. tab = win[win.length-1];
  322. }
  323. }
  324. if(!tab && parent.Ext.getCmp("content-panel"))
  325. tab = parent.Ext.getCmp("content-panel").getActiveTab();
  326. if(!tab && parent.parent.Ext.getCmp("content-panel"))
  327. tab = parent.parent.Ext.getCmp("content-panel").getActiveTab();
  328. return tab;
  329. }
  330. });