#
Junjie
2023-08-30 c41fce4524aaf930da42d2b86a41f0ec8570c0a0
src/main/webapp/views/console.html
@@ -5,6 +5,7 @@
    <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>
@@ -22,15 +23,22 @@
                <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>
                <button class="floorBtn  btn-16" onclick="changFloor(this,5)" style="margin-top: 350px">5F</button>
                <button class="floorBtn  btn-16" onclick="changFloor(this,6)" style="margin-top: 400px">6F</button>
                <button class="floorBtn  btn-16" onclick="changFloor(this,7)" style="margin-top: 450px">7F</button>
                <button class="floorBtn  btn-16" onclick="changFloor(this,8)" style="margin-top: 500px">8F</button>
                <button class="floorBtn  btn-16" onclick="changFloor(this,9)" style="margin-top: 550px">9F</button>
                <button class="floorBtn  btn-16" onclick="changFloor(this,10)" style="margin-top: 600px">10F</button>
            </div>
            <button class="floorBtn  btn-16" onclick="testMove()" style="margin-top: 350px">测试移动车</button>
            <button class="floorBtn  btn-16" onclick="resetMap()" style="margin-top: 650px;font-size: 14px;">重置地图</button>
            <button class="floorBtn  btn-16" onclick="testMove()" style="margin-top: 700px;font-size: 14px;">测试移动车</button>
        <!-- 货架 + 堆垛机 + 入库站点 -->
        <div class="main-part">
            <!-- 第一组 -->
            <div class="lane" id="mapDataId" style="margin-bottom: 280px">
        <div class="main-part" id="mapDataId">
<!--            &lt;!&ndash; 第一组 &ndash;&gt;-->
<!--            <div class="lane" id="mapDataId" style="margin-bottom: 280px">-->
            </div>
<!--            </div>-->
        </div>
    </main>
    <footer class="footer">
@@ -38,35 +46,51 @@
        <div class="system-state">
            <div class="body-head">总开关</div>
            <div class="switch">
                <div id="system-icon" class="system-icon-open" onclick="systemSwitch()"></div>
                <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="machine-status">
            <div class="body-head">堆垛机状态</div>
            <div class="state">
                <span>堆垛机 1</span>
                <span class="state-ss machine-put-flag   ">入库</span>
        <!-- 四向穿梭车状态 -->
        <div class="line-status">
            <div class="body-head">穿梭车状态</div>
            <div id="shuttle-status-box" style="height: 100px;overflow-y: scroll;overflow-x: hidden;">
            </div>
<!--            <div class="state">-->
<!--                <span>堆垛机 2</span>-->
<!--                <span class="state-ss machine-auto-flag   ">自动</span>-->
<!--            </div>-->
            <div class="button"><span>所有状态</span></div>
            <div class="button item-group">
                <span class="machine-put-flag">入库</span>
                <span class="machine-take-flag">出库</span>
                <span class="machine-stock-move-flag">库到库</span>
                <span class="machine-site-move-flag">站到站</span>
                <span class="machine-p-move-flag">PToP</span>
                <span class="machine-error-flag">异常</span>
                <span class="machine-auto-flag">自动</span>
                <span class="machine-unauto-flag">非自动/手动</span>
                <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" style="height: 120px;overflow-y: scroll;overflow-x: hidden;">
            </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>
        <!-- 输送线状态 -->
@@ -101,14 +125,6 @@
                    <li><span>条码名称</span><span class="right">扫码时间</span></li>
                </div>
                <div id="barcode2" class="table-body">
                </div>
            </div>
            <div class="tablebox">
                <div class="table-head">
                    <li><span>条码名称</span><span class="right">扫码时间</span></li>
                </div>
                <div id="barcode3" class="table-body">
                </div>
            </div>
@@ -404,7 +420,44 @@
    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() {
@@ -413,13 +466,45 @@
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                $("#shuttle-status-box").empty()
                res.data.forEach((item,index) => {
                    if(item.locNoLev != currentLev){
                    let shuttleStatusClass = "shuttle-idle"
                    switch (item.protocolStatus) {
                        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.protocolStatus$ + '</span></div>';
                    $("#shuttle-status-box").append(shuttleStatus)
                    if(item.wcsPoint.z != currentLev){
                        //四向穿梭车楼层和当前地图楼层不一致,删除该车辆
                        $("#sxcar-" + item.shuttleNo).remove()
                    }else {
                        //移动四向穿梭车
                        moveCar(item.shuttleNo,item.locNoX,item.locNoY)
                        moveCar(item.shuttleNo,item.wcsPoint.x,item.wcsPoint.y)
                    }
                })
            }
@@ -429,7 +514,7 @@
    //计算四向穿梭车图标位置
    function getCarPosition(x,y) {
        let top = (x * 35 - 35) + "px" //需要减去小车自己所占高度
        let left = (y * 70 - 70) + "px" //需要减去小车自己所占宽度
        let left = (y * 35 - 35) + "px" //需要减去小车自己所占宽度
        return [top,left];
    }
@@ -444,13 +529,35 @@
    //初始化地图
    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.wcsPoint.z){
                        let carBox = '<div class="sxcar" id="sxcar-' + item.shuttleNo + '">' + item.shuttleNo + '</div>'
                        $("#mapDataId").append(carBox)
                    }
                })
            }
        });
    }
    //获取地图数据
    function getMap(lev) {
        //母轨道第一次索引,用于定位小车
        let firstMotherIndex = [0,0];
        $("#mapDataId").empty()
        $.ajax({
            type:"get",
            url: baseUrl + "/static/js/map.json",
            success: (data) => {
            // 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) => {
@@ -462,6 +569,9 @@
                            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;
@@ -475,21 +585,19 @@
                                        break;
                                    case 4:
                                        //站点
                                        if (lev == 1) {
                                            let data = colData.data;
                                            col = '<div id="site-' + data + '" class="site">' + data + '(9991)</div>';
                                        }else {
                                            //其他楼层只有提升机能显示
                                            let data = colData.data;
                                            if (data == 109) {//其他楼层只有提升机能显示
                                                col = '<div id="site-' + data + '" class="site">' + data + '(9991)</div>';
                                            }else {
                                                col = '<div style="visibility: hidden" id="site-' + data + '" class="site">' + data + '(9991)</div>';
                                            }
                                        }
                                        var data = colData.data;
                                        col = '<div id="site-' + data + '" class="site">' + data + '</div>';
                                        break;
                                    case 5:
                                        //充电桩
                                        col = '<button class="item" style="font-size: 24px">&#9889;</button>';
                                        break;
                                    default:
                                        col = '<button class="item">' + idx + '</button>';
                                        let val = idx;
                                        if (colData.data.length > 0) {
                                            val = colData.data
                                        }
                                        col = '<button class="item">' + val + '</button>';
                                }
                                if(rowData.length - 2 == idx){
@@ -507,20 +615,6 @@
                $("#mapDataId").append(content)
            }
        })
        $.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)
                    }
                })
            }
        });
    }
    //将地图数据转换成int二维数组(后续用于请求计算路径时携带地图数据参数使用)
@@ -539,100 +633,28 @@
    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" +
            "]";
        let json = "[{\"x\":5,\"y\":5},{\"x\":6,\"y\":5},{\"x\":7,\"y\":5},{\"x\":8,\"y\":5},{\"x\":9,\"y\":5},{\"x\":10,\"y\":5},{\"x\":11,\"y\":5},{\"x\":11,\"y\":6},{\"x\":12,\"y\":6},{\"x\":13,\"y\":6},{\"x\":14,\"y\":6},{\"x\":15,\"y\":6},{\"x\":16,\"y\":6}]";
        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('重置完成');
            }
        })
    }
    // 小车偏移动画
@@ -758,7 +780,6 @@
    })
    var crn1Position = 0;
    var crn2Position = 0;
    var crn3Position = 0;
@@ -781,6 +802,12 @@
    setInterval(function () {
        getSitesInfo();
    }, 3000);
    $("#system-toggle").on("click",(e) => {
        systemSwitch()
        e.stopPropagation();//表示阻止向父元素冒泡
        e.preventDefault();//阻止 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交或者a标签)。
    })
    // 系统运行开关
    function systemSwitch() {
@@ -813,11 +840,11 @@
                layer.close(index);
                if (res.code === 200){
                    if (res.data.status) {
                        $('#system-icon').attr("class", "system-icon-open");
                        $('#system-toggle-checked').attr("checked", true);
                        $('#system-run-desc').html("系统运行中...");
                        parent.systemRunning = true;
                    } else {
                        $('#system-icon').attr("class", "system-icon-close");
                        $('#system-toggle-checked').attr("checked", false);
                        $('#system-run-desc').html("系统已停止!");
                        parent.systemRunning = false;
                    }
@@ -841,11 +868,11 @@
            success: function (res) {
                if (res.code === 200){
                    if (res.data.status) {
                        $('#system-icon').attr("class", "system-icon-open");
                        $('#system-toggle-checked').attr("checked", true);
                        $('#system-run-desc').html("系统运行中...");
                        parent.systemRunning = true;
                    } else {
                        $('#system-icon').attr("class", "system-icon-close");
                        $('#system-toggle-checked').attr("checked", false);
                        $('#system-run-desc').html("系统已停止!");
                        parent.systemRunning = false;
                    }
@@ -954,34 +981,6 @@
                }
            }
        });
    }
    // 堆垛机偏移动画
    function crnAnimate(id, leftVal) {
        switch (id) {
            case 1:
                $("#crn-1").animate({left: leftVal+'px'}, 1000);
                crn1Position = leftVal;
                break;
            case 2:
                $("#crn-2").animate({left: leftVal+'px'}, 1000);
                crn2Position = leftVal;
                break;
            case 3:
                $("#crn-3").animate({left: leftVal+'px'}, 1000);
                crn3Position = leftVal;
                break;
            case 4:
                $("#crn-4").animate({left: leftVal+'px'}, 1000);
                crn4Position = leftVal;
                break;
            case 5:
                $("#crn-5").animate({left: leftVal+'px'}, 1000);
                crn5Position = leftVal;
                break;
            default:
                break
        }
    }
    // 小车偏移动画