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.

1035 lines
38 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. <p><button id="scanMaterial" onclick="scanMaterialModal()" class="btn btn-default">扫描材料</button></p>
  22. </#if>
  23. <p><button id="btnStart" onclick="doStartModal()" class="btn btn-default">Scan</button></p>
  24. <p><button id="btnSetup" onclick="doSetupModal()" class="btn btn-default">Scan/setup</button></p>
  25. <p><button id="btnFai" onclick="doFaiModal()" class="btn btn-default">Scan/first off</button></p>
  26. <p><button id="btnCut" onclick="showCutRolls()" class="btn btn-default">Slit roll</button></p>
  27. <p><button id="btnEai" onclick="countEaiRows()" class="btn btn-default">Scan/last off</button></p>
  28. <#if func?is_string && func == "indigo">
  29. <p><button id="btnCreateRoll" onclick="doCreateRoll()" class="btn btn-default">Create new roll</button></p>
  30. </#if>
  31. <#if func?is_string && func != "indigo">
  32. <p><button id="btnBad" onclick="doBadModal()" class="btn btn-default">Type defective serial number</button></p>
  33. <p><button id="btnBadRange" onclick="doBadRangeModal()" class="btn btn-default">Batch defective serial number</button></p>
  34. </#if>
  35. <#if func?is_string && func == "abg">
  36. <p><button id="printSlitting" onclick="slittingPrint()" class="btn btn-default">Print Label</button></p>
  37. </#if>
  38. </div>
  39. </div>
  40. <div class="row" >
  41. <div class="col-md-12" id="tblRollOpInfo">
  42. </div>
  43. </div>
  44. <!-- 开工扫号的modal -->
  45. <div id="dlg-start" class="easyui-dialog for-scan" style="width:500px;display: none;"
  46. closed="true" buttons="#dlg-start-buttons">
  47. <form id="fm-start" method="post" novalidate style="margin:0;padding:20px 20px">
  48. <div style="margin-bottom:10px">
  49. <input id="start_firstSerialNo" name="firstSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The first serial number:" style="width:100%">
  50. </div>
  51. </form>
  52. </div>
  53. <div id="dlg-start-buttons" style="display: none;">
  54. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="doStart()" style="width:90px">OK</a>
  55. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg-start').dialog('close')" style="width:90px">Cancel</a>
  56. </div>
  57. <!-- 调机扫号 -->
  58. <div id="dlg-setup" class="easyui-dialog for-scan" style="width:500px;display: none;" closed="true" buttons="#dlg-setup-buttons">
  59. <form id="fm-setup" method="post" novalidate style="margin:0;padding:20px 20px">
  60. <div style="margin-bottom:10px">
  61. <input id="setup_firstSerialNo" name="firstSerialNo" class="easyui-textbox" disabled="disabled" data-options="labelWidth:100" label="The first serial number:" style="width:100%">
  62. </div>
  63. <div style="margin-bottom:10px">
  64. <input id="setup_endSerialNo" name="endSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The second serial number:" style="width:100%">
  65. </div>
  66. </form>
  67. </div>
  68. <div id="dlg-setup-buttons" style="display: none;">
  69. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="doSetup()" style="width:90px">OK</a>
  70. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg-setup').dialog('close')" style="width:90px">Cancel</a>
  71. </div>
  72. <!-- 首件扫号 -->
  73. <div id="dlg-fai" class="easyui-dialog for-scan" style="width:500px;display: none;" closed="true" buttons="#dlg-fai-buttons">
  74. <form id="fm-fai" method="post" novalidate style="margin:0;padding:20px 20px">
  75. <div style="margin-bottom:10px">
  76. <input id="fai_firstSerialNo" name="firstSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The first serial number:" style="width:100%">
  77. </div>
  78. <div style="margin-bottom:10px">
  79. <input id="fai_endSerialNo" name="endSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="The second serial number:" style="width:100%">
  80. </div>
  81. </form>
  82. </div>
  83. <div id="dlg-fai-buttons" style="display: none;">
  84. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="doFai()" style="width:90px">OK</a>
  85. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg-fai').dialog('close')" style="width:90px">Cancel</a>
  86. </div>
  87. <!-- 单个不良 -->
  88. <div id="dlg-bad" class="easyui-dialog for-scan" style="width:500px;display: none;" closed="true" buttons="#dlg-bad-buttons">
  89. <form id="fm-bad" method="post" novalidate style="margin:0;padding:20px 20px">
  90. <div style="margin-bottom:10px">
  91. <input id="bad_serialNo" name="serialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="Defective serial number:" style="width:100%">
  92. </div>
  93. </form>
  94. </div>
  95. <div id="dlg-bad-buttons" style="display: none;">
  96. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="doSingleBad()" style="width:90px">OK</a>
  97. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg-bad').dialog('close')" style="width:90px">Cancel</a>
  98. </div>
  99. <!-- 批量不良 -->
  100. <div id="dlg-batch-bad" class="easyui-dialog for-scan" style="width:500px;display: none;" closed="true" buttons="#dlg-batch-bad-buttons">
  101. <form id="fm-batch-bad" method="post" novalidate style="margin:0; padding: 20px 20px;">
  102. <div style="margin-bottom:10px">
  103. <input id="start_bad_serial" name="firstSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="开始序列号:" style="width:100%">
  104. </div>
  105. <div style="margin-bottom:10px">
  106. <input id="end_bad_serial" name="endSerialNo" class="easyui-textbox" required="true" data-options="labelWidth:100" label="结束序列号:" style="width:100%">
  107. </div>
  108. </form>
  109. </div>
  110. <div id="dlg-batch-bad-buttons" style="display: none;">
  111. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" id="badOK" onclick="countBadRange()" style="width:90px">OK</a>
  112. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg-batch-bad').dialog('close')" style="width:90px">Cancel</a>
  113. </div>
  114. <!-- 卷分切-->
  115. <div id="dlg-cut" class="easyui-dialog" style="width:800px;display: none;" closed="true" data-options="modal:true, " >
  116. <div style="margin-bottom:10px; margin-left: 20px; margin-top: 10px;">
  117. <input id="end_serial_no" name="endSerialNo" class="easyui-textbox" required="true" label="结束序列号:" style="width:60%">
  118. <a href="javascript:void(0)" id="tbAdd" class="easyui-linkbutton" iconCls="icon-add" onclick="doCutting()">Create Slitting Roll</a>
  119. </div>
  120. <table id="dlg-cut-rolls" class="easyui-datagrid" style="width:100%;height:300px;display: none;"
  121. data-options="pagination: false, showFooter: true, singleSelect:true, fitColumns:true , method:'post', pageSize:500,">
  122. <thead>
  123. <tr>
  124. <th data-options="field:'rollNo',width:80,">Slitting Roll No</th>
  125. <th data-options="field:'oriRollNo',width:80,">源卷号</th>
  126. <th data-options="field:'serialRowStart',width:60">From Row No</th>
  127. <th data-options="field:'serialRowEnd',width:60">To Row No</th>
  128. <th data-options="field:'columnSortIndex',width:80">No. of Cross</th>
  129. <th data-options="field:'id',width:30, formatter: formatCutRollButton">Actions</th>
  130. </tr>
  131. </thead>
  132. </table>
  133. </div>
  134. <!-- 数量确认 -->
  135. <div id="dlgConfirm" class="easyui-dialog for-scan" style="width:500px;display: none;"
  136. closed="true" buttons="#dlg-buttons-confirm">
  137. <form id="fm" method="post" novalidate style="margin:0;padding:20px 20px">
  138. <div style="margin-bottom:10px">
  139. <input name="workNo" class="easyui-textbox" data-options="labelWidth:100" required="true" label="Emoloyee ID:" style="width:100%">
  140. </div>
  141. </form>
  142. </div>
  143. <div id="dlg-buttons-confirm" style="display: none;">
  144. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="doConfirmOK()" style="width:90px">OK</a>
  145. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlgConfirm').dialog('close')" style="width:90px">Cancel</a>
  146. </div>
  147. <!-- 扫描材料modal(优化版) -->
  148. <div id="scan_material_dlg" class="easyui-dialog" style="width: 720px; display: none;"
  149. closed="true" data-options="modal:true, onOpen:function(){$('#scan_material_batch').focus();}, buttons:'#tb_scan_material'">
  150. <form id="scan_material_fm" method="post" novalidate style="margin:0; padding: 16px 16px 8px 16px;">
  151. <div id="material_batch_wrap" style="margin-bottom:10px">
  152. <label style="display:block; margin-bottom:6px; color:#666;">请扫描材料条码:</label>
  153. <textarea id="scan_material_batch" name="code" rows="3" style="width:100%; resize: vertical;"
  154. placeholder="请扫描材料批次"></textarea>
  155. </div>
  156. <div id="material_serial_wrap" style="margin-bottom:10px; display:none;">
  157. <label style="display:block; margin-bottom:6px; color:#666;">请扫描结束码包:</label>
  158. <input id="material_serial_no" name="materialSerialNo" class="easyui-textbox" style="width:100%" placeholder="请扫描结束码包">
  159. </div>
  160. </form>
  161. <table id="scan_material_list" class="easyui-datagrid" style="width:100%;height: 300px;"
  162. data-options="pagination:false, singleSelect:true, fitColumns:true, method:'POST'">
  163. <thead>
  164. <tr>
  165. <th data-options="field:'rollNo',width:120">Roll No</th>
  166. <th data-options="field:'componentPartNo',width:140">物料号</th>
  167. <th data-options="field:'customerBatchNo',width:160">材料批次号</th>
  168. <th data-options="field:'columnSortIndex',width:80,align:'center'">No. of Cross</th>
  169. <th data-options="field:'startRow',width:80,align:'center'">From Row No</th>
  170. <th data-options="field:'endRow',width:80,align:'center'">To Row No</th>
  171. <th data-options="field:'scanTime',width:140">扫描时间</th>
  172. <th data-options="field:'scanBy',width:100">扫描人</th>
  173. </tr>
  174. </thead>
  175. </table>
  176. </div>
  177. <div id="tb_scan_material" style="padding:10px 5px; display: none; text-align: center;">
  178. <div>
  179. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#scan_material_dlg').dialog('close')">Close</a>
  180. </div>
  181. </div>
  182. <style>
  183. table.roll-op-serials {
  184. border: 1px solid gray;
  185. }
  186. table.roll-op-serials td{
  187. border: 1px dotted gray;
  188. padding: 3px;
  189. text-align: center;
  190. text-align: center;
  191. font-family: Arial,monospace;
  192. font-size: 11px;
  193. background-color: aliceblue;
  194. }
  195. table.roll-op-serials td .serial-no{
  196. font-size: 11px;
  197. }
  198. </style>
  199. <script type="text/javascript" src="/js/layer/layer.js"></script>
  200. <script src='http://127.0.0.1:8000/CLodopfuncs.js'></script>
  201. <script type="text/javascript" src="/js/external/print/print_label.js"></script>
  202. <script>
  203. var formPostUrl="";
  204. var currentRoll="";
  205. var currentRollOp = {};
  206. var currentOrder={};
  207. var firstRollFlag = 0;
  208. var urlPath="/rollop/${func}";
  209. var enableScanMaterialNo = false;
  210. var temp_row;
  211. var doUrl = "";
  212. var flag = "N";
  213. let currentItemNo = 20;//当前的工序
  214. let currentPrinter = ${currentPrinter};
  215. let clodoplisence = '${clodoplisence}';
  216. function show2ndBox(b){
  217. showEl("#dlg #serial_input_1st", true);
  218. showEl("#dlg #serial_input_2nd", true);
  219. showEl("#dlg #serial_input_2nd", b);
  220. $('#dlg #endSerialNo').textbox({disabled:!b});
  221. }
  222. function showDialog(title, serialNum, postUrl){
  223. show2ndBox(serialNum > 1);
  224. $('#dlg').dialog('open').dialog('center').dialog('setTitle',title);
  225. $('#dlg form').form('clear');
  226. $('#dlg #rollNo_display').textbox({"value": currentRoll});
  227. formPostUrl = urlPath + postUrl + "?rollNo="+currentRoll;
  228. doUrl = urlPath + "/badRange/do?rollNo="+currentRoll;
  229. }
  230. function doConfirm(){
  231. $('#dlgConfirm').dialog('open').dialog('center').dialog('setTitle',"Confirm quantity");
  232. $('#dlgConfirm form').form('clear');
  233. }
  234. function doConfirmOK(){
  235. console.log(urlPath + "/confirm/do?rollNo=" + currentRoll)
  236. $('#dlgConfirm form').form('submit',{
  237. url: urlPath + "/confirm/do?rollNo=" + currentRoll,
  238. onSubmit: function(){
  239. return $(this).form('validate');
  240. },
  241. success: function(result){
  242. var result = $.parseJSON(result);
  243. if (result.success){
  244. refreshRollInfo(currentRoll);
  245. $('#dlgConfirm').dialog('close'); // close the dialog
  246. } else {
  247. $.messager.alert('error',result.errorMsg, 'error');
  248. }
  249. }
  250. });
  251. }
  252. //打开分切卷的数据 LR 2024-06-25
  253. function showCutRolls(){
  254. //各种参数
  255. let rollNo = $("#rollNo").val();
  256. $('#dlg-cut').dialog('open').dialog('center').dialog('setTitle',"Slit roll");
  257. $("#dlg-cut-rolls").datagrid({
  258. url: "/abg/getCutRolls",
  259. queryParams: {
  260. rollNo: rollNo,
  261. }
  262. });
  263. }
  264. //modal打开关闭选中的箱
  265. $("#dlg-cut").dialog({
  266. onOpen: function(){
  267. //获取焦点
  268. //showEl("#dlg #input_roll", true);
  269. $('#end_serial_no').textbox('setValue', '');
  270. $('#end_serial_no').textbox('textbox').focus();
  271. }
  272. });
  273. //开工扫号功能
  274. function doStartModal(){
  275. $('#dlg-start').dialog('open').dialog('center').dialog('setTitle', 'Scan');
  276. $('#dlg-star form').form('clear');
  277. }
  278. //modal打开关闭选中的箱
  279. $("#dlg-start").dialog({
  280. onOpen: function(){
  281. //获取焦点
  282. //showEl("#dlg #input_roll", true);
  283. $('#start_firstSerialNo').textbox('setValue', '');
  284. $('#start_firstSerialNo').textbox('textbox').focus();
  285. }
  286. });
  287. /* 调机扫号 */
  288. function doSetupModal(){
  289. $('#dlg-setup').dialog('open').dialog('center').dialog('setTitle', 'Scan/setup');
  290. $('#dlg-setup form').form('clear');
  291. //设置数据
  292. $("#setup_firstSerialNo").textbox({value: currentRollOp.toSetupSerialNo || ""});
  293. $("#setup_firstSerialNo").textbox({disabled:true});
  294. }
  295. //modal打开关闭选中的箱
  296. $("#dlg-setup").dialog({
  297. onOpen: function(){
  298. //获取焦点
  299. //showEl("#dlg #input_roll", true);
  300. $('#setup_endSerialNo').textbox('textbox').focus();
  301. }
  302. });
  303. //首件扫号的modal
  304. function doFaiModal(){
  305. $('#dlg-fai').dialog('open').dialog('center').dialog('setTitle', 'Scan/first off');
  306. $('#dlg-fai form').form('clear');
  307. //设置数据
  308. }
  309. //modal打开关闭选中的箱
  310. $("#dlg-fai").dialog({
  311. onOpen: function(){
  312. //获取焦点
  313. //showEl("#dlg #input_roll", true);
  314. $('#fai_firstSerialNo').textbox('textbox').focus();
  315. }
  316. });
  317. //首件扫号的modal
  318. function doBadModal(){
  319. $('#dlg-bad').dialog('open').dialog('center').dialog('setTitle', 'Type defective serial number');
  320. $('#dlg-bad form').form('clear');
  321. }
  322. //modal打开关闭选中的箱
  323. $("#dlg-bad").dialog({
  324. onOpen: function(){
  325. //获取焦点
  326. //showEl("#dlg #input_roll", true);
  327. $('#bad_serialNo').textbox('textbox').focus();
  328. }
  329. });
  330. /* 新增不良批量 2024-06-25 LR */
  331. function doBadRangeModal(){
  332. $('#dlg-batch-bad').dialog('open').dialog('center').dialog('setTitle', 'Batch defective serial number');
  333. $('#dlg-batch-bad form').form('clear');
  334. }
  335. //modal打开关闭选中的箱
  336. $("#dlg-batch-bad").dialog({
  337. onOpen: function(){
  338. //获取焦点
  339. $('#start_bad_serial').textbox('textbox').focus();
  340. }
  341. });
  342. $("#rollNo").on("keydown", function(){
  343. if(event.keyCode == 13){
  344. refreshRollInfo($.trim($(this).val()));
  345. }
  346. });
  347. <#if RequestParameters.rollNo ??>
  348. $(function(){
  349. $("#rollNo").val("${RequestParameters.rollNo}");
  350. refreshRollInfo("${RequestParameters.rollNo}");
  351. });
  352. </#if>
  353. function doCreateRoll(){
  354. if (currentOrder){
  355. $.messager.confirm('Confirm','Are you sure to create new roll for the shop order <b>'+currentOrder.orderNo+'</b>? ',function(r) {
  356. if (r){
  357. $.post("/indigo/create_roll/do", {orderNo: currentOrder.orderNo}, function(data){
  358. if (data.success && data.newRollNo){
  359. $("#rollNo").val(data.newRollNo);
  360. refreshRollInfo(data.newRollNo);
  361. }
  362. });
  363. }
  364. });
  365. }
  366. }
  367. function slittingPrint() {
  368. $.messager.confirm('Confirm','Is Printed ?',function(r){
  369. if (r){
  370. $("#ifmforprint").attr('src', "/print/rollnoSlitting/" + currentRollOp.operationNo + "/" + currentRoll + "/");
  371. console.log("/print/rollnoSlitting/" + currentRollOp.operationNo + "/" + currentRoll + "/")
  372. }
  373. });
  374. }
  375. function refreshRollStatus(){
  376. $.messager.confirm('Confirm','Are you sure to reverse all scanning data ?',function(r){
  377. if (r){
  378. $.post(urlPath+"/refreshRollStatus", {rollNo: currentRoll}, function(data){
  379. if (data.success ){
  380. refreshRollInfo($("#rollNo").val());
  381. $.messager.alert('info',"Successfully",'info');
  382. }else{
  383. $.messager.alert('error',data.errorMsg,'error');
  384. }
  385. })
  386. }
  387. });
  388. }
  389. //回车触发事件
  390. function refreshRollInfo(rollNo){
  391. <#if func == "indigo">
  392. $("#processNumber").val("10");
  393. </#if>
  394. <#if func == "thermal">
  395. $("#processNumber").val("15");
  396. </#if>
  397. <#if func == "cut">
  398. $("#processNumber").val("18");
  399. </#if>
  400. <#if func == "abg">
  401. $("#processNumber").val("20");
  402. </#if>
  403. <#if func == "aoi">
  404. $("#processNumber").val("30");
  405. </#if>
  406. var $tblInfo = $("#tblInfo");
  407. var $tblRollOpInfo = $("#tblRollOpInfo");
  408. $tblInfo.html("");
  409. $tblRollOpInfo.html("");
  410. let requestParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'func': 'abg'};
  411. $.post("/rollop/newGetRoll", requestParam, function(data){
  412. if (data.success && data.roll){
  413. showEl("#actions", data.showAction);
  414. enableEl("#btnConfirm", data.enableConfirm);
  415. enableEl("#btnStatus", data.enableStatus);
  416. enableEl("#btnStart", data.enableStart);
  417. enableEl("#btnSetup", data.enableSetup);
  418. enableEl("#btnFai", data.enableFai);
  419. enableEl("#btnEai", data.enableEai);
  420. enableEl("#btnBad", data.enableBad);
  421. //判断是否打开当前的卷
  422. <#if func == "abg">
  423. enableEl("#btnCut", data.enableCut);//2024-07-05 LR添加分卷
  424. </#if>
  425. <#if currentUser.isAdmin || currentUser.authorities?contains("refreshRollStatus")>
  426. enableEl("#refreshRollStatus", true);
  427. </#if>
  428. <#if func != "indigo">
  429. enableEl("#btnBad",!data.scanStatus);
  430. enableEl("#btnBadRange", !data.scanStatus);
  431. enableEl("#printSlitting", data.rollOp && data.rollOp.remainSnCount);
  432. </#if>
  433. enableEl("#scanMaterial", data.rollOp && data.enableScanMaterial);
  434. //判断是否显示
  435. if(data.rollOp && data.enableScanMaterialBatch){
  436. $('#material_batch_wrap').show();
  437. }else {
  438. $('#material_batch_wrap').hide();
  439. }
  440. if(data.rollOp && data.enableScanMaterialNo){
  441. $('#material_serial_wrap').show();
  442. }else {
  443. $('#material_serial_wrap').hide();
  444. }
  445. enableScanMaterialNo = data.enableScanMaterialNo;
  446. currentRoll = data.roll.rollNo;
  447. currentRollOp = data.rollOp;
  448. currentOrder=data.roll.order;
  449. var rollNoDisplay = data.roll.rollNo;
  450. if (data.rollOp && data.rollOp.remainSnCount){
  451. rollNoDisplay = "<a target='forprint' href='/print/rollno/"+data.rollOp.operationNo+"/"+rollNoDisplay+"/'>"+rollNoDisplay+"</a>";
  452. }
  453. $tblInfo.append("<tr><td>SO No:</td><td>"+data.roll.orderNo+"</td></tr>");
  454. $tblInfo.append("<tr><td>Roll No:</td><td>"+rollNoDisplay+"</td></tr>");
  455. $tblInfo.append("<tr><td>Status</td><td>"+(data.roll.status || "-")+"</td></tr>");
  456. $("#orderNo").val(data.roll.orderNo);
  457. if (data.rollOpHtml){
  458. $tblRollOpInfo.append(data.rollOpHtml);
  459. }
  460. if (data.prevCount){
  461. $tblInfo.append("<tr><td>Serials Qty:</td><td>"+(data.prevCount)+"</td></tr>");
  462. }
  463. $tblInfo.append("<tr><td>Good Products Qty:</td><td>"+(data.qtyBad)+"</td></tr>");
  464. $tblInfo.append("<tr><td>Defect Product Qty:</td><td>"+(data.qtyApprove)+"</td></tr>");
  465. $tblInfo.append("<tr><td>Total Qty:</td><td>"+(data.qtyAll)+"</td></tr>");
  466. if (data.prevCount){
  467. $tblInfo.append("<tr><td>Different Qty:</td><td>"+(data.prevDifferent)+"</td></tr>");
  468. }
  469. if (data.badSns){
  470. $tblInfo.append("<tr><td>Defective serial number:</td><td>"+(data.badSns.split(",").join("<br />") || "-")+"</td></tr>");
  471. }
  472. if (data.slittingRolls){
  473. $tblInfo.append("<tr><td>Slitting Roll No:</td><td>"+(data.slittingRolls.split(",").join("<br />") || "-")+"</td></tr>");
  474. }
  475. checkWithWorkingOrder(data.roll.order.orderNo);
  476. }else{
  477. $tblInfo.append("<tr><td>"+data.msg+"</td></tr>");
  478. }
  479. })
  480. }
  481. function checkWithWorkingOrder(orderNo) {
  482. var workingOrder = $("#hdnWorkingOrder").val();
  483. if (workingOrder != orderNo){
  484. var msg = 'Are you sure to swith to the order <b>'+orderNo+'</b>?';
  485. if (workingOrder != "") {
  486. msg = 'The order of this roll does not match with the current order '+workingOrder+'.';
  487. }
  488. $("#tblInfo").html("");
  489. $("#tblRollOpInfo").html("");
  490. $("#actions").hide();
  491. $.messager.alert("Error", msg, "error", function(){
  492. $("#rollNo").val("").focus();
  493. });
  494. }
  495. }
  496. function getday(){
  497. lay('.Selection_time').each(function(){
  498. laydate.render({
  499. elem: this
  500. });
  501. });
  502. $('.Selection_time').val(getToday());
  503. }
  504. //获取当天日期
  505. function getToday(){
  506. var date = new Date();
  507. var seperator1 = "-";
  508. var year = date.getFullYear();
  509. var month = date.getMonth() + 1;
  510. var strDate = date.getDate();
  511. if (month >= 1 && month <= 9) {
  512. month = "0" + month;
  513. }
  514. if (strDate >= 0 && strDate <= 9) {
  515. strDate = "0" + strDate;
  516. }
  517. var currentdate = year + seperator1 + month + seperator1 + strDate;
  518. return currentdate;
  519. }
  520. $(function () {
  521. $("#rollNo").focus();
  522. })
  523. //分切卷的功能
  524. function formatCutRollButton(value, row){
  525. let tags = '';
  526. tags += '<a style="text-decoration:none;" onclick="cacheAbgRollPrintData(\''+row.rollNo+'\')">补打标签</a>';
  527. return tags;
  528. }
  529. //调用方法打印标签
  530. function cacheAbgRollPrintData(rollNo){
  531. let printParam = {'rollNo': rollNo}
  532. //请求参数
  533. $.ajax({
  534. url: "/abg/cacheCutRollPrintData",
  535. //contentType: 'application/json',
  536. type:"POST",
  537. //data:JSON.stringify(inData),
  538. data: printParam,
  539. dataType: "JSON",
  540. success: function (data) {
  541. if(data.success){
  542. currentPrinter.clodoplisence = clodoplisence;
  543. printCutRollLabel(JSON.parse(data.printData), currentPrinter);
  544. }else{
  545. $.messager.alert("Error",data.msg,"Error",);
  546. }
  547. }
  548. })
  549. }
  550. //统计eai的行数
  551. function countEaiRows(){
  552. //各种参数
  553. let rollNo = $("#rollNo").val();
  554. //组装参数
  555. let eaiParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'username': username};
  556. //请求参数
  557. $.ajax({
  558. url: "/abg/countEaiRows",
  559. //contentType: 'application/json',
  560. type:"POST",
  561. //data:JSON.stringify(inData),
  562. data: eaiParam,
  563. dataType:"JSON",
  564. success: function (data) {
  565. if(data.success){
  566. //判断是否超过限制的数量
  567. if(data.resultCode == 201){
  568. doEaiConfirm(data.maxRows);
  569. }else{
  570. doEai();//直接eai
  571. }
  572. }else{
  573. $.messager.alert("Error",data.msg,"Error",);
  574. }
  575. }
  576. })
  577. }
  578. //确认是否末件扫号
  579. function doEaiConfirm(maxRows){
  580. $.messager.confirm('Confirm', 'The no. of rows between the 2 scanned serials is over the limit rows'+maxRows+', are you sure to continue ?', function(r) {
  581. if (r){
  582. //调用提交方法
  583. doEai();
  584. }
  585. });
  586. }
  587. //提交的方法
  588. function doEai(){
  589. //各种参数
  590. let rollNo = $("#rollNo").val();
  591. //组装参数
  592. let eaiParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'username': username};
  593. //请求参数
  594. $.ajax({
  595. url: "/abg/doEai",
  596. //contentType: 'application/json',
  597. type:"POST",
  598. //data:JSON.stringify(inData),
  599. data: eaiParam,
  600. dataType:"JSON",
  601. success: function (data) {
  602. if(data.success){
  603. //$.messager.alert("info",data.msg,"info",);
  604. //刷新当前的页面
  605. refreshRollInfo(rollNo);
  606. }else{
  607. $.messager.alert("Error",data.msg,"Error",);
  608. }
  609. }
  610. })
  611. }
  612. //开工扫号的方法
  613. function doStart(){
  614. //各种参数
  615. let rollNo = $("#rollNo").val();
  616. let firstSerialNo = $('#start_firstSerialNo').textbox('getValue');
  617. //组装参数
  618. let startParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'username': username, 'firstSerialNo': firstSerialNo};
  619. //请求参数
  620. $.ajax({
  621. url: "/abg/doStart",
  622. //contentType: 'application/json',
  623. type:"POST",
  624. //data:JSON.stringify(inData),
  625. data: startParam,
  626. dataType:"JSON",
  627. success: function (data) {
  628. if(data.success){
  629. //刷新当前的页面
  630. refreshRollInfo(rollNo);
  631. //关闭弹窗
  632. $('#dlg-start').dialog('close');
  633. //$.messager.alert("info",data.msg,"info",);
  634. }else{
  635. $.messager.alert("Error",data.msg,"Error",);
  636. }
  637. }
  638. })
  639. }
  640. //开工扫号的方法
  641. function doSetup(){
  642. //各种参数
  643. let rollNo = $("#rollNo").val();
  644. let firstSerialNo = $('#setup_firstSerialNo').textbox('getValue');
  645. let endSerialNo = $('#setup_endSerialNo').textbox('getValue');
  646. //组装参数
  647. let setupParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'username': username, 'firstSerialNo': firstSerialNo, 'endSerialNo': endSerialNo};
  648. //请求参数
  649. $.ajax({
  650. url: "/abg/doSetup",
  651. //contentType: 'application/json',
  652. type:"POST",
  653. //data:JSON.stringify(inData),
  654. data: setupParam,
  655. dataType:"JSON",
  656. success: function (data) {
  657. if(data.success){
  658. //刷新当前的页面
  659. refreshRollInfo(rollNo);
  660. //关闭弹窗
  661. $('#dlg-setup').dialog('close');
  662. //$.messager.alert("info",data.msg,"info",);
  663. }else{
  664. $.messager.alert("Error",data.msg,"Error",);
  665. }
  666. }
  667. })
  668. }
  669. //开工扫号的方法
  670. function doFai(){
  671. //各种参数
  672. let rollNo = $("#rollNo").val();
  673. let firstSerialNo = $('#fai_firstSerialNo').textbox('getValue');
  674. let endSerialNo = $('#fai_endSerialNo').textbox('getValue');
  675. //组装参数
  676. let setupParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'username': username, 'firstSerialNo': firstSerialNo, 'endSerialNo': endSerialNo};
  677. //请求参数
  678. $.ajax({
  679. url: "/abg/doFai",
  680. //contentType: 'application/json',
  681. type:"POST",
  682. //data:JSON.stringify(inData),
  683. data: setupParam,
  684. dataType:"JSON",
  685. success: function (data) {
  686. if(data.success){
  687. //刷新当前的页面
  688. refreshRollInfo(rollNo);
  689. //关闭弹窗
  690. $('#dlg-fai').dialog('close');
  691. //$.messager.alert("info",data.msg,"info",);
  692. }else{
  693. $.messager.alert("Error",data.msg,"Error",);
  694. }
  695. }
  696. })
  697. }
  698. //单个不良方法
  699. function doSingleBad(){
  700. //各种参数
  701. let rollNo = $("#rollNo").val();
  702. let serialNo = $('#bad_serialNo').textbox('getValue');
  703. //组装参数
  704. let badParam = {'orderNo': workingOrder, 'itemNo': currentItemNo, 'rollNo': rollNo, 'username': username, 'serialNo': serialNo};
  705. //请求参数
  706. $.ajax({
  707. url: "/abg/doSingleBad",
  708. type:"POST",
  709. data: badParam,
  710. dataType:"JSON",
  711. success: function (data) {
  712. if(data.success){
  713. //刷新当前的页面
  714. refreshRollInfo(rollNo);
  715. //关闭弹窗
  716. //$('#dlg-bad').dialog('close');
  717. $('#dlg-bad form').form('clear');
  718. //$.messager.alert("info",data.msg,"info",);
  719. }else{
  720. $.messager.alert("Error",data.msg,"Error",);
  721. }
  722. }
  723. })
  724. }
  725. //2024-06-25 LR 后续增加的代码
  726. function countBadRange(){
  727. //各种参数
  728. let rollNo = $("#rollNo").val();
  729. let firstSerialNo = $("#start_bad_serial").textbox('getValue').trim();
  730. let endSerialNo = $("#end_bad_serial").textbox('getValue').trim();
  731. //组装参数
  732. let countParam = {'orderNo': workingOrder, 'itemNo': currentItemNo, 'rollNo': rollNo, 'firstSerialNo': firstSerialNo, 'endSerialNo': endSerialNo, 'username': username};
  733. //请求参数
  734. $.ajax({
  735. url: "/abg/countBadRange",
  736. //contentType: 'application/json',
  737. type:"POST",
  738. //data:JSON.stringify(inData),
  739. data: countParam,
  740. dataType:"JSON",
  741. success: function (data) {
  742. if(data.success){
  743. //判断数量的限制
  744. if(data.count > 1000){
  745. $.messager.confirm('Confirm', 'Defective quantity greater than 1000, continue??', function(r) {
  746. if (r){
  747. //调用提交方法
  748. createBadRange();
  749. }
  750. });
  751. }else{
  752. //调用提交方法
  753. createBadRange();
  754. }
  755. }else{
  756. $.messager.alert("Error",data.msg,"Error",);
  757. }
  758. }
  759. })
  760. }
  761. //批量创建不良
  762. function createBadRange(){
  763. //各种参数
  764. let rollNo = $("#rollNo").val();
  765. let firstSerialNo = $("#start_bad_serial").textbox('getValue').trim();
  766. let endSerialNo = $("#end_bad_serial").textbox('getValue').trim();
  767. //组装参数
  768. let badParam = {'orderNo': workingOrder, 'itemNo': currentItemNo, 'rollNo': rollNo, 'firstSerialNo': firstSerialNo, 'endSerialNo': endSerialNo, 'username': username};
  769. //请求参数
  770. $.ajax({
  771. url: "/abg/createBadRange",
  772. type:"POST",
  773. data: badParam,
  774. dataType:"JSON",
  775. success: function (data) {
  776. if(data.success){
  777. //$('#dlg-batch-bad').dialog('close');
  778. $('#dlg-batch-bad form').form('clear');
  779. //刷新当前的页面
  780. refreshRollInfo(rollNo);
  781. }else{
  782. $.messager.alert("Error",data.msg,"Error",);
  783. }
  784. }
  785. })
  786. }
  787. //创建分切卷
  788. function doCutting(){
  789. //各种参数
  790. let rollNo = $("#rollNo").val();
  791. let endSerialNo = $("#end_serial_no").textbox('getValue');
  792. //组装参数
  793. let cutParam = {'orderNo': workingOrder, 'rollNo': rollNo, 'endSerialNo': endSerialNo, 'username': username};
  794. //请求参数
  795. $.ajax({
  796. url: "/abg/createCutRoll",
  797. //contentType: 'application/json',
  798. type:"POST",
  799. //data:JSON.stringify(inData),
  800. data: cutParam,
  801. dataType:"JSON",
  802. success: function (data) {
  803. if(data.success){
  804. currentPrinter.clodoplisence = clodoplisence;
  805. printAbgRollLabel(JSON.parse(data.printData), currentPrinter);
  806. //刷新表格
  807. $('#dlg-cut-rolls').datagrid('reload');
  808. $('#end_serial_no').textbox('setValue', '');
  809. $('#end_serial_no').textbox('textbox').focus();
  810. }else{
  811. $.messager.alert("Error",data.msg,"Error",);
  812. }
  813. }
  814. })
  815. }
  816. //修正so_roll状态
  817. function updateStatus(){
  818. let func = '${func}';
  819. $.ajax({
  820. url: "/aoi/slitting/updateStatus",
  821. type:"POST",
  822. data:{
  823. 'rollNo': currentRoll,
  824. 'func': func,
  825. },
  826. dataType:"JSON",
  827. success: function (ret) {
  828. console.log(ret);
  829. if(ret.success == false){
  830. $.messager.alert('error',ret.errorMsg, 'error');
  831. }else if(ret.success==true){
  832. refreshRollInfo(currentRoll)
  833. $.messager.alert('info',"Successfully",'info');
  834. }
  835. }
  836. })
  837. }
  838. //扫描材料上级
  839. function scanMaterialModal(){
  840. // 打开对话框
  841. $('#scan_material_dlg').dialog('open').dialog('center').dialog('setTitle', "材料扫描");
  842. $('#scan_material_batch').val('').focus();
  843. // 根据 是否显示材料 显示/隐藏结束码包输入
  844. if (enableScanMaterialNo){
  845. $('#material_serial_wrap').show();
  846. // 处理材料接料时候的最后的码包(EasyUI textbox 需绑定到内部输入框)
  847. $('#material_serial_no').textbox('setValue','');
  848. var $serialIn = $('#material_serial_no').textbox('textbox');
  849. //事件绑定
  850. $serialIn.off('keydown.serial_in').on('keydown.serial_in', function(e){
  851. if (e.which === 13) {
  852. e.preventDefault();
  853. scanSoRollMaterialBatch(true);
  854. }
  855. });
  856. }else{
  857. //$('#material_serial_wrap').hide();
  858. }
  859. // 触发布局重算,避免底部灰色残留
  860. $('#scan_material_dlg').dialog('resize');
  861. $('#scan_material_list').datagrid('resize');
  862. // 初始化/刷新列表
  863. $("#scan_material_list").datagrid({
  864. url: "/material/querySoRollMaterialBatchs",
  865. type: "POST",
  866. dataType: "JSON",
  867. queryParams: {
  868. orderNo: currentOrder.orderNo,
  869. rollNo: currentRoll,
  870. operationNo: 20
  871. }
  872. });
  873. }
  874. //提交材料扫描(Enter 或 按钮)
  875. function scanSoRollMaterialBatch(snFlag){
  876. var rawStr = $.trim($('#scan_material_batch').val());
  877. //检查
  878. if(rawStr == null || "" == rawStr){
  879. $.messager.alert('error','请扫描或输入材料条码','info');
  880. $('#scan_material_batch').focus();
  881. return;
  882. }
  883. //检查是否是接料 接料的时候必须输入码包号
  884. if (enableScanMaterialNo && snFlag){
  885. //继续往下走
  886. }else if (enableScanMaterialNo && !snFlag){
  887. $('#material_serial_no').textbox('setValue','');
  888. $('#material_serial_no').textbox('textbox').focus();
  889. return;
  890. }
  891. //拆分数据
  892. var parts = rawStr.split(";");
  893. //检查
  894. // 至少需要8个字段 或者两个字段
  895. if (!(parts.length == 2 || parts.length == 9)) {
  896. $.messager.alert('error','材料批次数据有误!','info');
  897. return null;
  898. }
  899. let endScanMaterialSerialNo = $.trim($('#material_serial_no').val());
  900. $('#scan_material_batch').val('');
  901. $('#material_serial_no').textbox('setValue','');
  902. //组装数据
  903. var resultRow = {"orderNo": currentOrder.orderNo, "operationNo": 20, "operationName": "Abg", "rollNo": currentRoll,
  904. "qrCode": rawStr, "scanSerialFlag": enableScanMaterialNo, "endSerialNo": endScanMaterialSerialNo, "username": username};
  905. $.ajax({
  906. url: "/material/scanSoRollMaterialBatch",
  907. type: "POST",
  908. dataType: "JSON",
  909. async: false,
  910. contentType: "application/json",
  911. data: JSON.stringify(resultRow),
  912. success: function (data) {
  913. if(data && data.success){
  914. $('#scan_material_batch').val('').focus();
  915. $('#material_serial_no').textbox('setValue','');
  916. $('#scan_material_list').datagrid('reload');
  917. $.messager.show({title: 'Point',
  918. msg: data.resultMsg,
  919. timeout: 1500,
  920. showType: 'slide'});
  921. }else if(data && data.resultCode == 201){
  922. $('#scan_material_batch').val('').focus();
  923. $('#material_serial_no').textbox('setValue','');
  924. $('#scan_material_list').datagrid('reload');
  925. }else{
  926. $.messager.alert('error', data.resultMsg || '扫描失败','error');
  927. }
  928. }
  929. });
  930. }
  931. // 在文本域按Enter提交(简洁写法)
  932. $('#scan_material_batch').keypress(function(e){
  933. if(e.which === 13){
  934. e.preventDefault();
  935. scanSoRollMaterialBatch(false);
  936. }
  937. });
  938. </script>
  939. </@master.layout>