| | |
| | | <div class="app-container"> |
| | | <el-row :gutter="5"> |
| | | <el-col :span="7"> |
| | | <el-card shadow="never"> |
| | | <span class="head-font">工位编号 : {{headContent.processesCode}}</span> |
| | | <el-card style="height: 71px;padding-top: 6px" shadow="never"> |
| | | <span class="head-font">工位编号 : {{headContent.processesCode}}</span> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="7"> |
| | | <el-col :span="17"> |
| | | <el-card shadow="never"> |
| | | <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-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> |
| | | <el-button @click="clearClick" style="float: right" type="danger" size="mini">清除</el-button> |
| | | <span class="head-font">物料编码 : </span> |
| | | <el-input style="width: 50%" ref="inputData" v-model="materialCode" @change="handleEnter" placeholder="请扫描物料编码"></el-input> |
| | | <el-button @click="clearClick" style="float: right" type="danger" >清除</el-button> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | |
| | | <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.materialCode}}</span> |
| | | <el-descriptions-item label="产品编码"> |
| | | <span>{{workpieceInformation.productCode}}</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="计划数量"> |
| | | <span>{{workpieceInformation.planQty}}</span> |
| | |
| | | <span> 允许放行</span> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row v-show="orderFlag" style="margin-top: 20px"> |
| | | <el-button @click="getWorkOrders" type="warning" size="mini">接收工单</el-button> |
| | | </el-row> |
| | | <!-- <el-row v-show="showInput" style="margin-top: 20px">--> |
| | | <!-- <el-button @click="bindYzSfc" type="primary">绑定</el-button>--> |
| | | <!-- </el-row>--> |
| | | <el-row v-show="printFlag" style="margin-top: 20px"> |
| | | <el-button id="print" v-print="'#printMe'" type="primary">打印</el-button> |
| | | <div style="display: none"> |
| | | <div id="printMe"> |
| | | <div style="text-align: center;margin-top: 70px"> |
| | | <span style="font-size: 29px;">电驱系统总成</span> |
| | | </div> |
| | | <div style="display: flex;margin-top: 2px;margin-left: 39px;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>336VDC</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 style="vertical-align: -0.5px;">3</span><br> |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span>零件号:</span><span>{{printMaterialCode}}</span><br> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <el-row v-show="onLineBinDing" style="margin-top: 20px">--> |
| | | <!-- <el-col></el-col>--> |
| | | <!-- <span style="width: 130px;" class="head-font">小车码 : {{headContent.cardCode}}</span>--> |
| | | <!-- </el-row>--> |
| | | <!-- <el-row v-show="onLineBinDing" style="margin-top: 20px">--> |
| | | <!-- <el-button @click="bindcardCode" type="primary">绑定</el-button>--> |
| | | <!-- </el-row>--> |
| | | <div class="div2" style="font-size: 15px;margin-left: 4px"> |
| | | <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 style="vertical-align: -0.5px;">I</span><span>P67</span><br> |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span>峰值工作电流:</span><span>230A</span><br> |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span>绝缘等级:</span><span style="vertical-align: -0.5px;">H</span><br> |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span>出厂编号:</span><span>{{headContent.sfcCode}}</span><br> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 2px;margin-left: 70px"> |
| | | <span style="font-size: 26px;">湖州智芯动力系统发展有限公司</span> |
| | | </div> |
| | | |
| | | |
| | | <div style="text-align: center;margin-top: 101px;font-size: 20px"> |
| | | <div style="margin-top: 12px"> |
| | | <span style="font-size: 22px">TZ180XSDSZX01</span><br> |
| | | |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span style="font-size: 22px">KTZ34X23SZX07</span><br> |
| | | |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span style="font-size: 22px">993983</span><br> |
| | | |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span style="font-size: 22px">{{printMaterialCode}}</span><br> |
| | | |
| | | </div> |
| | | <div style="margin-top: 4px"> |
| | | <span style="font-size: 22px">{{headContent.sfcCode}}</span> |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="margin-top: 57px;display: flex;margin-left: 40px"> |
| | | <div style="width: 30%;flex: 1"> |
| | | <VueQr :size='80' :margin='0' :text='this.text'></VueQr> |
| | | </div> |
| | | <div style="width: 70%;flex: 1;margin-top: 18px;margin-right: 29px"> |
| | | <span style="margin-left: -122px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | P{{printMaterialCode}} |
| | | </span> |
| | | <span style="margin-left: -5px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | T{{headContent.sfcCode}} |
| | | </span><br> |
| | | |
| | | <span style="margin-left: -122px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | V993983 |
| | | </span> |
| | | <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -10px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | SSW001.001 |
| | | </span> |
| | | <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | HHW001.001 |
| | | </span> |
| | | <span style="margin-left: -6px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | NMCU |
| | | </span> |
| | | <!-- <span style="margin-left: -80px;font-size: 19px;font-family: FZYaoti;letter-spacing: -0.8px;font-weight: 100">--> |
| | | <!-- #V993983#SSW002.005#HHW001.001#NMCU--> |
| | | <!-- </span>--> |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="margin-top: 44px;display: flex;margin-left: 40px"> |
| | | <div style="width: 30%;flex: 1"> |
| | | <VueQr :size='80' :margin='0' :text='this.text'></VueQr> |
| | | </div> |
| | | <div style="width: 70%;flex: 1;margin-top: 18px;margin-right: 29px"> |
| | | <!-- <span style="margin-left: -80px;font-size: 19px;font-family: FZYaoti;letter-spacing: -0.8px;font-weight: 100">--> |
| | | <!-- P9900200461#T{{headContent.sfcCode}}--> |
| | | <!-- </span><br>--> |
| | | <!-- <span style="margin-left: -80px;font-size: 19px;font-family: FZYaoti ;letter-spacing: -0.8px;font-weight: 100">--> |
| | | <!-- #V993983#SSW002.005#HHW001.001#NMCU--> |
| | | <!-- </span>--> |
| | | <span style="margin-left: -122px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | P{{printMaterialCode}} |
| | | </span> |
| | | <span style="margin-left: -5px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | T{{headContent.sfcCode}} |
| | | </span><br> |
| | | |
| | | <span style="margin-left: -122px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | V993983 |
| | | </span> |
| | | <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -10px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | SSW001.001 |
| | | </span> |
| | | <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | HHW001.001 |
| | | </span> |
| | | <span style="margin-left: -6px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px"> |
| | | # |
| | | </span> |
| | | <span style="margin-left: -9px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px"> |
| | | NMCU |
| | | </span> |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="text-align: center;margin-left: -190px;margin-top: 31px"> |
| | | <div style="margin-top: 4px"> |
| | | <span>{{printMaterialCode}}</span><br> |
| | | </div> |
| | | <div style="margin-top: 8px"> |
| | | <span>MCU</span><br> |
| | | </div> |
| | | <div style="margin-top: 8px"> |
| | | <span>HW 001.001</span><br> |
| | | </div> |
| | | <div style="margin-top: 8px"> |
| | | <span>SW 001.001</span><br> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </el-row> |
| | | <el-row v-show="orderFlag" style="margin-top: 20px"> |
| | | <!-- <el-button @click="getWorkOrders" type="warning" size="mini">接收工单</el-button>--> |
| | | </el-row> |
| | | </el-card> |
| | | |
| | | </el-col> |
| | | <el-col :span="17"> |
| | | <el-tabs type="border-card" style="height: 600px" v-model="activeName" @tab-click="changeMenu"> |
| | | <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="60" align="center" type="index">--> |
| | | <!-- </el-table-column>--> |
| | | <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="60" align="center" prop="spareField3">--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column label="下限" width="60" align="center" prop="spareField4">--> |
| | | <!-- </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> |
| | | </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-tabs> |
| | | </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> |
| | |
| | | bindYzSfcFlag, |
| | | checkCarCode, checkYzSfcCode, |
| | | findBytrolleyYardGetOne, |
| | | listProductionOrde, mozuReceivingWorkOrders, |
| | | listProductionOrde, listProductionOrdeLoopLine, mozuReceivingWorkOrders, |
| | | receivingWorkOrders, |
| | | trolleyYardBinDing |
| | | } from "@/api/main/om/productionOrde/productionOrde"; |
| | |
| | | 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"; |
| | | |
| | | export default { |
| | | components: { |
| | | VueQr |
| | | }, |
| | | name: "stationTerminal", |
| | | data() { |
| | | return { |
| | | text: 'P9900200461#T2408170000004#V993983#SSW001.001#HHW001.001#NMCU', |
| | | materialCode: '', // 物料编码 |
| | | carCode: '', |
| | | showInput: false, |
| | | onLineBinDing: false, |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | sfcCode: null, |
| | | productNum: '', |
| | | }, |
| | | // 查询参数 |
| | | StationConfQueryParams: { |
| | |
| | | release: 0 //允许放行 |
| | | }, |
| | | content: '', |
| | | activeName: 'first', |
| | | // url: "ws://10.103.210.248:8080/websocket/message/", |
| | | url: "ws://192.168.10.100: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: "", |
| | | // url: "ws://10.103.214.26:8080/websocket/message/", |
| | | url: "ws://192.168.20.250:8080/websocket/message/", |
| | | |
| | | passingStationForm: {}, |
| | | originalArray: [], |
| | | yzSfcFlag: 1, |
| | | endYz: false, |
| | | orderFlag: true |
| | | orderFlag: true, |
| | | printFlag: false, |
| | | activeName: 'first', |
| | | printMaterialCode : '', |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.setFocus() |
| | | }, |
| | | beforeDestroy() { |
| | | this.exit(); |
| | | }, |
| | | created() { |
| | | this.initStation(); |
| | | // this.getStationConfList(); |
| | | // setTimeout(() => { |
| | | // 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() { |
| | |
| | | }, |
| | | }, |
| | | methods: { |
| | | getWorkOrders(){ |
| | | if(this.headContent.sfcCode === '' || this.headContent.sfcCode === null){ |
| | | //接收工单 |
| | | const param = { |
| | | lineCode: this.headContent.processesCode |
| | | } |
| | | mozuReceivingWorkOrders(param).then(response => { |
| | | this.headContent.sfcCode = response.msg; |
| | | this.queryParams.productNum = response.msg; |
| | | this.getList() |
| | | this.cakeLamp.scanFinish = 1 |
| | | this.cakeLamp.startWork = 1 |
| | | this.cakeLamp.InPlace = 1 |
| | | }); |
| | | }else { |
| | | this.$message.error("已经有工单了,不能接收!"); |
| | | } |
| | | setFocus(){ |
| | | this.$nextTick(()=>{ |
| | | this.$refs.inputData.focus() |
| | | }) |
| | | }, |
| | | bindcardCode(scanValue){ |
| | | // this.$message('绑定成功!'); |
| | | let param = { |
| | | productNum: this.headContent.sfcCode, |
| | | trolleyYard: scanValue, |
| | | } |
| | | trolleyYardBinDing(param).then(response => { |
| | | }); |
| | | changeMenu(tab, event) { |
| | | console.log(tab, event); |
| | | }, |
| | | handleEnter() { |
| | | console.log("物料码:"+this.materialCode); |
| | | if(this.materialCode.includes("9900200461") || this.materialCode.includes("9900207783")){ |
| | | if(this.headContent.processesCode === "OP170" || this.headContent.processesCode === "OP180" || |
| | | this.headContent.processesCode === "OP190" || this.headContent.processesCode === "OP200" || |
| | | this.headContent.processesCode === "OP210" || this.headContent.processesCode === "OP220" || |
| | | this.headContent.processesCode === "OP230" |
| | | ){ |
| | | if(this.materialCode.length>25){ |
| | | let code = this.materialCode.substring(13,26); |
| | | // this.headContent.sfcCode = code; |
| | | this.queryParams.productNum = code; |
| | | this.getList(); |
| | | this.cakeLamp.scanFinish = 1 |
| | | this.cakeLamp.startWork = 1 |
| | | this.cakeLamp.InPlace = 1 |
| | | const param = { |
| | | processesCode: this.headContent.processesCode, |
| | | productCode: this.workpieceInformation.productCode, |
| | | sfcBarcode:code, |
| | | } |
| | | fistSetpNumber(param).then(response => { |
| | | console.log("fistSetpNumber------"+response.msg) |
| | | }); |
| | | this.$message("扫描物料编码"+this.materialCode); |
| | | this.materialCode=""; |
| | | this.setFocus(); |
| | | }else{ |
| | | this.$message("扫描物料编码错误!"+this.materialCode); |
| | | this.materialCode=""; |
| | | this.setFocus(); |
| | | } |
| | | |
| | | } |
| | | }else{ |
| | | if(this.headContent.sfcCode === '' || this.headContent.sfcCode === null){ |
| | | this.$message("请先扫描产品条码!"); |
| | | }else{ |
| | | this.serialPortMethod(this.materialCode); |
| | | this.$message("扫描物料编码"+this.materialCode); |
| | | this.setFocus(); |
| | | this.materialCode=""; |
| | | } |
| | | |
| | | } |
| | | }, |
| | | serialLink() { |
| | | this.open1 = true |
| | | }, |
| | | bindYzSfc(){ |
| | | if(this.headContent.sfcCode!==""&&this.headContent.yzSfcCode!==""){ |
| | | let param = { |
| | | sfcCode: this.headContent.sfcCode, |
| | | locationCode: this.headContent.processesCode, |
| | | yzSfcCode: this.headContent.yzSfcCode |
| | | } |
| | | const orderParam = { |
| | | productNum: this.headContent.sfcCode, |
| | | } |
| | | replaceAssemblyCode(param).then(response => { |
| | | this.$message('绑定成功!'); |
| | | bindYzSfcFlag(orderParam).then(response => { |
| | | this.yzSfcFlag = 1 |
| | | }); |
| | | }); |
| | | } |
| | | }, |
| | | Release(){ |
| | | // this.$message('portsList!'+this.portsList.length); |
| | | if(this.btnType === "danger"){ |
| | | this.$message('连接了!'); |
| | | |
| | | }else { |
| | | this.$message('mei连接了!'); |
| | | |
| | | } |
| | | }, |
| | | serialPortMethod(value){ |
| | | let formulaChildParams = { |
| | |
| | | this.headContent.sfcCode = ''; |
| | | this.headContent.yzSfcCode = ''; |
| | | this.headContent.cardCode = ''; |
| | | }, |
| | | changeMenu(tab, event) { |
| | | console.log(tab, event); |
| | | this.workpieceInformation.planQty = '' |
| | | }, |
| | | clearClick(){ |
| | | const param = { |
| | |
| | | locationCode: this.headContent.processesCode, |
| | | productBarcode: this.headContent.sfcCode, |
| | | } |
| | | this.endClear() |
| | | // this.endClear() |
| | | clearWorkpieceRelease(param).then(response => {}); |
| | | this.headContent.sfcCode = '' |
| | | // this.headContent.sfcCode = '' |
| | | this.$message('清除成功!'); |
| | | }, |
| | | scanCompleted(){ |
| | | this.$message('扫码完成'+this.content); |
| | | this.headContent.sfcCode = this.content |
| | | this.queryParams.sfcCode = this.content |
| | | this.setFocus(); |
| | | this.getList() |
| | | this.getListFormulaChild() |
| | | this.cakeLamp.scanFinish = 1 |
| | | this.cakeLamp.startWork = 1 |
| | | |
| | | }, |
| | | /** 查询工单列表 */ |
| | | async getList() { |
| | | await listProductionOrde(this.queryParams).then(response => { |
| | | await listProductionOrdeLoopLine(this.queryParams).then(response => { |
| | | console.log('进入初始化加载list方法') |
| | | let rowsData = response.rows[0]; |
| | | console.log(rowsData) |
| | | 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; |
| | | if(rowsData){ |
| | | console.log('进入初始化加载list方法'+response.rows[0]) |
| | | if(this.headContent.processesCode === 'OP170' |
| | | ||this.headContent.processesCode === 'OP180'|| |
| | | this.headContent.processesCode === 'OP190'|| |
| | | this.headContent.processesCode === 'OP200'|| |
| | | this.headContent.processesCode === 'OP210'|| |
| | | this.headContent.processesCode === 'OP220'|| |
| | | this.headContent.processesCode === 'OP230' |
| | | ){ |
| | | this.headContent.sfcCode = rowsData.productNum |
| | | } |
| | | 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.getListFormulaChild() |
| | | this.workpieceInformation.inboundTime = this.getCurrentTime() |
| | | this.printMaterialCode = rowsData.productCode |
| | | console.log(rowsData.productCode) |
| | | console.log(this.printMaterialCode) |
| | | this.text = 'P'+this.printMaterialCode+'#T'+this.headContent.sfcCode+'#V993983#SSW001.001#HHW001.001#NMCU' |
| | | console.log(this.text) |
| | | |
| | | }else { |
| | | this.$message.error('系统没有此工单,请重新扫码!'); |
| | | } |
| | | }); |
| | | this.getListFormulaChild() |
| | | this.workpieceInformation.inboundTime = this.getCurrentTime() |
| | | }, |
| | | |
| | | initializedData(){ |
| | |
| | | } |
| | | initializedData(param).then(response => { |
| | | if(response.msg !== ''){ |
| | | this.headContent.sfcCode = response.msg; |
| | | this.queryParams.productNum = 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' |
| | | } |
| | | }); |
| | | }, |
| | |
| | | padTimeUnit(value) { |
| | | return value.toString().padStart(2, '0'); |
| | | }, |
| | | addBaseData(){ |
| | | addBasicParameters(this.passingStationForm).then(response => {}); |
| | | }, |
| | | |
| | | /** 入站增加过站采集记录 **/ |
| | | 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 => {}); |
| | | }, |
| | | 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.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 |
| | | } |
| | | |
| | | }); |
| | | this.conCom() |
| | | 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连接成功!'); |
| | | |
| | | self.$message('websocket连接成功!'); |
| | | }; |
| | | |
| | | |
| | | //socket从后台向前台推送数据 |
| | | this.ws.onmessage = function (event) { |
| | | if (event.data === "IN") { |
| | | 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; |
| | | console.log(self.headContent.processesCode); |
| | | // const param = { |
| | | // processesCode: self.headContent.processesCode, |
| | | // } |
| | | // fistSetpNumber(param).then(response => {}); |
| | | } else if (event.data === "IN0") { |
| | | self.cakeLamp.InPlace = 0; |
| | | }else if(event.data === "twoHundredAndThirtyEND"){ |
| | | self.endClear() |
| | | } else if (event.data === "OUT") { |
| | | self.cakeLamp.release = 1; |
| | | } else if (event.data === "END") { |
| | |
| | | console.log("进入最终方法") |
| | | self.endSaveData(param) |
| | | |
| | | } else if (event.data.includes("[")) { |
| | | } 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 |
| | |
| | | break; |
| | | } |
| | | } |
| | | if(formulaChilds === ""){ |
| | | self.$message.error('本工位已工作完成!'); |
| | | return; |
| | | } |
| | | if(formulaChilds === ""){ |
| | | self.$message.error('本工位已工作完成!'); |
| | | return; |
| | | } |
| | | const param = { |
| | | id: formulaChilds.id, |
| | | tightenTheArray: event.data, |
| | |
| | | spareField2: formulaChilds.spareField2, |
| | | spareField3: formulaChilds.spareField3, |
| | | spareField4: formulaChilds.spareField4, |
| | | stepSort: formulaChilds.stepSort |
| | | 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() |
| | | }); |
| | | } |
| | | }else if(event.data.includes("productNum")){ |
| | | let productNum = event.data.split(',')[1]; |
| | | self.headContent.sfcCode = productNum; |
| | | self.queryParams.productNum = productNum; |
| | | self.getList() |
| | | self.cakeLamp.scanFinish = 1 |
| | | self.cakeLamp.startWork = 1 |
| | | self.cakeLamp.InPlace = 1 |
| | | |
| | | } |
| | | }; |
| | | }, |
| | |
| | | workpieceRelease(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) |
| | | console.log("sfc=--"+this.headContent.sfcCode+"--") |
| | | if(this.headContent.sfcCode !== '' && this.headContent.sfcCode !== null |
| | | && this.headContent.sfcCode !== undefined){ |
| | | if(scanValue.includes("0RSP1TE") && this.headContent.processesCode === 'OP240'){ |
| | | this.headContent.cardCode = scanValue |
| | | this.bindcardCode(scanValue); |
| | | this.serialPortMethod(scanValue) |
| | | }else { |
| | | this.$message('工位终端扫描物料编码'+scanValue); |
| | | console.log(scanValue) |
| | | this.serialPortMethod(scanValue) |
| | | } |
| | | } else { |
| | | // if(this.headContent.processesCode === 'OP240'){ |
| | | this.headContent.sfcCode = scanValue; |
| | | this.queryParams.productNum = scanValue; |
| | | this.getList() |
| | | this.cakeLamp.scanFinish = 1 |
| | | this.cakeLamp.startWork = 1 |
| | | this.cakeLamp.InPlace = 1 |
| | | // }else { |
| | | // let param = { |
| | | // trolleyYard: scanValue |
| | | // } |
| | | // findBytrolleyYardGetOne(param).then(response => { |
| | | // if(response.msg !== '2'){ |
| | | // this.headContent.sfcCode = response.msg; |
| | | // this.queryParams.productNum = response.msg; |
| | | // this.$message('扫码识别产品序列号'+scanValue); |
| | | // this.getList() |
| | | // this.cakeLamp.scanFinish = 1 |
| | | // this.cakeLamp.startWork = 1 |
| | | // this.cakeLamp.InPlace = 1 |
| | | // }else { |
| | | // this.$message('没有序列号'+scanValue); |
| | | // return |
| | | // } |
| | | // }); |
| | | // } |
| | | |
| | | } |
| | | |
| | | } |
| | | }, |
| | | clearHistory() { |
| | | this.form1.desc = ""; |
| | | this.myserialport.state.readValue = []; |
| | | }, |
| | | loadHistory() { |
| | | if (this.form1.isShowHistory) this.form1.desc = this.readLi().join(""); |
| | | else { |
| | | let temp = this.readLi(); |
| | | if (temp.length > 0) this.form1.desc = temp[temp.length - 1].join(""); |
| | | } |
| | | }, |
| | | readLi() { |
| | | let readType = this.readType; |
| | | return this.myserialport.state.readValue.map((items, index) => { |
| | | const item = items.value; |
| | | const type = items.type; // 1接收,2发送 |
| | | let body = []; |
| | | if (item !== undefined) { |
| | | let strArr = []; |
| | | for (let hex of Array.from(item)) { |
| | | strArr.push(hex.toString(16).toLocaleUpperCase()); |
| | | } |
| | | if (strArr.includes("D") && strArr.includes("A")) { |
| | | if (strArr.indexOf("A") - strArr.indexOf("D") === 1) { |
| | | strArr.splice(strArr.indexOf("D"), 1); |
| | | strArr.splice(strArr.indexOf("A"), 1, <br key={0} />); |
| | | } |
| | | } |
| | | strArr = strArr.map((item) => { |
| | | if (typeof item === "string") { |
| | | if (readType === 1) { |
| | | return this.myserialport.hex2a(parseInt(item, 16)); |
| | | } else if (readType === 2) { |
| | | return item + " "; |
| | | } |
| | | } |
| | | return item; |
| | | }); |
| | | if (typeof strArr[strArr.length - 1] === "string") { |
| | | strArr.push("\r\n"); |
| | | } |
| | | body.push(strArr.join("")); |
| | | } |
| | | 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") { |
| | | 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; |
| | | await this.myserialport.openPort(this.form1.port, true, this.callBack); |
| | | console.log(this.form1.port) |
| | | } catch (error) { |
| | | this.$message.error("串口连接失败!请检查串口是否已被占用"); |
| | | } |
| | | if (this.myserialport.state.isOpen) { |
| | | this.$message.success("串口连接成功"); |
| | | this.open1 = false |
| | | this.btnType = "danger"; |
| | | this.btnText = "关闭串口"; |
| | | } |
| | | } else { |
| | | this.myserialport.openPort(this.form1.port, false, this.callBack); |
| | | this.$message.success("串口关闭成功"); |
| | | this.btnType = "primary"; |
| | | this.btnText = "连接串口"; |
| | | } |
| | | }, |
| | | //授权 |
| | | async obtainAuthorization() { |
| | | if ("serial" in navigator) { |
| | | console.log("The Web Serial API is supported."); |
| | | if (!this.myserialport) this.myserialport = new MySerialPort(); |
| | | try { |
| | | await this.myserialport.handleRequestPort(); |
| | | this.$message.success("串口授权成功"); |
| | | this.getPortInfo(this.myserialport.state.ports); |
| | | } catch (error) { |
| | | this.$message.warning("未选择新串口授权!"); |
| | | } |
| | | } else { |
| | | this.$message.error( |
| | | "当前为HTTP模式或者浏览器版本过低,不支持网页连接串口" |
| | | ); |
| | | } |
| | | }, |
| | | //串口列表初始化 |
| | | getPortInfo(portList) { |
| | | this.portsList = []; |
| | | portList.map((port, index) => { |
| | | const { usbProductId, usbVendorId } = port.getInfo(); |
| | | if (usbProductId === undefined || usbVendorId === undefined) { |
| | | this.portsList.push({ label: "未知设备" + index, value: index }); |
| | | } else { |
| | | const usbVendor = USBDevice.filter( |
| | | (item) => parseInt(item.vendor, 16) === usbVendorId |
| | | ); |
| | | let usbProduct = []; |
| | | if (usbVendor.length === 1) { |
| | | usbProduct = usbVendor[0].devices.filter( |
| | | (item) => parseInt(item.devid, 16) === usbProductId |
| | | ); |
| | | } |
| | | this.portsList.push({ label: usbProduct[0].devname, value: index }); |
| | | } |
| | | }); |
| | | }, |
| | | // 发送 |
| | | async sendCommon() { |
| | | if (this.myserialport.state.isOpen) { |
| | | if (this.form1.sendMsg.length !== 0) { |
| | | const writeType = this.form1.type; |
| | | let value = this.form1.sendMsg; |
| | | let arr = []; |
| | | if (writeType === 1) { |
| | | // ASCII |
| | | for (let i = 0; i < value.length; i++) { |
| | | arr.push(this.myserialport.a2hex(value[i])); |
| | | } |
| | | } else if (writeType === 2) { |
| | | // HEX |
| | | if (/^[0-9A-Fa-f]+$/.test(value) && value.length % 2 === 0) { |
| | | for (let i = 0; i < value.length; i = i + 2) { |
| | | arr.push(parseInt(value.substring(i, i + 2), 16)); |
| | | } |
| | | } else { |
| | | this.$message.error("格式错误"); |
| | | return; |
| | | } |
| | | } |
| | | this.myserialport.writeText(arr); |
| | | } else { |
| | | this.$message.warning("请输入发送的信息"); |
| | | } |
| | | } else { |
| | | this.$message.warning("串口处于关闭状态,请连接串口"); |
| | | } |
| | | }, |
| | | async getPorts() { |
| | | await this.myserialport.getPorts(); |
| | | this.getPortInfo(this.myserialport.state.ports); |
| | | }, |
| | | querySearch(queryString, cb) { |
| | | var restaurants = this.restaurants; |
| | | var results = queryString |
| | | ? restaurants.filter(this.createFilter(queryString)) |
| | | : restaurants; |
| | | // 调用 callback 返回建议列表的数据 |
| | | cb(results); |
| | | }, |
| | | createFilter(queryString) { |
| | | return (restaurant) => { |
| | | return ( |
| | | restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === |
| | | 0 |
| | | ); |
| | | }; |
| | | }, |
| | | loadAll() { |
| | | return [ |
| | | { value: "110" }, |
| | | { value: "300" }, |
| | | { value: "600" }, |
| | | { value: "1200" }, |
| | | { value: "2400" }, |
| | | { value: "4800" }, |
| | | { value: "7200" }, |
| | | { value: "9600" }, |
| | | { value: "14400" }, |
| | | { value: "19200" }, |
| | | { value: "28800" }, |
| | | { value: "38400" }, |
| | | { value: "56000" }, |
| | | { value: "57600" }, |
| | | { value: "76800" }, |
| | | { value: "115200" }, |
| | | { value: "230400" }, |
| | | { value: "460800" }, |
| | | ]; |
| | | }, |
| | | } |
| | | } |
| | | |
| | | </script> |
| | | <style scoped> |
| | | .div1, .div2 { |
| | | flex: 1; /* 两个div平分容器宽度 */ |
| | | } |
| | | .span{ |
| | | font-family: 'Microsoft YaHei', sans-serif; |
| | | } |
| | | .div2{ |
| | | margin-left: 30px; |
| | | } |
| | | .bottom-card{ |
| | | height: 600px; |
| | | } |