import request from '@/api/http/client' // 后端就绪后置为 false 即可恢复真实请求。 const USE_MOCK = true // 模拟设备列表数据(后端 /device/list 就绪后删除)。 const MOCK_DEVICES = [ { id: 1, name: '客厅体征监测仪', model: 'ED713', online: true }, { id: 2, name: '卧室体征监测仪', model: 'ED713', online: false }, { id: 3, name: '书房跌倒检测雷达', model: 'ED719', online: true }, { id: 4, name: '走廊跌倒检测雷达', model: 'ED719', online: false } ] /** * 获取指定场所下的设备列表。 * 约定:data 为数组,每项至少含 { id, name, model, online },model 取值 ED713 | ED719。 * @param {*} sceneId 场景 id,全部/未选择时可传 null */ export function getDeviceList(sceneId) { if (USE_MOCK) { // 模拟网络延迟,让 loading 态可见。 return new Promise((resolve) => setTimeout(() => resolve(MOCK_DEVICES), 500)) } return request.get('/device/list', { sceneId }) } // 模拟 ED713 实时体征数据(后端 /device/vitals 就绪后删除)。 // 字段与 web 端 runTimeInfo.properties 对齐;枚举值见 detail 页映射表。 const MOCK_VITALS = { heartRate: 72, respiratoryRate: 16, bodyMovement: 3, moveState: 3, onbedStatus: 1, bodyStatus: 2, bodyPosition: 8 } // 心率读数模拟状态:跨调用保留最近 50 个读数(与 web 端 pageSize:50 一致), // 每次轮询推进 2~3 个新读数、挤出最旧的——等价于 web 端每 3 秒按 createTime 倒序重拉最新 50 条。 const heartState = { series: [], value: 72 } // 心率读数小幅随机游走(60~90 BPM)。 function driftHeartRate() { heartState.value += Math.round((Math.random() - 0.5) * 4) heartState.value = Math.min(90, Math.max(60, heartState.value)) return heartState.value } // 初始预填 50 个读数,首屏即有完整曲线。 for (let i = 0; i < 50; i++) { heartState.series.push(driftHeartRate()) } // 推进若干新读数并保留最近 50 个。 function pushHeartReadings() { const n = 2 + Math.round(Math.random()) for (let i = 0; i < n; i++) { heartState.series.push(driftHeartRate()) } if (heartState.series.length > 50) { heartState.series = heartState.series.slice(-50) } } /** * 获取 ED713 设备实时体征属性。 * 约定:data 含 { heartRate, respiratoryRate, bodyMovement, moveState, onbedStatus, bodyStatus, bodyPosition }。 * @param {*} deviceId 设备 id */ export function getVitalSigns(deviceId) { if (USE_MOCK) { const heartRate = driftHeartRate() return new Promise((resolve) => setTimeout(() => resolve({ ...MOCK_VITALS, heartRate, deviceId }), 300) ) } return request.get('/device/vitals', { deviceId }) } /** * 获取心率历史序列(与 web 端一致:最近 50 条心率读数、按时间升序喂给面积图)。 * 约定:data 为 number 数组;每次调用推进若干新读数,曲线随轮询向左滚动。 * @param {*} deviceId 设备 id */ export function getHeartRateHistory(deviceId) { if (USE_MOCK) { pushHeartReadings() return new Promise((resolve) => setTimeout(() => resolve([...heartState.series]), 300) ) } return request.get('/device/heart-history', { deviceId }) }