Newer
Older
VueSharedPrinting / src / App.vue
hanfei on 9 Jan 2024 2 KB han
<template>
  <div id="app">
    <top/>
    <router-view/>
  </div>
</template>

<script>
import top from '@/components/top.vue'
import mqtt from "mqtt/dist/mqtt"
import {getDeviceByCode} from "@/api/resultApi";

export default {
  name: 'Home',
  components: {
    top
  },
  data() {
    return {
      client: null,
      code: ''
    };
  },
  created() {
    this.load()
  },
  methods: {
    load() {
      // 获取名为id的查询参数值
      if (this.cite.code === "") {
        this.code = this.$route.query.code;
        this.cite.code = this.code;
      }else{
        this.code = this.cite.code;
      }

      console.log(this.code); // 输出查询参数的值
      this.initMqtt()
      if (this.cite.facility === "") {
        this.getDeviceByCode();
      }

    },
    initMqtt() {
      // 连接配置选项
      let options = {
        connectTimeout: 4000, // 超时时间
        // 认证信息
        clientId: '', //不填默认随机生成一个ID
        username: 'admin', //用户名
        password: 'public' //密码
      }
      this.client = mqtt.connect('tcp://192.168.250.29:8083/mqtt', options) //调用连接的api
      //连接成功
      this.client.on('connect', (e) => {
        console.log('连接成功', e)
        this.subscribes()
      })
      //重连提醒
      this.client.on('reconnect', (error) => {
        console.log('正在重连', error)
      })
      //连接失败提醒
      this.client.on('error', (error) => {
        console.log('连接失败', error)
      })
      //接收消息
      this.client.on('message', (topic, message) => {
        const data = JSON.parse(message) //接受到控制信号的数据
        console.log(data)
        if(data.login) {
          this.cite.memberLoginVo = data.memberLoginVo
        }else{
          this.cite.memberLoginVo = ''
        }
      })
    },
    //订阅多个主题
    subscribes() {
      const arr = ['/tzdy/send/device/'+this.code]
      this.client.subscribe(arr, { qos: 0 }, (err) => {
        if (!err) {
          console.log(`消息订阅成功`)
        } else {
          console.log('消息订阅失败')
        }
      })
    },
    getDeviceByCode() {
      getDeviceByCode({ code: this.code }).then((res) => {
        this.cite.facility = res.data;
      });
    },
  }
}
</script>


<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

* {
  margin: 0;
  padding: 0;
}
body {
  background: #FAFAFA;
}
.flex-center{
  display:flex;
  flex-direction: row;
  align-items:center;
  justify-content:center;
}
.flex-start{
  display:flex;
  flex-direction: row;
  align-items:center;
  justify-content:flex-start;
}
.flex-end{
  display:flex;
  flex-direction: row;
  align-items:center;
  justify-content:flex-end;
}
.flex-between{
  display:flex;
  flex-direction: row;
  align-items:center;
  justify-content:space-between;
}
</style>