485 lines
11 KiB
Vue
485 lines
11 KiB
Vue
<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>
|