优化蓝牙订阅在首页的弹窗

This commit is contained in:
liub
2026-04-06 14:02:00 +08:00
parent 1e51023c00
commit 2b7ae4ebaa
5 changed files with 232 additions and 208 deletions

View File

@ -58,6 +58,12 @@
{{getbleStatu}}
</text>
</view>
<view class="info-row" v-if="itemInfo.deviceMac" @click="bleStatuToggle">
<text class="info-label">充电状态</text>
<text class="info-value status-running" >
{{deviceInfo.chargeState != 0?'充电中':'未充电'}}
</text>
</view>
<view class="info-row">
<text class="info-label" style="display: flex; align-items: center;">定位信息</text>
<view class="info-value status-running" @click="gpsPosition(deviceInfo)">
@ -73,7 +79,7 @@
</view>
</view>
</view>
<view class="callpolice" v-if="deviceInfo.onlineStatus == 1 && deviceInfo.alarmStatus == 1">
<view class="callpolice" v-if="deviceInfo.alarmStatus == 1">
<view class="">设备强制报警中</view>
<view>
<uni-icons type="closeempty" size="15" color="rgba(255, 255, 255, 0.9)"
@ -436,6 +442,52 @@
}
},
methods: {
onReceive(deviceState){//蓝牙/Mq通用消息处理
switch (deviceState[0]) {
// 1设备切换灯光实时返回
case 1:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.sliderValue = deviceState[2];
this.deviceInfo.batteryRemainingTime = deviceState[3];
break;
// 12为设备实时上报
case 12:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.isLaserOn = deviceState[2] === 1; //第3位表示当时激光灯档位
this.currentlaserMode = this.isLaserOn ? "开启" : "关闭";
if (this.deviceInfo) {
this.deviceInfo.batteryPercentage = deviceState[3]; //第4位电量百分比
this.deviceInfo.chargeState = deviceState[4]; //第5位为充电状态0没有充电1正在充电2为已充满
this.deviceInfo.batteryRemainingTime = deviceState[5]; //第6位200代表电池剩余续航时间200分钟
}
setTimeout(() => {
if (this.deviceInfo.batteryPercentage < 20 &&
this.deviceInfo.chargeState == 0) {
this.popupType = 'bettery';
this.popupMessage = '请及时充电';
this.showPopupFlag = true;
}
if (this.apiType === 'listA') {
this.fetchDeviceDetail(data.data.id)
} else {
// 分享权限详情
this.fetchSharedDeviceDetail(data.data.id)
}
}, 10000);
// 上报电量,在列表里面同步
uni.$emit('deviceStatusUpdate', {
message: parsedMessage,
timestamp: new Date().getTime()
});
break;
default:
console.log('未知的 deviceState 类型:', deviceState[0]);
}
},
bleStatuToggle() {
let f = this.getDevice();
if (!f) {
@ -532,11 +584,9 @@
}
let data = rec.ReceiveData(receive, device, pagePath, recArr);
console.log("蓝牙收到消息", data)
this.receivData(data);
},
receivData(data) {
this.onReceive(data.state);
},
bleStateBreak() {
if (this.Status.pageHide) {
return;
@ -1566,6 +1616,7 @@
// this.popupConfirmText="";
},
OpenWarn(val){//开启/解除强制报警
debugger;
const topic = `B/${this.itemInfo.deviceImei}`;
let message={"instruct":[7,val,0,0,0,0]};
message=JSON.stringify(message);
@ -1575,6 +1626,8 @@
});
if(flag){
this.itemInfo.alarmStatus=val;
}else{
MsgError("操作没有成功",'确定',this);
}
this.showPopupFlag = false;
@ -1644,11 +1697,11 @@
// 3.解除告警状态
const registerRes = await deviceSendAlarmMessage(data);
if (registerRes.code !== 200) {
uni.showToast({
title: registerRes.msg,
icon: 'none'
})
// uni.showToast({
// title: registerRes.msg,
// icon: 'none'
// })
this.OpenWarn(0);
return
}
this.itemInfo.alarmStatus=0;
@ -1908,53 +1961,8 @@
const deviceState = parsedMessage.state; // 直接取 state 数组
// 切换主灯光模式,亮度值设备同步
if (!deviceState) return;
// 1设备切换灯光实时返回
switch (deviceState[0]) {
case 1:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.sliderValue = deviceState[2];
this.deviceInfo.batteryRemainingTime = deviceState[3];
break;
// 12为设备实时上报
case 12:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.isLaserOn = deviceState[2] === 1; //第3位表示当时激光灯档位
this.currentlaserMode = this.isLaserOn ? "开启" : "关闭";
if (this.deviceInfo) {
this.deviceInfo.batteryPercentage = deviceState[
3]; //第4位电量百分比
this.deviceInfo.chargeState = deviceState[
4]; //第5位为充电状态0没有充电1正在充电2为已充满
this.deviceInfo.batteryRemainingTime = deviceState[
5]; //第6位200代表电池剩余续航时间200分钟
}
setTimeout(() => {
if (this.deviceInfo.batteryPercentage < 20 &&
this.deviceInfo.chargeState == 0) {
this.popupType = 'bettery';
this.popupMessage = '请及时充电';
this.showPopupFlag = true;
}
if (this.apiType === 'listA') {
this.fetchDeviceDetail(data.data.id)
} else {
// 分享权限详情
this.fetchSharedDeviceDetail(data.data.id)
}
}, 10000);
// 上报电量,在列表里面同步
uni.$emit('deviceStatusUpdate', {
message: parsedMessage,
timestamp: new Date().getTime()
});
break;
default:
console.log('未知的 deviceState 类型:', deviceState[0]);
}
this.onReceive(deviceState);
} catch (error) {
console.log('解析MQTT消息失败:', error, '原始消息:', payload);
}