From b890d1c574d3d8332def7f4590508a7918139ae0 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 07 十一月 2025 16:57:22 +0800
Subject: [PATCH] #
---
src/main/webapp/views/console.html | 936 ++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 614 insertions(+), 322 deletions(-)
diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html
index 1f9a9dd..6a06b46 100644
--- a/src/main/webapp/views/console.html
+++ b/src/main/webapp/views/console.html
@@ -13,73 +13,52 @@
<script type="text/javascript" src="../static/js/common.js"></script>
<script type="text/javascript" src="../static/vue/js/vue.min.js"></script>
<script type="text/javascript" src="../static/vue/element/element.js"></script>
+ <style>
+
+ </style>
</head>
<body>
<div id="app">
- <div style="display: flex;justify-content: center;align-items: center;width: 100%;margin-top: 150px;">
- <div id="mapDataId" style="zoom: 0.7;position: relative;">
- <div class="pointContainer" v-for="(row,index) in map" :key="index">
- <div v-for="(col,idx) in row" :key="idx">
- <div v-if="col.value == 0">
- <!-- 瀛愯建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� -->
- <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-if="col.data.length > 0">{{col.data}}</div>
- <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-else>{{checkAdvancePath(index,idx).length == 0 ? idx:checkAdvancePath(index,idx)}}</div>
- </div>
- <div v-else-if="col.value == 3">
- <!-- 姣嶈建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� -->
- <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '#5af':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item">{{checkAdvancePath(index,idx).length == 0 ? '⇅⇄':checkAdvancePath(index,idx)}}</div>
- </div>
- <div v-else-if="col.value == 4">
- <!-- 绔欑偣 -->
- <div class="site" :id="'site-' + col.data" @click="openSite(col.data)">{{col.data}}</div>
- </div>
- <div v-else-if="col.value == 5">
- <!-- 鍏呯數妗� -->
- <div class="item" style="font-size: 24px">⚡</div>
- </div>
- <div v-else-if="col.value == -999">
- <!-- 璺緞鍗犵敤鍖哄煙 -->
- <div class="item" style="background:#f83333;color: #fff;">{{idx}}</div>
- </div>
- <div v-else-if="col.value < 0">
- <!-- 绂佹鏄剧ず鍖哄煙 -->
- <div class="item" style="visibility: hidden">{{idx}}</div>
- </div>
- <div v-else>
- <div class="item" v-if="col.data.length > 0">{{col.data}}</div>
- <div class="item" v-else>{{idx}}-{{col.value}}</div>
- </div>
- </div>
+ <div style="display: flex;justify-content: center;align-items: center;width: 100%;margin-top: 30px;">
+ <div id="mapDataId" style="zoom: 0.6;position: relative;">
+ <table class="excel-table">
+ <tr v-for="(row,index) in map" :key="index">
+ <td
+ v-for="(col,idx) in row" :key="idx"
+ :rowspan="col.rowSpan"
+ :colspan="col.colSpan"
+ :style="{width: col.width}"
+ v-if="col.type != 'merge'"
+ >
+ <div v-if="col.type == 'none'">
+ <div class="item" style="visibility: hidden">{{idx}}</div>
+ </div>
+ <div v-else-if="col.type == 'shelf'">
+ <div class="shelf">{{col.shelfIdx}}</div>
+ </div>
+ <div v-else-if="col.type == 'devp'">
+ <div class="site" :style="{height: col.rowPx}" :id="'site-' + col.value" @click="openSite(col.value)">{{col.value}}</div>
+ </div>
+ <div v-else-if="col.type == 'rgv'" style="position: relative;">
+ <div class="rgv-item" v-if="getDeviceNo(col.value) != -1" :style="{width: col.width}" :id="'rgv-' + getDeviceNo(col.value)" @click="openRgv(getDeviceNo(col.value))">{{getDeviceNo(col.value)}}</div>
+ <div class="track-item" v-if="getTrackSiteNo(col.value) == -1"></div>
+ <div class="track-item" v-else :id="'rgvTrackSiteNo-' + getTrackSiteNo(col.value)"></div>
+ </div>
+ <div v-else-if="col.type == 'crn'">
+ <div class="crn-item" v-if="getDeviceNo(col.value) != -1" :style="{width: col.width}" :id="'crn-' + getDeviceNo(col.value)" @click="openCrn(getDeviceNo(col.value))">{{getDeviceNo(col.value)}}</div>
+ <div class="track-item" v-if="getTrackSiteNo(col.value) == -1"></div>
+ <div class="track-item" v-else :id="'crnTrackSiteNo-' + getTrackSiteNo(col.value)"></div>
+ </div>
+ </td>
- <div>
- <!-- 鏄剧ず琛屽彿 -->
- <div class="item" style="background: none;color: #000;">#{{index+1}}</div>
- </div>
- </div>
-
- <!--杈撳嚭灏忚溅-->
- <div v-for="(car,idx) in currentLevShuttleList"
- :style="{
- left: getCarPosition(car.wcsPoint.x,car.wcsPoint.y)[1]
- ,top: getCarPosition(car.wcsPoint.x,car.wcsPoint.y)[0]
- ,color: shuttleColorList[car.shuttleNo]
- }"
- class="sxcar" :id="'sxcar-' + car.shuttleNo">
- {{car.shuttleNo}}
- </div>
-
+ <td>
+ <!-- 鏄剧ず琛屽彿 -->
+ <div class="item" style="background: none;color: #000;">#{{index+1}}</div>
+ </td>
+ </tr>
+ </table>
</div>
- <!--杈撳嚭妤煎眰-->
- <div style="height: 100%;">
- <div class="floorBtnBox" v-for="(lev,idx) in floorList">
- <el-button :style="{background:currentLev === lev ? '#7DCDFF':''}" @click="changFloor(lev)">{{lev}}F</el-button>
- </div>
- <div>
-<!-- <el-button @click="testMove()">娴嬭瘯绉诲姩杞�</el-button>-->
-<!-- <el-button @click="resetMap()">閲嶇疆鍦板浘</el-button>-->
- </div>
- </div>
</div>
<div class="footer">
@@ -104,63 +83,41 @@
</div>
</div>
</div>
- <!-- 鍥涘悜绌挎杞︾姸鎬� -->
+ <!-- 鍫嗗灈鏈虹姸鎬� -->
<div class="line-status">
- <div class="body-head">绌挎杞︾姸鎬�</div>
+ <div class="body-head">鍫嗗灈鏈虹姸鎬�</div>
<div class="shuttle-status-box">
- <div v-for="(item,idx) in shuttleList" class="state">
- <span :style="{color: shuttleColorList[item.shuttleNo]}">鍥涘悜绌挎杞� {{item.shuttleNo}}</span>
- <span v-if="item.protocolStatus == 1"
- class="state-ss shuttle-idle">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 2"
- class="state-ss shuttle-working">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 3"
- class="state-ss shuttle-waiting">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 4"
- class="state-ss shuttle-charging">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 5"
- class="state-ss shuttle-charging-waiting">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 6"
- class="state-ss shuttle-fixing">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 7"
- class="state-ss shuttle-offline">{{item.protocolStatus$}}</span>
- <span v-else class="state-ss shuttle-offline">{{item.protocolStatus$}}</span>
+ <div v-for="(item,idx) in crnList" class="state">
+ <span>鍫嗗灈鏈� {{item.crnNo}}</span>
+ <span v-if="item.crnStatus == 'machine-auto'"
+ class="state-ss machine-auto-flag">鑷姩</span>
+ <span v-else-if="item.crnStatus == 'machine-un-auto'"
+ class="state-ss machine-unauto-flag">闈炶嚜鍔�/鎵嬪姩</span>
+ <span v-else-if="item.crnStatus == 'machine-error'"
+ class="state-ss machine-error-flag">寮傚父</span>
+ <span v-else-if="item.crnStatus == 'machine-p-move'"
+ class="state-ss machine-p-move-flag">PToP</span>
+ <span v-else-if="item.crnStatus == 'machine-site-move'"
+ class="state-ss machine-site-move-flag">绔欏埌绔�</span>
+ <span v-else-if="item.crnStatus == 'machine-stock-move'"
+ class="state-ss machine-stock-move-flag">搴撳埌搴�</span>
+ <span v-else-if="item.crnStatus == 'machine-pakout'"
+ class="state-ss machine-take-flag">鍑哄簱</span>
+ <span v-else-if="item.crnStatus == 'machine-pakin'"
+ class="state-ss machine-put-flag">鍏ュ簱</span>
+ <span v-else class="state-ss">{{item.crnStatus}}</span>
</div>
</div>
<div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div>
<div class="allStatus item-group">
- <span class="shuttle-idle">绌洪棽</span>
- <span class="shuttle-working">浣滀笟涓�</span>
- <span class="shuttle-waiting">绛夊緟纭</span>
- <span class="shuttle-charging">鍏呯數涓�</span>
- <span class="shuttle-charging-waiting">鍏呯數浠诲姟绛夊緟纭</span>
- <span class="shuttle-fixing">鏁呴殰淇涓�</span>
- <span class="shuttle-offline">绂荤嚎</span>
- </div>
- </div>
- <!-- 鎻愬崌鏈虹姸鎬� -->
- <div class="line-status">
- <div class="body-head">鎻愬崌鏈虹姸鎬�</div>
- <div class="lift-status-box">
- <div v-for="(item,idx) in liftList" class="state states">
- <span>鎻愬崌鏈� {{item.liftNo}}</span>
- <span v-if="item.protocolStatus == 1"
- class="state-ss lift-idle">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 2"
- class="state-ss lift-working">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 3"
- class="state-ss lift-waiting">{{item.protocolStatus$}}</span>
- <span v-else-if="item.protocolStatus == 4"
- class="state-ss lift-offline">{{item.protocolStatus$}}</span>
- <span v-else class="state-ss lift-offline">{{item.protocolStatus$}}</span>
- </div>
- </div>
- <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div>
- <div class="allStatus item-group">
- <span class="lift-idle">绌洪棽</span>
- <span class="lift-working">浣滀笟涓�</span>
- <span class="lift-waiting">绛夊緟纭</span>
- <span class="lift-offline">绂荤嚎</span>
+ <span class="machine-put-flag">鍏ュ簱</span>
+ <span class="machine-take-flag">鍑哄簱</span>
+ <span class="machine-stock-move-flag">搴撳埌搴�</span>
+ <span class="machine-site-move-flag">绔欏埌绔�</span>
+ <span class="machine-p-move-flag">PToP</span>
+ <span class="machine-error-flag">寮傚父</span>
+ <span class="machine-auto-flag">鑷姩</span>
+ <span class="machine-unauto-flag">闈炶嚜鍔�/鎵嬪姩</span>
</div>
</div>
<!-- 杈撻�佺嚎鐘舵�� -->
@@ -202,7 +159,7 @@
</div>
<!-- 杈撻�佽澶囧脊绐� -->
- <div id="siteWindow" :style="{display:siteWindow?'block':'none'}" class="animate__animated animate__fadeIn">
+ <div id="siteWindow" :style="{display:siteWindow?'block':'none',zIndex: 999}" class="animate__animated animate__fadeIn">
<!-- 琛ㄥご -->
<div id="siteWindow-head">
<div class="detailed"></div>
@@ -325,24 +282,223 @@
</div>
</div>
+ <!-- 鍫嗗灈鏈哄脊绐� -->
+ <div id="crnWindow" :style="{display:crnWindow?'block':'none',zIndex: 999}" class="animate__animated animate__fadeIn">
+ <div id="crnWindow-head">
+ <div class='detailed'></div>
+ <button @click="crnWindow = false"></button>
+ </div>
+ <form>
+ <!-- 鍫嗗灈鏈哄彿 -->
+ <div class="form-item">
+ <div class="form-item-label" style>
+ <span>鍫嗗灈鏈哄彿锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="crnNo" value="">
+ </div>
+ </div>
+ <!-- 宸ヤ綔鍙� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>宸ヤ綔鍙凤細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="workNo" value="">
+ </div>
+ </div>
+ <!-- 绔欐簮 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>绔欐簮锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="sourceStaNo" value="">
+ </div>
+ </div>
+ <!-- 鐩爣绔� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鐩爣绔欙細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="staNo" value="">
+ </div>
+ </div>
+ <!-- 宸ヤ綔鐘舵�� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>宸ヤ綔鐘舵�侊細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="wrkSts" value="">
+ </div>
+ </div>
+ <!-- 鍑哄叆绫诲瀷 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鍑哄叆绫诲瀷锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="ioType" value="">
+ </div>
+ </div>
+ <!-- 婧愬簱浣� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>婧愬簱浣嶏細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="sourceLocNo" value="">
+ </div>
+ </div>
+ <!-- 鐩爣搴撲綅 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鐩爣搴撲綅锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="locNo" value="">
+ </div>
+ </div>
+ <!-- 鍫嗗灈鏈虹姸鎬� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鍫嗗灈鏈虹姸鎬侊細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="crnStatus" value="">
+ </div>
+ </div>
+ <!-- 寮傚父 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>寮傚父锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="error" value="">
+ </div>
+ </div>
+ </form>
+ </div>
+
+ <!-- RGV寮圭獥 -->
+ <div id="rgvWindow" :style="{display:rgvWindow?'block':'none',zIndex: 999}" class="animate__animated animate__fadeIn">
+ <div id="rgvWindow-head">
+ <div class='detailed'></div>
+ <button @click="rgvWindow = false"></button>
+ </div>
+ <form>
+ <!-- RGV鍙� -->
+ <div class="form-item">
+ <div class="form-item-label" style>
+ <span>RGV鍙凤細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="rgvNo" value="">
+ </div>
+ </div>
+ <!-- 宸ヤ綔鍙� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>宸ヤ綔鍙凤細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="workNo" value="">
+ </div>
+ </div>
+ <!-- 绔欐簮 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>绔欐簮锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="sourceStaNo" value="">
+ </div>
+ </div>
+ <!-- 鐩爣绔� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鐩爣绔欙細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="staNo" value="">
+ </div>
+ </div>
+ <!-- 宸ヤ綔鐘舵�� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>宸ヤ綔鐘舵�侊細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="wrkSts" value="">
+ </div>
+ </div>
+ <!-- 鍑哄叆绫诲瀷 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鍑哄叆绫诲瀷锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="ioType" value="">
+ </div>
+ </div>
+ <!-- 婧愬簱浣� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>婧愬簱浣嶏細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="sourceLocNo" value="">
+ </div>
+ </div>
+ <!-- 鐩爣搴撲綅 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>鐩爣搴撲綅锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="locNo" value="">
+ </div>
+ </div>
+ <!-- RGV鐘舵�� -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>RGV鐘舵�侊細</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="rgvStatus" value="">
+ </div>
+ </div>
+ <!-- 寮傚父 -->
+ <div class="form-item">
+ <div class="form-item-label">
+ <span>寮傚父锛�</span>
+ </div>
+ <div class="form-item-input">
+ <input type="text" name="error" value="">
+ </div>
+ </div>
+ </form>
+ </div>
+
</div>
<script>
var app = new Vue({
el: '#app',
data: {
map: [],//鍦板浘鏁版嵁
- currentLev: 1,//鍦板浘褰撳墠妤煎眰
siteWindow: false, //绔欑偣寮圭獥鏄剧ず榛樿涓嶆樉绀�
- floorList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], //褰撳墠椤圭洰妤煎眰
- shuttleList: [], //鍥涘悜绌挎杞﹂泦鍚�
- currentLevShuttleList: [],//褰撳墠妤煎眰鍥涘悜绌挎杞﹂泦鍚�
- shuttleColorList: [],//鍥涘悜绌挎杞﹂鑹查泦鍚�
+ crnWindow: false, //鍫嗗灈鏈哄脊绐楁樉绀洪粯璁や笉鏄剧ず
+ rgvWindow: false, //rgv寮圭獥鏄剧ず榛樿涓嶆樉绀�
+ crnList: [], //鍫嗗灈鏈洪泦鍚�
liftList: [], //鎻愬崌鏈洪泦鍚�
systemStatus: true,//绯荤粺杩愯鐘舵��
consoleInterval: null,//瀹氭椂鍣ㄥ瓨鍌ㄥ彉閲�
codeList1: [],//鏉$爜List
codeList2: [],//鏉$爜List
- ws: null,
+ crnInitPosition: [],
+ rgvPosition: [],
},
created() {
this.init()
@@ -352,39 +508,95 @@
},
methods: {
init() {
- this.ws = new WebSocket("ws://" + window.location.host + baseUrl + "/console/websocket");
- this.ws.onopen = this.webSocketOnOpen
- this.ws.onerror = this.webSocketOnError
- this.ws.onmessage = this.webSocketOnMessage
- this.ws.onclose = this.webSocketClose
-
- this.getMap(this.currentLev)
+ this.getMap()
this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵��
this.consoleInterval = setInterval(() => {
- this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
- this.getLiftStateInfo() //鑾峰彇鎻愬崌鏈轰俊鎭�
+ this.getCrnInfo() //鑾峰彇鍫嗗灈鏈烘暟鎹�
this.getSiteInfo() //鑾峰彇杈撻�佺珯鐐规暟鎹�
- this.getMap(this.currentLev) //鑾峰彇瀹炴椂鍦板浘鏁版嵁
- this.getCodeData()//鑾峰彇鏉$爜
+ this.getRgvInfo() //鑾峰彇RGV鏁版嵁
+ // this.getCodeData()//鑾峰彇鏉$爜
}, 1000)
},
//鑾峰彇鍦板浘鏁版嵁
- getMap(lev) {
- this.sendWs(JSON.stringify({
- "url": "/console/map/auth",
- "data": lev
- }))
+ getMap() {
+ let rowPx = 35;
+ let colPx = 35;
+
+ $.ajax({
+ url: "./test.json",
+ method: "get",
+ success: (res) => {
+ let data = res.data;
+ let mapData = JSON.parse(data)
+ mapData.forEach((row) => {
+ let shelfIdx = 1;
+ row.forEach((col) => {
+ if (col.type == 'shelf') {
+ col.shelfIdx = shelfIdx;
+ shelfIdx++;
+ }
+
+ col.rowPx = (col.rowSpan * rowPx) + "px";
+ col.colPx = (col.colSpan * colPx) + "px";
+
+ col.width = (col.cellWidth / 30) + "px";
+ })
+ })
+ this.map = mapData;
+ }
+ })
},
- setMap(res) {
- //鑾峰彇鍦板浘鏁版嵁
- let data = res.data
- let tmp = []
- for (let i = 1; i < data.length - 1; i++) {
- tmp.push(data[i])
- }
- // console.log(tmp)
- this.map = tmp
+ openCrn(id) {
+ this.crnWindow = true; //鎵撳紑绔欑偣淇℃伅寮圭獥
+ $(".detailed").empty();
+ $('.detailed').append(id + '鍙峰爢鍨涙満');
+ $.ajax({
+ url: baseUrl + "/console/crn/detail",
+ headers: {
+ 'token': localStorage.getItem('token')
+ },
+ data: {
+ crnNo: id
+ },
+ method: 'post',
+ success: function(res) {
+ for (var val in res.data) {
+ var find = $("#crnWindow").find(":input[name='" + val + "']");
+ if (find[0].type === 'text') {
+ find.val(res.data[val]);
+ } else if (find[0].type === 'checkbox') {
+ find.attr("checked", res.data[val] === 'Y');
+ }
+ }
+ }
+ })
+ },
+ openRgv(id) {
+ this.rgvWindow = true; //鎵撳紑RGV淇℃伅寮圭獥
+ $(".detailed").empty();
+ $('.detailed').append(id + '鍙稲GV');
+ $.ajax({
+ url: baseUrl + "/console/rgv/detail",
+ headers: {
+ 'token': localStorage.getItem('token')
+ },
+ data: {
+ rgvNo: id
+ },
+ method: 'post',
+ success: function(res) {
+ for (var val in res.data) {
+ var find = $("#rgvWindow").find(":input[name='" + val + "']");
+ if (find[0].type === 'text') {
+ find.val(res.data[val]);
+ } else if (find[0].type === 'checkbox') {
+ find.attr("checked", res.data[val] === 'Y');
+ }
+ }
+ }
+
+ })
},
openSite(id) {
this.siteWindow = true; //鎵撳紑绔欑偣淇℃伅寮圭獥
@@ -414,77 +626,168 @@
},
getSiteInfo() {
//鑾峰彇杈撻�佺珯鐐规暟鎹�
- this.sendWs(JSON.stringify({
- "url": "/console/latest/data/site",
- "data": {}
- }))
- },
- setSiteInfo(res) {
- //鑾峰彇杈撻�佺珯鐐规暟鎹�
- if (res.code === 200){
- var sites = res.data;
- for (var i = 0; i < sites.length; i++){
- var siteEl = $("#site-"+sites[i].siteId);
- siteEl.attr("class", "site " + sites[i].siteStatus);
- if (sites[i].workNo != null && sites[i].workNo>0) {
- siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]");
- } else {
- siteEl.html(sites[i].siteId);
- }
- }
- } else if (res.code === 403){
- parent.location.href = baseUrl+"/login";
- } else {
- console.log(res.msg);
- }
- },
- changFloor(lev) {
- this.currentLev = lev
- this.currentLevShuttleList = []
- this.getMap(lev)
- },
- getShuttleStateInfo() {
- this.sendWs(JSON.stringify({
- "url": "/shuttle/table/shuttle/state",
- "data": {}
- }))
- },
- setShuttleStateInfo(res) {
- // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇
- let that = this
- if (res.code == 200) {
- let currentLevShuttle = []//褰撳墠妤煎眰灏忚溅闆嗗悎
- res.data.forEach((item,idx) => {
- if (item != null && item.point != undefined && item.point != null) {
- if (item.point.z == that.currentLev) {
- currentLevShuttle.push(item);
+ $.ajax({
+ url: baseUrl + "/console/latest/data/site",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ var sites = res.data;
+ for (var i = 0; i < sites.length; i++){
+ var siteEl = $("#site-"+sites[i].siteId);
+ siteEl.attr("class", "site " + sites[i].siteStatus);
+ if (sites[i].workNo != null && sites[i].workNo>0) {
+ siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]");
+ } else {
+ siteEl.html(sites[i].siteId);
+ }
}
+ } else if (res.code === 403) {
+ parent.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
}
- })
- that.currentLevShuttleList = currentLevShuttle
- that.shuttleList = res.data
-
- if (that.shuttleColorList.length == 0) {
- let colorList = []//闅忔満灏忚溅棰滆壊
- res.data.forEach((item,idx) => {
- colorList[item.shuttleNo] = that.colorRGB()
- })
- that.shuttleColorList = colorList
}
- }
+ });
},
- getLiftStateInfo() {
- // 鎻愬崌鏈轰俊鎭〃鑾峰彇
- this.sendWs(JSON.stringify({
- "url": "/lift/table/lift/state",
- "data": {}
- }))
+ getCrnInfo() {
+ let that = this
+ //鑾峰彇鍫嗗灈鏈烘暟鎹�
+ $.ajax({
+ url: baseUrl + "/console/latest/data/crn",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ var crns = res.data;
+
+ if (that.crnInitPosition.length == 0) {
+ let position = []
+ for (var i = 0; i < crns.length; i++) {
+ var crnEl = $("#crn-" + crns[i].crnId);
+ position.push({
+ id: crns[i].crnId,
+ left: crnEl.offset().left + crnEl.width()
+ })
+ }
+ that.crnInitPosition = position
+ return;
+ }
+
+ let crnList = []
+ for (var i = 0; i < crns.length; i++) {
+ var crnEl = $("#crn-" + crns[i].crnId);
+ crnEl.attr("class", "crn-item " + crns[i].crnStatus);
+
+ if (crns[i].bay < 0 || crns[i].bay === -2) {
+ crns[i].bay = 1
+ }
+
+ let basePosition = 0;
+ that.crnInitPosition.forEach((item) => {
+ if (item.id == crns[i].crnId) {
+ basePosition = item.left
+ }
+ })
+
+ var offSet = crns[i].offset;
+ let finalOffset = basePosition + offSet;
+ if (finalOffset < basePosition) {
+ finalOffset = basePosition;
+ }
+ crnEl.animate({left: finalOffset + 'px'}, 1000);
+
+ crnList.push({
+ crnNo: crns[i].crnId,
+ crnStatus: crns[i].crnStatus
+ })
+ }
+ that.crnList = crnList;
+
+ } else if (res.code === 403) {
+ parent.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
},
- setLiftStateInfo(res) {
- // 鎻愬崌鏈轰俊鎭〃鑾峰彇
- if (res.code == 200) {
- this.liftList = res.data
- }
+ getRgvInfo() {
+ let that = this
+ //鑾峰彇RGV鏁版嵁
+ $.ajax({
+ url: baseUrl + "/console/latest/data/rgv",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ var rgvs = res.data;
+
+ if (that.rgvPosition.length == 0) {
+ let position = []
+ for (var i = 0; i < rgvs.length; i++) {
+ var rgvEl = $("#rgv-" + rgvs[i].rgvId);
+ position.push({
+ id: rgvs[i].rgvId,
+ trackSiteNo: rgvs[i].trackSiteNo,
+ initLeft: rgvEl.offset().left
+ })
+ }
+ that.rgvPosition = position
+ return;
+ }
+
+ for (var i = 0; i < rgvs.length; i++) {
+ var rgvEl = $("#rgv-" + rgvs[i].rgvId);
+ if (rgvs[i].rgvStatus == 'IDLE') {
+ rgvEl.attr("class", "rgv-item");
+ }else if (rgvs[i].rgvStatus == 'WORKING') {
+ rgvEl.attr("class", "rgv-item machine-working");
+ }
+
+ let trackSiteNo = rgvs[i].trackSiteNo;
+ let trackSiteEl = $("#rgvTrackSiteNo-" + trackSiteNo);
+
+ let flag = false;
+ that.rgvPosition.forEach((item) => {
+ if (item.id == rgvs[i].rgvId) {
+ if (item.trackSiteNo != trackSiteNo) {
+ flag = true
+ }
+ }
+ })
+
+ if (flag) {
+ let finalOffset = 0;
+ let targetPosition = trackSiteEl.parent().parent().position().left;
+ let rgvPosition = rgvEl.position().left;
+ let calcResult = targetPosition - rgvPosition
+ if (calcResult > 0) {
+ finalOffset = targetPosition + trackSiteEl.width();
+ }else {
+ finalOffset = targetPosition;
+ }
+
+ rgvEl.animate({left: finalOffset + "px"}, 500);
+
+ let position = []
+ that.rgvPosition.forEach((item) => {
+ if (item.id == rgvs[i].rgvId) {
+ item.trackSiteNo = trackSiteNo
+ }
+ position.push(item)
+ })
+ that.rgvPosition = position
+ }
+
+ }
+ } else if (res.code === 403) {
+ parent.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
},
systemSwitch() {
// 绯荤粺寮�鍏�
@@ -573,100 +876,87 @@
}
});
},
- getCarPosition(x,y) {
- //璁$畻鍥涘悜绌挎杞﹀浘鏍囦綅缃�
- let top = (x * 35 - 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犻珮搴�
- let left = (y * 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犲搴�
- return [top,left];
- },
- testMove() {
- let that = this
- clearInterval(this.consoleInterval)//娓呯悊瀹氭椂鍣�
-
- let shuttleList = this.currentLevShuttleList
- $.ajax({
- url: baseUrl + "/static/testMoveData.json",
- headers: {
- 'token': localStorage.getItem('token')
- },
- method: 'GET',
- success: function(res) {
- shuttleList[0].moveAdvancePath = res
- that.currentLevShuttleList = shuttleList
-
- let index = 0
- let tmp = null
- tmp = setInterval(() => {
- if (index < res.length) {
- that.currentLevShuttleList[0].wcsPoint.y = res[index].y
- that.currentLevShuttleList[0].wcsPoint.x = res[index].x
- index++
- }else {
- clearInterval(tmp)
- that.init()
- }
- },1000)
- }
- });
- },
- colorRGB(){
- //闅忔満棰滆壊
- const r = Math.floor(Math.random()*256);
- const g = Math.floor(Math.random()*256);
- const b = Math.floor(Math.random()*256);
- return `rgb(${r},${g},${b})`;
- },
- checkAdvancePath(x,y) {
- //妫�娴嬭矾寰勬槸鍚︿负绌挎杞﹂璁¤矾寰勶紝濡倄鍜寉璺緞鏄┛姊溅棰勮璺緞锛屽垯杩斿洖灏忚溅鍙�
- this.currentLevShuttleList.forEach((item,idx) => {
- if (item.moveAdvancePath != null) {
- item.moveAdvancePath.forEach((path,index) => {
- if (path.x === x && path.y === y) {
- return item.shuttleNo;
- }
- })
- }
- })
- let data = []
- let shuttleList = this.currentLevShuttleList;
- for (var i = 0; i < shuttleList.length; i++) {
- let shuttle = shuttleList[i]
- let moveAdvancePath = shuttle.moveAdvancePath
- if (moveAdvancePath != null) {
- for (var j = 0; j < moveAdvancePath.length; j++) {
- let path = moveAdvancePath[j]
- if (path.x-1 === x && path.y === y) {//璺緞绗﹀悎
- data.push(shuttle.shuttleNo)
- continue;
- }
- }
- }
- }
- return data;//杩斿洖灏忚溅鍙烽泦鍚�
- },
- resetMap() {
- //閲嶇疆鍦板浘
- let that = this
- $.ajax({
- url:baseUrl+"/console/map/resetMap/" + this.currentLev,
- headers:{
- 'token': localStorage.getItem('token')
- },
- data:{},
- method:'get',
- success:function (res) {
- that.$message({
- message: that.currentLev + '灞傚湴鍥鹃噸缃畬鎴�',
- type: 'success'
- });
- }
- })
- },
getCodeData(){
this.sendWs(JSON.stringify({
"url": "/console/barcode/output/site",
"data": {}
}))
+
+ let that = this
+ //鑾峰彇RGV鏁版嵁
+ $.ajax({
+ url: baseUrl + "/console/barcode/output/site",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ var rgvs = res.data;
+
+ if (that.rgvPosition.length == 0) {
+ let position = []
+ for (var i = 0; i < rgvs.length; i++) {
+ var rgvEl = $("#rgv-" + rgvs[i].rgvId);
+ position.push({
+ id: rgvs[i].rgvId,
+ trackSiteNo: rgvs[i].trackSiteNo,
+ initLeft: rgvEl.offset().left
+ })
+ }
+ that.rgvPosition = position
+ return;
+ }
+
+ for (var i = 0; i < rgvs.length; i++) {
+ var rgvEl = $("#rgv-" + rgvs[i].rgvId);
+ if (rgvs[i].rgvStatus == 'IDLE') {
+ rgvEl.attr("class", "rgv-item");
+ }else if (rgvs[i].rgvStatus == 'WORKING') {
+ rgvEl.attr("class", "rgv-item machine-working");
+ }
+
+ let trackSiteNo = rgvs[i].trackSiteNo;
+ let trackSiteEl = $("#rgvTrackSiteNo-" + trackSiteNo);
+
+ let flag = false;
+ that.rgvPosition.forEach((item) => {
+ if (item.id == rgvs[i].rgvId) {
+ if (item.trackSiteNo != trackSiteNo) {
+ flag = true
+ }
+ }
+ })
+
+ if (flag) {
+ let finalOffset = 0;
+ let targetPosition = trackSiteEl.parent().parent().position().left;
+ let rgvPosition = rgvEl.position().left;
+ let calcResult = targetPosition - rgvPosition
+ if (calcResult > 0) {
+ finalOffset = targetPosition + trackSiteEl.width();
+ }else {
+ finalOffset = targetPosition;
+ }
+
+ rgvEl.animate({left: finalOffset + "px"}, 500);
+
+ let position = []
+ that.rgvPosition.forEach((item) => {
+ if (item.id == rgvs[i].rgvId) {
+ item.trackSiteNo = trackSiteNo
+ }
+ position.push(item)
+ })
+ that.rgvPosition = position
+ }
+
+ }
+ } else if (res.code === 403) {
+ parent.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
},
setCodeData(res) {
if(res.code === 200){
@@ -679,32 +969,34 @@
}
}
},
- webSocketOnOpen(e) {
- console.log("open");
- },
- webSocketOnError(e) {
- console.log(e);
- },
- webSocketOnMessage(e) {
- const result = JSON.parse(e.data);
- if (result.url == "/shuttle/table/shuttle/state") {
- this.setShuttleStateInfo(JSON.parse(result.data))
- }else if (result.url == "/lift/table/lift/state") {
- this.setLiftStateInfo(JSON.parse(result.data))
- }else if (result.url == "/console/latest/data/site") {
- this.setSiteInfo(JSON.parse(result.data))
- }else if (result.url == "/console/map/auth") {
- this.setMap(JSON.parse(result.data))
- }else if (result.url == "/console/barcode/output/site") {
- this.setCodeData(JSON.parse(result.data))
+ getDeviceNo(obj) {
+ if (this.isJson(obj)) {
+ let data = JSON.parse(obj)
+ if (data.deviceNo == null || data.deviceNo == undefined) {
+ return -1;
+ }
+ return data.deviceNo;
+ }else {
+ return -1;
}
},
- webSocketClose(e) {
- console.log("close");
+ getTrackSiteNo(obj) {
+ if (this.isJson(obj)) {
+ let data = JSON.parse(obj)
+ if (data.trackSiteNo == null || data.trackSiteNo == undefined) {
+ return -1;
+ }
+ return data.trackSiteNo;
+ }else {
+ return -1;
+ }
},
- sendWs(message) {
- if (this.ws.readyState == WebSocket.OPEN) {
- this.ws.send(message)
+ isJson(str) {
+ try {
+ JSON.parse(str);
+ return true;
+ } catch (e) {
+ return false;
}
}
}
--
Gitblit v1.9.1