|
|
|
|
@ -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,
|
|
|
|
|
@ -10,7 +11,7 @@ import React, {
|
|
|
|
|
useState,
|
|
|
|
|
} from "react";
|
|
|
|
|
|
|
|
|
|
// import Echarts from "./components/Echart/index";
|
|
|
|
|
import Echarts from "./components/Echart/index";
|
|
|
|
|
import Gears from "./components/Gears/index";
|
|
|
|
|
import {
|
|
|
|
|
Block,
|
|
|
|
|
@ -40,8 +41,8 @@ import ConnectionBluetoot from "@/components/bluetoot/connection";
|
|
|
|
|
/* 本页组件 */
|
|
|
|
|
import ElectricityView from "./components/ElectricityView/index";
|
|
|
|
|
import ModeListView from "./components/ModeList/FR200";
|
|
|
|
|
import ModeContent from "./components/ModeContent/FR200";
|
|
|
|
|
import Footer from "./components/Footer/FR200";
|
|
|
|
|
import WaterTest from "./components/WaterTest/index";
|
|
|
|
|
/* 本页组件 END */
|
|
|
|
|
|
|
|
|
|
import { go, getStorageSync, setStorageSync, msg } from "@/utils/traoAPI";
|
|
|
|
|
@ -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;
|
|
|
|
|
|
|
|
|
|
@ -86,20 +562,7 @@ const MODE_WORKING_ENUM = {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 不同模式启动前的倒计时时间
|
|
|
|
|
let CountDownTime = {
|
|
|
|
|
powerfulSoothing: 6,
|
|
|
|
|
Stability: 3,
|
|
|
|
|
Brighten: 3,
|
|
|
|
|
FirmSkin: 3,
|
|
|
|
|
MaskCustom: 6,
|
|
|
|
|
BrightenStand: 6,
|
|
|
|
|
FirmSkinStand: 6,
|
|
|
|
|
SmallpoxSoothingPro: 6,
|
|
|
|
|
SmallpoxSoothing: 4,
|
|
|
|
|
MixNursePro: 6,
|
|
|
|
|
MixNurse: 4,
|
|
|
|
|
ScalpCare: 6,
|
|
|
|
|
};
|
|
|
|
|
let CountDownTime = {};
|
|
|
|
|
|
|
|
|
|
let DeviceSyncData = {
|
|
|
|
|
totalWorkingMinutes: 0,
|
|
|
|
|
@ -145,7 +608,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
/** 连接设备 End */
|
|
|
|
|
|
|
|
|
|
/** 护理过程 */
|
|
|
|
|
isStandStatus: false, // 当前模式是否舱体/支架模式
|
|
|
|
|
isRuningTest: false, // 是否正在测试
|
|
|
|
|
isShowStepTips: false, // 是否显示介绍步骤弹窗
|
|
|
|
|
isConnectionBlutoot: true, // 是否已连接蓝牙
|
|
|
|
|
isShowNurse: true, // 是否开始并显示护理 FR200默认已经开始准备护理
|
|
|
|
|
@ -197,8 +660,6 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
// 上一次护理记录未生成,是否继续连接设备
|
|
|
|
|
isShowReReadRecordConnect: false,
|
|
|
|
|
|
|
|
|
|
// 按钮是否不可运行:FR200不可禁用
|
|
|
|
|
isFooterBtnDisabled: false,
|
|
|
|
|
// isFirstEntryMode: false, // 模式首次打开
|
|
|
|
|
|
|
|
|
|
isShowHistoryMsg: false, // 是否显示正在同步历史
|
|
|
|
|
@ -227,7 +688,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
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",
|
|
|
|
|
@ -377,7 +838,6 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
isConnectionBlutoot: false, // 断开蓝牙
|
|
|
|
|
// isShowCountdown: false, // 关闭倒计时,防止倒计时还在运行
|
|
|
|
|
});
|
|
|
|
|
this.footerIsDisabled();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
GetModeList = async (id) => {
|
|
|
|
|
@ -491,10 +951,15 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
// 开发中,暂时允许直接切换
|
|
|
|
|
// 每次切换模式时清空一下历史数据
|
|
|
|
|
this.changeItemUpdateFR200NursingHistory();
|
|
|
|
|
this.stepNext(); // 如果切换模式,则不执行开始逻辑
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.onNursingTap("switch");
|
|
|
|
|
}, 800);
|
|
|
|
|
this.stepNext(); // 仅切换模式,不执行开始逻辑
|
|
|
|
|
|
|
|
|
|
// FR200水分测试不可自动运行,需手动点击开始测试,手动启动检测
|
|
|
|
|
// 其他模式可以自动运行
|
|
|
|
|
if (data.modeType !== "moistureTest") {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.onNursingTap("switch");
|
|
|
|
|
}, 800);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
/** 设备运行中切换模式 */
|
|
|
|
|
modeRuningChange() {
|
|
|
|
|
@ -592,9 +1057,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
};
|
|
|
|
|
/** 开始护理按钮:点击开始,页面进行到下一步 */
|
|
|
|
|
onStartNurse = async () => {
|
|
|
|
|
// 如果检查通过,可运行,则执行下一步
|
|
|
|
|
if (!this.footerIsDisabled()) {
|
|
|
|
|
this.stepNext();
|
|
|
|
|
this.stepNext();
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.onNursingTap();
|
|
|
|
|
@ -603,8 +1066,6 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
this.showCountdownFun(downNum, () => { });
|
|
|
|
|
}, 500);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 如果检查失败,则报错
|
|
|
|
|
this.onEmitErrorTips();
|
|
|
|
|
};
|
|
|
|
|
@ -618,10 +1079,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
let { ActiveModeItem } = this.state;
|
|
|
|
|
|
|
|
|
|
// 按钮不可点击时,提示报错
|
|
|
|
|
let isDisabled = this.footerIsDisabled();
|
|
|
|
|
if (isDisabled) {
|
|
|
|
|
this.showTips("检测到您的设备没有紧贴肌肤,请紧贴肌肤后重新尝试");
|
|
|
|
|
}
|
|
|
|
|
this.showTips("检测到您的设备没有紧贴肌肤,请紧贴肌肤后重新尝试");
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@ -1244,7 +1702,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
*/
|
|
|
|
|
onNursingTap(type = "") {
|
|
|
|
|
// 如果已禁止运行,则停止执行后续逻辑
|
|
|
|
|
if (this.state.isFooterBtnDisabled) return;
|
|
|
|
|
if (this.state.isRuningTest) return;
|
|
|
|
|
// 防止多次点击
|
|
|
|
|
if (this.state.hadClickStart) return;
|
|
|
|
|
this.setState({
|
|
|
|
|
@ -1372,22 +1830,9 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
this.workJsonStatus.workMode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
this.setState({
|
|
|
|
|
isFooterBtnDisabled: false,
|
|
|
|
|
});
|
|
|
|
|
if (this.workJsonStatus.workMode) {
|
|
|
|
|
// FR200可能要判断是否水分测试 Test
|
|
|
|
|
console.log("this.workJsonStatus.workMode", this.workJsonStatus.workMode);
|
|
|
|
|
if (this.workJsonStatus.workMode.indexOf("Stand") > -1) {
|
|
|
|
|
console.log(
|
|
|
|
|
"this.workJsonStatus.workMode",
|
|
|
|
|
this.workJsonStatus.workMode
|
|
|
|
|
);
|
|
|
|
|
this.setState({
|
|
|
|
|
isStandStatus: true,
|
|
|
|
|
});
|
|
|
|
|
setTimeout(() => this.footerIsDisabled(), 100);
|
|
|
|
|
}
|
|
|
|
|
// console.log("现在运行的模式:", this.workJsonStatus.workMode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2.判断是否已存在缓存的护理记录:如果没有历史,则缓存
|
|
|
|
|
@ -1501,6 +1946,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
/** 获取小程序本地缓存的历史记录 */
|
|
|
|
|
getFR200NursingHistory() {
|
|
|
|
|
this.FR200NursingHistory = Taro.getStorageSync("FR200NursingHistory");
|
|
|
|
|
console.log(this.FR200NursingHistory, '获取本地数据++++++++++++++++++++++++++++++++++++++++++');
|
|
|
|
|
|
|
|
|
|
// 是否同步历史记录
|
|
|
|
|
let isSyncHistory = Taro.getStorageSync("isSyncHistory");
|
|
|
|
|
@ -1604,14 +2050,107 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
Taro.removeStorageSync("FR200NursingHistory");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
todoPromise = () => {
|
|
|
|
|
return new Promise<void>((resolve, reject) => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
resolve();
|
|
|
|
|
// todoPromise = () => {
|
|
|
|
|
// return new Promise<void>((resolve, reject) => {
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// resolve();
|
|
|
|
|
// });
|
|
|
|
|
// });
|
|
|
|
|
// };
|
|
|
|
|
// 脸部one
|
|
|
|
|
todoPromise = async () => {
|
|
|
|
|
const nowFR200NursingHistory = Taro.getStorageSync("FR200NursingHistory");
|
|
|
|
|
// 护理脸部
|
|
|
|
|
if (nowFR200NursingHistory.workMode === 'face') {
|
|
|
|
|
// 把working=工作中的状态数据筛选出来
|
|
|
|
|
let filtered = nowFR200NursingHistory.dataArray.filter(item => item.workStatus === 'working');
|
|
|
|
|
// 能量发数
|
|
|
|
|
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:any = this.determineTier(maxName / 2);
|
|
|
|
|
// let average = maxName / 2;
|
|
|
|
|
if(average >=1) {
|
|
|
|
|
average=average-1
|
|
|
|
|
average=average *10
|
|
|
|
|
}
|
|
|
|
|
// 将包含该组对象和平均数的对象添加到 groupedAa 数组中
|
|
|
|
|
groupedAa.push(average);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let nursingData = {
|
|
|
|
|
// nursingTime:result,
|
|
|
|
|
nursingData: JSON.stringify({
|
|
|
|
|
faceEnergy, max, min, average, groupedAa, filtered: filtered.length, workMode: nowFR200NursingHistory.workMode
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 执行,在提交前处理好数据
|
|
|
|
|
@ -1622,15 +2161,19 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
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) {
|
|
|
|
|
@ -1650,7 +2193,9 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
this.setState({
|
|
|
|
|
isShowNursingSuccess: false,
|
|
|
|
|
});
|
|
|
|
|
this.goFaceReport(); // 跳转
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.goFaceReport(res1, ActiveModeItem.id); // 跳转
|
|
|
|
|
}, 2000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -1806,10 +2351,31 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 完成护理提交:跳转护理报告页 */
|
|
|
|
|
goFaceReport = () => {
|
|
|
|
|
goFaceReport = (data, id) => {
|
|
|
|
|
let nursingData = JSON.parse(data.nursingData)
|
|
|
|
|
// 跳转前置空定时器,防止重复提交
|
|
|
|
|
if (currentTimeTimer) clearInterval(currentTimeTimer);
|
|
|
|
|
go("/pages/face_report/face_report?id=" + this.state.currentDevice.id);
|
|
|
|
|
if (['face', 'eyes', 'nasolabialFold', 'mandibularLine', 'headLiftingPro'].includes(nursingData.workMode)) {
|
|
|
|
|
let obj = {
|
|
|
|
|
modeName: nursingData.modeName,
|
|
|
|
|
data: nursingData
|
|
|
|
|
}
|
|
|
|
|
let report = true;
|
|
|
|
|
go(
|
|
|
|
|
"/recoding/pages/face_report_one/face_report_one?id=" +
|
|
|
|
|
id +
|
|
|
|
|
"&report=" +
|
|
|
|
|
report + "&obj=" +
|
|
|
|
|
JSON.stringify(obj)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
} else if ('moistureTest' === nursingData.workMode) {
|
|
|
|
|
console.log('水分测试');
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
go("/pages/face_report/face_report?id=" + this.state.currentDevice.id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 完成配对
|
|
|
|
|
@ -1826,7 +2392,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
this.setState({
|
|
|
|
|
isConnectShow: false,
|
|
|
|
|
});
|
|
|
|
|
Taro.reLaunch({ url: "/pages/index/index" });
|
|
|
|
|
Taro.switchTab({ url: "/pages/index/index" });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 手动护理模式切换:提示是否保存护理
|
|
|
|
|
@ -1887,24 +2453,8 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
};
|
|
|
|
|
/** 初次护理信息弹窗 END */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name 设备运行开关按钮是否禁用
|
|
|
|
|
* @description 判断所选模式与设备连接状态是否一致
|
|
|
|
|
* @returns 返回true则禁用
|
|
|
|
|
*/
|
|
|
|
|
footerIsDisabled = () => {
|
|
|
|
|
// 默认不禁用,FR200无法禁用
|
|
|
|
|
let isFooterBtnDisabled = false;
|
|
|
|
|
|
|
|
|
|
// this.setState({
|
|
|
|
|
// isFooterBtnDisabled: isFooterBtnDisabled,
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
return isFooterBtnDisabled; // 数据更新有延迟,返回用于判断
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
customBack = () => {
|
|
|
|
|
Taro.reLaunch({ url: "/pages/index/index" });
|
|
|
|
|
Taro.switchTab({ url: "/pages/index/index" });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onModeLockOpen = async () => {
|
|
|
|
|
@ -1948,7 +2498,7 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
isFirstTipShow,
|
|
|
|
|
nurseInfo,
|
|
|
|
|
isShowReReadRecordSave,
|
|
|
|
|
isFooterBtnDisabled,
|
|
|
|
|
isRuningTest,
|
|
|
|
|
isShowHistoryMsg,
|
|
|
|
|
isModeLock,
|
|
|
|
|
} = this.state;
|
|
|
|
|
@ -2181,30 +2731,30 @@ class IotCarePlanFR200 extends Component<any, any> {
|
|
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
{ActiveModeItem.combineData && (
|
|
|
|
|
<ModeContent
|
|
|
|
|
isShowNurse={isShowNurse}
|
|
|
|
|
ActiveModeItem={ActiveModeItem}
|
|
|
|
|
ModeStepIndex={ModeStepIndex}
|
|
|
|
|
/>
|
|
|
|
|
{(ActiveModeItem.modeType === "face" ||
|
|
|
|
|
ActiveModeItem.modeType === "eyes") && <Echarts></Echarts>}
|
|
|
|
|
|
|
|
|
|
{(ActiveModeItem.modeType === "maskPenetration" ||
|
|
|
|
|
ActiveModeItem.modeType === "essence") && (
|
|
|
|
|
<Gears
|
|
|
|
|
onEmitMinus={this.handleMinus}
|
|
|
|
|
onEmitAdd={this.handleAdd}
|
|
|
|
|
GearData={GearData}
|
|
|
|
|
></Gears>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
{/* <Echarts></Echarts> */}
|
|
|
|
|
<Gears
|
|
|
|
|
onEmitMinus={this.handleMinus}
|
|
|
|
|
onEmitAdd={this.handleAdd}
|
|
|
|
|
GearData={GearData}
|
|
|
|
|
></Gears>
|
|
|
|
|
{ActiveModeItem.modeType === "moistureTest" && (
|
|
|
|
|
<WaterTest></WaterTest>
|
|
|
|
|
)}
|
|
|
|
|
</View>
|
|
|
|
|
|
|
|
|
|
<Footer
|
|
|
|
|
isDisabled={isFooterBtnDisabled}
|
|
|
|
|
isShowNurse={isShowNurse}
|
|
|
|
|
currentWorkMode={ActiveModeItem.modeType}
|
|
|
|
|
isRuningTest={isRuningTest}
|
|
|
|
|
isStopNurse={isStopNurse}
|
|
|
|
|
onEmitStartNurse={this.onStartNurse}
|
|
|
|
|
onEmitSwitchChange={this.onSwitchChange}
|
|
|
|
|
onEmitEndPlan={this.onEndPlan}
|
|
|
|
|
onEmitErrorTips={this.onEmitErrorTips}
|
|
|
|
|
/>
|
|
|
|
|
</View>
|
|
|
|
|
</Block>
|
|
|
|
|
|