92 lines
2.8 KiB
Vue
92 lines
2.8 KiB
Vue
<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=wss,false=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>
|