#
whycq
2022-12-03 7073a4ff0761c05664a0fa5ebc1c51b3bb58c268
#
3个文件已修改
1个文件已添加
450 ■■■■ 已修改文件
src/main/webapp/static/css/crn.css 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/rgv.css 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/rgv.html 193 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/crn.css
@@ -14,7 +14,7 @@
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
    height: 25%;
    height: 28%;
}
/* 左 */
@@ -234,7 +234,7 @@
/* -------------------- 第四模块 -------------------- */
.crn-output-board {
    margin-top: 10px;
    height: 20%;
    height: 15%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
src/main/webapp/static/css/rgv.css
New file
@@ -0,0 +1,252 @@
body {
    background-color: #6CA7A8;
}
.button-window {
    float: left;
    width: 100%;
    height: 100%;
    padding: 10px;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0 0 0 .3);
}
/* -------------------- 第一模块 -------------------- */
.log-board {
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
    height: 28%;
}
/* 左 */
.command-log {
    float: left;
    height: 100%;
    width: 20%;
    text-align: center;
}
.command-log h2 {
    padding: 10px;
}
.rgv-command-item {
    padding: 4px 0;
}
.rgv-command-item label {
    font-size: 20px;
    font-weight: bold;
    vertical-align: middle;
}
.rgv-command-item span {
    display: inline-block;
    width: 20px;
    height: 20px;
    background-color: #2e9926;
    border-radius: 5px;
    vertical-align: middle;
}
.rgv-command-item input {
    vertical-align: middle;
    outline: none;
    width: 60%;
}
/* 右 */
.rgv-state {
    float: left;
    height: 100%;
    width: 100%;
    overflow: auto;
}
/* 堆垛机状态表 */
#rgv-state-table {
    font-size: 12px;
    border-collapse: collapse;
    margin: 0 auto;
    text-align: center;
}
#rgv-state-table td, #rgv-state-table th {
    border: 1px solid #cad9ea;
    color: #666;
    height: 25px;
}
#rgv-state-table thead th {
    background-color: #CCE8EB;
    width: 300px;
}
#rgv-state-table tr:nth-child(odd) {
    background: #fff;
}
#rgv-state-table tr:nth-child(even) {
    background: #F5FAFA;
}
/* -------------------- 第二模块 -------------------- */
.rgv-msg {
    /*overflow: auto;*/
    margin-top: 10px;
    height: 23%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
}
/* 堆垛机状态信息表 */
#rgv-msg-table {
    font-size: 12px;
    border-collapse: collapse;
    margin: 0 auto;
    text-align: center;
}
#rgv-msg-table td, #rgv-msg-table th {
    border: 1px solid #f1f1f1;
    color: #666;
    height: 30px;
}
#rgv-msg-table thead th {
    background-color: #fff;
    width: 400px;
}
#rgv-msg-table tr:nth-child(odd) {
    background: #fff;
}
#rgv-msg-table tr:nth-child(even) {
    background: #fff;
}
/* -------------------- 第三模块 -------------------- */
.rgv-operation {
    position: relative;
    margin-top: 10px;
    height: 25%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
}
/* 任务设备选择框 */
.task-select {
    height: 50%;
    overflow: hidden;
    padding: 20px 0 10px 20px;
}
.operator-item {
    display: inline-block;
    height: 100%;
    width: 20%;
    text-align: center;
    position: relative;
    vertical-align: middle;
    padding: 10px 0px 10px 50px;
}
.operator-item .select-title {
    display: inline-block;
    position: absolute;
    top: -11px;
    left: 50%;
    transform: translate(-50%, 0);
    background-color: #fff;
    color: #2e95d3;
    font-size: 12px;
    border: 1px solid #8d8d8d;
    border-radius: 5px;
    padding: 5px;
    z-index: 999;
}
.operator-item .select-container {
    padding: 10px 0;
    height: 100%;
    border: 1px solid #8d8d8d;
    border-radius: 5px;
}
#rgv-select .select-container label {
    display: inline-block;
    padding: 0 20px;
    vertical-align: middle; margin-top:-2px; margin-bottom:1px;
}
.select-container input {
    display: inline-block;
    font-size: 12px;
    vertical-align: middle; margin-top:-2px; margin-bottom:1px;
}
.select-container-item {
    display: inline-block;
    margin: 0px auto;
    padding: 0;
}
.select-container-item input {
    height: 20px;
    border: 1px solid #8D8D8D;
    border-radius: 3px;
    width: 80px;
    outline: none;
}
/* 任务作业选择框 */
.task-operator {
    height: 50%;
    overflow: hidden;
    padding: 0 20px 10px 20px;
}
.task-operator fieldset {
    padding: 15px 20px 5px 50px;
    border-width: 1px;
    border-style: solid;
    height: 100%;
}
.task-operator legend {
    margin-left: 20px;
    padding: 0 10px;
    font-size: 16px;
    font-weight: 300;
}
button.item {
    border: 1px solid #333;
    font-size: 13px;
    padding: 1px 1px 1px 1px;
    width: 100px;
    height: 40px;
    outline: none;
    cursor: pointer;
    color: #333;
    background-color: transparent;
    margin-right: 5px;
    border-radius: 5px;
}
button.item:hover {
    background-color: #333;
    color: #fff;
}
/* 手动操作遮罩 */
.rgv-operation-shade {
    position: absolute;
    height: 100%;
    width: 100%;
    z-index: 1000;
    text-align: center;
    padding: 80px 0;
}
.rgv-operation-shade-span {
    font-size: xx-large;
    font-weight: bold;
    color: red;
}
/* -------------------- 第四模块 -------------------- */
.rgv-output-board {
    margin-top: 10px;
    height: 15%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
}
#rgv-output {
    border-left: none;
    border-right: none;
    border-top: 1px solid #9d9d9d;
    border-bottom: 1px solid #333;
    width: 100%;
    height: 100%;
    overflow: auto;
    resize:none;
    color: #666;
}
src/main/webapp/views/console.html
@@ -556,7 +556,6 @@
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                console.log(res);
                if (res.code === 200) {
                    var sites = res.data;
                    for (var i = 0; i < sites.length; i++) {
src/main/webapp/views/rgv.html
@@ -8,7 +8,7 @@
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
    <link rel="stylesheet" type="text/css" href="../static/css/crn.css">
    <link rel="stylesheet" type="text/css" href="../static/css/rgv.css">
    <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../static/js/common.js"></script>
    <script type="text/javascript" src="../static/js/layer/layer.js"></script>
@@ -51,7 +51,7 @@
            <!-- 执行命令 -->
            <!-- 执行命令 -->
            <div class="command-log">
            <!--<div class="command-log">-->
<!--                <h3>执行中的命令</h3>-->
<!--                <div class="crn-command-item">-->
<!--                    <label>1#</label>-->
@@ -83,9 +83,9 @@
<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
<!--                    <input id="crn5" disabled="disabled">-->
<!--                </div>-->
            </div>
<!--            </div>-->
            <!-- RGV状态位信息 -->
            <div class="crn-state">
            <div class="rgv-state">
                <table id="rgv-state-table">
                    <thead>
                    <tr>
@@ -110,7 +110,7 @@
            </div>
        </div>
        <!-- RGV状态 -->
        <div class="crn-msg">
        <div class="rgv-msg">
            <table id="rgv-msg-table">
                <thead>
                <tr>
@@ -135,11 +135,11 @@
            </table>
        </div>
        <!-- 手动操作 -->
        <div class="crn-operation">
        <div class="rgv-operation">
            <!-- 遮罩层 -->
            <div class="crn-operation-shade">
        <span class="crn-operation-shade-span">
            <div class="rgv-operation-shade">
        <span class="rgv-operation-shade-span">
            WCS 系统运行中,请停止后操作
        </span>
            </div>
@@ -147,11 +147,11 @@
            <!-- 设备任务选择 -->
            <div class="task-select">
                <!-- 堆垛机选择 -->
                <div id="crn-select" class="operator-item" style="width: 55%">
                <div id="rgv-select" class="operator-item" style="width: 55%">
                    <span class="select-title">RGV号</span>
                    <div class="select-container" style="padding: 20px 0;">
                        <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1号RGV</label>
                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2号RGV</label>
                        <label><input type="radio" name="rgvSelect" value="1" checked>&nbsp;1号RGV</label>
                        <label><input type="radio" name="rgvSelect" value="2">&nbsp;2号RGV</label>
                    </div>
                </div>
                <!-- 源站/源库位 选择 -->
@@ -223,37 +223,37 @@
        </div>
        <!-- 堆垛机日志输出 -->
        <div class="crn-output-board">
            <textarea id="crn-output"></textarea>
        <div class="rgv-output-board">
            <textarea id="rgv-output"></textarea>
        </div>
    </div>
</div>
</body>
<script>
    // 空白行数
    var crnStateTableBlankRows = 0;
    var crnMsgTableBlankRows = 0;
    var rgvStateTableBlankRows = 0;
    var rgvMsgTableBlankRows = 0;
    // 实际行数
    var crnStateTableFullRows = 0;
    var crnMsgTableFullRows = 0;
    var rgvStateTableFullRows = 0;
    var rgvMsgTableFullRows = 0;
    // 初始化
    var crnOutputDom = document.getElementById("crn-output");
    var rgvOutputDom = document.getElementById("rgv-output");
    $(document).ready(function() {
        getCommandLog();
        initCrnStateTable();
        getCrnStateInfo();
        initCrnMsgTable();
        getCrnMsgInfo();
        initRgvStateTable();
        getRgvStateInfo();
        initRgvMsgTable();
        getRgvMsgInfo();
        operatorBlockShow();
    });
    // 数据更新
    setInterval(function () {
        getCrnStateInfo();
        getCrnMsgInfo();
        getRgvStateInfo();
        getRgvMsgInfo();
        getCommandLog();
    },1000);
    setInterval(function () {
        getCrnOutput();
        getRgvOutput();
        operatorBlockShow();
        initDemo();
    },500);
@@ -261,27 +261,27 @@
    // 判断手动操作模块是否可用
    function operatorBlockShow() {
        if (parent.systemRunning) {
            $('.crn-operation').css("opacity", "0.5");
            $('.crn-operation-shade').show();
            $('.crn-operation-shade-span').show();
            $('.rgv-operation').css("opacity", "0.5");
            $('.rgv-operation-shade').show();
            $('.rgv-operation-shade-span').show();
        }  else {
            $('.crn-operation').css("opacity", "1");
            $('.crn-operation-shade').hide();
            $('.crn-operation-shade-span').hide();
            $('.rgv-operation').css("opacity", "1");
            $('.rgv-operation-shade').hide();
            $('.rgv-operation-shade-span').hide();
        }
    }
    // 获取堆垛机执行中的命令
    function getCommandLog() {
        $.ajax({
            url: baseUrl + "/crn/command/ongoing",
            url: baseUrl + "/rgv/command/ongoing",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200) {
                    var commands = res.data;
                    for (var i=0; i<commands.length;i++){
                        $("#crn"+commands[i].crnNo).val(commands[i].command);
                        $("#rgv"+commands[i].rgvNo).val(commands[i].command);
                    }
                } else if (res.code === 403) {
                    window.location.href = baseUrl + "/login";
@@ -293,32 +293,35 @@
    }
    // 堆垛机信息表获取 ---- 表一
    function getCrnStateInfo() {
    function getRgvStateInfo() {
        var tableEl = $('#rgv-state-table');
        $.ajax({
            url: baseUrl+ "/crn/table/crn/state",
            url: baseUrl+ "/rgv/table/rgv/state",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                console.log(res)
                if (res.code === 200){
                    var table = res.data;
                    if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) {
                        initCrnStateTable(table.length-crnStateTableBlankRows);
                        crnStateTableFullRows = table.length;
                    if (table.length > rgvStateTableBlankRows && table.length !== rgvStateTableFullRows) {
                        initRgvStateTable(table.length-rgvStateTableBlankRows);
                        rgvStateTableFullRows = table.length;
                    }
                    for (var i=1;i<=table.length;i++){
                        var tr = tableEl.find("tr").eq(i);
                        setVal(tr.children("td").eq(0), table[i-1].crnNo);
                        setVal(tr.children("td").eq(0), table[i-1].rgvNo);
                        setVal(tr.children("td").eq(1), table[i-1].statusType);
                        setVal(tr.children("td").eq(2), table[i-1].status);
                        setVal(tr.children("td").eq(3), table[i-1].loading);
                        setVal(tr.children("td").eq(4), table[i-1].bay);
                        setVal(tr.children("td").eq(5), table[i-1].lev);
                        setVal(tr.children("td").eq(6), table[i-1].forkOffset);
                        setVal(tr.children("td").eq(7), table[i-1].liftPos);
                        setVal(tr.children("td").eq(8), table[i-1].walkPos);
                        setVal(tr.children("td").eq(9), table[i-1].warnCode);
                        setVal(tr.children("td").eq(10), table[i-1].alarm);
                        setVal(tr.children("td").eq(3), table[i-1].workNo1);
                        setVal(tr.children("td").eq(4), table[i-1].status1);
                        setVal(tr.children("td").eq(5), table[i-1].loading1);
                        setVal(tr.children("td").eq(6), table[i-1].rgvPos);
                        setVal(tr.children("td").eq(7), table[i-1].walkPos);
                        setVal(tr.children("td").eq(8), table[i-1].workNo2);
                        setVal(tr.children("td").eq(9), table[i-1].status2);
                        setVal(tr.children("td").eq(10), table[i-1].loading2);
                        setVal(tr.children("td").eq(11), table[i-1].warnCode);
                        setVal(tr.children("td").eq(12), table[i-1].alarm);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
@@ -330,22 +333,22 @@
    }
    // 堆垛机数据表获取 ---- 表二
    function getCrnMsgInfo() {
    function getRgvMsgInfo() {
        var tableEl = $('#rgv-msg-table');
        $.ajax({
            url: baseUrl+ "/crn/table/crn/msg",
            url: baseUrl+ "/rgv/table/rgv/msg",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200){
                    var table = res.data;
                    if (table.length > crnStateTableBlankRows && table.length !== crnMsgTableFullRows) {
                        initCrnStateTable(table.length-crnStateTableBlankRows);
                        crnMsgTableFullRows = table.length;
                    if (table.length > rgvStateTableBlankRows && table.length !== rgvMsgTableFullRows) {
                        initRgvStateTable(table.length-rgvStateTableBlankRows);
                        rgvMsgTableFullRows = table.length;
                    }
                    for (var i=1;i<=table.length;i++){
                        var tr = tableEl.find("tr").eq(i);
                        setVal(tr.children("td").eq(0), table[i-1].crnNo);
                        setVal(tr.children("td").eq(0), table[i-1].rgvNo);
                        setVal(tr.children("td").eq(1), table[i-1].workNo);
                        setVal(tr.children("td").eq(2), table[i-1].status);
                        setVal(tr.children("td").eq(3), table[i-1].sourceStaNo);
@@ -372,7 +375,7 @@
    // 堆垛机手动操作区 -----------------------------------------------------------------------
    function getReqParam() {
        var crnNo = $('input[name="crnSelect"]:checked').val();
        var rgvNo = $('input[name="rgvSelect"]:checked').val();
        var sourceStaNo = $('#sourceStaNo').val();
        var sourceRow = $('#sourceRow').val();
        var sourceBay = $('#sourceBay').val();
@@ -382,7 +385,7 @@
        var bay = $('#bay').val();
        var lev = $('#lev').val();
        return {
            crnNo: crnNo,
            rgvNo: rgvNo,
            sourceStaNo: sourceStaNo,
            sourceRow: sourceRow,
            sourceBay: sourceBay,
@@ -396,98 +399,98 @@
    // 入库
    function put() {
        http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/put", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 出库
    function take() {
        http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/take", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 库位转移
    function stockMove() {
        http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/stockMove", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 站到站
    function siteMove() {
        http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/siteMove", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 坐标移动
    function coorMove() {
        http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/coorMove", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 回原点
    function bacOrigin() {
        http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/bacOrigin", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 回原点
    function reverseOrigin() {
        http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/reverseOrigin", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 任务完成
    function taskComplete() {
        http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/taskComplete", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 暂停
    function pause() {
        http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/pause", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 启动
    function boot() {
        http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/boot", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 清除命令
    function clearCommand() {
        http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/clearCommand", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 手动复位
    function handleReset() {
        http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) {
        http.post(baseUrl+"/rgv/operator/handleReset", getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }
    // 输送设备日志输出 -----------------------------------------------------------------------
    function getCrnOutput() {
    function getRgvOutput() {
        $.ajax({
            url: baseUrl + "/crn/output/site",
            url: baseUrl + "/rgv/output/site",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                console.log(res)
                if (res.code === 200) {
                    crnOutput(res.data);
                    rgvOutput(res.data);
                } else if (res.code === 403) {
                    window.location.href = baseUrl + "/login";
                } else {
@@ -500,14 +503,14 @@
    // ------------------------------------------------------------------------------------------------
    // 堆垛机信息表获取  ----- 表一
    function initCrnStateTable(row) {
    function initRgvStateTable(row) {
        var line;
        if (row === undefined){
            var one = $('#rgv-state-table thead').height();
            var total = $('.crn-state').height();
            var total = $('.rgv-state').height();
            var count = total / one;
            count = parseInt(count) - 1;
            crnStateTableBlankRows = count;
            rgvStateTableBlankRows = count;
            line = count;
        } else {
            line = row;
@@ -526,20 +529,22 @@
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "       <td></td>\n" +
                "     </tr>\n";
        }
        $('#rgv-state-table tbody').after(html);
    }
    // 堆垛机数据表获取  ----- 表二
    function initCrnMsgTable(row) {
    function initRgvMsgTable(row) {
        var line;
        if (row === undefined){
            var one = $('#rgv-msg-table thead').height();
            var total = $('.crn-msg').height();
            var total = $('.rgv-msg').height();
            var count = total / one;
            count = parseInt(count) - 1;
            crnMsgTableBlankRows = count;
            rgvMsgTableBlankRows = count;
            line = count;
        } else {
            line = row;
@@ -567,23 +572,23 @@
    }
    // 日志输出框
    function crnOutput(content){
        crnOutputDom.value += content;
        crnOutputDom.scrollTop = crnOutputDom.scrollHeight;
    function rgvOutput(content){
        rgvOutputDom.value += content;
        rgvOutputDom.scrollTop = rgvOutputDom.scrollHeight;
    }
    var crnDemoData;
    var rgvDemoData;
    function initDemo() {
        $.ajax({
            url: baseUrl+"/crn/demo/status",
            url: baseUrl+"/rgv/demo/status",
            async: false,
            method: 'GET',
            success: function (res) {
                if (res.code === 200) {
                    crnDemoData = res.data;
                    crnDemoData.forEach(function (e) {
                        $("#demoBtn-"+e.crnNo).html(e.demo?'停止':'演示');
                    rgvDemoData = res.data;
                    rgvDemoData.forEach(function (e) {
                        $("#demoBtn-"+e.rgvNo).html(e.demo?'停止':'演示');
                    })
                } else if (res.code === 403){
                    parent.location.href = baseUrl+"/login";
@@ -595,32 +600,32 @@
    }
    function demoSwitch(el) {
        var crnId = el.split("-")[1];
        var rgvId = el.split("-")[1];
        var opt;
        if (crnDemoData == null) {
        if (rgvDemoData == null) {
            initDemo();
        }
        for (var i = 0; i<crnDemoData.length; i++) {
            if (Number(crnDemoData[i].crnNo) === Number(crnId)) {
                opt = !crnDemoData[i].demo;
        for (var i = 0; i<rgvDemoData.length; i++) {
            if (Number(rgvDemoData[i].rgvNo) === Number(rgvId)) {
                opt = !rgvDemoData[i].demo;
            }
        }
        layer.confirm(crnId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){
            doDemo(crnId, 'root', opt); // 停止wcs系统
        layer.confirm(rgvId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){
            doDemo(rgvId, 'root', opt); // 停止wcs系统
        });
    }
    function doDemo(crnId, password, opt) {
    function doDemo(rgvId, password, opt) {
        // 加载tips
        var index = layer.load(1, {
            shade: [0.1,'#fff']
        });
        $.ajax({
            url: baseUrl+ "/crn/demo/switch",
            url: baseUrl+ "/rgv/demo/switch",
            headers: {'token': localStorage.getItem('token')},
            // async: false,
            data: {
                crnId: Number(crnId),
                rgvId: Number(rgvId),
                password: password,
                opt: opt
            },