fastbee/yack-mini/miniprogram/utils/measure-point.js
2026-09-27 14:46:05 +08:00

114 lines
3.1 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.

/**
* 测点本地存储(蓝牙网关测点链路)
* 当前测点 ID(前端手动输入,作为数据唯一归属)+ 采集模式(1手动确认/2自动上传,纯前端行为)
*/
const MODE_KEY = 'yack_collect_mode';
const POINT_ID_KEY = 'yack_measure_point_id';
// 采集模式:1=手动确认(数据需点击确认才上报)、2=自动上传(默认)
const COLLECT_MODE = {
MANUAL: 1,
AUTO: 2,
};
/**
* 测点唯一识别号格式:**纯数字**,长度 1-64
*
* 2026-09-27 从 `^[A-Za-z0-9_-]{1,64}$` 收紧为纯数字(业务侧测点号即数字编号)。
* ⚠️ 只收紧前端:后端 `MeasurePointServiceImpl#MEASURE_POINT_ID_PATTERN` 仍是宽松的
* `^[A-Za-z0-9_-]{1,64}$`(存量数据/老版本小程序兼容)。前端是后端的真子集,
* 不会产出后端拒绝的 topic,因此这层不对称是安全的;若要两侧完全一致需同步改 Java。
*/
const MEASURE_POINT_ID_REGEX = /^\d{1,64}$/;
/**
* 校验测点唯一识别号格式是否合法
* @param {string} measurePointId
* @returns {boolean}
*/
function isValidMeasurePointId(measurePointId) {
return !!measurePointId && MEASURE_POINT_ID_REGEX.test(measurePointId.trim());
}
/**
* 获取当前测点 ID
* @returns {string} 未设置返回 ''
*/
function getMeasurePointId() {
try {
return wx.getStorageSync(POINT_ID_KEY) || '';
} catch (e) {
console.error('[MeasurePoint] getMeasurePointId error:', e);
return '';
}
}
/**
* 设置当前测点 ID
* @param {string} measurePointId
* @returns {boolean} 格式是否合法(不合法也不写入,避免脏态)
*/
function setMeasurePointId(measurePointId) {
const trimmed = (measurePointId || '').trim();
if (trimmed && !MEASURE_POINT_ID_REGEX.test(trimmed)) {
console.warn('[MeasurePoint] 测点ID格式非法, 拒绝写入:', trimmed);
return false;
}
try {
wx.setStorageSync(POINT_ID_KEY, trimmed);
return true;
} catch (e) {
console.error('[MeasurePoint] setMeasurePointId error:', e);
return false;
}
}
/**
* 获取采集模式
* @returns {number} COLLECT_MODE
*/
function getCollectMode() {
try {
const mode = wx.getStorageSync(MODE_KEY);
return mode === COLLECT_MODE.MANUAL ? COLLECT_MODE.MANUAL : COLLECT_MODE.AUTO;
} catch (e) {
console.error('[MeasurePoint] getCollectMode error:', e);
return COLLECT_MODE.AUTO;
}
}
/**
* 设置采集模式
* @param {number} mode COLLECT_MODE
*/
function setCollectMode(mode) {
try {
wx.setStorageSync(MODE_KEY, mode === COLLECT_MODE.MANUAL ? COLLECT_MODE.MANUAL : COLLECT_MODE.AUTO);
} catch (e) {
console.error('[MeasurePoint] setCollectMode error:', e);
}
}
/**
* 清除测点 ID(退出登录等场景)
*/
function clearMeasurePoint() {
try {
wx.removeStorageSync(POINT_ID_KEY);
wx.removeStorageSync(MODE_KEY);
} catch (e) {
console.error('[MeasurePoint] clearMeasurePoint error:', e);
}
}
module.exports = {
COLLECT_MODE,
MEASURE_POINT_ID_REGEX,
isValidMeasurePointId,
getMeasurePointId,
setMeasurePointId,
getCollectMode,
setCollectMode,
clearMeasurePoint,
};