ItemGrid.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /**
  2. * form配置的grid 相当于form组件 可自定义数据
  3. */
  4. Ext.define('erp.view.core.grid.ItemGrid',{
  5. extend: 'Ext.grid.Panel',
  6. alias: 'widget.itemgrid',
  7. region: 'south',
  8. layout : 'fit',
  9. // id: 'grid1',
  10. // height:200,
  11. emptyText : $I18N.common.grid.emptyText,
  12. columnLines : true,
  13. autoScroll : true,
  14. store: [],
  15. columns: [],
  16. readOnly : true,
  17. GridUtil: Ext.create('erp.util.GridUtil'),
  18. // plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  19. //
  20. // clicksToEdit: 1
  21. // }),
  22. initComponent : function(){
  23. var me = this;
  24. var logic = this.logic;
  25. var value = this.value;
  26. me.caller = logic;
  27. me.readOnly = true;
  28. me.plugins = new Ext.create('Ext.grid.plugin.CellEditing',{
  29. id : 'plugins_'+me.id,
  30. clicksToEdit: 1
  31. });
  32. var objectArray = new Array();
  33. if(this.iniValue!= null &&this.iniValue!= ''){
  34. //解析 this.defaultValue 的数据
  35. //this.defaultValue 的数据格式为 columnname1:cn11,cn12,cn13;columnname2:cn21,cn22,cn23
  36. var defaultColumns = this.iniValue.split(';'); //得到[{columnname1:cn11,cn12,cn13},{columnname2:cn21,cn22,cn23}]
  37. var c = defaultColumns[0].split(':');
  38. var vc = c[1].split(',');
  39. for(var i = 0; i < vc.length;i++){
  40. var o = new Object();
  41. objectArray.push(o);
  42. }
  43. Ext.each(defaultColumns,function(dColumn,index){
  44. var dd = dColumn.split(':');
  45. var vd = dd[1].split(',');
  46. Ext.each(objectArray,function(o,index){
  47. o[dd[0]] = vd[index];
  48. });
  49. });
  50. }
  51. var condition = "ig_mainid = '"+value+"'";
  52. var gridParam = {caller: logic , condition: condition};
  53. me.getGridColumnsAndStore(this, 'common/singleGridPanel.action', gridParam, objectArray);//从后台拿到gridpanel的配置及数据
  54. this.callParent(arguments);
  55. },
  56. //把初始化的数据初始化grid
  57. initGridData: function(grid, count, append, objectArray){
  58. var store = grid.store,
  59. items = store.data.items, arr = new Array();
  60. var detno = grid.detno;
  61. count = objectArray.length;
  62. append = append === undefined ? true : false;
  63. if(detno){
  64. var index = items.length == 0 ? 0 : Number(store.last().get(detno));
  65. for(var i=0;i < count;i++ ){
  66. var o = new Object();
  67. o[detno] = index + i + 1;
  68. arr.push(o);
  69. }
  70. } else {
  71. for(var i=0;i < count;i++ ){
  72. var o = new Object();
  73. arr.push(o);
  74. }
  75. }
  76. store.loadData(objectArray, append);
  77. var i = 0;
  78. store.each(function(item, x){
  79. if(item.index) {
  80. i = item.index;
  81. } else {
  82. if (i) {
  83. item.index = i++;
  84. } else {
  85. item.index = x;
  86. }
  87. }
  88. });
  89. },
  90. getGridColumnsAndStore: function(grid, url, param, objectArray){
  91. var me = this;
  92. grid.setLoading(true);
  93. Ext.Ajax.request({//拿到grid的columns
  94. url : basePath + url,
  95. params: param,
  96. async: (grid.sync ? false : true),
  97. method : 'post',
  98. callback : function(options,success,response){
  99. grid.setLoading(false);
  100. var res = new Ext.decode(response.responseText);
  101. if(res.exceptionInfo){
  102. showError(res.exceptionInfo);return;
  103. }
  104. if(res.columns){
  105. var limits = res.limits, limitArr = new Array();
  106. if(limits != null && limits.length > 0) {//权限外字段
  107. limitArr = Ext.Array.pluck(limits, 'lf_field');
  108. }
  109. Ext.each(res.columns, function(column, y){
  110. // column有取别名
  111. if(column.dataIndex.indexOf(' ') > -1) {
  112. column.dataIndex = column.dataIndex.split(' ')[1];
  113. }
  114. //power
  115. if(limitArr.length > 0 && Ext.Array.contains(limitArr, column.dataIndex)) {
  116. column.hidden = true;
  117. }
  118. //renderer
  119. me.GridUtil.setRenderer(grid, column);
  120. //logictype
  121. me.GridUtil.setLogicType(grid, column);
  122. });
  123. //data
  124. var data = [];
  125. if(!res.data || res.data.length == 2){
  126. if (grid.buffered) {
  127. me.GridUtil.add10EmptyData(grid.detno, data);
  128. me.GridUtil.add10EmptyData(grid.detno, data);//添加20条空白数据
  129. } else {
  130. grid.on('reconfigure', function(){// 改为Grid加载后再添加空行,节约200~700ms
  131. me.initGridData(grid, 40, false,objectArray);
  132. });
  133. }
  134. } else {
  135. data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  136. }
  137. //store
  138. var store = me.GridUtil.setStore(grid, res.fields, data, grid.groupField, grid.necessaryField);
  139. //view
  140. if(grid.selModel && grid.selModel.views == null){
  141. grid.selModel.views = [];
  142. }
  143. //dbfind
  144. if(res.dbfinds && res.dbfinds.length > 0){
  145. grid.dbfinds = res.dbfinds;
  146. }
  147. //reconfigure
  148. if(grid.sync) {//同步加载的Grid
  149. grid.reconfigure(store, res.columns);
  150. grid.on('afterrender', function(){
  151. me.GridUtil.setToolbar(grid, grid.columns, grid.necessaryField, limitArr);
  152. });
  153. } else {
  154. //toolbar
  155. if (grid.generateSummaryData === undefined) {// 改为Grid加载后再添加合计,节约60ms
  156. me.GridUtil.setToolbar(grid, res.columns, grid.necessaryField, limitArr);
  157. }
  158. grid.reconfigure(store, res.columns);
  159. }
  160. if(grid.buffered) {//缓冲数据的Grid
  161. grid.verticalScroller = Ext.create('Ext.grid.PagingScroller', {
  162. activePrefetch: false,
  163. store: store
  164. });
  165. store.guaranteeRange(0, store.pageSize - 1);
  166. }
  167. var form = Ext.ComponentQuery.query('form');
  168. if(form && form.length > 0){
  169. grid.readOnly = form[0].readOnly;//grid不可编辑
  170. }
  171. } else {
  172. grid.hide();
  173. var form = Ext.ComponentQuery.query('form')[0];
  174. if(form) {
  175. if(form.items.items.length == 0) {
  176. form.on('afterload', function(){
  177. me.GridUtil.updateFormPosition(form);//字段较少时,修改form布局
  178. });
  179. } else {
  180. me.GridUtil.updateFormPosition(form);//字段较少时,修改form布局
  181. }
  182. }
  183. }
  184. }
  185. });
  186. },
  187. saveValue:function(){
  188. var me = this;
  189. Ext.Ajax.request({//拿到grid的columns
  190. url : basePath + 'common/getSequenceId.action',
  191. params: {
  192. seqname:'itemgrid_main_seq',
  193. _token: me.id
  194. },
  195. async: false,
  196. method : 'post',
  197. callback : function(options,success,response){
  198. var res = Ext.decode(response.responseText);
  199. if(res.id){
  200. me.value = res.id;
  201. Ext.each(me.store.data.items,function(item,index){
  202. item.set('ig_mainid',res.id);
  203. });
  204. var jsondata = me.GridUtil.getGridStore(me);
  205. Ext.Ajax.request({
  206. url : basePath + 'common/saveItemGrid.action',
  207. params: {
  208. data:jsondata
  209. },
  210. async: false,
  211. method:'post'
  212. });
  213. } else if(res.exceptionInfo){
  214. showError(res.exceptionInfo);return;
  215. }
  216. }
  217. });
  218. },
  219. updateValue:function(){
  220. var me = this;
  221. var jsondata = me.GridUtil.getGridStore(me);
  222. Ext.Ajax.request({//拿到grid的columns
  223. url : basePath + 'common/updateItemGrid.action',
  224. params: {
  225. data:jsondata
  226. },
  227. async: false,
  228. method : 'post'
  229. });
  230. }
  231. });