1
0
forked from dyf/APP
Files
APP/pages/common/addBLE/LinkBle.vue
2025-08-13 14:39:29 +08:00

227 lines
4.4 KiB
Vue

<template>
<view class="content">
<view class="deviceDetail">
<view class="imgContent">
<image src="/static/images/BLEAdd/addBleDevice.png" class="titleIco" mode="aspectFit">
</image>
</view>
<view class="deviceName">
设备名:{{device.deviceName}}
</view>
<view class="deviceId">
ID:{{device.deviceId}}
</view>
<view class="bound" v-bind:class="boundStatu">
{{Statu.boundRemark}}
</view>
</view>
<view class="btnLink" @click="Link()">
连接
</view>
</view>
</template>
<script>
import request from '@/utils/request.js';
import bleTool from '@/utils/BleHelper.js'
var these = null;
var eventChannel = null;
var ble=null;
export default {
data() {
return {
Statu: {
bound: null
},
device: {
"deviceId": "",
"name": "",
"deviceName": "",
"RSSI": -37,
"localName": "",
"advertisServiceUUIDs": [
],
"linkStatu": false,
"macAddress": ""
}
}
},
computed: {
boundStatu: function() {
if (this.Statu.bound === null) {
return "displayNone"
}
if (this.Statu.bound) {
return "green"
} else {
return "red";
}
}
},
onLoad(option) {
these = this;
ble=bleTool.getBleTool();
eventChannel = this.getOpenerEventChannel();
eventChannel.on('LinkItem', function(data) {
let f=ble.data.LinkedList.find((v)=>{
return v.deviceId=data.deviceId;
});
if(f){
these.device = f;
console.log("获取到设备",f);
these.initDevice();
}else{
console.log("未获取到设备");
}
})
},
methods: {
initDevice: function() {
request({
url: 'app/device/getDeviceInfoByDeviceMac',
method: 'GET',
data: {
deviceMac: these.device.macAddress
}
}).then(res=>{
console.log("获取设备信息",res);
}).catch((ex)=>{
console.log("获取设备出现异常:",ex);
});
},
Link() {
// 调用绑定设备接口
let f=ble.data.LinkedList.find((v)=>{
return v.deviceId=these.device.deviceId;
});
if(!f){
these.Statu.bound = false;
these.Statu.boundRemark = "蓝牙连接不成功";
return;
}
if(!f.macAddress){
these.Statu.bound = false;
these.Statu.boundRemark = "获取设备Mac地址异常";
return;
}
these.Statu.bound = null;
these.Statu.boundRemark = "";
uni.showLoading({
mask: true,
title: "连接中..."
})
let promise = request({
url: '/app/device/bind',
method: 'POST',
data: {
deviceImei: '',
deviceMac: these.device.macAddress,
communicationMode: '1', //0是4g,1是蓝牙
}
});
promise.then((res) => {
console.log("1111" + JSON.stringify(res));
if (res.code == 200) {
these.Statu.bound = true;
these.Statu.boundRemark = "设备绑定成功!";
uni.$emit("refreshDeviceList");
setTimeout(()=>{
uni.switchTab({
url:"/pages/common/index/index"
});
},500);
} else {
these.Statu.bound = false;
these.Statu.boundRemark = res.msg;
}
}).catch((ex) => {
these.Statu.bound = false;
these.Statu.boundRemark = '出现了未知的异常,操作失败';
}).finally(() => {
uni.hideLoading();
});
}
}
}
</script>
<style>
.content {
background-color: #1d1d1d;
color: #ffffffde;
box-sizing: border-box;
overflow: hidden;
width: 100%;
min-height: 100vh;
height: auto;
font-family: "PingFang SC";
}
.deviceDetail {
margin: 200rpx auto;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
}
.imgContent,
.titleIco {
width: 120rpx;
height: 120rpx;
}
.deviceId {
color: rgba(255, 255, 255, 0.87);
font-size: 32rpx;
line-height: 44rpx;
letter-spacing: 0.14rpx;
margin-top: 5rpx;
}
.btnLink {
position: fixed;
bottom: 30rpx;
left: 30rpx;
right: 30rpx;
width: calc(100% - 60rpx);
border-radius: 91px;
height: 90rpx;
background: rgba(187, 230, 0, 1);
color: rgba(35, 35, 35, 1);
font-size: 32rpx;
line-height: 90rpx;
letter-spacing: 12rpx;
text-align: center;
}
.bound,
.deviceName {
font-size: 32rpx;
font-weight: 400;
line-height: 44rpx;
letter-spacing: 0.14rpx;
margin-top: 5rpx;
}
.displayNone {
display: none !important;
}
.green {
color: rgba(187, 230, 0, 1);
}
.red {
color: rgba(245, 80, 80, 1);
}
</style>