TreePanel.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. Ext.define('saas.view.sys.power.TreePanel', {
  2. extend: 'Ext.tree.Panel',
  3. xtype: 'sys-power-treepanel',
  4. dataUrl:'/api/account/role/list',
  5. deleteUrl:'/api/account/role/delete/',
  6. focusable:false,
  7. initComponent: function () {
  8. var me = this;
  9. me.store = Ext.create('Ext.data.TreeStore', {
  10. fields : ['name', 'id', 'description','code','type'],
  11. autoLoad:false,
  12. root : {
  13. text : 'Root',
  14. id : 0,
  15. expanded : true
  16. }
  17. }),
  18. me.columns =[{
  19. xtype: 'treecolumn',
  20. dataIndex: 'text',
  21. flex: 1
  22. }, {
  23. xtype: 'actioncolumn',
  24. width: 28,
  25. iconCls: 'x-hidden icon x-fa fa-plus',
  26. getClass: function(v, meta, rec) {
  27. if(rec.get('type')==0){
  28. return 'x-hidden icon x-fa fa-key';
  29. }else if(rec.get('leaf')){
  30. return 'x-hidden icon x-fa fa-pencil';
  31. }else{
  32. return 'x-hidden icon x-fa fa-plus';
  33. }
  34. },
  35. handler: function(treeview, rowIdx, colIdx, e) {
  36. var record = treeview.store.data.getAt(rowIdx);
  37. me.addItem(record);
  38. }
  39. }, {
  40. xtype: 'actioncolumn',
  41. width: 36,
  42. iconCls: 'x-hidden icon x-fa fa-trash-o',
  43. getClass: function(v, meta, rec) {
  44. if(rec.get('type')==0){
  45. return '';
  46. }else if(rec.get('leaf')){
  47. return 'x-hidden icon x-fa fa-trash-o';
  48. }else {
  49. return '';
  50. }
  51. },
  52. handler: function(treeview, rowIdx, colIdx, e) {
  53. var record = treeview.store.data.getAt(rowIdx);
  54. me.deleteItem(record);
  55. }
  56. }];
  57. me.setTree();
  58. me.callParent(arguments);
  59. },
  60. listeners: {
  61. itemmouseenter: function(th, record, item, index, e, eOpts) {
  62. var imgs = item.getElementsByClassName('icon x-fa');
  63. Ext.Array.each(imgs, function(img) {
  64. img.classList.remove('x-hidden');
  65. });
  66. },
  67. itemmouseleave: function(th, record, item, index, e, eOpts) {
  68. var imgs = item.getElementsByClassName('icon x-fa');
  69. Ext.Array.each(imgs, function(img) {
  70. img.classList.add('x-hidden');
  71. });
  72. },
  73. itemclick:function(view,record,index,d,e){
  74. if(!record.get('leaf')){
  75. return;
  76. }
  77. var classList = e.target.classList;
  78. var clickIcon = false;
  79. Ext.Array.each(classList, function(item) {
  80. if(item.indexOf('x-action-col')>-1){
  81. clickIcon = true;
  82. }
  83. });
  84. if(clickIcon){return;}
  85. //加载右边的grid
  86. var id = record.get('id');
  87. if(id&&id!=0){
  88. var grid = view.ownerCt.ownerCt.query('power-grid')[0];
  89. grid.initId = id;
  90. grid.store.load();
  91. if(record.get('type')==0){
  92. grid.dockedItems.items[1].down('[name=savepower]').setDisabled(true)
  93. }
  94. if(record.get('type')==1){
  95. grid.dockedItems.items[1].down('[name=savepower]').setDisabled(false)
  96. }
  97. }
  98. }
  99. },
  100. getData:function(){
  101. var me = this;
  102. var data = [];
  103. Ext.Ajax.request({
  104. url: me.dataUrl,
  105. params: '',
  106. method: 'GET',
  107. async:false,
  108. success: function(response, opts) {
  109. var _data = Ext.decode(response.responseText);
  110. if(_data&&_data.data){
  111. _data = _data.data;
  112. for (let index = 0; index < _data.length; index++) {
  113. var o = {
  114. code:_data[index].code,
  115. type:_data[index].type,
  116. id: _data[index].id,
  117. text: _data[index].name,
  118. name:_data[index].name,
  119. description:_data[index].description,
  120. leaf:true,
  121. iconCls: 'x-fa fa-user',
  122. }
  123. data.push(o);
  124. }
  125. }
  126. },
  127. failure: function(response, opts) {}
  128. });
  129. return data;
  130. },
  131. setTree:function(){
  132. var me = this;
  133. var data = me.getData();
  134. me.getStore().setRootNode({
  135. text: '角色列表',
  136. id: '0',
  137. iconCls: 'x-fa fa-list',
  138. expanded: true,
  139. children: data
  140. });
  141. },
  142. addItem:function(rec){
  143. var me=this;
  144. var isleaf = rec.get('leaf');
  145. var record = isleaf?rec:null;
  146. var view = this.ownerCt.getController().getView();
  147. this.dialog = view.add({
  148. xtype: 'sys-power-window',
  149. bind: {
  150. title: (record?'修改':'新增')+'角色'
  151. },
  152. _parent:this,
  153. record:record,
  154. session: true,
  155. });
  156. this.dialog.show();
  157. },
  158. deleteItem:function(rec){
  159. if(rec&&(rec.get('type')==0||!rec.get('leaf'))){
  160. return;
  161. }
  162. var me = this;
  163. saas.util.BaseUtil.deleteWarn('确定要删除该角色?',function(btn){
  164. if(btn == 'yes'){
  165. me.setLoading(true);
  166. saas.util.BaseUtil.request({
  167. url: me.deleteUrl + rec.get('id'),
  168. params: '',
  169. method: 'POST'
  170. })
  171. .then(function(localJson) {
  172. me.setLoading(false);
  173. if(localJson.success){
  174. saas.util.BaseUtil.showSuccessToast('删除成功');
  175. me.setTree();
  176. }
  177. })
  178. .catch(function(res) {
  179. me.setLoading(false);
  180. console.error(res);
  181. saas.util.BaseUtil.showErrorToast('删除失败: ' + res.message);
  182. });
  183. }
  184. });
  185. }
  186. });