JCTreeGrid.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. /**
  2. * ERP项目gridpanel样式5:sysNavigation专用treegrid
  3. */
  4. Ext.define('erp.view.common.JProcessDeploy.JCTreeGrid',{
  5. extend: 'Ext.tree.Panel',
  6. alias: 'widget.erpJCTreeGrid',
  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. saveNodes: [],
  15. updateNodes: [],
  16. deleteNodes: [],
  17. store: Ext.create('Ext.data.TreeStore', {
  18. fields: [{"name":"jd_selfId","type":"string"},
  19. {"name":"jd_classifiedName","type":"string"},
  20. {"name":"jd_parentId","type":"string"},
  21. {"name":"jd_formUrl","type":"string"},
  22. {"name":"jd_caller","type":"string"},
  23. {"name":"jd_processDefinitionId","type":"string"},
  24. {"name":"jd_processDefinitionName","type":"string"},
  25. {"name":"jd_processDescription","type":"string",},
  26. {"name":"jd_enabled","type":"boolean"}],
  27. root : {
  28. text: 'root',
  29. id: 'root',
  30. expanded: true
  31. }
  32. }),
  33. columns : [ {
  34. "header" : "ID",
  35. "dbfind" : "",
  36. "cls" : "x-grid-header-1",
  37. "summaryType" : "",
  38. "dataIndex" : "jd_selfId",
  39. "align" : "left",
  40. "xtype" : "treecolumn",
  41. "readOnly" : false,
  42. "hidden" : true,
  43. "text" : "ID"
  44. }, {
  45. "header" : "流程类别",
  46. "dbfind" : "",
  47. "cls" : "x-grid-header-1",
  48. "summaryType" : "",
  49. "dataIndex" : "jd_classifiedName",
  50. "align" : "left",
  51. "xtype" : "treecolumn",
  52. "readOnly" : false,
  53. "hidden" : false,
  54. "width" : 280.0,
  55. "text" : "流程类别",
  56. "editor" : {
  57. "xtype" : "textfield"
  58. }
  59. }, {
  60. "header" : "父节点ID",
  61. "dbfind" : "",
  62. "cls" : "x-grid-header-1",
  63. "summaryType" : "",
  64. "dataIndex" : "jd_parentId",
  65. "align" : "left",
  66. "xtype" : "treecolumn",
  67. "readOnly" : false,
  68. "hidden" : true,
  69. "width" : 0.0,
  70. "text" : "父节点ID"
  71. }, {
  72. "header" : "表单路径",
  73. "dbfind" : "",
  74. "cls" : "x-grid-header-1",
  75. "summaryType" : "",
  76. "dataIndex" : "jd_formUrl",
  77. "align" : "left",
  78. "readOnly" : false,
  79. "hidden" : false,
  80. "width" : 280.0,
  81. "text" : "表单路径",
  82. "editor" : {
  83. "xtype" : "textfield"
  84. }
  85. }, {
  86. "header" : "对应Caller",
  87. "dbfind" : "",
  88. "cls" : "x-grid-header-1",
  89. "summaryType" : "",
  90. "dataIndex" : "jd_caller",
  91. "align" : "left",
  92. "readOnly" : false,
  93. "hidden" : false,
  94. "width" : 150.0,
  95. "text" : "对应Caller",
  96. "editor" : {
  97. "xtype" : "textfield"
  98. }
  99. }, {
  100. "header" : "流程定义ID",
  101. "dbfind" : "",
  102. "cls" : "x-grid-header-1",
  103. "summaryType" : "",
  104. "dataIndex" : "jd_processDefinitionId",
  105. "align" : "left",
  106. //"xtype" : "checkcolumn",
  107. "readOnly" : false,
  108. "hidden" : false,
  109. "width" : 80.0,
  110. "text" : "流程定义ID",
  111. "editor" : {
  112. ///"cls" : "x-grid-checkheader-editor",
  113. //"xtype" : "checkbox"
  114. "xtype" : "textfield"
  115. }
  116. }, {
  117. "header" : "流程名称",
  118. "dbfind" : "",
  119. "cls" : "x-grid-header-1",
  120. "summaryType" : "",
  121. "dataIndex" : "jd_processDefinitionName",
  122. "align" : "right",
  123. "readOnly" : false,
  124. "hidden" : false,
  125. "width" : 80.0,
  126. "text" : "流程名称",
  127. "editor" : {
  128. "xtype" : "textfield"
  129. /*"cls" : "x-grid-checkheader-editor",
  130. "xtype" : "combo",
  131. "store" : Ext.create('Ext.data.Store', {
  132. fields : [ 'display', 'value' ],
  133. data : [ {
  134. "display" : "选项卡模式",
  135. "value" : 0
  136. }, {
  137. "display" : "弹出框式",
  138. "value" : 1
  139. }, {
  140. "display" : "空白页",
  141. "value" : 2
  142. }, {
  143. "display" : "窗口模式",
  144. "value" : 3
  145. } ]
  146. }),
  147. "displayField" : 'display',
  148. "valueField" : 'value',
  149. "queryMode" : 'local',
  150. "value" : 0*/
  151. }/*,*/
  152. /*"renderer" : function(val){
  153. var rVal = "选项卡模式";
  154. val = val || 0;
  155. switch (Number(val)) {
  156. case 0:
  157. rVal = "选项卡模式";break;
  158. case 1:
  159. rVal = "弹出框式";break;
  160. case 2:
  161. rVal = "空白页";break;
  162. case 3:
  163. rVal = "窗口模式";break;
  164. }
  165. return rVal;
  166. }*/
  167. }, {
  168. "header" : "流程描述",
  169. "dbfind" : "",
  170. "cls" : "x-grid-header-1",
  171. "summaryType" : "",
  172. "dataIndex" : "jd_processDescription",
  173. "align" : "left",
  174. //"xtype" : "checkcolumn",
  175. "readOnly" : false,
  176. "hidden" : false,
  177. "width" : 90.0,
  178. "text" : "流程描述",
  179. "editor" : {
  180. "xtype":"textfield"
  181. //"cls" : "x-grid-checkheader-editor",
  182. //"xtype" : "checkbox"
  183. }
  184. }, {
  185. "header" : "是否启用",
  186. "dbfind" : "",
  187. "cls" : "x-grid-header-1",
  188. "summaryType" : "",
  189. "dataIndex" : "jd_enabled",
  190. "align" : "left",
  191. "xtype" : "checkcolumn",
  192. "readOnly" : false,
  193. "hidden" : false,
  194. "width" : 70.0,
  195. "text" : "是否启用",
  196. "editor" : {
  197. "cls" : "x-grid-checkheader-editor",
  198. "xtype" : "checkbox"
  199. }
  200. } ],
  201. /* plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  202. clicksToEdit: 1
  203. }),*/
  204. tbar: [{
  205. iconCls: 'tree-add',
  206. text: $I18N.common.button.erpAddButton,
  207. handler: function(){
  208. var treegrid = Ext.getCmp('treegrid');
  209. var items = treegrid.selModel.selected.items;
  210. if(items.length > 0 && items[0].isLeaf() == true){
  211. if(items[0].data['sn_id'] == null || items[0].data['sn_id'] == ''){
  212. warnMsg('如果在该节点下添加子节点,需先保存该节点,是否保存?', function(btn){
  213. if(btn == 'yes'){
  214. if(items[0].data['sn_displayname'] == null || items[0].data['sn_displayname'] == ''){
  215. showError('请先描述该节点');
  216. return;
  217. } else {
  218. items[0].data['leaf'] = false;
  219. items[0].data['cls'] = 'x-tree-cls-parent';
  220. items[0].data['sn_isleaf'] = false;
  221. treegrid.saveNodes.push(items[0]);
  222. treegrid.saveNode();
  223. }
  224. } else if(btn == 'no'){
  225. return;
  226. }
  227. });
  228. } else {
  229. items[0].data['leaf'] = false;
  230. items[0].data['cls'] = 'x-tree-cls-parent';
  231. items[0].data['sn_isleaf'] = false;
  232. items[0].dirty = true;
  233. var o = {
  234. sn_parentid: items[0].data['sn_id'],
  235. sn_isleaf: true,
  236. cls: "x-tree-cls-node",
  237. parentId: items[0].data['sn_id'],
  238. leaf: true,
  239. sn_deleteable: true,
  240. deleteable: true,
  241. allowDrag: true,
  242. showMode: 0
  243. };
  244. items[0].appendChild(o);
  245. items[0].expand(true);
  246. }
  247. } else {
  248. var record = treegrid.getExpandItem();
  249. if(record){
  250. var o = {
  251. sn_parentid: record.data['sn_id'],
  252. sn_isleaf: true,
  253. cls: "x-tree-cls-node",
  254. parentId: record.data['sn_id'],
  255. sn_deleteable: true,
  256. deleteable: true,
  257. leaf: true,
  258. allowDrag: true,
  259. showMode: 0
  260. };
  261. record.appendChild(o);
  262. }
  263. }
  264. }
  265. },{
  266. iconCls: 'tree-delete',
  267. text: $I18N.common.button.erpDeleteButton,
  268. handler: function(){
  269. var treegrid = Ext.getCmp('treegrid');
  270. var items = treegrid.selModel.selected.items;
  271. if(items.length > 0){
  272. if(items[0].isLeaf() == true){
  273. if(items[0].data['sn_id'] != null && items[0].data['sn_id'] != ''){
  274. if(items[0].data['sn_deleteable'] == true){
  275. warnMsg('确定删除节点[' + items[0].data['sn_displayname'] + "]?", function(btn){
  276. if(btn == 'yes'){
  277. treegrid.deleteNode(items[0]);
  278. } else if(btn == 'no'){
  279. return;
  280. }
  281. });
  282. } else {
  283. showError('该节点不允许删除!');
  284. }
  285. } else {
  286. items[0].remove(true);
  287. }
  288. } else {
  289. if(items[0].data['sn_id'] != null || items[0].data['sn_id'] != ''){
  290. if(items[0].data['sn_deleteable'] == true){
  291. Ext.each(items[0].childNodes, function(){
  292. if(this.data['sn_deleteable'] == false){
  293. showError('该节点有不可删除子节点,无法删除该节点!');
  294. return;
  295. }
  296. });
  297. warnMsg('确定删除节点[' + items[0].data['sn_displayname'] + ']及其子节点?', function(btn){
  298. if(btn == 'yes'){
  299. treegrid.deleteNode(items[0]);
  300. } else if(btn == 'no'){
  301. return;
  302. }
  303. });
  304. } else {
  305. showError('该节点不允许删除!');
  306. }
  307. } else {
  308. items[0].remove(true);
  309. }
  310. }
  311. } else {
  312. var record = treegrid.getExpandItem();
  313. if(record){
  314. if(record.childNodes.length == 0){
  315. if(record.data['sn_id'] != null && record.data['sn_id'] != ''){
  316. if(record.data['sn_deleteable'] == true){
  317. warnMsg('确定删除节点[' + record.data['sn_displayname'] + ']?', function(btn){
  318. if(btn == 'yes'){
  319. treegrid.deleteNode(record);
  320. } else if(btn == 'no'){
  321. return;
  322. }
  323. });
  324. } else {
  325. showError('该节点不允许删除!');
  326. }
  327. } else {
  328. record.remove(true);
  329. }
  330. }
  331. }
  332. }
  333. }
  334. },{
  335. iconCls: 'tree-save',
  336. text: $I18N.common.button.erpSaveButton,
  337. handler: function(){
  338. var treegrid = Ext.getCmp('treegrid'),
  339. nodes = treegrid.store.tree.root.childNodes;
  340. treegrid.saveNodes = [];
  341. Ext.each(nodes, function(){
  342. treegrid.checkChild(this);
  343. });
  344. treegrid.saveNode();
  345. }
  346. },'->',{
  347. xtype:'dbfindtrigger',
  348. fieldLabel:'选择类别',
  349. id:'classify',
  350. name:'classify'
  351. },{
  352. xtype:'textfield',
  353. fieldLabel:'类别id',
  354. hidden: true,
  355. id:'classifyid'
  356. },{
  357. iconCls: 'tree-save',
  358. text: '移动',
  359. id: 'move',
  360. listeners: {
  361. afterrender: function(btn){
  362. btn.setDisabled(true);
  363. },
  364. click: function(){
  365. var treegrid = Ext.getCmp('treegrid');
  366. var items = treegrid.selModel.selected.items;
  367. if(items.length > 0 && items[0].isLeaf() == true){
  368. if(Ext.getCmp('classifyid').value == null || Ext.getCmp('classifyid').value == ''){
  369. return showError('请先指定类别');
  370. }
  371. if(Ext.getCmp('classifyid').value == items[0].data.jd_parentId){
  372. return showError('已经在当前类别下,无需移动');
  373. }
  374. console.log(items);
  375. // alert(items[0].data.id);
  376. var id = items[0].data.id;
  377. Ext.Ajax.request({//拿到tree数据
  378. url : basePath + 'common/updateClassify.action',
  379. params: {
  380. parentid: Ext.getCmp('classifyid').value,
  381. id: id
  382. },
  383. callback : function(options,success,response){
  384. var res = new Ext.decode(response.responseText);
  385. if(res.success){
  386. window.location.href = window.location.href;
  387. } else if(res.exceptionInfo){
  388. showError(res.exceptionInfo);
  389. }
  390. }
  391. });
  392. }
  393. }
  394. }
  395. },'->'
  396. ],
  397. bodyStyle:'background-color:#f1f1f1;',
  398. initComponent : function(){
  399. Ext.override(Ext.data.AbstractStore,{
  400. indexOf: Ext.emptyFn
  401. });
  402. this.callParent(arguments);
  403. this.getTreeGridNode({parentId: 0});
  404. },
  405. listeners: {//滚动条有时候没反应,添加此监听器
  406. scrollershow: function(scroller) {
  407. if (scroller && scroller.scrollEl) {
  408. scroller.clearManagedListeners();
  409. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  410. }
  411. }
  412. },
  413. getTreeGridNode: function(param){
  414. var me = this;
  415. var activeTab = me.getActiveTab();
  416. activeTab.setLoading(true);
  417. Ext.Ajax.request({//拿到tree数据
  418. url : basePath + 'common/getLazyJProcessDeploy.action',
  419. params: param,
  420. callback : function(options,success,response){
  421. var res = new Ext.decode(response.responseText);
  422. activeTab.setLoading(false);
  423. if(res.tree){
  424. var tree = res.tree;
  425. Ext.each(tree, function(t){
  426. t.jd_selfId = t.id;
  427. t.jd_parentId = t.parentId;
  428. t.jd_classifiedName = t.text;
  429. // t.sn_isleaf = t.leaf;
  430. t.jd_caller = t.creator;
  431. t.jd_formUrl = t.url;
  432. t.jd_processDefinitionId = t.qtitle;
  433. t.jd_enabled = t.using;
  434. t.jd_processDefinitionName = t.version;
  435. });
  436. me.store.setRootNode({
  437. text: 'root',
  438. id: 'root',
  439. expanded: true,
  440. children: tree
  441. });
  442. Ext.each(me.store.tree.root.childNodes, function(){
  443. this.dirty = false;
  444. });
  445. } else if(res.exceptionInfo){
  446. showError(res.exceptionInfo);
  447. }
  448. }
  449. });
  450. },
  451. checkChild: function(record){
  452. var me = this;
  453. if(!record.data['leaf']){
  454. if(record.childNodes.length > 0){
  455. if(record.data['sn_id'] == null || record.data['sn_id'] == ''){
  456. warnMsg('如果在节点' + record.data['sn_id'] + '下添加子节点,需先保存该节点,是否保存?', function(btn){
  457. if(btn == 'yes'){
  458. if(items[0].data['sn_displayname'] == null || items[0].data['sn_displayname'] == ''){
  459. showError('请先描述该节点');
  460. return;
  461. } else {
  462. me.saveNodes.push(items[0]);
  463. me.saveNode();
  464. }
  465. } else if(btn == 'no'){
  466. return;
  467. }
  468. });
  469. }
  470. Ext.each(record.childNodes, function(){
  471. me.checkChild(this);
  472. });
  473. }
  474. } else {
  475. if(record.dirty){
  476. if(record.data['sn_id'] == null || record.data['sn_id'] == ''){
  477. me.saveNodes.push(record);
  478. } else {
  479. me.updateNodes.push(record);
  480. }
  481. }
  482. }
  483. },
  484. saveNode: function(){
  485. var me = this;
  486. me.getUpdateNodes();
  487. var save = new Array();
  488. var update = new Array();
  489. var index = 0;
  490. Ext.each(me.saveNodes, function(){
  491. if(this.data.sn_displayname != null && this.data.sn_displayname != ''){
  492. if(this.data.sn_tabtitle == null || this.data.sn_tabtitle == ''){
  493. this.data.sn_tabtitle == this.data.sn_displayname;
  494. }
  495. if(this.data.sn_deleteable == null || this.data.sn_deleteable == ''){
  496. this.data.sn_deleteable == 'T';
  497. }
  498. var o = {
  499. sn_id: this.data.sn_id,
  500. sn_displayname: this.data.sn_displayname,
  501. sn_url: this.data.sn_url,
  502. sn_isleaf: this.data.sn_isleaf ? 'T' : 'F',
  503. sn_tabtitle: this.data.sn_tabtitle,
  504. sn_parentid: this.data.sn_parentid,
  505. sn_deleteable: this.data.sn_deleteable ? 'T' : 'F',
  506. sn_using: this.data.sn_using ? 1 : 0,
  507. sn_showmode: this.data.sn_showmode
  508. };
  509. save[index++] = Ext.JSON.encode(o);
  510. }
  511. });
  512. index = 0;
  513. Ext.each(me.updateNodes, function(){
  514. if(this.data.sn_displayname != null && this.data.sn_displayname != ''){
  515. if(this.data.sn_tabtitle == null || this.data.sn_tabtitle == ''){
  516. this.data.sn_tabtitle == this.data.sn_displayname;
  517. }
  518. if(this.data.sn_deleteable == null || this.data.sn_deleteable == ''){
  519. this.data.sn_deleteable == 'T';
  520. }
  521. var o = {
  522. sn_id: this.data.sn_id,
  523. sn_displayname: this.data.sn_displayname,
  524. sn_url: this.data.sn_url,
  525. sn_isleaf: this.data.sn_isleaf ? 'T' : 'F',
  526. sn_tabtitle: this.data.sn_tabtitle,
  527. sn_parentid: this.data.sn_parentid,
  528. sn_deleteable: this.data.sn_deleteable ? 'T' : 'F',
  529. sn_using: this.data.sn_using ? 1 : 0,
  530. sn_showmode: this.data.sn_showmode
  531. };
  532. update[index++] = Ext.JSON.encode(o);
  533. }
  534. });
  535. if(save.length > 0 || update.length > 0){
  536. var activeTab = me.getActiveTab();
  537. activeTab.setLoading(true);
  538. Ext.Ajax.request({
  539. url : basePath + 'ma/saveSysNavigation.action',
  540. params: {
  541. save: unescape(save.toString().replace(/\\/g,"%")),
  542. update: unescape(update.toString().replace(/\\/g,"%"))
  543. },
  544. callback : function(options,success,response){
  545. var res = new Ext.decode(response.responseText);
  546. activeTab.setLoading(false);
  547. if(res.success){
  548. me.saveNodes = [];
  549. me.updateNodes = [];
  550. me.getTreeGridNode({parentId: 0});
  551. } else if(res.exceptionInfo){
  552. showError(res.exceptionInfo);
  553. }
  554. }
  555. });
  556. }
  557. },
  558. getExpandItem: function(root){
  559. var me = this;
  560. if(!root){
  561. root = this.store.tree.root;
  562. }
  563. var node = null;
  564. if(root.childNodes.length > 0){
  565. Ext.each(root.childNodes, function(){
  566. if(this.isExpanded()){
  567. node = this;
  568. if(this.childNodes.length > 0){
  569. var n = me.getExpandItem(this);
  570. node = n == null ? node : n;
  571. }
  572. }
  573. });
  574. }
  575. return node;
  576. },
  577. deleteNode: function(record){
  578. var me = this;
  579. if(record){
  580. var activeTab = me.getActiveTab();
  581. activeTab.setLoading(true);
  582. Ext.Ajax.request({
  583. url : basePath + 'ma/deleteSysNavigation.action',
  584. params: {
  585. id: Number(record.data['sn_id'])
  586. },
  587. callback : function(options,success,response){
  588. var res = new Ext.decode(response.responseText);
  589. activeTab.setLoading(false);
  590. if(res.success){
  591. record.remove(true);
  592. } else if(res.exceptionInfo){
  593. showError(res.exceptionInfo);
  594. }
  595. }
  596. });
  597. }
  598. },
  599. getUpdateNodes: function(root){
  600. var me = this;
  601. if(!root){
  602. root = this.store.tree.root;
  603. me.updateNodes = [];
  604. }
  605. if(root.childNodes.length > 0){
  606. Ext.each(root.childNodes, function(){
  607. if(this.dirty){
  608. if(this.data['sn_id'] != null && this.data['sn_id'] != ''){
  609. me.updateNodes.push(this);
  610. }
  611. }
  612. if(this.data['leaf'] == false && this.childNodes.length > 0){
  613. me.getUpdateNodes(this);
  614. }
  615. });
  616. } else {
  617. if(root.dirty){
  618. if(root.data['sn_id'] != null && root.data['sn_id'] != ''){
  619. me.updateNodes.push(root);
  620. }
  621. }
  622. }
  623. },
  624. getActiveTab: function(){
  625. var tab = null;
  626. if(Ext.getCmp("content-panel")){
  627. tab = Ext.getCmp("content-panel").getActiveTab();
  628. }
  629. if(!tab){
  630. var win = parent.Ext.ComponentQuery.query('window');
  631. if(win.length > 0){
  632. tab = win[win.length-1];
  633. }
  634. }
  635. if(!tab && parent.Ext.getCmp("content-panel"))
  636. tab = parent.Ext.getCmp("content-panel").getActiveTab();
  637. if(!tab && parent.parent.Ext.getCmp("content-panel"))
  638. tab = parent.parent.Ext.getCmp("content-panel").getActiveTab();
  639. return tab;
  640. },
  641. /**
  642. * treegrid用到了checkcolumn时,由于其store的差异,根据recordIndex不能直接得到record,
  643. * 采用下面的方法可以在点击checkbox时,得到当前的record,再进而就可以修改checkbox的check属性等...
  644. */
  645. getRecordByRecordIndex: function(recordIndex, node){
  646. var me = this;
  647. if(!node){
  648. node = this.store.tree.root;
  649. me.findIndex = 0;
  650. me.findRecord = null;
  651. }
  652. if(me.findRecord == null){
  653. if(node.childNodes.length > 0 && node.isExpanded()){
  654. Ext.each(node.childNodes, function(){
  655. if(me.findIndex == recordIndex){
  656. me.findRecord = this;
  657. me.findIndex++;
  658. } else {
  659. me.findIndex++;
  660. me.getRecordByRecordIndex(recordIndex, this);
  661. }
  662. });
  663. } else {
  664. if(me.findIndex == recordIndex){
  665. me.findRecord = node;
  666. }
  667. }
  668. }
  669. },
  670. checkRecord: function(record, dataIndex, checked){
  671. var me = this;
  672. if(record.childNodes.length > 0){
  673. Ext.each(record.childNodes, function(){
  674. this.set(dataIndex, checked);
  675. me.checkRecord(this, dataIndex, checked);
  676. });
  677. }
  678. }
  679. });