agri-app/App.vue

92 lines
2.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script>
import config from './config'
import { getToken } from '@/utils/auth'
import {
initMQTT,
disconnectMQTT,
getMQTTStatus,
manualReconnect
} from '@/utils/mqtt';
export default {
globalData: {
mqttClient: null, // 全局MQTT客户端实例
mqttConfig: { // MQTT全局配置可根据环境切换
host: '1.94.254.176',
port: 9001, // 小程序用wss端口如EMQ X的8084
isSSL: false, // true=wssfalse=ws
username: 'admin',
password: 'Admin#12345678',
keepalive: 60,
clean: true
},
globalSubscribeTopic: [ // 全局基础订阅列表(所有页面都需要的主题)
{topic: 'dtu/#', qos: 0},
// {topic: 'system/status', qos: 1}
],
mqttStatus: 'disconnected' // 全局连接状态connected/disconnected/reconnecting
},
onLaunch() {
this.initApp()
console.log('应用启动初始化MQTT连接');
this.initGlobalMQTT();
},
onShow() {
console.log('应用切前台检查MQTT连接');
const { isConnected } = getMQTTStatus();
if (!isConnected && this.globalData.mqttStatus !== 'disconnected') {
// 非主动断开的情况下,切前台重连
manualReconnect(this.globalData.mqttConfig);
this.globalData.mqttStatus = 'reconnecting';
}
},
onHide() {
console.log('应用切后台断开MQTT连接');
// 切后台主动断开(避免小程序后台占用资源)
disconnectMQTT();
this.globalData.mqttStatus = 'disconnected';
this.globalData.mqttClient = null;
},
methods: {
// 初始化应用
initApp() {
// 初始化应用配置
this.initConfig()
// 检查用户登录状态
//#ifdef H5
this.checkLogin()
//#endif
},
initConfig() {
this.globalData.config = config
},
checkLogin() {
if (!getToken()) {
this.$tab.reLaunch('/pages/login')
}
},
// 初始化全局MQTT
async initGlobalMQTT() {
try {
// 调用工具类初始化连接(传入全局配置+全局订阅列表)
const client = await initMQTT(
this.globalData.mqttConfig,
this.globalData.globalSubscribeTopic
);
// 挂载客户端到全局
this.globalData.mqttClient = client;
this.globalData.mqttStatus = 'connected';
console.log('全局MQTT初始化成功');
} catch (err) {
console.error('全局MQTT初始化失败', err);
this.globalData.mqttStatus = 'disconnected';
}
}
}
}
</script>
<style lang="scss">
@import '@/static/scss/index.scss';
</style>