From cb7d148bc6c0e81b4f413b6c3ff76102cbc0648a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 七月 2023 14:31:43 +0800
Subject: [PATCH] 堆垛机设备

---
 src/main/webapp/views/realtimeWatch/crn.html            |  601 ++------------------
 src/main/webapp/views/realtimeWatch/crn2.html           |  535 +++++++++++++++++++
 src/main/webapp/static/wms/js/realtimeWatch/crn.js      |  348 ++++++++++++
 src/main/java/com/zy/asrs/controller/CrnController.java |   60 ++
 src/main/java/com/zy/asrs/domain/vo/CrnListVo.java      |  136 ++++
 5 files changed, 1,161 insertions(+), 519 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index 86949ae..17e93cd 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -11,6 +11,7 @@
 import com.zy.asrs.domain.param.CrnDemoParam;
 import com.zy.asrs.domain.param.CrnOperatorParam;
 import com.zy.asrs.domain.vo.CommandLogVo;
+import com.zy.asrs.domain.vo.CrnListVo;
 import com.zy.asrs.domain.vo.CrnMsgTableVo;
 import com.zy.asrs.domain.vo.CrnStateTableVo;
 import com.zy.asrs.entity.*;
@@ -247,6 +248,65 @@
         return R.ok().add(vo);
     }
 
+    @GetMapping("/crn/list/auth")
+    @ManagerAuth(memo = "鍫嗗灈鏈烘暟鎹〃")
+    public R crnList(){
+        List<CrnListVo> list = new ArrayList<>();
+        List<BasCrnp> crnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().orderBy("crn_no"));
+        for (BasCrnp basCrnp : crnps) {
+            // 琛ㄦ牸琛�
+            CrnListVo vo = new CrnListVo();
+            vo.setCrnNo(basCrnp.getCrnNo());   //  鍫嗗灈鏈哄彿
+            list.add(vo);
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+            if (crnThread == null) {
+                continue;
+            }
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+
+            vo.setWorkNo(crnProtocol.getTaskNo());  //  浠诲姟鍙�
+            if (crnProtocol.getTaskNo()>0) {
+                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
+                if (wrkMast != null) {
+                    vo.setDeviceStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  妯″紡鐘舵��
+                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  婧愮珯
+                    vo.setStaNo(wrkMast.getStaNo$());   //  鐩爣绔�
+                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  婧愬簱浣�
+                    vo.setLocNo(wrkMast.getLocNo());    //  鐩爣搴撲綅
+                }
+            } else {
+                vo.setDeviceStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  妯″紡鐘舵��
+            }
+            vo.setXspeed(crnProtocol.getXSpeed());  //  璧拌閫熷害锛坢/min)
+            vo.setYspeed(crnProtocol.getYSpeed());  //  鍗囬檷閫熷害锛坢/min)
+            vo.setZspeed(crnProtocol.getZSpeed());  //  鍙夌墮閫熷害锛坢/min)
+            vo.setXdistance(crnProtocol.getXDistance());  //  璧拌璺濈(Km)
+            vo.setYdistance(crnProtocol.getYDistance());  //  鍗囬檷璺濈(Km)
+            vo.setXduration(crnProtocol.getXDuration());    //  璧拌鏃堕暱(H)
+            vo.setYduration(crnProtocol.getYDuration());    //  鍗囬檷鏃堕暱(H)
+
+            vo.setStatusType(crnProtocol.modeType.desc);   //  妯″紡鐘舵��
+            vo.setWrkStatus(crnProtocol.getStatusType().desc);     //  浠诲姟鐘舵��
+            vo.setLoading((crnProtocol.getLoaded() != null && crnProtocol.getLoaded() == 1) ? "鏈夌墿" : "鏃犵墿");  //  鏈夌墿
+            vo.setBay(crnProtocol.getBay());    //  鍒�
+            vo.setLev(crnProtocol.getLevel());  //  灞�
+
+            vo.setForkOffset(crnProtocol.getForkPosType().desc);    // 璐у弶浣嶇疆
+            vo.setLiftPos(crnProtocol.getLiftPosType().desc);
+            vo.setWalkPos(crnProtocol.getWalkPos()==1?"涓嶅湪瀹氫綅":"鍦ㄥ畾浣�");
+            vo.setWarnCode(String.valueOf(crnProtocol.getAlarm1()));
+            if (crnProtocol.getAlarm1() > 0) {
+                BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm1());
+                vo.setAlarm(crnError==null?"鏈煡寮傚父":crnError.getErrName());
+            }
+        }
+        return R.ok().add(list);
+    }
+
     @PostMapping("/crn/output/site")
     @ManagerAuth(memo = "鍫嗗灈鏈烘姤鏂囨棩蹇楄緭鍑�")
     public R crnOutput(){
diff --git a/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java b/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
new file mode 100644
index 0000000..efbff09
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
@@ -0,0 +1,136 @@
+package com.zy.asrs.domain.vo;
+
+import com.zy.asrs.utils.Utils;
+import lombok.Data;
+
+@Data
+public class CrnListVo {
+
+    // 鍫嗗灈鏈哄彿
+    private Integer crnNo;
+
+    // 妯″紡
+    private String statusType = "-";
+
+    // 鏈夌墿
+    private String loading = "-";
+
+    // 鍒�
+    private Short bay;
+
+    // 灞�
+    private Short lev;
+
+    // 璧拌鍘熺偣
+    private String xOrigin = "-";
+
+    // 鍗囬檷鍘熺偣
+    private String yOrigin = "-";
+
+    // 璐у弶浣嶇疆
+    private String forkOffset = "-";
+
+    // 杞借揣鍙颁綅缃�
+    private String liftPos = "-";
+
+    // 璧拌瀹氫綅
+    private String walkPos = "-";
+
+    // 鎬ュ仠
+    private String stop = "-";
+
+    // 鍒楀潗鏍�
+    private String bayCoor = "-";
+
+    // 灞傚潗鏍�
+    private String levCoor = "-";
+
+    // 瀹屾垚
+    private String complete = "-";
+
+    // 浠诲姟鍙�
+    private Short workNo = 0;
+
+    // 浠诲姟鐘舵��
+    private String wrkStatus = "-";
+
+    // 寮傚父鐮�
+    private String warnCode = "-";
+
+    // 鍨傜洿鏁呴殰鐮�
+    private String alarm = "-";
+
+    // 婧愮珯
+    private String sourceStaNo = "-";
+
+    // 鐩爣绔�
+    private String staNo = "-";
+
+    // 婧愬簱浣�
+    private String sourceLocNo = "-";
+
+    // 鐩爣搴撲綅
+    private String locNo = "-";
+
+    // 寮傚父
+    private String error = "";
+
+    // 鍘熺偣
+    private String origin = "";
+
+    // 鍛戒护
+    private String command = "";
+
+    // 璧拌閫熷害锛坢/min)
+    private Float xspeed = 0.0F;
+
+    // 鍗囬檷閫熷害锛坢/min)
+    private Float yspeed = 0.0F;
+
+    // 鍙夌墮閫熷害锛坢/min)
+    private Float zspeed = 0.0F;
+
+    // 璧拌璺濈(Km)
+    private Float xdistance = 0.0F;
+
+    // 鍗囬檷璺濈(Km)
+    private Float ydistance = 0.0F;
+
+    // 璧拌鏃堕暱(H)
+    private Float xduration = 0.0F;
+
+    // 鍗囬檷鏃堕暱(H)
+    private Float yduration = 0.0F;
+
+    // 璁惧鐘舵��
+    private String deviceStatus = "-";
+
+    public void setXspeed(Float xspeed) {
+        this.xspeed = Utils.scale(xspeed);
+    }
+
+    public void setYspeed(Float yspeed) {
+        this.yspeed = Utils.scale(yspeed);
+    }
+
+    public void setZspeed(Float zspeed) {
+        this.zspeed = Utils.scale(zspeed);
+    }
+
+    public void setXdistance(Float xdistance) {
+        this.xdistance = Utils.scale(xdistance);
+    }
+
+    public void setYdistance(Float ydistance) {
+        this.ydistance = Utils.scale(ydistance);
+    }
+
+    public void setXduration(Float xduration) {
+        this.xduration = Utils.scale(xduration);
+    }
+
+    public void setYduration(Float yduration) {
+        this.yduration = Utils.scale(yduration);
+    }
+
+}
diff --git a/src/main/webapp/static/wms/js/realtimeWatch/crn.js b/src/main/webapp/static/wms/js/realtimeWatch/crn.js
new file mode 100644
index 0000000..5662f59
--- /dev/null
+++ b/src/main/webapp/static/wms/js/realtimeWatch/crn.js
@@ -0,0 +1,348 @@
+var pageCurr;
+var tableData;
+// 瀹氫箟涓�涓彉閲忔潵淇濆瓨婊氬姩鏉$殑浣嶇疆
+var scrollLeft = 0;
+layui.config({
+    base: baseUrl + "/static/wms/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#crn',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/crn/list/auth',
+        page: false,
+        limit: 500,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 100,
+        height: 'full-120',
+        cols: [[
+             {field: 'crnNo', align: 'center',title: '鍫嗗灈鏈�'}
+            ,{field: 'workNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'statusType', align: 'center',title: '妯″紡'}
+            ,{field: 'wrkStatus', align: 'center',title: '浠诲姟鐘舵��',width: 120}
+            ,{field: 'deviceStatus', align: 'center',title: '璁惧鐘舵��'}
+            ,{field: 'loading', align: 'center',title: '鏈夌墿'}
+            ,{field: 'bay', align: 'center',title: '鍒�'}
+            ,{field: 'lev', align: 'center',title: '灞�'}
+            ,{field: 'warnCode', align: 'center',title: '鏁呴殰浠g爜'}
+            ,{field: 'alarm', align: 'center',title: '鏁呴殰鎻忚堪'}
+            ,{field: 'sourceStaNo', align: 'center',title: '婧愮珯'}
+            ,{field: 'staNo', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'forkOffset', align: 'center',title: '璐у弶瀹氫綅'}
+            ,{field: 'liftPos', align: 'center',title: '杞借揣鍙板畾浣�'}
+            ,{field: 'walkPos', align: 'center',title: '璧拌鍦ㄥ畾浣�'}
+            ,{field: 'xspeed', align: 'center',title: '璧拌閫熷害锛坢/min)'}
+            ,{field: 'yspeed', align: 'center',title: '鍗囬檷閫熷害锛坢/min)'}
+            ,{field: 'zspeed', align: 'center',title: '鍙夌墮閫熷害锛坢/min)'}
+            ,{field: 'xdistance', align: 'center',title: '璧拌璺濈(Km)'}
+            ,{field: 'ydistance', align: 'center',title: '鍗囬檷璺濈(Km)'}
+            ,{field: 'xduration', align: 'center',title: '璧拌鏃堕暱(H)'}
+            ,{field: 'yduration', align: 'center',title: '鍗囬檷鏃堕暱(H)'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.count,
+                'data': res.data
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            tableData = table.cache.crn;
+
+            $(".layui-table-tool").hide()
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(crn)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(crn)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'apiConfig': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/apiConfig/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(crn)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鎺ュ彛閰嶇疆',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/apiConfig/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/apiConfig/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+    setInterval(() => {
+        // 鑾峰彇褰撳墠婊氬姩鏉′綅缃�
+        scrollLeft = $("#crn").next('.layui-table-view').find('.layui-table-body').scrollLeft();
+        $.ajax({
+            url: baseUrl+"/crn/list/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType:'json',
+            contentType:'application/json;charset=UTF-8',
+            method: 'GET',
+            success: function (res) {
+                console.log(res)
+                table.render({
+                    elem: '#crn',
+                    headers: {token: localStorage.getItem('token')},
+                    data: res.data,
+                    page: false,
+                    limit: 500,
+                    limits: [15, 30, 50, 100, 200, 500],
+                    toolbar: '#toolbar',
+                    cellMinWidth: 100,
+                    height: 'full-120',
+                    cols: [[
+                        {field: 'crnNo', align: 'center',title: '鍫嗗灈鏈�'}
+                        ,{field: 'workNo', align: 'center',title: '宸ヤ綔鍙�'}
+                        ,{field: 'statusType', align: 'center',title: '妯″紡'}
+                        ,{field: 'wrkStatus', align: 'center',title: '浠诲姟鐘舵��',width: 120}
+                        ,{field: 'deviceStatus', align: 'center',title: '璁惧鐘舵��'}
+                        ,{field: 'loading', align: 'center',title: '鏈夌墿'}
+                        ,{field: 'bay', align: 'center',title: '鍒�'}
+                        ,{field: 'lev', align: 'center',title: '灞�'}
+                        ,{field: 'warnCode', align: 'center',title: '鏁呴殰浠g爜'}
+                        ,{field: 'alarm', align: 'center',title: '鏁呴殰鎻忚堪'}
+                        ,{field: 'sourceStaNo', align: 'center',title: '婧愮珯'}
+                        ,{field: 'staNo', align: 'center',title: '鐩爣绔�'}
+                        ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'}
+                        ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'}
+                        ,{field: 'forkOffset', align: 'center',title: '璐у弶瀹氫綅'}
+                        ,{field: 'liftPos', align: 'center',title: '杞借揣鍙板畾浣�'}
+                        ,{field: 'walkPos', align: 'center',title: '璧拌鍦ㄥ畾浣�'}
+                        ,{field: 'xspeed', align: 'center',title: '璧拌閫熷害锛坢/min)'}
+                        ,{field: 'yspeed', align: 'center',title: '鍗囬檷閫熷害锛坢/min)'}
+                        ,{field: 'zspeed', align: 'center',title: '鍙夌墮閫熷害锛坢/min)'}
+                        ,{field: 'xdistance', align: 'center',title: '璧拌璺濈(Km)'}
+                        ,{field: 'ydistance', align: 'center',title: '鍗囬檷璺濈(Km)'}
+                        ,{field: 'xduration', align: 'center',title: '璧拌鏃堕暱(H)'}
+                        ,{field: 'yduration', align: 'center',title: '鍗囬檷鏃堕暱(H)'}
+
+                        // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+                    ]],
+                    request: {
+                        pageName: 'curr',
+                        pageSize: 'limit'
+                    },
+                    parseData: function (res) {
+                        return {
+                            'code': res.code,
+                            'msg': res.msg,
+                            'count': res.count,
+                            'data': res.data
+                        }
+                    },
+                    response: {
+                        statusCode: 200
+                    },
+                    done: function(res, curr, count) {
+                        if (res.code === 403) {
+                            top.location.href = baseUrl+"/";
+                        }
+                        pageCurr=curr;
+                        limit();
+                        tableData = table.cache.crn;
+                        // 鎭㈠婊氬姩鏉′綅缃�
+                        $("#crn").next('.layui-table-view').find('.layui-table-body').scrollLeft(scrollLeft);
+
+                        $(".layui-table-tool").hide()
+                    }
+                });
+            }
+        });
+    }, 1000);
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+    });
+}
diff --git a/src/main/webapp/views/realtimeWatch/crn.html b/src/main/webapp/views/realtimeWatch/crn.html
index 94c3033..88192b4 100644
--- a/src/main/webapp/views/realtimeWatch/crn.html
+++ b/src/main/webapp/views/realtimeWatch/crn.html
@@ -1,535 +1,98 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta charset="UTF-8">
+    <meta charset="utf-8">
     <title>鍫嗗灈鏈虹洃鎺х鐞�</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <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/wcs/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../../static/wcs/css/common.css">
-    <link rel="stylesheet" type="text/css" href="../../static/wcs/css/crn.css">
-    <script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
-    <script type="text/javascript" src="../../static/wcs/js/common.js"></script>
-    <script type="text/javascript" src="../../static/wcs/js/layer/layer.js"></script>
-    <style>
-        .demoBtn {
-            vertical-align: middle;
-            width: 20%;
-            height: 25px;
-            left: 0;
-            top: 0;
-            text-shadow: inherit;
-            font-size: 15px;
-            margin-left: 5px;
-            margin-right: 5px;
-            display: inline-block;
-            background-color: #FF5722;
-            border: none;
-            color: #FFF;
-            box-shadow: 1px 1px 5px #B6B6B6;
-            border-radius: 3px;
-            cursor: pointer;
-        }
-
-        .demoBtn:hover {
-            opacity: 0.8
-        }
-        .demoBtn:focus {
-            outline: 0;
-        }
-    </style>
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/wms/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/wms/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/wms/css/cool.css" media="all">
 </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">
-                <h3>鎵ц涓殑鍛戒护</h3>
-                <div class="crn-command-item">
-                    <label>1#</label>
-                    <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
-                    <!--            <span>&nbsp;</span>-->
-                    <input id="crn1" disabled="disabled">
-                </div>
-                <div class="crn-command-item">
-                    <label>2#</label>
-                    <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
-                    <!--            <span>&nbsp;</span>-->
-                    <input id="crn2" disabled="disabled">
-                </div>
-            </div>
-            <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
-            <div class="crn-state">
-                <table id="crn-state-table">
-                    <thead>
-                    <tr>
-                        <th>鍫嗗灈鏈�</th>
-                        <th>妯″紡</th>
-                        <th>鐘舵��</th>
-                        <th>鏈夌墿</th>
-                        <th>鍒�</th>
-                        <th>灞�</th>
-                        <th>璐у弶瀹氫綅</th>
-                        <th>杞借揣鍙板畾浣�</th>
-                        <th>璧拌鍦ㄥ畾浣�</th>
-                        <th>鏁呴殰浠g爜</th>
-                        <th>鏁呴殰鎻忚堪</th>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-        <!-- 鍫嗗灈鏈虹姸鎬� -->
-        <div class="crn-msg">
-            <table id="crn-msg-table">
-                <thead>
-                <tr>
-                    <th>鍫嗗灈鏈�</th>
-                    <th>宸ヤ綔鍙�</th>
-                    <th>鐘舵��</th>
-                    <th>婧愮珯</th>
-                    <th>鐩爣绔�</th>
-                    <th>婧愬簱浣�</th>
-                    <th>鐩爣搴撲綅</th>
-                    <th>璧拌閫熷害锛坢/min)</th>
-                    <th>鍗囬檷閫熷害锛坢/min)</th>
-                    <th>鍙夌墮閫熷害锛坢/min)</th>
-                    <th>璧拌璺濈(Km)</th>
-                    <th>鍗囬檷璺濈(Km)</th>
-                    <th>璧拌鏃堕暱(H)</th>
-                    <th>鍗囬檷鏃堕暱(H)</th>
-                </tr>
-                </thead>
-                <tbody>
-                </tbody>
-            </table>
-        </div>
-        <!-- 鍫嗗灈鏈烘棩蹇楄緭鍑� -->
-        <div class="crn-output-board">
-            <textarea id="crn-output"></textarea>
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+<!--            <div class="layui-form toolbar" id="search-box">-->
+<!--                <div class="layui-form-item">-->
+<!--                    <div class="layui-inline">-->
+<!--                        <div class="layui-input-inline">-->
+<!--                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-inline">&emsp;-->
+<!--                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>-->
+<!--                            <i class="layui-icon">&#xe615;</i>鍒锋柊-->
+<!--                        </button>-->
+<!--                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>-->
+<!--                            <i class="layui-icon">&#xe666;</i>閲嶇疆-->
+<!--                        </button>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </div>-->
+            <table class="layui-hide" id="crn" lay-filter="crn"></table>
         </div>
     </div>
 </div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData" style="visibility: hidden">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData" style="visibility: hidden">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right;visibility: hidden">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/wms/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/wms/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/realtimeWatch/crn.js" charset="utf-8"></script>
 </body>
-<script>
-    // 绌虹櫧琛屾暟
-    var crnStateTableBlankRows = 0;
-    var crnMsgTableBlankRows = 0;
-    // 瀹為檯琛屾暟
-    var crnStateTableFullRows = 0;
-    var crnMsgTableFullRows = 0;
-    // 鍒濆鍖�
-    var crnOutputDom = document.getElementById("crn-output");
-    $(document).ready(function() {
-        getCommandLog();
-        initCrnStateTable();
-        getCrnStateInfo();
-        initCrnMsgTable();
-        getCrnMsgInfo();
-        operatorBlockShow();
-    });
-    // 鏁版嵁鏇存柊
-    setInterval(function () {
-        getCrnStateInfo();
-        getCrnMsgInfo();
-        getCommandLog();
-    },1000);
-    setInterval(function () {
-        getCrnOutput();
-        operatorBlockShow();
-        initDemo();
-    },500);
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">api鍦板潃: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="url" placeholder="璇疯緭鍏pi鍦板潃">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="0">姝e父</option>
+                            <option value="1">绂佺敤</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
 
-    // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
-    function operatorBlockShow() {
-        if (parent.systemRunning) {
-            $('.crn-operation').css("opacity", "0.5");
-            $('.crn-operation-shade').show();
-            $('.crn-operation-shade-span').show();
-        }  else {
-            $('.crn-operation').css("opacity", "1");
-            $('.crn-operation-shade').hide();
-            $('.crn-operation-shade-span').hide();
-        }
-    }
-
-    // 鑾峰彇鍫嗗灈鏈烘墽琛屼腑鐨勫懡浠�
-    function getCommandLog() {
-        $.ajax({
-            url: baseUrl + "/crn/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);
-                    }
-                } else if (res.code === 403) {
-                    window.location.href = baseUrl + "/login";
-                } else {
-                    console.log(res.msg);
-                }
-            }
-        })
-    }
-
-    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴
-    function getCrnStateInfo() {
-        var tableEl = $('#crn-state-table');
-        $.ajax({
-            url: baseUrl+ "/crn/table/crn/state",
-            headers: {'token': localStorage.getItem('token')},
-            method: 'POST',
-            success: function (res) {
-                if (res.code === 200){
-                    var table = res.data;
-                    if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) {
-                        initCrnStateTable(table.length-crnStateTableBlankRows);
-                        crnStateTableFullRows = 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(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);
-                    }
-                } else if (res.code === 403){
-                    window.location.href = baseUrl+"/login";
-                }  else {
-                    console.log(res.msg);
-                }
-            }
-        });
-    }
-
-    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩
-    function getCrnMsgInfo() {
-        var tableEl = $('#crn-msg-table');
-        $.ajax({
-            url: baseUrl+ "/crn/table/crn/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;
-                    }
-                    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(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);
-                        setVal(tr.children("td").eq(4), table[i-1].staNo);
-                        setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
-                        setVal(tr.children("td").eq(6), table[i-1].locNo);
-                        setVal(tr.children("td").eq(7), table[i-1].xspeed);
-                        setVal(tr.children("td").eq(8), table[i-1].yspeed);
-                        setVal(tr.children("td").eq(9), table[i-1].zspeed);
-                        setVal(tr.children("td").eq(10), table[i-1].xdistance);
-                        setVal(tr.children("td").eq(11), table[i-1].ydistance);
-                        setVal(tr.children("td").eq(12), table[i-1].xduration);
-                        setVal(tr.children("td").eq(13), table[i-1].yduration);
-                    }
-                } else if (res.code === 403){
-                    window.location.href = baseUrl+"/login";
-                }  else {
-                    console.log(res.msg);
-                }
-            }
-        });
-    }
-
-    // 鍫嗗灈鏈烘墜鍔ㄦ搷浣滃尯 -----------------------------------------------------------------------
-
-    function getReqParam() {
-        var crnNo = $('input[name="crnSelect"]:checked').val();
-        var sourceStaNo = $('#sourceStaNo').val();
-        var sourceRow = $('#sourceRow').val();
-        var sourceBay = $('#sourceBay').val();
-        var sourceLev = $('#sourceLev').val();
-        var staNo = $('#staNo').val();
-        var row = $('#row').val();
-        var bay = $('#bay').val();
-        var lev = $('#lev').val();
-        return {
-            crnNo: crnNo,
-            sourceStaNo: sourceStaNo,
-            sourceRow: sourceRow,
-            sourceBay: sourceBay,
-            sourceLev: sourceLev,
-            staNo: staNo,
-            row: row,
-            bay: bay,
-            lev: lev
-        };
-    }
-
-    // 鍏ュ簱
-    function put() {
-        http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鍑哄簱
-    function take() {
-        http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 搴撲綅杞Щ
-    function stockMove() {
-        http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 绔欏埌绔�
-    function siteMove() {
-        http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鍧愭爣绉诲姩
-    function coorMove() {
-        http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鍥炲師鐐�
-    function bacOrigin() {
-        http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鍥炲師鐐�
-    function reverseOrigin() {
-        http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 浠诲姟瀹屾垚
-    function taskComplete() {
-        http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鏆傚仠
-    function pause() {
-        http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鍚姩
-    function boot() {
-        http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 娓呴櫎鍛戒护
-    function clearCommand() {
-        http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 鎵嬪姩澶嶄綅
-    function handleReset() {
-        http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) {
-            layer.msg(res.msg);
-        });
-    }
-
-    // 杈撻�佽澶囨棩蹇楄緭鍑� -----------------------------------------------------------------------
-    function getCrnOutput() {
-        $.ajax({
-            url: baseUrl + "/crn/output/site",
-            headers: {'token': localStorage.getItem('token')},
-            method: 'POST',
-            success: function (res) {
-                console.log(res)
-                if (res.code === 200) {
-                    crnOutput(res.data);
-                } else if (res.code === 403) {
-                    window.location.href = baseUrl + "/login";
-                } else {
-                    console.log(res.msg);
-                }
-            }
-        })
-    }
-
-    // ------------------------------------------------------------------------------------------------
-
-    // 鍫嗗灈鏈轰俊鎭〃鑾峰彇  ----- 琛ㄤ竴
-    function initCrnStateTable(row) {
-        var line;
-        if (row === undefined){
-            var one = $('#crn-state-table thead').height();
-            var total = $('.crn-state').height();
-            var count = total / one;
-            count = parseInt(count) - 1;
-            crnStateTableBlankRows = count;
-            line = count;
-        } else {
-            line = row;
-        }
-        var html = "";
-        for (var 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" +
-                "     </tr>\n";
-        }
-        $('#crn-state-table tbody').after(html);
-    }
-
-    // 鍫嗗灈鏈烘暟鎹〃鑾峰彇  ----- 琛ㄤ簩
-    function initCrnMsgTable(row) {
-        var line;
-        if (row === undefined){
-            var one = $('#crn-msg-table thead').height();
-            var total = $('.crn-msg').height();
-            var count = total / one;
-            count = parseInt(count) - 1;
-            crnMsgTableBlankRows = count;
-            line = count;
-        } else {
-            line = row;
-        }
-        var html = "";
-        for (var 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" +
-                "     </tr>\n";
-        }
-        $('#crn-msg-table tbody').after(html);
-    }
-
-    // 鏃ュ織杈撳嚭妗�
-    function crnOutput(content){
-        crnOutputDom.value += content;
-        crnOutputDom.scrollTop = crnOutputDom.scrollHeight;
-    }
-
-
-    var crnDemoData;
-    function initDemo() {
-        $.ajax({
-            url: baseUrl+"/crn/demo/status",
-            async: false,
-            method: 'GET',
-            success: function (res) {
-                if (res.code === 200) {
-                    crnDemoData = res.data;
-                    crnDemoData.forEach(function (e) {
-                        $("#demoBtn-"+e.crnNo).html(e.demo?'鍋滄':'婕旂ず');
-                    })
-                } else if (res.code === 403){
-                    parent.location.href = baseUrl+"/login";
-                }  else {
-                    layer.msg(res.msg, {icon: 2});
-                }
-            }
-        })
-    }
-
-    function demoSwitch(el) {
-        var crnId = el.split("-")[1];
-        var opt;
-        if (crnDemoData == null) {
-            initDemo();
-        }
-        for (var i = 0; i<crnDemoData.length; i++) {
-            if (Number(crnDemoData[i].crnNo) === Number(crnId)) {
-                opt = !crnDemoData[i].demo;
-            }
-        }
-        layer.confirm(crnId + ' 鍙峰爢鍨涙満纭畾'+ (opt?'寮�濮�':'鍋滄') + '婕旂ず鍚楋紵', function(){
-            doDemo(crnId, 'root', opt); // 鍋滄wcs绯荤粺
-        });
-    }
-
-    function doDemo(crnId, password, opt) {
-        // 鍔犺浇tips
-        var index = layer.load(1, {
-            shade: [0.1,'#fff']
-        });
-        $.ajax({
-            url: baseUrl+ "/crn/demo/switch",
-            headers: {'token': localStorage.getItem('token')},
-            // async: false,
-            data: {
-                crnId: Number(crnId),
-                password: password,
-                opt: opt
-            },
-            method: 'POST',
-            success: function (res) {
-                layer.close(index);
-                if (res.code === 200){
-                    layer.msg(res.msg, {icon: 1});
-                } else if (res.code === 403){
-                    window.location.href = baseUrl+"/login";
-                }  else {
-                    layer.msg(res.msg, {icon: 2});
-                }
-            }
-        });
-
-    }
-
+            </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
 </script>
 </html>
+
diff --git a/src/main/webapp/views/realtimeWatch/crn2.html b/src/main/webapp/views/realtimeWatch/crn2.html
new file mode 100644
index 0000000..8401eaa
--- /dev/null
+++ b/src/main/webapp/views/realtimeWatch/crn2.html
@@ -0,0 +1,535 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>鍫嗗灈鏈虹洃鎺х鐞�</title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <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/wcs/css/normalize.css">
+  <link rel="stylesheet" type="text/css" href="../../static/wcs/css/common.css">
+  <link rel="stylesheet" type="text/css" href="../../static/wcs/css/crn.css">
+  <script type="text/javascript" src="../../static/wcs/js/jquery/jquery-3.3.1.min.js"></script>
+  <script type="text/javascript" src="../../static/wcs/js/common.js"></script>
+  <script type="text/javascript" src="../../static/wcs/js/layer/layer.js"></script>
+  <style>
+    .demoBtn {
+      vertical-align: middle;
+      width: 20%;
+      height: 25px;
+      left: 0;
+      top: 0;
+      text-shadow: inherit;
+      font-size: 15px;
+      margin-left: 5px;
+      margin-right: 5px;
+      display: inline-block;
+      background-color: #FF5722;
+      border: none;
+      color: #FFF;
+      box-shadow: 1px 1px 5px #B6B6B6;
+      border-radius: 3px;
+      cursor: pointer;
+    }
+
+    .demoBtn:hover {
+      opacity: 0.8
+    }
+    .demoBtn:focus {
+      outline: 0;
+    }
+  </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">
+        <h3>鎵ц涓殑鍛戒护</h3>
+        <div class="crn-command-item">
+          <label>1#</label>
+          <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+          <!--            <span>&nbsp;</span>-->
+          <input id="crn1" disabled="disabled">
+        </div>
+        <div class="crn-command-item">
+          <label>2#</label>
+          <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
+          <!--            <span>&nbsp;</span>-->
+          <input id="crn2" disabled="disabled">
+        </div>
+      </div>
+      <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
+      <div class="crn-state">
+        <table id="crn-state-table">
+          <thead>
+          <tr>
+            <th>鍫嗗灈鏈�</th>
+            <th>妯″紡</th>
+            <th>鐘舵��</th>
+            <th>鏈夌墿</th>
+            <th>鍒�</th>
+            <th>灞�</th>
+            <th>璐у弶瀹氫綅</th>
+            <th>杞借揣鍙板畾浣�</th>
+            <th>璧拌鍦ㄥ畾浣�</th>
+            <th>鏁呴殰浠g爜</th>
+            <th>鏁呴殰鎻忚堪</th>
+          </tr>
+          </thead>
+          <tbody>
+          </tbody>
+        </table>
+      </div>
+    </div>
+    <!-- 鍫嗗灈鏈虹姸鎬� -->
+    <div class="crn-msg">
+      <table id="crn-msg-table">
+        <thead>
+        <tr>
+          <th>鍫嗗灈鏈�</th>
+          <th>宸ヤ綔鍙�</th>
+          <th>鐘舵��</th>
+          <th>婧愮珯</th>
+          <th>鐩爣绔�</th>
+          <th>婧愬簱浣�</th>
+          <th>鐩爣搴撲綅</th>
+          <th>璧拌閫熷害锛坢/min)</th>
+          <th>鍗囬檷閫熷害锛坢/min)</th>
+          <th>鍙夌墮閫熷害锛坢/min)</th>
+          <th>璧拌璺濈(Km)</th>
+          <th>鍗囬檷璺濈(Km)</th>
+          <th>璧拌鏃堕暱(H)</th>
+          <th>鍗囬檷鏃堕暱(H)</th>
+        </tr>
+        </thead>
+        <tbody>
+        </tbody>
+      </table>
+    </div>
+    <!-- 鍫嗗灈鏈烘棩蹇楄緭鍑� -->
+    <div class="crn-output-board">
+      <textarea id="crn-output"></textarea>
+    </div>
+  </div>
+</div>
+</body>
+<script>
+  // 绌虹櫧琛屾暟
+  var crnStateTableBlankRows = 0;
+  var crnMsgTableBlankRows = 0;
+  // 瀹為檯琛屾暟
+  var crnStateTableFullRows = 0;
+  var crnMsgTableFullRows = 0;
+  // 鍒濆鍖�
+  var crnOutputDom = document.getElementById("crn-output");
+  $(document).ready(function() {
+    getCommandLog();
+    initCrnStateTable();
+    getCrnStateInfo();
+    initCrnMsgTable();
+    getCrnMsgInfo();
+    operatorBlockShow();
+  });
+  // 鏁版嵁鏇存柊
+  setInterval(function () {
+    getCrnStateInfo();
+    getCrnMsgInfo();
+    getCommandLog();
+  },1000);
+  setInterval(function () {
+    getCrnOutput();
+    operatorBlockShow();
+    initDemo();
+  },500);
+
+  // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+  function operatorBlockShow() {
+    if (parent.systemRunning) {
+      $('.crn-operation').css("opacity", "0.5");
+      $('.crn-operation-shade').show();
+      $('.crn-operation-shade-span').show();
+    }  else {
+      $('.crn-operation').css("opacity", "1");
+      $('.crn-operation-shade').hide();
+      $('.crn-operation-shade-span').hide();
+    }
+  }
+
+  // 鑾峰彇鍫嗗灈鏈烘墽琛屼腑鐨勫懡浠�
+  function getCommandLog() {
+    $.ajax({
+      url: baseUrl + "/crn/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);
+          }
+        } else if (res.code === 403) {
+          window.location.href = baseUrl + "/login";
+        } else {
+          console.log(res.msg);
+        }
+      }
+    })
+  }
+
+  // 鍫嗗灈鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+  function getCrnStateInfo() {
+    var tableEl = $('#crn-state-table');
+    $.ajax({
+      url: baseUrl+ "/crn/table/crn/state",
+      headers: {'token': localStorage.getItem('token')},
+      method: 'POST',
+      success: function (res) {
+        if (res.code === 200){
+          var table = res.data;
+          if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) {
+            initCrnStateTable(table.length-crnStateTableBlankRows);
+            crnStateTableFullRows = 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(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);
+          }
+        } else if (res.code === 403){
+          window.location.href = baseUrl+"/login";
+        }  else {
+          console.log(res.msg);
+        }
+      }
+    });
+  }
+
+  // 鍫嗗灈鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+  function getCrnMsgInfo() {
+    var tableEl = $('#crn-msg-table');
+    $.ajax({
+      url: baseUrl+ "/crn/table/crn/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;
+          }
+          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(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);
+            setVal(tr.children("td").eq(4), table[i-1].staNo);
+            setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
+            setVal(tr.children("td").eq(6), table[i-1].locNo);
+            setVal(tr.children("td").eq(7), table[i-1].xspeed);
+            setVal(tr.children("td").eq(8), table[i-1].yspeed);
+            setVal(tr.children("td").eq(9), table[i-1].zspeed);
+            setVal(tr.children("td").eq(10), table[i-1].xdistance);
+            setVal(tr.children("td").eq(11), table[i-1].ydistance);
+            setVal(tr.children("td").eq(12), table[i-1].xduration);
+            setVal(tr.children("td").eq(13), table[i-1].yduration);
+          }
+        } else if (res.code === 403){
+          window.location.href = baseUrl+"/login";
+        }  else {
+          console.log(res.msg);
+        }
+      }
+    });
+  }
+
+  // 鍫嗗灈鏈烘墜鍔ㄦ搷浣滃尯 -----------------------------------------------------------------------
+
+  function getReqParam() {
+    var crnNo = $('input[name="crnSelect"]:checked').val();
+    var sourceStaNo = $('#sourceStaNo').val();
+    var sourceRow = $('#sourceRow').val();
+    var sourceBay = $('#sourceBay').val();
+    var sourceLev = $('#sourceLev').val();
+    var staNo = $('#staNo').val();
+    var row = $('#row').val();
+    var bay = $('#bay').val();
+    var lev = $('#lev').val();
+    return {
+      crnNo: crnNo,
+      sourceStaNo: sourceStaNo,
+      sourceRow: sourceRow,
+      sourceBay: sourceBay,
+      sourceLev: sourceLev,
+      staNo: staNo,
+      row: row,
+      bay: bay,
+      lev: lev
+    };
+  }
+
+  // 鍏ュ簱
+  function put() {
+    http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鍑哄簱
+  function take() {
+    http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 搴撲綅杞Щ
+  function stockMove() {
+    http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 绔欏埌绔�
+  function siteMove() {
+    http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鍧愭爣绉诲姩
+  function coorMove() {
+    http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鍥炲師鐐�
+  function bacOrigin() {
+    http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鍥炲師鐐�
+  function reverseOrigin() {
+    http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 浠诲姟瀹屾垚
+  function taskComplete() {
+    http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鏆傚仠
+  function pause() {
+    http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鍚姩
+  function boot() {
+    http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 娓呴櫎鍛戒护
+  function clearCommand() {
+    http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 鎵嬪姩澶嶄綅
+  function handleReset() {
+    http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) {
+      layer.msg(res.msg);
+    });
+  }
+
+  // 杈撻�佽澶囨棩蹇楄緭鍑� -----------------------------------------------------------------------
+  function getCrnOutput() {
+    $.ajax({
+      url: baseUrl + "/crn/output/site",
+      headers: {'token': localStorage.getItem('token')},
+      method: 'POST',
+      success: function (res) {
+        console.log(res)
+        if (res.code === 200) {
+          crnOutput(res.data);
+        } else if (res.code === 403) {
+          window.location.href = baseUrl + "/login";
+        } else {
+          console.log(res.msg);
+        }
+      }
+    })
+  }
+
+  // ------------------------------------------------------------------------------------------------
+
+  // 鍫嗗灈鏈轰俊鎭〃鑾峰彇  ----- 琛ㄤ竴
+  function initCrnStateTable(row) {
+    var line;
+    if (row === undefined){
+      var one = $('#crn-state-table thead').height();
+      var total = $('.crn-state').height();
+      var count = total / one;
+      count = parseInt(count) - 1;
+      crnStateTableBlankRows = count;
+      line = count;
+    } else {
+      line = row;
+    }
+    var html = "";
+    for (var 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" +
+              "     </tr>\n";
+    }
+    $('#crn-state-table tbody').after(html);
+  }
+
+  // 鍫嗗灈鏈烘暟鎹〃鑾峰彇  ----- 琛ㄤ簩
+  function initCrnMsgTable(row) {
+    var line;
+    if (row === undefined){
+      var one = $('#crn-msg-table thead').height();
+      var total = $('.crn-msg').height();
+      var count = total / one;
+      count = parseInt(count) - 1;
+      crnMsgTableBlankRows = count;
+      line = count;
+    } else {
+      line = row;
+    }
+    var html = "";
+    for (var 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" +
+              "     </tr>\n";
+    }
+    $('#crn-msg-table tbody').after(html);
+  }
+
+  // 鏃ュ織杈撳嚭妗�
+  function crnOutput(content){
+    crnOutputDom.value += content;
+    crnOutputDom.scrollTop = crnOutputDom.scrollHeight;
+  }
+
+
+  var crnDemoData;
+  function initDemo() {
+    $.ajax({
+      url: baseUrl+"/crn/demo/status",
+      async: false,
+      method: 'GET',
+      success: function (res) {
+        if (res.code === 200) {
+          crnDemoData = res.data;
+          crnDemoData.forEach(function (e) {
+            $("#demoBtn-"+e.crnNo).html(e.demo?'鍋滄':'婕旂ず');
+          })
+        } else if (res.code === 403){
+          parent.location.href = baseUrl+"/login";
+        }  else {
+          layer.msg(res.msg, {icon: 2});
+        }
+      }
+    })
+  }
+
+  function demoSwitch(el) {
+    var crnId = el.split("-")[1];
+    var opt;
+    if (crnDemoData == null) {
+      initDemo();
+    }
+    for (var i = 0; i<crnDemoData.length; i++) {
+      if (Number(crnDemoData[i].crnNo) === Number(crnId)) {
+        opt = !crnDemoData[i].demo;
+      }
+    }
+    layer.confirm(crnId + ' 鍙峰爢鍨涙満纭畾'+ (opt?'寮�濮�':'鍋滄') + '婕旂ず鍚楋紵', function(){
+      doDemo(crnId, 'root', opt); // 鍋滄wcs绯荤粺
+    });
+  }
+
+  function doDemo(crnId, password, opt) {
+    // 鍔犺浇tips
+    var index = layer.load(1, {
+      shade: [0.1,'#fff']
+    });
+    $.ajax({
+      url: baseUrl+ "/crn/demo/switch",
+      headers: {'token': localStorage.getItem('token')},
+      // async: false,
+      data: {
+        crnId: Number(crnId),
+        password: password,
+        opt: opt
+      },
+      method: 'POST',
+      success: function (res) {
+        layer.close(index);
+        if (res.code === 200){
+          layer.msg(res.msg, {icon: 1});
+        } else if (res.code === 403){
+          window.location.href = baseUrl+"/login";
+        }  else {
+          layer.msg(res.msg, {icon: 2});
+        }
+      }
+    });
+
+  }
+
+</script>
+</html>

--
Gitblit v1.9.1