ct-mattress/page_user/deviceedit.vue

790 lines
19 KiB
Vue
Raw Normal View History

2024-08-28 11:04:46 +08:00
<template>
<view class="pages">
<u-navbar title="设备详情" :border-bottom="false" :background="bgc" back-icon-color="#3D3D3D" title-color='#3D3D3D'
title-size='36' height='44'></u-navbar>
<view class="list_item">
<view class="top">
<view class="bh">设备编号{{obj.deviceNo == undefined ? '--' : obj.deviceNo}}</view>
<view class="zx" v-if="obj.onlineStatus == 1">
<view class="yuan"></view>
<view class="wz">在线</view>
</view>
<view class="zx" v-else>
<view class="yuan" style="background-color: red;"></view>
<view style="color: red;">离线</view>
</view>
</view>
<view class="devixexq">
<view class="xiaoav">
<view class="">设备状态</view>
2024-09-12 18:02:26 +08:00
<view style="color: rgb(18, 210, 172);;" v-if="obj.status == 2">使用中</view>
<view style="color: rgb(18, 210, 172);;" v-if="obj.status == 1">正常</view>
2024-08-28 11:04:46 +08:00
<view style="color: red;" v-if="obj.status == 3">不可用</view>
</view>
<view class="xiaoav">
2024-08-29 18:02:17 +08:00
<view class="">所属合作伙伴</view>
2024-08-28 11:04:46 +08:00
<view class="">{{obj.agentName == undefined ? '--' : obj.agentName}}</view>
</view>
<view class="xiaoav">
2024-08-29 18:02:17 +08:00
<view class="">所属渠道商</view>
2024-08-28 11:04:46 +08:00
<view class="">{{obj.bizManName == undefined ? '--' : obj.bizManName}}</view>
</view>
<view class="xiaoav">
2024-08-29 18:02:17 +08:00
<view class="">所属创业者</view>
2024-08-28 11:04:46 +08:00
<view class="">{{obj.userName == undefined ? '--' : obj.userName}}</view>
</view>
</view>
<view class="zong">
<view class="xiaoav">
<view class="">订单总数</view>
<view class="">{{obj.orderCount == undefined ? '--' : obj.orderCount}}</view>
</view>
<view class="xiaoav">
<view class="">订单总金额</view>
<view class="">{{obj.orderAmount == undefined ? '--' : obj.orderAmount}}</view>
</view>
</view>
</view>
2024-09-26 17:35:25 +08:00
<!-- 开关操作 -->
<view class="lishi" v-if="type">
<view class="lt">
开关操作
</view>
<view class="rt">
<image v-if="imgflag" @click="btnimg"
src="https://api.ccttiot.com/smartmeter/img/static/uccaWar4FDp37op7haWM " mode=""></image>
<image v-else @click="btnimgs" src="https://api.ccttiot.com/smartmeter/img/static/ur9HRtZKY7YcxGewJARz"
mode=""></image>
</view>
</view>
<!-- 蓝牙连接 -->
<view class="bluetoothbox" v-if="bluetoothflag">
<view class="stop">
设备已离线正在连接该设备蓝牙
</view>
<view class="xtop">
请将手机与设备尽量靠近连接成功后可操作
</view>
<image src="https://api.ccttiot.com/smartmeter/img/static/ucDphMKsozqwwllJTAKL" mode=""></image>
</view>
<!-- 蓝牙连接失败 -->
<view class="bluetoothbox" v-if="shibaiflag">
<image class="img" src="https://api.ccttiot.com/smartmeter/img/static/uTb3vSlbcHdPMFQMBjyL" mode=""></image>
<view class="one">
蓝牙连接失败
</view>
<view class="two">
请确保手机足够靠近设备
</view>
<view class="thr">
并且设备处于上电状态
</view>
<view class="anfour">
<view class="qx" @click="btnlyqx">
取消
</view>
<view class="cx" @click="topage">
重新连接
</view>
</view>
</view>
<view v-if="btnmsk"
style="width: 100%;height: 100vh;position: fixed;top: 0;left: 0;background-color: #000;opacity: .1;z-index: 999;">
</view>
2024-08-28 11:04:46 +08:00
<!-- 商家信息 -->
<view class="sjmsg">
<view class="tit">
商家信息
</view>
<view class="jy">
<view class="one">经营场所</view>
<view class="thr">{{obj.storeName == undefined ? '--' : obj.storeName}}</view>
</view>
<view class="jy">
2024-09-14 18:01:18 +08:00
<view class="one" style="width: 180rpx;">经营地址</view>
2024-08-28 11:04:46 +08:00
<view class="two">{{obj.storeAddress == undefined ? '--' : obj.storeAddress}}</view>
</view>
<view class="jy">
<view class="one">所在房间</view>
2024-08-28 18:00:25 +08:00
<view class="two">{{obj.room == undefined ? '--' : obj.room}}</view>
2024-08-28 11:04:46 +08:00
</view>
</view>
<!-- 设备规格 -->
<view class="sjmsg">
<view class="tit">
设备规格
</view>
<view class="jy">
<view class="one">设备名称</view>
<view class="two">{{obj.deviceName == undefined ? '--' : obj.deviceName}}</view>
</view>
<view class="jy">
<view class="one">设备尺寸</view>
<view class="two">{{obj.size == undefined ? '--' : obj.size}}</view>
</view>
<view class="jy">
<view class="one">设备面料</view>
<view class="two">{{obj.fabric == undefined ? '--' : obj.fabric}}</view>
</view>
<view class="jy">
<view class="one">设备填充物</view>
<view class="two">{{obj.fill == undefined ? '--' : obj.fill}}</view>
</view>
</view>
<!-- 在线信息 -->
<view class="sjmsg">
<view class="tit">
在线信息
</view>
<view class="jy">
<view class="one">首次上线时间</view>
<view class="two">{{obj.firstOnlineTime == undefined ? '--' : obj.firstOnlineTime}}</view>
</view>
<view class="jy">
<view class="one">最后登录时间</view>
<view class="two">{{obj.lastOnlineTime == undefined ? '--' : obj.lastOnlineTime}}</view>
</view>
</view>
<!-- 收益明细 -->
<view class="sjmsg">
<view class="tit">
2024-08-29 18:02:17 +08:00
收益明细
2024-08-28 11:04:46 +08:00
</view>
<view class="jy" v-for="(item,index) in obj.bonusList" :key="index">
2024-09-26 17:35:25 +08:00
<view class="one">{{item.arrivalName == undefined ? '--' : item.arrivalName}}
<text v-if="item.arrivalType == 1">平台</text>
<text v-if="item.arrivalType == 2">公司</text>
<text v-if="item.arrivalType == 3">合作伙伴</text>
<text v-if="item.arrivalType == 4">渠道商</text>
<text v-if="item.arrivalType == 5">创业者</text>
<text v-if="item.arrivalType == 6">经营场所</text>{{item.point}}%</view>
2024-08-28 11:04:46 +08:00
</view>
</view>
</view>
</template>
<script>
2024-09-26 17:35:25 +08:00
var xBlufi = require("@/components/blufi/xBlufi.js")
2024-08-28 11:04:46 +08:00
export default {
data() {
return {
bgc: {
backgroundColor: "#F7FAFE",
},
2024-09-26 17:35:25 +08:00
id:'',
obj:{},
setMode: null,
qrResult: '',
isUsing: false,
bluetoothflag: false,
shibaiflag: false,
btnmsk: false,
2024-08-28 11:04:46 +08:00
deviceId:'',
2024-09-26 17:35:25 +08:00
name: '',
imgflag:false,
pictrim:true,
type:''
2024-08-28 11:04:46 +08:00
}
},
onLoad(option) {
2024-09-26 17:35:25 +08:00
this.$u.get('/app/user/userInfo').then(res =>{
this.type = res.data.type
})
this.id = option.deviceId
2024-08-28 11:04:46 +08:00
this.getxq()
},
// 分享到好友(会话)
onShareAppMessage: function() {
return {
title: '创亿康',
path: '/pages/index/index'
}
},
// 分享到朋友圈
onShareTimeline: function() {
return {
title: '创亿康',
query: '',
path: '/pages/index/index'
}
},
methods: {
2024-09-26 17:35:25 +08:00
2024-08-28 11:04:46 +08:00
getxq(){
2024-09-26 17:35:25 +08:00
this.$u.get(`/app/device/${this.id}`).then(res =>{
2024-08-28 11:04:46 +08:00
if(res.code == 200){
this.obj = res.data
2024-09-26 17:35:25 +08:00
this.imgflag = res.data.isUsing
this.qrResult = res.data.mac
2024-08-28 11:04:46 +08:00
}
})
2024-09-26 17:35:25 +08:00
},
// 点击临时开关
btnimg() {
if(this.pictrim == true){ //防止频繁点击
this.pictrim = false
setTimeout(()=>{
this.pictrim = true
},5000)
if (this.obj.onlineStatus == 1) {
this.$u.put(`/app/device/${this.id}/changePower?status=0`).then(res => {
if (res.code == 200) {
this.imgflag = false
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
})
} else {
if (this.setMode == null) {
this.btnmsk = false
this.shibaiflag = false
this.bluetoothflag = true
xBlufi.initXBlufi(1)
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
xBlufi.notifyStartDiscoverBle({
'isStart': true
})
// 停止蓝牙搜索
setTimeout(() => {
xBlufi.notifyStartDiscoverBle({
'isStart': false
})
xBlufi.notifyConnectBle({
isStart: true,
deviceId: this.deviceId,
name: this.name
})
xBlufi.notifyInitBleEsp32({
deviceId: this.deviceId
})
}, 1000)
} else {
let that = this
uni.getNetworkType({
success(res) {
if (res.networkType !== 'none') {
uni.getConnectedBluetoothDevices({
success(res) {
setTimeout(() => {
xBlufi.notifySendCustomData({
customData: '11close'
})
uni.showToast({
title: '操作成功',
icon: 'success',
duration: 1000
})
this.imgflag = false
that.btnmsk = false
that.shibaiflag = false
that.bluetoothflag = false
}, 1000)
},
fail(err) {
console.error('获取已连接蓝牙设备信息失败:', err)
}
})
}
}
})
}
}
}else{
uni.showToast({
title: '请不要频繁点击',
icon: 'none',
duration: 1000
})
}
},
btnimgs() {
if(this.pictrim == true){ //防止频繁点击
this.pictrim = false
setTimeout(()=>{
this.pictrim = true
},5000)
if (this.obj.onlineStatus == 1) {
///app/bill/switchDevice?billId=${this.id}&open=true
this.$u.put(`/app/device/${this.id}/changePower?status=1`).then(res => {
if (res.code == 200) {
this.imgflag = true
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
})
} else {
if (this.setMode == null) {
this.btnmsk = false
this.shibaiflag = false
this.bluetoothflag = true
xBlufi.initXBlufi(1)
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
xBlufi.notifyStartDiscoverBle({
'isStart': true
})
// 停止蓝牙搜索
setTimeout(() => {
xBlufi.notifyStartDiscoverBle({
'isStart': false
})
xBlufi.notifyConnectBle({
isStart: true,
deviceId: this.deviceId,
name: this.name
})
xBlufi.notifyInitBleEsp32({
deviceId: this.deviceId
})
}, 1000)
} else {
let that = this
uni.getNetworkType({
success(res) {
if (res.networkType !== 'none') {
uni.getConnectedBluetoothDevices({
success(res) {
setTimeout(() => {
xBlufi.notifySendCustomData({
customData: '11open'
})
uni.showToast({
title: '操作成功',
icon: 'success',
duration: 1000
})
this.imgflag = true
that.btnmsk = false
that.shibaiflag = false
that.bluetoothflag = false
}, 1000)
},
fail(err) {
console.error('获取已连接蓝牙设备信息失败:', err)
}
})
}
}
})
}
}
}else{
uni.showToast({
title: '请不要频繁点击',
icon: 'none',
duration: 1000
})
}
},
// 蓝牙连接取消
btnlyqx() {
this.shibaiflag = false
this.bluetoothflag = false
},
// 蓝牙重新连接
topage() {
this.btnmsk = false
this.shibaiflag = false
this.bluetoothflag = true
if (this.setMode == null) {
xBlufi.initXBlufi(1)
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
xBlufi.notifyStartDiscoverBle({
'isStart': true
})
// 停止蓝牙搜索
setTimeout(() => {
xBlufi.notifyStartDiscoverBle({
'isStart': false
})
xBlufi.notifyConnectBle({
isStart: true,
deviceId: this.deviceId,
name: this.name
})
xBlufi.notifyInitBleEsp32({
deviceId: this.deviceId
})
}, 1000)
}
},
// 搜索蓝牙部分
funListenDeviceMsgEvent: function(options) {
switch (options.type) {
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_MY_DATA:
let loadPercent = options.data;
let loadText = '文件读取中'
// console.log("文件读取中", options.data)
break;
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
let ver_data = this.parseCustomData(options.data)
this.setMode = Math.floor(ver_data.setMode / 60)
console.log("1收到设备发来的自定义数据结果", ver_data, this.setMode)
break;
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
if (options.result) {
let devicesarr = options.data
devicesarr.forEach(device => {
const mac = device.name.substring(5)
if (device.name.slice(5, 17) == this.qrResult) {
this.deviceId = device.deviceId
this.name = device.name
this.mac = device.name.slice(5, 17)
}
})
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
// console.log("连接回调:" + JSON.stringify(options))
if (options.result) {
setTimeout(() => {
this.bluetoothflag = false
}, 3000)
uni.hideLoading(); {
console.log("连接回调options.data.deviceId" + options.data.deviceId,
"连接回调options.data.name" + options.data.name)
}
} else {
this.shibaiflag = true
this.bluetoothflag = false
uni.hideLoading()
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START:
if (!options.result) {
setTimeout(() => {
uni.hideLoading()
this.bluetoothflag = false
}, 3000)
console.log("蓝牙未开启", options)
this.shibaiflag = true
return
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP:
if (options.result) {
let uniqueDevicesList = Array.from(new Set(this.devicesList))
// 将去重后的数组重新赋值给 this.devicesList
this.devicesList = uniqueDevicesList
let list = []
setTimeout(() => {
this.devicesList = list
}, 200)
console.log('蓝牙停止搜索ok')
} else {
//蓝牙停止搜索失败
console.log('蓝牙停止搜索失败')
}
this.searching = false
break
}
},
parseCustomData(data) {
const dataArray = data.split('@');
const parsedData = {};
const prefixMap = {
'V': 'voltage',
'S': 'switchState',
'A': 'current',
'P': 'power',
'M': 'remainingPower',
'T': 'setMode',
'W': 'temperature'
};
// 遍历数组并解析每个字段
for (let i = 0; i < dataArray.length; i++) {
const field = dataArray[i];
for (const prefix in prefixMap) {
if (field.startsWith(prefix)) {
const value = field.substring(1);
const propertyName = prefixMap[prefix];
parsedData[propertyName] = isNaN(parseFloat(value)) ? value : parseFloat(value);
break;
}
}
}
return parsedData;
},
2024-08-28 11:04:46 +08:00
}
}
</script>
<style lang="scss" scoped>
/deep/ .u-title {
padding-bottom: 15rpx;
}
/deep/ .u-icon__icon {
padding-bottom: 15rpx;
}
2024-09-26 17:35:25 +08:00
.bluetoothbox {
width: 100%;
height: 100vh;
background-color: #f4f1f6;
position: fixed;
top: 0;
left: 0;
z-index: 99;
text-align: center;
.img {
margin-top: 400rpx;
width: 320rpx;
height: 320rpx;
}
.one {
font-size: 36rpx;
color: #000;
}
.two {
margin-top: 30rpx;
font-size: 24rpx;
color: #ccc;
}
.thr {
margin-top: 30rpx;
font-size: 28rpx;
color: #ccc;
}
.anfour {
display: flex;
margin-top: 30rpx;
justify-content: space-between;
padding: 0 220rpx;
box-sizing: border-box;
.qx {
width: 100rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
border: 1px solid #3D3D3D;
border-radius: 10rpx;
}
.cx {
width: 200rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
background-color: #8883F0;
color: #fff;
border-radius: 10rpx;
}
}
.stop {
font-size: 36rpx;
color: #000;
margin-top: 380rpx;
}
.xtop {
margin-top: 30rpx;
font-size: 24rpx;
color: #ccc;
}
.xqx {
width: 530rpx;
height: 90rpx;
line-height: 90rpx;
border-radius: 20rpx;
text-align: center;
background-color: #fff;
margin: auto;
margin-top: 200rpx;
}
image {
width: 500rpx;
height: 500rpx;
margin-top: 100rpx;
}
}
.lishi {
width: 100%;
height: 110rpx;
background-color: #fff;
padding: 24rpx;
box-sizing: border-box;
margin-top: 30rpx;
border-radius: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
.lt {
font-size: 32rpx;
}
.rt {
image {
width: 160rpx;
height: 80rpx;
}
}
}
2024-08-28 11:04:46 +08:00
.pages {
background-color: #F7FAFE !important;
height: 100%;
width: 100%;
padding-bottom: 100rpx !important;
padding: 0 38rpx;
box-sizing: border-box;
.sjmsg {
margin-top: 50rpx;
.tit {
font-size: 28rpx;
color: #3D3D3D;
font-weight: 600;
}
.jy {
margin-top: 24rpx;
display: flex;
justify-content: space-between;
.one {
font-size: 28rpx;
color: #808080;
}
.two {
font-size: 28rpx;
color: #3D3D3D;
}
.thr {
font-size: 28rpx;
color: #8883F0;
}
}
}
.list_item {
margin-top: 32rpx;
2024-09-13 18:02:36 +08:00
max-height: 348rpx;
2024-08-28 11:04:46 +08:00
padding: 24rpx 28rpx;
box-sizing: border-box;
background-color: #fff;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 20rpx 20rpx 20rpx 20rpx;
.devixexq {
display: flex;
justify-content: space-between;
margin-top: 14rpx;
text-align: center;
.xiaoav {
font-size: 24rpx;
color: #3D3D3D;
view {
margin-top: 12rpx;
}
}
}
.zong {
margin-top: 30rpx;
display: flex;
justify-content: space-between;
text-align: center;
padding: 0 50rpx;
box-sizing: border-box;
font-size: 24rpx;
color: #3D3D3D;
view {
margin-top: 12rpx;
}
}
.cen {
display: flex;
justify-content: space-between;
margin-top: 22rpx;
align-items: center;
border-bottom: 1px solid #D8D8D8;
padding-bottom: 34rpx;
box-sizing: border-box;
.fj {
font-size: 24rpx;
color: #3D3D3D;
}
input {
width: 346rpx;
height: 38rpx;
background: #F0F0F0;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
.btn {
width: 110rpx;
height: 38rpx;
background: #8883F0;
border-radius: 8rpx 8rpx 8rpx 8rpx;
text-align: center;
line-height: 38rpx;
font-size: 20rpx;
color: #FFFFFF;
}
}
.top {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #D8D8D8;
padding-bottom: 26rpx;
box-sizing: border-box;
.bh {
font-size: 24rpx;
color: #3D3D3D;
}
.zx {
display: flex;
align-items: center;
.yuan {
width: 14rpx;
height: 14rpx;
background: #12D2AC;
border-radius: 50%;
margin-right: 10rpx;
}
.wz {
font-size: 24rpx;
color: #12D2AC;
}
}
}
}
}
</style>