LoadingParts.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. Ext.define('erp.view.pm.make.LoadingParts.LoadingParts',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.LoadingPartsGrid',
  4. id: 'loadingpartsgrid',
  5. emptyText : $I18N.common.grid.emptyText,
  6. columnLines : true,
  7. autoScroll : true,
  8. multiselected: [],
  9. store: [],
  10. columns: [],
  11. bodyStyle: 'background-color:#f1f1f1;',
  12. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  13. clicksToEdit: 1
  14. }), Ext.create('erp.view.core.grid.HeaderFilter'), Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  15. headerCt: Ext.create("Ext.grid.header.Container",{
  16. forceFit: false,
  17. sortable: true,
  18. enableColumnMove:true,
  19. enableColumnResize:true,
  20. enableColumnHide: true
  21. }),
  22. features : [Ext.create('Ext.grid.feature.Grouping',{
  23. //startCollapsed: true,
  24. hideGroupedHeader: true,
  25. groupHeaderTpl: '{name} (Count:{rows.length})'
  26. }),{
  27. ftype : 'summary',
  28. showSummaryRow : false,//不显示默认合计行
  29. generateSummaryData: function(){
  30. var me = this,
  31. data = {},
  32. store = me.view.store,
  33. columns = me.view.headerCt.getColumnsForTpl(),
  34. i = 0,
  35. length = columns.length,
  36. //fieldData,
  37. //key,
  38. comp;
  39. //将feature的data打印在toolbar上面
  40. for (i = 0, length = columns.length; i < length; ++i) {
  41. comp = Ext.getCmp(columns[i].id);
  42. data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false);
  43. var tb = Ext.getCmp(columns[i].dataIndex + '_' + comp.summaryType);
  44. if(tb){
  45. tb.setText(tb.text.split(':')[0] + ':' + data[comp.id]);
  46. }
  47. }
  48. return data;
  49. }
  50. }],
  51. selModel: Ext.create('Ext.selection.CheckboxModel',{
  52. getEditor: function(){
  53. return null;
  54. },
  55. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  56. var me = Ext.getCmp('loadingpartsgrid');
  57. var bool = true;
  58. var items = me.selModel.getSelection();
  59. Ext.each(items, function(item, index){
  60. if(this.index == record.index){
  61. bool = false;
  62. me.selModel.deselect(record);
  63. Ext.Array.remove(items, item);
  64. Ext.Array.remove(me.multiselected, record);
  65. }
  66. });
  67. Ext.each(me.multiselected, function(item, index){
  68. items.push(item);
  69. });
  70. me.selModel.select(items);
  71. if(bool){
  72. view.el.focus();
  73. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  74. if(checkbox.getAttribute && checkbox.getAttribute('class') == 'x-grid-row-checker'){
  75. me.multiselected.push(record);
  76. items.push(record);
  77. me.selModel.select(items);
  78. } else {
  79. me.selModel.deselect(record);
  80. Ext.Array.remove(me.multiselected, record);
  81. }
  82. }
  83. me.summary();
  84. },
  85. onHeaderClick: function(headerCt, header, e) {
  86. var grid = Ext.getCmp('loadingpartsgrid');
  87. if (header.isCheckerHd) {
  88. e.stopEvent();
  89. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  90. if (isChecked) {
  91. this.deselectAll(true);
  92. this.deselect(grid.multiselected);
  93. grid.multiselected = new Array();
  94. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  95. Ext.each(els, function(el, index){
  96. el.setAttribute('class','x-grid-row-checker');
  97. });
  98. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  99. } else {
  100. this.deselect(grid.multiselected);
  101. grid.multiselected = new Array();
  102. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  103. Ext.each(els, function(el, index){
  104. el.setAttribute('class','x-grid-row-checker');
  105. });
  106. this.selectAll(true);
  107. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  108. }
  109. }
  110. grid.summary();
  111. }
  112. }),
  113. tbar: ['->',{
  114. text : '确 认',
  115. iconCls: 'x-button-icon-save',
  116. cls: 'x-btn-gray',
  117. handler : function(btn){
  118. var win = parent.Ext.getCmp('zrbjwin');
  119. var contentwindow = win.body.dom.getElementsByTagName('iframe')[0].contentWindow;
  120. var grid = Ext.getCmp('loadingpartsgrid');
  121. var data = grid.getMultiSelected(); //勾选的数据
  122. var data1 = grid.store.data.items;//grid本身的数据
  123. if(data.length == data1.length){
  124. if(!data[0].data.cm_fsoncode ||data[0].data.cm_fsoncode =='' || data[0].data.cm_fsoncode ==null ){
  125. Ext.Array.remove(data,data[0]);
  126. }
  127. }
  128. if(data=='' || !data[0].data.cm_fsoncode){
  129. Ext.Msg.alert('提示',
  130. '未勾选明细行数据,请选择明细行数据后确认!');
  131. return;
  132. }
  133. var singledata;
  134. var detailgrid = parent.Ext.getCmp('grid');
  135. var count = detailgrid.store.data.items.length;
  136. var length = count;
  137. var m=0;
  138. for(i=0;i<data.length;i++){
  139. dataLength = detailgrid.store.data.length;
  140. detailgrid.store.insert(dataLength+1,{});
  141. singledata = data[i].data;
  142. if(i==0){
  143. for(j=0;j<dataLength+1;j++){
  144. if(detailgrid.store.data.items[j].data.msd_fsoncode ==''||detailgrid.store.data.items[j].data.msd_fsoncode ==null){
  145. detailgrid.store.data.items[j].set('msd_fsoncode',singledata.cm_fsoncode);
  146. detailgrid.store.data.items[j].set('pr_detail',singledata.pr_detail);
  147. detailgrid.store.data.items[j].set('pr_spec',singledata.pr_spec);
  148. detailgrid.store.data.items[j].set('msd_stepcode',singledata.cm_stepcode);
  149. m=1;
  150. break;
  151. }
  152. }
  153. }
  154. if(m==1){
  155. detailgrid.store.data.items[j].set('msd_fsoncode',singledata.cm_fsoncode);
  156. detailgrid.store.data.items[j].set('pr_detail',singledata.pr_detail);
  157. detailgrid.store.data.items[j].set('pr_spec',singledata.pr_spec);
  158. detailgrid.store.data.items[j].set('msd_stepcode',singledata.cm_stepcode);
  159. j++;
  160. }
  161. if(m==0){
  162. detailgrid.store.data.items[j].set('msd_fsoncode',singledata.cm_fsoncode);
  163. detailgrid.store.data.items[j].set('pr_detail',singledata.pr_detail);
  164. detailgrid.store.data.items[j].set('pr_spec',singledata.pr_spec);
  165. detailgrid.store.data.items[j].set('msd_stepcode',singledata.cm_stepcode);
  166. length++;
  167. }
  168. }
  169. win.close();
  170. }
  171. }],
  172. initComponent : function(){
  173. this.GridUtil = Ext.create('erp.util.GridUtil');
  174. this.BaseUtil = Ext.create('erp.util.BaseUtil');
  175. this.RenderUtil = Ext.create('erp.util.RenderUtil');
  176. condition = this.BaseUtil.getUrlParam('gridCondition');
  177. condition = (condition == null) ? "" : condition;
  178. condition = condition.replace(/IS/g, "=");
  179. var con = condition.split(" and ");
  180. condition1 = con[0];
  181. condition2 = con[1];
  182. var cn1 = condition1.split("=");
  183. condition3 = cn1[1];
  184. condition = "cm_firstsn=(select ms_firstsn from makeserial where (ms_sncode,ms_makecode)= "
  185. +" (SELECT rd_sncode,ms_makecode FROM (SELECT rd_sncode,ms_makecode, ROW_NUMBER() OVER(ORDER BY rd_id) AS RN "
  186. +" FROM ReworkDetail left join Rework on rd_reid = re_id left join makeserial on ms_sncode = rd_sncode "
  187. +" where re_code ="+condition3+") WHERE RN = 1))"
  188. /*+"(select rd_sncode from ReworkDetail left join Rework on rd_reid = re_id where re_code = "+condition3+" and rownum=1)"*/
  189. /*+" and "+condition2+") "*/
  190. +" and nvl(cm_status,0)=0 and not exists (select 1 from MakeSNDecompose "
  191. +" where "+condition1+" and cm_fsoncode=msd_fsoncode and cm_stepcode=msd_stepcode)";
  192. this.defaultCondition = condition;
  193. var gridParam = {caller: caller, condition: condition};
  194. this.callParent(arguments);
  195. this.getGridColumnsAndStore(this, 'common/singleGridPanel.action?', gridParam, "");
  196. this.initRecords();
  197. },
  198. getMultiSelected: function(){
  199. var grid = this;
  200. var items = grid.selModel.getSelection();
  201. Ext.each(items, function(item, index){
  202. if(!grid.keyField) {
  203. grid.multiselected.push(item);
  204. } else {
  205. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  206. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  207. grid.multiselected.push(item);
  208. }
  209. }
  210. });
  211. return Ext.Array.unique(grid.multiselected);
  212. },
  213. getGridColumnsAndStore: function(grid, url, param, no){
  214. var me = this;
  215. var main = parent.Ext.getCmp("content-panel");
  216. if(main){
  217. main.getActiveTab().setLoading(true);//loading...
  218. }
  219. Ext.Ajax.request({//拿到grid的columns
  220. url : basePath + url,
  221. params: param,
  222. method : 'post',
  223. async: false,
  224. callback : function(options,success,response){
  225. if(main){
  226. main.getActiveTab().setLoading(false);
  227. }
  228. var res = new Ext.decode(response.responseText);
  229. if(res.exceptionInfo){
  230. showError(res.exceptionInfo);return;
  231. }
  232. if(me.columns && me.columns.length > 2){
  233. var data = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : [];
  234. me.store.loadData(data);
  235. me.initRecords();
  236. var arr;
  237. cmp = Ext.getCmp('bo_style');
  238. arr = Ext.Array.unique(Ext.Array.pluck(data, 'bo_style'));
  239. cmp.checkValue(Ext.Array.concate(arr, ','));
  240. } else {
  241. if(res.columns){
  242. Ext.each(res.columns, function(column, y){
  243. //render
  244. me.setRenderer(column);
  245. //logictype
  246. var logic = column.logic;
  247. if(logic != null){
  248. me.setLogicType(column, logic, y);
  249. }
  250. });
  251. //store
  252. me.store = me.setDefaultStore(res.data, res.fields);
  253. //view
  254. if(me.selModel.views == null){
  255. me.selModel.views = [];
  256. }
  257. if(res.dbfinds.length > 0){
  258. me.dbfinds = res.dbfinds;
  259. }
  260. //toolbar
  261. me.setToolbar(res.columns);
  262. Ext.defer(function(){
  263. /*var r = new Object();
  264. me.store.insert(me.store.getCount(), r);*/
  265. me.reconfigure(me.store, res.columns);
  266. },200);
  267. }
  268. }
  269. }
  270. });
  271. },
  272. setRenderer: function(column){
  273. var grid = this;
  274. if(!column.haveRendered && column.renderer != null && column.renderer != ""){
  275. var renderName = column.renderer;
  276. if(contains(column.renderer, ':', true)){
  277. var args = new Array();
  278. Ext.each(column.renderer.split(':'), function(a, index){
  279. if(index == 0){
  280. renderName = a;
  281. } else {
  282. args.push(a);
  283. }
  284. });
  285. if(!grid.RenderUtil.args[renderName]){
  286. grid.RenderUtil.args[renderName] = new Object();
  287. }
  288. grid.RenderUtil.args[renderName][column.dataIndex] = args;
  289. }
  290. column.renderer = grid.RenderUtil[renderName];
  291. column.haveRendered = true;
  292. }
  293. },
  294. setLogicType: function(column, logic, y){
  295. var grid = this;
  296. if(logic == 'detno'){
  297. grid.detno = column.dataIndex;
  298. } else if(logic == 'keyField'){
  299. grid.keyField = column.dataIndex;
  300. } else if(logic == 'mainField'){
  301. grid.mainField = column.dataIndex;
  302. } else if(logic == 'necessaryField'){
  303. grid.necessaryField = column.dataIndex;
  304. if(!grid.necessaryFields){
  305. grid.necessaryFields = new Array();
  306. }
  307. grid.necessaryFields.push(column.dataIndex);
  308. if(!column.haveRendered){
  309. column.renderer = function(val, meta, record, x, y, store, view){
  310. var c = this.columns[y];
  311. if(val != null && val.toString().trim() != ''){
  312. if(c.xtype == 'datecolumn'){
  313. val = Ext.Date.format(val, 'Y-m-d');
  314. }
  315. return val;
  316. } else {
  317. if(c.xtype == 'datecolumn'){
  318. val = '';
  319. }
  320. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  321. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  322. }
  323. };
  324. }
  325. } else if(logic == 'groupField'){
  326. grid.groupField = column.dataIndex;
  327. }
  328. },
  329. setToolbar: function(columns){
  330. var grid = this;
  331. var items = [];
  332. Ext.each(columns, function(column){
  333. if(column.summaryType == 'sum'){
  334. items.push('-',{
  335. id: column.dataIndex + '_sum',
  336. itemId: column.dataIndex,
  337. xtype: 'tbtext',
  338. text: column.header + '(sum):0'
  339. });
  340. } else if(column.summaryType == 'average') {
  341. items.push('-',{
  342. id: column.dataIndex + '_average',
  343. itemId: column.dataIndex,
  344. xtype: 'tbtext',
  345. text: column.header + '(average):0'
  346. });
  347. } else if(column.summaryType == 'count') {
  348. items.push('-',{
  349. id: column.dataIndex + '_count',
  350. itemId: column.dataIndex,
  351. xtype: 'tbtext',
  352. text: column.header + '(count):0'
  353. });
  354. }
  355. });
  356. grid.bbar = {
  357. xtype: 'toolbar',
  358. dock: 'bottom',
  359. items: items
  360. };
  361. },
  362. setDefaultStore: function(d, f){
  363. var me = this;
  364. var data = [];
  365. if(!d || d.length == 2){
  366. me.GridUtil.add10EmptyData(me.detno, data);
  367. me.GridUtil.add10EmptyData(me.detno, data);
  368. } else {
  369. data = Ext.decode(d.replace(/,}/g, '}').replace(/,]/g, ']'));
  370. }
  371. var store = Ext.create('Ext.data.Store', {
  372. fields: f,
  373. data: data,
  374. groupField: me.groupField,
  375. getSum: function(field) {
  376. var records = me.selModel.getSelection(),
  377. total = 0,
  378. i = 0,
  379. len = records.length;
  380. for (; i < len; ++i) {
  381. total += records[i].get(field);
  382. }
  383. return total;
  384. },
  385. getCount: function() {
  386. var records = me.selModel.getSelection(),
  387. count = 0;
  388. Ext.each(records, function(item){
  389. count++;
  390. });
  391. return count;
  392. },
  393. getAverage: function(field) {
  394. var records = me.selModel.getSelection(),
  395. count = 0,
  396. sum = 0;
  397. Ext.each(records, function(item){
  398. if(item.data[me.necessaryField] != null && item.data[me.necessaryField] != ''){
  399. count++;sum += item.data[field];
  400. }
  401. });
  402. return Ext.Number.format(sum/count, '0.00');
  403. }
  404. });
  405. return store;
  406. },
  407. /**
  408. * 修改为selection改变时,summary也动态改变
  409. */
  410. summary: function(){
  411. var me = this,
  412. store = this.store,
  413. value;
  414. Ext.each(me.columns, function(c){
  415. if(c.summaryType == 'sum'){
  416. value = store.getSum(c.dataIndex);
  417. me.down('tbtext[id=' + c.dataIndex + '_sum]').setText(c.header + '(sum):' + value);
  418. } else if(c.summaryType == 'count'){
  419. value = store.getCount();
  420. me.down('tbtext[id=' + c.dataIndex + '_count]').setText(c.header + '(count):' + value);
  421. } else if(c.summaryType == 'average'){
  422. value = store.getAverage(c.dataIndex);
  423. me.down('tbtext[id=' + c.dataIndex + '_average]').setText(c.header + '(average):' + value);
  424. }
  425. });
  426. },
  427. initRecords: function(){
  428. var records = this.store.data.items;
  429. var count = 0;
  430. Ext.each(records, function(record){
  431. if(!record.index){
  432. record.index = count++;
  433. }
  434. });
  435. },
  436. getMultiSelected: function(){
  437. var grid = this;
  438. var items = grid.selModel.getSelection();
  439. Ext.each(items, function(item, index){
  440. if(!grid.keyField) {
  441. grid.multiselected.push(item);
  442. } else {
  443. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  444. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  445. grid.multiselected.push(item);
  446. }
  447. }
  448. });
  449. return Ext.Array.unique(grid.multiselected);
  450. }
  451. });