1
0
forked from dyf/APP

合并代码

This commit is contained in:
liub
2026-03-19 14:37:58 +08:00
parent ac59e28281
commit 84feb9f1e8
7 changed files with 150 additions and 162 deletions

View File

@ -53,7 +53,9 @@
Statu: {
bound: null,
timeInteval: null,
isSearch: false
isSearch: false,
pageHide:false,
isBind:false
},
device: {
"deviceId": "",
@ -115,17 +117,32 @@
return "";
}
},
onShow() {
this.Statu.pageHide=false;
},
onHide() {
this.Statu.pageHide=true;
},
onUnload() {
console.log("返回取消订阅");
clearInterval(inteval);
ble.removeAllCallback(pagePath);
if(!this.Statu.isBind && these.device.deviceId){
ble.disconnectDevice(these.device.deviceId).catch(ex=>{
console.error("无法断开蓝牙连接");
});
}
},
onLoad(option) {
these = this;
ble = bleTool.getBleTool();
ble.addStateBreakCallback(res => {
if(this.Statu.pageHide){
return;
}
these.device.linkStatu = false;
hideLoading(these);
uni.showToast({
@ -135,6 +152,9 @@
},pagePath);
ble.addStateRecoveryCallback(res => {
if(this.Statu.pageHide){
return;
}
if (these.device.deviceId) {
showLoading(these, {
text: '蓝牙已恢复正在连接设备'
@ -144,6 +164,9 @@
}
},pagePath);
ble.addDisposeCallback(res => {
if(this.Statu.pageHide){
return;
}
console.log("处理蓝牙断开连接");
these.device.linkStatu = false;
if (these.device.deviceId == res.deviceId) {
@ -156,6 +179,9 @@
},pagePath);
ble.addReceiveCallback((receive, f, path) => {
if(this.Statu.pageHide){
return;
}
console.log("收到设备消息,", receive);
if (these.device.deviceId == receive.deviceId) {
console.log("11111:", receive);
@ -372,6 +398,7 @@
clearTimeout(this.Statu.timeInteval);
this.device.macAddress = null;
this.Statu.timeInteval = null;
this.Statu.isBind=true;
uni.$emit("refreshDeviceList");
setTimeout(() => {
uni.switchTab({

View File

@ -23,6 +23,7 @@
<view class="p100">
<view class="lblTitle">配对设备</view>
<view class="list" style="margin-bottom: 30rpx;">
<view class="item " v-for="item, index in PairEquip" v-show="PairEquip.length>0">
@ -33,9 +34,7 @@
</view>
<view class="centertxt ">
<view class="name" v-text="item.name"></view>
<view class="id">
<text>信号:{{item.RSSI}}dBm</text>
</view>
</view>
<view class="rightIco center">
<image src="/static/images/BLEAdd/linked.png" class="img" mode="aspectFit">
@ -134,6 +133,7 @@
data() {
return {
Status: {
navigateTO: false,
isPageHidden: false,
intval: null,
time: null,
@ -164,12 +164,14 @@
},
search: '', //筛选
PairEquip: [], //已配对设备
PairEquip: [], //本次已配对设备
EquipMents: [], //搜索出来的设备
device: null,
item: {
deviceId: ''
}
},
}
},
computed: {
@ -189,9 +191,20 @@
if (ble) {
ble.StopSearch();
ble.removeAllCallback(pagePath);
if (!this.device && !this.Status.navigateTO) {
if (this.PairEquip && this.PairEquip.length && this.PairEquip.length > 0) {
console.error("页面卸载时,断开所有连接")
let f = this.PairEquip.forEach((v) => {
ble.disconnectDevice(v.deviceId).catch(ex => {
console.error("无法断开设备连接", ex);
});
});
}
}
}
},
onLoad(option) {
debugger;
eventChannel = this.getOpenerEventChannel();
eventChannel.on('detailData', function(rec) {
@ -211,8 +224,8 @@
const systemInfo = uni.getSystemInfoSync();
ble = bleTool.getBleTool(); // Ensure ble is initialized
// Ensure ble is initialized
if (systemInfo.uniPlatform == 'web') {
@ -236,86 +249,19 @@
"name": "EF4651",
"linkStatu": false,
"isTarget": true
},
{
"RSSI": -69,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "4F0DAC91-4391-CB07-905E-72D7F03EFCD3",
"name": "4877-BF743D",
"linkStatu": false
},
{
"RSSI": -55,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "EBDA4E6F-3A28-FF65-A845-AE8CC7B78375",
"name": "HBY670-BF74EA",
"linkStatu": false
},
{
"RSSI": -61,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "469FB381-B47E-1E40-8073-EF50B5704AAB",
"name": "EF4651",
"linkStatu": false,
"isTarget": true
},
{
"RSSI": -69,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "4F0DAC91-4391-CB07-905E-72D7F03EFCD3",
"name": "4877-BF743D",
"linkStatu": false
}, {
"RSSI": -55,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "EBDA4E6F-3A28-FF65-A845-AE8CC7B78375",
"name": "HBY670-BF74EA",
"linkStatu": false
},
{
"RSSI": -61,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "469FB381-B47E-1E40-8073-EF50B5704AAB",
"name": "EF4651",
"linkStatu": false,
"isTarget": true
},
{
"RSSI": -69,
"advertisData": "",
"advertisServiceUUIDs": [
"0000FFE0-0000-1000-8000-00805F9B34FB"
],
"deviceId": "4F0DAC91-4391-CB07-905E-72D7F03EFCD3",
"name": "4877-BF743D",
"linkStatu": false
}
];
these.PairEquip = [this.EquipMents[0]];
this.$forceUpdate();
console.error("1111111111")
this.PairEquip=[this.EquipMents[0]];
return;
}
ble = bleTool.getBleTool();
this.refreshLinked();
let StartSubsrib = () => {
these.EquipMents = [];
if (!ble) {
ble = bleTool.getBleTool();
@ -327,6 +273,7 @@
}
console.log("处理蓝牙不可用");
hideLoading(these);
console.error("1111111111")
these.PairEquip = [];
these.EquipMents = [];
uni.showToast({
@ -336,13 +283,14 @@
these.showOpenSetting();
}, pagePath);
//蓝牙恢复可用的回调
ble.addStateRecoveryCallback(res=>{
ble.addStateRecoveryCallback(res => {
if (these.Status.isPageHidden) {
return;
}
these.Status.BottomMenu.show = false;
console.error("1111111111")
these.PairEquip = [];
these.EquipMents = [];
uni.showToast({
@ -350,7 +298,7 @@
title: '蓝牙恢复可用'
});
these.refreshBleList();
}),pagePath;
}), pagePath;
//蓝牙断开连接的回调
ble.addDisposeCallback(res => {
@ -360,10 +308,7 @@
// console.log("处理蓝牙断开连接");
these.PairEquip.find(function(v, ind) {
these.PairEquip.splice(ind, 1);
return v.deviceId == res.deviceId;
});
these.refreshLinked();
setTimeout(() => {
hideLoading(these);
@ -422,39 +367,37 @@
these.EquipMents.sort((a, b) => b.RSSI - a.RSSI); //信号好的排前面,一般信号好的是目标设备
}
}, pagePath);
//蓝牙连接已恢复的回调
ble.addRecoveryCallback(res => {
if (these.Status.isPageHidden) {
return;
}
these.refreshLinked();
// hideLoading(these);
if (these.device) {
clearInterval(this.Status.intval);
showLoading(these, {
text: '蓝牙连接已恢复,正在验证设备'
});
setTimeout(() => {
these.DeviceVerdict(res.deviceId);
}, 0);
} else {
hideLoading(these);
}
}, pagePath);
}
let startValidDevice = () => {
if (these.device) {
console.log("进入配对模式,启用连接恢复和验证逻辑。");
//蓝牙连接已恢复的回调
ble.addRecoveryCallback(res => {
if (these.Status.isPageHidden) {
return;
}
// hideLoading(these);
these.EquipMents.find(function(v, ind) {
if (v.deviceId == res.deviceId) {
these.PairEquip.push(v);
return true;
}
return false;
});
if (these.device) {
clearInterval(this.Status.intval);
showLoading(these, {
text: '蓝牙连接已恢复,正在验证设备'
});
setTimeout(() => {
these.DeviceVerdict(res.deviceId);
}, 0);
} else {
hideLoading(these);
}
}, pagePath);
//收到设备的消息回调
ble.addReceiveCallback((receivData, f, path, arr) => {
@ -488,15 +431,33 @@
StartSubsrib();
},
onShow: function() {
debugger;
this.Status.isPageHidden = false;
this.Status.navigateTO = false;
this.refreshBleList();
this.refreshLinked();
},
methods: {
refreshLinked(){
if(ble){
let arr=[];
arr=ble.data.LinkedList.filter(v=>{
return v.Linked;
});
this.PairEquip=arr;
}
},
checkAndRequestLocationPermission() {
return new Promise((resolve) => {
@ -515,16 +476,21 @@
resolve(true);
} else {
// console.warn('定位权限被拒绝');
MsgClear(these);
showPop({headerTxt:'权限提醒',message:'扫描蓝牙设备,需要您开启定位权限',buttonText:'去开启',okCallback:uni.openSetting},these,true);
showPop({
headerTxt: '权限提醒',
message: '扫描蓝牙设备,需要您开启定位权限',
buttonText: '去开启',
okCallback: uni.openSetting
}, these, true);
resolve(false);
}
},
(error) => {
MsgError('请求定位权限失败:'+error.code,'确定',these);
MsgError('请求定位权限失败:' + error.code, '确定', these);
resolve(false);
}
);
@ -565,19 +531,20 @@
time = setTimeout(() => {
these.EquipMents = [];
console.error("1111111111")
these.PairEquip = [];
ble.StartSearch().then(result => {
console.log("开始搜索成功", result);
// console.log("开始搜索成功", result);
}).catch(err => {
console.error("开始搜索失败:", err);
if (err.code === 10001) {
these.showOpenSetting();
} else {
MsgClear(these);
MsgError('出现错误:' + err.msg,'确定',these);
MsgError('出现错误:' + err.msg, '确定', these);
}
}).finally(() => {
@ -587,8 +554,8 @@
}
ble.StopSearch().catch(err=>{
console.error("err=",err);
ble.StopSearch().catch(err => {
console.error("err=", err);
}).finally(startSearch);
@ -741,10 +708,10 @@
return;
}
updateLoading(these, {
text: "等待设备上报Mac地址," + these.Status.time + 's'
});
hideLoading(these);
}, 1000);
return undefined;
}
}
@ -760,14 +727,7 @@
let index = 1;
let total = 5;
let linkCallback = (res) => {
let c = these.PairEquip.find(function(v) {
return v.deviceId == item.deviceId;
});
if (!c) {
these.PairEquip.push(item);
}
let linkCallback = (res) => {
console.log("连接成功", these.device);
if (!these.device) {
console.log("跳转到绑定")
@ -778,7 +738,7 @@
},
success(res) {
these.Status.navigateTO = true;
res.eventChannel.emit('LinkItem', item);
}
});
@ -825,8 +785,8 @@
}).catch(ex => {
console.error("ex=", ex)
MsgClear(these);
MsgError("连接失败:" + ex.msg,'确定',these);
MsgError("连接失败:" + ex.msg, '确定', these);
hideLoading(these);
});

View File

@ -304,14 +304,14 @@
},
bleBreak(res) {
console.error("蓝牙断开连接", res);
// console.error("蓝牙断开连接", res);
if (res.deviceId) {
this.updateBleStatu(res.deviceId);
}
},
bleRecovery(res) {
console.log("蓝牙连接成功", res);
// console.log("蓝牙连接成功", res);
if (res.deviceId) {
this.updateBleStatu(res.deviceId);
}