SimpleActionGrid.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. Ext.define('erp.view.sys.base.SimpleActionGrid',{
  2. extend: 'Ext.grid.Panel',
  3. columns:[],
  4. alias: 'widget.simpleactiongrid',
  5. columnLines: true,
  6. viewConfig: {
  7. stripeRows: true,
  8. enableTextSelection: true//允许选中文字
  9. },
  10. frame: true,
  11. initComponent : function(){
  12. if(this.autoRender)this.getGridColumnsAndStore(this, 'common/singleGridPanel.action', this.params);
  13. this.callParent(arguments);
  14. },
  15. getGridColumnsAndStore: function(grid, url, param, no){
  16. var me = this;
  17. var params={
  18. caller:this.caller,
  19. condition:'1=1'
  20. };
  21. //this.getGridColumnsAndStore(this, 'common/singleGridPanel.action', params, "");
  22. grid.setLoading(true);
  23. Ext.Ajax.request({
  24. url : basePath + url,
  25. params: param,
  26. async: (grid.sync ? false : true),
  27. method : 'post',
  28. callback : function(options,success,response){
  29. grid.setLoading(false);
  30. if (!response) return;
  31. var res = new Ext.decode(response.responseText);
  32. if(res.exceptionInfo){
  33. showError(res.exceptionInfo);return;
  34. }
  35. if(res.columns){
  36. var limits = res.limits, limitArr = new Array();
  37. if(limits != null && limits.length > 0) {//权限外字段
  38. limitArr = Ext.Array.pluck(limits, 'lf_field');
  39. }
  40. Ext.each(res.columns, function(column, y){
  41. // column有取别名
  42. if(column.dataIndex.indexOf(' ') > -1) {
  43. column.dataIndex = column.dataIndex.split(' ')[1];
  44. }
  45. //power
  46. if(limitArr.length > 0 && Ext.Array.contains(limitArr, column.dataIndex)) {
  47. column.hidden = true;
  48. }
  49. if(column.xtype=='checkcolumn') delete column['renderer'];
  50. });
  51. //data
  52. var data = [];
  53. if(res.data && res.data.length > 2){
  54. data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  55. }
  56. //store
  57. var store = me.setStore(grid, res.fields, data, grid.groupField, grid.necessaryField);
  58. //view
  59. if(grid.selModel && grid.selModel.views == null){
  60. grid.selModel.views = [];
  61. }
  62. //dbfind
  63. if(res.dbfinds && res.dbfinds.length > 0){
  64. grid.dbfinds = res.dbfinds;
  65. }
  66. //reconfigure
  67. res.columns=me.setColumns(res.columns);
  68. var columns=Ext.Array.insert(res.columns,0, [Ext.create('Ext.grid.RowNumberer'),{
  69. xtype:'actioncolumn',
  70. width:45,
  71. text :'操作',
  72. items:[{
  73. iconCls:'btn-edit',
  74. tooltip:'修改',
  75. handler:function(grid, rowIndex, colIndex,item) {
  76. var record = grid.getStore().getAt(rowIndex),gridpanel=grid.ownerCt;
  77. var win=Ext.widget('detailwindow',{
  78. title:gridpanel.title,
  79. items:[Ext.widget('formportal',{
  80. region:'center',
  81. caller:gridpanel.caller,
  82. updateUrl: gridpanel.updateUrl,
  83. currentTab:gridpanel,
  84. saveSuccess:me.DetailUpdateSuccess,
  85. emptyGrid:gridpanel.emptyGrid,
  86. condition:gridpanel.keyField+'='+record.get(gridpanel.keyField)
  87. })]
  88. });
  89. win.showRelyBtn(win,grid);
  90. }
  91. },
  92. {
  93. iconCls:'btn-delete',
  94. tooltip:'删除',
  95. width:75,
  96. handler:function(grid, rowIndex, colIndex) {
  97. Ext.Msg.confirm('删除数据?', '确定要删除当前选中行(行号:'+(rowIndex+1)+')?',
  98. function(choice) {
  99. if(choice === 'yes') {
  100. //var reviewStore = Ext.data.StoreMgr.lookup('reviewStore');
  101. var record = grid.getStore().getAt(rowIndex),gridpanel=grid.ownerCt;
  102. gridpanel.removeDetail(gridpanel,record.get(gridpanel.keyField));
  103. //var reviewIndex = reviewStore.find('employee_id', employee.get('id'));
  104. //reviewStore.removeAt(reviewIndex);
  105. //grid.getStore().removeAt(rowIndex);
  106. }
  107. }
  108. );
  109. }
  110. }]
  111. }]);
  112. if(grid.sync) {//同步加载的Grid
  113. grid.reconfigure(store, columns);
  114. /* grid.on('afterrender', function(){
  115. me.setToolbar(grid, grid.columns, grid.necessaryField, limitArr);
  116. });*/
  117. } else {
  118. grid.reconfigure(store, columns);
  119. }
  120. } else {
  121. grid.hide();
  122. }
  123. }
  124. });
  125. },
  126. setStore: function(grid, fields, data, groupField, necessaryField){
  127. Ext.each(fields, function(f){
  128. if(f.name.indexOf(' ') > -1) {// column有取别名
  129. f.name = f.name.split(' ')[1];
  130. }
  131. if(!Ext.isChrome){
  132. if(f.type == 'date'){
  133. f.dateFormat = 'Y-m-d H:m:s';
  134. }
  135. }
  136. });
  137. var modelName = 'ext-model-' + grid.id;
  138. Ext.define(modelName, {
  139. extend: 'Ext.data.Model',
  140. fields: fields
  141. });
  142. var config = {
  143. model: modelName,
  144. groupField: groupField,
  145. getSum: function(records, field) {
  146. if (arguments.length < 2) {
  147. return 0;
  148. }
  149. var total = 0,
  150. i = 0,
  151. len = records.length;
  152. if(necessaryField) {
  153. for (; i < len; ++i) {//重写getSum,grid在合计时,只合计填写了必要信息的行
  154. var necessary = records[i].get(necessaryField);
  155. if(necessary != null && necessary != ''){
  156. total += records[i].get(field);
  157. }
  158. }
  159. } else {
  160. for (; i < len; ++i) {
  161. total += records[i].get(field);
  162. }
  163. }
  164. return total;
  165. },
  166. getCount: function() {
  167. if(necessaryField) {
  168. var count = 0;
  169. Ext.each(this.data.items, function(item){//重写getCount,grid在合计时,只合计填写了必要信息的行
  170. if(item.data[necessaryField] != null && item.data[necessaryField] != ''){
  171. count++;
  172. }
  173. });
  174. return count;
  175. }
  176. return this.data.items.length;
  177. }
  178. };
  179. if(grid.buffered) {//grid数据缓存
  180. config.buffered = true;
  181. config.pageSize = 200;
  182. config.purgePageCount = 0;
  183. config.proxy = {
  184. type: 'memory'
  185. };
  186. } else {
  187. config.data = data;
  188. }
  189. var store = Ext.create('Ext.data.Store', config);
  190. store.each(function(item, x){
  191. item.index = x;
  192. });
  193. if(grid.buffered) {
  194. var ln = data.length, records = [], i = 0;
  195. for (; i < ln; i++) {
  196. records.push(Ext.create(modelName, data[i]));
  197. }
  198. store.cacheRecords(records);
  199. }
  200. return store;
  201. },
  202. loadNewStore: function(grid, param){
  203. var me = this;
  204. param=param||grid.params;
  205. grid.setLoading(true);//loading...
  206. Ext.Ajax.request({//拿到grid的columns
  207. url : basePath + "common/loadNewGridStore.action",
  208. params: param,
  209. method : 'post',
  210. callback : function(options,success,response){
  211. grid.setLoading(false);
  212. var res = new Ext.decode(response.responseText);
  213. if(res.exceptionInfo){
  214. showError(res.exceptionInfo);return;
  215. }
  216. var data = res.data;
  217. if(!data || data.length == 0){
  218. grid.store.removeAll();
  219. me.add10EmptyItems(grid);
  220. } else {
  221. grid.store.loadData(data);
  222. }
  223. //自定义event
  224. grid.addEvents({
  225. storeloaded: true
  226. });
  227. grid.fireEvent('storeloaded', grid, data);
  228. }
  229. });
  230. },
  231. removeDetail:function(grid,id){
  232. grid.setLoading(true);
  233. Ext.Ajax.request({
  234. url : basePath + grid.deleteUrl,
  235. params: {
  236. id: id
  237. },
  238. method : 'post',
  239. callback : function(options,success,response){
  240. grid.setLoading(false);
  241. var localJson = new Ext.decode(response.responseText);
  242. if(localJson.exceptionInfo){
  243. showError(localJson.exceptionInfo);return;
  244. }
  245. if(localJson.success){
  246. showResult('提示','删除成功!');
  247. grid.loadNewStore(grid,grid.params);
  248. } else {
  249. delFailure();
  250. }
  251. }
  252. });
  253. },
  254. setColumns:function(columns){
  255. Ext.Array.each(columns,function(column){
  256. if(column.xtype=='yncolumn'){
  257. column.xtype='checkcolumn';
  258. column.editor= {
  259. xtype: 'checkbox',
  260. cls: 'x-grid-checkheader-editor'
  261. };
  262. }
  263. });
  264. return columns;
  265. },
  266. DetailUpdateSuccess:function(activeTab,btn){
  267. activeTab.loadNewStore(activeTab,activeTab.params);
  268. var win=btn.up('window');
  269. if(win) win.close();
  270. }
  271. })