ProdCreateBarcode.js 17 KB

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