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 |  960 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 611 insertions(+), 349 deletions(-)

diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html
index 93c1aa3..6a06b46 100644
--- a/src/main/webapp/views/console.html
+++ b/src/main/webapp/views/console.html
@@ -19,73 +19,46 @@
 	</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 ? '&#x21c5;&#x21c4;':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">&#9889;</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="{
-								'--x-pos': getCarPosition(car.point.x, car.point.y)[1],
-								'--y-pos': getCarPosition(car.point.x, car.point.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>-->
-<!--						<el-button @click="initLoc()">鍒濆鍖栧簱浣�</el-button>-->
-					</div>
-				</div>
 			</div>
 
 			<div class="footer">
@@ -110,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>
 				<!-- 杈撻�佺嚎鐘舵�� -->
@@ -208,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>
@@ -331,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: [], //褰撳墠椤圭洰妤煎眰
-					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()
@@ -358,40 +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.initLev()//鍒濆鍖栨ゼ灞備俊鎭�
 
 						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; //鎵撳紑绔欑偣淇℃伅寮圭獥
@@ -421,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() {
 						// 绯荤粺寮�鍏�
@@ -580,123 +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].point.y = res[index].y
-										that.currentLevShuttleList[0].point.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'
-								});
-							}
-						})
-					},
-					initLev(){
-						let that = this
-						$.ajax({
-							url: baseUrl + "/console/map/lev/list",
-							headers: {
-								'token': localStorage.getItem('token')
-							},
-							data: {},
-							method: 'get',
-							success: function(res) {
-								if (res.code === 200) {
-									that.floorList = res.data;
-								} else if (res.code === 403) {
-									parent.location.href = baseUrl + "/login";
-								} else {
-									that.$message({
-										message: res.msg,
-										type: 'error'
-									});
-								}
-							}
-						});
-					},
 					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){
@@ -709,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