You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1323 lines
39 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import classnames from "classnames";
import dayjs from "dayjs";
import Taro from "@tarojs/taro";
import { Component } from "react";
import {
Block,
View,
Text,
Image,
Swiper,
SwiperItem,
RichText,
} from "@tarojs/components";
/*** redux ***/
import { connect } from "react-redux";
import { userRefresh, tokenRefresh } from "@/store/features/userInfo";
import { setIndexFlag } from "@/store/features/globalStore";
/*** redux end ***/
/** 自定义组件 **/
import AtCalendar from "@/components/calendar";
import PopupPrivacy from "@/components/popup/popup-privacy";
import PopupBinding from "@/components/popup/popup-binding";
// import PopupPrivacyTest from "../../components/popup/popup-privacy-test";
import PopupSiteSwiper from "@/components/popup/popup-site-swiper";
import PopupAlert from "@/components/popup/popup-alert";
import PopupConfirm from "@/components/popup/popup-confirm";
import type CustomTabBar from "@/custom-tab-bar";
import Navbar from "@/components/navbar/navbar";
import ConnectionBluetoot from "@/components/bluetoot/connection";
import UpdateIotWL200 from "@/components/bluetoot/update-wl200/index";
/** 自定义组件 **/
import {
RefreshWxUserInfo,
GetNoReadMessageNum,
GetSitePopupList,
GetSiteCarousel,
GetSiteAddTag,
InstrumentInfo,
WCUserLogin,
} from "../../utils/Interface";
// css引入
import "taro-ui/rn/style/components/calendar.scss";
import "./index.less";
import {
go,
goJump,
msg,
getStorageSync,
setStorageSync,
showModal,
} from "@/utils/traoAPI";
// const log = require("@/utils/log");
class Index extends Component<any, any> {
$instance: any = Taro.getCurrentInstance();
constructor(props) {
super(props);
this.state = {
isDisabledClickAddDevice: false, // 是否禁止点击添加设备
isCommonError: false, // 是否显示通用错误提示
commonErrorText: [], // 通用错误提示
showEquipment: false, // 扫码绑定设备弹窗
isRegisterBoolean: false, // 是否已登录
isShowPrivacyPopup: false,
isShowSiteSwiper: false,
isNotRegister: false, // 是否未注册
isDev: false, // 正在开发提示
sitePopupList: [], // 站点管理列表
userinfo: {
mobile: Taro.getStorageSync("mobile"),
},
list: [],
params: "",
messageCount: Taro.getStorageSync("messageCount") || 0,
offlineDialogType: 1, //1离线弹窗 2升级弹窗
offlineDialogForce: 0, //0可选是否升级 1强制升级
versioninfo: {}, //仪器版本号,
info: {}, // 护理推荐点击参与活动的信息
weekinfo: undefined,
// 日历
currentDate: dayjs().format("YYYY-MM-DD"),
calendarComplete: [
dayjs().subtract(1, "day").format("YYYY-MM-DD"),
dayjs().subtract(3, "day").format("YYYY-MM-DD"),
],
calendarInComplete: [
dayjs().add(1, "day").format("YYYY-MM-DD"),
dayjs().add(8, "day").format("YYYY-MM-DD"),
],
// 横幅轮播
bannerList: [],
bannerCurrent: 0,
/** 绑定仪器 */
isVisibleBinding: false, // 绑定弹窗
isBindingError: false, // 绑定失败
isBeforeBindingError: false, // 绑定前校验错误弹窗
BeforeBindingErrorText: "", // 绑定前校验错误文本
instrumentList: [], // 仪器列表
ViewAddInstrument: true, // 查看是否添加有仪器
unbindingInstrumentList: [], // 未绑定仪器列表
instrumentInfo: {
// 扫码获得的序列号仪器
bindingStatus: 0, // 0已绑定1未绑定2已解绑
createBy: null,
createTime: "2024-01-19 17:46:10",
exportFields: [],
id: 4,
instrumentId: 82,
instrumentIdArray: null,
instrumentName: "研发测试FR380",
instrumentSerialIdList: [],
queryInstrumentIds: null,
remark: null,
serial: "", // 设备序列号
source: "导入",
status: 0, // 0正常 1停用
updateBy: null,
updateTime: null,
validStatus: 1, // 1有效0无效
},
/** 绑定仪器 End */
/** 已绑定仪器 */
instrument_detail: {},
/* 已绑定仪器 END */
/** 蓝牙相关 */
isConnectShow: false,
connectInstrument: {}, // 当前连接设备
/* END */
// 设备升级弹窗
isShowUpdateVersionTip: false, // 升级提示
isShowVersionUpgrading: false, // 升级中
isShowVersionUpgradFinish: false, // 升级完成:升级内容公告
versionUpgradFinishNodes: "", // 公告内容
// 设备是否重连弹窗
isShowReConnectDeviceRecordWL200: false,
};
}
async onLoad() {
// 仅非扫码进入页面时,校验跳转欢迎页
if (!this.$instance.router?.params?.q) {
const isFirst = Taro.getStorageSync("isWelcome");
if (!isFirst) {
go("/pages/initiate/initiate");
}
}
}
componentDidMount() {}
componentWillUnmount() {
// 页面卸载监听
Taro.offAppHide((res) => {});
this.$instance = null;
}
componentDidShow() {
const tabbar = Taro.getTabBar<CustomTabBar>(this.$instance.page);
tabbar?.setSelected(0);
// 判断是否跳过了注册
if (Taro.getStorageSync("skipRegister")) {
this.setState({ showEquipment: true });
Taro.removeStorageSync("skipRegister");
} else {
// 已注册且非跳过,正常执行逻辑
this.showInit();
}
}
componentDidHide() {
this.closeUpgradeBox();
}
/**
* 关闭升级弹窗
* 如果升级中,则在熄屏时,强制关闭
* */
closeUpgradeBox() {
if (this.state.isShowVersionUpgrading) {
this.wl200UpgradeErrorFun();
Taro.closeBluetoothAdapter();
setStorageSync("isDisconnectUpdate", true); // 已断开更新
}
}
showInit = async () => {
// 判断是否登录
this.$instance = Taro.getCurrentInstance();
let mobile = Taro.getStorageSync("mobile");
if (mobile) {
this.setState({ isRegisterBoolean: true });
}
// 非扫码进入小程序,需判断是否跳转欢迎页;扫码进入小程序,先缓存序列号,再检测隐私弹窗
let serial = Taro.getStorageSync("serial");
let url = this.$instance.router?.params?.q || "";
if (!url) {
// 非扫码或扫码已跳转的返回进入
const isFirst = Taro.getStorageSync("isWelcome");
if (isFirst || serial) {
// 如果是扫码进来的,不需要进入介绍页也弹鉴权弹窗
this.checkShowPrivacyPopup();
}
} else {
// 扫码进入
Taro.setStorageSync("isScan", true);
// 是否可以运行扫码逻辑:每次扫码后设为真,
Taro.setStorageSync("isScanRun", true);
if (url) {
let _url = decodeURIComponent(url);
if (_url.indexOf("?")) {
let ids = _url.split("?");
if (ids.length > 1) {
let serial = ids[1];
Taro.setStorageSync("serial", serial);
}
}
}
this.checkShowPrivacyPopup();
}
};
// 检测是否弹出隐私协议
checkShowPrivacyPopup() {
Taro.getPrivacySetting({
success: (res) => {
// console.log("检测是否弹出隐私协议", res); // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
if (res.needAuthorization) {
this.setState({ isShowPrivacyPopup: true });
} else {
// 用户已经同意过隐私协议,所以不需要再弹出隐私协议,也能调用隐私接口
this.isSancQrcodeEnter();
}
},
fail: () => {},
complete: () => {
// 授权完成运行页面初始化
},
});
}
// 页面初始化
initData = async () => {
let token = getStorageSync("token");
if (!token) {
// 如果token过期先登录登录完成后自动初始化
await this.WCUserLogin();
} else {
// token没过期直接请求数据
this.initPageData();
}
};
initPageData = async () => {
const mobile = Taro.getStorageSync("mobile");
const isToken = getStorageSync("token");
if (!isToken) {
// 防止逻辑出错没有token
await this.onlyLogin();
}
console.log("initPageData");
// 如果是扫码且已有token则跳转
if (Taro.getStorageSync("serial")) {
// 如果已注册绑定手机号不用跳转
if (!mobile) {
setTimeout(() => {
go("/pages/register/register");
}, 300);
return;
}
}
this.GetSiteCarousel();
if (mobile) {
this.GetNoReadMessageNum(); // 查询是否有消息
await this.bindingInstrumentList(); // 获取已绑定设备
await this.unbindingInstrumentInfoList(); // 获取未绑定设备
await this.getInstrumentInfoBySerial(); // 扫码序列号查询:注册后才调用,因为扫码未注册直接跳转注册页
console.log("this.props.isShowIndexFlag", this.props.isShowIndexFlag);
if (!this.props.isShowIndexFlag) {
this.initDeviceNursingHistory();
this.GetSitePopupList();
// 全局内存缓存,仅初次进入首页运行
this.props.setIndexFlag(true);
// 小程序切到后台,则清除弹窗缓存
Taro.onAppHide((res) => {
console.log("小程序进入后台:", res);
this.props.setIndexFlag(false);
});
}
}
};
// 刷新用户信息
RefreshWxUserInfo = async () => {
let res = await RefreshWxUserInfo();
if (res.data.code === 200) {
this.props.userRefresh(res.data.data);
}
};
// 获取消息数量
GetNoReadMessageNum = async () => {
let res = await GetNoReadMessageNum();
if (res.data.code === 200) {
Taro.setStorageSync("messageCount", res.data.data);
this.setState({ messagecount: res.data.data });
}
};
// 获取站点管理-弹窗列表 1-首页 2-发现模块 3-活动模块
GetSitePopupList = async () => {
let res = await GetSitePopupList(1);
if (res.data.code === 200) {
if (res.data.data) {
if (res.data.data.length) {
this.setState({
sitePopupList: res.data.data,
isShowSiteSwiper: true,
});
}
}
}
};
// 获取站点管理-广告轮播列表
GetSiteCarousel = async () => {
let res = await GetSiteCarousel();
if (res.data.code === 200) {
if (res.data.data) {
this.setState({ bannerList: res.data.data });
}
}
};
GetSiteAddTag = async (id) => {
let res = await GetSiteAddTag(id);
if (res.data.code === 200) {
console.log("点击自动上报,不需要逻辑处理");
}
};
goRegister() {
go("/pages/register/register");
}
// 新增设备
addNewDevice = () => {
if (this.isRegister("addNewDevice")) {
if (this.state.isDisabledClickAddDevice) {
msg("您已绑定所有设备");
return;
}
go("/pages/instrument/instrument");
}
};
// 是否已注册
isRegister(type = "") {
if (type === "addNewDevice") {
Taro.setStorageSync("isInstrumentJump", "true"); // 判断是否点击新增设备按钮,用于信息完善页判断跳转逻辑
} else {
Taro.setStorageSync("isInstrumentJump", "false"); // 重置
}
if (!this.state.isRegisterBoolean) {
this.alertRegister();
return false;
}
return true;
}
showPrivacy = () => {
this.setState({ isShowPrivacyPopup: true });
};
closePrivacy = () => {
this.setState({ isShowPrivacyPopup: false });
this.isSancQrcodeEnter(); // 关闭隐私弹窗后,需要判断是否扫码进入
};
closeAlert = () => {
this.setState({ isNotRegister: false });
};
public alertRegister = () => {
this.setState({ isNotRegister: true }); // 打开弹窗
};
onTimeChange = (value) => {
console.log("onTimeChange", value);
this.setState({ currentDate: value });
};
// 护理记录
toNursingRecords = () => {
let { ViewAddInstrument } = this.state;
// go(`/pages/recording/recording?param1=${param1Value}`);
go(`/pages/recording/recording?param=${ViewAddInstrument}`);
};
gourl = (e) => {
const { url } = e.currentTarget.dataset;
if (this.isRegister()) {
go(url);
}
};
closeDev = () => {
this.setState({ isDev: false });
};
closeSiteSwiper = () => {
this.setState({ isShowSiteSwiper: false });
};
bannerSwiperchange() {}
gobanner(item) {
// 跳转类型0无跳转、1跳转内部链接、3跳转外部链接、4跳转小程序、5导向视频号、6导向视频号直播间',
/**
* `link` '跳转链接(跳转外部链接、跳转内部链接)',
`link_params` '跳转链接参数(跳转内部链接)',
`redirect_appid` '外链小程序appid跳转小程序',
`redirect_url` '外链小程序url跳转小程序',
`video_no` '视频号(导向视频号、导向视频号直播间)',
`feed_id` '视频号feedId导向视频号',
*/
let { id } = item;
this.GetSiteAddTag(id);
goJump(item);
}
/* 仪器与是否扫码进入逻辑 */
isVideo = (str) => {
if (str.includes(".mp4")) {
return true;
}
return false;
};
// 未绑定列表
unbindingInstrumentInfoList = async () => {
let { data } = await InstrumentInfo.unbindingInstrumentInfoList();
if (data.code === 200) {
if (data.data.length === 0) {
this.setState({
isDisabledClickAddDevice: true,
});
} else {
this.setState({
unbindingInstrumentList: data.data,
});
}
}
};
// 获取已绑定仪器列表
bindingInstrumentList = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
let { data: res } = await InstrumentInfo.bindingInstrumentList();
console.log(res,'查看绑定的设备');
// Taro.hideLoading();
if (res.code === 200) {
if(res.data.length === 0){
this.setState({ ViewAddInstrument: false });
}
this.setState({ instrumentList: res.data });
} else {
// 仪器列表失败todo
}
};
// 是否扫码进入小程序
isSancQrcodeEnter = async () => {
let instance = Taro.getCurrentInstance();
let q = instance.router?.params?.q;
if (q) {
// 扫码进入强制重新登录
this.WCUserLogin();
} else {
this.initData();
}
};
WCUserLogin = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
const { code } = await Taro.login();
const { data } = await WCUserLogin({ code });
Taro.hideLoading();
if (data.code === 200) {
Taro.setStorageSync("isWelcome", true);
Taro.setStorageSync("mobile", data.data.mobile);
this.props.tokenRefresh(data.data);
// 如果是扫码进入,直接跳转到注册登录页.
setTimeout(() => {
this.initPageData();
}, 300);
} else {
msg("请求失败,尝试重新请求");
setTimeout(() => {
this.WCUserLogin();
}, 2000);
}
};
// 只登陆,不做其他操作
onlyLogin = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
const { code } = await Taro.login();
const { data } = await WCUserLogin({ code });
Taro.hideLoading();
if (data.code === 200) {
Taro.setStorageSync("isWelcome", true);
Taro.setStorageSync("mobile", data.data.mobile);
this.props.tokenRefresh(data.data);
} else {
msg("请求失败,尝试重新请求");
}
};
closeBinding = () => {
this.setState({ isVisibleBinding: false });
};
confirmBinding = () => {
let { isExchangeBinding } = this.state;
if (!isExchangeBinding) {
// 绑定仪器
this.bindingInstrument();
} else {
// 换绑仪器
this.exchangeBinding();
}
};
// 根据扫码的序列号获取仪器信息
getInstrumentInfoBySerial = async () => {
let url = this.$instance.router?.params?.q || "";
let isScan = Taro.getStorageSync("isScan"); // 判断是否扫码进入
let serial = Taro.getStorageSync("serial"); // 扫码可能跳转注册页,所以先缓存
if (url || isScan) {
let { data } = await InstrumentInfo.getInstrumentInfoBySerial({
serial: serial,
});
if (data.code === 200) {
let instrumentInfo = data.data;
// 更新扫码进入仪器信息
this.setState({ instrumentInfo: instrumentInfo });
// 1有效 0无效
if (instrumentInfo.validStatus === 0) {
this.setState({ isBindingError: true });
return;
}
// 0已绑定 1未绑定 2已解绑
if (instrumentInfo.bindingStatus === 0) {
setTimeout(() => {
this.isBindingSerial();
}, 100);
let isBind = this.state.instrumentList.find(
(item) => item.id === instrumentInfo.id
);
if (isBind) {
this.setState({
isBeforeBindingError: true,
BeforeBindingErrorText: "序列号已绑定",
});
} else {
this.setState({
isBeforeBindingError: true,
BeforeBindingErrorText: "序列号已被其他用户绑定",
});
}
return;
} else if (
instrumentInfo.bindingStatus === 1 ||
instrumentInfo.bindingStatus === 2
) {
// 判断是否已绑定同名仪器,如果已绑定,判断序列号是否一致
// 如果自己已绑定,判断扫码序列号和已绑定序列号是否一致,如果一致:忽略
// 如果自己已绑定,判断扫码序列号和已绑定序列号是否一致,如果不一致:提示换绑
// 以上逻辑交给后端处理,直接查询是否绑定或换绑
setTimeout(() => {
this.isBindingSerial();
}, 100);
}
} else {
// 获取失败和绑定失败一个弹窗
this.setState({ isBindingError: true });
}
this.removeScanFun();
}
};
/** 查询是否可以绑定 */
isBindingSerial = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
let { instrumentInfo } = this.state;
let res = await InstrumentInfo.isBindingSerial({
serial: instrumentInfo.serial,
});
console.log("isBindingSerial", res);
if (res.data.code === 201) {
// 绑定
this.setState({ isExchangeBinding: false, isVisibleBinding: true });
} else if (res.data.code === 202) {
// 换绑
this.setState({ isExchangeBinding: true, isVisibleBinding: true });
}
Taro.hideLoading();
};
/** 调用接口绑定仪器 */
bindingInstrument = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
let { instrumentInfo, unbindingInstrumentList } = this.state;
let { data } = await InstrumentInfo.binding({
serial: instrumentInfo.serial,
});
Taro.hideLoading();
this.closeBinding();
this.removeScanFun();
if (data.code === 200) {
msg("绑定成功");
let obj = unbindingInstrumentList.find(
(item) => item.id === instrumentInfo.id
);
if (obj) {
setStorageSync("instrument_detail", obj);
}
setTimeout(() => {
// 绑定成功后,先查询设备介绍页,有数据则跳转,没数据则刷新已绑定数据
this.getInstrumentIntroInfo(instrumentInfo.id);
}, 1000);
return;
} else if (data.code === 202) {
// 换绑操作
this.setState({ isExchangeBinding: true, isVisibleBinding: true });
} else if (data.code === 201) {
// 跳转联系客服
this.setState({ isBindingError: true });
} else {
this.setState({ isBindingError: true });
}
};
/** 获取设备介绍页信息 */
getInstrumentIntroInfo = async (id) => {
let res = await InstrumentInfo.instructionInfo({
instrumentId: id,
});
if (res.data.code === 200) {
console.log("res.data.data", res.data.data);
if (res.data.data.length > 0) {
go("/pages/instrument/intro??customBack=true&id=" + id);
} else {
this.bindingInstrumentList();
}
}
};
// 换绑仪器
exchangeBinding = async () => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
let { instrumentInfo } = this.state;
let { data } = await InstrumentInfo.exchangeBinding({
serial: instrumentInfo.serial,
});
console.log("exchangeBinding", data);
Taro.hideLoading();
this.closeBinding();
if (data.code !== 200) {
//todo
}
};
// 仪器绑定失败弹窗
onBindErrorClose = () => {
this.setState({ isBindingError: false });
this.removeScanFun();
};
onBindErrorConfirm = () => {
this.onBindErrorClose();
go("/pages/consultant/consultant?customBack=true");
};
onBeforeBindClose = () => {
this.setState({ isBeforeBindingError: false });
this.removeScanFun();
};
onBeforeBindConfirm = () => {
this.setState({ isBeforeBindingError: false });
this.removeScanFun();
};
/**删除扫码缓存*/
removeScanFun = () => {
Taro.removeStorageSync("isScan"); // 扫码弹窗显示完后,不需要再判断是否扫码
Taro.removeStorageSync("serial"); // 扫码弹窗显示完后,删除缓存的扫码序列号
};
// 跳转仪器介绍页
goNursing = (item) => {
if (item.status === 0) {
setStorageSync("instrument_detail", item);
this.setState({ connectInstrument: item });
setTimeout(() => this.bindBlockLeft());
} else {
this.openCommonError([
"该仪器暂时无法进行在线护理,",
"请联系微信小助理",
]);
}
};
/* 扫码进入逻辑 */
/** 蓝牙逻辑 */
bindBlockLeft() {
if (!this.state.isRegisterBoolean) {
//未注册授权
this.alertRegister();
return false;
}
if (this.state.connectInstrument.type === 1) {
//非IOT
setTimeout(() => {
go("/pages/instrumentClickinUpload/index");
}, 10);
} else {
Taro.getSystemInfo({
success: (res) => {
console.log("getSystemInfo", res);
let { locationEnabled, locationAuthorized, bluetoothEnabled } = res;
if (!locationEnabled || !locationAuthorized) {
showModal({
t2: "您的手机定位授权未开启,请前往手机设置,打开定位访问授权",
btn2text: "查看指引",
}).then(() => {
go("/pages/connection_help/connection_help?type=location");
});
} else if (!bluetoothEnabled) {
showModal({
t2: "您的手机蓝牙授权未开启,请前往手机设置,打开蓝牙访问授权",
btn2text: "查看指引",
}).then(() => {
go("/pages/connection_help/connection_help?type=bluetoot");
});
} else {
// 打开连接弹窗
this.connectionOpen();
}
},
});
}
}
/**
* WE100,WL200配对完成回调
*/
pairingChange = (e) => {
console.log("===epairingChange===》", e);
go("/moduleIOT/pages/iotCarePlan/iotCarePlan"); // 画页面直接跳转
this.connectionClose();
};
async goIot() {
go("/moduleIOT/pages/iotCarePlan/iotCarePlan"); // 画页面直接跳转
// return;
}
//连接完成时数据的回调
offlineChange = async (e) => {
console.log("offlineChange", e);
this.pairingChange("offlineChange");
};
connectionOpen = async () => {
this.setState({ isConnectShow: true });
};
connectionClose = async () => {
this.setState({ isConnectShow: false });
};
connectionConfirm = async () => {
this.connectionClose();
};
/*蓝牙 END*/
/** 设备iot固件版本升级 */
// 是否更新弹窗
upgradeFun = () => {
this.setState({ isShowUpdateVersionTip: true, isConnectShow: false });
};
cancelUpdateVersionTip = () => {
// 关闭提示
this.setState({ isShowUpdateVersionTip: false });
};
confirmUpdateVersionTip = () => {
// 提示升级与开始升级
this.setState({
isShowUpdateVersionTip: false,
isShowVersionUpgrading: true,
});
Taro.removeStorageSync("isDisconnectUpdate");
};
// 完成升级
wl200UpgradeFinishFun = (isWL200) => {
let { connectInstrument } = this.state;
console.log("connectInstrument", connectInstrument);
let content = "";
if (isWL200) {
content = connectInstrument.iotVersionUpgrade;
} else {
content = connectInstrument.we200IotVersionUpgrade;
}
let nodes = decodeURIComponent(content || "");
nodes = nodes.replace(/\<img/gi, '<img style="width:100%;height:auto" ');
nodes = nodes.replace(
/\<table/gi,
'<table style="border-spacing: 0;border-collapse: collapse;border: 1px solid #000" '
);
nodes = nodes.replace(
/\<td/gi,
'<td style="border: 1px solid #000;text-align:center" '
);
this.setState({
isShowVersionUpgrading: false,
isShowVersionUpgradFinish: true, // 升级介绍
versionUpgradFinishNodes: nodes,
});
};
// 升级失败
wl200UpgradeErrorFun = () => {
this.setState({
isShowVersionUpgrading: false,
});
msg("升级失败");
};
// 关闭升级完成公告
onVersionUpgradFinish = () => {
this.setState({
isShowVersionUpgradFinish: false,
});
};
/** iot版本升级 END */
/**
* @name 初始化WL200设备护理历史
* @description 如果存在护理历史,则提示是否连接设备,重新读取
*/
initDeviceNursingHistory = async () => {
let WL200NursingHistory = Taro.getStorageSync("WL200NursingHistory");
if (WL200NursingHistory) {
this.setState({
isShowReConnectDeviceRecordWL200: true,
});
}
};
closeReConnectDeviceRecordWL200 = () => {
Taro.removeStorageSync("WL200NursingHistory");
this.setState({
isShowReConnectDeviceRecordWL200: false,
});
};
confirmReConnectDeviceRecordWL200 = () => {
let WL200NursingHistory = Taro.getStorageSync("WL200NursingHistory");
console.log("WL200NursingHistory", WL200NursingHistory);
this.setState({
isShowReConnectDeviceRecordWL200: false,
});
let item = getStorageSync("instrument_detail");
this.setState({ connectInstrument: item });
setTimeout(() => this.bindBlockLeft());
};
// 扫码绑定必须先完成注册弹窗:确定以后删除扫码缓存,防止死循环
onUnloginConfirm() {
this.setState({ showEquipment: false });
this.removeScanFun();
}
onUnloginClose() {
this.setState({ showEquipment: false });
this.removeScanFun();
}
/**
* @name 打开公共提示弹窗
* @description 仅适用于仅提示文字的弹窗
* @params 传入字符类型数组,不同下标会自动换行
*/
openCommonError = (text) => {
this.setState({
commonErrorText: text,
isCommonError: true,
});
};
onCommonErrorFun = () => {
this.setState({
isCommonError: false,
});
};
render() {
let {
isCommonError,
commonErrorText,
calendarComplete,
calendarInComplete,
currentDate,
messagecount,
sitePopupList,
isShowPrivacyPopup,
isNotRegister,
isShowSiteSwiper,
isDev,
bannerList,
bannerCurrent,
// 绑定弹窗
isVisibleBinding,
isBindingError,
isBeforeBindingError,
BeforeBindingErrorText,
isRegisterBoolean,
isExchangeBinding,
instrumentInfo,
instrumentList,
ViewAddInstrument,
showEquipment,
// 升级弹窗
isShowUpdateVersionTip,
isShowVersionUpgrading,
isShowVersionUpgradFinish,
versionUpgradFinishNodes,
// 蓝牙连接
isConnectShow,
connectInstrument,
// 设备存在记录,是否重连
isShowReConnectDeviceRecordWL200,
} = this.state;
return (
<Block>
<View catchMove>
<PopupAlert
isShow={isCommonError}
title="提示"
content={
<Block>
{commonErrorText.map((item) => {
return <View>{item}</View>;
})}
</Block>
}
confirmButtonText="知道了"
textAlgin="center"
close={this.onCommonErrorFun}
confirm={this.onCommonErrorFun}
/>
<PopupConfirm
isShow={isShowReConnectDeviceRecordWL200}
isClose
title="提示"
zIndex={10020}
myClassName="level-up"
content={
<Block>
<View></View>
<View></View>
</Block>
}
cancelButtonText="取消"
confirmButtonText="连接设备"
textAlgin="center"
close={this.closeReConnectDeviceRecordWL200}
confirm={this.confirmReConnectDeviceRecordWL200}
/>
<PopupAlert
isShow={isBindingError}
title="提示"
content={
<Block>
<View></View>
<View></View>
</Block>
}
confirmButtonText="知道了"
textAlgin="center"
close={this.onBindErrorClose}
confirm={this.onBindErrorConfirm}
/>
<PopupAlert
isShow={isNotRegister}
isClose
title="提示"
content="暂未授权注册,请点击注册"
confirmButtonText="确定"
textAlgin="center"
type="1"
close={this.closeAlert}
confirm={this.closeAlert}
/>
<PopupAlert
isShow={isDev}
title="提示"
content="页面正在开发中"
confirmButtonText="确定"
textAlgin="center"
close={this.closeDev}
confirm={this.closeDev}
/>
<PopupPrivacy
isShow={isShowPrivacyPopup}
closePrivacy={this.closePrivacy}
/>
<PopupBinding
type={instrumentInfo.bindingStatus}
isShow={isVisibleBinding}
isRegisterBoolean={isRegisterBoolean}
isExchangeBinding={isExchangeBinding}
data={instrumentInfo}
close={this.closeBinding}
confirm={this.confirmBinding}
/>
<PopupAlert
isShow={isBindingError}
title="提示"
content={
<Block>
<View></View>
<View></View>
</Block>
}
confirmButtonText="知道了"
textAlgin="center"
close={this.onBindErrorClose}
confirm={this.onBindErrorConfirm}
/>
<PopupAlert
isShow={isBeforeBindingError}
title="提示"
content={
BeforeBindingErrorText || "您选择的仪器有误,请重新确认选择"
}
confirmButtonText="知道了"
textAlgin="center"
close={this.onBeforeBindClose}
confirm={this.onBeforeBindConfirm}
/>
<PopupAlert
isShow={showEquipment}
title="提示"
content={
<Block>
<View className="mb10">
{instrumentInfo.instrumentName}
</View>
<View className="mb10">{instrumentInfo.serial}</View>
<View className="mb10"></View>
</Block>
}
confirmButtonText="知道了"
textAlgin="center"
close={this.onUnloginClose.bind(this)}
confirm={this.onUnloginConfirm.bind(this)}
></PopupAlert>
<PopupSiteSwiper
isShow={isShowSiteSwiper}
siteData={sitePopupList}
size="middle"
confirmButtonText="确定"
textAlgin="center"
close={this.closeSiteSwiper}
confirm={this.closeSiteSwiper}
/>
{/* IOT相关弹窗 */}
{isConnectShow && (
<ConnectionBluetoot
deviceInfo={connectInstrument}
close={this.connectionClose}
confirm={this.connectionConfirm}
offlineChange={this.offlineChange}
pairingChange={this.pairingChange}
upgradeFun={this.upgradeFun}
/>
)}
<PopupAlert
isLarge
isClose
isShow={isShowUpdateVersionTip}
title="提示"
content={
<Block>
<View></View>
<View></View>
</Block>
}
textAlgin="center"
confirmButtonText="确定"
close={this.cancelUpdateVersionTip}
confirm={this.confirmUpdateVersionTip}
/>
{isShowVersionUpgrading && (
<UpdateIotWL200
isShow={isShowVersionUpgrading}
finishFun={this.wl200UpgradeFinishFun}
errorFun={this.wl200UpgradeErrorFun}
/>
)}
<PopupAlert
isShow={isShowVersionUpgradFinish}
title="升级内容公告"
content={
<Block>
<View className="nodes">
<RichText nodes={versionUpgradFinishNodes} />
</View>
</Block>
}
confirmButtonText="知道了"
textAlgin="left"
isClose
close={this.onVersionUpgradFinish}
confirm={this.onVersionUpgradFinish}
/>
{/* IOT相关弹窗 END */}
</View>
<Navbar
leftSlot={
<Block>
<View
className="message"
onClick={this.gourl}
data-url="/pages/message/message"
>
<Image
className="message-img"
src={require("../../img/index/message.png")}
mode="aspectFill"
/>
{messagecount ? <View className="tip" /> : ""}
</View>
</Block>
}
/>
<View className="index">
<View className="date-title" onClick={this.toNursingRecords}>
<Text className="text"></Text>
<Image
src={require("../../img/index/right.png")}
style="width: 20rpx;height: 20rpx;"
/>
</View>
<View className="bg-while">
<AtCalendar
hideArrow
isSwiper={false}
currentDate={currentDate}
complete={calendarComplete}
incomplete={calendarInComplete}
maxDate={Date.now()}
onTimeChange={this.onTimeChange}
/>
</View>
</View>
<View className="infobox5">
{instrumentList.length > 0 && (
<Block>
<View className="nurse_plan_box flex aitems sb">
<View className="title"></View>
<View
className="txt_box flex jcenter aitems"
data-url="/pages/instrument/instrument"
onClick={this.gourl}
>
<Image
className="right_icon"
src={require("../../img/black-add.png")}
mode="aspectFill"
/>
<View className="txt"></View>
</View>
</View>
<View style="overflow-x: auto;">
<View className="device_list flex">
{instrumentList.map((item, index) => {
return (
<View
key={"instrumentList" + index}
className="device_item"
onClick={this.goNursing.bind(this, item)}
>
<Image
className="banner_img"
src={item.banner}
mode="aspectFill"
/>
<View className="device_name ellipsis1">
{item.name}
</View>
</View>
);
})}
</View>
</View>
</Block>
)}
{instrumentList.length === 0 && (
<Block>
<View className="nurse_plan_box flex aitems sb">
<View className="title"></View>
</View>
<View className="add_device flex jcenter aitems bg-while">
<View className="add_device_btn">
<View className="txt_box flex jcenter aitems">
<View
className="at-icon at-icon-add"
style="color: #fff;font-size: 30rpx;"
></View>
<View className="txt" onClick={this.addNewDevice}>
</View>
</View>
</View>
<View className="tips"></View>
</View>
</Block>
)}
</View>
<View style="margin: 20px">
<View onClick={this.goIot}></View>
</View>
<View className="infobox3">
<Swiper
autoplay
onAnimationFinish={this.bannerSwiperchange.bind(this)}
current={bannerCurrent}
>
{bannerList.map((item, index) => {
return (
<SwiperItem
key={"banner_" + index}
onClick={this.gobanner.bind(this, item)}
>
<Image style="width:100%;height:100%" src={item.fileUrl} />
</SwiperItem>
);
})}
</Swiper>
</View>
<View style="height:200rpx"></View>
</Block>
);
}
}
const mapStateToProps = (state) => ({
background: state.navigation.background,
mobile: state.userInfo.mobile,
isShowIndexFlag: state.globalStore.isShowIndexFlag,
});
const mapDispatchToProps = (dispatch) => ({
userRefresh(data) {
dispatch(userRefresh(data));
},
tokenRefresh(data) {
dispatch(tokenRefresh(data));
},
setIndexFlag(data) {
dispatch(setIndexFlag(data));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Index);
// instrumentId