114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
/**
|
||
* 测点本地存储(蓝牙网关测点链路)
|
||
* 当前测点 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,
|
||
};
|