From aa102b739e446f8d0d9fb64df2dd15f61e656010 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期二, 25 十一月 2025 20:06:40 +0800
Subject: [PATCH] *

---
 src/main/webapp/static/css/indexHCDD.css             |  467 +++++++
 /dev/null                                            |  688 -----------
 src/main/webapp/views/deviceOperate/devpOperate.html |  358 +++--
 src/main/java/basAgvMast.sql                         |    8 
 src/main/webapp/static/js/common.js                  |    1 
 src/main/webapp/static/js/testPosition.js            |  586 +++++++++
 src/main/webapp/views/deviceOperate/crnOperate.html  |  599 +++++----
 src/main/webapp/views/deviceOperate/rgvOperate.html  |    7 
 src/main/webapp/views/deviceOperate/wcsOperate.html  |  829 +++++++++++++
 9 files changed, 2,414 insertions(+), 1,129 deletions(-)

diff --git a/src/main/java/basAgvMast.sql b/src/main/java/basAgvMast.sql
index bb63543..8a649fc 100644
--- a/src/main/java/basAgvMast.sql
+++ b/src/main/java/basAgvMast.sql
@@ -16,3 +16,11 @@
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvMast#btn-edit', N'缂栬緫', '', '3', '2', '1');
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvMast#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
 insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basAgvMast#btn-export', N'瀵煎嚭', '', '3', '4', '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'deviceOperate/wcsOperate.html', N'杈撻�佺珯鐐圭淮鎶�', '40541', '2', '4', '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'wcsOperate#view', N'鏌ヨ', '90642', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'wcsOperate#btn-add', N'鏂板', '90642', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'wcsOperate#btn-edit', N'缂栬緫', '90642', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'wcsOperate#btn-delete', N'鍒犻櫎', '90642', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'wcsOperate#btn-export', N'瀵煎嚭', '90642', '3', '4', '1');
diff --git a/src/main/webapp/static/css/indexHCDD.css b/src/main/webapp/static/css/indexHCDD.css
new file mode 100644
index 0000000..ba85409
--- /dev/null
+++ b/src/main/webapp/static/css/indexHCDD.css
@@ -0,0 +1,467 @@
+.system-control-panel {
+    position: absolute;
+    top: 15px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: rgba(240, 248, 255, 0.7);
+    border-radius: 16px;
+    padding: 8px 20px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+    backdrop-filter: blur(6px);
+    border: 1px solid rgba(255, 255, 255, 0.6);
+    z-index: 100;
+    display: flex;
+    align-items: center;
+    min-width: 260px;
+    justify-content: center;
+    transition: all 0.3s ease;
+}
+
+.system-control-panel:hover {
+    background: rgba(240, 248, 255, 0.85);
+    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);
+}
+
+.system-status {
+    display: flex;
+    align-items: center;
+    margin-right: 12px;
+}
+
+.status-indicator {
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    margin-right: 8px;
+}
+
+.status-running {
+    background-color: #13ce66;
+    box-shadow: 0 0 6px rgba(19, 206, 102, 0.8);
+    animation: pulse-green 2s infinite;
+}
+
+.status-stopped {
+    background-color: #A64036;
+    box-shadow: 0 0 6px rgba(166, 64, 54, 0.6);
+}
+
+.status-text {
+    font-weight: 600;
+    font-size: 13px;
+    color: #2c3e50;
+}
+
+.custom-switch {
+    display: flex;
+    align-items: center;
+}
+
+.el-switch {
+    transform: scale(0.9);
+}
+
+@keyframes pulse-green {
+    0% { box-shadow: 0 0 0 0 rgba(19, 206, 102, 0.5); }
+    70% { box-shadow: 0 0 0 6px rgba(19, 206, 102, 0); }
+    100% { box-shadow: 0 0 0 0 rgba(19, 206, 102, 0); }
+}
+
+.license-info {
+    position: absolute;
+    top: 60px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: rgba(255, 255, 255, 0.85);
+    padding: 8px 18px;
+    border-radius: 6px;
+    font-size: 22px;
+    font-weight: 600;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+    backdrop-filter: blur(4px);
+    border: 1px solid rgba(255, 255, 255, 0.6);
+    z-index: 99;
+    display: flex;
+    align-items: center;
+    transition: all 0.3s ease;
+    max-width: 80%;
+    text-align: center;
+}
+
+.license-info.normal {
+    color: #13ce66;
+    background: rgba(255, 255, 255, 0.85);
+    display: none; /* 澶т簬30澶╂椂闅愯棌 */
+}
+
+.license-info.warning {
+    color: #e6a23c;
+    background: rgba(255, 247, 230, 0.85);
+    border: 1px solid rgba(230, 162, 60, 0.3);
+}
+
+.license-info.expired {
+    color: #f56c6c;
+    background: rgba(255, 235, 235, 0.85);
+    border: 1px solid rgba(245, 108, 108, 0.3);
+    animation: pulse-red 2s infinite;
+}
+
+.license-icon {
+    margin-right: 8px;
+    font-size: 14px;
+}
+
+@keyframes pulse-red {
+    0% { box-shadow: 0 0 0 0 rgba(245, 108, 108, 0.3); }
+    70% { box-shadow: 0 0 0 6px rgba(245, 108, 108, 0); }
+    100% { box-shadow: 0 0 0 0 rgba(245, 108, 108, 0); }
+}
+
+body {
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+    margin: 0;
+    padding: 0;
+    background-color: #a0d2eb;
+    color: #ffffff;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100vh;
+
+    background: linear-gradient(135deg, #e6f7ff 0%, #f0f8ff 100%);
+    overflow: hidden;
+    position: relative;
+}
+.tech-background {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: -1;
+    pointer-events: none;
+    opacity: 0.6;
+}
+
+.grid-overlay {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-image:
+            linear-gradient(rgba(66, 134, 244, 0.08) 1px, transparent 1px),
+            linear-gradient(90deg, rgba(66, 134, 244, 0.08) 1px, transparent 1px);
+    background-size: 40px 40px;
+    perspective: 1000px;
+    transform-style: preserve-3d;
+    transform: perspective(500px) rotateX(60deg);
+}
+
+.glow-effect {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    background:
+            radial-gradient(circle at 20% 30%, rgba(41, 128, 185, 0.3) 0%, transparent 40%),
+            radial-gradient(circle at 80% 70%, rgba(46, 204, 113, 0.3) 0%, transparent 40%);
+    filter: blur(10px);
+}
+
+.particles-container {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+}
+
+.particle {
+    position: absolute;
+    background-color: rgba(255, 255, 255, 0.5);
+    border-radius: 50%;
+    animation: float 15s infinite ease-in-out;
+}
+
+@keyframes float {
+    0%, 100% {
+        transform: translateY(0) translateX(0);
+        opacity: 0.2;
+    }
+    50% {
+        transform: translateY(-20px) translateX(20px);
+        opacity: 0.6;
+    }
+}
+
+header {
+    background-color: #2196F3;
+    color: white;
+    padding: 15px 20px;
+    text-align: center;
+    font-size: 24px;
+    letter-spacing: 1px;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+}
+.map {
+    position: relative;
+    width: 52vw;
+    height: 72vh;
+    border-radius: 50%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.inner-ring, .outer-ring {
+    position: absolute;
+    border-radius: 50%;
+}
+.inner-ring {
+    width: 72vh;
+    height: 72vh;
+    border: 4px solid #00E676;
+    box-shadow: inset 0 0 30px rgba(0, 230, 118, 0.5), 0 0 20px rgba(0, 230, 118, 0.5);
+}
+.outer-ring {
+    width: 80vh;
+    height: 80vh;
+    border: 4px solid #00E676;
+    box-shadow: inset 0 0 30px rgba(0, 230, 118, 0.5), 0 0 20px rgba(0, 230, 118, 0.5);
+}
+.station {
+    position: absolute;
+    width: 20px;
+    height: 14px;
+    text-align: center;
+    line-height: 1.5; /* 璋冩暣琛岄珮涓庡瓧浣撳ぇ灏忕殑姣斿�� */
+    font-size: 10px; /* 璁剧疆鏇村皬鐨勫瓧浣� */
+    font-weight: bold;
+    transition: transform 0.3s ease;
+    background-color: #ab1839;
+    transform: scale(1); /* 鍙�夛細濡傛灉涓嶉渶瑕佹斁澶ф晥鏋� */
+}
+.bus {
+    font-size: 10px;
+    background-color: #2196F3;
+    /*border: 10px solid #ffffff;*/
+    position: absolute;
+    width: 15px;
+    height: 15px;
+    border-radius: 50%;
+    text-align: center;
+    line-height: 15px;
+    font-weight: bold;
+    transition: transform 0.3s ease;
+    /* 3D鏁堟灉 */
+    transform: translateZ(0);
+    border: 10px solid rgba(255, 255, 255, 0.8);
+}
+
+@keyframes pulse {
+    0% { box-shadow: 0 0 0 0 rgba(33, 150, 243, 0.7); }
+    70% { box-shadow: 0 0 0 10px rgba(33, 150, 243, 0); }
+    100% { box-shadow: 0 0 0 0 rgba(33, 150, 243, 0); }
+}
+.station:hover, .bus:hover {
+    transform: scale(1.4);
+    z-index: 999;
+}
+
+.task-bar-left {
+    position: fixed;
+    top: 1%;
+    /*transform: translateY(-50%);*/
+    width: 25%; /* 璁剧疆瀹藉害 */
+    background-color: rgba(255, 255, 255, 0); /* 鍗婇�忔槑鑳屾櫙 */
+
+    border-radius: 5px;
+    padding: 10px;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0);
+    z-index: 1000; /* 纭繚鍦ㄥ叾浠栧厓绱犱箣涓� */
+}
+
+.task-bar-left1 {
+    position: fixed;
+    top: 8%;
+    /*transform: translateY(-50%);*/
+    width: 25%; /* 璁剧疆瀹藉害 */
+    background-color: rgba(255, 255, 255, 0); /* 鍗婇�忔槑鑳屾櫙 */
+
+    border-radius: 5px;
+    padding: 10px;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0);
+    z-index: 1000; /* 纭繚鍦ㄥ叾浠栧厓绱犱箣涓� */
+}
+
+.task-bar-right {
+    position: fixed;
+    top: 1%;
+    /*transform: translateY(-50%);*/
+    width: 25%; /* 璁剧疆瀹藉害 */
+    background-color: rgba(255, 255, 255, 0); /* 鍗婇�忔槑鑳屾櫙 */
+
+    border-radius: 5px;
+    padding: 10px;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0);
+    z-index: 1000; /* 纭繚鍦ㄥ叾浠栧厓绱犱箣涓� */
+}
+
+.task-bar-right1 {
+    position: fixed;
+    top: 5%;
+    /*transform: translateY(-50%);*/
+    width: 25%; /* 璁剧疆瀹藉害 */
+    background-color: rgba(255, 255, 255, 0);
+
+    border-radius: 5px;
+    padding: 10px;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0);
+    z-index: 1000;
+}
+
+.task-bar-div1 {
+    /*width: 100%; !* 璁剧疆瀹藉害 *!*/
+    background-color: rgba(255, 255, 255, 0.8);
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
+}
+
+.left-task-bar {
+    left: 20px;
+    /*bottom: 100px;*/
+}
+
+.right-task-bar {
+    /*bottom: 100px;*/
+    right: 20px;
+}
+
+.el-table .warning-row {
+    background: oldlace;
+}
+
+.el-table .success-row {
+    background: #f0f9eb;
+}
+.container {
+    width: 52vw;
+    height: 72vh;
+    position: absolute;
+    /*background: #8c939d;*/
+}
+.bus-station {
+    width: 100vh;
+    height: 72vh;
+    position: absolute;
+    display: flex;
+    /*background: #8c939d;*/
+}
+.bus-item-top {
+    background: red;
+    position: relative;
+    width: 40px;
+    height: 60px;
+    line-height: 60px;
+    top: 880px;
+    text-align: center;
+}
+.bus-item-left {
+    background: red;
+    position: relative;
+    width: 60px;
+    height: 40px;
+    line-height: 40px;
+    left: 1230px;
+    text-align: center;
+}
+.bus-item-left2 {
+    background: red;
+    position: relative;
+    width: 60px;
+    height: 40px;
+    line-height: 40px;
+    left: 1000px;
+    text-align: center;
+}
+
+.station {
+    position: absolute;
+    width: 24px;
+    height: 24px;
+    text-align: center;
+    line-height: 24px;
+    font-size: 10px;
+    font-weight: bold;
+    transition: all 0.3s ease;
+    background-color: #ab1839;
+    border-radius: 4px;
+    color: white;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
+    transform: scale(1);
+    z-index: 10;
+    /* 宓屽鏁堟灉 */
+    border: 2px solid white;
+}
+
+.station::before {
+    content: '';
+    position: absolute;
+    top: 3px;
+    left: 3px;
+    right: 3px;
+    bottom: 3px;
+    /*border: 1px solid rgba(255, 255, 255, 0.8);*/
+    border-radius: 2px;
+    pointer-events: none;
+}
+
+.station::after {
+    content: '';
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    pointer-events: none;
+}
+
+.station .corner {
+    position: absolute;
+    width: 0;
+    height: 0;
+    border-style: solid;
+    border-width: 0 4px 4px 0;
+    border-color: transparent #ffffff transparent transparent;
+}
+
+.station .corner-tl {
+    top: -2px;
+    left: -2px;
+    transform: rotate(0deg);
+}
+
+.station .corner-tr {
+    top: -2px;
+    right: -2px;
+    transform: rotate(90deg);
+}
+
+.station .corner-bl {
+    bottom: -2px;
+    left: -2px;
+    transform: rotate(270deg);
+}
+
+.station .corner-br {
+    bottom: -2px;
+    right: -2px;
+    transform: rotate(180deg);
+}
+
+.station:hover {
+    transform: scale(1.6);
+    z-index: 999;
+    box-shadow: 0 0 15px rgba(171, 24, 57, 0.8);
+}
\ No newline at end of file
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index ff3d378..620dcac 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -1,4 +1,5 @@
 var baseUrl = "/zzgtasrs";
+var baseUrlWcs = "http://127.0.0.1:9090/zzgtwcs";
 
 // 璇︽儏绐楀彛-楂樺害
 var detailHeight = '80%';
diff --git a/src/main/webapp/static/js/testPosition.js b/src/main/webapp/static/js/testPosition.js
new file mode 100644
index 0000000..df65b97
--- /dev/null
+++ b/src/main/webapp/static/js/testPosition.js
@@ -0,0 +1,586 @@
+var busPsto = [
+    {
+        index: 1,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 775
+    },
+    // 121, 132, 143, 154
+    {
+        index: 2,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 800
+    },
+    {
+        index: 3,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1210,
+        valueY: 820
+    },
+    {
+        index: 3,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 220,
+        valueY: 882
+    },
+    {
+        index: 4,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1200,
+        valueY: 840
+    },
+    {
+        index: 5,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1190,
+        valueY: 855
+    },
+    {
+        index: 6,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1155,
+        valueY: 875
+    },
+    {
+        index: 7,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1145,
+        valueY: 877
+    },
+    {
+        index: 8,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1135,
+        valueY: 878
+    },
+    {
+        index: 9,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1125,
+        valueY: 880
+    },
+    {
+        index: 10,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 882
+    },
+    {
+        index: 11,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 660,
+        valueY: 882
+    },
+    {
+        index: 12,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 715,
+        valueY: 882
+    },
+    {
+        index: 13,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 770,
+        valueY: 882
+    },
+    {
+        index: 14,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 825,
+        valueY: 882
+    },
+    {
+        index: 15,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 880,
+        valueY: 882
+    },
+    {
+        index: 16,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 935,
+        valueY: 882
+    },
+    {
+        index: 17,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 990,
+        valueY: 882
+    },
+    {
+        index: 18,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 620
+    },
+    {
+        index: 19,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 520
+    },
+    {
+        index: 20,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 430
+    },
+    {
+        index: 21,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 340
+    },
+    {
+        index: 22,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 250
+    },
+    {
+        index: 23,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 150
+    },
+    {
+        index: 24,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 200
+    },
+    {
+        index: 25,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 250
+    },
+    {
+        index: 26,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 300
+    },
+    {
+        index: 27,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 350
+    },
+    {
+        index: 28,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 400
+    },
+    {
+        index: 29,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 450
+    },
+    {
+        index: 30,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 500
+    },
+    {
+        index: 31,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 550
+    },
+    {
+        index: 32,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 600
+    },
+    {
+        index: 33,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 650
+    },
+]
+
+// 绌虹櫧鍖哄煙
+var busPsto1 = [
+
+    {
+        index: 1,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 65,
+        valueY: 882
+    },
+    {
+        index: 2,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 882
+    },
+    {
+        index: 3,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1185,
+        valueY: 850
+    },
+    {
+        index: 4,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 775
+    },
+    {
+        index: 5,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 125
+    },
+    {
+        index: 6,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1164,
+        valueY: 80
+    },
+    {
+        index: 7,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 125
+    },
+    {
+        index: 8,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 720
+    },
+    {
+        index: 9,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 720
+    },
+    {
+        index: 10,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1100,
+        valueY: 750
+    },
+    {
+        index: 11,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1075,
+        valueY: 775
+    },
+    {
+        index: 12,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 65,
+        valueY: 775
+    },
+    {
+        index: 13,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 25,
+        valueY: 830
+    },
+
+]
+
+var busPsto3 = [
+    {
+        index: 1,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 83,
+        valueY: 882
+    },
+    {
+        index: 2,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 138,
+        valueY: 882
+    },
+    {
+        index: 3,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 193,
+        valueY: 882
+    },
+    {
+        index: 4,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 248,
+        valueY: 882
+    },
+    {
+        index: 5,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 303,
+        valueY: 882
+    },
+    {
+        index: 6,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 358,
+        valueY: 882
+    },
+    {
+        index: 7,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 413,
+        valueY: 882
+    },
+    {
+        index: 8,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 468,
+        valueY: 882
+    },
+    {
+        index: 9,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 523,
+        valueY: 882
+    },
+    {
+        index: 10,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 578,
+        valueY: 882
+    },
+    {
+        index: 11,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 633,
+        valueY: 882
+    },
+    {
+        index: 12,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 688,
+        valueY: 882
+    },
+    {
+        index: 13,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 743,
+        valueY: 882
+    },
+    {
+        index: 14,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 798,
+        valueY: 882
+    },
+    {
+        index: 15,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 853,
+        valueY: 882
+    },
+    {
+        index: 16,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 908,
+        valueY: 882
+    },
+    {
+        index: 17,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 963,
+        valueY: 882
+    },
+    {
+        index: 18,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1018,
+        valueY: 882
+    },
+    {
+        index: 19,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1073,
+        valueY: 882
+    },
+    {
+        index: 20,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 565
+    },
+    {
+        index: 21,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 475
+    },
+    {
+        index: 22,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 385
+    },
+    {
+        index: 23,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 295
+    },
+    {
+        index: 24,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1215,
+        valueY: 205
+    },
+    {
+        index: 25,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 175
+    },
+    {
+        index: 26,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 225
+    },
+    {
+        index: 27,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 275
+    },
+    {
+        index: 28,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 325
+    },
+    {
+        index: 29,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 375
+    },
+    {
+        index: 30,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 425
+    },
+    {
+        index: 31,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 475
+    },
+    {
+        index: 32,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 525
+    },
+    {
+        index: 33,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 575
+    },
+    {
+        index: 34,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 625
+    },
+    {
+        index: 35,
+        modeColor: "#4B5CC4",
+        statusColor: "#1F3696",
+        valueX: 1115,
+        valueY: 675
+    },
+]
\ No newline at end of file
diff --git a/src/main/webapp/views/deviceOperate/crnOperate.html b/src/main/webapp/views/deviceOperate/crnOperate.html
index 3d60392..aba8045 100644
--- a/src/main/webapp/views/deviceOperate/crnOperate.html
+++ b/src/main/webapp/views/deviceOperate/crnOperate.html
@@ -5,6 +5,7 @@
 	<meta charset="UTF-8">
 	<title>鍫嗗灈鏈鸿澶�</title>
 	<link rel="stylesheet" href="../../static/css/element.css">
+	<link rel="stylesheet" href="../../static/css/element-ui.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/vue.min.js"></script>
@@ -12,306 +13,359 @@
 </head>
 
 <body>
-	<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
-		<div style="width: 100%;">
-			<el-table border ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
-				max-height="350" style="width: 100%">
-				<el-table-column property="crnNo" label="鍫嗗灈鏈�">
-				</el-table-column>
-				<el-table-column property="workNo" label="宸ヤ綔鍙�">
-				</el-table-column>
-				<el-table-column property="statusType" label="妯″紡">
-				</el-table-column>
-				<el-table-column property="wrkStatus$" label="浠诲姟鐘舵��">
-				</el-table-column>
-				<el-table-column property="deviceStatus" label="璁惧鐘舵��">
-				</el-table-column>
-			</el-table>
-		</div>
+<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+	<div style="width: 100%;">
+		<el-table ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
+				  max-height="350" style="width: 100%">
+			<el-table-column property="crnNo" label="鍫嗗灈鏈�">
+			</el-table-column>
+			<el-table-column property="laneNo" label="宸烽亾鍙�">
+			</el-table-column>
+			<el-table-column property="workNo" label="宸ヤ綔鍙�">
+			</el-table-column>
+			<el-table-column property="statusType" label="妯″紡">
+			</el-table-column>
+			<el-table-column property="wrkStatus$" label="浠诲姟鐘舵��">
+			</el-table-column>
+			<el-table-column property="deviceStatus" label="璁惧鐘舵��">
+			</el-table-column>
+			<el-table-column property="taskComplete" label="浠诲姟瀹屾垚鎸囦护">
+			</el-table-column>
+			<el-table-column property="errorCrn" label="寮傚父鎻愮ず">
+			</el-table-column>
+			<el-table-column property="demo" label="婕旂ず">
+			</el-table-column>
+			<el-table-column property="demoValue$" label="婕旂ず鐘舵��">
+			</el-table-column>
+		</el-table>
+	</div>
 
-		<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
-			<div style="width: 55%;margin-right: 10px;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix">
-						<span>璁惧璋冭瘯</span>
-					</div>
+	<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
+		<div style="width: 55%;margin-right: 10px;">
+			<el-card class="box-card">
+				<div slot="header" class="clearfix">
+					<span>璁惧璋冭瘯</span>
+				</div>
+				<div>
+					<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+						<!--							<el-form-item label="婧愮珯/婧愬簱浣�">-->
+						<!--								<el-input v-model="formParam.sourceStaNo" placeholder="婧愮珯/婧愬簱浣�"></el-input>-->
+						<!--							</el-form-item>-->
+						<el-form-item label="鎺�">
+							<el-input v-model="formParam.sourceRow" placeholder="鎺�"></el-input>
+						</el-form-item>
+						<el-form-item label="鍒�">
+							<el-input v-model="formParam.sourceBay" placeholder="鍒�"></el-input>
+						</el-form-item>
+						<el-form-item label="灞�">
+							<el-input v-model="formParam.sourceLev" placeholder="灞�"></el-input>
+						</el-form-item>
+					</el-form>
+					<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+						<!--							<el-form-item label="鐩爣绔�/鐩爣搴撲綅">-->
+						<!--								<el-input v-model="formParam.staNo" placeholder="鐩爣绔�/鐩爣搴撲綅"></el-input>-->
+						<!--							</el-form-item>-->
+						<el-form-item label="鎺�">
+							<el-input v-model="formParam.row" placeholder="鎺�"></el-input>
+						</el-form-item>
+						<el-form-item label="鍒�">
+							<el-input v-model="formParam.bay" placeholder="鍒�"></el-input>
+						</el-form-item>
+						<el-form-item label="灞�">
+							<el-input v-model="formParam.lev" placeholder="灞�"></el-input>
+						</el-form-item>
+					</el-form>
+					<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+						<el-form-item label="娴嬭瘯搴撲綅鏁伴噺">
+							<el-input v-model="formParam.locMastDemoCount" placeholder="娴嬭瘯搴撲綅鏁伴噺"></el-input>
+						</el-form-item>
+						<el-form-item label="娴嬭瘯搴撲綅">
+							<el-input v-model="formParam.locMastDemo" placeholder="娴嬭瘯搴撲綅 鍒嗛殧绗�;"></el-input>
+						</el-form-item>
+						<el-form-item label="鍫嗗灈鏈烘斁璐х珯鐐�">
+							<el-input v-model="formParam.staOutDemo" placeholder="鍫嗗灈鏈烘斁璐х珯鐐�"></el-input>
+						</el-form-item>
+						<el-form-item label="鍫嗗灈鏈哄彇璐х珯鐐�">
+							<el-input v-model="formParam.staIntDemo" placeholder="鍫嗗灈鏈哄彇璐х珯鐐�"></el-input>
+						</el-form-item>
+					</el-form>
+					<el-form label-position="top" :inline="true" class="demo-form-inline">
+						<el-form-item label="">
+							<el-checkbox @change="updateEnableInOut('in')" v-model="enableIn">鍙叆</el-checkbox>
+						</el-form-item>
+						<el-form-item label="">
+							<el-checkbox @change="updateEnableInOut('out')" v-model="enableOut">鍙嚭</el-checkbox>
+						</el-form-item>
+						<el-form-item label="">
+							<el-checkbox @change="updateDemo('demo')" v-model="hpMkDemo">婕旂ず</el-checkbox>
+						</el-form-item>
+					</el-form>
 					<div>
-						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
-<!--							<el-form-item label="婧愮珯/婧愬簱浣�">-->
-<!--								<el-input v-model="formParam.sourceStaNo" placeholder="婧愮珯/婧愬簱浣�"></el-input>-->
-<!--							</el-form-item>-->
-							<el-form-item label="婧愭帓">
-								<el-input v-model="formParam.sourceRow" placeholder="鎺�"></el-input>
-							</el-form-item>
-							<el-form-item label="婧愬垪">
-								<el-input v-model="formParam.sourceBay" placeholder="鍒�"></el-input>
-							</el-form-item>
-							<el-form-item label="婧愬眰">
-								<el-input v-model="formParam.sourceLev" placeholder="灞�"></el-input>
-							</el-form-item>
-						</el-form>
-						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
-<!--							<el-form-item label="鐩爣绔�/鐩爣搴撲綅">-->
-<!--								<el-input v-model="formParam.staNo" placeholder="鐩爣绔�/鐩爣搴撲綅"></el-input>-->
-<!--							</el-form-item>-->
-							<el-form-item label="鐩爣鎺�">
-								<el-input v-model="formParam.row" placeholder="鎺�"></el-input>
-							</el-form-item>
-							<el-form-item label="鐩爣鍒�">
-								<el-input v-model="formParam.bay" placeholder="鍒�"></el-input>
-							</el-form-item>
-							<el-form-item label="鐩爣灞�">
-								<el-input v-model="formParam.lev" placeholder="灞�"></el-input>
-							</el-form-item>
-						</el-form>
-						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
-							<el-form-item label="鎵樼洏鐮�">
-								<el-input v-model="formParam.barcode" placeholder="鏉$爜"></el-input>
-							</el-form-item>
-							<el-form-item label="鎵樼洏绫诲瀷">
-								<el-input v-model="formParam.barcodeType" placeholder="绫诲瀷"></el-input>
-							</el-form-item>
-							<el-form-item label="绌烘墭鐩�">
-								<el-select v-model="formParam.emptyContainer" placeholder="鏄惁涓虹┖鎵樼洏">
-									<el-option
-											v-for="item in options"
-											:key="item.value"
-											:label="item.label"
-											:value="item.value">
-									</el-option>
-								</el-select>
-							</el-form-item>
+						<!--							<el-button @click="requestOperate('put')" type="primary">鍏ュ簱</el-button>-->
+						<!--							<el-button @click="requestOperate('take')" type="primary">鍑哄簱</el-button>-->
+						<el-button @click="requestOperate('stockMove')" type="primary">搴撲綅杞Щ</el-button>
 
-						</el-form>
-						<el-form label-position="top" :inline="true" class="demo-form-inline">
-							<el-form-item label="">
-								<el-checkbox @change="updateEnableInOut('in')" v-model="enableIn">鍙叆</el-checkbox>
-							</el-form-item>
-							<el-form-item label="">
-								<el-checkbox @change="updateEnableInOut('out')" v-model="enableOut">鍙嚭</el-checkbox>
-							</el-form-item>
-						</el-form>
-						<div>
-							<el-button @click="requestOperate('put')" type="primary">鍏ュ簱</el-button>
-							<el-button @click="requestOperate('take')" type="primary">鍑哄簱</el-button>
-							<el-button @click="requestOperate('stockMove')" type="primary">搴撲綅杞Щ</el-button>
-							<el-button @click="requestOperate('siteMove')" type="primary">绔欏埌绔�</el-button>
+						<div style="margin-top: 10px">
 							<el-button @click="requestOperate('taskComplete')" type="primary">浠诲姟瀹屾垚</el-button>
-							<el-button @click="requestOperate('clearCommand')" type="primary">娓呴櫎鍛戒护</el-button>
-							<el-button @click="requestOperate('reset')" type="primary">澶嶄綅</el-button>
-							<br/>
-							<br/>
-							<el-button @click="requestOperate('auto')" type="warning">鑱旀満</el-button>
-							<el-button @click="requestOperate('semiAutomatic')" type="warning">鍗婅嚜鍔�</el-button>
-							<el-button @click="requestOperate('hand')" type="warning">鎵嬪姩</el-button>
-							<el-button @click="requestOperate('onlineWrk4')" type="warning">鎭㈠鑱旀満浠诲姟</el-button>
-							<el-button @click="requestOperate('onlineWrk3')" type="warning">娓呴櫎鑱旀満浠诲姟</el-button>
-							<el-button @click="requestOperate('onlineWrk1')" type="warning">鐢宠瀹屾垚浠诲姟</el-button>
-							<br/>
-							<br/>
-							<el-button @click="requestOperate('onlineWrk2')" type="warning">鐢宠鍙栨秷浠诲姟</el-button>
+							<el-button @click="requestOperate('taskCompleteClearCommand')" type="primary">浠诲姟瀹屾垚鎸囦护娓呴櫎</el-button>
 						</div>
+						<!--							<el-button @click="requestOperate('siteMove')" type="primary">绔欏埌绔�</el-button>-->
+						<!--							<el-button @click="requestOperate('clearCommand')" type="primary">娓呴櫎鍛戒护</el-button>-->
+						<!--							<el-button @click="requestOperate('reset')" type="primary">澶嶄綅</el-button>-->
+						<br/>
+						<br/>
+						<!--							<el-button @click="requestOperate('auto')" type="warning">鑱旀満</el-button>-->
+						<!--							<el-button @click="requestOperate('semiAutomatic')" type="warning">鍗婅嚜鍔�</el-button>-->
+						<!--							<el-button @click="requestOperate('hand')" type="warning">鎵嬪姩</el-button>-->
+						<!--							<el-button @click="requestOperate('onlineWrk4')" type="warning">鎭㈠鑱旀満浠诲姟</el-button>-->
+						<!--							<el-button @click="requestOperate('onlineWrk3')" type="warning">娓呴櫎鑱旀満浠诲姟</el-button>-->
+						<!--							<el-button @click="requestOperate('onlineWrk1')" type="warning">鐢宠瀹屾垚浠诲姟</el-button>-->
+						<br/>
+						<br/>
+						<!--							<el-button @click="requestOperate('onlineWrk2')" type="warning">鐢宠鍙栨秷浠诲姟</el-button>-->
 					</div>
-				</el-card>
-			</div>
-			<div style="width: 45%;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix">
-						<span>璁惧鐘舵��</span>
+				</div>
+			</el-card>
+		</div>
+		<div style="width: 45%;">
+			<el-card class="box-card">
+				<div slot="header" class="clearfix">
+					<span>璁惧鐘舵��</span>
+				</div>
+				<div>
+					<div v-if="currentIndex == null">
+						<el-empty description="璇烽�夋嫨璁惧"></el-empty>
 					</div>
-					<div>
-						<div v-if="currentIndex == null">
-							<el-empty description="璇烽�夋嫨璁惧"></el-empty>
-						</div>
-						<div v-else>
-							<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
-								<el-descriptions-item label="鍫嗗灈鏈�">{{ tableData[currentIndex].crnNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="宸ヤ綔鍙�">
-									{{ tableData[currentIndex].workNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="妯″紡">
-									<el-tag>{{ tableData[currentIndex].statusType }}</el-tag>
-								</el-descriptions-item>
-								<el-descriptions-item label="浠诲姟鐘舵��">
-									<div v-if="tableData[currentIndex].wrkStatus == 0">
-										<el-tag>{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
-									</div>
-									<div v-else>
-										<el-tag type="success">{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
-									</div>
-								</el-descriptions-item>
-								<el-descriptions-item label="璁惧鐘舵��">
-									<el-tag>{{ tableData[currentIndex].deviceStatus }}</el-tag>
-								</el-descriptions-item>
-								<el-descriptions-item label="鏈夌墿">
-									<el-tag>{{ tableData[currentIndex].loading }}</el-tag>
-								</el-descriptions-item>
-								<el-descriptions-item label="鍒�">{{ tableData[currentIndex].bay }}
-								</el-descriptions-item>
-								<el-descriptions-item label="灞�">{{ tableData[currentIndex].lev }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏁呴殰浠g爜">{{ tableData[currentIndex].warnCode }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏁呴殰鎻忚堪">{{ tableData[currentIndex].lev }}
-								</el-descriptions-item>
-								<el-descriptions-item label="婧愮珯">{{ tableData[currentIndex].sourceStaNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鐩爣绔�">{{ tableData[currentIndex].staNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="婧愬簱浣�">{{ tableData[currentIndex].sourceLocNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鐩爣搴撲綅">{{ tableData[currentIndex].locNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="璐у弶瀹氫綅">{{ tableData[currentIndex].forkOffset }}
-								</el-descriptions-item>
-								<el-descriptions-item label="杞借揣鍙板畾浣�">{{ tableData[currentIndex].liftPos }}
-								</el-descriptions-item>
-								<el-descriptions-item label="璧拌鍦ㄥ畾浣�">{{ tableData[currentIndex].walkPos }}
-								</el-descriptions-item>
-								<el-descriptions-item label="璧拌閫熷害(m/min)">{{ tableData[currentIndex].xspeed }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍗囬檷閫熷害(m/min)">{{ tableData[currentIndex].yspeed }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙夌墮閫熷害(m/min)">{{ tableData[currentIndex].zspeed }}
-								</el-descriptions-item>
-								<el-descriptions-item label="璧拌璺濈(Km)">{{ tableData[currentIndex].xdistance }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍗囬檷璺濈(Km)">{{ tableData[currentIndex].ydistance }}
-								</el-descriptions-item>
-								<el-descriptions-item label="璧拌鏃堕暱(H)">{{ tableData[currentIndex].xduration }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍗囬檷鏃堕暱(H)">{{ tableData[currentIndex].yduration }}
-								</el-descriptions-item>
-							</el-descriptions>
-						</div>
+					<div v-else>
+						<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
+							<el-descriptions-item label="鍫嗗灈鏈�">{{ tableData[currentIndex].crnNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="宸ヤ綔鍙�">
+								{{ tableData[currentIndex].workNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="妯″紡">
+								<el-tag>{{ tableData[currentIndex].statusType }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="浠诲姟鐘舵��">
+								<div v-if="tableData[currentIndex].wrkStatus == 0">
+									<el-tag>{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
+								</div>
+								<div v-else>
+									<el-tag type="success">{{ tableData[currentIndex].wrkStatus$ }}</el-tag>
+								</div>
+							</el-descriptions-item>
+							<el-descriptions-item label="璁惧鐘舵��">
+								<el-tag>{{ tableData[currentIndex].deviceStatus }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鏈夌墿">
+								<el-tag>{{ tableData[currentIndex].loading }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鍒�">{{ tableData[currentIndex].bay }}
+							</el-descriptions-item>
+							<el-descriptions-item label="灞�">{{ tableData[currentIndex].lev }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鏁呴殰浠g爜">{{ tableData[currentIndex].warnCode }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鏁呴殰鎻忚堪">{{ tableData[currentIndex].lev }}
+							</el-descriptions-item>
+							<el-descriptions-item label="婧愮珯">{{ tableData[currentIndex].sourceStaNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鐩爣绔�">{{ tableData[currentIndex].staNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="婧愬簱浣�">{{ tableData[currentIndex].sourceLocNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鐩爣搴撲綅">{{ tableData[currentIndex].locNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="璐у弶瀹氫綅">{{ tableData[currentIndex].forkOffset }}
+							</el-descriptions-item>
+							<el-descriptions-item label="杞借揣鍙板畾浣�">{{ tableData[currentIndex].liftPos }}
+							</el-descriptions-item>
+							<el-descriptions-item label="璧拌鍦ㄥ畾浣�">{{ tableData[currentIndex].walkPos }}
+							</el-descriptions-item>
+							<el-descriptions-item label="璧拌閫熷害(m/min)">{{ tableData[currentIndex].xspeed }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍗囬檷閫熷害(m/min)">{{ tableData[currentIndex].yspeed }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍙夌墮閫熷害(m/min)">{{ tableData[currentIndex].zspeed }}
+							</el-descriptions-item>
+							<el-descriptions-item label="璧拌璺濈(Km)">{{ tableData[currentIndex].xdistance }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍗囬檷璺濈(Km)">{{ tableData[currentIndex].ydistance }}
+							</el-descriptions-item>
+							<el-descriptions-item label="璧拌鏃堕暱(H)">{{ tableData[currentIndex].xduration }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍗囬檷鏃堕暱(H)">{{ tableData[currentIndex].yduration }}
+							</el-descriptions-item>
+							<el-descriptions-item label="寮傚父鎻愮ず">{{ tableData[currentIndex].errorCrn }}
+							</el-descriptions-item>
+						</el-descriptions>
 					</div>
-				</el-card>
-			</div>
+				</div>
+			</el-card>
 		</div>
 	</div>
-	<script>
-		var app = new Vue({
-			el: '#app',
-			data: {
-				tableData: [],
-				currentRow: null,
-				currentTitle: "鏈�夋嫨璁惧",
-				currentIndex: null,
-				formParam: {
-					crnNo: null,
-					sourceStaNo: null,
-					sourceRow: 1,
-					sourceBay: 0,
-					sourceLev: 1,
-					staNo: null,
-					row: 1,
-					bay: 0,
-					lev: 1,
-					barcode:null,
-					barcodeType:null,
-					emptyContainer:null
-				},
-				enableIn: false,
-				enableOut: false,
-				options:[
-					{
-						value:'1',
-						label:'鏄�'
-					},
-					{
-						value:'0',
-						label:'鍚�'
-					}
-				]
+</div>
+<script>
+	var app = new Vue({
+		el: '#app',
+		data: {
+			tableData: [],
+			currentRow: null,
+			currentTitle: "鏈�夋嫨璁惧",
+			currentIndex: null,
+			formParam: {
+				crnNo: null,
+				sourceStaNo: null,
+				sourceRow: 1,
+				sourceBay: 0,
+				sourceLev: 1,
+				staNo: null,
+				locMastDemoCount: 3,
+				locMastDemo: null,
+				staOutDemo: null,
+				staIntDemo: null,
+				row: 1,
+				bay: 0,
+				lev: 1
 			},
-			created() {
-				this.init()
-			},
-			watch: {
+			enableIn: false,
+			enableOut: false,
+			hpMkDemo: false
+		},
+		created() {
+			this.init()
+		},
+		watch: {
 
-			},
-			methods: {
-				init() {
+		},
+		methods: {
+			init() {
+				this.getTableData()
+
+				setInterval(() => {
 					this.getTableData()
-
-					setInterval(() => {
-						this.getTableData()
-					}, 1000)
-				},
-				handleRowClick(row, col, event) {
-					const index = this.tableData.indexOf(row)
-					this.currentRow = row;
-					this.currentIndex = index
-					this.currentTitle = row.crnNo + "鍙峰爢鍨涙満"
-					this.formParam.crnNo = row.crnNo
-					this.enableIn = row.inEnable == "Y" ? true : false
-					this.enableOut = row.outEnable == "Y" ? true : false
-				},
-				getTableData() {
-					let that = this;
+				}, 1000)
+			},
+			handleRowClick(row, col, event) {
+				const index = this.tableData.indexOf(row)
+				this.currentRow = row;
+				this.currentIndex = index
+				this.currentTitle = row.crnNo + "鍙峰爢鍨涙満"
+				this.formParam.crnNo = row.crnNo
+				this.enableIn = row.inEnable == "Y" ? true : false
+				this.enableOut = row.outEnable == "Y" ? true : false
+				this.hpMkDemo = row.hpMk == "Y" ? true : false
+			},
+			getTableData() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/crn/list/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'GET',
+					success: function (res) {
+						that.tableData = res.data
+					}
+				});
+			},
+			requestOperate(method) {
+				let that = this
+				that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(()=>{
 					$.ajax({
-						url: baseUrl + "/crn/list/auth",
+						url: baseUrlWcs + "/crn/operator/" + method,
 						headers: {
 							'token': localStorage.getItem('token')
 						},
-						data: {},
-						dataType: 'json',
-						contentType: 'application/json;charset=UTF-8',
-						method: 'GET',
+						data: this.formParam,
+						method: 'POST',
 						success: function (res) {
-							that.tableData = res.data
+							if (res.code == 200) {
+								that.$message({
+									message: res.msg,
+									type: 'success'
+								});
+							} else {
+								that.$message({
+									message: res.msg,
+									type: 'error'
+								});
+							}
 						}
 					});
-				},
-				requestOperate(method) {
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/crn/operator/" + method,
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: this.formParam,
-							method: 'POST',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
+				})
 
-				},
-				updateEnableInOut(type) {
-					let that = this
-					let param = {}
-					if (type == "in") {
+			},
+			updateEnableInOut(type) {
+				let that = this
+				let param = {}
+				if (type == "in") {
+					param = {
+						inEnable: this.enableIn ? "Y" : "N",
+						crnNo: this.formParam.crnNo
+					}
+				} else {
+					param = {
+						outEnable: this.enableOut ? "Y" : "N",
+						crnNo: this.formParam.crnNo
+					}
+				}
+
+				$.ajax({
+					url: baseUrlWcs + "/basCrnp/update/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: param,
+					method: 'POST',
+					success: function (res) {
+						if (res.code == 200) {
+							that.$message({
+								message: res.msg,
+								type: 'success'
+							});
+						} else {
+							that.$message({
+								message: res.msg,
+								type: 'error'
+							});
+						}
+					}
+				});
+			},
+			updateDemo(type) {
+				let that = this
+				let param = {}
+				that.$confirm('灏嗗惎鍔ㄦ紨绀烘ā寮忥紝鏄惁缁х画','鎻愮ず',{
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(()=>{
+					if (type == "demo") {
 						param = {
-							inEnable: this.enableIn ? "Y" : "N",
+							hpMk: this.hpMkDemo ? "Y" : "N",
+							staOutDemo: this.formParam.staOutDemo,
+							staIntDemo: this.formParam.staIntDemo,
+							locMastDemo: this.formParam.locMastDemo,
+							locMastDemoCount: this.formParam.locMastDemoCount,
 							crnNo: this.formParam.crnNo
 						}
 					} else {
 						param = {
-							outEnable: this.enableOut ? "Y" : "N",
 							crnNo: this.formParam.crnNo
 						}
 					}
 
+
 					$.ajax({
-						url: baseUrl + "/basCrnp/update/auth",
+						url: baseUrlWcs + "/basCrnp/update/demo/auth",
 						headers: {
 							'token': localStorage.getItem('token')
 						},
@@ -331,10 +385,11 @@
 							}
 						}
 					});
-				}
+				})
 			}
-		})
-	</script>
+		}
+	})
+</script>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/src/main/webapp/views/deviceOperate/devpOperate.html b/src/main/webapp/views/deviceOperate/devpOperate.html
index db67b5f..14ca625 100644
--- a/src/main/webapp/views/deviceOperate/devpOperate.html
+++ b/src/main/webapp/views/deviceOperate/devpOperate.html
@@ -5,6 +5,7 @@
 	<meta charset="UTF-8">
 	<title>杈撻�佺珯鐐硅澶�</title>
 	<link rel="stylesheet" href="../../static/css/element.css">
+	<link rel="stylesheet" href="../../static/css/element-ui.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/vue.min.js"></script>
@@ -12,190 +13,217 @@
 </head>
 
 <body>
-	<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
-		<div style="width: 100%;">
-			<el-table border ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
-				max-height="450" style="width: 100%">
-				<el-table-column property="devNo" label="绔欏彿">
-				</el-table-column>
-				<el-table-column property="workNo" label="宸ヤ綔鍙�">
-				</el-table-column>
-				<el-table-column property="locType1" label="楂樹綆搴撲綅">
-				</el-table-column>
-				<el-table-column property="pakMk" label="鍏ュ簱鏍囪">
-				</el-table-column>
-				<el-table-column property="barcode" label="鏉$爜">
-				</el-table-column>
-			</el-table>
-		</div>
+<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
+	<div style="width: 100%;">
+		<el-table ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
+				  max-height="450" style="width: 100%">
+			<el-table-column property="devNo" label="绔欏彿">
+			</el-table-column>
+			<el-table-column property="workNo" label="宸ヤ綔鍙�">
+			</el-table-column>
+			<!--				<el-table-column property="locType1" label="楂樹綆搴撲綅">-->
+			<!--				</el-table-column>-->
+			<el-table-column property="pakMk" label="鍏ュ簱鏍囪">
+			</el-table-column>
+			<el-table-column property="pakMkRun" label="閫�鍥炴爣璁�">
+			</el-table-column>
+			<el-table-column property="pakMkTask" label="灏忚溅浠诲姟涓嬪彂鏍囪">
+			</el-table-column>
+			<el-table-column property="weight" label="绉伴噸">
+			</el-table-column>
+			<el-table-column property="barcode" label="鏉$爜">
+			</el-table-column>
+			<el-table-column property="errorDev" label="寮傚父鎻愮ず">
+			</el-table-column>
+		</el-table>
+	</div>
 
-		<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
-			<div style="width: 55%;margin-right: 10px;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix">
-						<span>璁惧璋冭瘯</span>
-					</div>
+	<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
+		<div style="width: 55%;margin-right: 10px;">
+			<el-card class="box-card">
+				<div slot="header" class="clearfix">
+					<span>璁惧璋冭瘯</span>
+				</div>
+				<div>
+					<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
+						<el-form-item label="宸ヤ綔鍙�">
+							<el-input v-model="formParam.workNo" placeholder="宸ヤ綔鍙�"></el-input>
+						</el-form-item>
+						<el-form-item label="鐩爣绔�">
+							<el-input v-model="formParam.staNo" placeholder="鐩爣绔�"></el-input>
+						</el-form-item>
+					</el-form>
+					<el-form label-position="top" :inline="true" class="demo-form-inline">
+						<el-form-item label="">
+							<el-checkbox v-model="formParam.inEnable">鍙叆</el-checkbox>
+						</el-form-item>
+						<el-form-item label="">
+							<el-checkbox v-model="formParam.outEnable">鍙嚭</el-checkbox>
+						</el-form-item>
+					</el-form>
 					<div>
-						<el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline">
-							<el-form-item label="宸ヤ綔鍙�">
-								<el-input v-model="formParam.workNo" placeholder="宸ヤ綔鍙�"></el-input>
-							</el-form-item>
-							<el-form-item label="鐩爣绔�">
-								<el-input v-model="formParam.staNo" placeholder="鐩爣绔�"></el-input>
-							</el-form-item>
-							<el-form-item label="鍏ュ簱鏍囪">
-								<el-input v-model="formParam.pakMk" placeholder="鍏ュ簱鏍囪"></el-input>
-							</el-form-item>
-						</el-form>
-						<el-form label-position="top" :inline="true" class="demo-form-inline">
-							<el-form-item label="">
-								<el-checkbox v-model="formParam.inEnable">鍙叆</el-checkbox>
-							</el-form-item>
-							<el-form-item label="">
-								<el-checkbox v-model="formParam.outEnable">鍙嚭</el-checkbox>
-							</el-form-item>
-						</el-form>
-						<div>
-							<el-button @click="requestOperate('update')" type="primary">鏇存柊</el-button>
-							<el-button @click="requestOperate('out')" type="warning">鍙栬揣瀹屾垚</el-button>
-							<el-button @click="requestOperate('in')" type="warning">鏀捐揣瀹屾垚</el-button>
-						</div>
+						<el-button @click="requestOperate('update')" type="primary">鏇存柊绔欑偣淇℃伅</el-button>
+						<!--							<el-button @click="requestOperate('in')" type="warning">鏀捐揣瀹屾垚</el-button>-->
 					</div>
-				</el-card>
-			</div>
-			<div style="width: 45%;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix">
-						<span>璁惧鐘舵��</span>
+					<div style="margin-top: 10px">
+						<el-button @click="requestOperate('pakMk')" type="warning">鍏ュ簱鏍囪澶嶄綅</el-button>
+						<el-button @click="requestOperate('pakMkRun')" type="warning">閫�搴撴爣璁板浣�</el-button>
+						<el-button @click="requestOperate('pakMkTask')" type="warning">灏忚溅浠诲姟涓嬪彂鏍囪澶嶄綅</el-button>
+						<el-button @click="requestOperate('pakMkWalk')" type="warning">WMS浠诲姟涓嬪彂鏍囪澶嶄綅</el-button>
 					</div>
-					<div>
-						<div v-if="currentIndex == null">
-							<el-empty description="璇烽�夋嫨璁惧"></el-empty>
-						</div>
-						<div v-else>
-							<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
-								<el-descriptions-item label="绔欑偣">{{ tableData[currentIndex].devNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="宸ヤ綔鍙�">
-									{{ tableData[currentIndex].workNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鑷姩">{{ tableData[currentIndex].autoing }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏈夌墿">{{ tableData[currentIndex].loading }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙叆">{{ tableData[currentIndex].inEnable }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙嚭">{{ tableData[currentIndex].outEnable }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍏ュ簱鏍囪">{{ tableData[currentIndex].pakMk }}
-								</el-descriptions-item>
-								<el-descriptions-item label="绌烘澘淇″彿">{{ tableData[currentIndex].emptyMk }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鐩爣绔�">{{ tableData[currentIndex].staNo }}
-								</el-descriptions-item>
-								<el-descriptions-item label="楂樹綆搴撲綅">{{ tableData[currentIndex].locType1 }}
-								</el-descriptions-item>
-							</el-descriptions>
-						</div>
+				</div>
+			</el-card>
+		</div>
+		<div style="width: 45%;">
+			<el-card class="box-card">
+				<div slot="header" class="clearfix">
+					<span>璁惧鐘舵��</span>
+				</div>
+				<div>
+					<div v-if="currentIndex == null">
+						<el-empty description="璇烽�夋嫨璁惧"></el-empty>
 					</div>
-				</el-card>
-			</div>
+					<div v-else>
+						<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
+							<el-descriptions-item label="绔欑偣">{{ tableData[currentIndex].devNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="宸ヤ綔鍙�">
+								{{ tableData[currentIndex].workNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鑷姩">
+								<el-tag>{{ tableData[currentIndex].autoing }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鏈夌墿">
+								<el-tag>{{ tableData[currentIndex].loading }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鍙叆">
+								<el-tag>{{ tableData[currentIndex].inEnable }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鍙嚭">
+								<el-tag>{{ tableData[currentIndex].outEnable }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="绌烘澘淇″彿">
+								<el-tag>{{ tableData[currentIndex].emptyMk }}</el-tag>
+							</el-descriptions-item>
+							<el-descriptions-item label="鐩爣绔�">{{ tableData[currentIndex].staNo }}
+							</el-descriptions-item>
+							<el-descriptions-item label="楂樹綆搴撲綅">{{ tableData[currentIndex].locType1 }}
+							</el-descriptions-item>
+							<el-descriptions-item label="閲嶉噺">{{ tableData[currentIndex].weight }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鏉$爜">{{ tableData[currentIndex].barcode }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍏ュ簱鏍囪">{{ tableData[currentIndex].pakMk }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍏ュ簱鍥為��鏍囪">{{ tableData[currentIndex].pakMkRun }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍏ュ簱灏忚溅浠诲姟涓嬪彂鏍囪">{{ tableData[currentIndex].pakMkTask }}
+							</el-descriptions-item>
+							<el-descriptions-item label="鍏ュ簱wms浠诲姟涓嬪彂鏍囪">{{ tableData[currentIndex].pakMkWalk }}
+							</el-descriptions-item>
+							<el-descriptions-item label="寮傚父鎻愮ず">{{ tableData[currentIndex].errorDev }}
+							</el-descriptions-item>
+						</el-descriptions>
+					</div>
+				</div>
+			</el-card>
 		</div>
 	</div>
-	<script>
-		var app = new Vue({
-			el: '#app',
-			data: {
-				tableData: [],
-				currentRow: null,
-				currentTitle: "鏈�夋嫨璁惧",
-				currentIndex: null,
-				formParam: {
-					devNo: null,
-					workNo: null,
-					staNo: null,
-					pakMk: null,
-					inEnable: false,
-					outEnable: false
-				}
-			},
-			created() {
-				this.init()
-			},
-			watch: {
+</div>
+<script>
+	var app = new Vue({
+		el: '#app',
+		data: {
+			tableData: [],
+			currentRow: null,
+			currentTitle: "鏈�夋嫨璁惧",
+			currentIndex: null,
+			formParam: {
+				devNo: null,
+				workNo: null,
+				staNo: null,
+				pakMk: null,
+				inEnable: false,
+				outEnable: false
+			}
+		},
+		created() {
+			this.init()
+		},
+		watch: {
 
-			},
-			methods: {
-				init() {
+		},
+		methods: {
+			init() {
+				this.getTableData()
+
+				setInterval(() => {
 					this.getTableData()
+				}, 1000)
+			},
+			handleRowClick(row, col, event) {
+				const index = this.tableData.indexOf(row)
+				this.currentRow = row;
+				this.currentIndex = index
+				this.currentTitle = row.devNo + "绔欑偣"
 
-					setInterval(() => {
-						this.getTableData()
-					}, 1000)
-				},
-				handleRowClick(row, col, event) {
-					const index = this.tableData.indexOf(row)
-					this.currentRow = row;
-					this.currentIndex = index
-					this.currentTitle = row.devNo + "绔欑偣"
-					
-					this.formParam.devNo = row.devNo
-					this.formParam.workNo = row.workNo
-					this.formParam.staNo = row.staNo
-					this.formParam.pakMk = row.pakMk
-					this.formParam.inEnable = row.inEnable == "Y" ? true : false
-					this.formParam.outEnable = row.outEnable == "Y" ? true : false
-				},
-				getTableData() {
-					let that = this;
+				this.formParam.devNo = row.devNo
+				this.formParam.workNo = row.workNo
+				this.formParam.staNo = row.staNo
+				this.formParam.pakMk = row.pakMk
+				this.formParam.inEnable = row.inEnable == "Y" ? true : false
+				this.formParam.outEnable = row.outEnable == "Y" ? true : false
+			},
+			getTableData() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/site/list/auth",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'GET',
+					success: function (res) {
+						that.tableData = res.data
+					}
+				});
+			},
+			requestOperate(method) {
+				let that = this
+				that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(()=>{
 					$.ajax({
-						url: baseUrl + "/site/list/auth",
+						url: baseUrlWcs + "/site/detl/"+method,
 						headers: {
 							'token': localStorage.getItem('token')
 						},
-						data: {},
-						dataType: 'json',
-						contentType: 'application/json;charset=UTF-8',
-						method: 'GET',
+						data: this.formParam,
+						method: 'POST',
 						success: function (res) {
-							that.tableData = res.data
+							if (res.code == 200) {
+								that.$message({
+									message: res.msg,
+									type: 'success'
+								});
+							} else {
+								that.$message({
+									message: res.msg,
+									type: 'error'
+								});
+							}
 						}
 					});
-				},
-				requestOperate(method) {
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/site/detl/"+method,
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: this.formParam,
-							method: 'POST',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
+				})
 
-				}
 			}
-		})
-	</script>
+		}
+	})
+</script>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/src/main/webapp/views/deviceOperate/extOperate.html b/src/main/webapp/views/deviceOperate/extOperate.html
deleted file mode 100644
index aad6222..0000000
--- a/src/main/webapp/views/deviceOperate/extOperate.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-	<meta charset="UTF-8">
-	<title>Ext璁惧</title>
-	<link rel="stylesheet" href="../../static/css/element.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/vue.min.js"></script>
-	<script type="text/javascript" src="../../static/js/element.js"></script>
-</head>
-
-<body>
-	<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
-		<div style="width: 100%;">
-			<el-table border ref="singleTable" :data="tableData" highlight-current-row
-					  max-height="450" style="width: 100%">
-				<el-table-column property="devNo" label="鏈烘鑷傜紪鍙�">
-				</el-table-column>
-				<el-table-column property="inEnable" label="鍏佽鍙�">
-				</el-table-column>
-				<el-table-column property="outEnable" label="鍏佽鏀�">
-				</el-table-column>
-			</el-table>
-		</div>
-	</div>
-	<script>
-		var app = new Vue({
-			el: '#app',
-			data: {
-				tableData: [],
-			},
-			created() {
-				this.init()
-			},
-			watch: {
-
-			},
-			methods: {
-				init() {
-					this.getTableData()
-
-					setInterval(() => {
-						this.getTableData()
-					}, 1000)
-				},
-				getTableData() {
-					let that = this;
-					$.ajax({
-						url: baseUrl + "/site/list/ext/auth",
-						headers: {
-							'token': localStorage.getItem('token')
-						},
-						data: {},
-						dataType: 'json',
-						contentType: 'application/json;charset=UTF-8',
-						method: 'GET',
-						success: function (res) {
-							console.log(res)
-							that.tableData = res.data
-						}
-					});
-				}
-			}
-		})
-	</script>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/deviceOperate/jarOperate.html b/src/main/webapp/views/deviceOperate/jarOperate.html
deleted file mode 100644
index 2733b32..0000000
--- a/src/main/webapp/views/deviceOperate/jarOperate.html
+++ /dev/null
@@ -1,688 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-	<meta charset="UTF-8">
-	<title>纭寲缃愯澶�</title>
-	<link rel="stylesheet" href="../../static/css/element.css">
-	<link rel="stylesheet" href="../../static/css/element-ui.css">
-	<link rel="icon" href="../../static/images/favicon.ico" type="image/x-icon">
-	<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/vue.min.js"></script>
-	<script type="text/javascript" src="../../static/js/element.js"></script>
-</head>
-<style scoped>
-	.floating-layer {
-		position: fixed;
-		top: 50%; /* 灞呬腑鏄剧ず */
-		left: 50%; /* 灞呬腑鏄剧ず */
-		transform: translate(-50%, -50%); /* 灞呬腑璋冩暣 */
-		background-color: #fff;
-		border: 2px solid #007bff; /* 浣跨敤鏇存槑鏄剧殑杈规棰滆壊 */
-		padding: 20px;
-		box-shadow: 0 4px 8px rgba(0,0,0,0.2);
-		border-radius: 8px;
-		z-index: 1000; /* 纭繚鍦ㄥ叾浠栧厓绱犱箣涓� */
-		width: 300px; /* 璁剧疆鍥哄畾瀹藉害浠ヤ繚鎸佹暣娲� */
-		text-align: center; /* 鍐呭灞呬腑 */
-	}
-
-	.layer-title {
-		margin-bottom: 15px;
-		font-size: 18px;
-		font-weight: bold;
-		color: #007bff; /* 涓庤竟妗嗛鑹茬浉鍛煎簲 */
-	}
-
-	.radio-list {
-		display: flex;
-		flex-direction: column;
-		align-items: center; /* 鍗曢�夋寜閽眳涓� */
-	}
-
-	.radio-item {
-		margin-bottom: 10px;
-		display: flex;
-		align-items: center;
-		justify-content: center; /* 姘村钩灞呬腑 */
-		width: 100%; /* 浣挎瘡涓崟閫夋寜閽」鍗犳嵁鏁翠釜瀹藉害 */
-	}
-
-	.radio-button {
-		margin-right: 10px;
-		transform: scale(1.2); /* 鏀惧ぇ鍗曢�夋寜閽互浣垮叾鏇村姞鏄庢樉 */
-	}
-
-	.radio-label {
-		font-size: 16px;
-		cursor: pointer;
-		user-select: none;
-		color: #333; /* 浣跨敤娣辫壊璋冧互鎻愰珮鍙鎬� */
-	}
-
-	/* 鍙�夌殑鍔ㄧ敾鏁堟灉 */
-	.floating-layer {
-		opacity: 0;
-		transform: translate(-50%, -50%) scale(0.8);
-		transition: opacity 0.3s, transform 0.3s;
-	}
-
-	.floating-layer.show {
-		opacity: 1;
-		transform: translate(-50%, -50%) scale(1);
-	}
-	/* 鎮ㄩ渶瑕佸湪 Vue 涓帶鍒� 'show' 绫荤殑娣诲姞鍜岀Щ闄� */
-</style>
-
-<body>
-	<div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;">
-		<div style="width: 100%;">
-			<el-table border ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick"
-				max-height="350" style="width: 100%">
-				<el-table-column property="jarNo" label="纭寲缃�">
-				</el-table-column>
-<!--				<el-table-column property="workNo" label="宸ヤ綔鍙�">-->
-<!--				</el-table-column>-->
-				<el-table-column property="jarStatus" label="鐘舵��">
-				</el-table-column>
-				<el-table-column property="jarMode" label="妯″紡">
-				</el-table-column>
-				<el-table-column property="jarTemperature$" label="娓╁害">
-				</el-table-column>
-				<el-table-column property="jarPressure$" label="鍘嬪姏">
-				</el-table-column>
-				<el-table-column property="jarCount$" label="鏈�澶у偍閲�">
-				</el-table-column>
-				<el-table-column property="jarErr" label="寮傚父浠g爜">
-				</el-table-column>
-				<el-table-column label="鎿嶄綔">
-					<template>
-						<el-popconfirm
-								confirm-button-text="Yes"
-								cancel-button-text="No"
-								title="纭畾瑕佷慨鏀规渶澶у偍閲忓悧?璇风‘淇濈綈鍐呮暟閲忓ぇ浜庣瓑浜庝慨鏀瑰�硷紒锛侊紒"
-								@confirm="confirmEvent"
-								@cancel="cancelEvent"
-						>
-							<template #reference>
-								<el-button>淇敼鏈�澶у偍閲�</el-button>
-							</template>
-						</el-popconfirm>
-					</template>
-<!--						<el-button style="" type="primary" plain size="medium" @click="confirmEvent()">淇敼</el-button>-->
-				</el-table-column>
-			</el-table>
-		</div>
-		<template>
-			<div v-if="valueUpdate" :class="['floating-layer', { show: showLayer }]">
-				<h3 class="layer-title">璇烽�夋嫨淇敼鐩爣鍊�</h3> <!-- 娣诲姞鏍囬浠ユ彁楂樺彲璇绘�� -->
-				<div class="radio-list">
-					<div
-							v-for="option in optionsUpdate"
-							:key="option.value"
-							class="radio-item"
-					>
-						<input
-								type="radio"
-								:value="option.value"
-								v-model="selectedOption"
-								@change="handleSubmit"
-								class="radio-button"
-						/>
-						<label class="radio-label">{{ option.text }}</label>
-					</div>
-				</div>
-			</div>
-		</template>
-		<div style="width: 100%;display: flex;justify-content: center;margin-top: 10px;">
-			<div style="width: 55%;margin-right: 10px;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix" style="display: flex;justify-content: space-between;align-items: center">
-						<span>纭寲搴撲綅</span>
-						<el-button style="" type="primary" plain size="medium" @click="historicalTasks()">鍘嗗彶浠诲姟</el-button>
-					</div>
-					<div v-if="currentIndex == null">
-						<el-empty description="璇烽�夋嫨璁惧"></el-empty>
-					</div>
-					<div v-else>
-						<el-table border :data="itemMast" highlight-current-row max-height="400" style="width: 100%">
-							<el-table-column property="id" label="搴忓彿">
-							</el-table-column>
-							<el-table-column property="jarWrkNo" label="宸ヤ綔鍙�">
-							</el-table-column>
-							<el-table-column property="status$" label="鐘舵��">
-							</el-table-column>
-							<el-table-column property="matnr" label="鐗╂枡鐮�">
-							</el-table-column>
-							<el-table-column property="maktx" label="鐗╂枡鍚嶇О">
-							</el-table-column>
-							<el-table-column property="weight" label="閲嶉噺">
-							</el-table-column>
-						</el-table>
-					</div>
-
-				</el-card>
-			</div>
-			<div style="width: 45%;">
-				<el-card class="box-card">
-					<div slot="header" class="clearfix">
-						<span>璁惧鐘舵��</span>
-					</div>
-					<div>
-						<div v-if="currentIndex == null">
-							<el-empty description="璇烽�夋嫨璁惧"></el-empty>
-						</div>
-						<div v-else>
-							<el-descriptions :title="currentTitle" direction="vertical" :column="4" border>
-<!--								<el-descriptions-item label="纭寲缃�">{{ tableData[currentIndex].jarNo }}-->
-<!--								</el-descriptions-item>-->
-								<el-descriptions-item label="鍖哄煙">{{ tableData[currentIndex].region }}
-								</el-descriptions-item>
-								<el-descriptions-item label="浠e彿">{{ tableData[currentIndex].jarCode }}
-								</el-descriptions-item>
-<!--								<el-descriptions-item label="妯″紡">-->
-<!--									<el-tag>{{ tableData[currentIndex].jarMode }}</el-tag>-->
-<!--								</el-descriptions-item>-->
-<!--								<el-descriptions-item label="璁惧鐘舵��">-->
-<!--									<el-tag>{{ tableData[currentIndex].jarStatus }}</el-tag>-->
-<!--								</el-descriptions-item>-->
-								<el-descriptions-item label="宸﹂棬">{{ tableData[currentIndex].leftDoor }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙抽棬">{{ tableData[currentIndex].rightDoor }}
-								</el-descriptions-item>
-								<el-descriptions-item label="宸﹂棬鍙紑">{{ tableData[currentIndex].leftInEnable }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙抽棬鍙紑">{{ tableData[currentIndex].leftOutEnable }}
-								</el-descriptions-item>
-								<el-descriptions-item label="宸﹂棬鍙叧">{{ tableData[currentIndex].rightInEnable }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙抽棬鍙叧">{{ tableData[currentIndex].rightOutEnable }}
-								</el-descriptions-item>
-
-<!--								<el-descriptions-item label="娓╁害">{{ tableData[currentIndex].jarTemperature$ }}-->
-<!--								</el-descriptions-item>-->
-<!--								<el-descriptions-item label="鍘嬪姏">{{ tableData[currentIndex].jarPressure$ }}-->
-<!--								</el-descriptions-item>-->
-<!--								<el-descriptions-item label="鏈�澶у偍閲�">{{ tableData[currentIndex].jarCount$ }}-->
-<!--								</el-descriptions-item>-->
-<!--								<el-descriptions-item label="鏁呴殰浠g爜">{{ tableData[currentIndex].jarErr }}-->
-<!--								</el-descriptions-item>-->
-								<el-descriptions-item label="宸﹂棬寮�闂ㄧ姸鎬�">{{ tableData[currentIndex].leftDoorOpen }}
-								</el-descriptions-item>
-								<el-descriptions-item label="宸﹂棬鍏抽棬鐘舵��">{{ tableData[currentIndex].leftDoorClose }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙抽棬寮�闂ㄧ姸鎬�">{{ tableData[currentIndex].rightDoorOpen }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鍙抽棬鍏抽棬鐘舵��">{{ tableData[currentIndex].rightDoorClose }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏈�杩戜竴娆′繚娓╂椂闂�">{{ tableData[currentIndex].holdingTime }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏈�杩戜竴娆″紑闂ㄦ椂闂�">{{ tableData[currentIndex].openTime }}
-								</el-descriptions-item>
-								<el-descriptions-item label="鏈�杩戜竴娆″叧闂ㄦ椂闂�">{{ tableData[currentIndex].closeTime }}
-								</el-descriptions-item>
-							</el-descriptions>
-
-						</div>
-					</div>
-				</el-card>
-			</div>
-		</div>
-
-	</div>
-	<script>
-		var app = new Vue({
-			el: '#app',
-			data: {
-				showLayer: false,
-				valueUpdate: false,
-				selectedOption: null,
-				updateJarNo: null,
-				optionsUpdate: [
-					{ id: '1', value: '1', text: '1鎵�' },
-					{ id: '2', value: '2', text: '2鎵�' },
-					{ id: '3', value: '3', text: '3鎵�' },
-					{ id: '4', value: '4', text: '4鎵�' },
-					{ id: '5', value: '5', text: '5鎵�' },
-					{ id: '6', value: '6', text: '6鎵�' },
-					{ id: '7', value: '7', text: '7鎵�' },
-					{ id: '999', value: '999', text: '鍙栨秷' },
-				],
-				tableData: [],
-				currentRow: null,
-				currentTitle: "鏈�夋嫨璁惧",
-				currentIndex: null,
-				formParam: {
-					rgvNo: null,
-					sourceStaNo: null,
-					sourceRow: 1,
-					sourceBay: 0,
-					sourceLev: 1,
-					staNo: null,
-					row: 1,
-					bay: 0,
-					lev: 1,
-					barcode:null,
-					barcodeType:null,
-					emptyContainer:null
-				},
-				formParamD: {
-					rgvNo: null,
-					sourceStaNo: null,
-					sourceRow: 1,
-					sourceBay: 0,
-					sourceLev: 1,
-					staNo: null,
-					row: 1,
-					bay: 0,
-					lev: 1,
-					barcode:null,
-					barcodeType:null,
-					emptyContainer:null
-				},
-				enableIn: false,
-				enableOut: false,
-				options:[
-					{
-						value:'1',
-						label:'鏄�'
-					},
-					{
-						value:'0',
-						label:'鍚�'
-					}
-				],
-				demo: 'X',
-				rgvMode: 0,
-				itemMast: []
-			},
-			created() {
-				this.init()
-			},
-			watch: {
-				valueUpdate(newVal) {
-					if (newVal) {
-						this.showLayer = true;
-						// 鍙互鍦ㄨ繖閲屾坊鍔犲欢鏃跺叧闂眰鎴栧叾浠栭�昏緫
-					}
-				},
-			},
-			methods: {
-				historicalTasks(){
-					let that = this
-					that.selectedOption = 0;
-					that.valueUpdate = false;
-					if (that.currentIndex != null){
-						$.ajax({
-							url: baseUrl + "/basJarMastLog/historicalTasks/auth",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data:{
-								id: that.tableData[that.currentIndex].jarNo
-							},
-							success: function (res) {
-								that.itemMast = res.data
-								// console.log(that.itemMast)
-							}
-						});
-					}
-
-				},
-				staTova(sta,end){
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/rgv/rgvDemoTask",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data:{
-								rgvNo : this.formParam.rgvNo,
-								sta : sta,
-								end : end
-							},
-							method: 'Get',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-				},
-				init() {
-					this.getTableData()
-
-					setInterval(() => {
-						this.getTableData()
-						// this.demoStatus()
-					}, 1000)
-				},
-				confirmEvent() {
-					var that = this
-					that.valueUpdate = true;
-				},
-				cancelEvent() {
-					var that = this
-					that.valueUpdate = false;
-				},
-				handleSubmit() {
-					if ( this.selectedOption > 998 ){
-						this.selectedOption = 0;
-						this.valueUpdate = false;
-					} else if ( this.selectedOption > 0 ){
-						var that = this
-						if (that.updateJarNo == null){
-							console.log("this.updateJarNo;null;null;null;null;null")
-						} else {
-							$.ajax({
-								url: baseUrl + "/basJar/update/uodate/jar/count/auth",
-								headers: {
-									'token': localStorage.getItem('token')
-								},
-								data: {
-									jarCount: that.selectedOption,
-									jarNo: that.updateJarNo
-								},
-								success: function (res) {
-									if (res.code == 200) {
-										that.$message({
-											message: res.msg,
-											type: 'success'
-										});
-									} else {
-										that.$message({
-											message: res.msg,
-											type: 'error'
-										});
-									}
-								}
-							});
-						}
-						this.selectedOption = 0;
-						this.valueUpdate = false;
-					}
-				},
-				handleRowClick(row, col, event) {
-					var that = this
-					const index = that.tableData.indexOf(row)
-					that.currentRow = row;
-					that.currentIndex = index
-					this.updateJarNo = row.jarNo
-					that.currentTitle = row.jarNo + "鍙风~鍖栫綈"
-					that.formParam.rgvNo = row.rgvNo
-					that.enableIn = row.inEnable == "Y" ? true : false
-					that.enableOut = row.outEnable == "Y" ? true : false
-					this.selectedOption = 0;
-					this.valueUpdate = false;
-
-					$.ajax({
-						url: baseUrl + "/basJarMast/JatId/auth",
-						headers: {
-							'token': localStorage.getItem('token')
-						},
-						data: {
-							id: row.jarNo
-						},
-						success: function (res) {
-							that.itemMast = res.data
-							// console.log(that.itemMast)
-						}
-					});
-				},
-				getTableData() {
-					let that = this;
-					$.ajax({
-						url: baseUrl + "/table/jar/state",
-						headers: {
-							'token': localStorage.getItem('token')
-						},
-						data: {},
-						dataType: 'json',
-						contentType: 'application/json;charset=UTF-8',
-						method: 'post',
-						success: function (res) {
-							that.tableData = res.data
-						}
-					});
-				},
-				demoStatus() {
-					let that = this;
-					$.ajax({
-						url: baseUrl + "/rgv/demo/status",
-						data:{
-							rgvNo : this.formParam.rgvNo
-						},
-						headers: {
-							'token': localStorage.getItem('token')
-						},
-						contentType: 'application/json;charset=UTF-8',
-						method: 'get',
-						success: function (res) {
-							// console.log(res)
-							that.demo = res.data.demo
-							that.rgvMode = res.data.rgvMode
-						}
-					});
-				},
-				initiate(){
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/rgv/operator/put",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: this.formParam,
-							method: 'POST',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-				},
-				initiateD(method){
-					let urlS = "/rgv/operator/single/step/three/put";
-					if (method===1){
-						urlS = "/rgv/operator/single/step/one/put";
-					}else if (method === 2){
-						urlS = "/rgv/operator/single/step/two/put";
-					}else if (method === 3){
-						urlS = "/rgv/operator/single/step/three/put";
-					}
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + urlS,
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: this.formParam,
-							method: 'POST',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-				},
-				demos(method){
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/rgv/demo/status/" + method,
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data:{
-								rgvNo : this.formParam.rgvNo
-							},
-							method: 'Get',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-				},
-				rgvStatus(method){
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/rgv/demo/status/rgvStatus",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data:{
-								rgvNo : this.formParam.rgvNo,
-								status : Number(method)
-							},
-							method: 'Get',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-				},
-				requestOperate(method) {
-					let that = this
-					that.$confirm('姝ゆ搷浣滃瓨鍦ㄩ闄╋紝鏄惁缁х画','鎻愮ず',{
-						confirmButtonText: '纭畾',
-						cancelButtonText: '鍙栨秷',
-						type: 'warning'
-					}).then(()=>{
-						$.ajax({
-							url: baseUrl + "/rgv/operator/" + method,
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: this.formParam,
-							method: 'POST',
-							success: function (res) {
-								if (res.code == 200) {
-									that.$message({
-										message: res.msg,
-										type: 'success'
-									});
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					})
-
-				},
-				updateEnableInOut(type) {
-					let that = this
-					let param = {}
-					if (type == "in") {
-						param = {
-							inEnable: this.enableIn ? "Y" : "N",
-							rgvNo: this.formParam.rgvNo
-						}
-					} else {
-						param = {
-							outEnable: this.enableOut ? "Y" : "N",
-							rgvNo: this.formParam.rgvNo
-						}
-					}
-
-					$.ajax({
-						url: baseUrl + "/basCrnp/update/auth",
-						headers: {
-							'token': localStorage.getItem('token')
-						},
-						data: param,
-						method: 'POST',
-						success: function (res) {
-							if (res.code == 200) {
-								that.$message({
-									message: res.msg,
-									type: 'success'
-								});
-							} else {
-								that.$message({
-									message: res.msg,
-									type: 'error'
-								});
-							}
-						}
-					});
-				}
-			}
-		})
-	</script>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/deviceOperate/rgvOperate.html b/src/main/webapp/views/deviceOperate/rgvOperate.html
index e9b8c3a..9389b8d 100644
--- a/src/main/webapp/views/deviceOperate/rgvOperate.html
+++ b/src/main/webapp/views/deviceOperate/rgvOperate.html
@@ -105,7 +105,6 @@
     var app = new Vue({
         el: '#app',
         data: {
-            baseUrlWcs: "http://127.0.0.1:9090/zzgtwcs",
             tableData: [],
             taskAllData: [],
             currentRow: null,
@@ -148,7 +147,7 @@
             getTaskAllData(index) {
                 let that = this;
                 $.ajax({
-                    url: that.baseUrlWcs + "/rgv/task/cache/all",
+                    url: baseUrlWcs + "/rgv/task/cache/all",
                     headers: {
                         'token': localStorage.getItem('token')
                     },
@@ -163,7 +162,7 @@
                 let that = this;
                 // console.log("鉁� 鍑嗗璇锋眰:");
                 $.ajax({
-                    url: that.baseUrlWcs + "/rgv/status/all",
+                    url: baseUrlWcs + "/rgv/status/all",
                     headers: {
                         'token': localStorage.getItem('token') || '' // 纭繚token涓嶄负null
                     },
@@ -221,7 +220,7 @@
                     type: 'warning'
                 }).then(()=>{
                     $.ajax({
-                        url: that.baseUrlWcs + "/rgv/run/"+method,
+                        url: baseUrlWcs + "/rgv/run/"+method,
                         headers: {
                             'token': localStorage.getItem('token')
                         },
diff --git a/src/main/webapp/views/deviceOperate/wcsOperate.html b/src/main/webapp/views/deviceOperate/wcsOperate.html
new file mode 100644
index 0000000..816c4f5
--- /dev/null
+++ b/src/main/webapp/views/deviceOperate/wcsOperate.html
@@ -0,0 +1,829 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<title>鐜舰绌挎杞︽櫤鑳界郴缁�</title>
+	<link rel="icon" href="../../static/images/favicon.ico" type="image/x-icon">
+
+	<link rel="stylesheet" href="../../static/css/element.css">
+	<link rel="stylesheet" href="../../static/css/indexHCDD.css">
+	<link rel="stylesheet" href="../../static/css/element-ui.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/vue.min.js"></script>
+	<script type="text/javascript" src="../../static/js/element.js"></script>
+	<script type="text/javascript" src="../../static/js/testPosition.js"></script>
+</head>
+<body >
+<div class="tech-background">
+	<div class="grid-overlay"></div>
+	<div class="glow-effect"></div>
+	<div class="particles-container" id="particles-container"></div>
+</div>
+<div id="app">
+	<div  class="map">
+		<div class="system-control-panel">
+			<div class="system-status">
+				<div class="status-indicator" :class="valueSystem ? 'status-running' : 'status-stopped'"></div>
+				<span class="status-text">{{ valueSystem ? '绯荤粺杩愯涓�' : '绯荤粺宸插仠姝�' }}</span>
+			</div>
+			<div class="custom-switch">
+				<el-switch
+						v-model="valueSystem"
+						active-color="#13ce66"
+						inactive-color="#A64036"
+						@change='upDateValueSystem'>
+				</el-switch>
+			</div>
+		</div>
+
+		<div class="license-info" :class="getLicenseClass()"  v-if="licenseDayI <=30">
+			<span class="license-icon">馃搫</span>
+			{{ licenseDay }}
+		</div>
+		<!--        <div class="inner-ring"></div>-->
+		<!--        <div class="outer-ring"></div>-->
+		<!--            <div v-for="track in energyGatheringRing" class="inner-ring" :style="{  borderColor: track.trackColor , boxShadow :  'inset 0 0 30px '+track.radiationColor+', 0 0 20px '+track.radiationColor}"></div>-->
+		<!--            <div v-for="track in energyGatheringRing" class="outer-ring" :style="{  borderColor: track.trackColor , boxShadow :  'inset 0 0 30px '+track.radiationColor+', 0 0 20px '+track.radiationColor}"></div>-->
+		<svg class="container"
+			 viewBox="0 0 1200 850"
+			 preserveAspectRatio="xMidYMid meet">
+			<path d="M 1200,750
+                        L 1200,100
+                        C 1200,100 1200,50 1150,50
+                        C 1150,50 1100,50 1100,100
+                        L 1100,700
+                        C 1100,700 1100,750 1050,750
+                        L 60,750
+                        C 60,750 10,750 10,800
+                        C 10,800 10,850 60,850
+                        L 1100,850
+                        C 1100,850 1200,850 1200,750"
+				  style="fill:none; stroke:blue; stroke-width:3; stroke-dasharray:10,1;"/>
+		</svg>
+
+		<div v-for="station in tableDataDev" class="station" :style="{
+                top: convertToCSSPosition(station.valueX, station.valueY).y + 'px',
+                left: convertToCSSPosition(station.valueX, station.valueY).x + 'px',
+                backgroundColor: station.modeColor}">
+			<div class="corner corner-tl"></div>
+			<div class="corner corner-tr"></div>
+			<div class="corner corner-bl"></div>
+			<div class="corner corner-br"></div>
+			{{ station.index }}
+		</div>
+
+		<!-- Buses -->
+		<div v-for="bus in tableDataRgv" class="bus" :style="{
+                top: convertToCSSPositionWithOffset(bus.valueX, bus.valueY).y + 'px',
+                left: convertToCSSPositionWithOffset(bus.valueX, bus.valueY).x + 'px',
+                animation: 'pulse ' +  bus.animation + 's infinite',
+                borderColor: bus.modeColor, backgroundColor: bus.statusColor}">{{ bus.index }}
+		</div>
+
+	</div>
+
+	<!-- Left Task Bar -->
+	<div class="task-bar-left left-task-bar" >
+		<div>
+			<el-tooltip :content="'Switch value: ' + valueLeft" placement="top">
+				<el-switch
+						v-model="valueLeft"
+						active-color="#13ce66"
+						inactive-color="#ff4949"
+						active-value="100"
+						inactive-value="0">
+				</el-switch>
+			</el-tooltip>
+		</div>
+		<div v-if="valueLeft === '100' " class="task-bar-div1">
+			<el-table
+					:data="tableDataLeft"
+					style="width: 100%"
+					:row-class-name="tableRowClassName">
+				<el-table-column
+						prop="wrkNo"
+						label="宸ヤ綔鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="rgvNo"
+						label="RGV鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="wrkSts$"
+						label="宸ヤ綔鐘舵��">
+				</el-table-column>
+				<el-table-column
+						prop="sourceStaNo"
+						label="婧愮珯">
+				</el-table-column>
+				<el-table-column
+						prop="staNo"
+						label="鐩爣绔�">
+				</el-table-column>
+				<el-table-column
+						prop="modiTime"
+						label="涓嬪彂鏃堕棿">
+				</el-table-column>
+				<el-table-column
+						prop="crnStrTime"
+						label="寮�濮嬫墽琛屾椂闂�">
+				</el-table-column>
+				<el-table-column
+						prop="crnEndTime"
+						label="鎵ц缁撴潫鏃堕棿">
+				</el-table-column>
+				<!--                    <el-table-column-->
+				<!--                            prop="modiTime"-->
+				<!--                            label="鏇存柊鏃堕棿">-->
+				<!--                    </el-table-column>-->
+				<el-table-column
+						prop="rgvSts"
+						label="RGV鐘舵��">
+				</el-table-column>
+				<el-table-column
+						label="鎿嶄綔"
+						type="template">
+					<template slot-scope="scope">
+						<el-button
+								type="danger"
+								size="small"
+								@click.native="taskDelete(scope.row)">
+							鍒犻櫎
+						</el-button>
+					</template>
+				</el-table-column>
+				<el-table-column
+						label="鎿嶄綔"
+						type="template">
+					<template slot-scope="scope">
+						<el-button
+								type="danger"
+								size="small"
+								@click.native="taskDelete1(scope.row)">
+							鍒濆鍖�
+						</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+		</div>
+	</div>
+	<div class="task-bar-left1 left-task-bar" >
+		<div>
+			<el-tooltip :content="'Switch value: ' + valueLeft1" placement="top">
+				<el-switch
+						v-model="valueLeft1"
+						active-color="#13ce66"
+						inactive-color="#ff4949"
+						active-value="100"
+						inactive-value="0">
+				</el-switch>
+			</el-tooltip>
+		</div>
+		<div v-if="valueLeft1 === '100' " class="task-bar-div1">
+			<el-table
+					:data="tableDataLeft1"
+					style="width: 100%"
+					:row-class-name="tableRowClassName">
+				<el-table-column
+						prop="wrkNo1"
+						label="宸ヤ綔鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="rgvNo"
+						label="RGV鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="sendTime"
+						label="涓嬪彂鏃堕棿">
+				</el-table-column>
+				<el-table-column
+						prop="mode"
+						label="绫诲瀷">
+				</el-table-column>
+				<el-table-column
+						prop="sourceSta"
+						label="璧风偣">
+				</el-table-column>
+				<el-table-column
+						prop="posSta"
+						label="缁堢偣">
+				</el-table-column>
+			</el-table>
+		</div>
+	</div>
+
+	<!-- Right Task Bar -->
+	<div class="task-bar-right right-task-bar">
+		<div>
+			<el-tooltip :content="'Switch value: ' + valueRight" placement="top">
+				<el-switch
+						v-model="valueRight"
+						active-color="#13ce66"
+						inactive-color="#ff4949"
+						active-value="100"
+						inactive-value="0">
+				</el-switch>
+			</el-tooltip>
+		</div>
+		<div v-if="valueRight === '100' " class="task-bar-div1">
+			<el-table
+					:data="tableDataRight"
+					style="width: 100%"
+					:row-class-name="tableRowClassName">
+				<el-table-column
+						prop="rgvId"
+						label="缂栧彿"
+						width="80">
+				</el-table-column>
+				<el-table-column
+						prop="rgvNo"
+						label="灏忚溅鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="position"
+						label="浣嶇疆">
+				</el-table-column>
+				<el-table-column
+						prop="status$"
+						label="鐘舵��">
+				</el-table-column>
+				<el-table-column
+						prop="error$"
+						label="寮傚父">
+				</el-table-column>
+				<el-table-column
+						label="鎿嶄綔"
+						type="template">
+					<template slot-scope="scope">
+						<el-button
+								:type="scope.row.status === 0 ? 'primary' : 'danger'"
+								size="small"
+								@click="toggleStatus(scope.$index, scope.row)">
+							{{ scope.row.status === 0 ? '绂佺敤' : '瑙i櫎绂佺敤' }}
+						</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+		</div>
+	</div>
+	<div class="task-bar-right1 right-task-bar">
+		<div>
+			<el-tooltip :content="'Switch value: ' + valueRight1" placement="top">
+				<el-switch
+						v-model="valueRight1"
+						active-color="#13ce66"
+						inactive-color="#ff4949"
+						active-value="100"
+						inactive-value="0">
+				</el-switch>
+			</el-tooltip>
+		</div>
+		<div v-if="valueRight1 === '100' " class="task-bar-div1">
+			<el-table
+					:data="tableDataRight1"
+					style="width: 100%"
+					:row-class-name="tableRowClassName">
+				<el-table-column
+						prop="rgvNo"
+						label="灏忚溅鍙�">
+				</el-table-column>
+				<el-table-column
+						prop="error"
+						label="寮傚父">
+				</el-table-column>
+				<el-table-column
+						prop="createTime$"
+						label="璁板綍鏃ユ湡">
+				</el-table-column>
+			</el-table>
+		</div>
+	</div>
+</div>
+
+<script>
+	// 鍦╒ue瀹炰緥澶栨坊鍔犵矑瀛愮敓鎴愬嚱鏁�
+	function createParticles() {
+		const container = document.getElementById('particles-container');
+		const particleCount = 30;
+
+		for (let i = 0; i < particleCount; i++) {
+			const particle = document.createElement('div');
+			particle.classList.add('particle');
+
+			// 闅忔満澶у皬鍜屼綅缃�
+			const size = Math.random() * 3 + 1;
+			const posX = Math.random() * 100;
+			const posY = Math.random() * 100;
+			const delay = Math.random() * 15;
+
+			particle.style.width = `${size}px`;
+			particle.style.height = `${size}px`;
+			particle.style.left = `${posX}vw`;
+			particle.style.top = `${posY}vh`;
+			particle.style.animationDelay = `${delay}s`;
+
+			container.appendChild(particle);
+		}
+	}
+
+	// 椤甸潰鍔犺浇瀹屾垚鍚庡垱寤虹矑瀛�
+	document.addEventListener('DOMContentLoaded', createParticles);
+	// 鍦╒ue瀹炰緥澶栬幏鍙朾ody灏哄
+	function getBodySize() {
+		return {
+			width: document.body.clientWidth,
+			height: document.body.clientHeight
+		};
+	}
+	var app = new Vue({
+		el: '#app',
+		data: {
+			containerSize: { width: 0, height: 0},
+			bodySize: { width: 0, height: 0 },
+			activeNames: ['1'],
+			valueLeft: '0',
+			valueLeft1: '0',
+			valueRight: '0',
+			valueRight1: '0',
+			licenseDay: '宸茶繃鏈�',
+			licenseDayI: 100,
+			valueSystem: false,
+			tableDataRgv: [],
+			tableDataDev: [],
+			energyGatheringRing: [],
+			tableDataLeft: [],
+			tableDataLeft1: [],
+			tableDataRight: [],
+			tableDataRight1: []
+		},
+		created(){
+			this.init();
+		},
+		watch: {
+
+		},
+
+		// 鍦� mounted 涓垵濮嬪寲灏哄鍜岀洃鍚�
+		mounted() {
+			this.updateContainerSize();
+			this.updateBodySize();
+			window.addEventListener('resize', this.handleResize);
+		},
+		beforeDestroy() {
+			window.removeEventListener('resize', this.handleResize);
+		},
+		computed: {
+			mappedStations() {
+				return this.tableDataDev.map(station => ({
+					...station,
+					position: this.convertToCSSPosition(station.valueX, station.valueY)
+				}));
+			}
+		},
+		methods: {
+			init(){
+				this.getTableDataRgv()
+				this.getTableDataDev()
+				this.getTableDataTrack()
+				this.getTableDataLeft()
+				this.getTableDataLeft1()
+				this.getTableDataRight()
+				this.getTableDataRight1()
+				this.getValueSystem()
+				this.getLicenseDays()
+
+				// 楂橀鏇存柊锛氬皬杞﹀拰璁惧浣嶇疆锛�1.5绉掞級
+				setInterval(() => {
+					this.getTableDataRgv()
+				}, 1000)
+
+				// 楂橀鏇存柊锛氬疄鏃朵换鍔″垪琛ㄧ瓑锛�2绉掞級
+				setInterval(() => {
+					this.getTableDataLeft()
+					this.getTableDataRight()
+				}, 2000)
+
+				// 楂橀鏇存柊锛氬疄鏃剁珯鐐逛俊鎭瓑锛�3绉掞級
+				setInterval(() => {
+					this.getTableDataDev()
+				}, 3000)
+
+				// 浣庨鏇存柊锛氫换鍔″垪琛ㄧ瓑锛�10绉掞級
+				setInterval(() => {
+					this.getTableDataLeft1()
+					this.getTableDataRight1()
+					this.getValueSystem()
+				}, 10*1000)
+
+				// 浣庨鏇存柊锛氳鍙瘉淇℃伅锛�30绉掞級
+				setInterval(() => {
+					this.getLicenseDays()
+				}, 30000)
+
+				// 闈欐�佷綆棰戞洿鏂帮細PLC锛�1灏忔椂锛�
+				setInterval(() => {
+					this.getTableDataTrack()
+				}, 60*60*1000)
+			},
+			// 鑾峰彇瀹瑰櫒瀹為檯灏哄
+			updateContainerSize() {
+				const mapEl = this.$el.querySelector('.map');
+				this.containerSize = {
+					width: mapEl.clientWidth,
+					height: mapEl.clientHeight
+				};
+			},
+			convertToCSSPositionWithOffset(svgX, svgY, radius) {
+				const basePos = this.convertToCSSPosition(svgX, svgY);
+				return {
+					x: basePos.x -16.5,
+					y: basePos.y -16.5
+				};
+			},
+			// 鏇存柊body灏哄
+			updateBodySize() {
+				this.bodySize = getBodySize();
+			},
+
+			// 鍧愭爣杞崲鍑芥暟
+			convertToCSSPosition(svgX, svgY) {
+				const svgWidth = 1200;  // SVG 鍘熷瀹藉害
+				let svgWidthR = 0;  //
+				const svgHeight = 850; // SVG 鍘熷楂樺害
+				let svgHeightR = 0; //
+				if (svgX>svgWidth/2){
+					svgWidthR = (((svgX-svgWidth/2)/svgWidth) * this.containerSize.width) + this.bodySize.width/2 - this.bodySize.width*((1-0.52)/2);
+				} else {
+					svgWidthR = this.bodySize.width/2 - (((svgWidth/2 - svgX)/svgWidth) * this.containerSize.width)  - this.bodySize.width*((1-0.52)/2);
+				}
+				if (svgY>svgHeight/2){
+					svgHeightR = (((svgY-svgHeight/2)/svgHeight) * this.containerSize.height) + this.bodySize.height/2 - this.bodySize.height*((1-0.72)/2);
+				} else {
+					svgHeightR = this.bodySize.height/2 - (((svgHeight/2 - svgY)/svgHeight) * this.containerSize.height)  - this.bodySize.height*((1-0.72)/2);
+				}
+				return {
+					x: svgWidthR,
+					y: svgHeightR
+				};
+			},
+
+			handleZoom(e) {
+				const scaleDelta = e.deltaY > 0 ? 0.9 : 1.1;
+				const currentScale = this.scale || 1;
+				const newScale = Math.max(0.5, Math.min(2, currentScale * scaleDelta));
+
+				// 搴旂敤缂╂斁
+				const svgEl = this.$el.querySelector('.container');
+				svgEl.style.transform = `scale(${newScale})`;
+				this.scale = newScale;
+			},
+			verifyPassword(callback) {
+				this.$prompt('璇疯緭鍏ョ鐞嗗憳瀵嗙爜: root', '楠岃瘉', {
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					inputType: 'password',
+					inputPattern: /^root$/,
+					inputErrorMessage: '瀵嗙爜閿欒'
+				}).then(({ value }) => {
+					if (value === 'root') {
+						callback();
+					}
+				}).catch(() => {
+					this.$message.info('宸插彇娑堟搷浣�');
+				});
+			},
+			handleChange(val) {
+				if (val.length === 0){
+					valueRight = '0';
+				} else {
+
+					if (val.length >= 1){
+						this.handleChangeValueRight(1)
+					}
+				}
+			},
+			handleChange1(val) {
+				if (val.length === 0){
+					valueRight1 = '0';
+				} else {
+					if (val.length >= 1){
+						this.handleChangeValueRight1(1)
+					}
+				}
+			},
+			taskDelete(row) {
+				let that = this;
+				that.$confirm('纭瑕佸垹闄よ璁惧鍚�?', '鎻愮ず', {
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(() => {
+					$.ajax({
+						url: baseUrlWcs + "/rgv/disable/task/delete",
+						headers: {'token': localStorage.getItem('token')},
+						method: 'POST',
+						data: {
+							wrkNo: row.wrkNo
+						},
+						success: function (res) {
+							if (res.code === 200) {
+								that.$message.success('鍒犻櫎鎴愬姛');
+								// 鍒犻櫎褰撳墠琛�
+								that.tableDataRight.splice(that.tableDataRight.indexOf(row), 1);
+							} else {
+								that.$message.error('鍒犻櫎澶辫触');
+							}
+						}
+					});
+				});
+			},
+			taskDelete1(row) {
+				let that = this;
+				that.$confirm('纭瑕佸垵濮嬪寲璇ヤ换鍔″悧?', '鎻愮ず', {
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(() => {
+					$.ajax({
+						url: baseUrlWcs + "/rgv/disable/task/delete1",
+						headers: {'token': localStorage.getItem('token')},
+						method: 'POST',
+						data: {
+							wrkNo: row.wrkNo
+						},
+						success: function (res) {
+							if (res.code === 200) {
+								that.$message.success('鍒濆鍖栨垚鍔�');
+								// 鍒犻櫎褰撳墠琛�
+								// that.tableDataRight.splice(that.tableDataRight.indexOf(row), 1);
+							} else {
+								that.$message.error('鍒濆鍖栧け璐�');
+							}
+						}
+					});
+				});
+			},
+			toggleStatus(index, row) {
+				let that = this;
+				const currentStatus = row.status;
+				const targetStatus = currentStatus === 0 ? 1 : 0;
+
+				that.$confirm(`纭瑕�${currentStatus === 0 ? '绂佺敤' : '鍚敤'}璇ヨ澶囧悧?`, '鎻愮ず', {
+					confirmButtonText: '纭畾',
+					cancelButtonText: '鍙栨秷',
+					type: 'warning'
+				}).then(() => {
+					$.ajax({
+						url: baseUrlWcs + "/rgv/disable/rgv/status",
+						headers: {'token': localStorage.getItem('token')},
+						method: 'POST',
+						data: {
+							rgvNo: row.rgvNo,
+							status: targetStatus
+						},
+						success: function (res) {
+							if (res.code === 200) {
+								that.$message.success(`鐘舵�佹洿鏂版垚鍔焋);
+								row.status$ = targetStatus; // 鏇存柊鍓嶇鐘舵��
+							} else {
+								that.$message.error('鐘舵�佹洿鏂板け璐�');
+							}
+						}
+					});
+				});
+			},
+			handleChangeValueRight(val) {
+				switch (val){
+					case 1:
+						valueRight = '100';
+					case 2:
+						valueRight = '100';
+					case 3:
+						valueRight = '100';
+					case 4:
+						valueRight = '100';
+					default:
+						valueRight = '0';
+				}
+			},
+			handleChangeValueRight1(val) {
+				switch (val){
+					case 1:
+						valueRight1 = '100';
+					case 2:
+						valueRight1 = '100';
+					case 3:
+						valueRight1 = '100';
+					case 4:
+						valueRight1 = '100';
+					default:
+						valueRight1 = '0';
+				}
+			},
+			tableRowClassName({row, rowIndex}) {
+				if (rowIndex === 1) {
+					return 'warning-row';
+				} else if (rowIndex === 3) {
+					return 'success-row';
+				}
+				return '';
+			},
+
+			// 鑾峰彇璁稿彲璇佹牱寮忕被
+			getLicenseClass() {
+				if (this.licenseDayI > 30) {
+					return 'normal';
+				} else if (this.licenseDayI > 0) {
+					return 'warning';
+				} else {
+					return 'expired';
+				}
+			},
+			getLicenseDays(){
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/license/getLicenseDays",
+					headers: {'token': localStorage.getItem('token')},
+					method: 'POST',
+					success: function (res) {
+						if (res.code == 200) {
+							if (res.data.day<0){
+								that.licenseDay = "宸茶繃鏈�"+res.data.day+"澶�";
+								that.licenseDayI = -1;
+							} else {
+								that.licenseDay = "璁稿彲璇佹湁鏁堟湡"+res.data.day+"澶�";
+								that.licenseDayI = res.data.day;
+							}
+						}else {
+							that.licenseDay = "宸茶繃鏈�";
+							that.licenseDayI = -1;
+						}
+					}
+				});
+				// setTimeout(function() {
+				//
+				// }, 1000);
+			},
+			getValueSystem() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/console/system/running/status",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.valueSystem = res.data.status
+					}
+				});
+			},
+			upDateValueSystem(){
+				let that = this;
+				let operatorTypeI = 0;
+				if (that.valueSystem){
+					operatorTypeI = 1;
+				}
+				this.verifyPassword(() => {
+					$.ajax({
+						url: baseUrlWcs + "/console/system/switch",
+						headers: {'token': localStorage.getItem('token')},
+						data: {operatorType : operatorTypeI},
+						method: 'POST',
+						success: function (res) {
+							if (res.code === 200) {
+								that.$message.success(`鐘舵�佹洿鏂版垚鍔焋);
+							} else {
+								that.$message.error('鐘舵�佹洿鏂板け璐�');
+							}
+						}
+					});
+				});
+			},
+			getTableDataLeft() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/ring/through/task/wrk/mast/position/data",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataLeft = res.data
+					}
+				});
+			},
+			getTableDataLeft1() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/ring/through/task/wrk/mast/position/data/v1",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataLeft1 = res.data
+					}
+				});
+			},
+			getTableDataRight() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/task/rgv/circular/shuttle/mast/position/data",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataRight = res.data
+					}
+				});
+			},
+			getTableDataRight1() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/task/rgv/circular/shuttle/mast/position/data/v1",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataRight1 = res.data
+					}
+				});
+			},
+			getTableDataRgv() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/ring/through/rgv/position/data",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataRgv = res.data
+					}
+				});
+			},
+			getTableDataDev() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/ring/through/dev/position/data",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.tableDataDev = res.data
+					}
+				});
+			},
+			getTableDataTrack() {
+				let that = this;
+				$.ajax({
+					url: baseUrlWcs + "/rgv/ring/through/track/position/data",
+					headers: {
+						'token': localStorage.getItem('token')
+					},
+					data: {},
+					dataType: 'json',
+					contentType: 'application/json;charset=UTF-8',
+					method: 'post',
+					success: function (res) {
+						that.energyGatheringRing = res.data
+					}
+				});
+			},
+			// 澶勭悊绐楀彛澶у皬鍙樺寲
+			handleResize: _.debounce(function() {
+				this.updateContainerSize();
+				this.updateBodySize();
+			}, 100)
+		}
+	})
+
+</script>
+</body>
+
+</html>

--
Gitblit v1.9.1