懒羊羊
2024-01-13 5f3a2e98c54ce815f270d149872b2b3d0d008ff0
提交 | 用户 | 时间
b0742c 1 <template>
C 2   <div class="app-container">
589dc7 3    <el-row :gutter="5">
4      <el-col :span="6">
49ac5c 5        <el-card shadow="never">
6          <span class="head-font">工位编号 : {{headContent.processesCode}}</span>
589dc7 7        </el-card>
8      </el-col>
9      <el-col :span="6">
49ac5c 10        <el-card shadow="never">
11          <span class="head-font">工位名称 : {{headContent.processesName}}</span>
589dc7 12        </el-card>
13      </el-col>
8586e1 14      <el-col :span="12">
49ac5c 15        <el-card shadow="never">
16          <span class="head-font">总成编码 : {{headContent.sfcCode}}</span>
5a6d6b 17          <el-input v-model="content" style="float: right;width: 150px;" placeholder="请输入内容"></el-input>
49ac5c 18          <el-button @click="scanCompleted" style="float: right" type="primary">扫码完成</el-button>
19          <el-button @click="clearClick" style="float: right" type="danger">清除</el-button>
589dc7 20        </el-card>
21      </el-col>
8586e1 22
589dc7 23    </el-row>
24    <el-row :gutter="5" style="margin-top: 5px">
25      <el-col :span="6" >
26        <el-card class="bottom-card">
27          <div slot="header" class="clearfix">
49ac5c 28            <i class="el-icon-tickets"></i>
29            <span style="font-weight: bold">当前工件信息</span>
589dc7 30          </div>
49ac5c 31          <el-descriptions :column="1" :label-style="{'font-size': '15px'}" border :content-style="{'min-width': '150px'}">
32            <el-descriptions-item label="工单编号">
33                <span>{{workpieceInformation.workOrderCode}}</span>
589dc7 34            </el-descriptions-item>
49ac5c 35            <el-descriptions-item label="产品编号">
36              <span>{{workpieceInformation.productCode}}</span>
589dc7 37            </el-descriptions-item>
49ac5c 38            <el-descriptions-item label="产品型号">
39              <span>{{workpieceInformation.productModel}}</span>
589dc7 40            </el-descriptions-item>
49ac5c 41            <el-descriptions-item label="产品名称">
42              <span>{{workpieceInformation.productName}}</span>
589dc7 43            </el-descriptions-item>
49ac5c 44            <el-descriptions-item label="节拍">
45              <span>{{workpieceInformation.beat}}</span>
589dc7 46            </el-descriptions-item>
47          </el-descriptions>
48          <el-divider></el-divider>
49          <el-row>
50            <el-col :span="12">
49ac5c 51              <el-button class="circle-button" :class="cakeLamp.plcState ? 'circle-green-animate':'circle-red'" circle></el-button>
52              <span style="display: none">{{cakeLamp.plcState}}</span>
8586e1 53              <span>&nbsp;PLC状态</span>
589dc7 54            </el-col>
55            <el-col :span="12">
49ac5c 56              <el-button class="circle-button" :class="cakeLamp.scannerState ? 'circle-green-animate':'circle-red'" circle></el-button>
57              <span style="display: none">{{cakeLamp.scannerState}}</span>
8586e1 58              <span>&nbsp;扫码枪状态</span>
589dc7 59            </el-col>
60          </el-row>
61          <el-row style="margin-top: 20px">
62            <el-col :span="12">
49ac5c 63              <el-button class="circle-button" :class="cakeLamp.InPlace ? 'circle-green':'circle-red'" circle></el-button>
64              <span style="display: none">{{cakeLamp.InPlace}}</span>
8586e1 65              <span>&nbsp;工件到位</span>
589dc7 66            </el-col>
67            <el-col :span="12">
49ac5c 68              <el-button class="circle-button" :class="cakeLamp.scanFinish ? 'circle-green':'circle-red'" circle></el-button>
69              <span style="display: none">{{cakeLamp.scanFinish}}</span>
8586e1 70              <span>&nbsp;扫码完成</span>
589dc7 71            </el-col>
72          </el-row>
73          <el-row style="margin-top: 20px">
74            <el-col :span="12">
49ac5c 75              <el-button class="circle-button" :class="cakeLamp.startWork ? 'circle-green':'circle-red'" circle></el-button>
76              <span style="display: none">{{cakeLamp.startWork}}</span>
8586e1 77              <span>&nbsp;开始作业</span>
589dc7 78            </el-col>
79            <el-col :span="12">
49ac5c 80              <el-button class="circle-button" :class="cakeLamp.release ? 'circle-green':'circle-red'" circle></el-button>
81              <span style="display: none">{{cakeLamp.release}}</span>
8586e1 82              <span>&nbsp;允许放行</span>
589dc7 83            </el-col>
84          </el-row>
85        </el-card>
b0742c 86
589dc7 87      </el-col>
88      <el-col :span="18">
5a6d6b 89        <el-tabs type="border-card"  style="height: 600px" v-model="activeName" @tab-click="changeMenu">
90          <el-tab-pane name="first">
589dc7 91            <span slot="label"> <a class="el-icon-date"></a>首页</span>
92            <el-col :span="8">
93              <el-table>
8586e1 94                <el-table-column label="序号" align="center" prop="repairIdentification" width="50px"/>
A 95                <el-table-column label="操作内容" align="center" prop="boxCode"  width="300px"/>
589dc7 96              </el-table>
97            </el-col>
98            <el-col :span="16">
5f3a2e 99 <!--             <el-input v-model="url" type="text" style="width: 20%" /> &nbsp; &nbsp;-->
100 <!--             <el-button @click="join" type="primary">连接</el-button>-->
101 <!--             <el-button @click="exit" type="danger">断开</el-button>-->
102
103 <!--             <br />-->
104 <!--             <el-input type="textarea" v-model="message" :rows="9" />-->
105 <!--             <el-button type="info" @click="send">发送消息</el-button>-->
106 <!--             <br />-->
107 <!--             <br />-->
108 <!--             <el-input type="textarea" v-model="text_content" :rows="9" /> 返回内容-->
109 <!--             <br />-->
110 <!--             <br />-->
589dc7 111              <el-image style="height: 520px;width: 100%" :src="imgSrc"></el-image>
112            </el-col>
113          </el-tab-pane>
5a6d6b 114          <el-tab-pane name="second">
589dc7 115            <span slot="label"> <b class="el-icon-date"></b>物料BOM</span>
5a6d6b 116            <el-empty>
589dc7 117              <span slot="description">暂无数据</span>
118            </el-empty>
119          </el-tab-pane>
5a6d6b 120          <el-tab-pane name="third">
121            <span slot="label"> <b class="el-icon-date"></b>采集清单</span>
122            <el-empty>
589dc7 123              <span slot="description">暂无数据</span>
124            </el-empty>
125          </el-tab-pane>
5a6d6b 126          <el-tab-pane name="fourth">
127            <span slot="label"> <b class="el-icon-date"></b>安灯状态</span>
128            <el-empty>
589dc7 129              <span slot="description">暂无数据</span>
130            </el-empty>
131          </el-tab-pane>
5a6d6b 132          <el-tab-pane name="fifth">
133            <span slot="label"> <b class="el-icon-date"></b>工艺配方</span>
134            <el-empty>
589dc7 135              <span slot="description">暂无数据</span>
136            </el-empty>
137          </el-tab-pane>
138        </el-tabs>
139      </el-col>
140    </el-row>
b0742c 141   </div>
C 142 </template>
143 <script>
49ac5c 144 import {listWorkReport} from "@/api/main/om/workReport/workReport";
145 import {listStationConf,getIpv4} from "@/api/main/sc/stationConf";
146
b0742c 147 export default {
49ac5c 148   name: "stationTerminal",
b0742c 149   data() {
C 150     return {
49ac5c 151       ipAddress: '',
589dc7 152       imgSrc: '',
49ac5c 153       headContent: {
154         processesCode: 'OP1010',
155         processesName: '贴标机-贴码',
156         sfcCode: '1000000000000001',
157       },
158       workpieceInformation: {
159         workOrderCode: null,
160         productCode: null,
161         productModel: null,
162         productName: null,
163         beat: null,
164       },
165       // 查询参数
166       queryParams: {
167         pageNum: 1,
168         pageSize: 10,
169         sfcCode: null,
170       },
5f3a2e 171       // 查询参数
172       StationConfQueryParams: {
173         pageNum: 1,
174         pageSize: 10,
175         ipAddress: null,
176       },
49ac5c 177       cakeLamp: {
178         plcState: 1, //plc
179         scannerState: 1, //扫码枪
180         InPlace: 0, //工件到位
181         scanFinish: 0,
182         startWork: 0,
183         release: 0 //允许放行
5a6d6b 184       },
185       content: '',
5f3a2e 186       activeName: 'first',
187       url: "ws://192.168.10.196:8081/websocket/message/",
188       message: "",
189       text_content: "",
190       ws: null,
b0742c 191     }
5f3a2e 192   },
193   beforeDestroy() {
194     this.exit();
b0742c 195   },
49ac5c 196   created() {
197     this.getStationConfList();
5f3a2e 198     this.connectWebsocket();
199
200
201     this.initStation();
202     // this.getStationConfList();
203     // setTimeout(() => {
204     //   this.connectWebsocket();
205     // }, 3000);
206   },
207   mounted() {
208
49ac5c 209   },
210   methods: {
5a6d6b 211     changeMenu(tab, event) {
212       console.log(tab, event);
213     },
49ac5c 214     clearClick(){
215       this.$message('这是一条清除消息提示');
216       this.headContent.sfcCode = null
217     },
218     scanCompleted(){
5a6d6b 219       this.$message('扫码完成'+this.content);
220       this.headContent.sfcCode = this.content
221       this.queryParams.sfcCode = this.content
49ac5c 222       this.getList()
223       this.cakeLamp.scanFinish = 1
224     },
225     /** 查询报工记录 表列表 */
226     getList() {
227       listWorkReport(this.queryParams).then(response => {
228         let rowsData = response.rows[0];
229         this.workpieceInformation.workOrderCode = rowsData.workOrderCode;
230         this.workpieceInformation.productCode = rowsData.productCode;
231         this.workpieceInformation.productModel = rowsData.productModel;
232         this.workpieceInformation.productName = rowsData.productName;
233         this.timer = setInterval(() => {
234           this.workpieceInformation.beat++;
235         }, 1000);
236       });
237     },
238     allowRelease(){
239       clearInterval(this.timer);
240       this.$message('保存节拍为'+this.workpieceInformation.beat+'秒');
241     },
242     /** 查询工位终端配置列表 */
5f3a2e 243     async getStationConfList() {
244       await getIpv4().then(response => {
245         this.StationConfQueryParams.ipAddress = response.msg
246         console.log('查询到本工位IP为'+this.StationConfQueryParams.ipAddress)
49ac5c 247       });
5f3a2e 248       listStationConf(this.StationConfQueryParams).then(response => {
49ac5c 249         let rows = response.rows[0]
5a6d6b 250         if(response.rows.length===0){
5f3a2e 251           this.$message('该工位没有配置IP,请联系管理员配置IP');
5a6d6b 252           return
253         }
49ac5c 254         this.headContent.processesName = rows.processesName
255         this.headContent.processesCode = rows.processesCode
5f3a2e 256         console.log('设置工位编码'+this.headContent.processesCode)
257
49ac5c 258       });
259     },
5f3a2e 260     connectWebsocket() {
261       console.log('websocket连接工位为'+this.headContent.processesCode)
262       const wsuri = this.url + this.headContent.processesCode;
263       this.ws = new WebSocket(wsuri);
264       const self = this;
265       this.ws.onopen = function (event) {
266         // self.text_content = self.text_content + "已经打开连接!" + "\n";
267         this.$message('websocket连接成功!');
268       };
269       this.ws.onmessage = function (event) {
270         self.text_content = event.data + "\n";
271         console.log(event.data)
272         if(event.data === "1"){
273           self.cakeLamp.InPlace = "1"
274         }
275       };
276     },
277     exit() {
278       if (this.ws) {
279         this.ws.close();
280         this.ws = null;
281       }
282     },
283     send() {
284       if (this.ws) {
285         this.ws.send(this.message);
286       } else {
287         alert("未连接到服务器");
288       }
289     },
290     async initStation(){
291       await getIpv4().then(response => {
292         this.StationConfQueryParams.ipAddress = response.msg
293         console.log('查询到本工位IP为'+this.StationConfQueryParams.ipAddress)
294       });
295       await listStationConf(this.StationConfQueryParams).then(response => {
296         let rows = response.rows[0]
297         if(response.rows.length===0){
298           this.$message('该工位没有配置IP,请联系管理员配置IP');
299           return
300         }
301         this.headContent.processesName = rows.processesName
302         this.headContent.processesCode = rows.processesCode
303         console.log('设置工位编码'+this.headContent.processesCode)
304
305       });
306       console.log('websocket连接工位为'+this.headContent.processesCode)
307       const wsuri = this.url + this.headContent.processesCode;
308       this.ws = new WebSocket(wsuri);
309       const self = this;
310       this.ws.onopen = function (event) {
311         // self.text_content = self.text_content + "已经打开连接!" + "\n";
312         this.$message('websocket连接成功!');
313       };
314       this.ws.onmessage = function (event) {
315         self.text_content = event.data + "\n";
316         console.log(event.data)
317         if(event.data === "1"){
318           self.cakeLamp.InPlace = "1"
319         }
320       };
321     }
49ac5c 322   }
b0742c 323 }
C 324
325 </script>
589dc7 326 <style scoped>
327 .bottom-card{
328   height: 600px;
b0742c 329 }
589dc7 330 .circle-button{
8586e1 331   height: 30px;
A 332   width: 30px;
333 }
49ac5c 334 .circle-red {
335   background-color: #e01a4f;
336 }
337 .circle-green {
338   background-color: green;
339 }
340 .circle-green-animate {
341   background-color: green;
342   animation: circle-green-animate 2s infinite;
343 }
344   @keyframes circle-green-animate {
345     50% {
346       opacity: 0.6;
347     }
348     0% {
349       opacity: 0.2;
350     }
351   }
352 .head-font{
353   font-weight: bold;
354   font-size: 25px;
355 }
8586e1 356 span{
A 357   font-size: 15px;
b0742c 358 }
C 359 </style>
5a6d6b 360