<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>