|
|
|
|
|
import { go, getStorageSync, setStorageSync, msg } from "@/utils/traoAPI";
|
|
|
import { getBindInstrumentListApi } from "@/utils/carePlanApi";
|
|
|
import { InstrumentInfo } from "@/utils/Interface";
|
|
|
import dayjs from "dayjs";
|
|
|
import Taro from "@tarojs/taro";
|
|
|
import { minSecToS, s_to_ms, s_to_hms, sleep, s_to_s } from "@/utils/util";
|
|
|
// 设备运行时间校准频率,每多少秒校准一次
|
|
|
const TIME_CALIBRATION_FREQUENCY = 5;
|
|
|
const MODE_WORKING_ENUM = {
|
|
|
STANDBY: "standby", // 待命
|
|
|
WORKING: "working", // 工作
|
|
|
PAUSE: "pause",
|
|
|
END: "end",
|
|
|
};
|
|
|
let WL200Function = {
|
|
|
pop: { //弹窗
|
|
|
onModeLockClose: function () { //该模式即将上线,敬请期待弹窗
|
|
|
this.setState({ isModeLock: false });
|
|
|
},
|
|
|
|
|
|
openStepTips: function () { //每次进入设备运行页,打开首个模式的介绍弹窗
|
|
|
let isFirstEntryModeNot = getStorageSync(
|
|
|
"isFirstEntryMode_" + this.state.currentDevice.id
|
|
|
);
|
|
|
// 1.如果没有持久化不再提示,每次进入都会弹窗提示
|
|
|
if (!isFirstEntryModeNot) {
|
|
|
// 2.必须要有数据才弹窗
|
|
|
if (this.tempModeCurrent.openSourceData.length > 0) {
|
|
|
this.setState({ isShowStepTips: true });
|
|
|
this.handleVideoPause()
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
this.handleVideoPlay()
|
|
|
},
|
|
|
|
|
|
|
|
|
onTipShowClose: function () { // 首次使用介绍弹窗
|
|
|
setStorageSync("first_instrument_" + this.state.currentDevice.id, true);
|
|
|
this.setState({ isFirstTipShow: false });
|
|
|
this.openStepTips(); // 弹出首个模式弹窗
|
|
|
},
|
|
|
|
|
|
cancelEndBtn: function () { //结束护理关闭弹窗
|
|
|
this.setState({
|
|
|
isEndCarePlan: false,
|
|
|
});
|
|
|
},
|
|
|
confirmEndBtn: function () { //结束护理确认弹窗
|
|
|
console.log("confirmEndBtn", this.isCheckNurseTime());
|
|
|
if (this.isCheckNurseTime()) {
|
|
|
this.endNurseFun();
|
|
|
this.cancelEndBtn();
|
|
|
} else {
|
|
|
setTimeout(() => {
|
|
|
this.bluetoothContainer.handleWorkStatus(false, "end");
|
|
|
}, 500);
|
|
|
this.setState({
|
|
|
isEndCarePlan: false,
|
|
|
isNotEnoughTime: true,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
|
|
|
switchModeCurrentFun: function (data) { /** 切换护理模式 */
|
|
|
this.tempModeCurrent = data;
|
|
|
this.setState({
|
|
|
SwitchActiveModeItem: data,
|
|
|
SwitchActiveModeID: data.id,
|
|
|
SwitchModeID: "mode_" + data.id,
|
|
|
});
|
|
|
|
|
|
if (!this.state.isShowNurse) {
|
|
|
console.log("切换护理模式");
|
|
|
this.onEmitErrorTips();
|
|
|
}
|
|
|
},
|
|
|
openModeSwitch: function () { // 打开模式切换弹窗
|
|
|
console.log("openModeSwitch");
|
|
|
let { ActiveModeItem } = this.state;
|
|
|
this.tempModeCurrent = ActiveModeItem;
|
|
|
this.setState({
|
|
|
isSwitchActiveMode: true,
|
|
|
SwitchActiveModeItem: ActiveModeItem,
|
|
|
SwitchActiveModeID: ActiveModeItem.id,
|
|
|
SwitchModeID: "mode_" + ActiveModeItem.id,
|
|
|
});
|
|
|
},
|
|
|
onModeLockOpen: function () {
|
|
|
this.setState({ isModeLock: true });
|
|
|
},
|
|
|
cancelModeSwitchBtn: function () { //护理模式切换- 取消并关闭切换护理模式弹窗
|
|
|
let { ActiveModeItem } = this.state;
|
|
|
this.tempModeCurrent = ActiveModeItem;
|
|
|
this.setState({
|
|
|
isSwitchActiveMode: false,
|
|
|
});
|
|
|
},
|
|
|
confirmModeSwitchBtn: function () { // 弹窗确定切换护理模式
|
|
|
let { SwitchActiveModeItem, isStandStatus } = this.state;
|
|
|
this.cancelModeSwitchBtn();
|
|
|
|
|
|
// 2.检测是否满足最低护理时间
|
|
|
if (this.isCheckNurseTime()) {
|
|
|
// 3.满足时间条件,提示是否保存部分护理记录
|
|
|
this.setState({
|
|
|
isShowTipsSave: true,
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 判断是否连接支架
|
|
|
if (SwitchActiveModeItem.isCabinMode && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
return;
|
|
|
} else if (!SwitchActiveModeItem.isCabinMode && isStandStatus) {
|
|
|
this.showTips(`检测到面罩仍和舱体连接中,请分离后切换`);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this.modeCurrentFun(SwitchActiveModeItem);
|
|
|
|
|
|
this.setState({
|
|
|
ModeType: this.ModeArray[SwitchActiveModeItem.modeClass],
|
|
|
});
|
|
|
},
|
|
|
|
|
|
closeStepTips: function (data) { //使用教程弹窗
|
|
|
if (data.isLocal) {
|
|
|
setStorageSync("isFirstEntryMode_" + this.state.currentDevice.id, true); // 关闭首次进入弹窗
|
|
|
}
|
|
|
this.setState({ isShowStepTips: false });
|
|
|
setTimeout(() => this.handleVideoPlay(), 0)
|
|
|
},
|
|
|
|
|
|
closeNotEnoughTime: function () { //本次护理时间不足弹窗
|
|
|
Taro.removeStorageSync("WL200NursingHistory");
|
|
|
this.setState({
|
|
|
isNotEnoughTime: false,
|
|
|
});
|
|
|
Taro.reLaunch({
|
|
|
url: "/pages/index/index",
|
|
|
});
|
|
|
},
|
|
|
|
|
|
|
|
|
closeErrorTipsText: function () { // 关闭通用错误弹窗
|
|
|
this.setState({
|
|
|
isShowErrorTipsText: false,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
closeTipsSave: function () {// 手动护理模式切换:提示是否保存护理/**仅关闭*/
|
|
|
let { SwitchActiveModeItem, isStandStatus } = this.state;
|
|
|
|
|
|
// 重连中状态赋值false
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
|
|
|
this.setState({
|
|
|
isShowTipsSave: false,
|
|
|
});
|
|
|
|
|
|
// 判断是否连接支架
|
|
|
if (SwitchActiveModeItem.isCabinMode && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
return;
|
|
|
} else if (!SwitchActiveModeItem.isCabinMode && isStandStatus) {
|
|
|
this.showTips(`检测到面罩仍和舱体连接中,请分离后切换`);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 不处于暂停状态时,继续倒计时
|
|
|
if (!this.state.isStopNurse) {
|
|
|
this.resetTimer()
|
|
|
}
|
|
|
},
|
|
|
cancelTipsSave: function () {/**关闭+切换*/
|
|
|
let { isStandStatus } = this.state;
|
|
|
this.setState({
|
|
|
isShowTipsSave: false,
|
|
|
});
|
|
|
|
|
|
// 判断是否连接支架
|
|
|
if (this.tempModeCurrent.isCabinMode && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
} else if (!this.tempModeCurrent.isCabinMode && isStandStatus) {
|
|
|
this.showTips(`检测到面罩仍和舱体连接中,请分离后切换`);
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (this.isBluetoothReconnectionIng) {
|
|
|
// 重连中状态赋值false
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
}
|
|
|
this.modeCurrentFun(this.tempModeCurrent, true); // 不提交护理记录,也不进行校验
|
|
|
},
|
|
|
confirmTipsSave: function () {/**关闭+提交+切换*/
|
|
|
let { isStandStatus } = this.state;
|
|
|
this.setState({
|
|
|
isShowTipsSave: false,
|
|
|
});
|
|
|
|
|
|
// 判断是否连接支架
|
|
|
if (this.tempModeCurrent.isCabinMode && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
} else if (!this.tempModeCurrent.isCabinMode && isStandStatus) {
|
|
|
this.showTips(`检测到面罩仍和舱体连接中,请分离后切换`);
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
}
|
|
|
if (this.isBluetoothReconnectionIng) {
|
|
|
// 重连中状态赋值false
|
|
|
this.isBluetoothReconnectionIng = false;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this.PostNursingLogClock(null, false); // 先提交护理记录
|
|
|
setTimeout(() => {
|
|
|
this.modeCurrentFun(this.tempModeCurrent, true); // 不进行校验
|
|
|
}, 100)
|
|
|
},
|
|
|
firstNurseInfo: async function () { /** 初次护理信息弹窗 */
|
|
|
let { currentDevice } = this.state;
|
|
|
let res = await InstrumentInfo.firstNurseInfo({
|
|
|
instrumentId: currentDevice.id,
|
|
|
});
|
|
|
console.log(res, "接口");
|
|
|
|
|
|
if (res.data.code === 200) {
|
|
|
let isFirstTipShow = getStorageSync(
|
|
|
"first_instrument_" + currentDevice.id
|
|
|
);
|
|
|
console.log(isFirstTipShow, "查看返回值");
|
|
|
|
|
|
if (!isFirstTipShow) {
|
|
|
if (res.data.data.length !== 0) {
|
|
|
// 首次进入页面:自动打开打卡介绍弹窗
|
|
|
this.setState({ nurseInfo: res.data.data, isFirstTipShow: true });
|
|
|
}
|
|
|
|
|
|
setStorageSync("first_instrument_" + currentDevice.id, true);
|
|
|
} else {
|
|
|
this.setState({ nurseInfo: res.data.data });
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
showTips: function (ctx) {// 护理的错误提示
|
|
|
if (!ctx) return;
|
|
|
if (this.showTipsTimer) clearTimeout(this.showTipsTimer);
|
|
|
this.setState({
|
|
|
errorTips: ctx,
|
|
|
});
|
|
|
this.showTipsTimer = setTimeout(() => {
|
|
|
this.setState({
|
|
|
errorTips: "",
|
|
|
});
|
|
|
}, 2000);
|
|
|
},
|
|
|
|
|
|
openErrorTipsText: function (str) { // 打开通用错误弹窗
|
|
|
this.setState({
|
|
|
isShowErrorTipsText: true,
|
|
|
errorTipsText: str,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
PreparationPage: { //准备页
|
|
|
GetBindInstrumentListApi: async function () { //获取护理计划的模式
|
|
|
let PlanNowProgress = Taro.getStorageSync("PlanNowProgress");
|
|
|
|
|
|
if (PlanNowProgress) {
|
|
|
let res: any = await getBindInstrumentListApi({
|
|
|
planId: PlanNowProgress.planId,
|
|
|
});
|
|
|
if (res.data.code !== 200) return;
|
|
|
console.log("WL200 GetBindInstrumentListApi", res);
|
|
|
if (res.data.data) {
|
|
|
let planFilterModeArray = res.data.data.filter((item: any) => {
|
|
|
return item.instrumentId === this.state.currentDevice.id;
|
|
|
});
|
|
|
this.setState({
|
|
|
planFilterModeArray,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
GetModeList: async function (id) { //获取模式列表
|
|
|
let params = {
|
|
|
instrumentId: id,
|
|
|
};
|
|
|
let res = await InstrumentInfo.modeInfoList(params);
|
|
|
if (res.data.code === 200) {
|
|
|
if (res.data.data.length > 0) {
|
|
|
// planFilterModeArray
|
|
|
let { planFilterModeArray } = this.state;
|
|
|
// 过滤出不是医美的分类
|
|
|
let ModeList = res.data.data.filter((item) => item.modeClass !== 3);
|
|
|
// 过滤出医美分类的模式
|
|
|
let YimeiModeList = res.data.data.filter(
|
|
|
(item) => item.modeClass === 3
|
|
|
);
|
|
|
if (YimeiModeList.length) {
|
|
|
let planModeIds = planFilterModeArray
|
|
|
.map((item) => {
|
|
|
if (item.model === "WL200") {
|
|
|
return item.modeId;
|
|
|
}
|
|
|
return "";
|
|
|
})
|
|
|
.filter((item) => item);
|
|
|
// 护理计划存在的医美分类模式增加到ModeList尾部
|
|
|
YimeiModeList.forEach((item) => {
|
|
|
if (planModeIds.includes(item.id)) {
|
|
|
ModeList.push(item);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
this.setState({
|
|
|
ModeList: ModeList,
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
// 判断是否同步记录进入设备页
|
|
|
let isSyncHistory = Taro.getStorageSync("isSyncHistory");
|
|
|
|
|
|
|
|
|
if (!isSyncHistory) {
|
|
|
console.log(this.state.activeModeID, 'this.state.activeModeID');
|
|
|
|
|
|
if (this.state.activeModeID == "") {
|
|
|
// 只有不是读取记录,才选中默认第一个
|
|
|
this.tempModeCurrent = res.data.data[0];
|
|
|
this.modeCurrentFun(res.data.data[0]);
|
|
|
} else {
|
|
|
let item = res.data.data.find(e => e.id == this.state.activeModeID)
|
|
|
// 只有不是读取记录,才选中默认第一个
|
|
|
this.tempModeCurrent = item;
|
|
|
this.modeCurrentFun(item);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}, 100);
|
|
|
} else {
|
|
|
this.setState({ ModeList: [] });
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
modeCurrentFun: function (data, isNotCheck) { /** 选中护理模式 */
|
|
|
if (data.lock) {
|
|
|
this.onModeLockOpen();
|
|
|
return;
|
|
|
}
|
|
|
console.log("modeCurrentFun", data, isNotCheck);
|
|
|
// 护理检查改变模式,是否提示切换护理模式
|
|
|
// isNotCheck为真时,不进行校验,直接切换
|
|
|
this.tempModeCurrent = data;
|
|
|
|
|
|
// 仅在未开始护理前,切换模式的时候提示模式弹窗
|
|
|
if (!this.state.isShowNurse) {
|
|
|
this.openStepTips();
|
|
|
}
|
|
|
|
|
|
// 如果按钮不可点击则报错,内部自带检查底部按钮函数
|
|
|
this.onEmitErrorTips();
|
|
|
if (!isNotCheck) {
|
|
|
let isReturn = this.modeRuningChange();
|
|
|
if (isReturn) return;
|
|
|
}
|
|
|
|
|
|
let { isShowNurse } = this.state;
|
|
|
let currentServiceData = {
|
|
|
startSource: "",
|
|
|
stopSource: "",
|
|
|
};
|
|
|
if (data.serviceData.length) {
|
|
|
currentServiceData = data.serviceData[0];
|
|
|
}
|
|
|
console.log("currentServiceData", currentServiceData);
|
|
|
|
|
|
let currentTime = data.modeTimeStr;
|
|
|
this.setState({
|
|
|
ActiveModeItem: data,
|
|
|
activeModeID: data.id,
|
|
|
SwitchActiveModeID: data.id,
|
|
|
ModeID: "mode_" + data.id,
|
|
|
SwitchModeID: "mode_" + data.id,
|
|
|
currentServiceData,
|
|
|
ModeStepIndex: 0,
|
|
|
currentTime,
|
|
|
// ModeType: modeArray[data.modeClass],
|
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
|
this.handleVideoPlay()
|
|
|
}, 100);
|
|
|
// 只有点击过开始,才隐藏其他模式类型
|
|
|
if (isShowNurse) {
|
|
|
this.setState({
|
|
|
ModeType: this.ModeArray[data.modeClass],
|
|
|
});
|
|
|
}
|
|
|
|
|
|
setTimeout(() => {
|
|
|
// 设置时间组合
|
|
|
if (data.serviceData.length > 0) {
|
|
|
this.setServiceTimeData();
|
|
|
}
|
|
|
// 存在组合模式时,设置组合模式
|
|
|
if (data.combineData.length > 0) {
|
|
|
this.setCustomMaskData();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
console.log("isShowNurse", isShowNurse);
|
|
|
let isDisabled = this.footerIsDisabled();
|
|
|
console.log("isDisabled", isDisabled);
|
|
|
// 如果是正在运行中切换,则直接准备运行
|
|
|
if (isShowNurse) {
|
|
|
// 如果切换模式,则不执行开始逻辑
|
|
|
if (!isDisabled) {
|
|
|
this.stepNext();
|
|
|
setTimeout(() => {
|
|
|
this.onNursingTap("switch");
|
|
|
}, 800);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
modeCurrentFunForce: function (data) { /** 选中护理模式 */
|
|
|
// 护理检查改变模式,是否提示切换护理模式
|
|
|
// isNotCheck为真时,不进行校验,直接切换
|
|
|
this.tempModeCurrent = data;
|
|
|
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer);
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
|
|
|
let currentServiceData = {
|
|
|
startSource: "",
|
|
|
stopSource: "",
|
|
|
};
|
|
|
if (data.serviceData.length) {
|
|
|
currentServiceData = data.serviceData[0];
|
|
|
}
|
|
|
|
|
|
let currentTime = data.modeTimeStr;
|
|
|
this.setState({
|
|
|
ActiveModeItem: data,
|
|
|
activeModeID: data.id,
|
|
|
SwitchActiveModeID: data.id,
|
|
|
ModeID: "mode_" + data.id,
|
|
|
SwitchModeID: "mode_" + data.id,
|
|
|
currentServiceData,
|
|
|
ModeStepIndex: 0,
|
|
|
currentTime,
|
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
|
this.handleVideoPlay()
|
|
|
}, 100);
|
|
|
|
|
|
setTimeout(() => {
|
|
|
// 设置时间组合
|
|
|
if (data.serviceData.length > 0) {
|
|
|
this.setServiceTimeData();
|
|
|
}
|
|
|
// 存在组合模式时,设置组合模式
|
|
|
if (data.combineData.length > 0) {
|
|
|
this.setCustomMaskData();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 强制切换运行
|
|
|
this.workStatus = "working";
|
|
|
this.setState({
|
|
|
ModeType: this.ModeArray[data.modeClass],
|
|
|
isShowNurse: true,
|
|
|
isStopNurse: false,
|
|
|
step: 2,
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
this.onNursingTap("switch");
|
|
|
}, 200);
|
|
|
},
|
|
|
modeRuningChange: function () { /** 设备运行中切换模式 */
|
|
|
// 运行中切换模式逻辑
|
|
|
if (
|
|
|
this.workStatus === MODE_WORKING_ENUM.PAUSE ||
|
|
|
this.workStatus === MODE_WORKING_ENUM.WORKING
|
|
|
) {
|
|
|
const { totalWorkingMinutes, totalWorkingSeconds } = this.DeviceSyncData;
|
|
|
const totalTime = totalWorkingMinutes * 60 + totalWorkingSeconds; // 设备时间
|
|
|
if (!this.tempModeCurrent || totalTime === 0) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (this.state.step == 2 && this.state.facialMaskConnectStatus == 1) {
|
|
|
// 提示切换护理模式
|
|
|
if (this.isCheckNurseTime()) {
|
|
|
// 满足时间条件,提示是否保存部分护理记录
|
|
|
this.judgementWorkStatus(
|
|
|
MODE_WORKING_ENUM.PAUSE,
|
|
|
this.tempModeCurrent?.modeType
|
|
|
);
|
|
|
this.setState({
|
|
|
isShowTipsSave: true,
|
|
|
});
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
Bluetooth: { //蓝牙弹窗
|
|
|
listener: function (res) { // 断开链接触发
|
|
|
console.log("listener res", res);
|
|
|
|
|
|
if (res?.connected) return;
|
|
|
// 蓝牙未连接才执行下面逻辑
|
|
|
Taro.offBLECharacteristicValueChange((res) => {
|
|
|
console.log("offBLECharacteristicValueChange", res);
|
|
|
});
|
|
|
// console.log(commandMap.WL200Command, "监听到蓝牙断开, 打开断开提示");
|
|
|
|
|
|
this.workStatus = "";
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer);
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
if (this.loadingTipsTimer) clearTimeout(this.loadingTipsTimer);
|
|
|
// 显示蓝牙断开弹窗
|
|
|
this.setState({
|
|
|
isConnectShow: true, // 打开蓝牙链接弹窗
|
|
|
isConnectionBlutoot: false, // 是否已连接蓝牙:未连接,已断开蓝牙
|
|
|
isShowCountdown: false, // 关闭倒计时,防止倒计时还在运行
|
|
|
countdown: 0,
|
|
|
});
|
|
|
this.footerIsDisabled();
|
|
|
},
|
|
|
|
|
|
bluetoothDisconnectProcessing: function () { //蓝牙断开连接处理
|
|
|
Taro.offBLEConnectionStateChange(this.listener); // 需传入与监听时同一个的函数对象
|
|
|
Taro.offBLECharacteristicValueChange((res) => {
|
|
|
console.log("offBLECharacteristicValueChange", res);
|
|
|
});
|
|
|
if (!this.state.isToOTA) {
|
|
|
Taro.closeBluetoothAdapter();
|
|
|
}
|
|
|
},
|
|
|
pairingChange: function () { // 完成配对
|
|
|
console.log("pairingChange");
|
|
|
// 重连蓝牙初始化监听
|
|
|
this.init();
|
|
|
|
|
|
this.setState({
|
|
|
isConnectionBlutoot: true, // 是否已连接蓝牙:已连接蓝牙
|
|
|
facialMaskConnectStatus: 1
|
|
|
})
|
|
|
|
|
|
setTimeout(() => {
|
|
|
this.setState({
|
|
|
isConnectShow: false,
|
|
|
});
|
|
|
}, 2000)
|
|
|
},
|
|
|
connectionClose: function () {
|
|
|
this.setState({
|
|
|
isConnectShow: false,
|
|
|
});
|
|
|
// 断线时,如果已运行时间满足最低运行时间,则直接提交结束任务
|
|
|
if (this.isCheckNurseTime()) {
|
|
|
this.endNurseFun();
|
|
|
} else {
|
|
|
// Taro.switchTab({ url: "/pages/index/index" });
|
|
|
this.WL200NursingHistory.id = "";
|
|
|
this.setState({ isNotEnoughTime: true });
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
NursinControlFunction: { //护理中控制功能
|
|
|
// 时间倒计时
|
|
|
updateDeviceSyncData: function (newData, jsonStatus) { //仪器返回实时数据
|
|
|
this.DeviceSyncData = {
|
|
|
...this.DeviceSyncData,
|
|
|
...newData,
|
|
|
};
|
|
|
if (newData.hasOwnProperty("totalWorkingSeconds")) {
|
|
|
this.renderDeviceStatus.renderWorkTime(jsonStatus);
|
|
|
}
|
|
|
},
|
|
|
renderWorkTime: function (jsonStatus) { //处理仪器返回的时间处理
|
|
|
const { totalWorkingMinutes, totalWorkingSeconds } = this.DeviceSyncData;
|
|
|
let { ActiveModeItem, currentTime } = this.state;
|
|
|
const totalTime = totalWorkingMinutes * 60 + totalWorkingSeconds;
|
|
|
console.log("仪器上报的已经运行的总秒数", totalTime);
|
|
|
console.log("时间校准频率,默认5秒一次", TIME_CALIBRATION_FREQUENCY);
|
|
|
//对比仪器上报运行的总秒数 和小程序页面运行的已经运行的总秒数,如果不一致就进行校准
|
|
|
const currentScene = ActiveModeItem; // 获取当前的场景
|
|
|
let sceneTime = minSecToS(currentScene.modeTimeStr);
|
|
|
|
|
|
console.log("场景时间 sceneTime", sceneTime);
|
|
|
console.log("当前显示时间 currentTime", currentTime);
|
|
|
console.log("设备运行时间 totalTime", totalTime);
|
|
|
// 界面倒计时同步设备时间:每5秒强制同步更新一次
|
|
|
const showtime = sceneTime - totalTime; // 场景时间 - 已运行时间 = 剩余时间
|
|
|
if (showtime > 0 && showtime % 5 === 0) {
|
|
|
this.setState({
|
|
|
currentTime: s_to_ms(showtime),
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 更新界面倒计时
|
|
|
if (!this.currentTimeTimer && this.workStatus !== "end") {
|
|
|
console.log("更新界面倒计时resetTimer");
|
|
|
this.resetTimer();
|
|
|
}
|
|
|
|
|
|
// 每次同步后,更新历史缓存
|
|
|
setTimeout(() => {
|
|
|
this.updateWL200NursingHistory();
|
|
|
}, 100);
|
|
|
},
|
|
|
|
|
|
resetTimer: function () { // 重置并同步计时器
|
|
|
// 切换模式后, 需要重新设置计时器, 以防进行中的计时器
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer);
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
this.currentTimeTimer = setInterval(() => {
|
|
|
let {
|
|
|
step,
|
|
|
facialMaskConnectStatus,
|
|
|
currentTime,
|
|
|
ModeStepTimeArray,
|
|
|
ModeStepIndex,
|
|
|
ActiveModeItem,
|
|
|
} = this.state;
|
|
|
|
|
|
|
|
|
if (
|
|
|
this.workStatus == MODE_WORKING_ENUM.WORKING &&
|
|
|
step == 2 &&
|
|
|
facialMaskConnectStatus == 1
|
|
|
) {
|
|
|
let totalSeconds = ActiveModeItem?.breakTimeStr
|
|
|
? minSecToS(ActiveModeItem.breakTimeStr)
|
|
|
: minSecToS(ActiveModeItem.modeTimeStr);
|
|
|
// 现在的倒计时剩余时间:同步时检查是否断开重连,如果是,则使用断开的剩余时长,进行倒计时计算
|
|
|
let currentSeconds = minSecToS(currentTime);
|
|
|
let checkTime = totalSeconds - currentSeconds;
|
|
|
|
|
|
// 缓存经过的时间:用于接口提交
|
|
|
this.elapsedTime = checkTime;
|
|
|
|
|
|
// // 每隔15秒发一次心跳
|
|
|
// if (this.elapsedTime > 10 && this.elapsedTime % 15 === 0) {
|
|
|
// this.hearting = true; // 心跳中,禁止切换和暂停操作
|
|
|
// let minuteNum = Math.floor((this.elapsedTime + 1) / 60);
|
|
|
// let secondsNum = Math.floor((this.elapsedTime + 1) % 60);
|
|
|
|
|
|
// setTimeout(() => {
|
|
|
// this.bluetoothContainer.sendsideRemind(
|
|
|
// ActiveModeItem?.modeType,
|
|
|
// minuteNum,
|
|
|
// secondsNum
|
|
|
// );
|
|
|
// }, 200);
|
|
|
// }
|
|
|
|
|
|
// 如果存在中断时间,则要加上间隔的时间
|
|
|
if (ActiveModeItem?.breakTimeStr) {
|
|
|
let intervalTime =
|
|
|
minSecToS(ActiveModeItem.modeTimeStr) -
|
|
|
minSecToS(ActiveModeItem.breakTimeStr);
|
|
|
this.elapsedTime += intervalTime;
|
|
|
}
|
|
|
|
|
|
// 判断剩余时间是否大于1
|
|
|
console.log("currentSeconds", currentSeconds);
|
|
|
if (currentSeconds > 0) {
|
|
|
// 小程序显示倒计时
|
|
|
this.setState({
|
|
|
currentTime: s_to_ms(--currentSeconds),
|
|
|
});
|
|
|
|
|
|
let length = ModeStepTimeArray.length;
|
|
|
if (length) {
|
|
|
// 模式多个步骤节点切换
|
|
|
// 已运行时间达到下一节点时,切换
|
|
|
if (checkTime > ModeStepTimeArray[ModeStepIndex]) {
|
|
|
// 已运行时间达到下一节点,且存在下一节点,步骤切换时更新
|
|
|
if (ModeStepIndex < length - 1) {
|
|
|
let index = ModeStepIndex + 1; // 提前步骤+1
|
|
|
let currentServiceData = {
|
|
|
startSource: "",
|
|
|
stopSource: "",
|
|
|
};
|
|
|
let serviceLength = ActiveModeItem.serviceData.length;
|
|
|
if (serviceLength > index) {
|
|
|
currentServiceData = ActiveModeItem.serviceData[index];
|
|
|
}
|
|
|
|
|
|
this.setState({
|
|
|
ModeStepIndex: index,
|
|
|
currentServiceData,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer)
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
console.log("倒计时结束了00:00");
|
|
|
this.setState({
|
|
|
currentTime: "00:00",
|
|
|
ModeStepIndex: 0,
|
|
|
facialMaskConnectStatus: 0, // 倒计时结束会关机,逻辑预先关机
|
|
|
});
|
|
|
let modeTimeSec = minSecToS(ActiveModeItem.modeTimeStr);
|
|
|
this.elapsedTime =
|
|
|
this.elapsedTime > modeTimeSec ? modeTimeSec : this.elapsedTime;
|
|
|
setTimeout(() => {
|
|
|
this.endNurseFun(); // 自动结束护理,并自动跳转报告页
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}, 1000);
|
|
|
},
|
|
|
setLoadingTips: function (time) { // 仪器开始倒计时
|
|
|
this.setState({
|
|
|
countdown: time,
|
|
|
});
|
|
|
if (time >= 0) {
|
|
|
this.loadingTipsTimer = setTimeout(() => {
|
|
|
this.setLoadingTips(--time);
|
|
|
}, 1000);
|
|
|
} else {
|
|
|
// 停止倒计时
|
|
|
// that.data.startSettingCountDown = false;
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
|
|
|
showCountdownFun: function (count, callback) { //倒计时弹窗
|
|
|
this.setState({
|
|
|
countdown: count,
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
if (this.CountdownTimer) clearInterval(this.CountdownTimer);
|
|
|
this.setState({
|
|
|
isShowCountdown: true,
|
|
|
});
|
|
|
this.CountdownTimer = setInterval(() => {
|
|
|
if (this.state.countdown === 0) {
|
|
|
if (this.CountdownTimer) clearInterval(this.CountdownTimer);
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
});
|
|
|
if (callback) callback();
|
|
|
} else {
|
|
|
this.setState({
|
|
|
countdown: this.state.countdown - 1,
|
|
|
});
|
|
|
}
|
|
|
}, 1000);
|
|
|
}, 0);
|
|
|
},
|
|
|
|
|
|
|
|
|
// 护理中控制功能
|
|
|
onEndDevice: function () {
|
|
|
this.rmWL200NursingHistory();
|
|
|
// 判断护理时间,如果不足,则提示不足
|
|
|
if (!this.isCheckNurseTime()) {
|
|
|
this.setState({ isNotEnoughTime: true });
|
|
|
} else {
|
|
|
this.endNurseFun();
|
|
|
}
|
|
|
},
|
|
|
|
|
|
judgementWorkStatus: function (nWorkStatus, nWorkMode) { //设备上报不同状态
|
|
|
const { step, workMode, ActiveModeItem, ModeList } = this.state;
|
|
|
const opts: any = {};
|
|
|
// ActiveModeItem
|
|
|
let nowModeItem;
|
|
|
if (nWorkMode) {
|
|
|
nowModeItem = ModeList.find((item) => {
|
|
|
return item.modeType === nWorkMode;
|
|
|
});
|
|
|
}
|
|
|
opts.workStatus = nWorkStatus;
|
|
|
|
|
|
let nowCurrentTime = ActiveModeItem.modeTimeStr;
|
|
|
// 完成重连同步则删除重连时间字段
|
|
|
if (ActiveModeItem?.breakTimeStr) {
|
|
|
nowCurrentTime = ActiveModeItem?.breakTimeStr;
|
|
|
}
|
|
|
|
|
|
const statusF = {
|
|
|
sleep: () => {
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
});
|
|
|
},
|
|
|
standby: () => {
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
});
|
|
|
if (nowModeItem?.isCabinMode && step == 2) {
|
|
|
opts.currentTime = nowCurrentTime;
|
|
|
} else if (!nowModeItem?.isCabinMode && step == 2) {
|
|
|
// fix: 启动非支架模式倒计时时,连上支架,仪器的状态变为standby
|
|
|
opts.step = 1;
|
|
|
}
|
|
|
},
|
|
|
setting: () => {
|
|
|
// that.data.hadShowBreakTips = false;
|
|
|
this.setState({
|
|
|
hadShowBreakTips: false,
|
|
|
});
|
|
|
if (step != 2 && !ActiveModeItem.isCabinMode) {
|
|
|
opts.step = 2;
|
|
|
this.setState({
|
|
|
title: "正在护理",
|
|
|
isStopNurse: false,
|
|
|
});
|
|
|
} else if (step != 2 && ActiveModeItem.isCabinMode) {
|
|
|
opts.step = 2;
|
|
|
// this.setState({
|
|
|
// title: "正在护理",
|
|
|
// });
|
|
|
this.setState({
|
|
|
title: "正在护理",
|
|
|
isStopNurse: false,
|
|
|
});
|
|
|
}
|
|
|
if (nowModeItem) {
|
|
|
opts.currentTime = nowCurrentTime;
|
|
|
}
|
|
|
// startSettingCountDown 用于标记打开了倒计时loading
|
|
|
if (!this.state.isShowCountdown) {
|
|
|
this.setState({
|
|
|
isShowCountdown: true,
|
|
|
});
|
|
|
this.setLoadingTips(this.CountDownTime[workMode] || 6);
|
|
|
}
|
|
|
},
|
|
|
working: () => {
|
|
|
if (this.state.facialMaskConnectStatus != 1) {
|
|
|
opts.workStatus = MODE_WORKING_ENUM.STANDBY;
|
|
|
opts.step = 1;
|
|
|
} else if (step != 2) {
|
|
|
opts.step = 2;
|
|
|
this.setState({
|
|
|
title: "正在护理",
|
|
|
isStopNurse: false,
|
|
|
});
|
|
|
}
|
|
|
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
hadShowBreakTips: false,
|
|
|
});
|
|
|
},
|
|
|
pause: () => {
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer)
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
this.setState({
|
|
|
isShowCountdown: false,
|
|
|
});
|
|
|
if (ActiveModeItem.isCabinMode) {
|
|
|
this.setState({
|
|
|
title: "暂停护理",
|
|
|
isStopNurse: true,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
end: () => {
|
|
|
// 已进入了报告阶段, 防止重复进入, 主要防止在手动点击结束护理接收到仪器消息
|
|
|
console.log("END 护理结束");
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer)
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
this.endNurseFun();
|
|
|
},
|
|
|
};
|
|
|
statusF[nWorkStatus] && statusF[nWorkStatus]();
|
|
|
if (Object.keys(opts).length) {
|
|
|
this.setState(opts);
|
|
|
}
|
|
|
},
|
|
|
|
|
|
stepNext: function () {
|
|
|
// //0未定义(全部) 1面罩模式 2舱体模式 3医美术后
|
|
|
let modeClass = this.state.ActiveModeItem.modeClass;
|
|
|
this.workStatus = "pause";
|
|
|
this.setState({
|
|
|
ModeType: this.ModeArray[modeClass],
|
|
|
isShowNurse: true,
|
|
|
isStopNurse: true,
|
|
|
step: 2,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
onNursingTap: function (type) { //点击开始护理
|
|
|
// 如果已禁止运行,则停止执行后续逻辑
|
|
|
if (this.state.isFooterBtnDisabled) return;
|
|
|
// 防止多次点击
|
|
|
if (this.state.hadClickStart) return;
|
|
|
this.setState({
|
|
|
hadClickStart: true,
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
this.setState({
|
|
|
hadClickStart: false,
|
|
|
});
|
|
|
}, 500);
|
|
|
|
|
|
const { isStandStatus, facialMaskConnectStatus } = this.state;
|
|
|
|
|
|
if (facialMaskConnectStatus != 1) {
|
|
|
this.showTips("检测到面罩未连接成功,请确认面罩开机并佩戴");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (this.tempModeCurrent.isCabinMode && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
return;
|
|
|
}
|
|
|
if (!this.tempModeCurrent.isCabinMode && isStandStatus) {
|
|
|
this.showTips(`检测到面罩仍和舱体连接中,请分离后切换`);
|
|
|
return;
|
|
|
}
|
|
|
if (
|
|
|
this.tempModeCurrent.modeType === "MaskCustom" &&
|
|
|
!this.state.isCombineSuccess
|
|
|
) {
|
|
|
this.showTips(
|
|
|
`${this.tempModeCurrent.modeName}模式设置失败,请联系小助手`
|
|
|
);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 仅在切换模式的时候,弹窗倒计时.
|
|
|
if (type === "switch" || this.isStandChangeFlag === true) {
|
|
|
this.isStandChangeFlag = false;
|
|
|
let downNum = this.CountDownTime[this.tempModeCurrent.modeType] || 3;
|
|
|
this.showCountdownFun(downNum, () => { }); // 倒计时弹窗
|
|
|
}
|
|
|
|
|
|
// 开始执行护理
|
|
|
this.workStatus = MODE_WORKING_ENUM.WORKING; // 不管当前什么状态,直接设为工作状态
|
|
|
this.bluetoothContainer.handleWorkStatus(true, MODE_WORKING_ENUM.WORKING);
|
|
|
this.setState({
|
|
|
isStopNurse: false,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
|
|
|
endNurseFun: async function () { //结束护理并关机
|
|
|
if (this.isCheckNurseTime()) {
|
|
|
await this.PostNursingLogClock();
|
|
|
} else {
|
|
|
// 时间不满足,回到主页
|
|
|
this.setState({
|
|
|
isEndCarePlan: false,
|
|
|
isNotEnoughTime: true,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
|
|
|
|
|
|
// 提交报告模块
|
|
|
PostNursingLogClock: async function (data, isJump) {// 提交报告模块
|
|
|
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 res: any = await InstrumentInfo.apiNursingLog.addLog(params);
|
|
|
if (res.data.code === 200) {
|
|
|
let params = {
|
|
|
instrumentId: currentDevice.id,
|
|
|
};
|
|
|
// 上传护理完成的仪器ID
|
|
|
let res2 = await InstrumentInfo.apiClock.addClockInstrument(params);
|
|
|
console.log(res2, "护理完成");
|
|
|
|
|
|
this.rmWL200NursingHistory(); // 护理完成,删除记录
|
|
|
if (isJump) {
|
|
|
this.setState({
|
|
|
isShowNursingSuccess: true,
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
this.setState({
|
|
|
isShowNursingSuccess: false,
|
|
|
});
|
|
|
this.goFaceReport(res.data.data);
|
|
|
}, 2000);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
goFaceReport: function (id) {/** 完成护理提交:跳转护理报告页 */
|
|
|
// 跳转前置空定时器,防止重复提交
|
|
|
if (this.currentTimeTimer) {
|
|
|
clearInterval(this.currentTimeTimer)
|
|
|
this.currentTimeTimer = null;
|
|
|
}
|
|
|
// 完成提交跳转护理页前: 清空WL200缓存,防止断开蓝牙导致的反复提交bug
|
|
|
Taro.removeStorageSync("isSyncHistory");
|
|
|
Taro.removeStorageSync("WL200NursingHistory");
|
|
|
this.WL200NursingHistory = null;
|
|
|
this.bluetoothContainer.handleWorkStatus(false, "end");
|
|
|
console.log("goFaceReport id", id);
|
|
|
setTimeout(() => {
|
|
|
Taro.redirectTo({
|
|
|
url: `/recoding/pages/face_report/face_report?id=${id}&recordId=${this.state.currentDevice?.id}`,
|
|
|
});
|
|
|
}, 100);
|
|
|
}
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
LocalStorageOfData: { //本地存储
|
|
|
getWL200NursingHistory: function () {/** 获取小程序本地缓存的历史记录 */
|
|
|
this.WL200NursingHistory = Taro.getStorageSync("WL200NursingHistory");
|
|
|
let isSyncHistory = Taro.getStorageSync("isSyncHistory");
|
|
|
if (isSyncHistory) {
|
|
|
this.setState({
|
|
|
isShowHistoryMsg: true,
|
|
|
});
|
|
|
this.WL200NursingHistory = Taro.getStorageSync("WL200NursingHistory");
|
|
|
}
|
|
|
// // 是否同步历史记录
|
|
|
// let isSyncHistory = Taro.getStorageSync("isSyncHistory");
|
|
|
// if (isSyncHistory) {
|
|
|
// let ActiveModeItem = this.WL200NursingHistory.ActiveModeItem;
|
|
|
// // 直接进入开始护理状态
|
|
|
// this.setState({
|
|
|
// isShowNurse: true,
|
|
|
// isShowHistoryMsg: true,
|
|
|
// currentServiceData: this.WL200NursingHistory.currentServiceData,
|
|
|
// ModeStepIndex: this.WL200NursingHistory.ModeStepIndex,
|
|
|
// tempModeCurrent: ActiveModeItem,
|
|
|
// ActiveModeItem: ActiveModeItem,
|
|
|
// activeModeID: ActiveModeItem.id,
|
|
|
// ModeID: "mode_" + ActiveModeItem.id,
|
|
|
// currentTime: this.WL200NursingHistory.currentTime,
|
|
|
// });
|
|
|
// setTimeout(() => {
|
|
|
// // 设置时间组合
|
|
|
// if (ActiveModeItem.serviceData.length > 0) {
|
|
|
// this.setServiceTimeData();
|
|
|
// }
|
|
|
// // 存在组合模式时,设置组合模式
|
|
|
// if (ActiveModeItem.combineData.length > 0) {
|
|
|
// this.setCustomMaskData();
|
|
|
// }
|
|
|
// });
|
|
|
// }
|
|
|
},
|
|
|
setWL200NursingHistory: function (jsonStatus) {/** 设置WL200护理历史 */
|
|
|
let { currentDevice, ActiveModeItem, ModeList } = this.state;
|
|
|
const params = {
|
|
|
createDate: dayjs().format("YYYY-MM-DD"),
|
|
|
workMode: jsonStatus.workMode,
|
|
|
instrumentId: currentDevice.id,
|
|
|
instrumentName: currentDevice.name,
|
|
|
modeId: ActiveModeItem.id,
|
|
|
modeName: ActiveModeItem.modeName,
|
|
|
id: jsonStatus.id,
|
|
|
neededTotalSeconds: jsonStatus.neededTotalSeconds,
|
|
|
jsonStatus,
|
|
|
ActiveModeItem: this.state.ActiveModeItem,
|
|
|
ModeStepIndex: this.state.ModeStepIndex,
|
|
|
currentServiceData: this.state.currentServiceData,
|
|
|
};
|
|
|
this.WL200NursingHistory = JSON.parse(JSON.stringify(params));
|
|
|
Taro.setStorageSync("WL200NursingHistory", params);
|
|
|
console.log("保存setWL200NursingHistory");
|
|
|
},
|
|
|
updateWL200NursingHistory: function (data) {
|
|
|
this.WL200NursingHistory = Taro.getStorageSync("WL200NursingHistory");
|
|
|
|
|
|
if (this.WL200NursingHistory) {
|
|
|
let params: any = this.WL200NursingHistory;
|
|
|
|
|
|
// 设置当前时间
|
|
|
params.currentTime = this.state.currentTime;
|
|
|
params.ModeStepIndex = this.state.ModeStepIndex;
|
|
|
// 设置正确封面
|
|
|
if (data) {
|
|
|
params.currentServiceData = data;
|
|
|
} else {
|
|
|
let currentServiceData = {
|
|
|
startSource: "",
|
|
|
stopSource: "",
|
|
|
};
|
|
|
let serviceLength = this.state.ActiveModeItem.serviceData.length;
|
|
|
if (serviceLength > 0) {
|
|
|
currentServiceData = this.state.ActiveModeItem.serviceData[0];
|
|
|
}
|
|
|
params.currentServiceData = currentServiceData;
|
|
|
}
|
|
|
Taro.setStorageSync("WL200NursingHistory", params);
|
|
|
console.log("更新updateWL200NursingHistory");
|
|
|
}
|
|
|
},
|
|
|
rmWL200NursingHistory: function () { //删除WL200护理历史
|
|
|
Taro.removeStorageSync("WL200NursingHistory");
|
|
|
this.WL200NursingHistory = null;
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
Footer: { //底部按钮事件
|
|
|
onStartNurse: function () { /** 开始护理按钮:点击开始,页面进行到下一步 */
|
|
|
// 如果检查通过,可运行,则执行下一步
|
|
|
if (!this.footerIsDisabled()) {
|
|
|
this.stepNext();
|
|
|
|
|
|
setTimeout(() => {
|
|
|
this.onNursingTap();
|
|
|
let downNum = this.CountDownTime[this.tempModeCurrent.modeType] || 3;
|
|
|
this.showCountdownFun(downNum, () => { }); // 倒计时弹窗
|
|
|
}, 500);
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
// 如果检查失败,则报错
|
|
|
this.onEmitErrorTips();
|
|
|
},
|
|
|
onSwitchChange: function () {/** 切换光照 */
|
|
|
// todo
|
|
|
let { isStopNurse } = this.state;
|
|
|
if (isStopNurse) {
|
|
|
// 开始光照逻辑
|
|
|
this.onNursingTap();
|
|
|
this.setState({
|
|
|
isStopNurse: false,
|
|
|
});
|
|
|
} else {
|
|
|
// 暂停光照逻辑
|
|
|
// 带校验的切换开关状态
|
|
|
this.bluetoothContainer.handleWorkStatus(false, MODE_WORKING_ENUM.PAUSE);
|
|
|
this.setState({
|
|
|
isStopNurse: true,
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
onEndPlan: function () { /** 结束护理弹窗 */
|
|
|
this.setState({
|
|
|
isEndCarePlan: true,
|
|
|
});
|
|
|
},
|
|
|
onEmitErrorTips: function () { // 不可切换光照提示
|
|
|
setTimeout(() => {
|
|
|
let { ActiveModeItem, isShowNurse, isStandStatus } = this.state;
|
|
|
let obj: any = null;
|
|
|
if (isShowNurse) {
|
|
|
obj = ActiveModeItem;
|
|
|
} else {
|
|
|
obj = this.tempModeCurrent;
|
|
|
}
|
|
|
|
|
|
// 按钮不可点击时,提示报错
|
|
|
let isDisabled = this.footerIsDisabled();
|
|
|
console.log(isDisabled, 'isDisabled');
|
|
|
|
|
|
if (isDisabled) {
|
|
|
if (obj.isCabinMode === 0 && isStandStatus) {
|
|
|
this.showTips("检测到面罩与舱体仍在连接中,该模式需要分离面罩和舱体");
|
|
|
return;
|
|
|
}
|
|
|
if (obj.isCabinMode === 1 && !isStandStatus) {
|
|
|
this.showTips(
|
|
|
`检测到舱体未连接成功,请确认面罩开机后与舱体连接,并接通舱体电源`
|
|
|
);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
export default WL200Function |