<!DOCTYPE html> 
 | 
<html lang="en"> 
 | 
<head> 
 | 
    <meta charset="utf-8"> 
 | 
    <title>WCS控制中心</title> 
 | 
    <link rel="stylesheet" href="../static/css/console.css"> 
 | 
    <link rel="stylesheet" href="../static/css/animate.min.css"> 
 | 
    <link rel="stylesheet" href="../static/css/toggle-switch.css"> 
 | 
    <script src="../static/js/jquery/jquery-3.3.1.min.js"></script> 
 | 
    <script src="../static/js/layer/layer.js"></script> 
 | 
    <script type="text/javascript" src="../static/js/common.js"></script> 
 | 
</head> 
 | 
<body> 
 | 
<div class="root"> 
 | 
    <header class="header"> 
 | 
        <h1>自动仓库WCS监控图</h1> 
 | 
        <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6> 
 | 
    </header> 
 | 
    <main class="main"> 
 | 
        <!--楼层按钮--> 
 | 
            <div id="floorBtnBox"> 
 | 
                <button class="floorBtn  btn-16" onclick="changFloor(this,1)" style="margin-top: 150px">1F</button> 
 | 
                <button class="floorBtn  btn-16" onclick="changFloor(this,2)" style="margin-top: 200px">2F</button> 
 | 
                <button class="floorBtn  btn-16" onclick="changFloor(this,3)" style="margin-top: 250px">3F</button> 
 | 
                <button class="floorBtn  btn-16" onclick="changFloor(this,4)" style="margin-top: 300px">4F</button> 
 | 
            </div> 
 | 
<!--            <button class="floorBtn  btn-16" onclick="testMove()" style="margin-top: 350px;font-size: 14px;">测试移动车</button>--> 
 | 
            <button class="floorBtn  btn-16" onclick="resetMap()" style="margin-top: 400px;font-size: 14px;">重置地图</button> 
 | 
  
 | 
        <!-- 货架 + 堆垛机 + 入库站点 --> 
 | 
        <div class="main-part"> 
 | 
            <!-- 第一组 --> 
 | 
            <div class="lane" id="mapDataId" style="margin-bottom: 280px"> 
 | 
  
 | 
            </div> 
 | 
        </div> 
 | 
    </main> 
 | 
    <footer class="footer"> 
 | 
        <!-- 总开关 --> 
 | 
        <div class="system-state"> 
 | 
            <div class="body-head">总开关</div> 
 | 
            <div class="switch"> 
 | 
                <label id="system-toggle" class="toggle-switch" style="margin-left: 20px;"> 
 | 
                    <input id="system-toggle-checked" checked="checked" type="checkbox"> 
 | 
                    <div class="button"> 
 | 
                        <div class="light"></div> 
 | 
                        <div class="dots"></div> 
 | 
                        <div class="characters"></div> 
 | 
                        <div class="shine"></div> 
 | 
                        <div class="shadow"></div> 
 | 
                    </div> 
 | 
                </label> 
 | 
  
 | 
                <div class="switch_r"> 
 | 
                    <p>系统状态</p> 
 | 
                    <p id="system-run-desc">系统运行中</p> 
 | 
                </div> 
 | 
            </div> 
 | 
        </div> 
 | 
        <!-- 四向穿梭车状态 --> 
 | 
        <div class="line-status"> 
 | 
            <div class="body-head">穿梭车状态</div> 
 | 
            <div id="shuttle-status-box"> 
 | 
            </div> 
 | 
            <div class="button"><span>所有状态</span></div> 
 | 
            <div class="button item-group"> 
 | 
                <span class="shuttle-idle">空闲</span> 
 | 
                <span class="shuttle-working">作业中</span> 
 | 
                <span class="shuttle-waiting">等待确认</span> 
 | 
                <span class="shuttle-charging">充电中</span> 
 | 
                <span class="shuttle-charging-waiting">充电任务等待确认</span> 
 | 
                <span class="shuttle-fixing">故障修复中</span> 
 | 
                <span class="shuttle-offline">离线</span> 
 | 
            </div> 
 | 
        </div> 
 | 
        <!-- 提升机状态 --> 
 | 
        <div class="line-status"> 
 | 
            <div class="body-head">提升机状态</div> 
 | 
            <div id="lift-status-box"> 
 | 
  
 | 
            </div> 
 | 
            <div class="button"><span>所有状态</span></div> 
 | 
            <div class="button item-group"> 
 | 
                <span class="lift-idle">空闲</span> 
 | 
                <span class="lift-working">作业中</span> 
 | 
                <span class="lift-waiting">等待确认</span> 
 | 
                <span class="lift-offline">离线</span> 
 | 
            </div> 
 | 
        </div> 
 | 
        <!-- 输送线状态 --> 
 | 
        <div class="line-status"> 
 | 
            <div class="body-head">输送线状态</div> 
 | 
            <div class="state states"> 
 | 
                <span>运输线总数</span> 
 | 
                <span class="line-ss">9</span> 
 | 
            </div> 
 | 
            <div class="button"><span>所有状态</span></div> 
 | 
            <div class="button item-group"> 
 | 
                <span class="site-auto-run-id">自动+有物+ID</span> 
 | 
                <span class="site-auto-run">自动+有物</span> 
 | 
                <span class="site-auto-id">自动+ID</span> 
 | 
                <span class="site-auto">自动</span> 
 | 
                <span class="site-unauto">非自动/手动</span> 
 | 
            </div> 
 | 
        </div> 
 | 
        <!-- 条码表格 --> 
 | 
        <div class="bar-code"> 
 | 
            <div class="body-head" id="code">条码扫描器</div> 
 | 
            <div class="tablebox"> 
 | 
                <div class="table-head"> 
 | 
                    <li><span>条码名称</span><span class="right">扫码时间</span></li> 
 | 
                </div> 
 | 
                <div id="barcode1" class="table-body"> 
 | 
  
 | 
                </div> 
 | 
            </div> 
 | 
            <div class="tablebox"> 
 | 
                <div class="table-head"> 
 | 
                    <li><span>条码名称</span><span class="right">扫码时间</span></li> 
 | 
                </div> 
 | 
                <div id="barcode2" class="table-body"> 
 | 
  
 | 
                </div> 
 | 
            </div> 
 | 
        </div> 
 | 
    </footer> 
 | 
  
 | 
    <!-- 堆垛机弹窗 --> 
 | 
    <div id="crnWindow" style="display: none;" class="animate__animated animate__fadeIn"> 
 | 
        <div id="crnWindow-head"> 
 | 
            <div class='detailed'></div> 
 | 
            <button></button> 
 | 
        </div> 
 | 
        <form> 
 | 
            <!-- 堆垛机号 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label" style> 
 | 
                    <span>堆垛机号:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="crnNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 工作号 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>工作号:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="workNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 站源 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>站源:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="sourceStaNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 目标站 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>目标站:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="staNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 工作状态 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>工作状态:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="wrkSts" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 出入类型 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>出入类型:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="ioType" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 源库位 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>源库位:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="sourceLocNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 目标库位 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>目标库位:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="locNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 堆垛机状态 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>堆垛机状态:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="crnStatus" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 异常 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>异常:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="error" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
        </form> 
 | 
    </div> 
 | 
  
 | 
    <!-- 输送设备弹窗 --> 
 | 
    <div id="siteWindow" style="display: none;" class="animate__animated animate__fadeIn"> 
 | 
        <!-- 表头 --> 
 | 
        <div id="siteWindow-head"> 
 | 
            <div class='detailed'></div> 
 | 
            <button></button> 
 | 
        </div> 
 | 
        <form> 
 | 
            <!-- 设备号 --> 
 | 
            <div class="form-item"  > 
 | 
                <div class="form-item-label"> 
 | 
                    <span>设备号:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="siteId" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 工作号 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>工作号:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="workNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 工作状态 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>工作状态:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="wrkSts" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 自动 --> 
 | 
            <div class="form-item-checkbox"> 
 | 
                <div class="form-item-label-checkbox"> 
 | 
                    <span>自动</span> 
 | 
                </div> 
 | 
                <div class="form-item-input-checkbox"> 
 | 
                    <input type="checkbox" name="autoing"> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 有物 --> 
 | 
            <div class="form-item-checkbox"> 
 | 
                <div class="form-item-label-checkbox"> 
 | 
                    <span>有物</span> 
 | 
                </div> 
 | 
                <div class="form-item-input-checkbox"> 
 | 
                    <input type="checkbox" name="loading"> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 能入 --> 
 | 
            <div class="form-item-checkbox"> 
 | 
                <div class="form-item-label-checkbox"> 
 | 
                    <span>能入</span> 
 | 
                </div> 
 | 
                <div class="form-item-input-checkbox"> 
 | 
                    <input type="checkbox" name="canining"> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 能出 --> 
 | 
            <div class="form-item-checkbox"> 
 | 
                <div class="form-item-label-checkbox"> 
 | 
                    <span>能出</span> 
 | 
                </div> 
 | 
                <div class="form-item-input-checkbox"> 
 | 
                    <input type="checkbox" name="canouting"> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 出入类型 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>出入类型:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="ioType" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 源站 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>源站:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="sourceStaNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 目标站 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>目标站:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="staNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 源库位 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>源库位:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="sourceLocNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
            <!-- 目标库位 --> 
 | 
            <div class="form-item"> 
 | 
                <div class="form-item-label"> 
 | 
                    <span>目标库位:</span> 
 | 
                </div> 
 | 
                <div class="form-item-input"> 
 | 
                    <input type="text" name="locNo" value=""> 
 | 
                </div> 
 | 
            </div> 
 | 
  
 | 
        </form> 
 | 
    </div> 
 | 
</div> 
 | 
</body> 
 | 
</html> 
 | 
<script> 
 | 
    var tData = [] 
 | 
    var tData1 = [] 
 | 
    var tData2 = [] 
 | 
    var tData3 = [] 
 | 
    var mapData = [] //地图数据 
 | 
    var currentLev = 1;//当前地图楼层 
 | 
    function getCodeData(){ 
 | 
        $.ajax({ 
 | 
            url:baseUrl +'/console/barcode/output/site', 
 | 
            method:'GET', 
 | 
            success:function (res) { 
 | 
                if(res.code === 200){ 
 | 
                    tData = eval(res.data); 
 | 
                    if(tData.length<=5){ 
 | 
                        tData1 = tData 
 | 
                    } else if (tData.length<=10){ 
 | 
                        tData1 = tData.slice(0,5) 
 | 
                        // tData.splice(0,4) 
 | 
                        tData2 = tData.splice(5,10) 
 | 
                    } else if(tData.length<=15){ 
 | 
                        tData1 = tData.slice(0,5) 
 | 
                        tData2 = tData.slice(5,10) 
 | 
                        // tData.splice(0,10) 
 | 
                        tData3 = tData.slice(10,15) 
 | 
                    } else { 
 | 
                        tData1 = tData.slice(0,5) 
 | 
                        tData2 = tData.slice(5,10) 
 | 
                        tData3 = tData.slice(10,15) 
 | 
                        // tData = tData.slice(-15) 
 | 
                        // tData1 = tData.slice(-15) 
 | 
                        // tData2 = tData.slice(-10) 
 | 
                        // tData3 = tData.slice(-5) 
 | 
  
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        }) 
 | 
    } 
 | 
    setInterval(function () { 
 | 
        getCodeData(); 
 | 
        renderBarCode(); 
 | 
    }, 1000) 
 | 
  
 | 
  
 | 
    function renderBarCode() { 
 | 
        for (var i = 0;i<tData1.length;i++){ 
 | 
            var str1 = '<li><span>' + tData1[i].barcode + '</span><span class="right">' + tData1[i].time + '</span></li>' 
 | 
            $('#barcode1').append(str1) 
 | 
        } 
 | 
        for(var j = 0;j<tData2.length;j++){ 
 | 
            var str2 = '<li><span>' + tData2[j].barcode + '</span><span class="right">' + tData2[j].time + '</span></li>' 
 | 
            $('#barcode2').append(str2) 
 | 
        } 
 | 
        for(var k = 0;k<tData3.length;k++){ 
 | 
            var str3 = '<li><span>' + tData3[k].barcode + '</span><span class="right">' + tData3[k].time + '</span></li>' 
 | 
            $('#barcode3').append(str3) 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    $(function (){ 
 | 
        initMap(1) 
 | 
    }) 
 | 
  
 | 
    setInterval(() => { 
 | 
        getShuttleStateInfo() 
 | 
        getLiftStateInfo() 
 | 
    },1000) 
 | 
  
 | 
    // 提升机信息表获取 
 | 
    function getLiftStateInfo() { 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/lift/table/lift/state", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                $("#lift-status-box").empty() 
 | 
                res.data.forEach((item,index) => { 
 | 
                    let liftStatusClass = "lift-idle" 
 | 
                    switch (item.protocolStatus) { 
 | 
                        case 1://空闲 
 | 
                            liftStatusClass = "lift-idle"; 
 | 
                            break 
 | 
                        case 2://作业中 
 | 
                            liftStatusClass = "lift-working"; 
 | 
                            break 
 | 
                        case 3://等待确认 
 | 
                            liftStatusClass = "lift-waiting"; 
 | 
                            break 
 | 
                        case 4://离线 
 | 
                            liftStatusClass = "lift-offline"; 
 | 
                            break 
 | 
                        default: 
 | 
                            liftStatusClass = "lift-idle" 
 | 
                    } 
 | 
                    let liftStatus = '<div class="state states">' + 
 | 
                        '<span>提升机 ' + item.liftNo + '</span>' + 
 | 
                        '<span class="state-ss ' + liftStatusClass + '">' + item.protocolStatus$ + '</span></div>'; 
 | 
                    $("#lift-status-box").append(liftStatus) 
 | 
  
 | 
                }) 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 四向穿梭车信息表获取 
 | 
    function getShuttleStateInfo() { 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/shuttle/table/shuttle/state", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                $("#shuttle-status-box").empty() 
 | 
                res.data.forEach((item,index) => { 
 | 
                    let shuttleStatusClass = "shuttle-idle" 
 | 
                    switch (item.status) { 
 | 
                        case 1://空闲 
 | 
                            shuttleStatusClass = "shuttle-idle"; 
 | 
                            break 
 | 
                        case 2://作业中 
 | 
                            shuttleStatusClass = "shuttle-working"; 
 | 
                            break 
 | 
                        case 3://等待确认 
 | 
                            shuttleStatusClass = "shuttle-waiting"; 
 | 
                            break 
 | 
                        case 4://充电中 
 | 
                            shuttleStatusClass = "shuttle-charging"; 
 | 
                            break 
 | 
                        case 5://充电任务等待确认 
 | 
                            shuttleStatusClass = "shuttle-charging-waiting"; 
 | 
                            break 
 | 
                        case 6://故障修复中 
 | 
                            shuttleStatusClass = "shuttle-fixing"; 
 | 
                            break 
 | 
                        case 7://离线 
 | 
                            shuttleStatusClass = "shuttle-offline"; 
 | 
                            break 
 | 
                        default: 
 | 
                            shuttleStatusClass = "shuttle-offline" 
 | 
                    } 
 | 
                    let shuttleStatus = '<div class="state">' + 
 | 
                        '<span>四向穿梭车 ' + item.shuttleNo + '</span>' + 
 | 
                        '<span class="state-ss ' + shuttleStatusClass + '">' + item.status$ + '</span></div>'; 
 | 
                    $("#shuttle-status-box").append(shuttleStatus) 
 | 
  
 | 
                    if(item.locNoLev != currentLev){ 
 | 
                        //四向穿梭车楼层和当前地图楼层不一致,删除该车辆 
 | 
                        $("#sxcar-" + item.shuttleNo).remove() 
 | 
                    }else { 
 | 
                        //移动四向穿梭车 
 | 
                        moveCar(item.shuttleNo,item.locNoX,item.locNoY) 
 | 
                    } 
 | 
                }) 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    //计算四向穿梭车图标位置 
 | 
    function getCarPosition(x,y) { 
 | 
        let top = (x * 35 - 35) + "px" //需要减去小车自己所占高度 
 | 
        let left = (y * 70 - 70) + "px" //需要减去小车自己所占宽度 
 | 
        return [top,left]; 
 | 
    } 
 | 
  
 | 
    //移动四向穿梭车图标 
 | 
    function moveCar(id,x,y) { 
 | 
        //获取具体位置top和left值 
 | 
        let position = getCarPosition(x,y) 
 | 
        let top = position[0] 
 | 
        let left = position[1] 
 | 
        $("#sxcar-" + id).animate({top: top,left: left}, 1000); 
 | 
    } 
 | 
  
 | 
    //初始化地图 
 | 
    function initMap(lev) { 
 | 
        getMap(lev) 
 | 
  
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/shuttle/table/shuttle/state", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                res.data.forEach((item,index) => { 
 | 
                    if(lev == item.locNoLev){ 
 | 
                        let carBox = '<div class="sxcar" id="sxcar-' + item.shuttleNo + '"></div>' 
 | 
                        $("#mapDataId").append(carBox) 
 | 
                    } 
 | 
                }) 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    //获取地图数据 
 | 
    function getMap(lev) { 
 | 
        //母轨道第一次索引,用于定位小车 
 | 
        let firstMotherIndex = [0,0]; 
 | 
        $("#mapDataId").empty() 
 | 
        $.ajax({ 
 | 
            type:"get", 
 | 
            // url: baseUrl + "/static/js/map_" + lev + ".json", 
 | 
            url: baseUrl + "/console/map/" + lev + "/auth", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            success: (res) => { 
 | 
                let data = res.data 
 | 
                mapData = data 
 | 
                let content = "" 
 | 
                data.forEach((rowData,index) => { 
 | 
                    //去掉上下边缘禁区 
 | 
                    if(!(index == 0 || data.length - 1 == index)){ 
 | 
                        let row = '<div class="stock-group">'; 
 | 
                        rowData.forEach((colData,idx) => { 
 | 
                            //去掉左右边缘禁区 
 | 
                            if(!(idx == 0 || rowData.length - 1 == idx)){ 
 | 
                                let col; 
 | 
                                switch (colData.value){ 
 | 
                                    case -999: 
 | 
                                        col = '<button class="item" style="background:#f83333;color: #fff;">' + idx + '</button>'; 
 | 
                                        break; 
 | 
                                    case -1: 
 | 
                                        col = '<button class="item" style="visibility: hidden">' + idx + '</button>'; 
 | 
                                        break; 
 | 
                                    case 3: 
 | 
                                        //母轨道 
 | 
                                        col = '<button class="item" style="background: #5af;">⇅⇄</button>'; 
 | 
                                        if (firstMotherIndex[0] === 0 && firstMotherIndex[1] === 0) { 
 | 
                                            //第一次遇到母轨道,则保存该轨道地址(用于小车初始化定位) 
 | 
                                            firstMotherIndex = [index,idx] 
 | 
                                        } 
 | 
                                        break; 
 | 
                                    case 4: 
 | 
                                        //站点 
 | 
                                        var data = colData.data; 
 | 
                                        col = '<div id="site-' + data + '" class="site">' + data + '(9991)</div>'; 
 | 
                                        break; 
 | 
                                    case 5: 
 | 
                                        //充电桩 
 | 
                                        col = '<button class="item" style="font-size: 24px">⚡</button>'; 
 | 
                                        break; 
 | 
                                    default: 
 | 
                                        col = '<button class="item">' + idx + '</button>'; 
 | 
                                } 
 | 
  
 | 
                                if(rowData.length - 2 == idx){ 
 | 
                                    //打上行数标记 
 | 
                                    col += '<span class="row-no">' + index + '#</span>'; 
 | 
                                } 
 | 
                                row += col 
 | 
                            } 
 | 
                        }) 
 | 
                        row += '</div>'; 
 | 
                        content += row 
 | 
                    } 
 | 
                }) 
 | 
  
 | 
                $("#mapDataId").append(content) 
 | 
            } 
 | 
        }) 
 | 
    } 
 | 
  
 | 
    //将地图数据转换成int二维数组(后续用于请求计算路径时携带地图数据参数使用) 
 | 
    function getMap2TwoArr() { 
 | 
        let data = [] 
 | 
        mapData.forEach((item,index) => { 
 | 
            let data2 = [] 
 | 
            item.forEach((val,idx) => { 
 | 
                data2.push(val.value) 
 | 
            }) 
 | 
            data.push(data2) 
 | 
        }) 
 | 
  
 | 
        return data; 
 | 
    } 
 | 
  
 | 
    function testMove() { 
 | 
        getMap2TwoArr()//测试地图数据转换是否正常 
 | 
        let json = "[{\n" + 
 | 
            "\t\t\"x\": 5,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 6,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 7,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 8,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 9,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 10,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 11,\n" + 
 | 
            "\t\t\"y\": 5\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 11,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 12,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 13,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 14,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 15,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 16,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 17,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 18,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 19,\n" + 
 | 
            "\t\t\"y\": 6\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 19,\n" + 
 | 
            "\t\t\"y\": 7\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 19,\n" + 
 | 
            "\t\t\"y\": 8\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 20,\n" + 
 | 
            "\t\t\"y\": 8\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 21,\n" + 
 | 
            "\t\t\"y\": 8\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 22,\n" + 
 | 
            "\t\t\"y\": 8\n" + 
 | 
            "\t},\n" + 
 | 
            "\t{\n" + 
 | 
            "\t\t\"x\": 23,\n" + 
 | 
            "\t\t\"y\": 8\n" + 
 | 
            "\t}\n" + 
 | 
            "]"; 
 | 
        json = JSON.parse(json) 
 | 
        json.forEach((item,index) => { 
 | 
            moveCar(1, item.x, item.y); 
 | 
        }) 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 重置地图 
 | 
     */ 
 | 
    function resetMap() { 
 | 
        $.ajax({ 
 | 
            url:baseUrl+"/console/map/resetMap/auth", 
 | 
            headers:{ 
 | 
                'token': localStorage.getItem('token') 
 | 
            }, 
 | 
            data:{}, 
 | 
            method:'get', 
 | 
            success:function (res) { 
 | 
                layer.msg('重置完成'); 
 | 
            } 
 | 
        }) 
 | 
    } 
 | 
  
 | 
    // 小车偏移动画 
 | 
    function carAnimate(id, target) { 
 | 
        if (id === 1000) { 
 | 
            let targetTop = 130; 
 | 
            switch (target) { 
 | 
                case 110: 
 | 
                    targetTop += 0; 
 | 
                    break; 
 | 
                case 109: 
 | 
                    targetTop += 60; 
 | 
                    break; 
 | 
                case 108: 
 | 
                    targetTop += 100; 
 | 
                    break; 
 | 
                case 107: 
 | 
                    targetTop += 180; 
 | 
                    break; 
 | 
                case 106: 
 | 
                    targetTop += 220; 
 | 
                    break; 
 | 
                default: 
 | 
                    return; 
 | 
            } 
 | 
            $("#site-" + id).animate({top: targetTop+'px'}, 1000); 
 | 
        } else if (id === 2000) { 
 | 
            let targetTop = 130; 
 | 
            switch (target) { 
 | 
                case 226: 
 | 
                    targetTop += 0; 
 | 
                    break; 
 | 
                case 225: 
 | 
                    targetTop += 60; 
 | 
                    break; 
 | 
                case 224: 
 | 
                    targetTop += 100; 
 | 
                    break; 
 | 
                case 223: 
 | 
                    targetTop += 180; 
 | 
                    break; 
 | 
                case 222: 
 | 
                    targetTop += 220; 
 | 
                    break; 
 | 
                case 214: 
 | 
                    targetTop += 280; 
 | 
                    break; 
 | 
                case 220: 
 | 
                    targetTop += 320; 
 | 
                    break; 
 | 
                default: 
 | 
                    return; 
 | 
            } 
 | 
            $("#site-" + id).animate({top: targetTop+'px'}, 1000); 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
<script type="text/javascript"> 
 | 
    // 弹窗站点信息 
 | 
    $('#mapDataId').on('click','.site',function(){ 
 | 
        var id = this.id.split("-")[1]; 
 | 
        $("#siteWindow").attr("style","display:block;");//显示div 
 | 
        $("#crnWindow").attr("style","display:none;"); 
 | 
        $(".detailed").empty(); 
 | 
        $('.detailed').append(id+'站点详细信息'); 
 | 
        $.ajax({ 
 | 
            url:baseUrl+"/console/site/detail", 
 | 
            headers:{ 
 | 
                'token': localStorage.getItem('token') 
 | 
            }, 
 | 
            data:{ 
 | 
                siteId: id 
 | 
            }, 
 | 
            method:'post', 
 | 
            success:function (res) { 
 | 
                for (var val in res.data) { 
 | 
                    var find = $("#siteWindow").find(":input[name='" + val + "']"); 
 | 
                    if (find[0].type==='text') { 
 | 
                        find.val(res.data[val]); 
 | 
                    } else if (find[0].type === 'checkbox') { 
 | 
                        find.attr("checked", res.data[val] === 'Y'); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
        }) 
 | 
  
 | 
    }); 
 | 
    // 堆垛机信息 
 | 
    $('.machine').on('click',function(){ 
 | 
        var id = this.id.split("-")[1]; 
 | 
        $("#crnWindow").attr('style','display:block;'); 
 | 
        $("#siteWindow").attr("style","display:none;"); 
 | 
        $('.detailed').empty(); 
 | 
        $('.detailed').append(id+'号堆垛机'); 
 | 
        $.ajax({ 
 | 
            url:baseUrl+"/console/crn/detail", 
 | 
            headers:{ 
 | 
                'token': localStorage.getItem('token') 
 | 
            }, 
 | 
            data:{ 
 | 
                crnNo: id 
 | 
            }, 
 | 
            method:'post', 
 | 
            success:function (res) { 
 | 
                for (var val in res.data) { 
 | 
                    var find = $("#crnWindow").find(":input[name='" + val + "']"); 
 | 
                    if (find[0].type==='text') { 
 | 
                        find.val(res.data[val]); 
 | 
                    } else if (find[0].type === 'checkbox') { 
 | 
                        find.attr("checked", res.data[val] === 'Y'); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
        }) 
 | 
  
 | 
    }) 
 | 
    // 弹窗关闭 
 | 
    $('button').on('click',function(){ 
 | 
        $('#siteWindow').attr('style','display:none') 
 | 
        $('#crnWindow').attr('style','display:none') 
 | 
    }) 
 | 
  
 | 
  
 | 
    var crn1Position = 0; 
 | 
    var crn2Position = 0; 
 | 
    var crn3Position = 0; 
 | 
    var crn4Position = 0; 
 | 
    var crn5Position = 0; 
 | 
  
 | 
    // 初始化 
 | 
    getSitesInfo(); 
 | 
    getCrnInfo(); 
 | 
    getSystemRunningStatus(); 
 | 
    getBarcodeInfo(); 
 | 
    getScaleInfo(); 
 | 
    // 实时访问 
 | 
    setInterval(function () { 
 | 
        getCrnInfo(); 
 | 
        getSystemRunningStatus(); 
 | 
        getBarcodeInfo(); 
 | 
        getScaleInfo(); 
 | 
    }, 1000); 
 | 
    setInterval(function () { 
 | 
        getSitesInfo(); 
 | 
    }, 3000); 
 | 
  
 | 
    $("#system-toggle").on("click",(e) => { 
 | 
        systemSwitch() 
 | 
        e.stopPropagation();//表示阻止向父元素冒泡 
 | 
        e.preventDefault();//阻止 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交或者a标签)。 
 | 
    }) 
 | 
  
 | 
    // 系统运行开关 
 | 
    function systemSwitch() { 
 | 
        if (parent.systemRunning){ 
 | 
            layer.prompt({title: '请输入口令,并停止 WCS 系统', formType: 1,   shadeClose: true}, function(pass, idx){ 
 | 
                layer.close(idx); 
 | 
                doSwitch(0, pass); // 停止wcs系统 
 | 
            }); 
 | 
        } else { 
 | 
            doSwitch(1); // 启动wcs系统 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 请求服务器控制wcs系统运行状态 
 | 
    function doSwitch(operatorType, password) { 
 | 
        // 加载tips 
 | 
        var index = layer.load(1, { 
 | 
            shade: [0.1,'#fff'] 
 | 
        }); 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/system/switch", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            // async: false, 
 | 
            data: { 
 | 
                operatorType: operatorType, 
 | 
                password: password 
 | 
            }, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                layer.close(index); 
 | 
                if (res.code === 200){ 
 | 
                    if (res.data.status) { 
 | 
                        $('#system-toggle-checked').attr("checked", true); 
 | 
                        $('#system-run-desc').html("系统运行中..."); 
 | 
                        parent.systemRunning = true; 
 | 
                    } else { 
 | 
                        $('#system-toggle-checked').attr("checked", false); 
 | 
                        $('#system-run-desc').html("系统已停止!"); 
 | 
                        parent.systemRunning = false; 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
  
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
  
 | 
    } 
 | 
  
 | 
    // 获取wcs系统运行状态 
 | 
    function getSystemRunningStatus() { 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/system/running/status", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                if (res.code === 200){ 
 | 
                    if (res.data.status) { 
 | 
                        $('#system-toggle-checked').attr("checked", true); 
 | 
                        $('#system-run-desc').html("系统运行中..."); 
 | 
                        parent.systemRunning = true; 
 | 
                    } else { 
 | 
                        $('#system-toggle-checked').attr("checked", false); 
 | 
                        $('#system-run-desc').html("系统已停止!"); 
 | 
                        parent.systemRunning = false; 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 输送设备实时数据获取 
 | 
    function getSitesInfo(){ 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/latest/data/site", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                if (res.code === 200){ 
 | 
                    var sites = res.data; 
 | 
                    for (var i = 0; i < sites.length; i++){ 
 | 
                        var siteEl = $("#site-"+sites[i].siteId); 
 | 
                        siteEl.attr("class", "site " + sites[i].siteStatus); 
 | 
                        if (sites[i].workNo != null && sites[i].workNo>0) { 
 | 
                            siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]"); 
 | 
                        } else { 
 | 
                            siteEl.html(sites[i].siteId); 
 | 
                        } 
 | 
                        if (i+1===8) { 
 | 
                            carAnimate(i+1, Number(sites[i].nearbySta)); 
 | 
                        } 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 堆垛机实时数据获取 
 | 
    function getCrnInfo(){ 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/latest/data/crn", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                if (res.code === 200){ 
 | 
                    var crns = res.data; 
 | 
                    for (var i = 0; i < crns.length; i++){ 
 | 
                        var crnEl = $("#crn-"+crns[i].crnId); 
 | 
                        crnEl.attr("class", "machine " + crns[i].crnStatus); 
 | 
                        var unit = ($('.item').eq(0).width()+4)/2; 
 | 
                        crnEl.animate({left: (crns[i].bay * unit + 25) +'px'}, 1000); 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 扫码器实时数据获取 
 | 
    function getBarcodeInfo(){ 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/latest/data/barcode", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
                if (res.code === 200){ 
 | 
                    var barcodes = res.data; 
 | 
                    for (var i = 0; i < barcodes.length; i++){ 
 | 
                        $("#code-decoder-data-"+barcodes[i].barcodeId).html(barcodes[i].codeValue); 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 磅秤实时数据获取 
 | 
    function getScaleInfo(){ 
 | 
        $.ajax({ 
 | 
            url: baseUrl+ "/console/latest/data/scale", 
 | 
            headers: {'token': localStorage.getItem('token')}, 
 | 
            method: 'POST', 
 | 
            success: function (res) { 
 | 
  
 | 
                if (res.code === 200){ 
 | 
                    var sclaes = res.data; 
 | 
                    for (var i = 0; i < sclaes.length; i++){ 
 | 
                        console.log(sclaes[i].scaleId + ":" + sclaes[i].value) 
 | 
                        $("#scale-data-"+sclaes[i].scaleId).text(sclaes[i].value); 
 | 
                    } 
 | 
                } else if (res.code === 403){ 
 | 
                    parent.location.href = baseUrl+"/login"; 
 | 
                }  else { 
 | 
                    console.log(res.msg); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
    // 小车偏移动画 
 | 
    function carAnimate(id, target) { 
 | 
        var targetTop = 122; 
 | 
        if (id === 8) { 
 | 
            switch (target) { 
 | 
                case 1: 
 | 
                    targetTop += 160; 
 | 
                    break; 
 | 
                case 2: 
 | 
                    targetTop += 140; 
 | 
                    break; 
 | 
                case 3: 
 | 
                    targetTop += 80; 
 | 
                    break; 
 | 
                case 4: 
 | 
                    targetTop += 40; 
 | 
                    break; 
 | 
                case 7: 
 | 
                    targetTop += 0; 
 | 
                    break; 
 | 
                default: 
 | 
                    return; 
 | 
            } 
 | 
        } else { 
 | 
            return; 
 | 
        } 
 | 
        $("#site-" + id).animate({top: targetTop+'px'}, 1000); 
 | 
    } 
 | 
  
 | 
     //楼层切换按钮 
 | 
    function changFloor(e,x) { 
 | 
        $("#floorBtnBox button").each((index,item) => { 
 | 
            $(item).removeClass("btn-16-active") 
 | 
        }) 
 | 
        $(e).addClass("btn-16-active") 
 | 
        currentLev = x 
 | 
        initMap(currentLev) 
 | 
    } 
 | 
  
 | 
</script> 
 |