You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

806 lines
32 KiB

3 days ago
  1. <#import "../master.ftl" as master>
  2. <@master.layout>
  3. <div class="page-header">
  4. <h3>${title}</h3>
  5. </div>
  6. <div class="row" id="app">
  7. <div class="col-md-4">
  8. <p><input id="rollNo" name="rollNo" type="text" class="form-control" placeholder="Roll No" /></p>
  9. <table id="tblInfo" class="table">
  10. </table>
  11. </div>
  12. <input type="hidden" id="processNumber" value="">
  13. <input type="hidden" id="orderNo" value="">
  14. <p><button id="btnStatus" onclick="updateStatus()" class="btn btn-default" style="margin-left: 15px;">Refresh Status</button></p>
  15. <div class="col-md-1" id="actions" style="display: none">
  16. <#if currentUser.isAdmin || currentUser.authorities?contains("refreshRollStatus")>
  17. <p><button id="refreshRollStatus" onclick="refreshRollStatus()" class="btn btn-default">Reverse All Scanning Data</button></p>
  18. </#if>
  19. <#if func?is_string && func != "indigo">
  20. <p><button id="btnConfirm" onclick="doConfirm()" class="btn btn-default">Confirm quantity</button></p>
  21. </#if>
  22. <#if func?is_string && func == "indigo">
  23. <p><button id="scanMaterial" onclick="scanMaterialModal()" class="btn btn-default">扫描材料</button></p>
  24. </#if>
  25. <p><button id="btnStart" onclick="doStart()" class="btn btn-default">Scan</button></p>
  26. <p><button id="btnSetup" onclick="doSetup()" class="btn btn-default">Scan/setup</button></p>
  27. <p><button id="btnFai" onclick="doFai()" class="btn btn-default">Scan/first off</button></p>
  28. <p><button id="btnEai" onclick="doEai()" class="btn btn-default">Scan/last off</button></p>
  29. <#if func?is_string && func == "indigo">
  30. <p><button id="btnCreateRoll" onclick="doCreateRoll()" class="btn btn-default">Create new roll</button></p>
  31. </#if>
  32. <#if func?is_string && func == "aoi">
  33. <p><button id="btnSlitting" onclick="showSlittingRolls()" class="btn btn-default">Slit roll</button></p>
  34. </#if>
  35. <#if func?is_string && func != "indigo">
  36. <p><button id="btnBad" onclick="doBad()" class="btn btn-default">Type defective serial number</button></p>
  37. <p><button id="btnBadRange" onclick="doBadRange()" class="btn btn-default">Batch defective serial number</button></p>
  38. </#if>
  39. <#if func?is_string && func == "abg">
  40. <p><button id="printSlitting" onclick="slittingPrint()" class="btn btn-default">Print Label</button></p>
  41. </#if>
  42. </div>
  43. </div>
  44. <div class="row" >
  45. <div class="col-md-12" id="tblRollOpInfo">
  46. </div>
  47. </div>
  48. <div id="dlg" class="easyui-dialog for-scan" style="width:500px;display: none;"
  49. closed="true" buttons="#dlg-buttons">
  50. <form id="fm" method="post" novalidate style="margin:0;padding:20px 20px">
  51. <div style="margin-bottom:10px">
  52. <label id="rollNo_display" class="easyui-textbox" data-options="labelWidth:100,disabled:true" required="true" label="Roll No:" style="width:100%"></label>
  53. </div>
  54. <div id="serial_input_1st" style="margin-bottom:10px">
  55. <input id="firstSerialNo" name="firstSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The first serial number:" style="width:100%">
  56. </div>
  57. <div id="serial_input_2nd" style="margin-bottom:10px">
  58. <input id="endSerialNo" name="endSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The second serial number:" style="width:100%">
  59. </div>
  60. </form>
  61. </div>
  62. <div id="dlg-buttons" style="display: none;">
  63. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="doOK()" style="width:90px">OK</a>
  64. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">Cancel</a>
  65. </div>
  66. <div id="dlgConfirm" class="easyui-dialog for-scan" style="width:500px;display: none;"
  67. closed="true" buttons="#dlg-buttons-confirm">
  68. <form id="fm" method="post" novalidate style="margin:0;padding:20px 20px">
  69. <div style="margin-bottom:10px">
  70. <input name="workNo" class="easyui-textbox" data-options="labelWidth:100" required="true" label="Emoloyee ID:" style="width:100%">
  71. </div>
  72. </form>
  73. </div>
  74. <div id="dlg-buttons-confirm" style="display: none;">
  75. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="doConfirmOK()" style="width:90px">OK</a>
  76. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlgConfirm').dialog('close')" style="width:90px">Cancel</a>
  77. </div>
  78. <div id="dlgSlitting" class="easyui-dialog for-scan" style="width:500px;display: none;"
  79. closed="true" buttons="#dlg-buttons-slitting" data-options="modal:true">
  80. <form method="post" novalidate style="margin:0;padding:20px 20px">
  81. <div style="margin-bottom:10px">
  82. <input id="noOfCross" class="easyui-textbox" data-options="labelWidth:100,disabled:true" required="true" label="Roll Qty:" style="width:100%">
  83. </div>
  84. <div style="margin-bottom:10px">
  85. <input name="endSerialNo" class="easyui-textbox" data-options="labelWidth:100" required="true" label="结束序列号:" style="width:100%">
  86. </div>
  87. </form>
  88. </div>
  89. <div id="dlg-buttons-slitting" style="display: none;">
  90. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="doSlittingOK()" style="width:90px">OK</a>
  91. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlgSlitting').dialog('close')" style="width:90px">Cancel</a>
  92. </div>
  93. <!-- 卷分切-->
  94. <div id="dlgSlittingRolls" class="easyui-dialog" style="width:800px;display: none;"
  95. closed="true" data-options="modal:true" >
  96. <table id="dgSlittingRolls" class="easyui-datagrid" style="width:100%;height:300px;display: none;"
  97. data-options="pagination: false, showFooter: true, singleSelect:true, fitColumns:true , method:'get', pageSize:500,toolbar:'#tbSlittingRolls'">
  98. <thead>
  99. <tr>
  100. <th data-options="field:'slittingNo',width:80,formatter:formatLodopPrint('slittingNo')">Slitting Roll No</th>
  101. <th data-options="field:'serialScope',width:300">序列号范围</th>
  102. <th data-options="field:'status',width:60">Status</th>
  103. <th data-options="field:'col',width:30">No. of Cross</th>
  104. <th data-options="field:'rewindFlag',width:50">需要倒卷</th>
  105. <th data-options="field:'combineFlag',width:50">倒卷完成</th>
  106. </tr>
  107. </thead>
  108. </table>
  109. </div>
  110. <div id="tbSlittingRolls" style="padding:10px 5px;display: none;">
  111. <div>
  112. <a href="javascript:void(0)" id="tbAdd" class="easyui-linkbutton" iconCls="icon-add" onclick="doSlitting()">新增卷</a>
  113. <a href="javascript:void(0)" id="tbAdd" class="easyui-linkbutton" iconCls="icon-add" onclick="doSlittingTure()">Correct Data</a>
  114. </div>
  115. </div>
  116. <!-- 扫描材料modal(优化版) -->
  117. <div id="scan_material_dlg" class="easyui-dialog" style="width: 720px; display: none;"
  118. closed="true" data-options="modal:true, onOpen:function(){$('#scan_material_batch').focus();}, buttons:'#tb_scan_material'">
  119. <form id="scan_material_fm" method="post" novalidate style="margin:0; padding: 16px 16px 8px 16px;">
  120. <div id = "material_batch_wrap" style="margin-bottom:10px">
  121. <label style="display:block; margin-bottom:6px; color:#666;">请扫描材料条码:</label>
  122. <textarea id="scan_material_batch" name="code" rows="3" style="width:100%; resize: vertical;"
  123. placeholder="请扫描材料批次"></textarea>
  124. </div>
  125. <div id="material_serial_wrap" style="margin-bottom:10px; display:none;">
  126. <label style="display:block; margin-bottom:6px; color:#666;">请扫描结束码包:</label>
  127. <input id="material_serial_no" name="materialSerialNo" class="easyui-textbox" style="width:100%" placeholder="请扫描结束码包">
  128. </div>
  129. </form>
  130. <table id="scan_material_list" class="easyui-datagrid" style="width:100%;height: 300px;"
  131. data-options="pagination:false, singleSelect:true, fitColumns:true, method:'POST'">
  132. <thead>
  133. <tr>
  134. <th data-options="field:'rollNo',width:120">Roll No</th>
  135. <th data-options="field:'componentPartNo',width:140">物料号</th>
  136. <th data-options="field:'customerBatchNo',width:160">材料批次号</th>
  137. <th data-options="field:'columnSortIndex',width:80,align:'center'">No. of Cross</th>
  138. <th data-options="field:'startRow',width:80,align:'center'">From Row No</th>
  139. <th data-options="field:'endRow',width:80,align:'center'">To Row No</th>
  140. <th data-options="field:'scanTime',width:140">扫描时间</th>
  141. <th data-options="field:'scanBy',width:100">扫描人</th>
  142. </tr>
  143. </thead>
  144. </table>
  145. </div>
  146. <div id="tb_scan_material" style="padding:10px 5px; display: none; text-align: center;">
  147. <div>
  148. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#scan_material_dlg').dialog('close')">Close</a>
  149. </div>
  150. </div>
  151. <style>
  152. table.roll-op-serials {
  153. border: 1px solid gray;
  154. }
  155. table.roll-op-serials td{
  156. border: 1px dotted gray;
  157. padding: 3px;
  158. text-align: center;
  159. text-align: center;
  160. font-family: Arial,monospace;
  161. font-size: 11px;
  162. background-color: aliceblue;
  163. }
  164. table.roll-op-serials td .serial-no{
  165. font-size: 11px;
  166. }
  167. </style>
  168. <script type="text/javascript" src="/js/layer/layer.js"></script>
  169. <script>
  170. var formPostUrl="";
  171. var currentRoll = "";
  172. var currentRollOp = {};
  173. var currentOrder={};
  174. var urlPath="/rollop/${func}";
  175. var newUrlPath="/indigo";
  176. var work_center_data;
  177. var temp_row;
  178. var doUrl = "";
  179. var flag = "N";
  180. var enableScanMaterialNo = false;
  181. function show2ndBox(b){
  182. showEl("#dlg #serial_input_1st", true);
  183. showEl("#dlg #serial_input_2nd", true);
  184. showEl("#dlg #serial_input_2nd", b);
  185. $('#dlg #endSerialNo').textbox({disabled:!b});
  186. }
  187. function showDialog(title, serialNum, postUrl){
  188. show2ndBox(serialNum > 1);
  189. $('#dlg').dialog('open').dialog('center').dialog('setTitle',title);
  190. $('#dlg form').form('clear');
  191. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  192. formPostUrl = urlPath + postUrl + "?rollNo="+currentRoll;
  193. doUrl = urlPath + "/badRange/do?rollNo="+currentRoll;
  194. }
  195. /* 新的 只给startDo setupDo faiDo eaiDo LR 2025-10-30*/
  196. function showDialogNew(title, serialNum, postUrl){
  197. show2ndBox(serialNum > 1);
  198. $('#dlg').dialog('open').dialog('center').dialog('setTitle',title);
  199. $('#dlg form').form('clear');
  200. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  201. formPostUrl = newUrlPath + postUrl + "?rollNo="+currentRoll;
  202. doUrl = urlPath + "/badRange/do?rollNo="+currentRoll;
  203. }
  204. function doConfirm(){
  205. $('#dlgConfirm').dialog('open').dialog('center').dialog('setTitle',"Confirm quantity");
  206. $('#dlgConfirm form').form('clear');
  207. }
  208. function doConfirmOK(){
  209. console.log(urlPath + "/confirm/do?rollNo=" + currentRoll)
  210. $('#dlgConfirm form').form('submit',{
  211. url: urlPath + "/confirm/do?rollNo=" + currentRoll,
  212. onSubmit: function(){
  213. return $(this).form('validate');
  214. },
  215. success: function(result){
  216. var result = $.parseJSON(result);
  217. if (result.success){
  218. refreshRollInfo(currentRoll);
  219. $('#dlgConfirm').dialog('close'); // close the dialog
  220. } else {
  221. $.messager.alert('error',result.errorMsg, 'error');
  222. }
  223. }
  224. });
  225. }
  226. //修正so_roll状态
  227. function updateStatus(){
  228. let func = '${func}';
  229. $.ajax({
  230. url: "/aoi/slitting/updateStatus",
  231. type:"POST",
  232. data:{
  233. 'rollNo': currentRoll,
  234. 'func': func,
  235. },
  236. dataType:"JSON",
  237. success: function (ret) {
  238. console.log(ret);
  239. if(ret.success == false){
  240. $.messager.alert('error',ret.errorMsg, 'error');
  241. }else if(ret.success==true){
  242. refreshRollInfo(currentRoll)
  243. $.messager.alert('info',"Successfully",'info');
  244. }
  245. }
  246. })
  247. }
  248. function doSlitting(){
  249. $('#dlgSlitting').dialog('open').dialog('center').dialog('setTitle',"Slit roll");
  250. $('#dlgSlitting form').form('clear');
  251. $('#dlgSlitting #noOfCross').textbox({"value": 1});
  252. }
  253. function showSlittingRolls(){
  254. $('#dlgSlittingRolls').dialog('open').dialog('center').dialog('setTitle',"Slit roll");
  255. $("#dgSlittingRolls").datagrid({url: "/aoi/slittingrolls/"+currentRoll});
  256. }
  257. function doSlittingOK(){
  258. $('#dlgSlitting form').form('submit',{
  259. url: "/aoi/slitting/do?rollNo=" + currentRoll,
  260. onSubmit: function(){
  261. return $(this).form('validate');
  262. },
  263. success: function(result){
  264. console.log(result);
  265. var result = $.parseJSON(result);
  266. if (result.success){
  267. refreshRollInfo(currentRoll);
  268. $('#dgSlittingRolls').datagrid('reload');
  269. $('#dlgSlitting').dialog('close'); // close the dialog
  270. } else {
  271. $.messager.alert('error',result.errorMsg, 'error');
  272. }
  273. }
  274. });
  275. }
  276. function doSlittingTure(){
  277. // $('#dlgSlitting form').form('submit',{
  278. // url: "/aoi/slitting/doTure?rollNo=" + currentRoll,
  279. // onSubmit: function(){
  280. // return $(this).form('validate');
  281. // },
  282. // success: function(result){
  283. // var result = $.parseJSON(result);
  284. // if (result.success){
  285. // $.messager.alert('info',"Successfully",'info');
  286. // } else {
  287. // $.messager.alert('error',result.errorMsg, 'error');
  288. // }
  289. // }
  290. // });
  291. $.ajax({
  292. url: "/aoi/slitting/doTure",
  293. type:"POST",
  294. data:{
  295. 'rollNo':currentRoll,
  296. },
  297. dataType:"JSON",
  298. success: function (ret) {
  299. console.log(ret);
  300. if(ret.success==false){
  301. $.messager.alert('error',ret.data, 'error');
  302. }else if(ret.success==true){
  303. $.messager.alert('info',"Successfully",'info');
  304. }
  305. }
  306. })
  307. }
  308. function doStart(){
  309. flag = "N";
  310. $("#dlg #firstSerialNo").textbox({disabled:false});
  311. showDialogNew("Scan", 1, "/start/do");
  312. }
  313. function doSetup(){
  314. flag = "N";
  315. $("#dlg #firstSerialNo").textbox({disabled:true});
  316. showDialogNew("Scan/setup", 2, "/setup/do");
  317. $("#dlg #firstSerialNo").textbox({value: currentRollOp.toSetupSerialNo || ""});
  318. }
  319. function doFai(){
  320. flag = "N";
  321. $("#dlg #firstSerialNo").textbox({disabled:false});
  322. showDialogNew("Scan/first off", 2, "/fai/do");
  323. }
  324. function doEai(){
  325. flag = "N";
  326. $("#dlg #firstSerialNo").textbox({disabled:false});
  327. showDialogNew("Scan/last off", 2, "/eai/do");
  328. }
  329. function doBad(){
  330. flag = "N";
  331. showDialog("Type defective serial number", 1, "/bad/do");
  332. }
  333. // function doIpqc(){
  334. // flag = "N";
  335. // showDialog("IPQC抽样", 1, "/ipqc/do");
  336. // }
  337. function doBadRange(){
  338. $("#badOK").linkbutton({"disabled": false});
  339. flag = "Y";
  340. //showDialog("Batch defective serial number", 2, "/badRange/do");
  341. showDialog("Batch defective serial number", 2, "/badRange/count");
  342. }
  343. <#if func == "aoi">
  344. function doEai(){
  345. showEl("#dlg #serial_input_1st", false);
  346. showEl("#dlg #serial_input_2nd", false);
  347. $('#dlg').dialog('open').dialog('center').dialog('setTitle',"Scan/last off");
  348. $('#dlg form').form('clear');
  349. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  350. $('#dlg #firstSerialNo').textbox({"value": "-"});
  351. $('#dlg #endSerialNo').textbox({"value": "-"});
  352. formPostUrl = urlPath + "/eai/do" + "?rollNo="+currentRoll;
  353. }
  354. </#if>
  355. function doOK(){
  356. var badFirstSN = $("#firstSerialNo").val();
  357. var badEndSN = $("#endSerialNo").val();
  358. $("#badOK").linkbutton({"disabled": true});
  359. $('#dlg form').form('submit',{
  360. url: formPostUrl,
  361. onSubmit: function(){
  362. return $(this).form('validate');
  363. },
  364. success: function(result){
  365. if(flag=="Y"){
  366. var result = $.parseJSON(result);
  367. if (result.errorMsg){
  368. $("#badOK").linkbutton({"disabled": false});
  369. $('#dlg').dialog('close');
  370. $.messager.alert('Error',result.errorMsg, 'error');
  371. } else {
  372. if(result.count>1000){
  373. $.messager.confirm('Confirm','Defective quantity greater than 1000, continue??',function(r) {
  374. if (r){
  375. console.log("首个序列号:"+badFirstSN);
  376. console.log("最后一个序列号:"+badEndSN);
  377. console.log("请求地址:"+doUrl);
  378. $.post(doUrl, {firstSerialNo:badFirstSN,endSerialNo:badEndSN}, function(data){
  379. $("#badOK").linkbutton({"disabled": false});
  380. console.log(data);
  381. refreshRollInfo(currentRoll);
  382. if (data.success){
  383. $('#dlg form').form('clear');
  384. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  385. //2020-09-16 添加不良录入成功提示
  386. $.messager.alert('Success','The defect has been reported successfully, the total qty is '+result.count, 'info');
  387. }else{
  388. $('#dlg').dialog('close'); // close the dialog
  389. }
  390. });
  391. }else{
  392. $("#badOK").linkbutton({"disabled": false});
  393. $('#dlg').dialog('close');
  394. }
  395. });
  396. }else{
  397. $.post(doUrl, {firstSerialNo:badFirstSN,endSerialNo:badEndSN}, function(data){
  398. $("#badOK").linkbutton({"disabled": false});
  399. refreshRollInfo(currentRoll);
  400. if (data.success){
  401. $('#dlg form').form('clear');
  402. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  403. //2020-09-16 添加不良录入成功提示
  404. $.messager.alert('Success','The defect has been reported successfully, the total qty is '+result.count, 'info');
  405. }else{
  406. $('#dlg').dialog('close'); // close the dialog
  407. }
  408. });
  409. }
  410. }
  411. }else{
  412. var result = $.parseJSON(result);
  413. $("#badOK").linkbutton({"disabled": false});
  414. if (result.errorMsg){
  415. $.messager.alert('Error',result.errorMsg, 'error');
  416. } else {
  417. refreshRollInfo(currentRoll);
  418. if (formPostUrl.indexOf("/bad/") >= 0 || formPostUrl.indexOf("/ipqc/") >= 0){
  419. $('#dlg form').form('clear');
  420. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  421. }else{
  422. $('#dlg').dialog('close'); // close the dialog
  423. }
  424. }
  425. }
  426. }
  427. });
  428. }
  429. $("#rollNo").on("keydown", function(){
  430. if(event.keyCode == 13){
  431. refreshRollInfo($.trim($(this).val()));
  432. }
  433. });
  434. <#if RequestParameters.rollNo ??>
  435. $(function(){
  436. $("#rollNo").val("${RequestParameters.rollNo}");
  437. refreshRollInfo("${RequestParameters.rollNo}");
  438. });
  439. </#if>
  440. function doCreateRoll(){
  441. if (currentOrder){
  442. $.messager.confirm('Confirm','Are you sure to create new roll for the shop order <b>'+currentOrder.orderNo+'</b>? ',function(r) {
  443. if (r){
  444. $.post("/indigo/create_roll/do", {orderNo: currentOrder.orderNo}, function(data){
  445. if (data.success && data.newRollNo){
  446. $("#rollNo").val(data.newRollNo);
  447. refreshRollInfo(data.newRollNo);
  448. }
  449. });
  450. }
  451. });
  452. }
  453. }
  454. function slittingPrint() {
  455. $.messager.confirm('Confirm','Is Printed ?',function(r){
  456. if (r){
  457. $("#ifmforprint").attr('src', "/print/rollnoSlitting/" + currentRollOp.operationNo + "/" + currentRoll + "/");
  458. console.log("/print/rollnoSlitting/" + currentRollOp.operationNo + "/" + currentRoll + "/")
  459. }
  460. });
  461. }
  462. function refreshRollStatus(){
  463. $.messager.confirm('Confirm','Are you sure to reverse all scanning data ?',function(r){
  464. if (r){
  465. $.post(urlPath+"/refreshRollStatus", {rollNo: currentRoll}, function(data){
  466. if (data.success ){
  467. refreshRollInfo($("#rollNo").val());
  468. $.messager.alert('info',"Successfully",'info');
  469. }else{
  470. $.messager.alert('error',data.errorMsg,'error');
  471. }
  472. })
  473. }
  474. });
  475. }
  476. //回车触发事件
  477. function refreshRollInfo(rollNo){
  478. <#if func == "indigo">
  479. $("#processNumber").val("10");
  480. </#if>
  481. <#if func == "abg">
  482. $("#processNumber").val("20");
  483. </#if>
  484. <#if func == "aoi">
  485. $("#processNumber").val("30");
  486. </#if>
  487. var $tblInfo = $("#tblInfo");
  488. var $tblRollOpInfo = $("#tblRollOpInfo");
  489. $tblInfo.html("");
  490. $tblRollOpInfo.html("");
  491. $.post(urlPath+"/getRoll", {rollNo: rollNo}, function(data){
  492. if (data.success && data.roll){
  493. //首卷是否完成了上料
  494. showEl("#actions", data.showAction);
  495. enableEl("#btnConfirm", data.enableConfirm);
  496. enableEl("#btnStatus", data.enableStatus);
  497. enableEl("#btnStart", data.enableStart);
  498. enableEl("#btnSetup", data.enableSetup);
  499. enableEl("#btnFai", data.enableFai);
  500. enableEl("#btnEai", data.enableEai);
  501. <#if func == "scanning">
  502. showEl("#btnStart");
  503. showEl("#btnSetup");
  504. showEl("#btnFai");
  505. showEl("#btnEai");
  506. showEl("#btnBad");
  507. </#if>
  508. <#if currentUser.isAdmin || currentUser.authorities?contains("refreshRollStatus")>
  509. enableEl("#refreshRollStatus", true);
  510. </#if>
  511. <#if func != "indigo">
  512. enableEl("#btnBad",!data.scanStatus);
  513. enableEl("#btnBadRange", !data.scanStatus);
  514. enableEl("#printSlitting", data.rollOp && data.rollOp.remainSnCount);
  515. </#if>
  516. <#if func == "indigo">
  517. enableEl("#scanMaterial", data.rollOp && data.enableScanMaterial);
  518. //判断是否显示
  519. if(data.rollOp && data.enableScanMaterialBatch){
  520. $('#material_batch_wrap').show();
  521. }else {
  522. $('#material_batch_wrap').hide();
  523. }
  524. if(data.rollOp && data.enableScanMaterialNo){
  525. $('#material_serial_wrap').show();
  526. }else {
  527. $('#material_serial_wrap').hide();
  528. }
  529. enableScanMaterialNo = data.enableScanMaterialNo;
  530. </#if>
  531. currentRoll = data.roll.rollNo;
  532. currentRollOp = data.rollOp;
  533. currentOrder=data.roll.order;
  534. var rollNoDisplay = data.roll.rollNo;
  535. if (data.rollOp && data.rollOp.remainSnCount){
  536. rollNoDisplay = "<a target='forprint' href='/print/rollno/"+data.rollOp.operationNo+"/"+rollNoDisplay+"/'>"+rollNoDisplay+"</a>";
  537. }
  538. $tblInfo.append("<tr><td>SO No:</td><td>"+data.roll.orderNo+"</td></tr>");
  539. $tblInfo.append("<tr><td>Roll No:</td><td>"+rollNoDisplay+"</td></tr>");
  540. $tblInfo.append("<tr><td>Status</td><td>"+(data.roll.status || "-")+"</td></tr>");
  541. $("#orderNo").val(data.roll.orderNo);
  542. if (data.rollOpHtml){
  543. $tblRollOpInfo.append(data.rollOpHtml);
  544. }
  545. if (data.prevCount){
  546. $tblInfo.append("<tr><td>Serials Qty:</td><td>"+(data.prevCount)+"</td></tr>");
  547. }
  548. $tblInfo.append("<tr><td>Good Products Qty:</td><td>"+(data.qtyBad)+"</td></tr>");
  549. $tblInfo.append("<tr><td>Defect Product Qty:</td><td>"+(data.qtyApprove)+"</td></tr>");
  550. $tblInfo.append("<tr><td>Total Qty:</td><td>"+(data.qtyAll)+"</td></tr>");
  551. if (data.prevCount){
  552. $tblInfo.append("<tr><td>Different Qty:</td><td>"+(data.prevDifferent)+"</td></tr>");
  553. }
  554. if (data.badSns){
  555. $tblInfo.append("<tr><td>Defective serial number:</td><td>"+(data.badSns.split(",").join("<br />") || "-")+"</td></tr>");
  556. }
  557. if (data.slittingRolls){
  558. $tblInfo.append("<tr><td>Slitting Roll No:</td><td>"+(data.slittingRolls.split(",").join("<br />") || "-")+"</td></tr>");
  559. }
  560. checkWithWorkingOrder(data.roll.order.orderNo);
  561. }else{
  562. $tblInfo.append("<tr><td>"+data.errorMsg+"</td></tr>");
  563. }
  564. })
  565. }
  566. function checkWithWorkingOrder(orderNo) {
  567. var workingOrder = $("#hdnWorkingOrder").val();
  568. if (workingOrder != orderNo){
  569. var msg = 'Are you sure to swith to the order <b>'+orderNo+'</b>?';
  570. if (workingOrder != "") {
  571. msg = 'The order of this roll does not match with the current order '+workingOrder+'.';
  572. }
  573. $("#tblInfo").html("");
  574. $("#tblRollOpInfo").html("");
  575. $("#actions").hide();
  576. $.messager.alert("Error", msg, "error", function(){
  577. $("#rollNo").val("").focus();
  578. });
  579. }
  580. }
  581. function getday(){
  582. lay('.Selection_time').each(function(){
  583. laydate.render({
  584. elem: this
  585. });
  586. });
  587. $('.Selection_time').val(getToday());
  588. }
  589. //获取当天日期
  590. function getToday(){
  591. var date = new Date();
  592. var seperator1 = "-";
  593. var year = date.getFullYear();
  594. var month = date.getMonth() + 1;
  595. var strDate = date.getDate();
  596. if (month >= 1 && month <= 9) {
  597. month = "0" + month;
  598. }
  599. if (strDate >= 0 && strDate <= 9) {
  600. strDate = "0" + strDate;
  601. }
  602. var currentdate = year + seperator1 + month + seperator1 + strDate;
  603. return currentdate;
  604. }
  605. //给单选事件加事件监听
  606. $("#close_schedule_flag input[name='closed']").bind('change', function(){
  607. $("#close_schedule_flag").find('input[name="closed"]').removeAttr('checked');
  608. $(this).prop('checked', true);
  609. });
  610. //查询operator是否存在
  611. /* function findOperator(operatorId,colsedFlag){
  612. $.ajax({
  613. url: "/rollop/findOperator",
  614. type:"POST",
  615. data: {"operatorId":operatorId},// 你的formid
  616. dataType:"JSON",
  617. success: function (data) {
  618. parent.layer.closeAll();
  619. if(data==false){
  620. layer.msg("用户不存在!");
  621. return false;
  622. }else{
  623. }
  624. }
  625. })
  626. } */
  627. $(function () {
  628. $("#rollNo").focus();
  629. })
  630. //扫描材料上级
  631. function scanMaterialModal(){
  632. // 打开对话框
  633. $('#scan_material_dlg').dialog('open').dialog('center').dialog('setTitle', "材料扫描");
  634. $('#scan_material_batch').val('').focus();
  635. // 根据 是否显示材料 显示/隐藏结束码包输入
  636. if (enableScanMaterialNo){
  637. $('#material_serial_wrap').show();
  638. // 处理材料接料时候的最后的码包(EasyUI textbox 需绑定到内部输入框)
  639. $('#material_serial_no').textbox('setValue','');
  640. var $serialIn = $('#material_serial_no').textbox('textbox');
  641. //事件绑定
  642. $serialIn.off('keydown.serial_in').on('keydown.serial_in', function(e){
  643. if (e.which === 13) {
  644. e.preventDefault();
  645. scanSoRollMaterialBatch(true);
  646. }
  647. });
  648. }else{
  649. //$('#material_serial_wrap').hide();
  650. }
  651. // 触发布局重算,避免底部灰色残留
  652. $('#scan_material_dlg').dialog('resize');
  653. $('#scan_material_list').datagrid('resize');
  654. // 初始化/刷新列表
  655. $("#scan_material_list").datagrid({
  656. url: "/material/querySoRollMaterialBatchs",
  657. type: "POST",
  658. dataType: "JSON",
  659. queryParams: {
  660. orderNo: currentOrder.orderNo,
  661. rollNo: currentRoll,
  662. operationNo: 10
  663. }
  664. });
  665. }
  666. //提交材料扫描(Enter 或 按钮)
  667. function scanSoRollMaterialBatch(snFlag){
  668. var rawStr = $.trim($('#scan_material_batch').val());
  669. //检查
  670. if(rawStr == null || "" == rawStr){
  671. $.messager.alert('error','请扫描或输入材料条码','info');
  672. $('#scan_material_batch').focus();
  673. return;
  674. }
  675. //检查是否是接料 接料的时候必须输入码包号
  676. if (enableScanMaterialNo && snFlag){
  677. //继续往下走
  678. }else if (enableScanMaterialNo && !snFlag){
  679. $('#material_serial_no').textbox('setValue','');
  680. $('#material_serial_no').textbox('textbox').focus();
  681. return;
  682. }
  683. //拆分数据
  684. var parts = rawStr.split(";");
  685. //检查
  686. // 至少需要8个字段 或者两个字段
  687. if (!(parts.length == 2 || parts.length == 9)) {
  688. $.messager.alert('error','材料批次数据有误!','info');
  689. return null;
  690. }
  691. let endScanMaterialSerialNo = $.trim($('#material_serial_no').val());
  692. $('#scan_material_batch').val('');
  693. $('#material_serial_no').textbox('setValue','');
  694. //组装数据
  695. var resultRow = {"orderNo": currentOrder.orderNo, "operationNo": 10, "operationName": "Indigo", "rollNo": currentRoll,
  696. "qrCode": rawStr, "scanSerialFlag": enableScanMaterialNo, "endSerialNo": endScanMaterialSerialNo, "username": username};
  697. $.ajax({
  698. url: "/material/scanSoRollMaterialBatch",
  699. type: "POST",
  700. dataType: "JSON",
  701. async: false,
  702. contentType: "application/json",
  703. data: JSON.stringify(resultRow),
  704. success: function (data) {
  705. if(data && data.success){
  706. $('#scan_material_batch').val('').focus();
  707. $('#material_serial_no').textbox('setValue','');
  708. $('#scan_material_list').datagrid('reload');
  709. $.messager.show({title: 'Point',
  710. msg: data.resultMsg,
  711. timeout: 1500,
  712. showType: 'slide'});
  713. }else if(data && data.resultCode == 201){
  714. $('#scan_material_batch').val('').focus();
  715. $('#material_serial_no').textbox('setValue','');
  716. $('#scan_material_list').datagrid('reload');
  717. }else{
  718. $.messager.alert('error', data.resultMsg || '扫描失败','error');
  719. }
  720. }
  721. });
  722. }
  723. // 在文本域按Enter提交(简洁写法)
  724. $('#scan_material_batch').keypress(function(e){
  725. if(e.which === 13){
  726. e.preventDefault();
  727. scanSoRollMaterialBatch(false);
  728. }
  729. });
  730. </script>
  731. </@master.layout>