congming_huose-apk/subpackage/device/rentiredwai/index.vue

341 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="device-detail">
<!-- 自定义导航栏 -->
<view class="tabback">
<view class="rtjt" @click="btnback"></view>
<view class="name">{{ $i18n.t('deviceDetail') }}</view>
<view style="width: 36rpx;"></view>
</view>
<!-- 头像和扫码按钮悬浮 -->
<view class="avatar-box">
<image class="avatar" :src="xqobj.productPicture || 'https://api.ccttiot.com/smartmeter/img/static/uZiAQwh3lTliRkGXV3R0'" mode="aspectFill"></image>
<view class="scan-btn" @click="btnrdit">
<image src="https://api.ccttiot.com/smartmeter/img/static/uZiAQwh3lTliRkGXV3R0" mode="aspectFill"></image>
</view>
</view>
<!-- 信息列表卡片 -->
<view class="info-card">
<view class="info-item" v-if="infoList && infoList.length > 0" v-for="(item, idx) in infoList" :key="idx">
<!-- <text class="iconfont info-icon" :class="item.iconClass">{{ item.icon }}</text> -->
<image class="iconfont info-icon" :class="item.iconClass" :src="item.icon" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ item.title }}</view>
<view class="info-status-row">
<!-- 蜂窝信号强度用格子条 -->
<view v-if="item.type === 'signal'" class="signal-bar">
<view v-for="n in 4" :key="n" class="signal-block" :class="{active: n <= item.signalLevel}"></view>
</view>
<!-- 其他状态 -->
<text v-else class="info-status" :class="item.valueClass">{{item.value}}</text>
</view>
</view>
<image v-if="item.valueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view v-if="idx !== infoList.length-1" class="divider"></view>
</view>
</view>
<!-- 底部摘要 -->
<view class="device-summary">
<view>{{xqobj.productName}}{{$i18n.t('deviceModel')}}</view>
<view>{{ $i18n.t('hardware') }} {{ xqobj.hardwareVersion || '' }}</view>
<view>{{ $i18n.t('firmware') }} {{ xqobj.firmwareVersion || '' }}</view>
<view>{{$i18n.t('deviceMac')}}{{xqobj.mac}}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
infoList: [],
id:'',
xqobj:{}
}
},
created() {
this.infoList = [
// icon 用 iconfont 占位符,实际项目请替换为你的 iconfont 字体编码
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/ukzZfb8DtiZUiftqgoM9', title: this.$t('infraredSensor'), value: this.$t('normalOpen'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u6q70tcwtAsIxGf8ZGzB', title: this.$t('infraredSensorSensitivity'), value: this.$t('enabled'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uKdJLzFcx2Rh7QwyOnZA', title: this.$t('micEnabled'), value: this.$t('enabled'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uTmzWm51X4xEUaiC2glU', title: this.$t('micSensitivity'), value: this.$t('temperatureChange'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u3PJBIdISoAn3xxbeQLb', title: this.$t('accelerometerVibration'), value: '100%', subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uiIpGnaiS9TPMWEVa1DJ', title: this.$t('accelerometerAngle'), value: '45%', subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/umkBDcKkMqkd6MvEMyMn', title: this.$t('ambientTemperature'), value: this.$t('temperatureChangeDisplay'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u3kuDU7QtC5DCwxF7OMn', title: this.$t('batteryLevel'), value: '100%', subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uo5bYrOx2j9XcB93OgnB', title: this.$t('deviceCover'), value: this.$t('open'), subValue: '', iconClass: '', valueClass: 'red', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u53l4w8N03RKfVCJJW6u', title: this.$t('deviceBracket'), value: this.$t('normal'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u53l4w8N03RKfVCJJW6u', title: this.$t('externalPower'), value: this.$t('no'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uRgW826i9UFnVQCKe3cW', title: this.$t('hubConnection'), value: this.$t('connected'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u8HbiP9EXs21YZ5g8iK2', title: this.$t('hubSignalStrength'), value: this.$t('noData') + ' / ' + this.$t('noData') + ' / ' + this.$t('noData'), subValue: '', iconClass: '', valueClass: '', type: 'signal', signalLevel: 4 },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uwxenGFFOlLOJ395ya0K', title: this.$t('connectionMode'), value: this.$t('wired'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u8HbiP9EXs21YZ5g8iK2', title: this.$t('loraSignalStrength'), value: this.$t('noData') + ' / ' + this.$t('noData') + ' / ' + this.$t('noData'), subValue: '', iconClass: '', valueClass: '', type: 'signal', signalLevel: 4 },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/u8HbiP9EXs21YZ5g8iK2', title: this.$t('bleSignalStrength'), value: this.$t('noData') + ' / ' + this.$t('noData') + ' / ' + this.$t('noData'), subValue: '', iconClass: '', valueClass: '', type: 'signal', signalLevel: 4 },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uHNVHl1QFKt7swCSxCYO', title: this.$t('loraTransmitPower'), value: this.$t('noData') + ' / ' + this.$t('noData') + ' / ' + this.$t('noData'), subValue: '', iconClass: '', valueClass: '', type: 'signal', signalLevel: 4 },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uHNVHl1QFKt7swCSxCYO', title: this.$t('bleTransmitPower'), value: this.$t('noData') + ' / ' + this.$t('noData') + ' / ' + this.$t('noData'), subValue: '', iconClass: '', valueClass: '', type: 'signal', signalLevel: 4 },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/ufzGmkXJW0w9zRvfdJyr', title: this.$t('repeater'), value: this.$t('none'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
{ icon: 'https://api.ccttiot.com/smartmeter/img/static/uyL4a9nUNUwip156myrH', title: this.$t('ncInterface'), value: this.$t('enabled'), subValue: '', iconClass: '', valueClass: '', type: 'text' },
]
},
onLoad(option) {
this.id = option.id
this.getxq()
},
methods: {
// 点击进行设备修改
btnrdit(){
uni.navigateTo({
url:'/subpackage/device/rentiredwai/xq'
})
},
// 进行设备详情请求
getxq(){
this.$http.get(`/bst/device/detail?id=${this.id}`).then(res => {
if(res.code == 200){
this.xqobj = res.data
// 根据API返回的数据更新infoList
this.updateInfoList(res.data)
}
})
},
// 根据设备详情更新信息列表
updateInfoList(data) {
// 这里可以根据API返回的数据结构进行相应的处理
// 例如如果data中有infraredSensor字段可以使用它来更新对应的值
this.infoList.forEach(item => {
// 根据不同的title更新不同的值
switch (item.title) {
case this.$t('infraredSensor'):
// 假设API返回的数据中有infraredSensor字段
if (data.infraredSensor) {
item.value = data.infraredSensor ? this.$t('normalOpen') : this.$t('normalClose')
}
break
case this.$t('micEnabled'):
// 假设API返回的数据中有micEnabled字段
if (data.micEnabled !== undefined) {
item.value = data.micEnabled ? this.$t('enabled') : this.$t('disabled')
}
break
case this.$t('ambientTemperature'):
// 假设API返回的数据中有temperature字段
if (data.temperature) {
item.value = `${data.temperature}°C`
}
break
case this.$t('accelerometerVibration'):
// 假设API返回的数据中有vibration字段
if (data.vibration) {
item.value = `${data.vibration}%`
}
break
case this.$t('accelerometerAngle'):
// 假设API返回的数据中有angle字段
if (data.angle) {
item.value = `${data.angle}%`
}
break
// 可以根据实际的API返回数据结构添加更多的case
}
})
},
// 点击返回上一级
btnback(){
uni.navigateBack()
}
}
}
</script>
<style scoped lang="less">
.tabback {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 160rpx;
padding: 0 20rpx;
padding-top: 80rpx;
box-sizing: border-box;
position: fixed;
top: 0;
left: 0;
z-index: 999 !important;
background-color: #fff;
.rtjt {
font-size: 36rpx;
}
}
.device-detail {
padding-top: 150rpx;
background-color: #F3F5F6;
}
.onebox {
width: 750rpx;
height: 288rpx;
background: #FFFFFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin-top: 32rpx;
.devicename {
padding: 24rpx 32rpx;
box-sizing: border-box;
border-bottom: 1px solid #D8D8D8;
.xi {
font-size: 28rpx;
color: #7F7F7F;
}
.cu {
font-size: 32rpx;
color: #3D3D3D;
margin-top: 10rpx;
border-bottom: 1px solid #D8D8D8;
padding-bottom: 18rpx;
box-sizing: border-box;
}
}
.room {
padding: 18rpx 32rpx;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 18rpx;
.lt {
.xi {
font-size: 28rpx;
color: #7F7F7F;
}
.cu {
font-size: 32rpx;
color: #3D3D3D;
margin-top: 10rpx;
}
}
.rt {
image {
width: 28rpx;
height: 42rpx;
}
}
}
}
.avatar-box {
position: relative;
display: flex;
justify-content: center;
margin-top: 60rpx;
padding-bottom: 74rpx;
border-bottom: 1rpx solid #f2f2f2;
.avatar {
width: 278rpx;
height: 278rpx;
background: #e0e0e0;
border-radius: 24rpx;
box-shadow: 0 2rpx 8rpx #eee;
}
.scan-btn {
image{
width: 48rpx;
height: 48rpx;
}
position: absolute;
right: 26rpx;
top: -36rpx;
width: 48rpx;
height: 48rpx;
background: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
box-shadow: 0 2rpx 8rpx #eee;
border: 1rpx solid #eee;
}
}
.info-card {
background: #fff;
.info-item {
display: flex;
align-items: flex-start;
padding: 0 24rpx 0 32rpx;
position: relative;
min-height: 80rpx;
image{
width: 50rpx;
height: 50rpx;
margin-top: 30rpx;
}
.info-icon {
font-family: 'iconfont' !important;
font-size: 32rpx;
margin-right: 18rpx;
color: #222;
line-height: 80rpx;
}
.info-content {
flex: 1;
padding: 18rpx 0;
.info-title {
font-size: 28rpx;
color: #333;
font-weight: 500;
}
.info-status-row {
display: flex;
align-items: center;
margin-top: 6rpx;
min-height: 32rpx;
.info-status {
font-size: 26rpx;
color: #666;
&.red {
color: #e74c3c;
}
&.green {
color: #27ae60;
}
}
.signal-bar {
display: flex;
align-items: center;
.signal-block {
width: 62rpx;
height: 6rpx;
margin-right: 6rpx;
border-radius: 2rpx;
background: #e0e0e0;
&.active {
background: #4cd964;
}
}
}
}
}
.divider {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 1rpx;
background: #f2f2f2;
}
}
}
.device-summary {
background: #f7f7f7;
text-align: center;
color: #888;
font-size: 24rpx;
line-height: 1.8;
border-radius: 0 0 20rpx 20rpx;
padding-top: 40rpx;
box-sizing: border-box;
padding-bottom: 30rpx;
}
</style>