ProdCreateBarcode.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.reserve.ProdCreateBarcode', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil'],
  5. views:[
  6. 'core.form.Panel','common.CommonPage','core.grid.Panel2','core.toolbar.Toolbar','core.trigger.MultiDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger',
  7. 'core.button.Close','core.trigger.DbfindTrigger','core.grid.YnColumn','core.button.GenerateBarcode'
  8. ],
  9. init:function(){
  10. var me = this;
  11. me.FormUtil = Ext.create('erp.util.FormUtil');
  12. me.GridUtil = Ext.create('erp.util.GridUtil');
  13. me.BaseUtil = Ext.create('erp.util.BaseUtil');
  14. this.control({
  15. '#barCode': {
  16. specialkey: function(f, e){//按ENTER自动复制到下一行
  17. if (e.getKey() == e.ENTER) {
  18. if(f.value != null && f.value != ''){
  19. me.getBarInfo();
  20. Ext.getCmp('pr_partNumber').focus(false, 100);
  21. }
  22. }
  23. }
  24. },
  25. 'erpProdCreateBarcode': {
  26. },
  27. 'erpGenerateBarcodeButton': {
  28. click: function(btn){
  29. var pr_code = Ext.getCmp('pr_code').value;
  30. var number = Ext.getCmp('pr_partNumber').value;
  31. if(pr_code == null || pr_code ==''){
  32. Ext.Msg.alert('温馨提示',
  33. '请先选择物料编号');
  34. return;
  35. }else if(number == null || number ==''){
  36. Ext.Msg.alert('温馨提示',
  37. '请输入数量');
  38. return;
  39. }
  40. var re=/^\d+(,\d+)*$/;
  41. var sum=0;
  42. number=number.replace(/,/ig,',');
  43. if(re.test(number)){
  44. var str = new Array();
  45. str = number.split( "," );
  46. for (var i = 0; i < str.length; i++ )
  47. {
  48. if(str[i] <= 0){
  49. Ext.Msg.alert('温馨提示',
  50. '数量必须大于0');
  51. return;
  52. }
  53. sum+=parseFloat(str[i]);
  54. }}else{
  55. showError("请输入正确的数量,例如20,30,40");
  56. return;
  57. }
  58. if (sum <= 0) {
  59. Ext.Msg.alert('温馨提示',
  60. '数量必须大于0');
  61. return;
  62. }
  63. if(pr_code && number){
  64. Ext.getCmp("pr_partNumber").setValue('');
  65. var batchcode = Ext.getCmp('batchCode').value;
  66. var UseBarcode = Ext.getCmp('UseBarcode').value;
  67. var barcode = Ext.getCmp('barCode').value;
  68. if(batchcode != null && batchcode != ''){
  69. me.batchGenerateBarcode(barcode,pr_code,number,batchcode,UseBarcode);
  70. }else{
  71. me.batchGenerateBarcode(barcode,pr_code,number,'',UseBarcode);
  72. }
  73. }
  74. }
  75. },
  76. 'erpCloseButton': {
  77. click: function(btn){
  78. me.FormUtil.beforeClose(me);
  79. }
  80. }
  81. });
  82. },
  83. onGridItemClick: function(selModel, record){//grid行选择
  84. this.GridUtil.onGridItemClick(selModel, record);
  85. },
  86. getForm: function(btn){
  87. return btn.ownerCt.ownerCt;
  88. },
  89. resize: function(form, grid){
  90. if(!this.resized && form && grid && form.items.items.length > 0){
  91. var height = window.innerHeight,
  92. fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
  93. if(Ext.isIE){
  94. height = screen.height*0.75;
  95. }
  96. form.setHeight(70 + fh);
  97. grid.setHeight(height - fh - 70);
  98. this.resized = true;
  99. }
  100. },
  101. setLoading : function(b) {
  102. var mask = this.mask;
  103. if (!mask) {
  104. this.mask = mask = new Ext.LoadMask(Ext.getBody(), {
  105. msg : "处理中,请稍后...",
  106. msgCls : 'z-index:10000;'
  107. });
  108. }
  109. if (b)
  110. mask.show();
  111. else
  112. mask.hide();
  113. },
  114. batchGenerateBarcode: function(barcode,pr_code,number,batchcode,UseBarcode){
  115. var me=this;
  116. me.setLoading(true);
  117. Ext.Ajax.request({
  118. url : basePath +'scm/reserve/batchGenerateBarcode.action',
  119. params: {
  120. barcode:barcode,
  121. pr_code:pr_code,
  122. number:number,
  123. batchcode:batchcode,
  124. UseBarcode:UseBarcode
  125. },
  126. method : 'post',
  127. callback : function(options,success,response){
  128. me.setLoading(false);
  129. var res = new Ext.decode(response.responseText);
  130. if(res.success){
  131. var data = res.data;
  132. Ext.MessageBox.alert('提示', '条码生成成功!',function(){
  133. var win = new Ext.window.Window({
  134. id: 'winBar',
  135. height: '75%',
  136. width: '75%',
  137. maximizable: false,
  138. title:'<span>条码打印</span>',
  139. buttonAlign: 'center',
  140. layout: 'column',
  141. bodyStyle:"background-color:#F5F5F5;",
  142. items: [{
  143. xtype: 'gridpanel',
  144. id: 'grid',
  145. anchor : '100% 70%',
  146. columnWidth:1,
  147. multiSelect: true,
  148. multiselected: [],
  149. forceFit : true,
  150. checkOnly:true,
  151. columns: [
  152. {
  153. style :"text-align:center",
  154. text: 'ID',
  155. width: 0,
  156. hidden : true,
  157. dataIndex: 'bar_id',
  158. ignore: true,
  159. },{
  160. style :"text-align:center",
  161. text: '条码',
  162. flex : 7,
  163. dataIndex: 'bar_code',
  164. logic:"necessaryField",
  165. editor: {
  166. xtype: "displayfield",
  167. hideTrigger: true,
  168. store: null,
  169. queryMode: "local"
  170. }
  171. },{
  172. style :"text-align:center",
  173. text: '数量',
  174. logic:"necessaryField",
  175. flex : 3,
  176. dataIndex: 'bar_remain',
  177. editor: {
  178. xtype: "displayfield",
  179. hideTrigger: true,
  180. store: null,
  181. queryMode: "local"
  182. },
  183. xtype: 'numbercolumn',
  184. align: "left",
  185. format: ""
  186. }],
  187. GridUtil: Ext.create('erp.util.GridUtil'),
  188. listeners:{
  189. beforeedit:function(editor, e, eOpts){
  190. return false;//不可编辑
  191. }
  192. },
  193. selType:'checkboxmodel',
  194. dbfinds: [],
  195. columnLines: true,
  196. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  197. clicksToEdit: 10
  198. }),
  199. Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  200. store: new Ext.data.Store({
  201. fields: ['bar_id', 'bar_code', 'bar_remain'],
  202. data: []
  203. }),
  204. onGridItemClick: function(selModel, record){// grid行选择
  205. this.GridUtil.onGridItemClick(selModel, record);
  206. },
  207. }],
  208. buttons : [{
  209. text : '打印条码',
  210. id : 'printNew',
  211. iconCls: 'x-button-icon-print',
  212. disabled : true,
  213. handler : function(btn) {
  214. var me = this;
  215. caller = 'Barcode!BaPrint';
  216. me.idS = '';
  217. var lps_Barcaller = 'Barcode!Print';
  218. var bool = false;
  219. var grid = Ext.getCmp('grid');
  220. var items = grid.selModel.getSelection();
  221. var idArray = [];
  222. Ext.each(items, function(item, index){
  223. if(this.data['bar_id'] != null && this.data['bar_id'] != ''
  224. && this.data['bar_id'] != '0' && this.data['bar_id'] != 0){
  225. bool = true;
  226. idArray.push(this.data['bar_id']);
  227. }
  228. });
  229. if(bool){
  230. var idS = idArray.toString();
  231. //me.print(idS,lps_Barcaller);
  232. me.idS = idS;
  233. me.zplPrint(lps_Barcaller);
  234. }else{
  235. showError("没有需要打印的行");
  236. }
  237. },
  238. zplPrint:function(caller){//zpl打印语句
  239. // 获取选择打印文件,用户选择分辨率,和打印机
  240. var me = this;
  241. if(!me.window){
  242. setup_web_print(function(printers,selected_printer){
  243. me.window = Ext.create('Ext.window.Window', {
  244. autoShow: true,
  245. title: '选择打印模板',
  246. width: 400,
  247. height: 300,
  248. layout: 'anchor',
  249. id :'template-win4',
  250. closeAction:'hide',
  251. items: [{
  252. anchor:'100% 100%',
  253. xtype:'form',
  254. buttonAlign : 'center',
  255. items:[{
  256. xtype: 'combo',
  257. id: 'printers',
  258. fieldLabel: '打印机列表',
  259. store: Ext.create('Ext.data.Store', {
  260. autoLoad: true,
  261. fields: ['display', 'value'],
  262. data:printers
  263. }),
  264. queryMode: 'local',
  265. displayField: 'display',
  266. valueField: 'value',
  267. width:361,
  268. allowBlank:false,
  269. value:selected_printer.uid,
  270. selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
  271. style:'margin-left:15px;margin-top:15px;'
  272. },{
  273. xtype: 'combo',
  274. id: 'dpi',
  275. fieldLabel: '打印机分辨率',
  276. style:'margin-left:15px;margin-top:15px;',
  277. store: Ext.create('Ext.data.Store', {
  278. fields: ['display', 'value'],
  279. data : [{"display": '203dpi', "value": '203'},
  280. {"display": '300dpi', "value": '300'},
  281. {"display": '600dpi', "value": '600'},
  282. {"display": '1200dpi', "value": '1200'}]
  283. }),
  284. displayField: 'display',
  285. valueField: 'value',
  286. queryMode: 'local',
  287. value:resolutionCookie||'203',
  288. width:361,
  289. allowBlank:false,
  290. selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
  291. }]
  292. }],
  293. buttonAlign: 'center',
  294. buttons: [{
  295. text: '确定',
  296. handler: function(b) {
  297. var printers = Ext.getCmp('printers');
  298. var dpi = Ext.getCmp('dpi');
  299. if(printers && printers.value!= null){
  300. me.zebraPrint(caller,printers.value,dpi.value);
  301. b.ownerCt.ownerCt.close();
  302. }else{
  303. alert("请选择打印机 ");
  304. }
  305. }
  306. }, {
  307. text: '取消',
  308. handler: function(b) {
  309. b.ownerCt.ownerCt.close();
  310. }
  311. }]
  312. });
  313. });
  314. }else if(me.window.isHidden()){
  315. me.window.show();
  316. }
  317. },
  318. zebraPrint:function(caller,printer,dpi){
  319. var me = this;
  320. var params = new Object();
  321. params['condition'] = 'bar_id in ('+me.idS +")";
  322. sendData(caller,printer,dpi,params);
  323. }
  324. },
  325. {
  326. text : '取消',
  327. id : 'cancle',
  328. handler : function(btn) {
  329. var win = btn.ownerCt.ownerCt;
  330. win.close();
  331. }
  332. }
  333. ],
  334. });
  335. win.show();
  336. var ids = new Array();
  337. for(var i= 0;i<data.length;i++){
  338. ids.push(data[i].BAR_ID);
  339. }
  340. me.loadData(ids);
  341. Ext.getCmp('printNew').enable();
  342. var lps_Barcaller = 'Barcode!Print';
  343. var grid = Ext.getCmp("grid");
  344. var items = grid.store.data.items;
  345. var idArray = [];
  346. Ext.each(items, function(item, index){
  347. var id=item.data['bar_id'];
  348. if(id != null && id != ''&& id != '0' && id != 0){
  349. idArray.push(id);
  350. }
  351. })
  352. var idS = idArray.toString();
  353. //me.print(idS,lps_Barcaller);
  354. me.idS = idS;
  355. Ext.MessageBox.confirm('提示', '是否自动打印?',function(btn){
  356. if(btn=='yes'){
  357. me.zplPrint(lps_Barcaller);
  358. }
  359. });
  360. });
  361. }else if(res.exceptionInfo){
  362. showError(res.exceptionInfo);
  363. return;
  364. }
  365. }
  366. });
  367. },
  368. getBarInfo: function(){
  369. var bar = Ext.getCmp('barCode');
  370. if(bar && bar.value != null && bar.value != ''){
  371. var me=this;
  372. me.setLoading(true);
  373. Ext.Ajax.request({
  374. url : basePath +'scm/reserve/getBarInfo.action',
  375. params: {
  376. bar_code:bar.value,
  377. },
  378. method : 'post',
  379. callback : function(options,success,response){
  380. me.setLoading(false);
  381. var res = new Ext.decode(response.responseText);
  382. if(res.success){
  383. var data = res.data;
  384. var prod = data['prodcode'];
  385. var batch = data['batchcode'];
  386. var remain = data['remain'];
  387. var errMsg = data['errmsg'];
  388. Ext.getCmp("pr_code").setValue(prod);
  389. Ext.getCmp("batchCode").setValue(batch);
  390. Ext.getCmp("pr_partNumber").setValue(remain);
  391. Ext.getCmp("errMsg").setValue(errMsg);
  392. Ext.getCmp('errMsg').setFieldStyle('color:#FF0000;');
  393. if(errMsg == null || errMsg ==''){
  394. Ext.getCmp("errMsg").setValue('条码: '+Ext.getCmp('barCode').value+' 采集成功!');
  395. Ext.getCmp('errMsg').setFieldStyle('color:#22C32E;');
  396. }
  397. }else if(res.exceptionInfo){
  398. showError(res.exceptionInfo);
  399. return;
  400. }
  401. }
  402. });
  403. }
  404. } ,
  405. loadData: function(value) {
  406. var me = this;
  407. me.getFieldsValues("barcode",
  408. 'bar_id, bar_code, bar_remain', "bar_id in (" +value+") order by bar_id desc", [], function(data){
  409. var datas = Ext.JSON.decode(data), _datas = [];
  410. var grid = Ext.getCmp('grid');
  411. if(datas.length > 0) {
  412. var keys = Ext.Object.getKeys(datas[0]);
  413. Ext.Array.each(datas, function(d){
  414. var obj = {};
  415. Ext.Array.each(keys, function(key){
  416. obj[key.toLowerCase()] = d[key];
  417. });
  418. _datas.push(obj);
  419. });
  420. }
  421. store = grid.getStore();
  422. _datas.length > 0 && grid.store.loadData(_datas);
  423. grid.store.each(function(){
  424. this.dirty = true;
  425. });
  426. });
  427. },
  428. getFieldsValues: function(caller, fields, condition, data, fn){
  429. Ext.Ajax.request({
  430. url : basePath + 'common/getFieldsDatas.action',
  431. async: false,
  432. params: {
  433. caller: caller,
  434. fields: fields,
  435. condition: condition
  436. },
  437. method : 'post',
  438. callback : function(options,success,response){
  439. var localJson = new Ext.decode(response.responseText);
  440. if(localJson.exceptionInfo){
  441. showError(localJson.exceptionInfo);return;
  442. }
  443. if(localJson.success){
  444. data = localJson.data;
  445. fn && fn.call(null, localJson.data);
  446. }
  447. }
  448. });
  449. },
  450. zplPrint:function(caller){//zpl打印语句
  451. // 获取选择打印文件,用户选择分辨率,和打印机
  452. var me = this;
  453. if(!me.window){
  454. setup_web_print(function(printers,selected_printer){
  455. me.window = Ext.create('Ext.window.Window', {
  456. autoShow: true,
  457. title: '选择打印模板',
  458. width: 400,
  459. height: 300,
  460. layout: 'anchor',
  461. id :'template-win5',
  462. closeAction:'hide',
  463. items: [{
  464. anchor:'100% 100%',
  465. xtype:'form',
  466. buttonAlign : 'center',
  467. items:[{
  468. xtype: 'combo',
  469. id: 'printers',
  470. fieldLabel: '打印机列表',
  471. store: Ext.create('Ext.data.Store', {
  472. autoLoad: true,
  473. fields: ['display', 'value'],
  474. data:printers
  475. }),
  476. queryMode: 'local',
  477. displayField: 'display',
  478. valueField: 'value',
  479. width:361,
  480. allowBlank:false,
  481. value:selected_printer.uid,
  482. selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
  483. style:'margin-left:15px;margin-top:15px;'
  484. },{
  485. xtype: 'combo',
  486. id: 'dpi',
  487. fieldLabel: '打印机分辨率',
  488. style:'margin-left:15px;margin-top:15px;',
  489. store: Ext.create('Ext.data.Store', {
  490. fields: ['display', 'value'],
  491. data : [{"display": '203dpi', "value": '203'},
  492. {"display": '300dpi', "value": '300'},
  493. {"display": '600dpi', "value": '600'},
  494. {"display": '1200dpi', "value": '1200'}]
  495. }),
  496. displayField: 'display',
  497. valueField: 'value',
  498. queryMode: 'local',
  499. value:resolutionCookie||'203',
  500. width:361,
  501. allowBlank:false,
  502. selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
  503. }]
  504. }],
  505. buttonAlign: 'center',
  506. buttons: [{
  507. text: '确定',
  508. handler: function(b) {
  509. var printers = Ext.getCmp('printers');
  510. var dpi = Ext.getCmp('dpi');
  511. if(printers && printers.value!= null){
  512. me.zebraPrint(caller,printers.value,dpi.value);
  513. b.ownerCt.ownerCt.close();
  514. }else{
  515. alert("请选择打印机 ");
  516. }
  517. }
  518. }, {
  519. text: '取消',
  520. handler: function(b) {
  521. b.ownerCt.ownerCt.close();
  522. }
  523. }]
  524. });
  525. });
  526. }else if(me.window.isHidden()){
  527. me.window.show();
  528. }
  529. },
  530. zebraPrint:function(caller,printer,dpi){
  531. var me = this;
  532. var params = new Object();
  533. params['condition'] = 'bar_id in ('+me.idS +")";
  534. sendData(caller,printer,dpi,params);
  535. }
  536. });