2025-12-26 16:53:58 +08:00
|
|
|
|
<template>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
<view class="page">
|
|
|
|
|
|
<u-navbar title="设备录入" :border-bottom="false" :background="bgc" title-color='#000' back-icon-color="#000" title-size='38' :custom-back="btns"
|
|
|
|
|
|
height='50'></u-navbar>
|
|
|
|
|
|
<view class="iptbox" @click="backpage()">
|
|
|
|
|
|
<input type="text" class="ips" v-model="mac" placeholder=" " style="margin-left: 32rpx;"
|
|
|
|
|
|
placeholder-class="my-placeholder" />
|
|
|
|
|
|
<view class="mini-btn" @click.stop="Binddevice()">蓝牙连接</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="iptbox">
|
|
|
|
|
|
<view class="qrcode" @click="qrcode()">
|
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode=""></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<input type="text" class="ips" v-model="storeId" placeholder="请扫描设备上的二维码" style="margin-left: 32rpx;"
|
|
|
|
|
|
placeholder-class="my-placeholder" />
|
|
|
|
|
|
<view class="mini-btn" @click="btnwl">网络控制</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="lanyasj">
|
|
|
|
|
|
<view class="item">
|
|
|
|
|
|
<view class="label-box">
|
|
|
|
|
|
<u-icon name="info-circle" size="28" color="#52c41a"></u-icon>
|
|
|
|
|
|
<text class="label">版本号</text>
|
2025-12-26 16:53:58 +08:00
|
|
|
|
</view>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
<view>
|
|
|
|
|
|
<text v-if="ver_data.ver" class="value">{{'V' + ver_data.ver}}</text>
|
|
|
|
|
|
<text v-else class="value">--</text>
|
|
|
|
|
|
<view class="apn-btn" @click.stop="fengm()" v-if="carstause">固件升级</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="bot_btn">
|
|
|
|
|
|
<view class="btn1" @click="bind()">
|
|
|
|
|
|
录入
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<u-mask :show="showbind" :z-index='100' />
|
|
|
|
|
|
<view class="tip_box" v-if="showbind">
|
|
|
|
|
|
<view class="top" v-if="showbind">
|
|
|
|
|
|
<view class="tip">
|
|
|
|
|
|
操作提示
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="ipt_box" style="justify-content: center;">
|
|
|
|
|
|
<view class="text" style="width: 80%;text-align: center;">
|
|
|
|
|
|
该mac号已有绑定sn码是否修改为当前sn码
|
2025-12-26 16:53:58 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="bots">
|
|
|
|
|
|
<view class="bot_left" @click="showbind=false ">
|
|
|
|
|
|
取消
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="bot_right" @click="changeBind()">
|
|
|
|
|
|
确定
|
2025-12-26 16:53:58 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<u-mask :show="showApnModal" :z-index='100' />
|
|
|
|
|
|
<view class="tip_box" v-if="showApnModal">
|
|
|
|
|
|
<view class="top">
|
|
|
|
|
|
<view class="tip">修改APN</view>
|
|
|
|
|
|
<view class="ipt_box" style="justify-content: center;">
|
|
|
|
|
|
<input class="input" v-model="apnValue" placeholder="请输入APN" style="border: 1px solid #ccc; padding: 10rpx; width: 80%; text-align: center; border-radius: 10rpx; height: 60rpx;" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="bots">
|
|
|
|
|
|
<view class="bot_left" @click="showApnModal=false">取消</view>
|
|
|
|
|
|
<view class="bot_right" @click="confirmApn">确定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<view class="float-container">
|
|
|
|
|
|
<view class="float-btn" @click="qrcode()">
|
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode="aspectFit"></image>
|
|
|
|
|
|
<!-- <text>扫码</text> -->
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 进度条 -->
|
|
|
|
|
|
<view class="container" v-if="shengjiflag">
|
|
|
|
|
|
<image src="https://api.ccttiot.com/smartmeter/img/static/uquIy7wJmrNhjvy2maJf" mode=""></image>
|
|
|
|
|
|
<!-- 进度条背景 -->
|
|
|
|
|
|
<view class="progress-bar">
|
|
|
|
|
|
<!-- 进度条填充部分 -->
|
|
|
|
|
|
<view class="progress-fill" :style="{ width: progress + '%' }"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<!-- 显示进度百分比 -->
|
|
|
|
|
|
<view class="progress-text">{{ progress }}%</view>
|
|
|
|
|
|
<view class="wz">
|
|
|
|
|
|
固件升级中请保持蓝牙连接
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="wz">
|
|
|
|
|
|
切记在蓝牙范围内,以防升级失败
|
2025-12-26 16:53:58 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
<!-- <view class="bot">
|
|
|
|
|
|
<view class="btn">
|
|
|
|
|
|
退款
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view> -->
|
2025-12-26 16:53:58 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
2026-01-17 17:37:00 +08:00
|
|
|
|
const app = getApp();
|
|
|
|
|
|
var xBlufi = require("@/components/blufi/xBlufi.js");
|
|
|
|
|
|
let _this = null;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
2026-01-17 17:37:00 +08:00
|
|
|
|
devicesList: [
|
|
|
|
|
|
// {name:'110000',
|
|
|
|
|
|
// mac:'11111'}
|
|
|
|
|
|
],
|
|
|
|
|
|
searching: false,
|
|
|
|
|
|
texts: '正在扫描蓝牙设备...',
|
|
|
|
|
|
btnflag: true,
|
|
|
|
|
|
tishiflag: false,
|
|
|
|
|
|
option: '',
|
|
|
|
|
|
bluthlist: [], //蓝牙数组
|
|
|
|
|
|
// status: 'loading',
|
|
|
|
|
|
statusflag: false,
|
|
|
|
|
|
Bluetoothmac: '',
|
|
|
|
|
|
mac: '',
|
|
|
|
|
|
ishave: false,
|
|
|
|
|
|
ver_data: {},
|
|
|
|
|
|
deviceInfoss: {},
|
|
|
|
|
|
gps: {},
|
|
|
|
|
|
isband: false,
|
|
|
|
|
|
// status: false,
|
|
|
|
|
|
deviceIds: '',
|
|
|
|
|
|
name: '',
|
|
|
|
|
|
orderinfo: {},
|
|
|
|
|
|
dl: 0,
|
|
|
|
|
|
czmoney: true,
|
|
|
|
|
|
iscz: true,
|
|
|
|
|
|
banben: '请点击选择版本',
|
|
|
|
|
|
modelId: '',
|
2025-12-26 16:53:58 +08:00
|
|
|
|
bgc: {
|
2026-01-17 17:37:00 +08:00
|
|
|
|
backgroundColor: "#FAFDFD",
|
2025-12-26 16:53:58 +08:00
|
|
|
|
},
|
|
|
|
|
|
sn: '',
|
2026-01-17 17:37:00 +08:00
|
|
|
|
carstause: false,
|
|
|
|
|
|
isbands: false,
|
|
|
|
|
|
show: false,
|
|
|
|
|
|
list: [],
|
|
|
|
|
|
hardwareInfo: {},
|
|
|
|
|
|
showbind: false,
|
|
|
|
|
|
storeId:'',
|
|
|
|
|
|
deviceId:'',
|
|
|
|
|
|
file:'https://lxnapi.ccttiot.com/FlAnyIGlQIy6Ln-l5HWmiSiINwj7' ,//固件升级地址
|
|
|
|
|
|
intervalId: null,
|
|
|
|
|
|
version:'',
|
|
|
|
|
|
progress:0,
|
|
|
|
|
|
shengjiflag:false,
|
|
|
|
|
|
valuedian:1000,
|
|
|
|
|
|
xshu:'1',
|
|
|
|
|
|
x:'',
|
|
|
|
|
|
sn:'',
|
|
|
|
|
|
zhendong:'',
|
|
|
|
|
|
zdlyyc:true,
|
|
|
|
|
|
showApnModal: false,
|
|
|
|
|
|
apnValue: ''
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
2026-01-17 17:37:00 +08:00
|
|
|
|
onLoad(e) {
|
|
|
|
|
|
xBlufi.initXBlufi(1)
|
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': true
|
|
|
|
|
|
})
|
|
|
|
|
|
console.log(e)
|
|
|
|
|
|
this.mac = e.mac
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
this.isbands = false
|
|
|
|
|
|
this.carstause = false
|
|
|
|
|
|
if(uni.getStorageSync('banben') || uni.getStorageSync('banbenid')){
|
|
|
|
|
|
this.banben = uni.getStorageSync('banben')
|
|
|
|
|
|
this.modelId = uni.getStorageSync('banbenid')
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
if(e.sn){
|
|
|
|
|
|
this.storeId = e.sn
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
// this.getlist()
|
|
|
|
|
|
// this.getbanben()
|
|
|
|
|
|
uni.setKeepScreenOn({
|
|
|
|
|
|
keepScreenOn: true
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onUnload: function() {
|
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
|
|
|
|
|
|
wx.closeBLEConnection({
|
|
|
|
|
|
deviceId: this.deviceId,
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.setKeepScreenOn({
|
|
|
|
|
|
keepScreenOn: false
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onHide() {
|
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': false
|
|
|
|
|
|
});
|
|
|
|
|
|
uni.setKeepScreenOn({
|
|
|
|
|
|
keepScreenOn: false
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onBeforeUnmount() {
|
|
|
|
|
|
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': false
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
watch: {
|
|
|
|
|
|
|
2025-12-26 16:53:58 +08:00
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2026-01-17 17:37:00 +08:00
|
|
|
|
// 点击进行重启
|
|
|
|
|
|
btncq(){
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: '11reboot@'
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取版本号和文件
|
|
|
|
|
|
getbanben(){
|
|
|
|
|
|
this.$u.get(`/app/softVersion/latest`).then(res =>{
|
|
|
|
|
|
if(res.code == 200){
|
|
|
|
|
|
this.version = res.data.version
|
|
|
|
|
|
this.file = res.data.fileUrl
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 增加震动值
|
|
|
|
|
|
btnzdadd(){
|
|
|
|
|
|
if(this.zhendong == 10){
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '最高值为10',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 3000
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
this.zhendong = this.zhendong + 1
|
|
|
|
|
|
},
|
|
|
|
|
|
//减少震动值
|
|
|
|
|
|
btnzdjian(){
|
|
|
|
|
|
if(this.zhendong == 0){
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '最低值为0',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 3000
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
this.zhendong = this.zhendong - 1
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击确定震动
|
|
|
|
|
|
btnqdzd(){
|
|
|
|
|
|
this.$u.get(`/farm/beehive/iot/levelToZdxs?level=${this.zhendong}`).then(res => {
|
2025-12-26 16:53:58 +08:00
|
|
|
|
if (res.code == 200) {
|
2026-01-17 17:37:00 +08:00
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: `11zdxs${res.data}@`
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '设置成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 3000
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 3000
|
|
|
|
|
|
})
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
btnwl(){
|
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
|
url:'/page_newyemian/wgkongzhi?sn=' + this.storeId
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 开风扇
|
|
|
|
|
|
btnfsk(){
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11fan100@"
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '开启风扇命令成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration:2000
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
},
|
|
|
|
|
|
// 关风扇
|
|
|
|
|
|
btnfsg(){
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11fan0@"
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '关闭风扇命令成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration:2000
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击重置系数
|
|
|
|
|
|
btnczxs(){
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11zlxs1@"
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '重置系数命令成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration:2000
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击校准电量
|
|
|
|
|
|
btnjiaozhun(){
|
|
|
|
|
|
this.x = this.valuedian / this.ver_data.weight * this.ver_data.xs
|
|
|
|
|
|
console.log(this.x,this.valuedian,this.ver_data.weight,this.ver_data.xs);
|
|
|
|
|
|
this.x = this.x.toFixed(3)
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11zlxs" + this.x + '@'
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '发送校准命令成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration:2000
|
|
|
|
|
|
})
|
|
|
|
|
|
},1000)
|
|
|
|
|
|
// this.$u.put(`app/beehive/admin/zlxs?sn=${this.sn}&zlxs=${this.x}`).then(res => {
|
|
|
|
|
|
// if(res.code == 200){
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
|
// title: '校准成功',
|
|
|
|
|
|
// icon: 'success',
|
|
|
|
|
|
// duration:2000
|
|
|
|
|
|
// })
|
|
|
|
|
|
// setTimeout(()=>{
|
|
|
|
|
|
// this.ver_data = {}
|
|
|
|
|
|
// this.Binddevice()
|
|
|
|
|
|
// },1000)
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
|
// title: res.msg,
|
|
|
|
|
|
// icon: 'none'
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
// })
|
|
|
|
|
|
},
|
|
|
|
|
|
btnadd(){
|
|
|
|
|
|
this.valuedian = this.valuedian + 50
|
|
|
|
|
|
},
|
|
|
|
|
|
btnjian(){
|
|
|
|
|
|
this.valuedian = this.valuedian - 50
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击进行固件升级
|
|
|
|
|
|
fengm(){
|
|
|
|
|
|
var data = {
|
|
|
|
|
|
sum: 100,
|
|
|
|
|
|
http: this.file
|
|
|
|
|
|
}
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: data
|
|
|
|
|
|
})
|
|
|
|
|
|
this.shengjiflag = true
|
|
|
|
|
|
this.startProgress()
|
|
|
|
|
|
},
|
|
|
|
|
|
// 固件升级进度
|
|
|
|
|
|
startProgress() {
|
|
|
|
|
|
this.intervalId = setInterval(() => {
|
|
|
|
|
|
if (this.progress < 100) {
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
clearInterval(this.intervalId); // 进度达到 100% 时清除定时器
|
|
|
|
|
|
console.log("加载完成");
|
|
|
|
|
|
}
|
|
|
|
|
|
}, 30); // 每 30 毫秒更新一次进度
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
ring() {
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11clear_weight@"
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
|
|
|
|
|
},
|
|
|
|
|
|
btns(){
|
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
|
url:'/page_newyemian/wgluru'
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
confirm(e) {
|
|
|
|
|
|
// console.log(e);
|
|
|
|
|
|
this.banben = e[0].label
|
|
|
|
|
|
this.modelId = e[0].value
|
|
|
|
|
|
uni.setStorageSync('banben', this.banben)
|
|
|
|
|
|
uni.setStorageSync('banbenid', this.modelId)
|
|
|
|
|
|
},
|
|
|
|
|
|
getlist() {
|
|
|
|
|
|
this.$u.get('/app/model/admin/all').then((res) => {
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
|
this.Versionlist = res.data
|
|
|
|
|
|
const hardwareVersionId = uni.getStorageSync('hardwareVersionId');
|
|
|
|
|
|
|
|
|
|
|
|
if (hardwareVersionId) {
|
|
|
|
|
|
this.hardwareVersionId = hardwareVersionId
|
|
|
|
|
|
const matchedVersion = this.Versionlist.find(version => version.id ===
|
|
|
|
|
|
hardwareVersionId);
|
|
|
|
|
|
if (matchedVersion) {
|
|
|
|
|
|
this.hardwareInfo = matchedVersion;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
this.list = res.data.map(item => ({
|
|
|
|
|
|
value: item.modelId,
|
|
|
|
|
|
label: item.name
|
|
|
|
|
|
}));
|
|
|
|
|
|
} else {
|
2025-12-26 16:53:58 +08:00
|
|
|
|
uni.showToast({
|
2026-01-17 17:37:00 +08:00
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
2025-12-26 16:53:58 +08:00
|
|
|
|
});
|
2026-01-17 17:37:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
send() {
|
|
|
|
|
|
this.$u.post('/app/device/ring?sn=' + this.sn).then((res) => {
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
2025-12-26 16:53:58 +08:00
|
|
|
|
uni.showToast({
|
2026-01-17 17:37:00 +08:00
|
|
|
|
title: res.msg,
|
2025-12-26 16:53:58 +08:00
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
})
|
2025-12-26 16:53:58 +08:00
|
|
|
|
},
|
2026-01-17 17:37:00 +08:00
|
|
|
|
changeBind() {
|
|
|
|
|
|
this.$u.post(`/appVerify/updateSn?sn=` + this.sn + '&mac=' + this.mac + '&hardwareVersionId=' + this
|
|
|
|
|
|
.hardwareVersionId).then((res) => {
|
|
|
|
|
|
if (res.code === 200) {
|
2025-12-26 16:53:58 +08:00
|
|
|
|
uni.showToast({
|
2026-01-17 17:37:00 +08:00
|
|
|
|
title: '绑定成功',
|
|
|
|
|
|
icon: 'none',
|
2025-12-26 16:53:58 +08:00
|
|
|
|
duration: 2000
|
|
|
|
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.navigateBack({
|
2026-01-17 17:37:00 +08:00
|
|
|
|
delta: 1 // delta值为1时表示返回的页面层数
|
2025-12-26 16:53:58 +08:00
|
|
|
|
});
|
2026-01-17 17:37:00 +08:00
|
|
|
|
}, 2000)
|
2025-12-26 16:53:58 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
2026-01-17 17:37:00 +08:00
|
|
|
|
title: res.msg,
|
2025-12-26 16:53:58 +08:00
|
|
|
|
icon: 'none',
|
2026-01-17 17:37:00 +08:00
|
|
|
|
duration: 2000
|
2025-12-26 16:53:58 +08:00
|
|
|
|
});
|
|
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
bind() {
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
sn: this.storeId,
|
|
|
|
|
|
mac: this.mac,
|
|
|
|
|
|
pre:'CTWG:'
|
|
|
|
|
|
}
|
|
|
|
|
|
this.$u.post('/device/device/addDevice', data).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '录入成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
|
|
|
|
|
wx.closeBLEConnection({
|
|
|
|
|
|
deviceId: this.deviceId,
|
|
|
|
|
|
})
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
|
url:'/page_newyemian/wgkongzhi?sn=' + this.storeId
|
|
|
|
|
|
})
|
|
|
|
|
|
},1500)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
qrcode() {
|
|
|
|
|
|
uni.scanCode({
|
|
|
|
|
|
onlyFromCamera: true,
|
|
|
|
|
|
scanType: ['qrCode'],
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
function getQueryParam(url, paramName) {
|
|
|
|
|
|
let regex = new RegExp(`[?&]${paramName}=([^&]*)`)
|
|
|
|
|
|
let results = regex.exec(url);
|
|
|
|
|
|
return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(res,'000');
|
|
|
|
|
|
let sceneValue = res.result
|
|
|
|
|
|
let decodedValue = decodeURIComponent(sceneValue)
|
|
|
|
|
|
let id = getQueryParam(decodedValue, 's')
|
|
|
|
|
|
this.storeId = id
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: err => {
|
|
|
|
|
|
console.error('扫描失败:', err)
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '扫描失败',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
Binddevice() {
|
|
|
|
|
|
this.zdlyyc = true
|
|
|
|
|
|
this.devicesList = [] // 清空设备列表
|
|
|
|
|
|
uni.showLoading({
|
|
|
|
|
|
title: '连接中..'
|
|
|
|
|
|
})
|
|
|
|
|
|
// 两秒后停止蓝牙搜索
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': false
|
2025-12-26 16:53:58 +08:00
|
|
|
|
});
|
2026-01-17 17:37:00 +08:00
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
if (this.devicesList.length == 0) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '暂无发现对应设备,请重试',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
let uniqueDevicesList = Array.from(new Set(this.devicesList));
|
|
|
|
|
|
|
|
|
|
|
|
// 将去重后的数组重新赋值给 this.devicesList
|
|
|
|
|
|
this.devicesList = uniqueDevicesList;
|
|
|
|
|
|
// console.log(this.devicesList,'this.devicesListthis.devicesList');
|
|
|
|
|
|
this.devicesList.forEach(device => {
|
|
|
|
|
|
// 从设备名称中提取 MAC 地址(假设 MAC 地址是设备名称的后6个字符)
|
|
|
|
|
|
let macFromName = device.name.substring(device.name.length - 12);
|
|
|
|
|
|
console.log(macFromName, 'macFromNamemacFromName');
|
|
|
|
|
|
// 与 this.mac 进行比较
|
|
|
|
|
|
if (macFromName == this.mac) {
|
|
|
|
|
|
// 如果相同,则将 this.ishave 设置为 true
|
|
|
|
|
|
console.log(device);
|
|
|
|
|
|
this.deviceInfoss = device
|
|
|
|
|
|
// this.ishave = true;
|
|
|
|
|
|
this.createBLEConnection(device)
|
|
|
|
|
|
console.log('对比正确1111111111');
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('对比错误');
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}, 200)
|
|
|
|
|
|
// 判断是否存在浇花器设备
|
|
|
|
|
|
|
|
|
|
|
|
// this.status = true
|
|
|
|
|
|
}, 2000)
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
reboot() {
|
|
|
|
|
|
let vm = this; // 将外部的 this 绑定到 vm 上
|
|
|
|
|
|
uni.getNetworkType({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
if (res.networkType !== 'none') {
|
|
|
|
|
|
uni.getConnectedBluetoothDevices({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
console.log('已连接的蓝牙设备信息:', res);
|
|
|
|
|
|
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11reboot"
|
|
|
|
|
|
});
|
|
|
|
|
|
// uni.hideLoading()
|
|
|
|
|
|
// vm.remakr()
|
|
|
|
|
|
},
|
|
|
|
|
|
fail(err) {
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
console.error('获取已连接蓝牙设备信息失败:', err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('手机未连接网络');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
open() {
|
|
|
|
|
|
let vm = this; // 将外部的 this 绑定到 vm 上
|
|
|
|
|
|
uni.getNetworkType({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
if (res.networkType !== 'none') {
|
|
|
|
|
|
uni.getConnectedBluetoothDevices({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
console.log('已连接的蓝牙设备信息:', res);
|
|
|
|
|
|
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "open"
|
|
|
|
|
|
});
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11open"
|
|
|
|
|
|
});
|
|
|
|
|
|
// uni.hideLoading()
|
|
|
|
|
|
// vm.remakr()
|
|
|
|
|
|
},
|
|
|
|
|
|
fail(err) {
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
console.error('获取已连接蓝牙设备信息失败:', err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('手机未连接网络');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
close() {
|
|
|
|
|
|
let vm = this; // 将外部的 this 绑定到 vm 上
|
|
|
|
|
|
uni.getNetworkType({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
if (res.networkType !== 'none') {
|
|
|
|
|
|
uni.getConnectedBluetoothDevices({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
console.log('已连接的蓝牙设备信息:', res);
|
|
|
|
|
|
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "close"
|
|
|
|
|
|
});
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: "11close"
|
|
|
|
|
|
});
|
|
|
|
|
|
// uni.hideLoading()
|
|
|
|
|
|
// vm.remakr()
|
|
|
|
|
|
},
|
|
|
|
|
|
fail(err) {
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
console.error('获取已连接蓝牙设备信息失败:', err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('手机未连接网络');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
});
|
2026-01-17 17:37:00 +08:00
|
|
|
|
},
|
|
|
|
|
|
btnyc() {
|
|
|
|
|
|
this.titleflag = false
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 解析自定义数据
|
|
|
|
|
|
|
|
|
|
|
|
funListenDeviceMsgEvent: function(options) {
|
|
|
|
|
|
switch (options.type) {
|
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED:
|
|
|
|
|
|
if (!options.result) {
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.carstause = false
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
|
|
|
|
|
|
if (options.result) {
|
|
|
|
|
|
let devicesarr = options.data
|
|
|
|
|
|
devicesarr.forEach(device => {
|
|
|
|
|
|
// 只添加以CTWG:开头的设备
|
|
|
|
|
|
const deviceName = device.name || device.localName || ''
|
|
|
|
|
|
// 严格检查:设备名称必须以CTWG:开头
|
|
|
|
|
|
if (deviceName && deviceName.length >= 5 && deviceName.substring(0, 5) === 'CTWG:') {
|
|
|
|
|
|
this.devicesList.push(device);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
// 循环结束后统一去重(基于deviceId去重)
|
|
|
|
|
|
let deviceMap = new Map()
|
|
|
|
|
|
this.devicesList.forEach(device => {
|
|
|
|
|
|
if (device.deviceId && !deviceMap.has(device.deviceId)) {
|
|
|
|
|
|
deviceMap.set(device.deviceId, device)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
this.devicesList = Array.from(deviceMap.values())
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
|
|
|
|
|
|
console.log("连接回调:" + JSON.stringify(options));
|
|
|
|
|
|
if (options.result) {
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
this.carstause = true
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '连接成功',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
}); {
|
|
|
|
|
|
xBlufi.notifyInitBleEsp32({
|
|
|
|
|
|
deviceId: options.data.deviceId
|
|
|
|
|
|
});
|
|
|
|
|
|
this.deviceIds = options.data.deviceId
|
|
|
|
|
|
this.name = options.data.name
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
|
|
|
|
|
|
if (typeof options.data === 'string') {
|
|
|
|
|
|
if (options.data.indexOf("prom:") !== -1) {
|
|
|
|
|
|
console.log("选择固件升级收信息:", options.data, options.data.length);
|
|
|
|
|
|
console.log('固件升级中')
|
|
|
|
|
|
var indexOld = options.data.substring(options.data.indexOf('prom:'))
|
|
|
|
|
|
console.log("indexOld", indexOld);
|
|
|
|
|
|
var load_num = indexOld.substring(
|
|
|
|
|
|
indexOld.indexOf("prom:") + 5,
|
|
|
|
|
|
indexOld.indexOf("@")
|
|
|
|
|
|
)
|
|
|
|
|
|
this.progress = Number(load_num);
|
|
|
|
|
|
console.log("load_num", load_num);
|
|
|
|
|
|
console.log("升级进度:", this.progress)
|
|
|
|
|
|
if (this.progress === 6000) {
|
|
|
|
|
|
console.log('固件成功')
|
|
|
|
|
|
this.progress = 100
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '固件升级成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.shengjiflag = false
|
|
|
|
|
|
},2000)
|
|
|
|
|
|
}
|
|
|
|
|
|
if (this.progress === 9000) {
|
|
|
|
|
|
console.log('固件升级失败')
|
|
|
|
|
|
this.progress = 99
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '固件升级失败',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.shengjiflag = false
|
|
|
|
|
|
},1000)
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.ver_data = this.parseBluetoothData(options.data + ',')
|
|
|
|
|
|
if (options.data) {
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log("1收到设备发来的自定义数据结果:", options.data,this.ver_data);
|
|
|
|
|
|
if(this.zdlyyc == true){
|
|
|
|
|
|
this.zdlyyc = false
|
|
|
|
|
|
this.$u.get(`/farm/beehive/iot/zdxsToLevel?zdxs=${this.ver_data.zd}`).then(res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.zhendong = res.data
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log("不是字符串:", options.data,this.ver_data);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP:
|
|
|
|
|
|
if (options.result) {
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
this.searching = false
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
parseBluetoothData(data) {
|
|
|
|
|
|
const result = {};
|
|
|
|
|
|
const parts = data.split(',');
|
|
|
|
|
|
|
|
|
|
|
|
parts.forEach(part => {
|
|
|
|
|
|
if (part) {
|
|
|
|
|
|
// 使用正则表达式匹配键和值
|
|
|
|
|
|
const match = part.match(/^([a-zA-Z_]+):?([^@]+)/);
|
|
|
|
|
|
if (match) {
|
|
|
|
|
|
const key = match[1]; // 提取键
|
|
|
|
|
|
const value = match[2]; // 提取值
|
|
|
|
|
|
result[key] = value;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 如果没有匹配到键值对,直接将该部分作为键,值为空
|
|
|
|
|
|
result[part] = '';
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
return result;
|
|
|
|
|
|
},
|
|
|
|
|
|
//4、建立连接
|
|
|
|
|
|
createBLEConnection(e) {
|
|
|
|
|
|
console.log('调用了')
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': false
|
|
|
|
|
|
})
|
|
|
|
|
|
console.log(e, '蓝牙信息')
|
|
|
|
|
|
const deviceId = e.deviceId
|
|
|
|
|
|
this.deviceId = e.deviceId
|
|
|
|
|
|
this.Bluetoothmac = e.localName.substring(5) //从第七位开始截取 只取后面的mac号
|
|
|
|
|
|
console.log(this.Bluetoothmac, '11111')
|
|
|
|
|
|
let name = e.name;
|
|
|
|
|
|
console.log('点击了,蓝牙准备连接的deviceId:' + e.deviceId)
|
|
|
|
|
|
xBlufi.notifyConnectBle({
|
|
|
|
|
|
isStart: true,
|
|
|
|
|
|
deviceId: e.deviceId,
|
|
|
|
|
|
name
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击重新搜索
|
|
|
|
|
|
Search() {
|
|
|
|
|
|
if (this.status) {
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': true
|
|
|
|
|
|
});
|
|
|
|
|
|
// 重新搜索清空蓝牙数组
|
|
|
|
|
|
this.bluthlist = []
|
|
|
|
|
|
this.devicesList = []
|
|
|
|
|
|
// 重新搜索
|
|
|
|
|
|
// this.startBluetoothDevicesDiscovery()
|
|
|
|
|
|
this.statusflag = true
|
|
|
|
|
|
this.status = false
|
|
|
|
|
|
this.texts = '正在扫描蓝牙设备...'
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
this.statusflag = false
|
|
|
|
|
|
this.status = true
|
|
|
|
|
|
if (this.searching) {
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': false
|
|
|
|
|
|
});
|
|
|
|
|
|
// 判断是否存在浇花器设备
|
|
|
|
|
|
if (this.devicesList.length == 0) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '暂无发现对应设备,请重试',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.texts = '扫描到以下设备,请点击连接!'
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
xBlufi.notifyStartDiscoverBle({
|
|
|
|
|
|
'isStart': true
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}, 2000)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击隐藏没有设备提示
|
|
|
|
|
|
btnhd() {
|
|
|
|
|
|
this.tishiflag = false
|
|
|
|
|
|
},
|
|
|
|
|
|
btnSetApn(){
|
|
|
|
|
|
this.apnValue = this.ver_data.apn || ''
|
|
|
|
|
|
this.showApnModal = true
|
|
|
|
|
|
},
|
|
|
|
|
|
confirmApn(){
|
|
|
|
|
|
// if(!this.apnValue) {
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
|
// title: '请输入APN',
|
|
|
|
|
|
// icon: 'none'
|
|
|
|
|
|
// })
|
|
|
|
|
|
// return
|
|
|
|
|
|
// }
|
|
|
|
|
|
xBlufi.notifySendCustomData({
|
|
|
|
|
|
customData: `11apn${this.apnValue}@`
|
|
|
|
|
|
})
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '设置成功',
|
|
|
|
|
|
icon: 'success'
|
|
|
|
|
|
})
|
|
|
|
|
|
this.showApnModal = false
|
|
|
|
|
|
this.ver_data = {}
|
|
|
|
|
|
this.Binddevice()
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
<style lang="scss">
|
2025-12-26 16:53:58 +08:00
|
|
|
|
page {
|
2026-01-17 17:37:00 +08:00
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
|
background-color: #F3F3F3;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.jiaozhun{
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
padding: 50rpx;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
box-sizing: border-box;
|
2026-01-17 17:37:00 +08:00
|
|
|
|
width: 100%;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
button{
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
line-height: 80rpx;
|
|
|
|
|
|
background-color: #52c41a;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
.input{
|
|
|
|
|
|
input{
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
line-height: 80rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
border: 1px solid #ccc;
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
width: 260rpx;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
.view{
|
|
|
|
|
|
width: 200rpx;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
background-color: #52c41a;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
line-height: 80rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.container {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
height: 100vh; /* 全屏高度 */
|
|
|
|
|
|
background-color: #f0f0f0; /* 背景颜色 */
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
z-index: 99;
|
|
|
|
|
|
image{
|
|
|
|
|
|
width: 400rpx;
|
|
|
|
|
|
height: 500rpx;
|
|
|
|
|
|
margin-top: 260rpx;
|
|
|
|
|
|
margin-bottom: 80rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.wz{
|
|
|
|
|
|
color: red;
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* 进度条背景 */
|
|
|
|
|
|
.progress-bar {
|
|
|
|
|
|
width: 80%; /* 进度条宽度 */
|
|
|
|
|
|
height: 20px; /* 进度条高度 */
|
|
|
|
|
|
background-color: #e0e0e0; /* 背景颜色 */
|
|
|
|
|
|
border-radius: 10px; /* 圆角 */
|
|
|
|
|
|
overflow: hidden; /* 隐藏超出部分 */
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
/* 进度条填充部分 */
|
|
|
|
|
|
.progress-fill {
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
background-color: #7FAD76; /* 填充颜色 */
|
|
|
|
|
|
transition: width 0.1s ease; /* 平滑过渡 */
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* 进度百分比文字 */
|
|
|
|
|
|
.progress-text {
|
|
|
|
|
|
margin-top: 20px;
|
|
|
|
|
|
font-size: 24px;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.lanyasj{
|
|
|
|
|
|
margin: 15rpx auto 0;
|
|
|
|
|
|
width: 658rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
padding: 30rpx 30rpx;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
.item{
|
|
|
|
|
|
width: 50%;
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
text-align: left;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
.label-box {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
margin-bottom: 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.label{
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #999;
|
|
|
|
|
|
margin-left: 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.value{
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
margin-bottom: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.apn-btn {
|
|
|
|
|
|
margin-left: 20rpx;
|
|
|
|
|
|
background-color: #52c41a;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
padding: 4rpx 16rpx;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.page {
|
|
|
|
|
|
padding-bottom: 250rpx;
|
|
|
|
|
|
width: 750rpx;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
.float-container {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
right: 30rpx;
|
|
|
|
|
|
bottom: 760rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 30rpx;
|
|
|
|
|
|
z-index: 99;
|
|
|
|
|
|
|
|
|
|
|
|
.float-btn {
|
|
|
|
|
|
width: 100rpx;
|
|
|
|
|
|
height: 100rpx;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.2);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 60rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&.confirm-btn {
|
|
|
|
|
|
background: #52c41a;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
border: 2rpx solid #fff;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.tip_box {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
left: 72rpx;
|
|
|
|
|
|
top: 628rpx;
|
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
|
// height: 282rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 30rpx 30rpx 30rpx 30rpx;
|
|
|
|
|
|
z-index: 110;
|
|
|
|
|
|
padding-bottom: 100rpx;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.top {
|
|
|
|
|
|
padding: 52rpx 38rpx 42rpx 36rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.ipt_box {
|
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.text {
|
|
|
|
|
|
width: 350rpx;
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.ipt {
|
|
|
|
|
|
padding: 10rpx 18rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
margin-left: 26rpx;
|
|
|
|
|
|
width: 420rpx;
|
|
|
|
|
|
height: 64rpx;
|
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
|
border: 2rpx solid #979797;
|
|
|
|
|
|
|
|
|
|
|
|
.input {
|
|
|
|
|
|
width: 80%;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tip {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.txt {
|
|
|
|
|
|
margin-top: 32rpx;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bots {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
|
|
|
|
|
|
width: 610rpx;
|
|
|
|
|
|
// border-top: 2rpx solid #D8D8D8;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
// height: 100%;
|
|
|
|
|
|
bottom: -20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.bot_left {
|
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 30rpx;
|
|
|
|
|
|
width: 50%;
|
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
background: #EEEEEE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bot_right {
|
|
|
|
|
|
border-radius: 0rpx 0rpx 30rpx 0rpx;
|
|
|
|
|
|
width: 50%;
|
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
|
background: #4C97E7;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
// border-left: 2rpx solid #D8D8D8;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
// color: #4C97E7;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.imgs {
|
|
|
|
|
|
margin-top: 50rpx;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
.an{
|
|
|
|
|
|
width: 200rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
background-color: #52c41a;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
right: 30rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
line-height: 60rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 300rpx;
|
|
|
|
|
|
height: 300rpx;
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
|
|
|
|
|
|
margin: auto;
|
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
|
// position: fixed;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
// bottom: 100rpx;
|
|
|
|
|
|
// left: 46rpx;
|
|
|
|
|
|
width: 658rpx;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
height: 88rpx;
|
2026-01-17 17:37:00 +08:00
|
|
|
|
background: #52c41a;
|
|
|
|
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.tips {
|
|
|
|
|
|
margin: 28rpx auto 0;
|
|
|
|
|
|
width: 658rpx;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
.iptbox {
|
2025-12-26 16:53:58 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2026-01-17 17:37:00 +08:00
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
padding: 22rpx;
|
|
|
|
|
|
margin: 15rpx auto 0;
|
|
|
|
|
|
width: 658rpx;
|
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
|
|
|
|
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.qrcode {
|
|
|
|
|
|
padding-right: 20rpx;
|
|
|
|
|
|
border-right: 2rpx solid #D8D8D8;
|
|
|
|
|
|
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 54rpx;
|
|
|
|
|
|
height: 54rpx;
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
.ips {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
min-width: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 18rpx;
|
|
|
|
|
|
height: 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.my-placeholder {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #808080;
|
|
|
|
|
|
}
|
|
|
|
|
|
.mini-btn {
|
|
|
|
|
|
min-width: 140rpx;
|
|
|
|
|
|
padding: 0 20rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
line-height: 60rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
background: #52c41a;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
color: #fff;
|
2026-01-17 17:37:00 +08:00
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
border-radius: 30rpx;
|
|
|
|
|
|
margin-left: 10rpx;
|
|
|
|
|
|
flex-shrink: 0;
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.bot_btn {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
bottom: 30rpx;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
padding: 20rpx 46rpx;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
background: transparent;
|
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
|
pointer-events: none; /* Let clicks pass through empty space */
|
2025-12-26 16:53:58 +08:00
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
.btn1 {
|
|
|
|
|
|
pointer-events: auto;
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
margin-right: 0;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
border-radius: 40rpx;
|
|
|
|
|
|
border: 2rpx solid #52c41a;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #52c41a;
|
|
|
|
|
|
box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.1);
|
|
|
|
|
|
}
|
2025-12-26 16:53:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-17 17:37:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|