GridPanel.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. Ext.define('erp.view.common.editorColumn.GridPanel',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpEditorColumnGridPanel',
  4. id: 'editorColumnGridPanel',
  5. emptyText : $I18N.common.grid.emptyText,
  6. columnLines : true,
  7. autoScroll : true,
  8. store: [],
  9. columns: [],
  10. GridUtil: Ext.create('erp.util.GridUtil'),
  11. BaseUtil: Ext.create('erp.util.BaseUtil'),
  12. RenderUtil: Ext.create('erp.util.RenderUtil'),
  13. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  14. clicksToEdit: 1
  15. }), Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  16. bodyStyle:'background-color:#f1f1f1;',
  17. multiselected: new Array(),
  18. features : [Ext.create('Ext.grid.feature.Grouping',{
  19. groupHeaderTpl: '{name} (Count:{rows.length})'
  20. })],
  21. selModel: Ext.create('Ext.selection.CheckboxModel',{
  22. ignoreRightMouseSelection : false,
  23. checkOnly: true,
  24. listeners:{
  25. selectionchange:function(selectionModel, selected, options){
  26. }
  27. },
  28. getEditor: function(){
  29. return null;
  30. }
  31. }),
  32. caller: null,
  33. condition: null,
  34. initComponent : function(){
  35. this.getGridColumnsAndStore(this.condition || condition);
  36. this.callParent(arguments);
  37. },
  38. getEffectData: function(){
  39. var grid = this;
  40. var items = grid.selModel.getSelection();
  41. Ext.each(items, function(item, index){
  42. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  43. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  44. grid.multiselected.push(item);
  45. }
  46. });
  47. var records = this.unique(grid.multiselected);
  48. if(records.length > 0){
  49. var data = new Array();
  50. Ext.each(records, function(record, index){
  51. if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  52. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)){
  53. var o = new Object();
  54. if(grid.keyField){
  55. o[grid.keyField] = record.data[grid.keyField];
  56. }
  57. if(grid.necessaryFields){
  58. Ext.each(grid.necessaryFields, function(f, index){
  59. var v = record.data[f];
  60. if(Ext.isDate(v)){
  61. v = Ext.Date.toString(v);
  62. }
  63. o[f] = v;
  64. });
  65. }
  66. data.push(o);
  67. }
  68. });
  69. return data;
  70. }
  71. },
  72. unique: function(items) {
  73. var d = new Object();
  74. Ext.Array.each(items, function(item){
  75. d[item.id] = item;
  76. });
  77. return Ext.Object.getValues(d);
  78. },
  79. updateAction: function(url){
  80. var grid = this, btn = parent.Ext.getCmp('win').down('button[name=confirm]');
  81. var data = grid.getEffectData();
  82. if(data != null){
  83. grid.setLoading(true);
  84. Ext.Ajax.request({
  85. url : basePath + url,
  86. params: {
  87. caller: caller,
  88. data: Ext.encode(data)
  89. },
  90. method : 'post',
  91. async: false,
  92. callback : function(options,success,response){
  93. grid.setLoading(false);
  94. btn.setDisabled(false);
  95. var localJson = new Ext.decode(response.responseText);
  96. if(localJson.exceptionInfo){
  97. showError(localJson.exceptionInfo);
  98. return "";
  99. }
  100. if(localJson.success){
  101. if(localJson.log){
  102. showMessage("提示", localJson.log);
  103. }
  104. Ext.Msg.alert("提示", "处理成功!", function(){
  105. grid.multiselected = new Array();
  106. window.location.href = window.location.href;
  107. });
  108. }
  109. }
  110. });
  111. } else {
  112. btn.setDisabled(false);
  113. }
  114. },
  115. reloadData: function(condition, callback) {
  116. var grid = this;
  117. grid.setLoading(true);
  118. Ext.Ajax.request({
  119. url : basePath + 'common/singleGridPanel.action',
  120. params: {
  121. caller: this.caller || caller,
  122. condition: condition
  123. },
  124. method : 'post',
  125. callback : function(opt, s, resp){
  126. grid.setLoading(false);
  127. var res = new Ext.decode(resp.responseText);
  128. callback && callback.call(null, res.data ?
  129. Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : []);
  130. }
  131. });
  132. },
  133. getGridColumnsAndStore: function(condition){
  134. var grid = this;
  135. grid.setLoading(true);
  136. Ext.Ajax.request({//拿到grid的columns
  137. url : basePath + 'common/singleGridPanel.action',
  138. params: {
  139. caller: this.caller || caller,
  140. condition: condition
  141. },
  142. method : 'post',
  143. async: false,
  144. callback : function(options,success,response){
  145. grid.setLoading(false);
  146. var res = new Ext.decode(response.responseText);
  147. if(res.exceptionInfo){
  148. showError(res.exceptionInfo);return;
  149. }
  150. var data = [];
  151. if(!res.data || res.data.length == 2){
  152. grid.GridUtil.add10EmptyData(grid.detno, data);
  153. grid.GridUtil.add10EmptyData(grid.detno, data);
  154. } else {
  155. data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  156. }
  157. if(grid.columns && grid.columns.length > 2){
  158. grid.store.loadData(data);
  159. if(grid.normalGrid){
  160. grid.normalGrid.on('scrollershow',function(scroller){
  161. if (scroller && scroller.scrollEl) {
  162. scroller.clearManagedListeners();
  163. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  164. }
  165. });
  166. }
  167. grid.fireEvent('scrollershow', grid.verticalScroller, 'vertical');
  168. } else {
  169. if(res.columns){
  170. Ext.each(res.columns, function(column, y){
  171. //render
  172. if(!column.haveRendered && column.renderer != null && column.renderer != ""){
  173. var renderName = column.renderer;
  174. if(contains(column.renderer, ':', true)){
  175. var args = new Array();
  176. Ext.each(column.renderer.split(':'), function(a, index){
  177. if(index == 0){
  178. renderName = a;
  179. } else {
  180. args.push(a);
  181. }
  182. });
  183. if(!grid.RenderUtil.args[renderName]){
  184. grid.RenderUtil.args[renderName] = new Object();
  185. }
  186. grid.RenderUtil.args[renderName][column.dataIndex] = args;
  187. }
  188. column.renderer = grid.RenderUtil[renderName];
  189. column.haveRendered = true;
  190. }
  191. //logictype
  192. var logic = column.logic;
  193. if(logic != null){
  194. if(logic == 'detno'){
  195. grid.detno = column.dataIndex;
  196. } else if(logic == 'keyField'){
  197. grid.keyField = column.dataIndex;
  198. } else if(logic == 'mainField'){
  199. grid.mainField = column.dataIndex;
  200. } else if(logic == 'necessaryField'){
  201. grid.necessaryField = column.dataIndex;
  202. if(!grid.necessaryFields){
  203. grid.necessaryFields = new Array();
  204. }
  205. grid.necessaryFields.push(column.dataIndex);
  206. if(!column.haveRendered){
  207. column.renderer = function(val, meta, record, x, y, store, view){
  208. var c = this.columns[y];
  209. if(val != null && val.toString().trim() != ''){
  210. if(c.xtype == 'datecolumn'){
  211. val = Ext.Date.format(val, 'Y-m-d');
  212. }
  213. return val;
  214. } else {
  215. if(c.xtype == 'datecolumn'){
  216. val = '';
  217. }
  218. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  219. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  220. }
  221. };
  222. }
  223. } else if(logic == 'groupField'){
  224. grid.groupField = column.dataIndex;
  225. }
  226. }
  227. /**
  228. *****如果有固定咧,grid不能分组*****
  229. */
  230. });
  231. var store = Ext.create('Ext.data.Store', {
  232. storeId: 'gridStore',
  233. fields: res.fields,
  234. data: data,
  235. groupField: grid.groupField
  236. });
  237. if(grid.selModel.views == null){
  238. grid.selModel.views = [];
  239. }
  240. if(res.dbfinds.length > 0){
  241. grid.dbfinds = res.dbfinds;
  242. }
  243. grid.columns = res.columns;
  244. if(grid.autoRowNumber) {
  245. Ext.Array.insert(grid.columns, 0, [{xtype: 'rownumberer', width: 35, locked: true, cls: 'x-grid-header-1'}]);
  246. }
  247. grid.store = store;
  248. grid.fireEvent('storeloaded', grid, store);
  249. }
  250. }
  251. }
  252. });
  253. },
  254. viewConfig: {// 显示分仓库库存
  255. listeners: {
  256. render: function(view) {
  257. var prodfield = Ext.getCmp('editorColumnGridPanel').getProdField();
  258. if(prodfield && !view.tip) {
  259. view.tip = Ext.create('Ext.tip.ToolTip', {
  260. target: view.el,
  261. delegate: view.itemSelector,
  262. trackMouse: true,
  263. renderTo: Ext.getBody(),
  264. listeners: {
  265. beforeshow: function updateTipBody(tip) {
  266. var record = view.getRecord(tip.triggerElement),
  267. grid = view.ownerCt.ownerCt;
  268. if(record && grid.productwh) {
  269. var c = record.get(prodfield), pws = new Array();
  270. Ext.each(grid.productwh, function(d){
  271. if(d.PW_PRODCODE == c) {
  272. pws.push(d);
  273. }
  274. });
  275. tip.down('grid').setTitle(c);
  276. tip.down('grid').store.loadData(pws);
  277. }
  278. }
  279. },
  280. items: [{
  281. xtype: 'grid',
  282. width: 300,
  283. columns: [{
  284. text: '仓库编号',
  285. cls: 'x-grid-header-1',
  286. dataIndex: 'PW_WHCODE',
  287. width: 80
  288. },{
  289. text: '仓库名称',
  290. cls: 'x-grid-header-1',
  291. dataIndex: 'WH_DESCRIPTION',
  292. width: 120
  293. },{
  294. text: '库存',
  295. cls: 'x-grid-header-1',
  296. xtype: 'numbercolumn',
  297. align: 'right',
  298. dataIndex: 'PW_ONHAND',
  299. width: 90
  300. }],
  301. columnLines: true,
  302. title: '物料分仓库存',
  303. store: new Ext.data.Store({
  304. fields: ['PW_WHCODE', 'WH_DESCRIPTION', 'PW_ONHAND'],
  305. data: [{}]
  306. })
  307. }]
  308. });
  309. }
  310. }
  311. }
  312. },
  313. getProdField : function() {
  314. var f = null;
  315. switch (caller){
  316. case 'SendNotify!ToProdIN!Deal' ://通知单转出货
  317. f = 'snd_prodcode';
  318. break;
  319. /*case 'Sale!ToAccept!Deal' ://订单转出货
  320. f = 'sd_prodcode';
  321. break;*/
  322. }
  323. return f;
  324. }
  325. });