<template>
|
<div class="app-container">
|
<el-row :gutter="5">
|
<el-col :span="6">
|
<el-card shadow="never">
|
<span class="head-font">工位编号 : {{headContent.processesCode}}</span>
|
</el-card>
|
</el-col>
|
<el-col :span="6">
|
<el-card shadow="never">
|
<span class="head-font">工位名称 : {{headContent.processesName}}</span>
|
</el-card>
|
</el-col>
|
<el-col :span="12">
|
<el-card shadow="never">
|
<span class="head-font">总成编码 : {{headContent.sfcCode}}</span>
|
<el-input v-model="content" style="float: right;width: 150px;" placeholder="请输入内容"></el-input>
|
<el-button @click="scanCompleted" style="float: right" type="primary">扫码完成</el-button>
|
<el-button @click="clearClick" style="float: right" type="danger">清除</el-button>
|
</el-card>
|
</el-col>
|
|
</el-row>
|
<el-row :gutter="5" style="margin-top: 5px">
|
<el-col :span="6" >
|
<el-card class="bottom-card">
|
<div slot="header" class="clearfix">
|
<i class="el-icon-tickets"></i>
|
<span style="font-weight: bold">当前工件信息</span>
|
</div>
|
<el-descriptions :column="1" :label-style="{'font-size': '15px'}" border :content-style="{'min-width': '150px'}">
|
<el-descriptions-item label="工单编号">
|
<span>{{workpieceInformation.workOrderCode}}</span>
|
</el-descriptions-item>
|
<el-descriptions-item label="产品编号">
|
<span>{{workpieceInformation.productCode}}</span>
|
</el-descriptions-item>
|
<el-descriptions-item label="产品型号">
|
<span>{{workpieceInformation.productModel}}</span>
|
</el-descriptions-item>
|
<el-descriptions-item label="产品名称">
|
<span>{{workpieceInformation.productName}}</span>
|
</el-descriptions-item>
|
<el-descriptions-item label="节拍">
|
<span>{{workpieceInformation.beat}}</span>
|
</el-descriptions-item>
|
</el-descriptions>
|
<el-divider></el-divider>
|
<el-row>
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.plcState ? 'circle-green-animate':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.plcState}}</span>
|
<span> PLC状态</span>
|
</el-col>
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.scannerState ? 'circle-green-animate':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.scannerState}}</span>
|
<span> 扫码枪状态</span>
|
</el-col>
|
</el-row>
|
<el-row style="margin-top: 20px">
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.InPlace ? 'circle-green':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.InPlace}}</span>
|
<span> 工件到位</span>
|
</el-col>
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.scanFinish ? 'circle-green':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.scanFinish}}</span>
|
<span> 扫码完成</span>
|
</el-col>
|
</el-row>
|
<el-row style="margin-top: 20px">
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.startWork ? 'circle-green':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.startWork}}</span>
|
<span> 开始作业</span>
|
</el-col>
|
<el-col :span="12">
|
<el-button class="circle-button" :class="cakeLamp.release ? 'circle-green':'circle-red'" circle></el-button>
|
<span style="display: none">{{cakeLamp.release}}</span>
|
<span> 允许放行</span>
|
</el-col>
|
|
</el-row>
|
<el-row style="margin-top: 20px">
|
<el-col :span="12">
|
<el-input v-model="serialPortContent" style="width: 150px;" placeholder="请输入内容"></el-input>
|
|
</el-col>
|
<el-col :span="12">
|
<el-button @click="serialPortMethod" type="primary">串口获取数据</el-button>
|
|
</el-col>
|
</el-row>
|
<el-row style="margin-top: 20px">
|
<el-button @click="Release" type="primary">放行</el-button>
|
</el-row>
|
</el-card>
|
|
</el-col>
|
<el-col :span="18">
|
<el-tabs type="border-card" style="height: 600px" v-model="activeName" @tab-click="changeMenu">
|
<el-tab-pane name="first">
|
<span slot="label"> <a class="el-icon-date"></a>首页</span>
|
<el-col :span="8">
|
<el-table :cell-style="rowStyle" :data="formulaChildList">
|
<el-table-column label="排序" width="60" align="center" prop="stepSort">
|
</el-table-column>
|
<el-table-column label="操作内容" :show-overflow-tooltip='true' align="center" prop="operationSteps">
|
</el-table-column>
|
</el-table>
|
</el-col>
|
<el-col :span="16">
|
<el-image style="height: 520px;width: 100%" :src="imgSrc"></el-image>
|
</el-col>
|
</el-tab-pane>
|
<el-tab-pane name="second">
|
<span slot="label"> <b class="el-icon-date"></b>物料BOM</span>
|
<el-empty>
|
<span slot="description">暂无数据</span>
|
</el-empty>
|
</el-tab-pane>
|
<el-tab-pane name="third">
|
<span slot="label"> <b class="el-icon-date"></b>采集清单</span>
|
<el-empty>
|
<span slot="description">暂无数据</span>
|
</el-empty>
|
</el-tab-pane>
|
<el-tab-pane name="fourth">
|
<span slot="label"> <b class="el-icon-date"></b>安灯状态</span>
|
<el-empty>
|
<span slot="description">暂无数据</span>
|
</el-empty>
|
</el-tab-pane>
|
<el-tab-pane name="fifth">
|
<span slot="label"> <b class="el-icon-date"></b>工艺配方</span>
|
<el-empty>
|
<span slot="description">暂无数据</span>
|
</el-empty>
|
</el-tab-pane>
|
</el-tabs>
|
</el-col>
|
</el-row>
|
</div>
|
</template>
|
<script>
|
import {listWorkReport} from "@/api/main/om/workReport/workReport";
|
import {listStationConf,getIpv4} from "@/api/main/sc/stationConf";
|
import {listFormulaChild, releaseCheck, updateResults} from "@/api/main/bs/formulaChild/formulaChild";
|
|
export default {
|
name: "stationTerminal",
|
data() {
|
return {
|
serialPortContent: '',
|
// 查询参数
|
formulaChildParams: {
|
pageNum: 1,
|
pageSize: 10,
|
productCode: null,
|
},
|
// 配方配置子信息表格数据
|
formulaChildList: [],
|
ipAddress: '',
|
imgSrc: '',
|
headContent: {
|
processesCode: 'OP1010',
|
processesName: '贴标机-贴码',
|
sfcCode: '1000000000000001',
|
},
|
workpieceInformation: {
|
workOrderCode: null,
|
productCode: null,
|
productModel: null,
|
productName: null,
|
beat: null,
|
},
|
// 查询参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
sfcCode: null,
|
},
|
// 查询参数
|
StationConfQueryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
ipAddress: null,
|
},
|
cakeLamp: {
|
plcState: 1, //plc
|
scannerState: 1, //扫码枪
|
InPlace: 0, //工件到位
|
scanFinish: 0,
|
startWork: 0,
|
release: 0 //允许放行
|
},
|
content: '',
|
activeName: 'first',
|
url: "ws://192.168.11.60:8080/websocket/message/",
|
message: "",
|
text_content: "",
|
ws: null,
|
inputValue: '9'
|
}
|
},
|
beforeDestroy() {
|
this.exit();
|
},
|
created() {
|
this.initStation();
|
// this.getStationConfList();
|
// setTimeout(() => {
|
// this.connectWebsocket();
|
// }, 3000);
|
},
|
mounted() {
|
|
},
|
methods: {
|
Release(){
|
releaseCheck().then(response => {
|
if(response.data === 0){
|
//改变状态
|
this.$message('放行成功!');
|
|
}else {
|
this.$message('步骤未完成不许放行!');
|
}
|
});
|
},
|
serialPortMethod(){
|
let formulaChildParams = {
|
materialCode: this.serialPortContent
|
}
|
updateResults(formulaChildParams).then(response => {
|
this.getListFormulaChild()
|
});
|
},
|
rowStyle({ row }) {
|
if (row.results === 'OK') {
|
return 'background-color: PaleGreen';
|
} else if (row.results === 'NG') {
|
return 'background-color: LightSalmon';
|
}
|
return '';
|
},
|
/** 查询配方配置子信息列表 */
|
getListFormulaChild() {
|
this.formulaChildParams.productCode = this.workpieceInformation.productCode
|
listFormulaChild(this.formulaChildParams).then(response => {
|
this.formulaChildList = response.rows;
|
});
|
},
|
changeMenu(tab, event) {
|
console.log(tab, event);
|
},
|
clearClick(){
|
this.$message('这是一条清除消息提示');
|
this.headContent.sfcCode = null
|
},
|
scanCompleted(){
|
this.$message('扫码完成'+this.content);
|
this.headContent.sfcCode = this.content
|
this.queryParams.sfcCode = this.content
|
this.getList()
|
this.getListFormulaChild()
|
this.cakeLamp.scanFinish = 1
|
this.cakeLamp.startWork = 1
|
|
},
|
/** 查询报工记录 表列表 */
|
async getList() {
|
await listWorkReport(this.queryParams).then(response => {
|
let rowsData = response.rows[0];
|
console.log(rowsData)
|
this.workpieceInformation.workOrderCode = rowsData.workOrderCode;
|
this.workpieceInformation.productCode = rowsData.productCode;
|
this.workpieceInformation.productModel = rowsData.productModel;
|
this.workpieceInformation.productName = rowsData.productName;
|
this.timer = setInterval(() => {
|
this.workpieceInformation.beat++;
|
}, 1000);
|
});
|
this.getListFormulaChild()
|
|
},
|
allowRelease(){
|
clearInterval(this.timer);
|
this.$message('保存节拍为'+this.workpieceInformation.beat+'秒');
|
},
|
/** 查询工位终端配置列表 */
|
// async getStationConfList() {
|
// await getIpv4().then(response => {
|
// this.StationConfQueryParams.ipAddress = response.msg
|
// console.log('查询到本工位IP为'+this.StationConfQueryParams.ipAddress)
|
// });
|
// listStationConf(this.StationConfQueryParams).then(response => {
|
// let rows = response.rows[0]
|
// if(response.rows.length===0){
|
// this.$message('该工位没有配置IP,请联系管理员配置IP');
|
// return
|
// }
|
// this.headContent.processesName = rows.processesName
|
// this.headContent.processesCode = rows.processesCode
|
// console.log('设置工位编码'+this.headContent.processesCode)
|
//
|
// });
|
// },
|
// connectWebsocket() {
|
// console.log('websocket连接工位为'+this.headContent.processesCode)
|
// const wsuri = this.url + this.headContent.processesCode;
|
// this.ws = new WebSocket(wsuri);
|
// const self = this;
|
// this.ws.onopen = function (event) {
|
// // self.text_content = self.text_content + "已经打开连接!" + "\n";
|
// this.$message('websocket连接成功!');
|
// };
|
// this.ws.onmessage = function (event) {
|
// self.text_content = event.data + "\n";
|
// console.log(event.data)
|
// if(event.data === "IN"){
|
// self.cakeLamp.InPlace = "1"
|
// }else if(event.data === "OUT"){
|
// self.cakeLamp.outRsSign = "1"
|
// }
|
// };
|
// },
|
exit() {
|
if (this.ws) {
|
this.ws.close();
|
this.ws = null;
|
}
|
},
|
send() {
|
if (this.ws) {
|
this.ws.send(this.message);
|
} else {
|
alert("未连接到服务器");
|
}
|
},
|
async initStation(){
|
await getIpv4().then(response => {
|
this.StationConfQueryParams.ipAddress = response.msg
|
console.log('查询到本工位IP为'+this.StationConfQueryParams.ipAddress)
|
});
|
await listStationConf(this.StationConfQueryParams).then(response => {
|
let rows = response.rows[0]
|
if(response.rows.length===0){
|
this.$message('该工位没有配置IP,请联系管理员配置IP');
|
return
|
}
|
this.headContent.processesName = rows.processesName
|
this.headContent.processesCode = rows.processesCode
|
console.log('设置工位编码'+this.headContent.processesCode)
|
|
});
|
console.log('websocket连接工位为'+this.headContent.processesCode)
|
const wsuri = this.url + this.headContent.processesCode;
|
this.ws = new WebSocket(wsuri);
|
const self = this;
|
this.ws.onopen = function (event) {
|
this.$message('websocket连接成功!');
|
};
|
this.ws.onmessage = function (event) {
|
self.text_content = event.data + "\n";
|
console.log(event.data)
|
if(event.data === "IN"){
|
self.cakeLamp.InPlace = 1
|
}else if(event.data === "OUT"){
|
self.cakeLamp.release = 1
|
setTimeout(() => {
|
this.resetting()
|
}, 2000); // 延时2秒触发
|
}else if(event.data === 'TIGHTEN'){
|
console.log('开始拧紧')
|
self.getListFormulaChild()
|
}
|
};
|
},
|
resetting() {
|
this.cakeLamp = {
|
InPlace: 0,
|
release: 0,
|
startWork: 0,
|
scanFinish: 0,
|
}
|
}
|
}
|
}
|
|
</script>
|
<style scoped>
|
.bottom-card{
|
height: 600px;
|
}
|
.circle-button{
|
height: 30px;
|
width: 30px;
|
}
|
.circle-red {
|
background-color: #e01a4f;
|
}
|
.circle-green {
|
background-color: green;
|
}
|
.circle-green-animate {
|
background-color: green;
|
animation: circle-green-animate 2s infinite;
|
}
|
@keyframes circle-green-animate {
|
50% {
|
opacity: 0.6;
|
}
|
0% {
|
opacity: 0.2;
|
}
|
}
|
.head-font{
|
font-weight: bold;
|
font-size: 25px;
|
}
|
span{
|
font-size: 15px;
|
}
|
.el-table .warning-row {
|
background: oldlace;
|
}
|
|
.el-table .success-row {
|
background: #f0f9eb;
|
}
|
</style>
|