You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

290 lines
8.2 KiB
Vue

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.

<template>
<view>
<text>这是实时监测页面</text>
<view class="u-demo-block__content">
<u-row customStyle="margin-bottom: 10px">
<u-col span="6" style="margin: 0rpx 10rpx 0rpx 10rpx;padding: 25rpx">
<view class="demo-layout bg-purple-light">
<u-button type="primary" :text="connectText" @click="clickConnectOrNot()"></u-button>
<!-- <view class="uni-row connect-btn" @click="clickConnectOrNot()">
<text>{{connectText}}</text>
</view> -->
</view>
</u-col>
<u-col span="6" >
<view class="state">
{{state}}
</view>
</u-col>
</u-row>
<u-row customStyle="margin-bottom: 10px">
<u-col span="6" style="margin: 0rpx 10rpx 0rpx 10rpx;padding: 25rpx">
<u-button type="primary" text="发送" @click="clickSend()"></u-button>
</u-col>
</u-row>
<u-row customStyle="margin-bottom: 10px">
<u-col span="6" style="margin: 0rpx 10rpx 0rpx 10rpx;padding: 25rpx">
<view class="state">
<text>监测状态</text>
</view>
</u-col>
<u-col span="6" style="margin: 0rpx 10rpx 0rpx 10rpx;padding: 25rpx">
<view class="demo-layout bg-purple-light">
<u-switch v-model="value3" size="28" :disabled="!mqttConnected"></u-switch>
</view>
</u-col>
</u-row>
</view>
<view class="uni-column" style="padding: 20rpx;border: 3px solid green;">
<view class="uni-column" v-for="(item,index) in list">
<view class="uni-row" style="margin: 10rpx;" v-show="item.gravity=='left'">
<text>{{item.content}}</text>
</view>
<view class="uni-row" style="width: 100%;margin: 10rpx;" v-show="item.gravity=='right'">
<text style="width: 100%;text-align: end;">{{item.content}}</text>
</view>
</view>
</view>
<view class="">
<u-popup :show="showMqttEditConfig" mode="bottom" @close="closeEditConfig" @open="openEditConfig">
<view style="height: 300rpx;">
<u-button type="info" @click="readConfig()">读取json</u-button>
<u-button type="info" @click="savejson()">保存json</u-button>
<u-button type="info" @click="resetConfig()">重置json</u-button>
</view>
</u-popup>
<!-- <view class="btn" @click="showMqttEditConfig = true">打开弹出层</view> -->
</view>
<view class="showMqttEdit" @click="showMqttEditConfig = true">
<u-icon name="setting" size="28" color="#fff"></u-icon>
</view>
</view>
</template>
<script>
const mqttModule = uni.requireNativePlugin("jushi-MqttPlugin");
import mqttconfig from '@/static/mqttconfig.json';
import ConfigManager from '@/utils/configManager.js';
import EditMqttConfig from '../edit-mqtt-config/edit-mqtt-config.vue'
// 默认配置
const defaultConfig = {
"host": "ws://101.126.7.123:8083",
"userName": "taytest",
"psw": "txgy1929",
"clientId": "123@jk1bh0"
};
export default {
components: {
EditMqttConfig
},
data() {
return {
list: [],
sendMsg: [],
value3:false,
showMqttEditConfig: false,
monitorStatus:false,
state: 'mqtt未连接',
mqttConnected:false,
connectText: '开始连接',
stateColor: "#666666",
currentMqttConfig : {
host: '',
userName: '',
psw: '',
clientId: ''
},
inputValue: '手机发送的数据'
}
},
created() {
this.readConfig();
console.log('读取配置');
this.mqttCallback()
// mqttModule.enabledDebug(true)//开启日志输出需要用Android studio才能查看插件日志
},
methods: {
change(e) {
console.log('change', e);
},
openEditConfig() {
this.showMqttEditConfig = true;
},
closeEditConfig() {
this.showMqttEditConfig = false;
// console.log('close');
},
mqttCallback() { //mqtt回调监听
mqttModule.addCallback(res => {
console.log("回调结果:" + res)
var json = JSON.parse(res)
switch (parseInt(json.code)) {
case 0: //mqtt连接成功
this.toSubscribe()
this.state = "mqtt已连接"
this.stateColor = "#008577"
this.connectText = "断开连接"
this.mqttConnected=true;
break
case -2: //手动断开连接
this.state = "mqtt未连接"
this.stateColor = "#666666"
this.connectText = "开始连接"
this.mqttConnected=false;
break
case 2: //收到消息(对方发的和自己发的都会走到这里)
this.handleMsg(json)
break
}
})
},
clickConnectOrNot() {
mqttModule.isConnected(res => {
console.log("mqtt是否已连接" + res)
if (res) {
mqttModule.disconnect()
} else {
var sever = "ws://101.126.7.123:8083";
var userName = "taytest";
var psw = "txgy1929";
var clientId = "123@jk1bh0";
// mqttModule.connect(sever, userName, psw, clientId) //mqtt连接方法1
this.connectMqtt(sever, userName, psw, clientId) //mqtt连接方法2
}
})
},
connectMqtt(sever, userName, psw, clientId) {
mqttModule.connectUseJson({
sever: sever, //服务地址 示例wss://ip:port
userName: userName, //用户名
password: psw, //密码
clientId: clientId, //客户端id
autoReconnect: true, //是否自动重连默认是true也可以使用setAutoReconnect(true/false)函数设置
isCleanSession: true, //是否持久会话默认为true
connectionTimeout: 20, //连接超时时间 默认20s
keepAliveInterval: 10 //心跳时间 默认10s
})
},
toSubscribe() { //连接成功,订阅主题
mqttModule.subscribe("testtopic/1")
},
toUnsubscribe() { //取消订阅
mqttModule.unsubscribe("testtopic/1")
},
clickSend() { //点击发送
mqttModule.isConnected(res => {
if (!res) {
this.toast("MQTT未连接")
return
}
var msg = JSON.stringify(this.inputValue)
this.sendMsg.push(msg)
mqttModule.publish(msg, "testtopic/1")
this.inputValue = ''
})
},
toast(msg) {
uni.showToast({
icon: "none",
title: msg
})
},
handleMsg(json) { //处理收到的消息(对方发的和自己发的都会走到这里)
var isSend = false
for (var i = 0; i < this.sendMsg.length; i++) {
if (this.sendMsg[i] == json.data.message) {
isSend = true
break
}
}
var data = {
content: `Topic${json.data.topic}\n ${json.data.message}`,
gravity: isSend ? "right" : "left"
}
this.list.push(data)
},
// 1. 初始化配置文件
initializeConfig() {
ConfigManager.initializeConfigFile(defaultConfig, (error, config) => {
if (error) {
console.error('初始化配置文件失败:', error);
} else {
console.log('配置文件已初始化:', config);
}
});
},
// 2. 读取配置文件
readConfig() {
ConfigManager.readConfigFile((error, config) => {
if (error) {
console.error('读取配置文件失败:', error);
} else {
console.log('当前配置:', config);
this.currentMqttConfig=config;
}
});
},
// 3. 修改并保存配置文件
saveConfig(newConfig) {
ConfigManager.saveConfigFile(newConfig, (error) => {
if (error) {
console.error('保存配置文件失败:', error);
} else {
console.log('配置文件已更新:', newConfig);
}
});
},
// 4. 重置配置文件
resetConfig() {
ConfigManager.resetConfigFile(defaultConfig, (error) => {
if (error) {
console.error('重置配置文件失败:', error);
} else {
console.log('配置文件已重置为默认内容:', defaultConfig);
}
});
},
savejson() {
this.saveConfig(this.currentMqttConfig);
}
}
}
</script>
<style lang="scss">
.connect-btn {
width: 100%;
justify-content: center;
border-radius: 10rpx;
border: 1rpx solid #aaaaaa;
font-size: 30rpx;
padding: 5rpx 20rpx 5rpx 20rpx;
}
.showMqttEdit {
width: 100rpx;
height: 100rpx;
background: #2196F3;
color: #fff;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
font-size: 60rpx;
position: fixed;
right: 60rpx;
bottom: 120rpx;
box-shadow: 0 0 20 rpx rgba(43, 153, 57, 0.6);
}
.state{
margin: 0rpx 10rpx 0rpx 10rpx;
padding: 70rpx 0;
text-align: center;
font-size: 36rpx;
}
</style>