45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
|
|
/**
|
|||
|
|
* 设备详情接口字段 onlineStatus:
|
|||
|
|
* - 0(或字符串 '0')→ 离线,显示顶部离线横幅
|
|||
|
|
* - 1(或字符串 '1')→ 在线,不显示横幅
|
|||
|
|
* - 未返回 / 无法解析 → 不显示横幅
|
|||
|
|
*
|
|||
|
|
* 数据来源:xqobj / sbobj;若根级无 onlineStatus,再读 iotOnlineData.onlineStatus
|
|||
|
|
*/
|
|||
|
|
function pickDeviceRecord(vm) {
|
|||
|
|
if (vm.xqobj && typeof vm.xqobj === 'object' && Object.keys(vm.xqobj).length) {
|
|||
|
|
return vm.xqobj
|
|||
|
|
}
|
|||
|
|
if (vm.sbobj && typeof vm.sbobj === 'object' && Object.keys(vm.sbobj).length) {
|
|||
|
|
return vm.sbobj
|
|||
|
|
}
|
|||
|
|
return null
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function normalizeOnlineStatus(raw) {
|
|||
|
|
if (raw === undefined || raw === null || raw === '') return null
|
|||
|
|
const n = Number(raw)
|
|||
|
|
if (Number.isNaN(n)) return null
|
|||
|
|
return n
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
computed: {
|
|||
|
|
isDeviceOffline() {
|
|||
|
|
const d = pickDeviceRecord(this)
|
|||
|
|
if (!d) return false
|
|||
|
|
let s = d.onlineStatus
|
|||
|
|
if ((s === undefined || s === null || s === '') && d.iotOnlineData) {
|
|||
|
|
s = d.iotOnlineData.onlineStatus
|
|||
|
|
}
|
|||
|
|
const n = normalizeOnlineStatus(s)
|
|||
|
|
if (n === null) return false
|
|||
|
|
return n === 0
|
|||
|
|
},
|
|||
|
|
/** 自定义导航 + 固定离线条时,给占位 view 增加的高度 (rpx) */
|
|||
|
|
offlineBannerExtraRpx() {
|
|||
|
|
return this.isDeviceOffline ? 56 : 0
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
}
|