#
Junjie
2025-09-05 c4b6b51afdd3374735ed5f358457987eaa6e476f
src/main/webapp/views/lift.html
@@ -1,493 +1,456 @@
<!DOCTYPE html>
<html lang="en">
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>提升机监控管理</title>
    <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/layui/css/layui.css">
    <link rel="stylesheet" href="../static/css/lift.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>提升机监控系统</title>
    <link rel="stylesheet" href="../static/vue/element/element.css">
    <link rel="stylesheet" href="../static/css/shuttle_page.min.css">
    <script src="../static/js/shuttle_page.js"></script>
    <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../static/js/layer/layer.js"></script>
    <script type="text/javascript" src="../static/layui/layui.js"></script>
    <script type="text/javascript" src="../static/js/common.js"></script>
    <script type="text/javascript" src="../static/vue/js/vue.min.js"></script>
    <script type="text/javascript" src="../static/vue/element/element.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', sans-serif;
            background-color: #0f172a;
            color: #e2e8f0;
        }
        .card {
            background-color: #1e293b;
            border-radius: 0.75rem;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease;
        }
        /*.card:hover {*/
        /*    transform: translateY(-2px);*/
        /*    box-shadow: 0 10px 15px rgba(0, 0, 0, 0.2);*/
        /*}*/
        .btn {
            background-color: #3b82f6;
            color: white;
            border-radius: 0.5rem;
            padding: 0.5rem 1rem;
            transition: all 0.3s ease;
        }
        .btn:hover {
            background-color: #2563eb;
            transform: translateY(-1px);
        }
        .status-active {
            color: #4ade80;
        }
        .status-inactive {
            color: #f87171;
        }
        .progress-bar {
            height: 0.75rem;
            border-radius: 0.375rem;
            background-color: #334155;
        }
        .progress-fill {
            height: 100%;
            border-radius: 0.375rem;
            background-color: #4ade80;
            transition: width 0.5s ease;
        }
        .table-striped tbody tr:nth-child(odd) {
            background-color: #1e293b;
        }
        .table-striped tbody tr:nth-child(even) {
            background-color: #1a2537;
        }
    </style>
</head>
<body>
<div style="padding: 10px;height: 100%;float: left;width: 6%">
    <div class="button-window"></div>
</div>
<div style="height: 100%;padding-left: 6%">
    <div style="padding: 10px;height: 100%">
        <!-- 日志监控板 -->
        <div class="log-board">
            <div class="command-log" id="commandLogId" style="width: 10%;">
            </div>
            <div class="lift-state" style="width: 90%;">
                <table id="lift-state-table">
                    <thead>
                    <tr>
                        <th>提升机</th>
                        <th>工作号</th>
                        <th>任务状态</th>
                        <th>提升机锁定</th>
                        <th>位置到达反馈</th>
                        <th>准备就绪</th>
                        <th>运行中</th>
                        <th>联机/单机</th>
                        <th>平台位置偏差报警</th>
                        <th>平台扭矩偏差报警</th>
                        <th>平台四向车检测</th>
                        <th>未就绪状态</th>
                        <th>伺服1错误</th>
                        <th>伺服2错误</th>
                        <th>伺服3错误</th>
                        <th>伺服4错误</th>
                        <th>提升机实际速度反馈</th>
                    </tr>
                    </thead>
                    <tbody>
                    </tbody>
                </table>
            </div>
        </div>
        <!-- 提升机状态 -->
        <div class="lift-msg">
            <table id="lift-msg-table">
                <thead>
                <tr>
                    <th>提升机</th>
                    <th>工作号</th>
                    <th>输送线前端光电有货</th>
                    <th>输送线正转反馈</th>
                    <th>输送线反转反馈</th>
                    <th>输送线电机过载</th>
                    <th>输送线末端光电有货</th>
                    <th>进输送线卡托盘报警</th>
                    <th>出输送线卡托盘报警</th>
                    <th>作业标记</th>
                    <th>穿梭车号</th>
                </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
        </div>
        <!-- 手动操作 -->
        <div class="lift-operation">
            <!-- 遮罩层 -->
            <div class="lift-operation-shade">
                    <span class="lift-operation-shade-span">
                        WCS 系统运行中,请停止后操作
                    </span>
            </div>
            <!-- 设备任务选择 -->
            <div class="task-select">
                <!-- 选择 -->
                <div id="lift-select" class="operator-item">
                    <span class="select-title">提升机号</span>
                    <div class="select-container" id="liftRadioBoxId">
                        <!--                            <label><input type="radio" name="liftSelect" value="1" checked>&nbsp;1号提升机</label>-->
<body class="min-h-screen">
    <div id="app">
        <div class="container mx-auto px-4 py-8">
            <!-- 顶部标题和状态栏 -->
            <div class="flex flex-col md:flex-row justify-between items-center mb-8">
                <h1 class="text-3xl font-bold text-blue-400 mb-4 md:mb-0">
                    <i class="fas fa-robot mr-2"></i>提升机监控系统
                </h1>
                <div class="flex items-center space-x-4">
                    <div class="flex items-center">
                        <div class="w-3 h-3 rounded-full bg-green-500 mr-2"></div>
                        <span>在线: {{ deviceStatusCountMap.online }}</span>
                    </div>
                    <div class="flex items-center">
                        <div class="w-3 h-3 rounded-full bg-yellow-500 mr-2"></div>
                        <span>故障: {{ deviceStatusCountMap.error }}</span>
                    </div>
                    <div class="flex items-center">
                        <div class="w-3 h-3 rounded-full bg-red-500 mr-2"></div>
                        <span>离线: {{ deviceStatusCountMap.offline }}</span>
                    </div>
                </div>
            </div>
            <!-- 设备任务操作 -->
            <div class="task-operator">
                <fieldset>
                    <legend>手动操作</legend>
                    <div class="button-group">
                        <select id="liftLev">
                            <option value="1" selected>1F</option>
                            <option value="3">2F</option>
                            <option value="4">3F</option>
                            <option value="5">4F</option>
                            <option value="2">输送线位置</option>
                        </select>
                        <button class="item" onclick="liftOperator(1)">移动提升机</button>
                        <button class="item" onclick="liftOperator(3)">无货正转</button>
                        <button class="item" onclick="liftOperator(4)">无货反转</button>
                        <button class="item" onclick="liftOperator(5)">有货正转</button>
                        <button class="item" onclick="liftOperator(6)">有货反转</button>
                        <button class="item" onclick="liftOperator(7)">链条停止</button>
                        <button class="item" onclick="liftOperator(0)">复位</button>
            <!-- 主要监控区域 -->
            <div class="card p-6 mb-8">
                <!-- 提升机状态表格 -->
                <div class="card p-6">
                    <div class="flex justify-between items-center mb-4">
                        <h2 class="text-xl font-semibold text-blue-300">
                            <i class="fas fa-list-alt mr-2"></i>提升机状态
                        </h2>
                        <div class="relative">
                            <select v-model="selectListStatus" class="bg-slate-700 text-white rounded px-3 py-1 pr-8">
                                <option value="all">全部状态</option>
                                <option value="online">在线</option>
                                <option value="idle">空闲</option>
                                <option value="running">运行中</option>
                                <option value="offline">离线</option>
                                <option value="error">故障</option>
                            </select>
                        </div>
                    </div>
                </fieldset>
                    <div class="overflow-auto" style="height: 500px;">
                        <table class="w-full table-striped">
                            <thead>
                            <tr class="text-left text-slate-300 border-b border-slate-600 bg-slate-800 sticky top-0 z-10">
                                <th class="py-3 px-4">编号</th>
                                <th class="py-3 px-4">工作号</th>
                                <th class="py-3 px-4">PLC工作号</th>
                                <th class="py-3 px-4">设备模式</th>
                                <th class="py-3 px-4">设备状态</th>
                                <th class="py-3 px-4">任务状态</th>
                                <th class="py-3 px-4">任务模式</th>
                                <th class="py-3 px-4">取货数据</th>
                                <th class="py-3 px-4">放货数据</th>
                                <th class="py-3 px-4">出入库模式</th>
                                <th class="py-3 px-4">托盘</th>
                                <th class="py-3 px-4">小车</th>
                                <th class="py-3 px-4">故障码</th>
                                <th class="py-3 px-4">层</th>
                                <th class="py-3 px-4">站点信息</th>
                            </tr>
                            </thead>
                            <tbody>
                                <tr v-for="(item,idx) in liftList" :key="idx" class="hover:bg-slate-700">
                                    <td class="py-3 px-4">{{ item.liftNo }}</td>
                                    <td class="py-3 px-4">{{ item.taskNo }}</td>
                                    <td class="py-3 px-4">{{ item.plcTaskNo }}</td>
                                    <td class="py-3 px-4">{{ item.model$ }}</td>
                                    <td class="py-3 px-4">{{ item.deviceStatus$ }}</td>
                                    <td class="py-3 px-4">{{ item.protocolStatus$ }}</td>
                                    <td class="py-3 px-4">{{ item.taskMode$ }}</td>
                                    <td class="py-3 px-4">{{ item.pick }}</td>
                                    <td class="py-3 px-4">{{ item.put }}</td>
                                    <td class="py-3 px-4">{{ item.iOMode$ }}</td>
                                    <td class="py-3 px-4">{{ item.hasTray ? '有':'无' }}</td>
                                    <td class="py-3 px-4">{{ item.hasCar ? '有':'无' }}</td>
                                    <td class="py-3 px-4">{{ item.errorCode }}</td>
                                    <td class="py-3 px-4">{{ item.lev }}</td>
                                    <td class="py-3 px-4">
                                        <div v-for="(sta,id) in item.liftStaProtocols" :key="id">
                                            {{ sta.lev }}层,托盘:{{ sta.hasTray ? 'Y':'N' }},小车:{{ sta.hasCar ? 'Y':'N' }}
                                        </div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
        <!-- 提升机日志输出 -->
        <div class="lift-output-board">
            <textarea id="lift-output"></textarea>
        </div>
        <div id="lift-detl" style="display: none">
            <div>
                <div class="form-item">
                    <label class="form-label">站号:</label>
                    <div class="form-input">
                        <input id="liftNo" name="liftNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled">
            <!-- 操作控制区域 -->
            <div class="card p-6 mb-8">
                <h2 class="text-xl font-semibold text-blue-300 mb-4">
                    <i class="fas fa-sliders-h mr-2"></i>控制面板
                </h2>
                <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2">
                    <div class="bg-slate-700 p-4 rounded-lg">
                        <h3 class="text-lg font-medium mb-2">设备控制</h3>
                        <div class="flex flex-wrap gap-2" style="display: flex;justify-content: center;">
                            <div>
                                <el-input @change="changeControlLiftNo" v-model="controlData.liftNo" style="width: 150px;" placeholder="编号"></el-input>
                            </div>
                            <div>
                                <el-input v-model="controlData.sourceStaNo" style="width: 200px;" placeholder="源站"></el-input>
                            </div>
                            <div>
                                <el-input v-model="controlData.staNo" style="width: 200px;" placeholder="目标站"></el-input>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="form-item">
                    <label class="form-label">工作号:</label>
                    <div class="form-input">
                        <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" autocomplete="off">
                    <div class="bg-slate-700 p-4 rounded-lg">
                        <h3 class="text-lg font-medium mb-2">设备指令</h3>
                        <div class="flex flex-wrap gap-2" style="display: flex;justify-content: center;">
                            <button class="btn bg-slate-600 hover:bg-slate-500" @click="liftOperator('movePallet')">
                                <i class="fas fa-level-up mr-1"></i>移动托盘
                            </button>
                            <button class="btn bg-slate-600 hover:bg-slate-500" @click="liftOperator('switchShuttle')">
                                <i class="fas fa-level-down mr-1"></i>小车换层
                            </button>
                            <button class="btn bg-slate-600 hover:bg-slate-500" @click="liftOperator('move')">
                                <i class="fas fa-battery-three-quarters mr-1"></i>移动
                            </button>
                            <button class="btn bg-slate-600 hover:bg-slate-500" @click="liftOperator('reset')">
                                <i class="fas fa-home mr-1"></i>复位
                            </button>
                        </div>
                    </div>
                </div>
                <div class="form-item">
                    <label class="form-label">作业标记:</label>
                    <div class="form-input">
                        <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off">
                    </div>
                </div>
                <div class="form-item form-button-container">
                    <button class="form-button" id="save">保存</button>
                    <button class="form-button" id="cancel" style="background-color: #D0D0D0">取消</button>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>
<script>
    // 空白行数
    var liftStateTableBlankRows = 0;
    var liftMsgTableBlankRows = 0;
    // 实际行数
    var liftStateTableFullRows = 0;
    var liftMsgTableFullRows = 0;
    // 初始化
    var liftOutputDom = document.getElementById("lift-output");
    $(document).ready(function() {
        initliftStateTable();
        getliftStateInfo();
        initliftMsgTable();
        getliftMsgInfo();
        operatorBlockShow();
        setliftRadio();
    });
    var app = new Vue({
        el: '#app',
        data: {
            ws: null,
            liftList: [], //提升机集合
            liftAllList: [],
            selectListStatus: "all",
            deviceStatusCountMap: {},
            controlData: {
                liftNo: "",
                taskNo: "",
                sourceLocNo: "",
                targetLocNo: ""
            },
            controlLiftInfo: null,
        },
        created() {
            this.init()
        },
        watch: {
    setInterval(function () {
        getliftStateInfo()
        getliftMsgInfo();
    },1000)
    setInterval(function () {
        getliftOutput();
        operatorBlockShow();
    },500);
        },
        methods: {
            init() {
                this.consoleInterval = setInterval(() => {
                    this.websocketConnect();
    // 判断手动操作模块是否可用
    function operatorBlockShow() {
        if (parent.systemRunning) {
            $('.lift-operation').css("opacity", "0.5");
            $('.lift-operation-shade').show();
            $('.lift-operation-shade-span').show();
        }  else {
            $('.lift-operation').css("opacity", "1");
            $('.lift-operation-shade').hide();
            $('.lift-operation-shade-span').hide();
        }
    }
                    this.getLiftStateInfo() //获取提升机信息
                }, 1000)
            },
            getLiftStateInfo() {
                this.sendWs(JSON.stringify({
                    "url": "/lift/table/lift/state",
                    "data": {}
                }))
            },
            setLiftStateInfo(res) {
                // 提升机信息表获取
                if (res.code == 200) {
                    let list = res.data;
    function getColor(res,e){
        $(e).val(res?"✔":"—");
        if (res){
            $(e).attr("style", "color: #FD482C;");
        }else {
            $(e).attr("style", "color: #00FF00;");
        }
    }
                    let allList = []
                    let runningList = []
                    let idleList = []
                    let errorList = []
                    let offlineList = []
                    let onlineList = []
    $(document).on('click ','#save', function () {
        http.post(baseUrl+ "/lift/detl/update", {
            liftNo: $('#liftNo').val(),
            workNo: $('#workNo').val(),
            pakMk: $('#pakMk').val(),
        }, function (res) {
            layer.msg("修改成功", {icon: 1,});
            layer.close(layerIdx);
        })
    })
                    list.forEach((item) => {
                        allList.push(item)
    function setliftRadio() {
        $.ajax({
            url: baseUrl+ "/lift/table/lift/state",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200){
                    let table = res.data;
                    for (let i=1;i<=table.length;i++){
                        //渲染提升机选项html
                        let liftRadioBox = '<label><input type="radio" name="liftSelect" ';
                        if (i === 1) {
                            liftRadioBox += 'checked '
                        if(item.protocolStatusType == "WORKING") {
                            runningList.push(item)
                        }
                        liftRadioBox += 'value="' + table[i - 1].liftNo + '">&nbsp;' + table[i - 1].liftNo + '号提升机</label>'
                        $("#liftRadioBoxId").append(liftRadioBox)
                        if(item.protocolStatusType == "IDLE") {
                            idleList.push(item)
                        }
                        //渲染提升机数据维护和设备信息html
                        let liftCommandLogBox = '<div class="lift-command-item" data-liftNo="' + table[i - 1].liftNo + '">\n' +
                            '<label>' + table[i - 1].liftNo + '#</label>\n' +
                            '</div>'
                        $("#commandLogId").append(liftCommandLogBox);
                        if(item.errorCode > 0) {
                            errorList.push(item)
                        }
                        if (item.protocolStatusType == "NONE") {
                            offlineList.push(item)
                        }else {
                            onlineList.push(item)
                        }
                    })
                    if (this.selectListStatus == "all") {
                        this.liftList = allList;
                    }else if (this.selectListStatus == "running") {
                        this.liftList = runningList;
                    }else if (this.selectListStatus == "idle") {
                        this.liftList = idleList;
                    }else if (this.selectListStatus == "error") {
                        this.liftList = errorList;
                    }else if (this.selectListStatus == "offline") {
                        this.liftList = offlineList;
                    }else if (this.selectListStatus == "online") {
                        this.liftList = onlineList;
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    console.log(res.msg);
                }
            }
        });
    }
    // 提升机信息表获取 ---- 表一
    function getliftStateInfo() {
        let tableEl = $('#lift-state-table');
        $.ajax({
            url: baseUrl+ "/lift/table/lift/state",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200){
                    let table = res.data;
                    if (table.length > liftStateTableBlankRows && table.length !== liftStateTableFullRows) {
                        initliftStateTable(table.length-liftStateTableBlankRows);
                        liftStateTableFullRows = table.length;
                    let tmpMap = {
                        idle: idleList.length,
                        running: runningList.length,
                        error: errorList.length,
                        offline: offlineList.length,
                        online: idleList.length + runningList.length,
                    }
                    for (let i=1;i<=table.length;i++){
                        // $("#mode-"+table[i-1].liftNo).html(table[i-1].statusVal===0?'联机':'脱机');
                        let tr = tableEl.find("tr").eq(i);
                        setVal(tr.children("td").eq(0), table[i-1].liftNo);
                        setVal(tr.children("td").eq(1), table[i-1].taskNo);
                        setVal(tr.children("td").eq(2), table[i-1].protocolStatus$);
                        setVal(tr.children("td").eq(3), table[i-1].liftLock$);
                        setVal(tr.children("td").eq(4), table[i-1].positionArrivalFeedback);
                        setVal(tr.children("td").eq(5), table[i-1].ready$);
                        setVal(tr.children("td").eq(6), table[i-1].running$);
                        setVal(tr.children("td").eq(7), table[i-1].mode$);
                        setVal(tr.children("td").eq(8), table[i-1].platPositionDeviationAlarm$);
                        setVal(tr.children("td").eq(9), table[i-1].platTorqueDeviationAlarm$);
                        setVal(tr.children("td").eq(10), table[i-1].platShuttleCheck$);
                        setVal(tr.children("td").eq(11), table[i-1].notReady$);
                        setVal(tr.children("td").eq(12), table[i-1].servoError1);
                        setVal(tr.children("td").eq(13), table[i-1].servoError2);
                        setVal(tr.children("td").eq(14), table[i-1].servoError3);
                        setVal(tr.children("td").eq(15), table[i-1].servoError4);
                        setVal(tr.children("td").eq(16), table[i-1].liftActualSpeed);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    console.log(res.msg);
                }
            }
        });
    }
                    this.deviceStatusCountMap = tmpMap;
    // 提升机数据表获取 ---- 表二
    function getliftMsgInfo() {
        let tableEl = $('#lift-msg-table');
        $.ajax({
            url: baseUrl+ "/lift/table/lift/msg",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200){
                    var table = res.data;
                    if (table.length > liftMsgTableBlankRows && table.length !== liftMsgTableFullRows) {
                        initliftMsgTable(table.length-liftMsgTableBlankRows);
                        liftMsgTableFullRows = 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].liftNo);
                        setVal(tr.children("td").eq(1), table[i-1].workNo);
                        setVal(tr.children("td").eq(2), table[i-1].lineFrontHasStock$);
                        setVal(tr.children("td").eq(3), table[i-1].forwardRotationFeedback$);
                        setVal(tr.children("td").eq(4), table[i-1].reverseFeedback$);
                        setVal(tr.children("td").eq(5), table[i-1].motorOverload$);
                        setVal(tr.children("td").eq(6), table[i-1].lineEndHasStock$);
                        setVal(tr.children("td").eq(7), table[i-1].inConveyLineCardTrayAlarm$);
                        setVal(tr.children("td").eq(8), table[i-1].outConveyLineCardTrayAlarm$);
                        setVal(tr.children("td").eq(9), table[i-1].pakMk);
                        setVal(tr.children("td").eq(10), table[i-1].shuttleNo);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    console.log(res.msg);
                }
            }
        });
    }
    // 提升机日志输出 -----------------------------------------------------------------------
    function getliftOutput() {
        $.ajax({
            url: baseUrl + "/lift/output/lift",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200) {
                    liftOutput(res.data);
                } else if (res.code === 403) {
                    window.location.href = baseUrl + "/login";
                } else {
                    console.log(res.msg);
                }
            }
        })
    }
    // 任务指令下发
    function liftOperator(liftTaskMode) {
        http.post(baseUrl+"/lift/operator/lift", {
            liftNo: $('input[name="liftSelect"]:checked').val(),
            liftTaskMode: liftTaskMode,
            lev: $("#liftLev").val()
        }, function (res) {
            layer.msg(res.msg, {icon: 1});
        });
    }
    // ------------------------------------------------------------------------------------------------
    // 提升机信息表获取  ----- 表一
    function initliftStateTable(row) {
        let line;
        if (row === undefined){
            let one = $('#lift-state-table thead').height();
            let total = $('.lift-state').height();
            let count = total / one;
            count = parseInt(count) - 1;
            liftStateTableBlankRows = count;
            line = count;
        } else {
            line = row;
        }
        let html = "";
        for (let i = 0; i < line; i ++){
            html += " <tr>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "     </tr>\n";
        }
        $('#lift-state-table tbody').after(html);
    }
    // 提升机数据表获取  ----- 表二
    function initliftMsgTable(row) {
        let line;
        if (row === undefined){
            let one = $('#lift-msg-table thead').height();
            let total = $('.lift-msg').height();
            let count = total / one;
            count = parseInt(count) - 1;
            liftMsgTableBlankRows = count;
            line = count;
        } else {
            line = row;
        }
        let html = "";
        for (let i = 0; i < line; i ++){
            html += " <tr>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "     </tr>\n";
        }
        $('#lift-msg-table tbody').after(html);
    }
    // 日志输出框
    function liftOutput(content){
        liftOutputDom.value += content;
        liftOutputDom.scrollTop = liftOutputDom.scrollHeight;
    }
    // 详情操作 -------------------------------------------------------------------------
    var layerDetl;
    $(document).on('dblclick ','#lift-msg-table tr', function () {
        var liftNo = $(this).children("td").eq(0).html();
        if (liftNo !== null && liftNo !== "") {
            layerDetl = layer.open({
                type: 1,
                title: false,
                shadeClose: true,
                offset: 'rt',
                anim: 5,
                shade: [0],
                area: ['340px', '255px'],
                closeBtn: 0,
                content: $("#lift-detl"),
                success: function(layero, index){
                    $.ajax({
                        url: baseUrl+ "/lift/table/lift/msg",
                        headers: {'token': localStorage.getItem('token')},
                        method: 'POST',
                        success: function (res) {
                            if (res.code === 200){
                                var table = res.data;
                                for (var i=1;i<=table.length;i++){
                                    if (liftNo == table[i-1].liftNo) {
                                        $('#liftNo').val(liftNo);
                                        $('#workNo').val(table[i-1].workNo);
                                        $('#pakMk').val(table[i-1].pakMk);
                                    }
                                }
                            } else if (res.code === 403){
                                window.location.href = baseUrl+"/login";
                            }  else {
                                console.log(res.msg);
                    this.liftAllList = allList;
                    if (this.controlLiftInfo != null) {
                        allList.forEach((item) => {
                            if(item.liftNo == this.controlLiftInfo.liftNo) {
                                this.controlLiftInfo = item;
                            }
                        }
                    });
                },
                end: function () {
                    $('#liftNo').val("");
                    $('#workNo').val("");
                    $('#pakMk').val("");
                        });
                    }
                }
            })
            },
            liftOperator(type) {
                let that = this;
                if (this.controlData.liftNo == null || this.controlData.liftNo == "") {
                    this.$message({
                        message: '请输入设备编号',
                        type: 'warning'
                    });
                    return;
                }
                let requestParam = {
                    liftNo: this.controlData.liftNo
                };
                if (type == 'movePallet') {
                    if (this.controlData.sourceStaNo == null || this.controlData.sourceStaNo == "") {
                        this.$message({
                            message: '请输入源站',
                            type: 'warning'
                        });
                        return;
                    }
                    if (this.controlData.staNo == null || this.controlData.staNo == "") {
                        this.$message({
                            message: '请输入目标站',
                            type: 'warning'
                        });
                        return;
                    }
                    requestParam.liftTaskMode = 1;
                    requestParam.sourceStaNo = this.controlData.sourceStaNo;
                    requestParam.staNo = this.controlData.staNo;
                }else if (type == 'switchShuttle') {
                    if (this.controlData.sourceStaNo == null || this.controlData.sourceStaNo == "") {
                        this.$message({
                            message: '请输入源站',
                            type: 'warning'
                        });
                        return;
                    }
                    if (this.controlData.staNo == null || this.controlData.staNo == "") {
                        this.$message({
                            message: '请输入目标站',
                            type: 'warning'
                        });
                        return;
                    }
                    requestParam.liftTaskMode = 2;
                    requestParam.sourceStaNo = this.controlData.sourceStaNo;
                    requestParam.staNo = this.controlData.staNo;
                }else if (type == 'move') {
                    if (this.controlData.sourceStaNo == null || this.controlData.sourceStaNo == "") {
                        this.$message({
                            message: '请输入源站',
                            type: 'warning'
                        });
                        return;
                    }
                    if (this.controlData.staNo == null || this.controlData.staNo == "") {
                        this.$message({
                            message: '请输入目标站',
                            type: 'warning'
                        });
                        return;
                    }
                    requestParam.liftTaskMode = 3;
                    requestParam.sourceStaNo = this.controlData.sourceStaNo;
                    requestParam.staNo = this.controlData.staNo;
                }else if (type == 'reset') {
                    requestParam.liftTaskMode = 9996;
                }
                $.ajax({
                    url: baseUrl + "/lift/operator/lift",
                    headers: {'token': localStorage.getItem('token')},
                    method: 'POST',
                    data: requestParam,
                    success: function (res) {
                        if (res.code === 200) {
                            that.$message({
                                message: res.msg,
                                type: 'success'
                            });
                        } else if (res.code === 403) {
                            window.location.href = baseUrl + "/login";
                        } else {
                            that.$message({
                                message: res.msg,
                                type: 'warning'
                            });
                        }
                    }
                });
            },
            changeControlLiftNo() {
                let liftNo = this.controlData.liftNo;
                if (liftNo == null || liftNo == "") {
                    this.controlLiftInfo = null
                }
                this.liftAllList.forEach((item) => {
                    if (item.liftNo == liftNo) {
                        this.controlLiftInfo = item;
                    }
                });
            },
            websocketConnect() {
                if (this.ws == null) {
                    this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket");
                    this.ws.onopen = this.webSocketOnOpen
                    this.ws.onerror = this.webSocketOnError
                    this.ws.onmessage = this.webSocketOnMessage
                    this.ws.onclose = this.webSocketClose
                }
            },
            webSocketOnOpen(e) {
                console.log("open");
            },
            webSocketOnError(e) {
                this.ws = null;
                console.log(e);
            },
            webSocketOnMessage(e) {
                const result = JSON.parse(e.data);
                if (result.url == "/lift/table/lift/state") {
                    this.setLiftStateInfo(JSON.parse(result.data))
                }
            },
            webSocketClose(e) {
                this.ws = null;
                console.log("close");
            },
            sendWs(message) {
                if (this.ws == null) {
                    return;
                }
                if (this.ws.readyState == WebSocket.OPEN) {
                    this.ws.send(message);
                }
            }
        }
    });
    $(document).on('click ','#cancel', function () {
        $('#liftNo').val("");
        $('#workNo').val("");
        $('#pakMk').val("");
        layer.close(layerDetl);
    })
</script>
</html>