1
0
forked from dyf/APP

100J加固蓝牙相关逻辑

This commit is contained in:
微微一笑
2026-03-24 15:47:24 +08:00
parent 7158293d8d
commit a7e1809fc8

View File

@ -48,7 +48,7 @@
<text class="lbl">蓝牙名称</text>
<text class="value valueFont">{{device.bluetoothName}}</text>
</view>
<view class="item" @click.top="bleStatuToggle">
<view class="item" @click.stop="bleStatuToggle">
<text class="lbl">蓝牙状态</text>
<text class="value"
:class="(!formData.bleStatu || formData.bleStatu==='err')?'red':'green'">{{getbleStatu}}</text>
@ -251,7 +251,6 @@
} from '@/api/100J/HBY100-J.js'
import BleHelper from '@/utils/BleHelper.js';
var bleTool = BleHelper.getBleTool();
var these = null;
import Common from '@/utils/Common.js'
const pagePath = "/pages/100/HBY100";
export default {
@ -627,12 +626,12 @@
});
this.createThrottledFunctions();
// 注册蓝牙相关事件
// 注册蓝牙相关事件(必须 bind(this),否则 BleHelper 直接调用回调时 this 丢失,蓝牙状态不更新)
bleTool.addReceiveCallback(this.bleValueNotify.bind(this), "HBY100J");
bleTool.addDisposeCallback(this.bleStateBreak, "HBY100J");
bleTool.addRecoveryCallback(this.bleStateRecovry, "HBY100J");
bleTool.addStateBreakCallback(this.bleStateBreak, "HBY100J");
bleTool.addStateRecoveryCallback(this.bleStateRecovry, "HBY100J");
bleTool.addDisposeCallback(this.bleStateBreak.bind(this), "HBY100J");
bleTool.addRecoveryCallback(this.bleStateRecovry.bind(this), "HBY100J");
bleTool.addStateBreakCallback(this.bleStateBreak.bind(this), "HBY100J");
bleTool.addStateRecoveryCallback(this.bleStateRecovry.bind(this), "HBY100J");
@ -652,6 +651,8 @@
},
onShow() {
this.Status.pageHide = false;
// 从系统蓝牙开关/后台返回时,与 BleHelper.LinkedList 对齐,避免「蓝牙状态空白/不刷新」
this.$nextTick(() => this.sync100JBleUiFromHelper());
},
computed: {
getbleStatu() {
@ -672,6 +673,32 @@
},
methods: {
/** 与 BleHelper 实际连接状态对齐(系统关蓝牙再开、从后台回前台等) */
sync100JBleUiFromHelper() {
const mac = (this.device && this.device.deviceMac) || (this.deviceInfo && this.deviceInfo.deviceMac);
if (!mac || !this.deviceInfo.deviceId) return;
const macNorm = (m) => (m || '').replace(/:/g, '').toUpperCase();
const targetMacNorm = macNorm(mac);
const last6 = targetMacNorm.slice(-6);
const item = bleTool.data.LinkedList.find((v) => {
const m = macNorm(v.macAddress || '');
return m === targetMacNorm || (m.length >= 6 && m.slice(-6) === last6);
});
if (!bleTool.data.available) {
this.formData.bleStatu = false;
updateBleStatus(false, '', this.deviceInfo.deviceId);
return;
}
if (item && item.Linked) {
this.formData.bleStatu = true;
updateBleStatus(true, item.deviceId, this.deviceInfo.deviceId);
return;
}
if (this.formData.bleStatu === true || this.formData.bleStatu === 'connecting') {
this.formData.bleStatu = false;
updateBleStatus(false, '', this.deviceInfo.deviceId);
}
},
bleStatuToggle() {
let f = bleTool.data.LinkedList.find((v) => {
return v.macAddress == this.device.deviceMac;
@ -691,10 +718,11 @@
if (this.formData.bleStatu === false || this.formData.bleStatu === 'err') {
this.formData.bleStatu = 'connecting';
bleTool.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => {
these.formData.bleStatu = true;
}).catch(ex => {
these.formData.bleStatu = 'err';
bleTool.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(() => {
this.formData.bleStatu = true;
this.bleStateRecovry({ deviceId: f.deviceId });
}).catch(() => {
this.formData.bleStatu = 'err';
});
return;
}
@ -1162,7 +1190,22 @@
}
});
},
bleStateBreak() {
_match100JBleItemByRes(res) {
if (!res || !res.deviceId) return true;
const mac = (this.device && this.device.deviceMac) || (this.deviceInfo && this.deviceInfo.deviceMac);
if (!mac) return true;
const macNorm = (m) => (m || '').replace(/:/g, '').toUpperCase();
const target = macNorm(mac);
const last6 = target.slice(-6);
const item = bleTool.data.LinkedList.find((v) => {
const m = macNorm(v.macAddress || '');
return v.deviceId === res.deviceId && (m === target || (m.length >= 6 && m.slice(-6) === last6));
});
return !!item;
},
bleStateBreak(res) {
// 仅处理本页 100J 的断开,避免其它型号设备断连误改本页状态
if (res && res.deviceId && !this._match100JBleItemByRes(res)) return;
this.formData.bleStatu = false;
updateBleStatus(false, '', this.deviceInfo.deviceId);
},
@ -1176,6 +1219,7 @@
}
return;
}
if (!this._match100JBleItemByRes(res)) return;
let bleDeviceId = res.deviceId;
updateBleStatus(true, bleDeviceId, this.deviceInfo.deviceId);
// 蓝牙连接成功后主动拉取电源状态、定位(优先蓝牙设备也会每1分钟主动上报)