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