|  |  | 
 |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css"> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="../static/css/common.css"> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="../static/css/crn.css"> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="../static/css/rgv.css"> | 
 |  |  |     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  |     <script type="text/javascript" src="../static/js/common.js"></script> | 
 |  |  |     <script type="text/javascript" src="../static/js/layer/layer.js"></script> | 
 |  |  | 
 |  |  |             <!-- 执行命令 --> | 
 |  |  |  | 
 |  |  |             <!-- 执行命令 --> | 
 |  |  |             <div class="command-log"> | 
 |  |  |             <!--<div class="command-log">--> | 
 |  |  | <!--                <h3>执行中的命令</h3>--> | 
 |  |  | <!--                <div class="crn-command-item">--> | 
 |  |  | <!--                    <label>1#</label>--> | 
 |  |  | 
 |  |  | <!--                    <!–            <span> </span>–>--> | 
 |  |  | <!--                    <input id="crn5" disabled="disabled">--> | 
 |  |  | <!--                </div>--> | 
 |  |  |             </div> | 
 |  |  | <!--            </div>--> | 
 |  |  |             <!-- RGV状态位信息 --> | 
 |  |  |             <div class="crn-state"> | 
 |  |  |             <div class="rgv-state"> | 
 |  |  |                 <table id="rgv-state-table"> | 
 |  |  |                     <thead> | 
 |  |  |                     <tr> | 
 |  |  | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <!-- RGV状态 --> | 
 |  |  |         <div class="crn-msg"> | 
 |  |  |         <div class="rgv-msg"> | 
 |  |  |             <table id="rgv-msg-table"> | 
 |  |  |                 <thead> | 
 |  |  |                 <tr> | 
 |  |  | 
 |  |  |             </table> | 
 |  |  |         </div> | 
 |  |  |         <!-- 手动操作 --> | 
 |  |  |         <div class="crn-operation"> | 
 |  |  |         <div class="rgv-operation"> | 
 |  |  |  | 
 |  |  |             <!-- 遮罩层 --> | 
 |  |  |             <div class="crn-operation-shade"> | 
 |  |  |         <span class="crn-operation-shade-span"> | 
 |  |  |             <div class="rgv-operation-shade"> | 
 |  |  |         <span class="rgv-operation-shade-span"> | 
 |  |  |             WCS 系统运行中,请停止后操作 | 
 |  |  |         </span> | 
 |  |  |             </div> | 
 |  |  | 
 |  |  |             <!-- 设备任务选择 --> | 
 |  |  |             <div class="task-select"> | 
 |  |  |                 <!-- 堆垛机选择 --> | 
 |  |  |                 <div id="crn-select" class="operator-item" style="width: 55%"> | 
 |  |  |                 <div id="rgv-select" class="operator-item" style="width: 55%"> | 
 |  |  |                     <span class="select-title">RGV号</span> | 
 |  |  |                     <div class="select-container" style="padding: 20px 0;"> | 
 |  |  |                         <label><input type="radio" name="crnSelect" value="1" checked> 1号RGV</label> | 
 |  |  |                         <label><input type="radio" name="crnSelect" value="2"> 2号RGV</label> | 
 |  |  |                         <label><input type="radio" name="rgvSelect" value="1" checked> 1号RGV</label> | 
 |  |  |                         <label><input type="radio" name="rgvSelect" value="2"> 2号RGV</label> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <!-- 源站/源库位 选择 --> | 
 |  |  |                 <div id="source-select" class="operator-item"> | 
 |  |  |                     <span class="select-title">源站/源库位</span> | 
 |  |  |                     <span class="select-title">源站</span> | 
 |  |  |                     <div class="select-container"> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>站</span> | 
 |  |  |                             <span>工位1源站</span> | 
 |  |  |                             <label><input id="sourceStaNo" type="number" name="points" min="0" /></label> | 
 |  |  |                         </div> | 
 |  |  | <!--                        <div class="select-container-item">--> | 
 |  |  | <!--                            <span>排</span>--> | 
 |  |  | <!--                            <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>排</span> | 
 |  |  |                             <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>列</span> | 
 |  |  |                             <span>工位2源站</span> | 
 |  |  |                             <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>层</span> | 
 |  |  |                             <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> | 
 |  |  |                         </div> | 
 |  |  | <!--                        <div class="select-container-item">--> | 
 |  |  | <!--                            <span>层</span>--> | 
 |  |  | <!--                            <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <!-- 目标站/目标库位 选择 --> | 
 |  |  |                 <div id="target-select" class="operator-item"> | 
 |  |  |                     <span class="select-title">目标站/目标库位</span> | 
 |  |  |                     <span class="select-title">目标站</span> | 
 |  |  |                     <div class="select-container"> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>站</span> | 
 |  |  |                             <span>工位1目标站</span> | 
 |  |  |                             <label><input id="staNo" type="number" name="points" min="0" /></label> | 
 |  |  |                         </div> | 
 |  |  | <!--                        <div class="select-container-item">--> | 
 |  |  | <!--                            <span>排</span>--> | 
 |  |  | <!--                            <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>排</span> | 
 |  |  |                             <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>列</span> | 
 |  |  |                             <span>工位2目标站</span> | 
 |  |  |                             <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="select-container-item"> | 
 |  |  |                             <span>层</span> | 
 |  |  |                             <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> | 
 |  |  |                         </div> | 
 |  |  | <!--                        <div class="select-container-item">--> | 
 |  |  | <!--                            <span>层</span>--> | 
 |  |  | <!--                            <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> | 
 |  |  | <!--                        </div>--> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  | 
 |  |  |                 <fieldset> | 
 |  |  |                     <legend>手动操作</legend> | 
 |  |  |                     <div class="button-group"> | 
 |  |  |                         <button class="item" onclick="put()">入库</button> | 
 |  |  |                         <button class="item" onclick="take()">出库</button> | 
 |  |  |                         <button class="item" onclick="stockMove()">库位转移</button> | 
 |  |  |                         <button class="item" onclick="put()">取放货</button> | 
 |  |  |                         <button class="item" onclick="take()">取货</button> | 
 |  |  |                         <button class="item" onclick="stockMove()">放货</button> | 
 |  |  | <!--                        <button class="item" onclick="siteMove()">站到站</button>--> | 
 |  |  |                         <!--                <button class="item" onclick="bacOrigin()">回原点</button>--> | 
 |  |  |                         <!--                <button class="item" onclick="reverseOrigin()">反原点</button>--> | 
 |  |  | 
 |  |  |  | 
 |  |  |         </div> | 
 |  |  |         <!-- 堆垛机日志输出 --> | 
 |  |  |         <div class="crn-output-board"> | 
 |  |  |             <textarea id="crn-output"></textarea> | 
 |  |  |         <div class="rgv-output-board"> | 
 |  |  |             <textarea id="rgv-output"></textarea> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | </body> | 
 |  |  | <script> | 
 |  |  |     // 空白行数 | 
 |  |  |     var crnStateTableBlankRows = 0; | 
 |  |  |     var crnMsgTableBlankRows = 0; | 
 |  |  |     var rgvStateTableBlankRows = 0; | 
 |  |  |     var rgvMsgTableBlankRows = 0; | 
 |  |  |     // 实际行数 | 
 |  |  |     var crnStateTableFullRows = 0; | 
 |  |  |     var crnMsgTableFullRows = 0; | 
 |  |  |     var rgvStateTableFullRows = 0; | 
 |  |  |     var rgvMsgTableFullRows = 0; | 
 |  |  |     // 初始化 | 
 |  |  |     var crnOutputDom = document.getElementById("crn-output"); | 
 |  |  |     var rgvOutputDom = document.getElementById("rgv-output"); | 
 |  |  |     $(document).ready(function() { | 
 |  |  |         getCommandLog(); | 
 |  |  |         initCrnStateTable(); | 
 |  |  |         getCrnStateInfo(); | 
 |  |  |         initCrnMsgTable(); | 
 |  |  |         getCrnMsgInfo(); | 
 |  |  |         // getCommandLog(); | 
 |  |  |         initRgvStateTable(); | 
 |  |  |         getRgvStateInfo(); | 
 |  |  |         initRgvMsgTable(); | 
 |  |  |         getRgvMsgInfo(); | 
 |  |  |         operatorBlockShow(); | 
 |  |  |     }); | 
 |  |  |     // 数据更新 | 
 |  |  |     setInterval(function () { | 
 |  |  |         getCrnStateInfo(); | 
 |  |  |         getCrnMsgInfo(); | 
 |  |  |         getCommandLog(); | 
 |  |  |         getRgvStateInfo(); | 
 |  |  |         getRgvMsgInfo(); | 
 |  |  |         // getCommandLog(); | 
 |  |  |     },1000); | 
 |  |  |     setInterval(function () { | 
 |  |  |         getCrnOutput(); | 
 |  |  |         getRgvOutput(); | 
 |  |  |         operatorBlockShow(); | 
 |  |  |         initDemo(); | 
 |  |  |         // initDemo(); | 
 |  |  |     },500); | 
 |  |  |  | 
 |  |  |     // 判断手动操作模块是否可用 | 
 |  |  |     function operatorBlockShow() { | 
 |  |  |         if (parent.systemRunning) { | 
 |  |  |             $('.crn-operation').css("opacity", "0.5"); | 
 |  |  |             $('.crn-operation-shade').show(); | 
 |  |  |             $('.crn-operation-shade-span').show(); | 
 |  |  |             $('.rgv-operation').css("opacity", "0.5"); | 
 |  |  |             $('.rgv-operation-shade').show(); | 
 |  |  |             $('.rgv-operation-shade-span').show(); | 
 |  |  |         }  else { | 
 |  |  |             $('.crn-operation').css("opacity", "1"); | 
 |  |  |             $('.crn-operation-shade').hide(); | 
 |  |  |             $('.crn-operation-shade-span').hide(); | 
 |  |  |             $('.rgv-operation').css("opacity", "1"); | 
 |  |  |             $('.rgv-operation-shade').hide(); | 
 |  |  |             $('.rgv-operation-shade-span').hide(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 获取堆垛机执行中的命令 | 
 |  |  |     // 获取RGV执行中的命令 | 
 |  |  |     function getCommandLog() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/crn/command/ongoing", | 
 |  |  |             url: baseUrl + "/rgv/command/ongoing", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     var commands = res.data; | 
 |  |  |                     for (var i=0; i<commands.length;i++){ | 
 |  |  |                         $("#crn"+commands[i].crnNo).val(commands[i].command); | 
 |  |  |                         $("#rgv"+commands[i].rgvNo).val(commands[i].command); | 
 |  |  |                     } | 
 |  |  |                 } else if (res.code === 403) { | 
 |  |  |                     window.location.href = baseUrl + "/login"; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 堆垛机信息表获取 ---- 表一 | 
 |  |  |     function getCrnStateInfo() { | 
 |  |  |     function getRgvStateInfo() { | 
 |  |  |         var tableEl = $('#rgv-state-table'); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/crn/table/crn/state", | 
 |  |  |             url: baseUrl+ "/rgv/table/rgv/state", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 console.log(res) | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     var table = res.data; | 
 |  |  |                     if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) { | 
 |  |  |                         initCrnStateTable(table.length-crnStateTableBlankRows); | 
 |  |  |                         crnStateTableFullRows = table.length; | 
 |  |  |                     if (table.length > rgvStateTableBlankRows && table.length !== rgvStateTableFullRows) { | 
 |  |  |                         initRgvStateTable(table.length-rgvStateTableBlankRows); | 
 |  |  |                         rgvStateTableFullRows = table.length; | 
 |  |  |                     } | 
 |  |  |                     for (var i=1;i<=table.length;i++){ | 
 |  |  |                         var tr = tableEl.find("tr").eq(i); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].crnNo); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].rgvNo); | 
 |  |  |                         setVal(tr.children("td").eq(1), table[i-1].statusType); | 
 |  |  |                         setVal(tr.children("td").eq(2), table[i-1].status); | 
 |  |  |                         setVal(tr.children("td").eq(3), table[i-1].loading); | 
 |  |  |                         setVal(tr.children("td").eq(4), table[i-1].bay); | 
 |  |  |                         setVal(tr.children("td").eq(5), table[i-1].lev); | 
 |  |  |                         setVal(tr.children("td").eq(6), table[i-1].forkOffset); | 
 |  |  |                         setVal(tr.children("td").eq(7), table[i-1].liftPos); | 
 |  |  |                         setVal(tr.children("td").eq(8), table[i-1].walkPos); | 
 |  |  |                         setVal(tr.children("td").eq(9), table[i-1].warnCode); | 
 |  |  |                         setVal(tr.children("td").eq(10), table[i-1].alarm); | 
 |  |  |                         setVal(tr.children("td").eq(3), table[i-1].workNo1); | 
 |  |  |                         setVal(tr.children("td").eq(4), table[i-1].status1); | 
 |  |  |                         setVal(tr.children("td").eq(5), table[i-1].loading1); | 
 |  |  |                         setVal(tr.children("td").eq(6), table[i-1].rgvPos); | 
 |  |  |                         setVal(tr.children("td").eq(7), table[i-1].walkPos); | 
 |  |  |                         setVal(tr.children("td").eq(8), table[i-1].workNo2); | 
 |  |  |                         setVal(tr.children("td").eq(9), table[i-1].status2); | 
 |  |  |                         setVal(tr.children("td").eq(10), table[i-1].loading2); | 
 |  |  |                         setVal(tr.children("td").eq(11), table[i-1].warnCode); | 
 |  |  |                         setVal(tr.children("td").eq(12), table[i-1].alarm); | 
 |  |  |                     } | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     window.location.href = baseUrl+"/login"; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 堆垛机数据表获取 ---- 表二 | 
 |  |  |     function getCrnMsgInfo() { | 
 |  |  |     function getRgvMsgInfo() { | 
 |  |  |         var tableEl = $('#rgv-msg-table'); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/crn/table/crn/msg", | 
 |  |  |             url: baseUrl+ "/rgv/table/rgv/msg", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     var table = res.data; | 
 |  |  |                     if (table.length > crnStateTableBlankRows && table.length !== crnMsgTableFullRows) { | 
 |  |  |                         initCrnStateTable(table.length-crnStateTableBlankRows); | 
 |  |  |                         crnMsgTableFullRows = table.length; | 
 |  |  |                     if (table.length > rgvStateTableBlankRows && table.length !== rgvMsgTableFullRows) { | 
 |  |  |                         initRgvStateTable(table.length-rgvStateTableBlankRows); | 
 |  |  |                         rgvMsgTableFullRows = table.length; | 
 |  |  |                     } | 
 |  |  |                     for (var i=1;i<=table.length;i++){ | 
 |  |  |                         var tr = tableEl.find("tr").eq(i); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].crnNo); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].rgvNo); | 
 |  |  |                         setVal(tr.children("td").eq(1), table[i-1].workNo); | 
 |  |  |                         setVal(tr.children("td").eq(2), table[i-1].status); | 
 |  |  |                         setVal(tr.children("td").eq(3), table[i-1].sourceStaNo); | 
 |  |  | 
 |  |  |     // 堆垛机手动操作区 ----------------------------------------------------------------------- | 
 |  |  |  | 
 |  |  |     function getReqParam() { | 
 |  |  |         var crnNo = $('input[name="crnSelect"]:checked').val(); | 
 |  |  |         var rgvNo = $('input[name="rgvSelect"]:checked').val(); | 
 |  |  |         var sourceStaNo = $('#sourceStaNo').val(); | 
 |  |  |         var sourceRow = $('#sourceRow').val(); | 
 |  |  |         var sourceBay = $('#sourceBay').val(); | 
 |  |  | 
 |  |  |         var bay = $('#bay').val(); | 
 |  |  |         var lev = $('#lev').val(); | 
 |  |  |         return { | 
 |  |  |             crnNo: crnNo, | 
 |  |  |             rgvNo: rgvNo, | 
 |  |  |             sourceStaNo: sourceStaNo, | 
 |  |  |             sourceRow: sourceRow, | 
 |  |  |             sourceBay: sourceBay, | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 入库 | 
 |  |  |     function put() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/put", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 出库 | 
 |  |  |     function take() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/take", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 库位转移 | 
 |  |  |     function stockMove() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/stockMove", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 站到站 | 
 |  |  |     function siteMove() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/siteMove", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 坐标移动 | 
 |  |  |     function coorMove() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/coorMove", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 回原点 | 
 |  |  |     function bacOrigin() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/bacOrigin", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 回原点 | 
 |  |  |     function reverseOrigin() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/reverseOrigin", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 任务完成 | 
 |  |  |     function taskComplete() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/taskComplete", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 暂停 | 
 |  |  |     function pause() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/pause", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 启动 | 
 |  |  |     function boot() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/boot", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 清除命令 | 
 |  |  |     function clearCommand() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/clearCommand", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 手动复位 | 
 |  |  |     function handleReset() { | 
 |  |  |         http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) { | 
 |  |  |         http.post(baseUrl+"/rgv/operator/handleReset", getReqParam(), function (res) { | 
 |  |  |             layer.msg(res.msg); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 输送设备日志输出 ----------------------------------------------------------------------- | 
 |  |  |     function getCrnOutput() { | 
 |  |  |     function getRgvOutput() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/crn/output/site", | 
 |  |  |             url: baseUrl + "/rgv/output/site", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 console.log(res) | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     crnOutput(res.data); | 
 |  |  |                     rgvOutput(res.data); | 
 |  |  |                 } else if (res.code === 403) { | 
 |  |  |                     window.location.href = baseUrl + "/login"; | 
 |  |  |                 } else { | 
 |  |  | 
 |  |  |     // ------------------------------------------------------------------------------------------------ | 
 |  |  |  | 
 |  |  |     // 堆垛机信息表获取  ----- 表一 | 
 |  |  |     function initCrnStateTable(row) { | 
 |  |  |     function initRgvStateTable(row) { | 
 |  |  |         var line; | 
 |  |  |         if (row === undefined){ | 
 |  |  |             var one = $('#rgv-state-table thead').height(); | 
 |  |  |             var total = $('.crn-state').height(); | 
 |  |  |             var total = $('.rgv-state').height(); | 
 |  |  |             var count = total / one; | 
 |  |  |             count = parseInt(count) - 1; | 
 |  |  |             crnStateTableBlankRows = count; | 
 |  |  |             rgvStateTableBlankRows = count; | 
 |  |  |             line = count; | 
 |  |  |         } else { | 
 |  |  |             line = row; | 
 |  |  | 
 |  |  |                 "       <td></td>\n" + | 
 |  |  |                 "       <td></td>\n" + | 
 |  |  |                 "       <td></td>\n" + | 
 |  |  |                 "       <td></td>\n" + | 
 |  |  |                 "       <td></td>\n" + | 
 |  |  |                 "     </tr>\n"; | 
 |  |  |         } | 
 |  |  |         $('#rgv-state-table tbody').after(html); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 堆垛机数据表获取  ----- 表二 | 
 |  |  |     function initCrnMsgTable(row) { | 
 |  |  |     function initRgvMsgTable(row) { | 
 |  |  |         var line; | 
 |  |  |         if (row === undefined){ | 
 |  |  |             var one = $('#rgv-msg-table thead').height(); | 
 |  |  |             var total = $('.crn-msg').height(); | 
 |  |  |             var total = $('.rgv-msg').height(); | 
 |  |  |             var count = total / one; | 
 |  |  |             count = parseInt(count) - 1; | 
 |  |  |             crnMsgTableBlankRows = count; | 
 |  |  |             rgvMsgTableBlankRows = count; | 
 |  |  |             line = count; | 
 |  |  |         } else { | 
 |  |  |             line = row; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 日志输出框 | 
 |  |  |     function crnOutput(content){ | 
 |  |  |         crnOutputDom.value += content; | 
 |  |  |         crnOutputDom.scrollTop = crnOutputDom.scrollHeight; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     var crnDemoData; | 
 |  |  |     function initDemo() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+"/crn/demo/status", | 
 |  |  |             async: false, | 
 |  |  |             method: 'GET', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     crnDemoData = res.data; | 
 |  |  |                     crnDemoData.forEach(function (e) { | 
 |  |  |                         $("#demoBtn-"+e.crnNo).html(e.demo?'停止':'演示'); | 
 |  |  |                     }) | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     parent.location.href = baseUrl+"/login"; | 
 |  |  |                 }  else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function demoSwitch(el) { | 
 |  |  |         var crnId = el.split("-")[1]; | 
 |  |  |         var opt; | 
 |  |  |         if (crnDemoData == null) { | 
 |  |  |             initDemo(); | 
 |  |  |         } | 
 |  |  |         for (var i = 0; i<crnDemoData.length; i++) { | 
 |  |  |             if (Number(crnDemoData[i].crnNo) === Number(crnId)) { | 
 |  |  |                 opt = !crnDemoData[i].demo; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         layer.confirm(crnId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){ | 
 |  |  |             doDemo(crnId, 'root', opt); // 停止wcs系统 | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function doDemo(crnId, password, opt) { | 
 |  |  |         // 加载tips | 
 |  |  |         var index = layer.load(1, { | 
 |  |  |             shade: [0.1,'#fff'] | 
 |  |  |         }); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/crn/demo/switch", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             // async: false, | 
 |  |  |             data: { | 
 |  |  |                 crnId: Number(crnId), | 
 |  |  |                 password: password, | 
 |  |  |                 opt: opt | 
 |  |  |             }, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 layer.close(index); | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     layer.msg(res.msg, {icon: 1}); | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     window.location.href = baseUrl+"/login"; | 
 |  |  |                 }  else { | 
 |  |  |                     layer.msg(res.msg, {icon: 2}); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |     function rgvOutput(content){ | 
 |  |  |         rgvOutputDom.value += content; | 
 |  |  |         rgvOutputDom.scrollTop = rgvOutputDom.scrollHeight; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | </script> |