diff --git a/src/moduleIOT/pages/iotCarePlan/FR200.tsx b/src/moduleIOT/pages/iotCarePlan/FR200.tsx index fb50e3c..2ae19d7 100644 --- a/src/moduleIOT/pages/iotCarePlan/FR200.tsx +++ b/src/moduleIOT/pages/iotCarePlan/FR200.tsx @@ -2,6 +2,7 @@ import Taro from "@tarojs/taro"; import dayjs from "dayjs"; import classnames from "classnames"; import { debounce } from "lodash"; + // eslint-disable-next-line import/no-named-as-default import React, { Component, @@ -66,7 +67,482 @@ import { import commandMap from "@/utils/commandMap"; import { Popup } from "@antmjs/vantui"; import { fr200BleCommand } from "@/components/bluetoot/connection/fr200"; - +let datajson = { + ActiveModeItem: { + beganVideo: null, + combineData: [], + id: 154, + instrumentModel: "FR200", + instrumentType: 2, + isCabinMode: null, + isNew: 0, + lock: false, + lockCompanyTag: null, + lockCompanyTagArray: [], + lockWechatTag: null, + lockWechatTagArray: [], + modeBanner: "https://flossom.yq-h5.cn/image//statics/2024/03/14/v2-3b7111f4ac41cf4a139fba4f0cc54f21_720w_20240314175626A632.jpg", + modeClass: 1, + modeDesc: "基础班脸部", + modeName: "基础班脸部", + modeTime: "00:02:00", + modeTimeStr: "02:00", + modeType: "face", + modeVideo: "https://flossom.yq-h5.cn/image//statics/2024/03/14/497728332_nb2-1-16_20240314175725A633.mp4", + openSourceData: [], + pauseVideo: null, + preparationVideo: null, + serviceData: null, + status: 0, + }, + currentServiceData: { + createBy: null, + createTime: "2024-03-15 14:15:14", + id: 169, + modeId: 154, + remark: null, + serviceEndTime: "00:02:00", + serviceEndTimeStr: "02:00", + serviceStartTime: "00:00:00", + serviceStartTimeStr: "00:00", + startSource: "https://flossom.yq-h5.cn/image//statics/2024/03/14/v2-5363f74dedf1bb14baf92e09744e49c9_720w_20240314180057A635.gif", + startTimeArray: null, + stopSource: "https://flossom.yq-h5.cn/image//statics/2024/03/14/v2-0584e53b800e6ed28b4a228fedb8cb8d_720w_20240314180040A634.gif", + updateBy: null, + updateTime: null, + currentTime: "00:00", + }, + dataArray: [ + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 5, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "standby", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 211, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "standby", + }, { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 21, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 21, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "standby", + }, { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 251, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 321, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 271, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 219, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 271, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 421, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 251, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 231, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 211, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 261, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 261, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 721, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 121, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 321, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 221, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 216, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 212, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 211, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 721, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 121, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "working", + }, + ], + id: "2024-03-18 15:50:39", + instrumentId: 92, + instrumentName: "lzw的FR200测试", + jsonStatus: { + battery: 4, + commandType: "DeviceStatusSync", + deviceSyncStatusType: "onlySyncStatusToDevice", + gear: 1, + impedance: 21, + isCharging: false, + joulePerSecond: 1, + matrixBattery: 0, + nasolabialOrMandibularOutput: false, + partition: 0, + pointOutChangeSide: false, + totalWorkingMinutes: 2, + totalWorkingSeconds: 1, + workMode: "face", + workStatus: "standby", + }, + modeId: 154, + modeName: "基础班脸部", + workMode: "face", +} const deviceToolKitInstanceFR200 = new DeviceToolKitWM("FR200"); let deviceToolKitInstance = deviceToolKitInstanceFR200; @@ -227,7 +703,7 @@ class IotCarePlanFR200 extends Component { pointOutChangeSide: false, // 交叉输出点 impedance: 107, // 阻抗/能量等级:1档<200 200<2档<280 280<3档<360 后面以此类推每加一档+80抗阻 }; - + // 1档 等于0<200,2档等于200<280,3档等于280<360 /** FR200模式类型:名称 */ ModeTypeArray: string[] = [ "all", @@ -247,9 +723,9 @@ class IotCarePlanFR200 extends Component { this.getInstrumentClockSummary(); this.getInstrumentClockDetail(); } - componentDidMount() {} + componentDidMount() { } - componentWillUnmount() {} + componentWillUnmount() { } componentDidShow() { console.log("页面显示了"); @@ -583,7 +1059,7 @@ class IotCarePlanFR200 extends Component { this.onNursingTap(); // 倒计时弹窗: 倒计时完成后,自动开始,并判断弹窗 let downNum = CountDownTime[this.state.ActiveModeItem.modeType] || 3; - this.showCountdownFun(downNum, () => {}); + this.showCountdownFun(downNum, () => { }); }, 500); return; @@ -609,7 +1085,7 @@ class IotCarePlanFR200 extends Component { }; // 绘制能量图 - drawProwerPicture() {} + drawProwerPicture() { } /** 切换光照 */ onSwitchChange = async () => { @@ -1480,6 +1956,7 @@ class IotCarePlanFR200 extends Component { /** 获取小程序本地缓存的历史记录 */ getFR200NursingHistory() { this.FR200NursingHistory = Taro.getStorageSync("FR200NursingHistory"); + console.log(this.FR200NursingHistory, '获取本地数据++++++++++++++++++++++++++++++++++++++++++'); // 是否同步历史记录 let isSyncHistory = Taro.getStorageSync("isSyncHistory"); @@ -1586,33 +2063,149 @@ class IotCarePlanFR200 extends Component { } }; - todoPromise = () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(); + // todoPromise = () => { + // return new Promise((resolve, reject) => { + // setTimeout(() => { + // resolve(); + // }); + // }); + // }; + // 脸部one + todoPromise = async () => { + const nowFR200NursingHistory = Taro.getStorageSync("FR200NursingHistory"); + console.log(nowFR200NursingHistory,'nowFR200NursingHistory'); + + // 护理脸部 + if (nowFR200NursingHistory.workMode === 'face') { + // 把working=工作中的状态数据筛选出来 + let filtered = nowFR200NursingHistory.dataArray.filter(item => item.workStatus === 'working'); + console.log(filtered,'filtered'); + + // 能量发数 + filtered = filtered.slice(0, 360); + // 脸部能量 + let faceEnergy = 0 + filtered.forEach(item => { + faceEnergy += item.joulePerSecond + }) + // 计算平均数 + // let sum = filtered.reduce((accumulator, currentValue) => accumulator + currentValue.impedance, 0); + // let average = sum / filtered.length; + + // 最大 + let max: any = Math.max(...filtered.map(item => item.impedance)); + max = this.determineTier(max) + // 最小 + let min: any = Math.min(...filtered.map(item => item.impedance)); + min = this.determineTier(min) + // 平均数最大等级处于2 + let average: any = max / 2 + average = this.determineTier(average) + + // 能量图里面的图谱每10秒为一个数组 + // 创建一个空数组用于存储分组后的结果 + // 创建一个空数组用于存储分组后的结果 + let groupedAa: any[] = []; + // 使用循环遍历数组 aa + for (let i = 0; i < filtered.length; i += 10) { + // 提取每组的三个对象 + let group = filtered.slice(i, i + 10); + + // 找到组中最大的 name 值 + let maxName = Math.max(...group.map(obj => obj.impedance)); + + // 计算并存储每组的平均数 + let average = this.determineTier(maxName / 2); + // let average = maxName / 2; + + // 将包含该组对象和平均数的对象添加到 groupedAa 数组中 + groupedAa.push({ objects: group, average: average }); + } + // 转换时间 + // 将分钟转换为两位数字的字符串 + // let minuteString = filtered.jsonStatus.totalWorkingMinutes.toString().padStart(2, '0'); + + // // 将秒转换为两位数字的字符串 + // let secondString = filtered.jsonStatus.totalWorkingMinutes.toString().padStart(2, '0'); + + // 拼接分钟和秒的字符串 + // let result = `${minuteString}:${secondString}`; + let result = `02:01`; + // let GearData = this.state.GearData; + // // 水分报告 + // let Allnum=0 + // GearData.forEach(e => { + // Allnum =+e.forehead + // }); + // // 向下取整 + // Allnum = Math.floor(Allnum / 3); + + let nursingData = { + nursingTime:result, + nursingData:JSON.stringify({ + faceEnergy, max, min, average, groupedAa + }) + } + + return nursingData + } else { + let GearData = this.state.GearData; + // 肌肤报告 + let Allnum=0 + GearData.forEach(e => { + Allnum =+e.forehead }); - }); - }; + // 向下取整 + Allnum = Math.floor(Allnum / 3); + let nursingData = { + + nursingData:JSON.stringify({ + Allnum,GearData + }) + } + return nursingData + } + + + } + // 计算挡位 + determineTier = (sun) => { + // 定义每档的范围 + const tiers = [0, 200, 280, 360, 440, 520, 600, 680, 760, 840]; + + // 遍历每一档的范围,找到 sun 所属的档 + for (let i = 0; i < tiers.length; i++) { + if (sun < tiers[i + 1]) { + return i + 1; + } + } + // 如果 sun 不在任何一档范围内,返回默认档或处理错误 + return '10'; + } /** 提交护理记录:完成护理后自动调用,会跳转页面 */ PostNursingLogClock = async (data: any = null, isJump = true) => { // todo 建议写一个Promise异步函数,用 await 执行,在提交前处理好数据 - return; + // return; let { currentDevice, ActiveModeItem } = this.state; let params = {}; if (data) { params = data; } else { + params = { instrumentId: currentDevice.id, instrumentName: currentDevice.name, modeId: ActiveModeItem.id, modeName: ActiveModeItem.modeName, nursingTime: s_to_hms(this.elapsedTime), + }; } - + let res1: any = await this.todoPromise() + console.log(res1, '查看返回数据'); + params = { ...params, ...res1 } let res: any = await InstrumentInfo.apiNursingLog.addLog(params); console.log("PostNursingLogClock", res); if (res.data.code === 200) { @@ -2078,9 +2671,9 @@ class IotCarePlanFR200 extends Component { deviceInfo={currentDevice} close={this.connectionClose} isDisconnect={!isConnectionBlutoot} - offlineChange={() => {}} + offlineChange={() => { }} pairingChange={this.pairingChange} - upgradeFun={() => {}} + upgradeFun={() => { }} /> )} diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index 88303c3..5beac18 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -844,6 +844,10 @@ class Index extends Component { // 仅开发者工具调试使用 const platform = Taro.getSystemInfoSync().platform; + setStorageSync("instrument_detail", item); + this.setState({ connectInstrument: item }); + setTimeout(() => this.goIot()); + return; if (platform === "devtools") { setStorageSync("instrument_detail", item); this.setState({ connectInstrument: item });