<!DOCTYPE html>
|
<html lang="en">
|
<head>
|
<meta charset="UTF-8">
|
<title>WCS控制中心</title>
|
<link rel="stylesheet" href="../static/css/animate.min.css">
|
<link rel="stylesheet" href="../static/vue/element/element.css">
|
<link rel="stylesheet" href="../static/css/console_vue.css">
|
<link rel="stylesheet" href="../static/css/toggle-switch.css">
|
<script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
|
<script type="text/javascript" src="../static/layui/layui.js"></script>
|
<script type="text/javascript" src="../static/js/handlebars/handlebars-v4.5.3.js"></script>
|
<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: 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>
|
|
<td>
|
<!-- 显示行号 -->
|
<div class="item" style="background: none;color: #000;">#{{index+1}}</div>
|
</td>
|
</tr>
|
</table>
|
</div>
|
|
</div>
|
|
<div class="footer">
|
<!-- 总开关 -->
|
<div class="line-status">
|
<div class="body-head">总开关</div>
|
<div class="switch" @click="systemSwitch">
|
<label id="system-toggle" class="toggle-switch" style="margin-left: 20px;">
|
<input id="system-toggle-checked" disabled 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 class="shuttle-status-box">
|
<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="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>
|
<!-- 输送线状态 -->
|
<div class="line-status">
|
<div class="body-head">输送线状态</div>
|
<div class="state states">
|
<span>运输线总数</span>
|
<span class="line-ss">9</span>
|
</div>
|
<div class="allStatus"><span>所有状态</span></div>
|
<div class="allStatus 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">
|
<li v-for="(item,index) in codeList1" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li>
|
</div>
|
</div>
|
<div class="tablebox">
|
<div class="table-head">
|
<li><span>条码名称</span><span class="right">扫码时间</span></li>
|
</div>
|
<div id="barcode2" class="table-body">
|
<li v-for="(item,index) in codeList2" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 输送设备弹窗 -->
|
<div id="siteWindow" :style="{display:siteWindow?'block':'none',zIndex: 999}" class="animate__animated animate__fadeIn">
|
<!-- 表头 -->
|
<div id="siteWindow-head">
|
<div class="detailed"></div>
|
<button @click="siteWindow = false"></button>
|
</div>
|
<!-- 表内容 -->
|
<div class="siteWindow-body">
|
<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">
|
<!-- 自动 -->
|
<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>
|
<!-- 出入类型 -->
|
<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>
|
|
<!-- 堆垛机弹窗 -->
|
<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: [],//地图数据
|
siteWindow: false, //站点弹窗显示默认不显示
|
crnWindow: false, //堆垛机弹窗显示默认不显示
|
rgvWindow: false, //rgv弹窗显示默认不显示
|
crnList: [], //堆垛机集合
|
liftList: [], //提升机集合
|
systemStatus: true,//系统运行状态
|
consoleInterval: null,//定时器存储变量
|
codeList1: [],//条码List
|
codeList2: [],//条码List
|
crnInitPosition: [],
|
rgvPosition: [],
|
},
|
created() {
|
this.init()
|
},
|
watch: {
|
|
},
|
methods: {
|
init() {
|
this.getMap()
|
this.getSystemRunningStatus() //获取系统运行状态
|
|
this.consoleInterval = setInterval(() => {
|
this.getCrnInfo() //获取堆垛机数据
|
this.getSiteInfo() //获取输送站点数据
|
this.getRgvInfo() //获取RGV数据
|
// this.getCodeData()//获取条码
|
}, 1000)
|
},
|
//获取地图数据
|
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;
|
}
|
})
|
},
|
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 + '号RGV');
|
$.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; //打开站点信息弹窗
|
$(".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');
|
}
|
}
|
}
|
|
})
|
},
|
getSiteInfo() {
|
//获取输送站点数据
|
$.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);
|
}
|
}
|
});
|
},
|
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);
|
}
|
}
|
});
|
},
|
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() {
|
// 系统开关
|
let that = this
|
if (this.systemStatus) {
|
this.$prompt('请输入口令,并停止WCS系统', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
}).then(({
|
value
|
}) => {
|
that.doSwitch(0, value)
|
}).catch(() => {
|
|
});
|
} else {
|
this.doSwitch(1)
|
}
|
},
|
doSwitch(operatorType, password) {
|
let that = this
|
$.ajax({
|
url: baseUrl + "/console/system/switch",
|
headers: {
|
'token': localStorage.getItem('token')
|
},
|
data: {
|
operatorType: operatorType,
|
password: password
|
},
|
method: 'POST',
|
success: function(res) {
|
if (res.code === 200) {
|
if (res.data.status) {
|
$('#system-toggle-checked').attr("checked", true);
|
$('#system-run-desc').html("系统运行中...");
|
that.systemStatus = true;
|
parent.systemRunning = true;
|
} else {
|
$('#system-toggle-checked').attr("checked", false);
|
$('#system-run-desc').html("系统已停止!");
|
that.systemStatus = false;
|
parent.systemRunning = false;
|
}
|
} else if (res.code === 403) {
|
parent.location.href = baseUrl + "/login";
|
} else {
|
that.$message({
|
message: res.msg,
|
type: 'error'
|
});
|
}
|
}
|
});
|
},
|
getSystemRunningStatus() {
|
// 获取wcs系统运行状态
|
let that = this
|
$.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("系统运行中...");
|
that.systemStatus = true;
|
parent.systemRunning = true;
|
} else {
|
$('#system-toggle-checked').attr("checked", false);
|
$('#system-run-desc').html("系统已停止!");
|
that.systemStatus = false;
|
parent.systemRunning = false;
|
}
|
} 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){
|
let data = JSON.parse(res.data)
|
if (data.length <= 5) {
|
this.codeList1 = data;
|
} else {
|
this.codeList1 = data.slice(0, 5);
|
this.codeList2 = data.splice(5, 10);
|
}
|
}
|
},
|
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;
|
}
|
},
|
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;
|
}
|
},
|
isJson(str) {
|
try {
|
JSON.parse(str);
|
return true;
|
} catch (e) {
|
return false;
|
}
|
}
|
}
|
})
|
</script>
|
</body>
|
</html>
|