buddhism/page_user/luru/controlDevice.vue
2025-10-14 08:50:09 +08:00

530 lines
12 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>
import { sendCommand } from "../../api/device/device";
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: {
sendCommand,
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);
},
});
},
// 开启
async btnkq() {
uni.showLoading({
title: "设备开启中...",
});
try {
const res = await sendCommand({
command: "11open",
mac: "44D6DA263B38",
tryCount: "2",
timeout: "10",
reason: "测试",
});
console.log("open-res", res);
uni.hideLoading();
if (res.code === 200) {
uni.showToast({
title: "开启成功",
icon: "success",
duration: 2000,
});
this.powerStatus = "开启";
} else {
uni.showToast({
title: res.msg || "开启失败",
icon: "none",
duration: 2000,
});
}
} catch (error) {
console.error("开启设备失败:", error);
uni.hideLoading();
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>