bike-ali/pages_admin/controlDevice.vue
2024-09-30 18:02:20 +08:00

446 lines
8.7 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="pages">
<u-navbar title="设备控制" :border-bottom="false" :background="bgc" title-color='#262B37' title-size='38'
height='50' :custom-back='backPage'></u-navbar>
<view class="title">
<text>控制台</text>
</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="sn" placeholder="请扫描设备上的二维码" style="margin-left: 32rpx;"
placeholder-class="my-placeholder" @input="search()" />
</view>
<view class="txt">
MAC{{carInfo.mac}}
</view>
<view class="txt" style="margin-top: 100rpx;">
信号:{{carInfo.signalStrength}}
</view>
<view class="txt">
电压:{{carInfo.voltage}}V
</view>
<view class="txt">
网络:
<span v-if="carInfo.onlineStatus==0">离线</span>
<span style="color: #8883F0;" v-if="carInfo.onlineStatus==1">在线</span>
</view>
<view class="txt">
锁状态:
<span v-if="carInfo.lockStatus==0">关</span>
<span style="color: #8883F0;" v-if="carInfo.lockStatus==1">开</span>
</view>
<view class="btnbox">
<view class="btn_box">
<view class="btn1" @click="btn(0)">
开锁
</view>
<view class="btn1" @click="btn(1)">
关锁
</view>
</view>
<view class="btn_box" style="margin-top: 20rpx;">
<view class="btn1" @click="btn(3)">
响铃
</view>
<view class="btn1" @click="btn(4)">
更新
</view>
</view>
<view class="btn2" style="margin-top: 20rpx;" @click="back()">
返回扫描
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
titleflag: false, //提示隐藏
bgc: {
backgroundColor: "#F7FAFE",
},
sn: '',
carInfo:{}
}
},
onLoad(e) {
if (e.sn) {
this.sn = e.sn
this.deviceInfo()
}
},
onShow() {
},
mounted() {
// this.videoContext = uni.createVideoContext('myVideo', this)
},
methods: {
backPage(){
uni.redirectTo({
url:'/pages_admin/worke/bind_sn'
})
},
back(){
uni.reLaunch({
url:'/pages_admin/worke/bind_sn'
})
},
search(){
if (this.sn && this.sn.length === 7 && /^\d+$/.test(this.sn)) {
// 当 this.sn 满足条件时调用 deviceInfo
this.deviceInfo();
} else {
console.log('SN 不是 7 位数字');
// 你可以在这里处理不符合条件的情况,比如提示用户输入正确的 SN
}
},
qrcode() {
uni.scanCode({
onlyFromCamera: true,
scanType: ['qrCode'],
success: res => {
let sn = null;
let queryParams = res.result.split('?')[1];
if (queryParams) {
let params = queryParams.split('&');
params.forEach(param => {
let [key, value] = param.split('=');
if (key === 'sn') {
sn = value;
}
});
}
this.sn = sn
console.log(res.result);
if (this.sn != '') {
this.deviceInfo()
}
},
fail: err => {
console.error('扫描失败:', err);
uni.showToast({
title: '扫描失败',
icon: 'none'
});
}
});
},
deviceInfo() {
this.$u.get('/app/device/info?sn=' + this.sn).then((res) => {
if (res.code === 200) {
this.carInfo=res.data
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
btn(num) {
if (num == 0) {
uni.showLoading({
title: '加载中...'
})
console.log('点击了....1');
this.$u.post('/appVerify/admin/unlocking?sn=' + this.sn).then((res) => {
if (res.code == 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
} else if (num == 1) {
uni.showLoading({
title: '加载中...'
})
console.log('点击了....2');
this.$u.post('/appVerify/admin/lock?sn=' + this.sn).then((res) => {
if (res.code == 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
} else if (num == 3) {
uni.showLoading({
title: '加载中...'
})
this.$u.post('/app/device/ring?sn=' + this.sn).then((res) => {
if (res.code == 200) {
this.deviceInfo()
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
}else if (num == 4){
uni.showLoading({
title: '加载中...'
})
this.$u.post('/appVerify/refreshDevice?sn=' + this.sn).then((res) => {
if (res.code == 200) {
this.deviceInfo()
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
}
}
}
}
</script>
<style lang="scss">
page {
background-color: #f7faff !important;
}
.btnbox {
margin-left: -66rpx;
width: 750rpx;
padding: 0 66rpx;
position: fixed;
bottom: 50rpx;
}
.txt {
margin-top: 16rpx;
font-size: 48rpx;
color: #808080;
}
.btn_box {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.btn1 {
display: flex;
align-items: center;
justify-content: center;
width: 220rpx;
height: 100rpx;
background: #8b83f0;
font-size: 50rpx;
color: #fff;
border-radius: 30rpx;
}
}
.btn2 {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100rpx;
background: #8b83f0;
font-size: 50rpx;
color: #fff;
border-radius: 30rpx;
}
.pages {
// padding-top: 136rpx !important;
padding: 0 66rpx;
box-sizing: border-box;
}
.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;
}
}
.title {
margin-bottom: 84rpx;
image {
display: inline-block;
width: 48rpx;
height: 48rpx;
vertical-align: bottom;
margin-right: 10rpx;
}
text:nth-child(1) {
font-weight: 400;
font-size: 96rpx;
color: #262B37;
line-height: 88rpx;
text-align: left;
font-style: normal;
text-transform: none;
display: block;
margin-bottom: 48rpx;
}
}
.dblist {
display: flex;
width: 100%;
margin-top: 34rpx;
background: #FFFFFF;
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
padding: 20rpx 0 24rpx 18rpx;
box-sizing: border-box;
text-align: center;
border-radius: 10rpx;
.lt {
padding-left: 10rpx;
box-sizing: border-box;
margin-right: 38rpx;
image {
width: 42rpx;
// height: 112rpx;
}
}
.cen {
width: 370rpx;
padding-left: 10rpx;
box-sizing: border-box;
.name {
white-space: nowrap;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 28rpx;
color: #262B37;
line-height: 40rpx;
text-align: left;
font-style: normal;
text-transform: none;
margin-top: 10rpx;
}
.mac {
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #262B37;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
margin-top: 16rpx;
}
}
.rt {
margin-left: auto;
margin-top: 22rpx;
text {
display: inline-block;
width: 108rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0);
border: 2rpx solid #8883F0;
filter: blur(0px);
border-radius: 20rpx;
text-align: center;
line-height: 60rpx;
color: #8883F0;
}
}
}
</style>