congming_huose-apk/common/utils/iotFxCover.js

67 lines
2.2 KiB
JavaScript
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.

/**
* 设备盖子 iotData.fx / 同类字段value 约定 0=打开1=关闭。
* 优先展示 desc无有效 value 时用 desc 多语言关键词判断。
*/
export function isFxCoverOpen(fx) {
if (!fx || typeof fx !== 'object') return false
const v = fx.value
if (v !== undefined && v !== null && v !== '') {
if (v === 0 || v === '0' || v === false) return true
if (v === 1 || v === '1' || v === true) return false
}
const raw = fx.desc
if (raw === undefined || raw === null) return false
const s = String(raw).trim()
if (!s) return false
const closedHintsCjk = ['关闭', '合上', '閉じ', '閉ま']
for (const h of closedHintsCjk) {
if (s.indexOf(h) >= 0) return false
}
if (/\b(closed?|shut)\b/i.test(s)) {
return false
}
if (/(geschlossen|fermé|ferme|cerrad[oa]|chius[oa]|закрыт|закрыто)/i.test(s)) {
return false
}
const openHintsCjk = ['打开', '开启', '开盖', '開い', '開いてい']
for (const h of openHintsCjk) {
if (s.indexOf(h) >= 0) return true
}
const openWordRe =
/(^|[^a-z])open($|[^a-z])|opened|opening|geöffnet|geoffnet|ouvert|abiert[oa]?|aperto|открыт|открыто/i
if (openWordRe.test(s)) return true
return false
}
/**
* 与 fx 同步的展示文案:有 desc 用 desc否则用 open/close。
*/
export function deviceCoverDisplayText(fx, tOpen, tClose, tNoData) {
if (!fx || typeof fx !== 'object') return tNoData
const d = fx.desc
if (d !== undefined && d !== null && String(d).trim() !== '') {
return String(fx.desc)
}
const v = fx.value
if (v === undefined || v === null || v === '') return tNoData
return isFxCoverOpen(fx) ? tOpen : tClose
}
/**
* 标量字段(如 HW1.case_opened与 fx.value 同约定0=开1=关。
*/
export function isCoverOpenFromScalar(raw) {
if (raw === undefined || raw === null || raw === '') return false
if (raw === 0 || raw === '0' || raw === false) return true
if (raw === 1 || raw === '1' || raw === true) return false
const s = String(raw).trim()
if (s === '0' || s === 'false') return true
if (s === '1' || s === 'true') return false
const n = Number(s)
if (!Number.isNaN(n)) {
if (n === 0) return true
if (n === 1) return false
}
return false
}