congming_huose-apk/pages/device/yangan.vue

554 lines
24 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>
<scroll-view style="height: 90vh;" scroll-y refresher-enabled @refresherrefresh="onRefresh" :refresher-triggered="isRefreshing" refresher-default-style="black">
<!-- 头像和扫码按钮悬浮 -->
<view class="avatar-box">
<image class="avatar" :src="xqobj.productPicture" 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">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uZuSHiOLG2jYRiqJrzeX" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('smokeDetectorStatus') }}</view>
<view class="info-status-row">
<text class="info-status" :class="smokeDetectorStatusValueClass">{{ smokeDetectorStatusValue }}</text>
</view>
</view>
<image v-if="smokeDetectorStatusValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 温度火灾范围 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uaNxJ7SUm2ToqjFeLBuj" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('temperatureFireRange') }}</view>
<view class="info-status-row">
<text class="info-status" :class="temperatureFireValueClass">{{ temperatureFireValue }}</text>
</view>
</view>
<image v-if="temperatureFireValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- CO PPM -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/ufKtn4L7adQw6lPvkPJd" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('coPpmLabel') }}</view>
<view class="info-status-row">
<text class="info-status" :class="coPpmValueClass">{{ coPpmValue }}</text>
</view>
</view>
<image v-if="coPpmValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- VOC PPM -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uaXIzavu1OhLTWBPF2fQ" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('vocPpmLabel') }}</view>
<view class="info-status-row">
<text class="info-status" :class="vocPpmValueClass">{{ vocPpmValue }}</text>
</view>
</view>
<image v-if="vocPpmValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 温度摄氏度 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/ui7OWHNMKmMw4glpwqCB" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('temperatureCelsius') }}</view>
<view class="info-status-row">
<text class="info-status" :class="temperatureChangeValueClass">{{ temperatureChangeValue }}</text>
</view>
</view>
<image v-if="temperatureChangeValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 电池电量 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uey14NRZvw4Sk1yTv9es" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('batteryLevel') }}</view>
<view class="info-status-row">
<text class="info-status" :class="batteryLevelValueClass">{{ batteryLevelValue }}</text>
</view>
</view>
<image v-if="batteryLevelValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 应急电池 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uS2HOnyGnRtsFSITXTML" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('emergencyBattery') }}</view>
<view class="info-status-row">
<text class="info-status" :class="emergencyBatteryValueClass">{{ emergencyBatteryValue }}</text>
</view>
</view>
<image v-if="emergencyBatteryValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 外部电源 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uvPIJeZ2t0ibWhtkMDFS" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('externalPower') }}</view>
<view class="info-status-row">
<text class="info-status" :class="externalPowerValueClass">{{ externalPowerValue }}</text>
</view>
</view>
<image v-if="externalPowerValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 设备覆盖 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/u3s9Zaez08c6UmTeWrrO" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('deviceCover') }}</view>
<view class="info-status-row">
<text class="info-status" :class="deviceCoverValueClass">{{ deviceCoverValue }}</text>
</view>
</view>
<image v-if="deviceCoverValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 设备支架 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uvSloeJWiMog0rFtTf3p" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('deviceBracket') }}</view>
<view class="info-status-row">
<text class="info-status" :class="deviceBracketValueClass">{{ deviceBracketValue }}</text>
</view>
</view>
<image v-if="deviceBracketValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 烟雾探测器灰尘 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/ukOWk5q3BvnRj9NM2159" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('smokeDetectorDust') }}</view>
<view class="info-status-row">
<text class="info-status" :class="smokeDetectorDustValueClass">{{ smokeDetectorDustValue }}</text>
</view>
</view>
<image v-if="smokeDetectorDustValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 集线器连接 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uQ8ss05eMKtGTAKyY8wn" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('hubConnection') }}</view>
<view class="info-status-row">
<text class="info-status" :class="hubConnectionValueClass">{{ hubConnectionValue }}</text>
</view>
</view>
<image v-if="hubConnectionValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 集线器信号强度 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/ucsKQwznK8ealV9ZYa9A" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('hubSignalStrength') }}</view>
<view class="info-status-row">
<view class="signal-bar">
<view v-for="n in 3" :key="n" class="signal-block" :class="{active: n <= hubSignalStrengthLevel}"></view>
<text class="info-status" :class="hubSignalStrengthValueClass">{{ hubSignalStrengthValue }}</text>
</view>
</view>
</view>
<image v-if="hubSignalStrengthValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 连接模式 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/upPmKgC0ALfaDKgEZNhq" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('connectionMode') }}</view>
<view class="info-status-row">
<text class="info-status" :class="connectionModeValueClass">{{ connectionModeValue }}</text>
</view>
</view>
<image v-if="connectionModeValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- LORA信号强度 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uWupPtOsM1ppwoho7FPb" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('loraSignalStrength') }}</view>
<view class="info-status-row">
<view class="signal-bar">
<view v-for="n in 3" :key="n" class="signal-block" :class="{active: n <= loraSignalStrengthLevel}"></view>
<text class="info-status" :class="loraSignalStrengthValueClass">{{ loraSignalStrengthValue }}</text>
</view>
</view>
</view>
<image v-if="loraSignalStrengthValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- BLE信号强度 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uWupPtOsM1ppwoho7FPb" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('bleSignalStrength') }}</view>
<view class="info-status-row">
<view class="signal-bar">
<view v-for="n in 3" :key="n" class="signal-block" :class="{active: n <= bleSignalStrengthLevel}"></view>
<text class="info-status" :class="bleSignalStrengthValueClass">{{ bleSignalStrengthValue }}</text>
</view>
</view>
</view>
<image v-if="bleSignalStrengthValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- LORA发射功率 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uXMWhTbtL9IvqjqK5Zd8" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('loraTransmitPower') }}</view>
<view class="info-status-row">
<view class="signal-bar">
<view v-for="n in 3" :key="n" class="signal-block" :class="{active: n <= loraTransmitPowerLevel}"></view>
</view>
</view>
</view>
<image v-if="loraTransmitPowerValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- BLE发射功率 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uXMWhTbtL9IvqjqK5Zd8" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('bleTransmitPower') }}</view>
<view class="info-status-row">
<view class="signal-bar">
<view v-for="n in 3" :key="n" class="signal-block" :class="{active: n <= bleTransmitPowerLevel}"></view>
</view>
</view>
</view>
<image v-if="bleTransmitPowerValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- 中继器 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/udFC7PhPKzbGY74eeM2Y" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('repeater') }}</view>
<view class="info-status-row">
<text class="info-status" :class="repeaterValueClass">{{ repeaterValue }}</text>
</view>
</view>
<image v-if="repeaterValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
<view class="divider"></view>
</view>
<!-- NC接口 -->
<view class="info-item">
<image class="iconfont info-icon" src="https://api.ccttiot.com/smartmeter/img/static/uojYE1PJ5UCInHIlR0tW" mode="aspectFill"></image>
<view class="info-content">
<view class="info-title">{{ $i18n.t('ncInterface') }}</view>
<view class="info-status-row">
<text class="info-status" :class="ncInterfaceValueClass">{{ ncInterfaceValue }}</text>
</view>
</view>
<image v-if="ncInterfaceValueClass == 'red'" style="width: 60rpx;height: 60rpx;" src="https://api.ccttiot.com/smartmeter/img/static/uw31nuDEs8OOlS36kYE3" mode=""></image>
</view>
</view>
<!-- 底部摘要 -->
<view class="device-summary">
<view>{{xqobj.productName}}{{$i18n.t('deviceModel')}}</view>
<view>{{ $i18n.t('hardware') }}</view>
<view>{{ $i18n.t('firmware') }}</view>
<view>{{$i18n.t('deviceMac')}}{{xqobj.mac}}</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
// 烟雾探测器状态(原 valueKey: smokeDetectorStatusValue
smokeDetectorStatusValue: this.$i18n.t('smokeDetectorStatusValue'),
smokeDetectorStatusValueClass: 'red',
// 温度火灾范围(原 valueKey: temperatureFireValue
temperatureFireValue: this.$i18n.t('temperatureFireValue'),
temperatureFireValueClass: '',
// CO PPM原 valueKey: coPpmValue
coPpmValue: this.$i18n.t('coPpmValue'),
coPpmValueClass: '',
// VOC PPM原 valueKey: vocPpmValue
vocPpmValue: this.$i18n.t('vocPpmValue'),
vocPpmValueClass: '',
// 温度摄氏度(原 valueKey: temperatureChange
temperatureChangeValue: this.$i18n.t('temperatureChange'),
temperatureChangeValueClass: '',
// 电池电量(原 value: 100%
batteryLevelValue: '100%',
batteryLevelValueClass: '',
// 应急电池(原 valueKey: has
emergencyBatteryValue: this.$i18n.t('has'),
emergencyBatteryValueClass: '',
// 外部电源(原 valueKey: no
externalPowerValue: this.$i18n.t('no'),
externalPowerValueClass: '',
// 设备覆盖(原 valueKey: open
deviceCoverValue: this.$i18n.t('open'),
deviceCoverValueClass: 'red',
// 设备支架(原 valueKey: normal
deviceBracketValue: this.$i18n.t('normal'),
deviceBracketValueClass: '',
// 烟雾探测器灰尘(原 valueKey: normal
smokeDetectorDustValue: this.$i18n.t('normal'),
smokeDetectorDustValueClass: '',
// 集线器连接(原 valueKey: connected
hubConnectionValue: this.$i18n.t('connected'),
hubConnectionValueClass: '',
// 集线器信号强度(原 value: -95dBm, subValue: 2
hubSignalStrengthValue: '-95(dBm)',
hubSignalStrengthLevel: 2,
hubSignalStrengthValueClass: '',
// 连接模式(原 valueKey: wired
connectionModeValue: this.$i18n.t('wired'),
connectionModeValueClass: '',
// LORA信号强度原 value: -95dBm, subValue: 2
loraSignalStrengthValue: '-95(dBm)',
loraSignalStrengthLevel: 2,
loraSignalStrengthValueClass: '',
// BLE信号强度原 value: -95dBm, subValue: 2
bleSignalStrengthValue: '-95(dBm)',
bleSignalStrengthLevel: 2,
bleSignalStrengthValueClass: '',
// LORA发射功率原 subValue: 3
loraTransmitPowerLevel: 3,
loraTransmitPowerValueClass: '',
// BLE发射功率原 subValue: 1
bleTransmitPowerLevel: 1,
bleTransmitPowerValueClass: '',
// 中继器(原 valueKey: none
repeaterValue: this.$i18n.t('none'),
repeaterValueClass: '',
// NC接口原 valueKey: enabled
ncInterfaceValue: this.$i18n.t('enabled'),
ncInterfaceValueClass: '',
id:'',
xqobj:{},
isRefreshing:false,
}
},
onLoad(option) {
this.id = option.id
this.getxq()
},
methods: {
// 下拉刷新
onRefresh() {
this.isRefreshing = true
setTimeout(()=>{
this.isRefreshing = false
this.getxq()
},1000)
},
// 点击进行设备修改
btnrdit(){
uni.navigateTo({
url:'/pages/device/yanganedit?id=' + this.id
})
},
// 进行设备详情请求
getxq(){
this.$http.get(`/bst/device/detail?id=${this.id}`).then(res => {
if(res.code == 200){
this.xqobj = res.data
}
})
},
// 点击返回上一级
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;
}
.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 .info-item:nth-child(11){
margin-bottom: 30rpx;
}
.info-card .info-item:nth-child(12){
border-top: 1px solid #f2f2f2;
}
.info-card {
.info-item {
display: flex;
align-items: flex-start;
padding: 0 24rpx 0 32rpx;
position: relative;
min-height: 80rpx;
background: #fff;
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: #727272;
font-weight: 500;
}
.info-status-row {
display: flex;
align-items: center;
margin-top: 6rpx;
min-height: 32rpx;
.info-status {
font-size: 26rpx;
color: #3D3D3D;
&.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>