6dbf383456d3caa5d489ddd0244b3c007ce458bb..4e91ae3c1ff41d0bf9f65d444c90c2583e69cdb7
昨天 admin
下线打印报告优化
4e91ae 对比 | 目录
昨天 admin
下线打印报告优化
d3541f 对比 | 目录
昨天 admin
下线打印报告优化
22260b 对比 | 目录
昨天 admin
返修
ac3856 对比 | 目录
已修改8个文件
已添加2个文件
1322 ■■■■ 文件已修改
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/controller/BsFormulaChildInfoController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/BsFormulaChildInfo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/PrintOfflineReportInfo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/api/main/bs/formulaChild/formulaChild.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/api/main/da/paramCollection/paramCollection.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/components/offlineQualificationReport.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/main/cfkb/Instructions/index.vue 417 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/main/kb/repairOnline/index.vue 710 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/controller/BsFormulaChildInfoController.java
@@ -53,6 +53,30 @@
    private MiloService miloService;
    /**
     * è¿”修信息写入plc
     */
    @GetMapping("/writeRepairInformationIntoPlc")
    public AjaxResult writeRepairInformationIntoPlc(BsFormulaChildInfo bsFormulaChildInfo)
    {
        String thoroughfare = Constants.thoroughfareMap.get(bsFormulaChildInfo.getProcessesCode());//获取通道
        try {
            String prefix = thoroughfare+".OP165.";
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(prefix+"SNCode").value(bsFormulaChildInfo.getSfcCode()).build());
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(prefix+"WorkOrderNumber").value(bsFormulaChildInfo.getWorkOrderNo()).build());
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(prefix+"ProcessesCode").value(bsFormulaChildInfo.getProcessesCode()).build());
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(prefix+"EngravingStatus").value(bsFormulaChildInfo.getEngravingStatus()).build());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return AjaxResult.success();
    }
    public static void main(String[] args) {
        String str = "TZ180XSDSZX012409120000001";
        System.out.println(str.length());
    }
    /**
     * æœªåšå®Œå·¥åºå›žå¤plc信号
     */
    @GetMapping("/unfinishedProcess")
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/BsFormulaChildInfo.java
@@ -145,6 +145,12 @@
    @TableField(exist = false)
    private String productBarcode;
    @TableField(exist = false)
    private String engravingStatus;
    @TableField(exist = false)
    private String sfcCode;
    public String getParamName() {
        return paramName;
    }
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/PrintOfflineReportInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.jcdm.main.bs.formulaChild.domain;
import lombok.Data;
@Data
public class PrintOfflineReportInfo {
    private String inspectionDate;
    private String param18;
    private String param19;
    private String param20;
    private String param21;
    private String param22;
    private String param23;
    private String param24;
    private String param25;
    private String param26;
    private String param27;
    private String param28;
    private String param29;
    private String param30;
    private String param31;
    private String param32;
    private String param33;
    private String param34;
    private String param35;
    private String param36;
    private String param37;
}
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java
@@ -7,6 +7,7 @@
import com.jcdm.common.enums.BusinessType;
import com.jcdm.common.utils.DateUtils;
import com.jcdm.common.utils.poi.ExcelUtil;
import com.jcdm.main.bs.formulaChild.domain.PrintOfflineReportInfo;
import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +15,10 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
/**
 * è®¾å¤‡äº§å“è¿‡ç¨‹å‚数采集Controller
@@ -32,6 +36,50 @@
    /**
     * æŸ¥è¯¢è®¾å¤‡äº§å“è¿‡ç¨‹å‚数采集列表
     */
    @GetMapping("/getPrintOfflineReportInfo")
    public AjaxResult getPrintOfflineReportInfo(DaParamCollection daParamCollection)
    {
        PrintOfflineReportInfo info = new PrintOfflineReportInfo();
        info.setParam18(">500");
        info.setParam19("0.3%,0%,0.5%");
        info.setParam20(">600");
        info.setParam21(">700");
        info.setParam22("0.22");
        info.setParam23("362");
        info.setParam24("8.18");
        info.setParam25("0.1");
        info.setParam26("21.53,42.33,42.19");
        info.setParam27("49.20,49.34,49.15");
        info.setParam28("0.061%,0.163%,0.223%");
        info.setParam29("35.1,35.0,35.1");
        info.setParam30("√");
        info.setParam31("0.0041");
        info.setParam32("3.06");
        info.setParam33("o.48");
        info.setParam34("4.7uA");
        info.setParam35("562.1");
        info.setParam36("-137.1");
        info.setParam37("√");
        info.setInspectionDate(getInspectionDate());
        return AjaxResult.success(info);
    }
    public static String getInspectionDate(){
        // èŽ·å–当前日期
        LocalDate today = LocalDate.now();
        // å®šä¹‰æ—¥æœŸæ ¼å¼ï¼ˆå¹´.月.日)
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M.d");
        // æ ¼å¼åŒ–当前日期
        return today.format(formatter);
    }
    public static void main(String[] args) {
        System.out.println(getInspectionDate());
    }
    /**
     * æŸ¥è¯¢è®¾å¤‡äº§å“è¿‡ç¨‹å‚数采集列表
     */
    @PreAuthorize("@ss.hasPermi('main:paramCollection:list')")
    @GetMapping("/list")
    public TableDataInfo list(DaParamCollection daParamCollection)
jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml
@@ -82,6 +82,8 @@
            <if test="resultCode != null  and resultCode != ''"> and result_code = #{resultCode}</if>
            <if test="sfResult != null  and sfResult != ''"> and sf_result = #{sfResult}</if>
            <if test="onlineCompletionMark != null  and sfResult != ''"> and online_completion_mark = #{onlineCompletionMark}</if>
            <if test="trolleyYard != null  and trolleyYard != ''"> and trolley_yard = #{trolleyYard}</if>
        </where>
        ORDER BY stream_number DESC
jcdm-ui/src/api/main/bs/formulaChild/formulaChild.js
@@ -46,6 +46,15 @@
  })
}
export function writeRepairInformationIntoPlc(query) {
  return request({
    url: '/bs/formulaChild/writeRepairInformationIntoPlc',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢é…æ–¹é…ç½®å­ä¿¡æ¯åˆ—表
export function initializedData(query) {
  return request({
jcdm-ui/src/api/main/da/paramCollection/paramCollection.js
@@ -9,6 +9,14 @@
  })
}
export function getPrintOfflineReportInfo(query) {
  return request({
    url: '/main/paramCollection/getPrintOfflineReportInfo',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢è®¾å¤‡äº§å“è¿‡ç¨‹å‚数采集详细
export function getParamCollection(id) {
  return request({
jcdm-ui/src/views/components/offlineQualificationReport.vue
@@ -1,15 +1,16 @@
<template>
  <table class="yk-table" border="1px" cellspacing="0" align="center" width="900px" style="font-size: 11px;font-family: SimSun;word-wrap:break-word;word-break:break-all">
  <table class="yk-table" border="1px" cellspacing="0" align="center" width="900px" style="font-size: 11px;font-family: SimSun;word-wrap:break-word;word-break:break-all;border-collapse: collapse;border-color: #000">
    <tr>
      <td colspan="11">
        <img style="width: 140px;height: 20px;" :src="require('@/assets/images/a8963a24920640508e96150a053fc41.png')">
        <span style="text-decoration: underline;margin-left: 23%;font-size: 15px">湖州智芯动力系统发展有限公司</span>
        <div style="border-bottom: #181818 1px solid;"></div>
      <td colspan="11" style="padding-top: 6px;">
        <img style="width: 140px;height: 20px;margin-left: 15px;" :src="require('@/assets/images/a8963a24920640508e96150a053fc41.png')">
        <span style="text-decoration: underline;margin-left: 23%;font-size: 15px;">湖州智芯动力系统发展有限公司</span>
        <div style="border-bottom: 1px solid #181818;margin: 5px 10px 2px 6px;"></div>
        <div style="border-bottom: 1px solid #181818;margin: 0 10px 2px 6px;"></div>
      </td>
    </tr>
    <tr align="center">
      <td colspan="11">
        <span style="font-size: 15px">出货检查报告</span>
      <td colspan="11" style="padding: 2px 0;">
        <span style="font-size: 15px;font-weight: bold;">出货检查报告</span>
      </td>
    </tr>
    <tr>
@@ -17,7 +18,7 @@
        <span>产品名称/零部件号:电驱动系统总成/9900200461</span>
      </td>
      <td colspan="4">
        <span>检验日期:2024.9.4</span>
        <span>检验日期:{{printParam.inspectionDate}}</span>
      </td>
      <td colspan="4">
        <span>追溯编号:2409030000032</span>
@@ -259,7 +260,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>>500</td>
      <td>{{printParam.param18}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -272,7 +273,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>0.3%,0%,0.5%</td>
      <td>{{printParam.param19}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -284,7 +285,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>>500</td>
      <td>{{printParam.param20}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -296,7 +297,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>>500</td>
      <td>{{printParam.param21}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -308,7 +309,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>0.22</td>
      <td>{{printParam.param22}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -321,7 +322,7 @@
      <td>A</td>
      <td>定子综合测试仪</td>
      <td>全检</td>
      <td>362</td>
      <td>{{printParam.param23}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -333,7 +334,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>8.18</td>
      <td>{{printParam.param24}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -345,7 +346,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>0.1</td>
      <td>{{printParam.param25}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -359,7 +360,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>21.53,42.33,42.19</td>
      <td>{{printParam.param26}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -372,7 +373,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>49.20,49.34,49.15</td>
      <td>{{printParam.param27}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -384,7 +385,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>0.061%,0.163%,0.223%</td>
      <td>{{printParam.param28}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -396,7 +397,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>35.1,35.0,35.1</td>
      <td>{{printParam.param29}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -408,7 +409,7 @@
      <td>A</td>
      <td>综合测试仪</td>
      <td>全检</td>
      <td>√</td>
      <td>{{printParam.param30}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -421,7 +422,7 @@
      <td>A</td>
      <td>整机综合测试仪</td>
      <td>全检</td>
      <td>0.0041</td>
      <td>{{printParam.param31}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -433,7 +434,7 @@
      <td>A</td>
      <td>气密测试仪</td>
      <td>全检</td>
      <td>3.06</td>
      <td>{{printParam.param32}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -445,7 +446,7 @@
      <td>A</td>
      <td>气密测试仪</td>
      <td>全检</td>
      <td>o.48</td>
      <td>{{printParam.param33}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -457,7 +458,7 @@
      <td>A</td>
      <td>电性能测试仪</td>
      <td>全检</td>
      <td>4.7uA</td>
      <td>{{printParam.param34}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -469,7 +470,7 @@
      <td>A</td>
      <td>电性能测试仪</td>
      <td>全检</td>
      <td>562.1</td>
      <td>{{printParam.param35}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -481,7 +482,7 @@
      <td>A</td>
      <td>旋变测试仪</td>
      <td>全检</td>
      <td>-137.1</td>
      <td>{{printParam.param36}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -493,7 +494,7 @@
      <td>A</td>
      <td>EOL测试</td>
      <td>全检</td>
      <td>√</td>
      <td>{{printParam.param37}}</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -582,7 +583,18 @@
<script>
export default {
  name: "offlineQualificationReport"
  name: "offlineQualificationReport",
  props: ['printParam'],
  data() {
    return {
    }
  },
  mounted() {
  },
  methods: {
  }
}
</script>
jcdm-ui/src/views/main/cfkb/Instructions/index.vue
@@ -3,293 +3,43 @@
    <el-row :gutter="5">
      <el-col :span="7">
        <el-card shadow="never">
          <span class="head-font">工位编号 : {{headContent.processesCode}}</span>
          <span class="head-font">工位编号:{{headContent.processesCode}}</span>
        </el-card>
      </el-col>
      <el-col :span="7">
        <el-card shadow="never">
          <span class="head-font">工位名称 : {{headContent.processesName}}</span>
          <span class="head-font">工位名称:{{headContent.processesName}}</span>
        </el-card>
      </el-col>
      <el-col :span="10">
        <el-card shadow="never">
          <span class="head-font">产品序列号 : {{headContent.sfcCode}}</span>
<!--          <el-button @click="print1">打印</el-button>-->
          <el-button id="print" v-print="'#printMe'" type="primary">打印</el-button>
          <el-button type="primary" style="float: right" icon="el-icon-search" size="mini" @click="serialLink">串口连接</el-button>
          <el-button @click="clearClick" style="float: right" type="danger" size="mini">清除</el-button>
        <el-card shadow="never" body-style="padding: 10px;">
          <span class="head-font">产品序列号:</span>
          <el-input style="width: 50%;" v-model="headContent.sfcCode" placeholder="请输入内容"></el-input>
<!--          <el-button type="primary" id="print" v-print="'#printMe'">打印</el-button>-->
          <el-button type="primary" id="print" v-print="'#printMe'" style="display: none;">打印</el-button>
<!--          <el-button id="print" @click="print1" type="primary">打印</el-button>-->
          <el-button type="primary" @click="printBefore">打印</el-button>
          <el-button @click="clearClick" type="danger">清除</el-button>
        </el-card>
      </el-col>
    </el-row>
    <el-row :gutter="5" style="margin-top: 5px">
      <el-col :span="12">
      <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">
              <div>
<!--                <div id="printMe">-->
<!--                  <div style="font-size: 29px;text-align: center;margin-top: 64px">-->
<!--                    <span>电驱系统总成</span>-->
<!--                  </div>-->
<!--                  <div style="display: flex;margin-top: 2px;margin-left: 37px;font-size: 15px">-->
<!--                    <div class="div1">-->
<!--                      <div >-->
<!--                        <span>电机型号:</span><span>TZ180XSDSZX01</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>额定功率:</span><span>30KW</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>额定扭矩:</span><span>70N.m</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>额定电压:</span><span>336VDS</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>额工作制:</span><span>S9</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>持续工作电流:</span><span>115A</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>相数:</span><span>3</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>零件号:</span><span>9900200461</span><br>-->
<!--                      </div>-->
<!--                    </div>-->
<!--                    <div class="div2" style="font-size: 15px;margin-left: 17px">-->
<!--                      <div>-->
<!--                        <span>控制器型号:</span><span>KTZ34X23SZX07</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>峰值功率:</span><span>60KW</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>峰值转矩:</span><span>175N.m</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>最高转速:</span><span>12000rpm</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>防护等级:</span><span>IP68</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>峰值工作电流:</span><span>230A</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>绝缘等级:</span><span>H</span><br>-->
<!--                      </div>-->
<!--                      <div style="margin-top: 4px">-->
<!--                        <span>出厂编号:</span><span>2407190000002</span><br>-->
<!--                      </div>-->
<!--                    </div>-->
<!--                  </div>-->
<!--                  <div style="font-size: 29px;margin-top: 2px;margin-left: 80px">-->
<!--                    <span>湖州智芯动力发展有限公司</span>-->
<!--                  </div>-->
<!--                  <div style="text-align: center;margin-top: 97px;font-size: 20px">-->
<!--                    <span>TZ180XSDSZX01</span><br>-->
<!--                    <span>KTZ34X23SZX07</span><br>-->
<!--                    <span>993083</span><br>-->
<!--                    <span>9900166410</span><br>-->
<!--                    <span>2407190000002</span>-->
<!--                  </div>-->
<!--                  <div style="margin-top: 76px;display: flex;margin-left: 32px">-->
<!--                    <div ref="canvasWrapper" id="canvasWrapper1" style="width: 30%;flex: 1"></div>-->
<!--                    <div style="width: 70%;flex: 1;margin-top: 18px;margin-right: 17px">-->
<!--                      <span style="margin-left: -80px;font-size: 18px;font-family: FangSong">-->
<!--                        P9900166410#T{{text1}}-->
<!--                      </span><br>-->
<!--                      <span style="margin-left: -80px;font-size: 18px;font-family: FangSong">-->
<!--                        #V993983#SSW002.005#HHW001.001#NMCU#-->
<!--                      </span>-->
<!--&lt;!&ndash;                      <span style="font-size: 10px;word-break: break-all;display: flex;justify-content: center;width: 155px;margin-left: 9px">P9900166410#T{{text1}}#V993983#SSW002.005#HHW001.001#NBMS#</span>&ndash;&gt;-->
<!--                    </div>-->
<!--                  </div>-->
<!--                  <div style="margin-top: 42px;display: flex;margin-left: 32px">-->
<!--                    <div ref="canvasWrapper" id="canvasWrapper2" style="width: 30%;flex: 1"></div>-->
<!--                    <div style="width: 70%;flex: 1;margin-top: 18px;margin-right: 17px">-->
<!--                      <span style="margin-left: -80px;font-size: 18px;font-family: FangSong">-->
<!--                        P9900166410#T{{text1}}-->
<!--                      </span><br>-->
<!--                      <span style="margin-left: -80px;font-size: 18px;font-family: FangSong">-->
<!--                        #V993983#SSW002.005#HHW001.001#NMCU#-->
<!--                      </span>-->
<!--                      &lt;!&ndash;                      <span style="font-size: 10px;word-break: break-all;display: flex;justify-content: center;width: 155px;margin-left: 9px">P9900166410#T{{text1}}#V993983#SSW002.005#HHW001.001#NBMS#</span>&ndash;&gt;-->
<!--                    </div>-->
<!--                  </div>-->
<!--                  <div style="text-align: center;margin-left: -130px;margin-top: 42px">-->
<!--                    <span>9900200461</span><br>-->
<!--                    <span>MCU</span><br>-->
<!--                    <span>HW 001.001</span><br>-->
<!--                    <span>SW 001.001</span><br>-->
<!--                  </div>-->
<!--                </div>-->
                <div id="printMe">
                  <offline-qualification-report></offline-qualification-report>
                  <offline-qualification-report :printParam="printParam"></offline-qualification-report>
                </div>
                <el-button style="display: none" @click="test1">生成二维码</el-button>
                <el-button style="display: none" @click="test2">生成二维码</el-button>
              </div>
            </el-col>
          </el-tab-pane>
        </el-tabs>
      </el-col>
      <el-col :span="12">
        <el-input v-model="weightValue" placeholder="请输入称重数据"></el-input>
        <el-button @click="enterWeighing">录入</el-button>
      </el-col>
    </el-row>
    <el-dialog v-dialogpop-up :title="title" :visible.sync="open1" width="1000" append-to-body>
      <el-row
        type="flex"
        class="row-bg"
        justify="center"
        v-show="portsList.length === 0"
      >
        <el-col :span="7">
          <div style="margin-top: 400px">
          <span style="display: block">
            ä»…支持Chrome 89+或者Edge 89+浏览器(安全上下文(HTTPS)中可用)
          </span>
            <el-button type="primary" @click="obtainAuthorization">授权</el-button>
          </div>
        </el-col>
      </el-row>
      <el-form
        v-show="portsList.length > 0"
        ref="form1"
        :model="form1"
        label-width="100px">
        <el-row>
          <el-col :span="24"
          ><div>
            <el-form-item label="串口">
              <el-select
                v-model="form1.port"
                filterable
                placeholder="请选择串口"
                :disabled="isDisable"
              >
                <el-option
                  v-for="item in portsList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="波特率">
              <el-autocomplete
                popper-class="my-autocomplete"
                v-model="form1.baudRate"
                :fetch-suggestions="querySearch"
                placeholder="请输入波特率"
                :disabled="isDisable"
              >
                <i class="el-icon-edit el-input__icon" slot="suffix"> </i>
                <template slot-scope="{ item }">
                  <div class="name">{{ item.value }}</div>
                  <span class="addr">{{ item.address }}</span>
                </template>
              </el-autocomplete>
            </el-form-item>
            <el-form-item label="数据位">
              <el-select
                v-model="form1.dataBits"
                placeholder="请选择数据位"
                :disabled="isDisable"
              >
                <el-option label="7" value="7"></el-option>
                <el-option label="8" value="8"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="停止位">
              <el-select
                v-model="form1.stopBits"
                placeholder="请选择停止位"
                :disabled="isDisable"
              >
                <el-option label="1" value="1"></el-option>
                <el-option label="2" value="2"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="校验位">
              <el-select
                v-model="form1.parity"
                placeholder="请选择校验位"
                :disabled="isDisable"
              >
                <el-option label="None" value="none"></el-option>
                <el-option label="Even" value="even"></el-option>
                <el-option label="Odd" value="odd"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="流控制">
              <el-select
                v-model="form1.flowControl"
                placeholder="请选择流控制"
                :disabled="isDisable"
              >
                <el-option label="None" value="none"></el-option>
                <el-option label="HardWare" value="hardware"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="显示历史">
              <el-switch
                v-model="form1.isShowHistory"
                @change="loadHistory"
              ></el-switch>
              <el-button
                type="danger"
                icon="el-icon-delete"
                circle
                title="清空历史"
                @click="clearHistory"
              ></el-button>
            </el-form-item>
            <el-form-item label="发送区设置" v-show="isShowSendArea">
              <el-form-item label="发送格式">
                <el-radio-group v-model="form1.type">
                  <el-radio label="1">ASCII</el-radio>
                  <el-radio label="2">HEX</el-radio>
                </el-radio-group>
              </el-form-item>
              <el-form-item label="发送信息">
                <el-input type="textarea" v-model="form1.sendMsg"></el-input>
              </el-form-item>
              <el-button type="primary" @click="sendCommon">发送</el-button>
            </el-form-item>
            <el-form-item>
              <el-button :type="btnType" @click="connectBtn">{{
                  btnText
                }}</el-button>
              <el-button type="info" @click="obtainAuthorization"
              >新增授权</el-button
              >
            </el-form-item>
          </div>
          </el-col>
        </el-row>
      </el-form>
    </el-dialog>
  </div>
</template>
<script>
@@ -304,19 +54,23 @@
import USBDevice from "@/utils/usb.json";
import {addPassingStationCollection} from "@/api/main/da/passingStationCollection/passingStationCollection";
import {
  addTighteningParameters, enterWeighing,
  addTighteningParameters, enterWeighing, getPrintOfflineReportInfo, listParamCollection,
  replaceAssemblyCode,
  saveCampaignTimeParameters,
  yzAddBasicParameters,
} from "@/api/main/da/paramCollection/paramCollection";
import QRCode from "qrcodejs2";
import OfflineQualificationReport from "@/views/components/offlineQualificationReport.vue";
import {listProductionOrde} from "@/api/main/om/productionOrde/productionOrde";
export default {
  name: "stationTerminal",
  components: {OfflineQualificationReport},
  data() {
    return {
      printParam: {
      },
      weightValue: '',
      showInput: true,
      serialPortContent: '',
@@ -398,9 +152,6 @@
      text1: '',
    }
  },
  beforeDestroy() {
    this.exit();
  },
  created() {
    this.initStation();
    // this.getStationConfList();
@@ -408,43 +159,7 @@
    //   this.connectWebsocket();
    // }, 3000);
  },
  mounted() {
    if ("serial" in navigator) {
      this.myserialport = new MySerialPort();
      this.getPorts();
      navigator.serial.addEventListener("connect", (e) => {
        this.$message.success("设备已连接");
        this.getPorts();
      });
      navigator.serial.addEventListener("disconnect", (e) => {
        this.$message.error("设备已断开");
      });
      this.restaurants = this.loadAll();
    } else {
      this.$message.error(
        "当前为HTTP模式或者浏览器版本过低,不支持网页连接串口"
      );
    }
  },
  computed: {
    isDisable() {
      return this.btnType === "danger";
    },
  },
  methods: {
    enterWeighing(){
      if(this.headContent.sfcCode ==='' || this.weightValue === '' ){
        this.$message.error('参数不全!');
      }else {
        let param = {
          sfcCode: this.headContent.sfcCode,
          weightValue: this.weightValue,
        }
        enterWeighing(param).then(response => {
          this.$message('录入完成!');
        });
      }
    },
    serialLink() {
      this.open1 = true
    },
@@ -462,17 +177,6 @@
      }
    },
    Release(){
      // this.$message('portsList!'+this.portsList.length);
      if(this.btnType === "danger"){
        this.$message('连接了!!');
      }else {
        this.$message('mei连接了!');
      }
    },
    serialPortMethod(value){
      let formulaChildParams = {
        scanBarcode: value,
@@ -548,41 +252,38 @@
      // this.addOverStationCollection()
      this.print1()
    },
    print1() {
      // æ–°å¼€é¡µé¢æ‰“印
      let newStr = document.getElementById('printMe').innerHTML;
      let newWin = window.open('', '_blank');
      newWin.document.body.innerHTML = newStr;
      newWin.print();
      return false;
    },
    test1(){
      document.getElementById('canvasWrapper1').innerHTML = '';
      this.$nextTick(() => {
        let qrCode = new QRCode('canvasWrapper1',{
          width: 83,
          height: 83,
          text: 'P9900166410#T'+ this.text1 +'#V993983#SSW002.005#HHW001.001#NMCU#',
          colorDark: '#000',
          colorLight: '#fff'
        })
    printBefore() {
      if (this.headContent.sfcCode !== '') {
        listProductionOrde({productNum: this.headContent.sfcCode}).then(response => {
          let rowsData = response.rows[0];
          if(rowsData){
            getPrintOfflineReportInfo({productNum: this.headContent.sfcCode}).then(response => {
              this.printParam = response.data
              document.getElementById('print').click();
            });
          }else {
            this.$message.error('系统没有此工单,请重新扫码!');
          }
        });
      } else {
        this.$message.error('请先扫码!');
      }
      )
    },
    test2(){
      document.getElementById('canvasWrapper2').innerHTML = '';
      this.$nextTick(() => {
          let qrCode = new QRCode('canvasWrapper2',{
            width: 83,
            height: 83,
            text: 'P9900166410#T'+ this.text1 +'#V993983#SSW002.005#HHW001.001#NMCU#',
            colorDark: '#000',
            colorLight: '#fff'
          })
        }
      )
    },
    // print1() {
    //   if(this.headContent.sfcCode !== ''){
    //     // æ–°å¼€é¡µé¢æ‰“印
    //     const value = 'Hello, Parent!';
    //     this.$emit('value-sent', value);
    //     let newStr = document.getElementById('printMe').innerHTML;
    //     let newWin = window.open('', '_blank');
    //     newWin.document.body.innerHTML = newStr;
    //     newWin.print();
    //     return;
    //   }else {
    //     this.$message.error('请先扫码');
    //   }
    // },
    /** å…¥ç«™å¢žåŠ è¿‡ç«™é‡‡é›†è®°å½• **/
    addOverStationCollection(){
      this.passingStationForm = {
@@ -598,20 +299,6 @@
      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
@@ -939,6 +626,7 @@
}
</script>
<style scoped>
.div1, .div2 {
  flex: 1; /* ä¸¤ä¸ªdiv平分容器宽度 */
@@ -988,5 +676,16 @@
.el-table .success-row {
  background: #f0f9eb;
}
/*隐藏打印区域*/
/*#printMe {*/
/*  display: none;*/
/*}*/
/*!*打印时显示打印区域*!*/
/*@media print {*/
/*  #printMe {*/
/*    display: block;*/
/*  }*/
/*}*/
</style>
jcdm-ui/src/views/main/kb/repairOnline/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,710 @@
<template>
  <div class="app-container">
   <el-row :gutter="5">
     <el-col :span="7">
       <el-card style="height: 71px;" shadow="never">
         å·¥ä½ç¼–号 :
         <el-select v-model="headContent.processesCode" placeholder="请选择">
           <el-option
             v-for="item in processesCodeOptions"
             :key="item.index"
             :label="item.processesCode"
             :value="item.processesCode">
           </el-option>
         </el-select>
       </el-card>
     </el-col>
     <el-col :span="17">
       <el-card shadow="never">
         <span class="head-font">壳体编码 : </span>
         <el-input style="width: 40%" ref="inputData" v-model="shellBarcode" @change="handleEnter" placeholder="请扫描壳体编码"></el-input>
         æ˜¯å¦æ‰“刻 :
         <el-select v-model="engravingStatus" placeholder="请选择">
           <el-option
             v-for="item in engravingOptions"
             :key="item.index"
             :label="item.label"
             :value="item.value">
           </el-option>
         </el-select>
         <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="7" >
       <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" border :content-style="{'min-width': '140px'}">
           <el-descriptions-item label="产品序列号">
             <span>{{headContent.sfcCode}}</span>
           </el-descriptions-item>
           <el-descriptions-item label="工单编号">
               <span>{{workpieceInformation.workOrderNo}}</span>
           </el-descriptions-item>
           <el-descriptions-item label="产品编码">
             <span>{{workpieceInformation.productCode}}</span>
           </el-descriptions-item>
           <el-descriptions-item label="计划数量">
             <span>{{workpieceInformation.planQty}}</span>
           </el-descriptions-item>
<!--           <el-descriptions-item label="开始时间">-->
<!--             <span>{{workpieceInformation.inboundTime}}</span>-->
<!--           </el-descriptions-item>-->
         </el-descriptions>
         <el-divider></el-divider>
         <el-button @click="repairClick" type="primary">返修</el-button>
         <!--         <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>&nbsp;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>&nbsp;扫码枪状态</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>&nbsp;工件到位</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>&nbsp;扫码完成</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>&nbsp;开始作业</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>&nbsp;允许放行</span>-->
<!--           </el-col>-->
<!--         </el-row>-->
       </el-card>
     </el-col>
     <el-col :span="17">
       <el-tabs type="border-card"  style="height: 600px" v-model="activeName">
         <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="80" align="center" prop="stepSort">
               </el-table-column>
               <el-table-column label="操作内容" align="center" prop="operationSteps">
               </el-table-column>
               <el-table-column label="产品编号" width="80" align="center" prop="productCode">
               </el-table-column>
               <el-table-column label="物料编码" width="110" align="center" prop="materialCode">
               </el-table-column>
               <el-table-column label="采集值" align="center" prop="collectData">
               </el-table-column>
               <el-table-column label="结果" width="60" align="center" prop="results">
               </el-table-column>
             </el-table>
           </el-col>
         </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 {
  clearWorkpieceRelease,
  fistSetpNumber, initializedData,
  listFormulaChild,
  noPageListFormulaChild,
  releaseCheck, unfinishedProcess,
  updateResults,
  updateTighteningFormula,
  workpieceRelease, writeRepairInformationIntoPlc
} from "@/api/main/bs/formulaChild/formulaChild";
import MySerialPort from "@/utils/MySerialPort";
import USBDevice from "@/utils/usb.json";
import {
  bindYzSfcFlag,
  checkCarCode, checkYzSfcCode,
  findBytrolleyYardGetOne,
  listProductionOrde, listProductionOrdeLoopLine, mozuReceivingWorkOrders,
  receivingWorkOrders,
  trolleyYardBinDing
} from "@/api/main/om/productionOrde/productionOrde";
import {addPassingStationCollection} from "@/api/main/da/passingStationCollection/passingStationCollection";
import {
  addBasicParameters,
  addParamCollection,
  addTighteningParameters,
  saveCampaignTimeParameters,
  replaceAssemblyCode, checkRecordDataDone,
} from "@/api/main/da/paramCollection/paramCollection";
import {addFormula} from "@/api/main/bs/formula/formula";
import QRCode from "qrcodejs2";
import VueQr from "vue-qr";
import {listProcesses, listProcessesNoPage} from "@/api/main/bs/processes/processes";
export default {
  components: {
    VueQr
  },
  name: "stationTerminal",
  data() {
    return {
      engravingStatus: '',
      engravingOptions: [{
        value: '1',
        label: '是'
      }, {
        value: '2',
        label: '否'
      }],
      processesCodeOptions:[], // å·¥åºç¼–码
      shellBarcode: '', // å·¥ä»¶æ¡ç 
      text: 'P9900200461#T2408170000004#V993983#SSW001.001#HHW001.001#NMCU',
      materialCode: '', // ç‰©æ–™ç¼–码
      carCode: '',
      showInput: false,
      onLineBinDing: false,
      serialPortContent: '',
      // æŸ¥è¯¢å‚æ•°
      formulaChildParams: {
        pageNum: 1,
        pageSize: 10,
        productCode: null,
        processesCode: null,
      },
      // é…æ–¹é…ç½®å­ä¿¡æ¯è¡¨æ ¼æ•°æ®
      formulaChildList: [],
      ipAddress: '',
      imgSrc: '',
      headContent: {
        processesCode: '',
        processesName: '',
        sfcCode: '',
        yzSfcCode: '',
        cardCode: '',
      },
      workpieceInformation: {
        workOrderNo: null,
        productCode: null,
        productModel: null,
        productName: null,
        inboundTime: null,
        materialCode: null,
        planQty: null,
      },
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        sfcCode: null,
        productNum: '',
        trolleyYard: '',
      },
      // æŸ¥è¯¢å‚æ•°
      StationConfQueryParams: {
        pageNum: 1,
        pageSize: 10,
        ipAddress: null,
      },
      cakeLamp: {
        plcState: 1, //plc
        scannerState: 1, //扫码枪
        InPlace: 0, //工件到位
        scanFinish: 0,
        startWork: 0,
        release: 0 //允许放行
      },
      content: '',
      // url: "ws://10.103.214.26:8080/websocket/message/",
      url: "ws://192.168.20.250:8080/websocket/message/",
      passingStationForm: {},
      originalArray: [],
      orderFlag: true,
      printFlag: false,
      activeName: 'first',
      printMaterialCode : '',
    }
  },
  mounted() {
    this.setFocus()
  },
  beforeDestroy() {
    this.exit();
  },
  created() {
    // this.initStation();
    this.initProcesses()
  },
  computed: {
    isDisable() {
      return this.btnType === "danger";
    },
  },
  methods: {
    repairClick(){
      if(this.headContent.processesCode !== '' && this.engravingStatus !== '' && this.headContent.sfcCode !== ''){
        writeRepairInformationIntoPlc({
            processesCode: this.headContent.processesCode,
            engravingStatus: this.engravingStatus,
            sfcCode: this.headContent.sfcCode,
            workOrderNo: this.workpieceInformation.workOrderNo,
          }).then(response => {});
      }else {
        this.$message.error("基础参数缺失,请检查工位编号和打刻状态是否已选择!");
      }
    },
    initProcesses(){
      listProcessesNoPage(this.queryParams).then(response => {
        this.processesCodeOptions = response.rows;
      });
    },
    setFocus(){
      this.$nextTick(()=>{
        this.$refs.inputData.focus()
      })
    },
    changeMenu(tab, event) {
      console.log(tab, event);
    },
    handleEnter() {
      if(this.headContent.processesCode !== '' && this.engravingStatus !== ''){
        this.queryParams.trolleyYard = this.shellBarcode
        listProductionOrde(this.queryParams).then(response => {
          let rowsData = response.rows[0];
          if(rowsData){
            console.log('进入初始化加载list方法'+response.rows[0])
            this.headContent.sfcCode = rowsData.productNum;
            this.workpieceInformation.productCode = rowsData.productCode;
            this.workpieceInformation.workOrderNo = rowsData.workOrderNo;
            this.workpieceInformation.planQty = rowsData.planQty;
          }else {
            this.$message.error('系统没有此工单,请重新扫码!');
          }
        });
      }else {
        this.$message.error("基础参数缺失,请检查工位编号和打刻状态是否已选择!");
      }
    },
    serialLink() {
      this.open1 = true
    },
    serialPortMethod(value){
      let formulaChildParams = {
        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 //允许放行
        }else if(response.msg === "2"){
          this.$message.error('扫码重复请重新扫码!');
        }
        this.getListFormulaChild()
      });
    },
    rowStyle({ row }) {
      if (row.results === 'OK') {
        return 'background-color: PaleGreen';
      } else if (row.results === 'NG') {
        return 'background-color: LightSalmon';
      }
      return '';
    },
    /** æŸ¥è¯¢é…æ–¹é…ç½®å­ä¿¡æ¯åˆ—表 */
    getListFormulaChild() {
      // this.formulaChildList = []
      this.formulaChildParams.productCode = this.workpieceInformation.productCode
      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(){
      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.workpieceInformation.inboundTime = null;
      this.headContent.sfcCode = '';
      this.headContent.yzSfcCode = '';
      this.headContent.cardCode = '';
      this.workpieceInformation.planQty = ''
      this.headContent.processesCode = ''
      this.engravingStatus = ''
      this.headContent.sfcCode = ''
      this.workpieceInformation.workOrderNo = ''
      this.shellBarcode = ''
    },
    clearClick(){
      this.endClear()
    },
    /** æŸ¥è¯¢å·¥å•åˆ—表 */
    async getList() {
      await listProductionOrde(this.queryParams).then(response => {
        console.log('进入初始化加载list方法')
        let rowsData = response.rows[0];
        if(rowsData){
          console.log('进入初始化加载list方法'+response.rows[0])
          this.workpieceInformation.workOrderNo = rowsData.workOrderNo;
          this.workpieceInformation.productCode = rowsData.productCode;
          this.workpieceInformation.materialCode = rowsData.materialCode;
          this.workpieceInformation.planQty = rowsData.planQty;
          this.headContent.cardCode = rowsData.trolleyYard;
          this.printMaterialCode = rowsData.productCode
        }else {
          this.$message.error('系统没有此工单,请重新扫码!');
        }
      });
    },
    initializedData(){
      const param = {
        locationCode: this.headContent.processesCode,
      }
      initializedData(param).then(response => {
        if(response.msg !== ''){
          if(this.headContent.processesCode === 'OP165'){
            this.headContent.sfcCode = response.msg.substring(13,26)
            this.queryParams.productNum = response.msg.substring(13,26);
          }else {
            this.headContent.sfcCode = response.msg;
            this.queryParams.productNum = response.msg;
          }
          this.getList()
          this.cakeLamp.scanFinish = 1
          this.cakeLamp.startWork = 1
          this.cakeLamp.InPlace = 1
          // this.text = 'P9900200461#T'+this.headContent.sfcCode+'#V993983#SSW001.001#HHW001.001#NMCU'
        }
      });
    },
    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');
    },
    exit() {
      if (this.ws) {
        this.ws.close();
        this.ws = null;
      }
    },
    test1(){
      document.getElementById('canvasWrapper1').innerHTML = '';
      this.$nextTick(() => {
          let qrCode = new QRCode('canvasWrapper1',{
            width: 83,
            height: 83,
            text: 'P9900200461#T'+this.headContent.sfcCode+'#V993983#SSW001.001#HHW001.001#NMCU',
            colorDark: '#000',
            colorLight: '#fff'
          })
        }
      )
    },
    test2(){
      document.getElementById('canvasWrapper2').innerHTML = '';
      this.$nextTick(() => {
          let qrCode = new QRCode('canvasWrapper2',{
            width: 83,
            height: 83,
            text: 'P9900200461#T'+this.headContent.sfcCode+'#V993983#SSW001.001#HHW001.001#NMCU',
            colorDark: '#000',
            colorLight: '#fff'
          })
        }
      )
    },
    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
        this.initializedData()
        if(this.headContent.processesCode === 'OP165'){
          this.printFlag = true
        }
        if(this.headContent.processesCode === 'OP250'){
          this.printFlag = true
        }
      });
      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连接成功!');
      };
      //socket从后台向前台推送数据
      this.ws.onmessage = function (event) {
        if (event.data === "print") {
          document.getElementById('print').click();
          unfinishedProcess({processesCode: self.headContent.processesCode,recordDataDone: 21}).then(response => {});
        }else if (event.data === "IN") {
          self.cakeLamp.InPlace = 1;
        }else if(event.data === "twoHundredAndThirtyEND"){
          self.endClear()
        } else if (event.data === "OUT") {
          self.cakeLamp.release = 1;
        } else if (event.data === "END") {
          const formulaChildIndex = self.formulaChildList.length-1
          const orderParam = {
            productNum: self.headContent.sfcCode,
          }
          if(self.headContent.sfcCode=== ''||self.headContent.sfcCode=== null){
            self.$message('总成码为空,请扫码!')
            unfinishedProcess({processesCode: self.headContent.processesCode,recordDataDone: 26}).then(response => {});
            return;
          }
          if(self.formulaChildList[formulaChildIndex].results !== 'OK'){
            self.$message('未做完工序禁止放行');
            unfinishedProcess({processesCode: self.headContent.processesCode,recordDataDone: 25}).then(response => {});
            return;
          }
          const param = {
            workOrderNo: self.workpieceInformation.workOrderNo,
            productCode: self.workpieceInformation.productCode,
            locationCode: self.headContent.processesCode,
            productBarcode: self.headContent.sfcCode,
            inboundTime: self.workpieceInformation.inboundTime,
            formulaChildEntity: self.formulaChildList[formulaChildIndex]
          }
          console.log("进入最终方法")
          self.endSaveData(param)
        } else if(event.data.includes("productNum")){//产品序列号
          let productNum = event.data.split(',')[1];
          if(self.headContent.processesCode === 'OP165'){
            console.log("进去截取总成码方法165工站原始值是"+productNum+"截取之后的是"+productNum.substring(13,26))
            self.headContent.sfcCode = productNum.substring(13,26)
            console.log("self.headContent.sfcCode"+self.headContent.sfcCode)
          }else {
            self.headContent.sfcCode = productNum;
          }
          self.queryParams.productNum = productNum;
          self.getList()
          self.cakeLamp.scanFinish = 1
          self.cakeLamp.startWork = 1
          self.cakeLamp.InPlace = 1
          const param = {
            processesCode: self.headContent.processesCode,
            productCode: self.workpieceInformation.productCode
          }
          fistSetpNumber(param).then(response => {
            console.log("fistSetpNumber------"+response.msg)
          });
          //打印
          if(self.headContent.processesCode === "OP165"){
            // self.test1()
            // self.test2()
            self.text = 'P9900200461#T'+self.headContent.sfcCode+'#V993983#SSW002.005#HHW001.001#NMCU#'
          }
        }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;
            }
          }
          if(formulaChilds === ""){
            self.$message.error('本工位已工作完成!');
            return;
          }
          const param = {
            id: formulaChilds.id,
            tightenTheArray: event.data,
            paramCode: formulaChilds.paramCode,
            workOrderNo: self.workpieceInformation.workOrderNo,
            productCode: self.workpieceInformation.productCode,
            locationCode: self.headContent.processesCode,
            productBarcode: self.headContent.sfcCode,
            spareField1: formulaChilds.spareField1,
            spareField2: formulaChilds.spareField2,
            spareField3: formulaChilds.spareField3,
            spareField4: formulaChilds.spareField4,
            stepSort: formulaChilds.stepSort,
            ngTimes: formulaChilds.ngTimes,
          }
          if(formulaChilds.paramCode === null||formulaChilds.paramCode ===''){
            self.$message('未找到参数码,请检查参数码是否正确');
            return;
          }
          self.formulaChildParams.artificialNgFlag = null
          console.log("self.formulaChildParams.artificialNgFlag"+self.formulaChildParams.artificialNgFlag)
          if(self.headContent.sfcCode!==null||self.headContent.sfcCode!==''){
            updateTighteningFormula(param).then(response => {
              //addTighteningParameters(param).then(response => {});
              self.getListFormulaChild()
            }).catch(error =>{
              self.getListFormulaChild()
            });
          }
        }
      };
    },
    endSaveData(param){
      saveCampaignTimeParameters(param).then(response => {
      this.cakeLamp.release = 1;
      this.endClear()
      workpieceRelease(param).then(response => {});
      });
    },
  }
}
</script>
<style scoped>
.div1, .div2 {
  flex: 1; /* ä¸¤ä¸ªdiv平分容器宽度 */
}
.span{
  font-family: 'Microsoft YaHei', sans-serif;
}
.div2{
  margin-left: 30px;
}
.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>