<template>
|
<div class="app-container">
|
<el-row :gutter="5">
|
<el-col :span="7">
|
<el-card style="height: 72px;padding-top: 9px" shadow="never">
|
<span class="head-font">工位编号 : {{headContent.processesCode}}</span>
|
<span hidden>{{headContent.inboundTime}}</span>
|
</el-card>
|
</el-col>
|
<el-col :span="7">
|
<el-card shadow="never">
|
<span class="head-font">物料编码 : </span>
|
<el-input style="width: 70%" ref="inputData" v-model="materialCode" @change="materialCodeHandleEnter" placeholder="请扫描总成序列号"></el-input>
|
</el-card>
|
</el-col>
|
<el-col :span="10">
|
<el-card style="height: 72px;padding-top: 9px" shadow="never">
|
<span class="head-font">产品序列号 : {{headContent.sfcCode}}</span>
|
<el-button @click="clearClick" style="float: right" type="danger" size="mini">清除</el-button>
|
</el-card>
|
</el-col>
|
|
</el-row>
|
<el-row :gutter="5" style="margin-top: 5px">
|
<el-col :span="24">
|
<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="24">
|
<el-table height="500" :cell-style="rowStyle" :data="formulaChildList">
|
<el-table-column label="排序" width="60" align="center" type="index">
|
</el-table-column>
|
<el-table-column label="操作内容" :show-overflow-tooltip='true' align="center" prop="operationSteps">
|
</el-table-column>
|
<el-table-column label="产品编号" align="center" prop="productCode">
|
</el-table-column>
|
<el-table-column label="物料编码" align="center" prop="materialCode">
|
</el-table-column>
|
<el-table-column label="采集值" align="center" prop="collectData">
|
</el-table-column>
|
<el-table-column label="结果" align="center" prop="results">
|
</el-table-column>
|
</el-table>
|
</el-col>
|
</el-tab-pane>
|
</el-tabs>
|
</el-col>
|
</el-row>
|
</div>
|
</template>
|
<script>
|
import {getIpv4, listStationConf} from "@/api/main/sc/stationConf";
|
import {
|
checkMaterialCode,
|
clearWorkpieceRelease,
|
fistSetpNumber,
|
noPageListFormulaChild,
|
workpieceRelease,
|
yzUpdateResults,
|
yzUpdateTighteningFormula
|
} from "@/api/main/bs/formulaChild/formulaChild";
|
import MySerialPort from "@/utils/MySerialPort";
|
import USBDevice from "@/utils/usb.json";
|
import {addPassingStationCollection} from "@/api/main/da/passingStationCollection/passingStationCollection";
|
import {
|
addTighteningParameters, preInstallOut,
|
replaceAssemblyCode,
|
saveCampaignTimeParameters,
|
yzAddBasicParameters,
|
} from "@/api/main/da/paramCollection/paramCollection";
|
|
export default {
|
name: "stationTerminal",
|
data() {
|
return {
|
showInput: true,
|
serialPortContent: '',
|
// 查询参数
|
formulaChildParams: {
|
pageNum: 1,
|
pageSize: 10,
|
productCode: null,
|
processesCode: null,
|
},
|
// 配方配置子信息表格数据
|
formulaChildList: [],
|
ipAddress: '',
|
imgSrc: '',
|
headContent: {
|
processesCode: 'OP1010',
|
processesName: '贴标机-贴码',
|
sfcCode: '',
|
yzSfcCode: '',
|
inboundTime: '',
|
},
|
workpieceInformation: {
|
workOrderNo: 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://10.103.210.248:8080/websocket/message/",
|
url: "ws://192.168.20.250:8080/websocket/message/",
|
message: "",
|
text_content: "",
|
ws: null,
|
inputValue: '9',
|
|
open1: false,
|
input: "",
|
keepReading: true,
|
form1: {
|
baudRate: "115200",
|
dataBits: "8",
|
stopBits: "1",
|
parity: "none",
|
flowControl: "none",
|
desc: "",
|
type: "1",
|
isShowHistory: false,
|
},
|
btnType: "primary",
|
btnText: "连接串口",
|
restaurants: [],
|
portsList: [],
|
isShowSendArea: false,
|
readType: 1,
|
title: "",
|
|
passingStationForm: {},
|
originalArray: [],
|
materialCode: '',
|
}
|
},
|
created() {
|
this.setFocus()
|
this.initStation()
|
},
|
methods: {
|
|
materialCodeHandleEnter() {
|
if(!this.headContent.sfcCode){
|
this.headContent.sfcCode = this.materialCode
|
this.headContent.inboundTime = this.getCurrentTime();
|
this.getList()
|
}else {
|
this.serialPortMethod(this.materialCode);
|
this.$message("扫描物料编码"+this.materialCode);
|
this.setFocus();
|
this.materialCode = '';
|
}
|
},
|
setFocus(){
|
this.$nextTick(()=>{
|
this.$refs.inputData.focus()
|
})
|
},
|
serialLink() {
|
this.open1 = true
|
},
|
Release(){
|
// this.$message('portsList!'+this.portsList.length);
|
if(this.btnType === "danger"){
|
this.$message('连接了!');
|
|
}else {
|
this.$message('mei连接了!');
|
|
}
|
|
},
|
|
getCurrentTime() {
|
const now = new Date();
|
const year = now.getFullYear();
|
const month = this.padTimeUnit(now.getMonth() + 1); // 月份是从0开始的
|
const day = this.padTimeUnit(now.getDate());
|
const hours = this.padTimeUnit(now.getHours());
|
const minutes = this.padTimeUnit(now.getMinutes());
|
const seconds = this.padTimeUnit(now.getSeconds());
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
},
|
padTimeUnit(value) {
|
return value.toString().padStart(2, '0');
|
},
|
serialPortMethod(value){
|
let formulaChildParams = {
|
scanBarcode: value,
|
sfcBarcode: this.headContent.sfcCode,
|
workOrderNo: '-',
|
productCode: "9900200461",
|
locationCode: this.headContent.processesCode,
|
collectionTime: new Date()
|
}
|
yzUpdateResults(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 = "9900200461"
|
this.formulaChildParams.processesCode = this.headContent.processesCode
|
console.log(this.formulaChildParams)
|
noPageListFormulaChild(this.formulaChildParams).then(response => {
|
this.formulaChildList = response.rows;
|
if (this.formulaChildList.length >0){
|
let pos = 0
|
const tempArr = this.formulaChildList.filter(x=> 'OK' === x.results)
|
if (tempArr.length>0){
|
pos = tempArr.length
|
this.$nextTick(() => {
|
let temp33 = document.getElementsByClassName('el-table__row')
|
console.log('temp33',temp33)
|
console.log('len',temp33.item(pos))
|
if (temp33.length > 0){
|
console.log('1111111111111111')
|
let arr = temp33[pos-1]
|
console.log('srr',arr)
|
arr.scrollIntoView({ block: 'center' })
|
}
|
})
|
}
|
|
}
|
});
|
},
|
endClear(){
|
|
},
|
changeMenu(tab, event) {
|
console.log(tab, event);
|
},
|
clearClick(){
|
const param = {
|
productCode: '1P102S',
|
locationCode: this.headContent.processesCode,
|
}
|
clearWorkpieceRelease(param).then(response => {});
|
|
|
this.headContent.sfcCode = ''
|
// this.formulaChildList = [];
|
this.materialCode = ''
|
this.$message('清除成功!');
|
this.setFocus()
|
setTimeout(() => {
|
// 这里是你想要延时后执行的逻辑
|
this.getList()
|
}, 500); // 500毫秒 = 0.5秒
|
},
|
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() {
|
const param = {
|
processesCode: this.headContent.processesCode,
|
}
|
fistSetpNumber(param).then(response => {});
|
this.getListFormulaChild()
|
// this.addOverStationCollection()
|
},
|
|
/** 入站增加过站采集记录 **/
|
addOverStationCollection(){
|
this.passingStationForm = {
|
id: null,
|
// workOrderNo: this.workpieceInformation.workOrderNo,
|
productCode: "1P102S",
|
locationCode: this.headContent.processesCode,
|
// model: this.workpieceInformation.productModel,
|
productBarcode: this.headContent.sfcCode,
|
sfcCode: this.headContent.sfcCode,
|
inboundTime: new Date()
|
}
|
addPassingStationCollection(this.passingStationForm).then(response => {});
|
yzAddBasicParameters(this.passingStationForm).then(response => {});
|
},
|
exit() {
|
if (this.ws) {
|
this.ws.close();
|
this.ws = null;
|
}
|
},
|
send() {
|
if (this.ws) {
|
this.ws.send(this.message);
|
} else {
|
alert("未连接到服务器");
|
}
|
},
|
|
initStation: async function () {
|
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) {
|
self.$message('websocket连接成功!');
|
};
|
this.ws.onmessage = function (event) {
|
if(event.data.includes("[")) {
|
let formulaChilds = "";
|
self.formulaChildList.sort((a, b) => a.stepSort - b.stepSort);
|
self.formulaChildList
|
.filter((formulaChild) => formulaChild.operationType === '1');
|
for (let i = 0; i < self.formulaChildList.length; i++) {
|
let formulaChild = self.formulaChildList[i];
|
let results = formulaChild.results;
|
if (results === '' || results === null || results === 'NG') {
|
formulaChilds = formulaChild;
|
break;
|
}
|
}
|
const param = {
|
tightenTheArray: event.data,
|
paramCode: formulaChilds.paramCode,
|
workOrderNo: '-',
|
productCode: "9900200461",
|
locationCode: self.headContent.processesCode,
|
productBarcode: self.headContent.sfcCode,
|
spareField2: formulaChilds.spareField2,
|
spareField3: formulaChilds.spareField3,
|
spareField4: formulaChilds.spareField4,
|
stepSort: formulaChilds.stepSort
|
}
|
if(self.headContent.sfcCode === null||self.headContent.sfcCode ===''){
|
self.$message('未找到总成码,请先扫码!');
|
return;
|
}
|
if(formulaChilds.paramCode === null||formulaChilds.paramCode ===''){
|
self.$message('未找到参数码,请检查参数码是否正确');
|
return;
|
}
|
|
checkMaterialCode(param).then(response => {
|
if(response.msg === "2"){
|
self.$message('未扫描物料码完毕!');
|
}else {
|
yzUpdateTighteningFormula(param).then(response => {
|
console.log(response)
|
if(response.msg === "1" || response.msg === "3"){
|
self.getListFormulaChild()
|
}else {
|
const param = {
|
locationCode: self.headContent.processesCode,
|
productBarcode: self.headContent.sfcCode,
|
inboundTime: self.headContent.inboundTime
|
}
|
preInstallOut(param).then(response => {});
|
workpieceRelease(param).then(response => {});
|
self.formulaChildList = [];
|
self.headContent.sfcCode = '';
|
}
|
});
|
addTighteningParameters(param).then(response => {});
|
}
|
});
|
}
|
};
|
},
|
//接受数据的回调
|
callBack(value) {
|
if (this.form1.isShowHistory) this.form1.desc = this.readLi().join("");
|
else {
|
const scanValue = this.myserialport.hex2atostr(value).replace(/[\r\n]/g, '');
|
console.log("串口收到数据-------------------"+scanValue)
|
|
if(this.headContent.sfcCode !== ''){
|
this.$message('预装工位扫描物料编码'+scanValue);
|
console.log(scanValue)
|
this.serialPortMethod(scanValue)
|
} else {
|
this.headContent.sfcCode = scanValue;
|
this.headContent.inboundTime = this.getCurrentTime();
|
this.getList()
|
}
|
}
|
},
|
}
|
}
|
|
</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>
|