GroupGrid.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. /**
  2. * Created by zhouy on 2018/11/8.
  3. */
  4. Ext.define('saas.view.sys.power.GroupGrid', {
  5. extend: 'Ext.grid.Panel',
  6. xtype: 'power-grid',
  7. bind:{
  8. store: '{powergrid}'
  9. },
  10. tbar:['->',{
  11. xtype:'button',
  12. text:'保存',
  13. name:'savepower',
  14. margin:'0 10 0 2',
  15. style:'background:#34baf6;border-color:#cccccc'
  16. }],
  17. features : [Ext.create('Ext.grid.feature.Grouping',{
  18. collapseTip:null,
  19. collapsible:false,
  20. expandTip:null,
  21. showSummaryRow: false,
  22. startCollapsed: false,
  23. groupHeaderTpl: '{name}'+'模块'
  24. })],
  25. initId:0,
  26. dataUrl:'/api/account/role/power/resource',
  27. selModel: {
  28. showHeaderCheckbox:false,
  29. checkOnly:true,
  30. type:'checkboxmodel',
  31. listeners:{
  32. select:function(selModel,record,c,d){
  33. selModel.view.ownerCt.selectAllPower(record);
  34. },
  35. deselect:function(selModel,record){
  36. selModel.view.ownerCt.deselectAllPower(record);
  37. }
  38. }
  39. },
  40. viewConfig: {
  41. stripeRows: false,
  42. enableTextSelection: false,
  43. markDirty: false
  44. },
  45. trackMouseOver: false,
  46. columns: [{
  47. header: '单据名称',
  48. dataIndex: 'groupName',
  49. xtype: '',
  50. flex: 2,
  51. stopSelection: false,
  52. menuDisabled:true,
  53. },{
  54. header: '查询',
  55. dataIndex: 'query',
  56. xtype: 'checkcolumn',
  57. headerCheckbox: true,
  58. menuDisabled:true,
  59. flex: 1,
  60. stopSelection: false,
  61. onTitleElClick:function(a,b,c,d){
  62. var me = this;
  63. var records = me.ownerCt.ownerCt.store.data.items;
  64. var first = 'null',isAllCheck = true;
  65. Ext.Array.each(records,function(rec){
  66. var data = rec.get('query');
  67. if(data!=null&&(typeof data)=='boolean'){
  68. if(first=='null'){
  69. first = data;
  70. }else{
  71. if(first!=data){
  72. isAllCheck = false
  73. }
  74. }
  75. rec.set('query',!data)
  76. }
  77. });
  78. if(isAllCheck){
  79. me.setHeaderStatus(!first)
  80. }
  81. },
  82. doUpdateHeaderState: function(e) {
  83. return true;
  84. }
  85. }, {
  86. header: '保存',
  87. dataIndex: 'add',
  88. xtype: 'checkcolumn',
  89. headerCheckbox: true,
  90. menuDisabled:true,
  91. flex: 1,
  92. stopSelection: false,
  93. onTitleElClick:function(a,b,c,d){
  94. var me = this;
  95. var records = me.ownerCt.ownerCt.store.data.items;
  96. var first = 'null',isAllCheck = true;
  97. Ext.Array.each(records,function(rec){
  98. var data = rec.get('add');
  99. if(data!=null&&(typeof data)=='boolean'){
  100. if(first=='null'){
  101. first = data;
  102. }else{
  103. if(first!=data){
  104. isAllCheck = false
  105. }
  106. }
  107. rec.set('add',!data)
  108. }
  109. });
  110. if(isAllCheck){
  111. me.setHeaderStatus(!first)
  112. }
  113. },
  114. doUpdateHeaderState: function(e) {
  115. return true;
  116. }
  117. }, {
  118. header: '删除',
  119. dataIndex: 'delete',
  120. xtype: 'checkcolumn',
  121. headerCheckbox: true,
  122. menuDisabled:true,
  123. flex: 1,
  124. stopSelection: false,
  125. onTitleElClick:function(a,b,c,d){
  126. var me = this;
  127. var records = me.ownerCt.ownerCt.store.data.items;
  128. var first = 'null',isAllCheck = true;
  129. Ext.Array.each(records,function(rec){
  130. var data = rec.get('delete');
  131. if(data!=null&&(typeof data)=='boolean'){
  132. if(first=='null'){
  133. first = data;
  134. }else{
  135. if(first!=data){
  136. isAllCheck = false
  137. }
  138. }
  139. rec.set('delete',!data)
  140. }
  141. });
  142. if(isAllCheck){
  143. me.setHeaderStatus(!first)
  144. }
  145. },
  146. doUpdateHeaderState: function(e) {
  147. return true;
  148. }
  149. }, {
  150. header: '审核',
  151. dataIndex: 'audit',
  152. xtype: 'checkcolumn',
  153. headerCheckbox: true,
  154. menuDisabled:true,
  155. flex: 1,
  156. stopSelection: false,
  157. onTitleElClick:function(a,b,c,d){
  158. var me = this;
  159. var records = me.ownerCt.ownerCt.store.data.items;
  160. var first = 'null',isAllCheck = true;
  161. Ext.Array.each(records,function(rec){
  162. var data = rec.get('audit');
  163. if(data!=null&&(typeof data)=='boolean'){
  164. if(first=='null'){
  165. first = data;
  166. }else{
  167. if(first!=data){
  168. isAllCheck = false
  169. }
  170. }
  171. rec.set('audit',!data)
  172. }
  173. });
  174. if(isAllCheck){
  175. me.setHeaderStatus(!first)
  176. }
  177. },
  178. doUpdateHeaderState: function(e) {
  179. return true;
  180. }
  181. }, {
  182. header: '反审核',
  183. dataIndex: 'unAudit',
  184. xtype: 'checkcolumn',
  185. headerCheckbox: true,
  186. menuDisabled:true,
  187. flex: 1,
  188. stopSelection: false,
  189. onTitleElClick:function(a,b,c,d){
  190. var me = this;
  191. var records = me.ownerCt.ownerCt.store.data.items;
  192. var first = 'null',isAllCheck = true;
  193. Ext.Array.each(records,function(rec){
  194. var data = rec.get('unAudit');
  195. if(data!=null&&(typeof data)=='boolean'){
  196. if(first=='null'){
  197. first = data;
  198. }else{
  199. if(first!=data){
  200. isAllCheck = false
  201. }
  202. }
  203. rec.set('unAudit',!data)
  204. }
  205. });
  206. if(isAllCheck){
  207. me.setHeaderStatus(!first)
  208. }
  209. },
  210. doUpdateHeaderState: function(e) {
  211. return true;
  212. }
  213. }, {
  214. header: '导入',
  215. dataIndex: 'fileImport',
  216. xtype: 'checkcolumn',
  217. headerCheckbox: true,
  218. menuDisabled:true,
  219. flex: 1,
  220. stopSelection: false,
  221. onTitleElClick:function(a,b,c,d){
  222. var me = this;
  223. var records = me.ownerCt.ownerCt.store.data.items;
  224. var first = 'null',isAllCheck = true;
  225. Ext.Array.each(records,function(rec){
  226. var data = rec.get('fileImport');
  227. if(data!=null&&(typeof data)=='boolean'){
  228. if(first=='null'){
  229. first = data;
  230. }else{
  231. if(first!=data){
  232. isAllCheck = false
  233. }
  234. }
  235. rec.set('fileImport',!data)
  236. }
  237. });
  238. if(isAllCheck){
  239. me.setHeaderStatus(!first)
  240. }
  241. },
  242. doUpdateHeaderState: function(e) {
  243. return true;
  244. }
  245. }, {
  246. header: '导出',
  247. dataIndex: 'fileExport',
  248. xtype: 'checkcolumn',
  249. headerCheckbox: true,
  250. menuDisabled:true,
  251. flex: 1,
  252. stopSelection: false,
  253. onTitleElClick:function(a,b,c,d){
  254. var me = this;
  255. var records = me.ownerCt.ownerCt.store.data.items;
  256. var first = 'null',isAllCheck = true;
  257. Ext.Array.each(records,function(rec){
  258. var data = rec.get('fileExport');
  259. if(data!=null&&(typeof data)=='boolean'){
  260. if(first=='null'){
  261. first = data;
  262. }else{
  263. if(first!=data){
  264. isAllCheck = false
  265. }
  266. }
  267. rec.set('fileExport',!data)
  268. }
  269. });
  270. if(isAllCheck){
  271. me.setHeaderStatus(!first)
  272. }
  273. },
  274. doUpdateHeaderState: function(e) {
  275. return true;
  276. }
  277. }, {
  278. header: '打印',
  279. dataIndex: 'print',
  280. xtype: 'checkcolumn',
  281. headerCheckbox: true,
  282. menuDisabled:true,
  283. flex: 1,
  284. stopSelection: false,
  285. onTitleElClick:function(a,b,c,d){
  286. var me = this;
  287. var records = me.ownerCt.ownerCt.store.data.items;
  288. var first = 'null',isAllCheck = true;
  289. Ext.Array.each(records,function(rec){
  290. var data = rec.get('print');
  291. if(data!=null&&(typeof data)=='boolean'){
  292. if(first=='null'){
  293. first = data;
  294. }else{
  295. if(first!=data){
  296. isAllCheck = false
  297. }
  298. }
  299. rec.set('print',!data)
  300. }
  301. });
  302. if(isAllCheck){
  303. me.setHeaderStatus(!first)
  304. }
  305. },
  306. doUpdateHeaderState: function(e) {
  307. return true;
  308. }
  309. },{
  310. text: '其它',
  311. flex: 2.7,
  312. dataIndex:'other',
  313. xtype: 'widgetcolumn',
  314. menuDisabled:true,
  315. producesHTML: false,
  316. widget: {
  317. xtype: 'powerotherfield',
  318. bind:'{record.other}'
  319. }
  320. }],
  321. initComponent: function () {
  322. var me = this;
  323. var formModel = me.$initParent.getViewModel();
  324. me.store = Ext.create('Ext.data.Store',{
  325. fields:[
  326. {name: 'groupId',type:'int'},
  327. {name: 'groupName',type:'string'},
  328. {name: 'moduleName',type:'string'},
  329. {name: 'add'},
  330. {name: 'delete'},
  331. {name: 'audit'},
  332. {name: 'unAudit'},
  333. {name: 'fileExport'},
  334. {name: 'fileImport'},
  335. {name: 'print'},
  336. {name: 'other', calculate: function(data) {
  337. var groupId = data['groupId'];
  338. var other = data['other'];
  339. Ext.Array.each(other,function(o){
  340. o.groupId=groupId;
  341. })
  342. return other;
  343. }}
  344. ],
  345. groupField:'moduleName',
  346. proxy: {
  347. timeout:8000,
  348. type: 'ajax',
  349. url: me.dataUrl,
  350. actionMethods: {
  351. read: 'GET'
  352. },
  353. reader: {
  354. type: 'json',
  355. rootProperty: 'data',
  356. }
  357. },
  358. listeners:{
  359. beforeload: function (store, op) {
  360. var id = me.initId;
  361. Ext.apply(store.proxy.extraParams, {
  362. id:id
  363. });
  364. }
  365. }
  366. // data: [{"query":true,"add":false,"delete":false,"audit":true,"resAudit":true,"import":true,"export":true},{"query":true,"add":false,"delete":false,"audit":true,"resAudit":true,"import":true,"export":true,"others":[{'resouceId':1,'text':'权限1','value':'true'}]},
  367. // {"query":true,"add":false,"delete":false,"audit":true,"resAudit":true,"import":true,"export":true,"others":[{'resouceId':100,'text':'权限2','value':true},{'resouceId':101,'text':'权限2.1','value':true}]},
  368. // {"query":true,"add":false,"delete":false,"audit":true,"resAudit":true,"import":true,"export":true,"others":[{'resouceId':1000,text:'权限3','value':true},{'resouceId':1001,'text':'权限3.1','value':true},{'resouceId':1002,'text':'权限1','value':true},{'resouceId':100,'text':'权限3.2','value':true}]}]
  369. }),
  370. formModel.set('powergrid', me.store);
  371. me.callParent(arguments);
  372. },
  373. selectAllPower: function(record){
  374. var me = this;
  375. me.setAllOthers(record,true);
  376. },
  377. deselectAllPower:function(record){
  378. var me = this;
  379. me.setAllOthers(record,false);
  380. },
  381. setAllOthers:function(record,bool){
  382. var data = {};
  383. data.add = record.get('add')==null?null:bool;
  384. data.query = record.get('query')==null?null:bool;
  385. data.delete = record.get('delete')==null?null:bool;
  386. data.audit = record.get('audit')==null?null:bool;
  387. data.unAudit= record.get('unAudit')==null?null:bool;
  388. data.fileExport= record.get('fileExport')==null?null:bool;
  389. data.fileImport= record.get('fileImport')==null?null:bool;
  390. data.print= record.get('print')==null?null:bool;
  391. var other=record.get('other');
  392. Ext.Array.each(other,function(o){
  393. o.checked=bool;
  394. });
  395. data.other = other;
  396. data.id = record.get('id');
  397. data.groupId = record.get('groupId');
  398. data.groupName = record.get('groupName');
  399. data.moduleName = record.get('moduleName');
  400. record.set(data);
  401. }
  402. });