buddhism/page_user/luru/controlDevice.vue
WindowBird 1b2dae6e8c 引入设备录入功能,解决脚本依赖循环问题;
× Found 1 circular dependency!

1) components/blufi/xBlufi-wx-impl.js > components/blufi/xBlufi.js
2025-09-23 17:13:16 +08:00

485 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="">
<view class="title"> 控制台</view>
<view class="shuom"> 请扫描设备上的二维码</view>
<view class="iptbox">
<view class="qrcode" @click="qrcode()">
<image
mode="aspectFit"
src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs"
>
</image>
</view>
<input
v-model="storeId"
class="ips"
placeholder="请扫描设备上的二维码"
placeholder-class="my-placeholder"
style="margin-left: 32rpx"
type="text"
/>
</view>
<view class="machao"> MAC号{{ obj.mac == undefined ? '--' : obj.mac }}</view>
<view class="machao"> 电压:{{ obj.voltage == undefined ? '--' : obj.voltage }}V</view>
<view class="machao">
功率:{{ obj.realTimePower == undefined ? '--' : obj.realTimePower }}W
</view>
<view class="machao"> 电流:{{ obj.electricity == undefined ? '--' : obj.electricity }}A</view>
<view class="machao">
网络:
<text v-if="onlineStatus == '离线'" style="color: red">离线</text>
<text v-if="onlineStatus == '在线'" style="color: green">在线</text>
</view>
<view class="machao">
状态:
<text v-if="powerStatus == '关闭'" style="color: red">关闭</text>
<text v-if="powerStatus == '开启'" style="color: green">开启</text>
</view>
<view class="machao"> 版本号:{{ obj.version == undefined ? '--' : obj.version }}</view>
<view class="machao">
最后更新时间:{{ obj.lastPullTime == undefined ? '--' : obj.lastPullTime }}
</view>
<view class="machao">
最后在线时间:{{ obj.lastOnlineTime == undefined ? '--' : obj.lastOnlineTime }}
</view>
<view class="jiaozhun">
<view class="input">
<button @click="btnjian">-</button>
<input v-model="valuedian" placeholder="输入校准电压" type="text" />
<button @click="btnadd">+</button>
</view>
<view class="view" @click="btnjiaozhun"> 校准电压</view>
</view>
<view class="list">
<view class="anniulist">
<view class="anniu" @click="btncq"> 重启</view>
<view class="anniu" @click="btnsxs"> 刷新</view>
</view>
<view class="anniulist">
<view class="anniu" @click="btnkq"> 开启</view>
<view class="anniu" @click="btngb"> 关闭</view>
<view class="anniu" @click="btnsx"> 同步</view>
</view>
<view class="fanhui" @click="btnfh"> 返回</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: '#F7FAFE',
},
storeId: '',
obj: {},
id: '',
onlineStatus: '--',
powerStatus: '--',
valuedian: 220,
xshu: '1',
x: '',
}
},
onLoad(options) {
if (options.sn) {
this.storeId = options.sn
this.getsn()
}
},
// 分享到好友(会话)
onShareAppMessage: function () {
return {
title: '创想物联',
path: '/pages/shouye/index',
}
},
// 分享到朋友圈
onShareTimeline: function () {
return {
title: '创想物联',
query: '',
path: '/pages/shouye/index',
}
},
methods: {
btncq() {
this.$u.put(`/app/device/admin/reboot?sn=${this.storeId}`).then(res => {
if (res.code == 200) {
uni.showToast({
title: '重启成功',
icon: 'success',
duration: 2000,
})
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000,
})
}
})
},
btnsxs() {
this.$u.put(`/app/device/admin/uploadData?sn=${this.storeId}`).then(res => {
if (res.code == 200) {
this.obj = res.data
this.id = res.data.deviceId
if (res.data.vxs == null) {
this.xshu = 1
} else {
this.xshu = res.data.vxs
}
if (res.data.onlineStatus == 0) {
this.onlineStatus = '离线'
} else if (res.data.onlineStatus == 1) {
this.onlineStatus = '在线'
}
if (res.data.powerStatus == 0) {
this.powerStatus = '关闭'
} else if (res.data.powerStatus == 1) {
this.powerStatus = '开启'
}
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000,
})
uni.hideLoading()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000,
})
}
})
},
btnjian() {
this.valuedian = Number(this.valuedian) - 1
},
btnadd() {
this.valuedian = Number(this.valuedian) + 1
},
btnjiaozhun() {
this.x = (this.valuedian / this.obj.voltage) * this.xshu
this.x = this.x.toFixed(3)
console.log(this.x)
this.$u.put(`/app/device/admin/${this.obj.deviceId}/vxs?vxs=${this.x}`).then(res => {
if (res.code == 200) {
uni.showToast({
title: '校准成功',
icon: 'success',
duration: 2000,
})
this.getsn()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
})
}
})
},
btnmy() {
uni.reLaunch({
url: '/pages/my',
})
},
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
}
let sceneValue = res.result
let decodedValue = decodeURIComponent(sceneValue)
let id = getQueryParam(decodedValue, 's')
this.storeId = id
this.getsn()
},
fail: err => {
console.error('扫描失败:', err)
uni.showToast({
title: '扫描失败',
icon: 'none',
})
},
})
},
getsn() {
this.$u.get(`/app/device/admin/get?sn=${this.storeId}`).then(res => {
if (res.code == 200) {
this.obj = res.data
this.id = res.data.deviceId
if (res.data.vxs == null) {
this.xshu = 1
} else {
this.xshu = res.data.vxs
}
if (res.data.onlineStatus == 0) {
this.onlineStatus = '离线'
} else if (res.data.onlineStatus == 1) {
this.onlineStatus = '在线'
}
if (res.data.powerStatus == 0) {
this.powerStatus = '关闭'
} else if (res.data.powerStatus == 1) {
this.powerStatus = '开启'
}
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000,
})
uni.hideLoading()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000,
})
}
})
},
// 返回录入
btnfh() {
uni.navigateBack({
delta: 1, // 返回的页面数默认1
success: () => {
console.log('返回上一页成功')
},
fail: err => {
console.error('返回上一页失败:', err)
},
})
},
// 开启
btnkq() {
uni.showLoading({
title: '设备开启中...',
})
this.$u.put(`/app/device/admin/${this.id}/switch?open=true`).then(res => {
if (res.code == 200) {
uni.showToast({
title: '开启成功',
icon: 'success',
duration: 2000,
})
this.powerStatus = '开启'
} else {
uni.showToast({
title: '开启失败',
icon: 'none',
duration: 2000,
})
}
})
},
// 关闭
btngb() {
uni.showLoading({
title: '设备关闭中...',
})
this.$u.put(`/app/device/admin/${this.id}/switch?open=false`).then(res => {
if (res.code == 200) {
// setTimeout(()=>{
// this.btnsx()
// },1000)
uni.showToast({
title: '关闭成功',
icon: 'success',
duration: 2000,
})
this.powerStatus = '关闭'
} else {
uni.showToast({
title: '关闭失败',
icon: 'none',
duration: 2000,
})
}
})
},
// 刷新
btnsx() {
this.$u.get(`/app/device/v2/refreshIot?deviceNo=${this.storeId}`).then(res => {
if (res.code == 200) {
this.getsn()
uni.showToast({
title: '同步成功',
icon: 'success',
duration: 2000,
})
} else {
uni.showToast({
title: '同步失败',
icon: 'none',
duration: 2000,
})
}
})
},
},
}
</script>
<style lang="less">
.jiaozhun {
display: flex;
padding: 50rpx;
box-sizing: border-box;
width: 100%;
justify-content: space-between;
button {
height: 80rpx;
line-height: 80rpx;
background-color: #8883f0;
color: #fff;
}
.input {
input {
height: 80rpx;
line-height: 80rpx;
}
border: 1px solid #ccc;
border-radius: 20rpx;
display: flex;
width: 400rpx;
height: 80rpx;
text-align: center;
}
.view {
width: 200rpx;
height: 80rpx;
border-radius: 20rpx;
background-color: #8883f0;
color: #fff;
text-align: center;
line-height: 80rpx;
font-size: 28rpx;
}
}
.list {
position: fixed;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
.anniulist {
width: 658rpx;
margin: auto;
margin-top: 20rpx;
text-align: left;
font-size: 32rpx;
display: flex;
.anniu {
margin-right: 20rpx;
width: 30%;
height: 90rpx;
border-radius: 20rpx;
background-color: #8883f0;
color: #fff;
font-size: 32rpx;
text-align: center;
line-height: 90rpx;
}
}
.fanhui {
width: 658rpx;
height: 90rpx;
border-radius: 20rpx;
background-color: #8883f0;
color: #fff;
font-size: 32rpx;
text-align: center;
line-height: 90rpx;
margin: auto;
margin-top: 50rpx;
}
}
.machao {
width: 658rpx;
margin: auto;
margin-top: 20rpx;
text-align: left;
font-size: 32rpx;
}
.title {
font-size: 70rpx;
font-weight: 600;
text-align: left;
width: 658rpx;
margin: auto;
margin-top: 30rpx;
}
.shuom {
width: 658rpx;
margin: auto;
margin-top: 30rpx;
text-align: left;
font-size: 32rpx;
}
.iptbox {
display: flex;
align-items: center;
flex-wrap: nowrap;
padding: 22rpx;
margin: 28rpx 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;
}
}
.ips {
width: 630rpx;
}
image {
width: 18rpx;
height: 32rpx;
}
.my-placeholder {
font-weight: 400;
font-size: 32rpx;
color: #808080;
}
}
</style>