TreePanel.js 7.3 KB

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