-
admin
2024-04-25 5316c506119ad056a5640650e5e79babe4194d38
jcdm-ui/src/views/main/kb/stationTerminal/index.vue
@@ -13,7 +13,7 @@
     </el-col>
     <el-col :span="10">
       <el-card shadow="never">
         <span class="head-font">总成编码 : {{headContent.sfcCode}}</span>
         <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 type="primary" style="float: right" icon="el-icon-search" size="mini" @click="serialLink">串口连接</el-button>
@@ -32,7 +32,7 @@
         <el-descriptions :column="1" border :content-style="{'min-width': '140px'}">
<!--         <el-descriptions :column="1" :label-style="{'font-size': '15px'}" border :content-style="{'min-width': '150px'}">-->
           <el-descriptions-item label="工单编号">
               <span>{{workpieceInformation.workOrderCode}}</span>
               <span>{{workpieceInformation.workOrderNo}}</span>
           </el-descriptions-item>
           <el-descriptions-item label="产品编号">
             <span>{{workpieceInformation.productCode}}</span>
@@ -43,9 +43,9 @@
           <el-descriptions-item label="产品名称">
             <span>{{workpieceInformation.productName}}</span>
           </el-descriptions-item>
           <el-descriptions-item label="节拍">
             <span>{{workpieceInformation.beat}}</span>
           </el-descriptions-item>
<!--           <el-descriptions-item label="节拍">-->
<!--             <span>{{workpieceInformation.beat}}</span>-->
<!--           </el-descriptions-item>-->
         </el-descriptions>
         <el-divider></el-divider>
         <el-row>
@@ -95,9 +95,15 @@
<!--           </el-col>-->
<!--         </el-row>-->
<!--         <el-row style="margin-top: 20px">-->
<!--             <el-button @click="Release" type="primary">放行</el-button>-->
<!--         </el-row>-->
         <el-row v-show="showInput" style="margin-top: 20px">
           <el-col></el-col>
             <span style="width: 130px;" class="head-font">预装总成号 : {{headContent.yzSfcCode}}</span>
         </el-row>
         <el-row v-show="showInput" style="margin-top: 20px">
<!--             <el-button @click="Release" type="primary">绑定</el-button>-->
           <el-button @click="bindYzSfc" type="primary">绑定</el-button>
         </el-row>
       </el-card>
     </el-col>
@@ -105,42 +111,50 @@
       <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="10">
             <el-table :cell-style="rowStyle" :data="formulaChildList">
               <el-table-column label="排序" width="60" align="center" prop="stepSort">
           <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-col :span="14">
             <el-image style="height: 520px;width: 100%" :src="imgSrc"></el-image>
           </el-col>
<!--           <el-col :span="14">-->
<!--             <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-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>
@@ -286,14 +300,31 @@
<script>
import {listWorkReport} from "@/api/main/om/workReport/workReport";
import {listStationConf,getIpv4} from "@/api/main/sc/stationConf";
import {listFormulaChild, releaseCheck, updateResults, workpieceRelease} from "@/api/main/bs/formulaChild/formulaChild";
import {
  listFormulaChild,
  noPageListFormulaChild,
  releaseCheck,
  updateResults,
  updateTighteningFormula,
  workpieceRelease
} from "@/api/main/bs/formulaChild/formulaChild";
import MySerialPort from "@/utils/MySerialPort";
import USBDevice from "@/utils/usb.json";
import {listProductionOrde} from "@/api/main/om/productionOrde/productionOrde";
import {addPassingStationCollection} from "@/api/main/da/passingStationCollection/passingStationCollection";
import {
  addBasicParameters,
  addParamCollection,
  addTighteningParameters,
  saveCampaignTimeParameters,
  replaceAssemblyCode,
} from "@/api/main/da/paramCollection/paramCollection";
export default {
  name: "stationTerminal",
  data() {
    return {
      showInput: true,
      serialPortContent: '',
      // 查询参数
      formulaChildParams: {
@@ -309,10 +340,11 @@
      headContent: {
        processesCode: 'OP1010',
        processesName: '贴标机-贴码',
        sfcCode: '10',
        sfcCode: '',
        yzSfcCode: '',
      },
      workpieceInformation: {
        workOrderCode: null,
        workOrderNo: null,
        productCode: null,
        productModel: null,
        productName: null,
@@ -340,7 +372,7 @@
      },
      content: '',
      activeName: 'first',
      url: "ws://192.168.11.134:8080/websocket/message/",
      url: "ws://192.168.1.103:8080/websocket/message/",
      message: "",
      text_content: "",
      ws: null,
@@ -350,7 +382,7 @@
      input: "",
      keepReading: true,
      form1: {
        baudRate: "9600",
        baudRate: "115200",
        dataBits: "8",
        stopBits: "1",
        parity: "none",
@@ -366,6 +398,9 @@
      isShowSendArea: false,
      readType: 1,
      title: "",
      passingStationForm: {},
      originalArray: [],
    }
  },
  beforeDestroy() {
@@ -405,31 +440,73 @@
    serialLink() {
      this.open1 = true
    },
    Release(){
      //判断是否可以释放
      let formulaChildParams = {
        productCode: this.workpieceInformation.productCode,
        processesCode: this.headContent.processesCode
      }
      releaseCheck(formulaChildParams).then(response => {
        if(response.data === 0){
          //改变状态
          workpieceRelease(formulaChildParams).then(response => {
          });
          this.$message('放行成功!');
          this.formulaChildList = []
          this.getListFormulaChild()
          // this.resetting()
        }else {
          this.$message('步骤未完成不许放行!');
    bindYzSfc(){
      if(this.headContent.sfcCode!==""&&this.headContent.yzSfcCode!==""){
        let param = {
          sfcCode: this.headContent.sfcCode,
          locationCode: this.headContent.processesCode,
          yzSfcCode: this.headContent.yzSfcCode
        }
      });
        this.$message('可以绑定!');
        replaceAssemblyCode(param).then(response => {
        });
      }
    },
    Release(){
      // this.$message('portsList!'+this.portsList.length);
      if(this.btnType === "danger"){
        this.$message('连接了!');
      }else {
        this.$message('mei连接了!');
      }
      // //判断是否可以释放
      // let formulaChildParams = {
      //   productCode: this.workpieceInformation.productCode,
      //   processesCode: this.headContent.processesCode
      // }
      // releaseCheck(formulaChildParams).then(response => {
      //   if(response.data === 0){
      //     //改变状态
      //     workpieceRelease(formulaChildParams).then(response => {
      //     });
      //     this.$message('放行成功!');
      //     this.formulaChildList = []
      //     this.getListFormulaChild()
      //     // this.resetting()
      //   }else {
      //     this.$message('步骤未完成不许放行!');
      //   }
      // });
    },
    serialPortMethod(value){
      // let formulaChilds = "";
      // this.formulaChildList.forEach((formulaChild) => {
      //   let operationType = formulaChild.operationType;
      //   let results = formulaChild.results;
      //   let materialCode = formulaChild.materialCode;
      //   if(operationType === '2' && value.includes(materialCode) && (results === "" || results === null || results === 'NG')){
      //     formulaChilds = formulaChild;
      //     return; // 使用return代替break
      //   }
      // });
      // console.log(formulaChilds)
      let formulaChildParams = {
        materialCode: value
        scanBarcode: value,
        sfcBarcode: this.headContent.sfcCode,
        workOrderNo: this.workpieceInformation.workOrderNo,
        productCode: this.workpieceInformation.productCode,
        locationCode: this.headContent.processesCode,
        collectionTime: new Date()
      }
      updateResults(formulaChildParams).then(response => {
        console.log(response)
        if(response.msg === "3"){
          this.cakeLamp.release= 1 //允许放行
        }
        this.getListFormulaChild()
      });
    },
@@ -443,11 +520,26 @@
    },
    /** 查询配方配置子信息列表 */
    getListFormulaChild() {
      // this.formulaChildList = []
      this.formulaChildParams.productCode = this.workpieceInformation.productCode
      this.formulaChildParams.processesCode = this.headContent.processesCode
      listFormulaChild(this.formulaChildParams).then(response => {
      console.log(this.formulaChildParams)
      noPageListFormulaChild(this.formulaChildParams).then(response => {
        this.formulaChildList = response.rows;
      });
    },
    endClear(){
      this.cakeLamp.InPlace= 0 //工件到位
      this.cakeLamp.scanFinish= 0
      this.cakeLamp.startWork= 0
      this.cakeLamp.release= 0 //允许放行
      this.formulaChildList = []
      this.workpieceInformation.productCode = null;
      this.workpieceInformation.workOrderNo = null;
      this.workpieceInformation.productModel = null;
      this.workpieceInformation.productName = null;
      this.headContent.sfcCode = '';
    },
    changeMenu(tab, event) {
      console.log(tab, event);
@@ -466,12 +558,12 @@
      this.cakeLamp.startWork = 1
    },
    /** 查询报工记录 表列表 */
    /** 查询工单列表 */
    async getList() {
      await listWorkReport(this.queryParams).then(response => {
      await listProductionOrde(this.queryParams).then(response => {
        let rowsData = response.rows[0];
        console.log(rowsData)
        this.workpieceInformation.workOrderCode = rowsData.workOrderCode;
        this.workpieceInformation.workOrderNo = rowsData.workOrderNo;
        this.workpieceInformation.productCode = rowsData.productCode;
        this.workpieceInformation.productModel = rowsData.productModel;
        this.workpieceInformation.productName = rowsData.productName;
@@ -480,48 +572,24 @@
        }, 1000);
      });
      this.getListFormulaChild()
      this.addOverStationCollection()
    },
    allowRelease(){
      clearInterval(this.timer);
      this.$message('保存节拍为'+this.workpieceInformation.beat+'秒');
    /** 入站增加过站采集记录 **/
    addOverStationCollection(){
      this.passingStationForm = {
        id: null,
        workOrderNo: this.workpieceInformation.workOrderNo,
        productCode: this.workpieceInformation.productCode,
        locationCode: this.headContent.processesCode,
        model: this.workpieceInformation.productModel,
        productBarcode: this.headContent.sfcCode,
        sfcCode: this.headContent.sfcCode,
        inboundTime: new Date()
      }
      addPassingStationCollection(this.passingStationForm).then(response => {});
      addBasicParameters(this.passingStationForm).then(response => {});
    },
    /** 查询工位终端配置列表 */
    // 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();
@@ -535,23 +603,25 @@
        alert("未连接到服务器");
      }
    },
    async initStation(){
    initStation: async function () {
      await getIpv4().then(response => {
        this.StationConfQueryParams.ipAddress = response.msg
        console.log('查询到本工位IP为'+this.StationConfQueryParams.ipAddress)
        console.log('查询到本工位IP为' + this.StationConfQueryParams.ipAddress)
      });
      await listStationConf(this.StationConfQueryParams).then(response => {
        let rows = response.rows[0]
        if(response.rows.length===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('设置工位编码' + this.headContent.processesCode)
      });
      console.log('websocket连接工位为'+this.headContent.processesCode)
      this.conCom()
      console.log('websocket连接工位为' + this.headContent.processesCode)
      const wsuri = this.url + this.headContent.processesCode;
      this.ws = new WebSocket(wsuri);
      const self = this;
@@ -559,33 +629,54 @@
        this.$message('websocket连接成功!');
      };
      this.ws.onmessage = function (event) {
        const DELAY_TIME = 2000;
        switch (event.data) {
          case "IN":
            self.cakeLamp.InPlace = 1;
            break;
          case "IN0":
            self.cakeLamp.InPlace = 0;
            break;
          case "OUT":
            self.cakeLamp.release = 1;
            setTimeout(() => {
              self.cakeLamp.InPlace = 0;
              self.cakeLamp.release = 0;
              self.cakeLamp.startWork = 0;
              self.cakeLamp.scanFinish = 0;
              self.Release();
            }, DELAY_TIME);
            break;
          case "TIGHTEN":
            this.formulaChildList = [];
            self.getListFormulaChild();
            break;
          default:
            break;
        if (event.data === "IN") {
          self.cakeLamp.InPlace = 1;
        } else if (event.data === "IN0") {
          self.cakeLamp.InPlace = 0;
        } else if (event.data === "OUT") {
          self.cakeLamp.release = 1;
        } else if (event.data === "END") {
          const param = {
            workOrderNo: self.workpieceInformation.workOrderNo,
            productCode: self.workpieceInformation.productCode,
            locationCode: self.headContent.processesCode,
            productBarcode: self.headContent.sfcCode,
          }
          saveCampaignTimeParameters(param).then(response => {});
          self.cakeLamp.release = 1;
          self.endClear()
          workpieceRelease(param).then(response => {});
        } else 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: self.workpieceInformation.workOrderNo,
            productCode: self.workpieceInformation.productCode,
            locationCode: self.headContent.processesCode,
            productBarcode: self.headContent.sfcCode,
          }
          addTighteningParameters(param).then(response => {});
          updateTighteningFormula(param).then(response => {
            self.getListFormulaChild()
          }).catch(error =>{
            self.getListFormulaChild()
          });
        }
      };
    },
    //接受数据的回调
@@ -593,21 +684,25 @@
      if (this.form1.isShowHistory) this.form1.desc = this.readLi().join("");
      else {
        const scanValue = this.myserialport.hex2atostr(value).replace(/[\r\n]/g, '');
        // if (value.length > 0)
          // this.form1.desc = this.myserialport.hex2atostr(value);
        this.$message('扫码完成'+this.content);
        if (/T/.test(scanValue)) {
          console.log('字符串包含字母"T"');
          this.serialPortMethod(scanValue)
        console.log("串口收到数据-------------------"+scanValue)
        if(this.headContent.sfcCode !== ''){
          if(scanValue.includes("SS")){
            this.headContent.yzSfcCode = scanValue
          }else {
            this.$message('扫描物料编码'+scanValue);
            console.log(scanValue)
            this.serialPortMethod(scanValue)
          }
        } else {
          console.log('字符串不包含字母"T"');
          this.$message('扫码识别产品序列号'+scanValue);
          this.headContent.sfcCode = scanValue;
          this.queryParams.sfcCode = scanValue;
          this.queryParams.productNum = scanValue;
          this.getList()
          // this.getListFormulaChild()
          this.cakeLamp.scanFinish = 1
          this.cakeLamp.startWork = 1
        }
      }
    },
    clearHistory() {
@@ -656,6 +751,22 @@
        return body;
      });
    },
    conCom(){
      try {
        this.myserialport.state.baudRate = this.form1.baudRate;
        this.myserialport.state.dataBits = this.form1.dataBits;
        this.myserialport.state.stopBits = this.form1.stopBits;
        this.myserialport.state.parity = this.form1.parity;
        this.myserialport.state.flowControl = this.form1.flowControl;
        this.myserialport.openPort(0, true, this.callBack);
        console.log(this.form1.port)
      } catch (error) {
        this.$message.error("串口连接失败!请检查串口是否已被占用");
      }
      if (this.myserialport.state.isOpen) {
        this.$message.success("串口连接成功");
      }
    },
    //连接
    async connectBtn() {
      if (this.btnType === "primary") {
@@ -666,6 +777,7 @@
          this.myserialport.state.parity = this.form1.parity;
          this.myserialport.state.flowControl = this.form1.flowControl;
          await this.myserialport.openPort(this.form1.port, true, this.callBack);
          console.log(this.form1.port)
        } catch (error) {
          this.$message.error("串口连接失败!请检查串口是否已被占用");
        }