<!DOCTYPE html>
|
<html lang="en">
|
<head>
|
<meta charset="utf-8">
|
<title>WCS控制中心</title>
|
<link rel="stylesheet" href="../static/css/console.css">
|
<link rel="stylesheet" href="../static/css/animate.min.css">
|
<link rel="stylesheet" href="../static/css/toggle-switch.css">
|
<script src="../static/js/jquery/jquery-3.3.1.min.js"></script>
|
<script src="../static/js/layer/layer.js"></script>
|
<script type="text/javascript" src="../static/js/common.js"></script>
|
</head>
|
<body>
|
<div class="root">
|
<header class="header">
|
<h1>自动仓库WCS监控图</h1>
|
<h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
|
</header>
|
<main class="main">
|
<!--楼层按钮-->
|
<div id="floorBtnBox">
|
<button class="floorBtn btn-16" onclick="changFloor(this,1)" style="margin-top: 150px">1F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,2)" style="margin-top: 200px">2F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,3)" style="margin-top: 250px">3F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,4)" style="margin-top: 300px">4F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,5)" style="margin-top: 350px">5F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,6)" style="margin-top: 400px">6F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,7)" style="margin-top: 450px">7F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,8)" style="margin-top: 500px">8F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,9)" style="margin-top: 550px">9F</button>
|
<button class="floorBtn btn-16" onclick="changFloor(this,10)" style="margin-top: 600px">10F</button>
|
</div>
|
<button class="floorBtn btn-16" onclick="resetMap()" style="margin-top: 650px;font-size: 14px;">重置地图</button>
|
<button class="floorBtn btn-16" onclick="testMove()" style="margin-top: 700px;font-size: 14px;">测试移动车</button>
|
|
<!-- 货架 + 堆垛机 + 入库站点 -->
|
<div class="main-part" id="mapDataId">
|
<!-- <!– 第一组 –>-->
|
<!-- <div class="lane" id="mapDataId" style="margin-bottom: 280px">-->
|
|
<!-- </div>-->
|
</div>
|
</main>
|
<footer class="footer">
|
<!-- 总开关 -->
|
<div class="system-state">
|
<div class="body-head">总开关</div>
|
<div class="switch">
|
<label id="system-toggle" class="toggle-switch" style="margin-left: 20px;">
|
<input id="system-toggle-checked" checked="checked" type="checkbox">
|
<div class="button">
|
<div class="light"></div>
|
<div class="dots"></div>
|
<div class="characters"></div>
|
<div class="shine"></div>
|
<div class="shadow"></div>
|
</div>
|
</label>
|
|
<div class="switch_r">
|
<p>系统状态</p>
|
<p id="system-run-desc">系统运行中</p>
|
</div>
|
</div>
|
</div>
|
<!-- 四向穿梭车状态 -->
|
<div class="line-status">
|
<div class="body-head">穿梭车状态</div>
|
<div id="shuttle-status-box" style="height: 100px;overflow-y: scroll;overflow-x: hidden;">
|
</div>
|
<div class="button"><span>所有状态</span></div>
|
<div class="button 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 id="lift-status-box" style="height: 120px;overflow-y: scroll;overflow-x: hidden;">
|
|
</div>
|
<div class="button"><span>所有状态</span></div>
|
<div class="button item-group">
|
<span class="lift-idle">空闲</span>
|
<span class="lift-working">作业中</span>
|
<span class="lift-waiting">等待确认</span>
|
<span class="lift-offline">离线</span>
|
</div>
|
</div>
|
<!-- 输送线状态 -->
|
<div class="line-status">
|
<div class="body-head">输送线状态</div>
|
<div class="state states">
|
<span>运输线总数</span>
|
<span class="line-ss">9</span>
|
</div>
|
<div class="button"><span>所有状态</span></div>
|
<div class="button item-group">
|
<span class="site-auto-run-id">自动+有物+ID</span>
|
<span class="site-auto-run">自动+有物</span>
|
<span class="site-auto-id">自动+ID</span>
|
<span class="site-auto">自动</span>
|
<span class="site-unauto">非自动/手动</span>
|
</div>
|
</div>
|
<!-- 条码表格 -->
|
<div class="bar-code">
|
<div class="body-head" id="code">条码扫描器</div>
|
<div class="tablebox">
|
<div class="table-head">
|
<li><span>条码名称</span><span class="right">扫码时间</span></li>
|
</div>
|
<div id="barcode1" class="table-body">
|
|
</div>
|
</div>
|
<div class="tablebox">
|
<div class="table-head">
|
<li><span>条码名称</span><span class="right">扫码时间</span></li>
|
</div>
|
<div id="barcode2" class="table-body">
|
|
</div>
|
</div>
|
</div>
|
</footer>
|
|
<!-- 堆垛机弹窗 -->
|
<div id="crnWindow" style="display: none;" class="animate__animated animate__fadeIn">
|
<div id="crnWindow-head">
|
<div class='detailed'></div>
|
<button></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>
|
|
<!-- 输送设备弹窗 -->
|
<div id="siteWindow" style="display: none;" class="animate__animated animate__fadeIn">
|
<!-- 表头 -->
|
<div id="siteWindow-head">
|
<div class='detailed'></div>
|
<button></button>
|
</div>
|
<form>
|
<!-- 设备号 -->
|
<div class="form-item" >
|
<div class="form-item-label">
|
<span>设备号:</span>
|
</div>
|
<div class="form-item-input">
|
<input type="text" name="siteId" 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="wrkSts" value="">
|
</div>
|
</div>
|
<!-- 自动 -->
|
<div class="form-item-checkbox">
|
<div class="form-item-label-checkbox">
|
<span>自动</span>
|
</div>
|
<div class="form-item-input-checkbox">
|
<input type="checkbox" name="autoing">
|
</div>
|
</div>
|
<!-- 有物 -->
|
<div class="form-item-checkbox">
|
<div class="form-item-label-checkbox">
|
<span>有物</span>
|
</div>
|
<div class="form-item-input-checkbox">
|
<input type="checkbox" name="loading">
|
</div>
|
</div>
|
<!-- 能入 -->
|
<div class="form-item-checkbox">
|
<div class="form-item-label-checkbox">
|
<span>能入</span>
|
</div>
|
<div class="form-item-input-checkbox">
|
<input type="checkbox" name="canining">
|
</div>
|
</div>
|
<!-- 能出 -->
|
<div class="form-item-checkbox">
|
<div class="form-item-label-checkbox">
|
<span>能出</span>
|
</div>
|
<div class="form-item-input-checkbox">
|
<input type="checkbox" name="canouting">
|
</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="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="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>
|
|
</form>
|
</div>
|
</div>
|
</body>
|
</html>
|
<script>
|
var tData = []
|
var tData1 = []
|
var tData2 = []
|
var tData3 = []
|
var mapData = [] //地图数据
|
var currentLev = 1;//当前地图楼层
|
function getCodeData(){
|
$.ajax({
|
url:baseUrl +'/console/barcode/output/site',
|
method:'GET',
|
success:function (res) {
|
if(res.code === 200){
|
tData = eval(res.data);
|
if(tData.length<=5){
|
tData1 = tData
|
} else if (tData.length<=10){
|
tData1 = tData.slice(0,5)
|
// tData.splice(0,4)
|
tData2 = tData.splice(5,10)
|
} else if(tData.length<=15){
|
tData1 = tData.slice(0,5)
|
tData2 = tData.slice(5,10)
|
// tData.splice(0,10)
|
tData3 = tData.slice(10,15)
|
} else {
|
tData1 = tData.slice(0,5)
|
tData2 = tData.slice(5,10)
|
tData3 = tData.slice(10,15)
|
// tData = tData.slice(-15)
|
// tData1 = tData.slice(-15)
|
// tData2 = tData.slice(-10)
|
// tData3 = tData.slice(-5)
|
|
}
|
}
|
}
|
})
|
}
|
setInterval(function () {
|
getCodeData();
|
renderBarCode();
|
}, 1000)
|
|
|
function renderBarCode() {
|
for (var i = 0;i<tData1.length;i++){
|
var str1 = '<li><span>' + tData1[i].barcode + '</span><span class="right">' + tData1[i].time + '</span></li>'
|
$('#barcode1').append(str1)
|
}
|
for(var j = 0;j<tData2.length;j++){
|
var str2 = '<li><span>' + tData2[j].barcode + '</span><span class="right">' + tData2[j].time + '</span></li>'
|
$('#barcode2').append(str2)
|
}
|
for(var k = 0;k<tData3.length;k++){
|
var str3 = '<li><span>' + tData3[k].barcode + '</span><span class="right">' + tData3[k].time + '</span></li>'
|
$('#barcode3').append(str3)
|
}
|
}
|
|
|
$(function (){
|
initMap(1)
|
})
|
|
setInterval(() => {
|
getShuttleStateInfo()
|
getLiftStateInfo()
|
},1000)
|
|
// 提升机信息表获取
|
function getLiftStateInfo() {
|
$.ajax({
|
url: baseUrl+ "/lift/table/lift/state",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
$("#lift-status-box").empty()
|
res.data.forEach((item,index) => {
|
let liftStatusClass = "lift-idle"
|
switch (item.protocolStatus) {
|
case 1://空闲
|
liftStatusClass = "lift-idle";
|
break
|
case 2://作业中
|
liftStatusClass = "lift-working";
|
break
|
case 3://等待确认
|
liftStatusClass = "lift-waiting";
|
break
|
case 4://离线
|
liftStatusClass = "lift-offline";
|
break
|
default:
|
liftStatusClass = "lift-idle"
|
}
|
let liftStatus = '<div class="state states">' +
|
'<span>提升机 ' + item.liftNo + '</span>' +
|
'<span class="state-ss ' + liftStatusClass + '">' + item.protocolStatus$ + '</span></div>';
|
$("#lift-status-box").append(liftStatus)
|
|
})
|
}
|
});
|
}
|
|
// 四向穿梭车信息表获取
|
function getShuttleStateInfo() {
|
$.ajax({
|
url: baseUrl+ "/shuttle/table/shuttle/state",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
$("#shuttle-status-box").empty()
|
res.data.forEach((item,index) => {
|
let shuttleStatusClass = "shuttle-idle"
|
switch (item.protocolStatus) {
|
case 1://空闲
|
shuttleStatusClass = "shuttle-idle";
|
break
|
case 2://作业中
|
shuttleStatusClass = "shuttle-working";
|
break
|
case 3://等待确认
|
shuttleStatusClass = "shuttle-waiting";
|
break
|
case 4://充电中
|
shuttleStatusClass = "shuttle-charging";
|
break
|
case 5://充电任务等待确认
|
shuttleStatusClass = "shuttle-charging-waiting";
|
break
|
case 6://故障修复中
|
shuttleStatusClass = "shuttle-fixing";
|
break
|
case 7://离线
|
shuttleStatusClass = "shuttle-offline";
|
break
|
default:
|
shuttleStatusClass = "shuttle-offline"
|
}
|
let shuttleStatus = '<div class="state">' +
|
'<span>四向穿梭车 ' + item.shuttleNo + '</span>' +
|
'<span class="state-ss ' + shuttleStatusClass + '">' + item.protocolStatus$ + '</span></div>';
|
$("#shuttle-status-box").append(shuttleStatus)
|
|
if(item.wcsPoint.z != currentLev){
|
//四向穿梭车楼层和当前地图楼层不一致,删除该车辆
|
$("#sxcar-" + item.shuttleNo).remove()
|
}else {
|
//移动四向穿梭车
|
moveCar(item.shuttleNo,item.wcsPoint.x,item.wcsPoint.y)
|
}
|
})
|
}
|
});
|
}
|
|
//计算四向穿梭车图标位置
|
function getCarPosition(x,y) {
|
let top = (x * 35 - 35) + "px" //需要减去小车自己所占高度
|
let left = (y * 35 - 35) + "px" //需要减去小车自己所占宽度
|
return [top,left];
|
}
|
|
//移动四向穿梭车图标
|
function moveCar(id,x,y) {
|
//获取具体位置top和left值
|
let position = getCarPosition(x,y)
|
let top = position[0]
|
let left = position[1]
|
$("#sxcar-" + id).animate({top: top,left: left}, 1000);
|
}
|
|
//初始化地图
|
function initMap(lev) {
|
getMap(lev)
|
|
$.ajax({
|
url: baseUrl+ "/shuttle/table/shuttle/state",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
res.data.forEach((item,index) => {
|
if(lev == item.wcsPoint.z){
|
let carBox = '<div class="sxcar" id="sxcar-' + item.shuttleNo + '">' + item.shuttleNo + '</div>'
|
$("#mapDataId").append(carBox)
|
}
|
})
|
}
|
});
|
}
|
|
//获取地图数据
|
function getMap(lev) {
|
//母轨道第一次索引,用于定位小车
|
let firstMotherIndex = [0,0];
|
$("#mapDataId").empty()
|
$.ajax({
|
type:"get",
|
// url: baseUrl + "/static/js/map_" + lev + ".json",
|
url: baseUrl + "/console/map/" + lev + "/auth",
|
headers: {'token': localStorage.getItem('token')},
|
success: (res) => {
|
let data = res.data
|
mapData = data
|
let content = ""
|
data.forEach((rowData,index) => {
|
//去掉上下边缘禁区
|
if(!(index == 0 || data.length - 1 == index)){
|
let row = '<div class="stock-group">';
|
rowData.forEach((colData,idx) => {
|
//去掉左右边缘禁区
|
if(!(idx == 0 || rowData.length - 1 == idx)){
|
let col;
|
switch (colData.value){
|
case -999:
|
col = '<button class="item" style="background:#f83333;color: #fff;">' + idx + '</button>';
|
break;
|
case -1:
|
col = '<button class="item" style="visibility: hidden">' + idx + '</button>';
|
break;
|
case 3:
|
//母轨道
|
col = '<button class="item" style="background: #5af;">⇅⇄</button>';
|
if (firstMotherIndex[0] === 0 && firstMotherIndex[1] === 0) {
|
//第一次遇到母轨道,则保存该轨道地址(用于小车初始化定位)
|
firstMotherIndex = [index,idx]
|
}
|
break;
|
case 4:
|
//站点
|
var data = colData.data;
|
col = '<div id="site-' + data + '" class="site">' + data + '</div>';
|
break;
|
case 5:
|
//充电桩
|
col = '<button class="item" style="font-size: 24px">⚡</button>';
|
break;
|
default:
|
let val = idx;
|
if (colData.data.length > 0) {
|
val = colData.data
|
}
|
col = '<button class="item">' + val + '</button>';
|
}
|
|
if(rowData.length - 2 == idx){
|
//打上行数标记
|
col += '<span class="row-no">' + index + '#</span>';
|
}
|
row += col
|
}
|
})
|
row += '</div>';
|
content += row
|
}
|
})
|
|
$("#mapDataId").append(content)
|
}
|
})
|
}
|
|
//将地图数据转换成int二维数组(后续用于请求计算路径时携带地图数据参数使用)
|
function getMap2TwoArr() {
|
let data = []
|
mapData.forEach((item,index) => {
|
let data2 = []
|
item.forEach((val,idx) => {
|
data2.push(val.value)
|
})
|
data.push(data2)
|
})
|
|
return data;
|
}
|
|
function testMove() {
|
getMap2TwoArr()//测试地图数据转换是否正常
|
let json = "[{\"x\":5,\"y\":5},{\"x\":6,\"y\":5},{\"x\":7,\"y\":5},{\"x\":8,\"y\":5},{\"x\":9,\"y\":5},{\"x\":10,\"y\":5},{\"x\":11,\"y\":5},{\"x\":11,\"y\":6},{\"x\":12,\"y\":6},{\"x\":13,\"y\":6},{\"x\":14,\"y\":6},{\"x\":15,\"y\":6},{\"x\":16,\"y\":6}]";
|
json = JSON.parse(json)
|
json.forEach((item,index) => {
|
moveCar(1, item.x, item.y);
|
})
|
}
|
|
/**
|
* 重置地图
|
*/
|
function resetMap() {
|
$.ajax({
|
url:baseUrl+"/console/map/resetMap/auth",
|
headers:{
|
'token': localStorage.getItem('token')
|
},
|
data:{},
|
method:'get',
|
success:function (res) {
|
layer.msg('重置完成');
|
}
|
})
|
}
|
|
// 小车偏移动画
|
function carAnimate(id, target) {
|
if (id === 1000) {
|
let targetTop = 130;
|
switch (target) {
|
case 110:
|
targetTop += 0;
|
break;
|
case 109:
|
targetTop += 60;
|
break;
|
case 108:
|
targetTop += 100;
|
break;
|
case 107:
|
targetTop += 180;
|
break;
|
case 106:
|
targetTop += 220;
|
break;
|
default:
|
return;
|
}
|
$("#site-" + id).animate({top: targetTop+'px'}, 1000);
|
} else if (id === 2000) {
|
let targetTop = 130;
|
switch (target) {
|
case 226:
|
targetTop += 0;
|
break;
|
case 225:
|
targetTop += 60;
|
break;
|
case 224:
|
targetTop += 100;
|
break;
|
case 223:
|
targetTop += 180;
|
break;
|
case 222:
|
targetTop += 220;
|
break;
|
case 214:
|
targetTop += 280;
|
break;
|
case 220:
|
targetTop += 320;
|
break;
|
default:
|
return;
|
}
|
$("#site-" + id).animate({top: targetTop+'px'}, 1000);
|
}
|
}
|
</script>
|
<script type="text/javascript">
|
// 弹窗站点信息
|
$('#mapDataId').on('click','.site',function(){
|
var id = this.id.split("-")[1];
|
$("#siteWindow").attr("style","display:block;");//显示div
|
$("#crnWindow").attr("style","display:none;");
|
$(".detailed").empty();
|
$('.detailed').append(id+'站点详细信息');
|
$.ajax({
|
url:baseUrl+"/console/site/detail",
|
headers:{
|
'token': localStorage.getItem('token')
|
},
|
data:{
|
siteId: id
|
},
|
method:'post',
|
success:function (res) {
|
for (var val in res.data) {
|
var find = $("#siteWindow").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');
|
}
|
}
|
}
|
|
})
|
|
});
|
// 堆垛机信息
|
$('.machine').on('click',function(){
|
var id = this.id.split("-")[1];
|
$("#crnWindow").attr('style','display:block;');
|
$("#siteWindow").attr("style","display:none;");
|
$('.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');
|
}
|
}
|
}
|
|
})
|
|
})
|
// 弹窗关闭
|
$('button').on('click',function(){
|
$('#siteWindow').attr('style','display:none')
|
$('#crnWindow').attr('style','display:none')
|
})
|
|
|
var crn1Position = 0;
|
var crn2Position = 0;
|
var crn3Position = 0;
|
var crn4Position = 0;
|
var crn5Position = 0;
|
|
// 初始化
|
getSitesInfo();
|
getCrnInfo();
|
getSystemRunningStatus();
|
getBarcodeInfo();
|
getScaleInfo();
|
// 实时访问
|
setInterval(function () {
|
getCrnInfo();
|
getSystemRunningStatus();
|
getBarcodeInfo();
|
getScaleInfo();
|
}, 1000);
|
setInterval(function () {
|
getSitesInfo();
|
}, 3000);
|
|
$("#system-toggle").on("click",(e) => {
|
systemSwitch()
|
e.stopPropagation();//表示阻止向父元素冒泡
|
e.preventDefault();//阻止 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交或者a标签)。
|
})
|
|
// 系统运行开关
|
function systemSwitch() {
|
if (parent.systemRunning){
|
layer.prompt({title: '请输入口令,并停止 WCS 系统', formType: 1, shadeClose: true}, function(pass, idx){
|
layer.close(idx);
|
doSwitch(0, pass); // 停止wcs系统
|
});
|
} else {
|
doSwitch(1); // 启动wcs系统
|
}
|
}
|
|
// 请求服务器控制wcs系统运行状态
|
function doSwitch(operatorType, password) {
|
// 加载tips
|
var index = layer.load(1, {
|
shade: [0.1,'#fff']
|
});
|
$.ajax({
|
url: baseUrl+ "/console/system/switch",
|
headers: {'token': localStorage.getItem('token')},
|
// async: false,
|
data: {
|
operatorType: operatorType,
|
password: password
|
},
|
method: 'POST',
|
success: function (res) {
|
layer.close(index);
|
if (res.code === 200){
|
if (res.data.status) {
|
$('#system-toggle-checked').attr("checked", true);
|
$('#system-run-desc').html("系统运行中...");
|
parent.systemRunning = true;
|
} else {
|
$('#system-toggle-checked').attr("checked", false);
|
$('#system-run-desc').html("系统已停止!");
|
parent.systemRunning = false;
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
|
}
|
}
|
});
|
|
}
|
|
// 获取wcs系统运行状态
|
function getSystemRunningStatus() {
|
$.ajax({
|
url: baseUrl+ "/console/system/running/status",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
if (res.code === 200){
|
if (res.data.status) {
|
$('#system-toggle-checked').attr("checked", true);
|
$('#system-run-desc').html("系统运行中...");
|
parent.systemRunning = true;
|
} else {
|
$('#system-toggle-checked').attr("checked", false);
|
$('#system-run-desc').html("系统已停止!");
|
parent.systemRunning = false;
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 输送设备实时数据获取
|
function getSitesInfo(){
|
$.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);
|
}
|
if (i+1===8) {
|
carAnimate(i+1, Number(sites[i].nearbySta));
|
}
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 堆垛机实时数据获取
|
function getCrnInfo(){
|
$.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;
|
for (var i = 0; i < crns.length; i++){
|
var crnEl = $("#crn-"+crns[i].crnId);
|
crnEl.attr("class", "machine " + crns[i].crnStatus);
|
var unit = ($('.item').eq(0).width()+4)/2;
|
crnEl.animate({left: (crns[i].bay * unit + 25) +'px'}, 1000);
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 扫码器实时数据获取
|
function getBarcodeInfo(){
|
$.ajax({
|
url: baseUrl+ "/console/latest/data/barcode",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
if (res.code === 200){
|
var barcodes = res.data;
|
for (var i = 0; i < barcodes.length; i++){
|
$("#code-decoder-data-"+barcodes[i].barcodeId).html(barcodes[i].codeValue);
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 磅秤实时数据获取
|
function getScaleInfo(){
|
$.ajax({
|
url: baseUrl+ "/console/latest/data/scale",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
|
if (res.code === 200){
|
var sclaes = res.data;
|
for (var i = 0; i < sclaes.length; i++){
|
console.log(sclaes[i].scaleId + ":" + sclaes[i].value)
|
$("#scale-data-"+sclaes[i].scaleId).text(sclaes[i].value);
|
}
|
} else if (res.code === 403){
|
parent.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 小车偏移动画
|
function carAnimate(id, target) {
|
var targetTop = 122;
|
if (id === 8) {
|
switch (target) {
|
case 1:
|
targetTop += 160;
|
break;
|
case 2:
|
targetTop += 140;
|
break;
|
case 3:
|
targetTop += 80;
|
break;
|
case 4:
|
targetTop += 40;
|
break;
|
case 7:
|
targetTop += 0;
|
break;
|
default:
|
return;
|
}
|
} else {
|
return;
|
}
|
$("#site-" + id).animate({top: targetTop+'px'}, 1000);
|
}
|
|
//楼层切换按钮
|
function changFloor(e,x) {
|
$("#floorBtnBox button").each((index,item) => {
|
$(item).removeClass("btn-16-active")
|
})
|
$(e).addClass("btn-16-active")
|
currentLev = x
|
initMap(currentLev)
|
}
|
|
</script>
|