解决冲突

master
qsj 2 years ago
commit db8d3fe6dc

@ -37,6 +37,11 @@ class App extends Component<PropsWithChildren> {
onError(error) {
console.log("error 错误捕获", error);
}
onUnload() {
console.log("App onUnload");
Taro.removeStorageSync("isScan"); // 扫码弹窗显示完后,不需要再判断是否扫码
Taro.removeStorageSync("serial"); // 扫码弹窗显示完后,删除缓存的扫码序列号
}
// 对应 onShow
componentDidShow() {}

@ -59,8 +59,10 @@ export const fr200DeviceControlCommand = {
/**
* '进入水分测试模式' = 'switchTestMode',
* '启动水分测试模式' = 'startTestMode',
*
* face: "01", 面部
* eyes: "02", 脸部
* eyes: "02", 眼部
*
* nasolabialFold: "03", 法令纹
* mandibularLine: "04", 下颌线
* led: "05", led
@ -68,6 +70,7 @@ export const fr200DeviceControlCommand = {
* maskPenetration: "07",面膜促渗
* essence: "08", 精华模式
* headLiftingPro: "09", 抬头纹Pro
*
* neck: "0A", 颈纹
* partition: "11", 分区模式 废弃VM1001
* ignore: "255", 不改变/无模式

@ -86,6 +86,7 @@ export default class DeviceConnectPopup extends Component<any, any> {
error,
isDisconnect,
} = this.props;
console.log("data connection", data, data.bluetoothConnecting);
return (
<Block>
@ -113,7 +114,16 @@ export default class DeviceConnectPopup extends Component<any, any> {
</View>
<View className="device-popup-content-box">
{!this.isImage(data.bluetoothConnecting) ? (
<Video className="videos" src={data.bluetoothConnecting} />
<Video
className="videos"
autoplay
loop
objectFit="cover"
enablePlayGesture
showFullscreenBtn={false}
playBtnPosition="center"
src={encodeURIComponent(data.bluetoothConnecting)}
/>
) : (
<Image
className="images"
@ -199,7 +209,16 @@ export default class DeviceConnectPopup extends Component<any, any> {
</View>
<View className="device-popup-content-box">
{!this.isImage(data.bluetoothClosed) ? (
<Video className="videos" src={data.bluetoothClosed} />
<Video
className="videos"
autoplay
loop
objectFit="cover"
enablePlayGesture
showFullscreenBtn={false}
playBtnPosition="center"
src={data.bluetoothClosed}
/>
) : (
<Image
className="images"
@ -239,7 +258,16 @@ export default class DeviceConnectPopup extends Component<any, any> {
</View>
<View className="device-popup-content-box">
{!this.isImage(data.bluetoothConnectFail) ? (
<Video className="videos" src={data.bluetoothConnectFail} />
<Video
className="videos"
autoplay
loop
objectFit="cover"
enablePlayGesture
showFullscreenBtn={false}
playBtnPosition="center"
src={data.bluetoothConnectFail}
/>
) : (
<Image
className="images"

@ -91,7 +91,7 @@ export default class AtCalendarController extends React.Component<any, any> {
return (
<Block>
<View className="at-calendar__controller controller flex-justify-sb">
<View className='at-calendar__controller controller flex-justify-sb'>
{hideArrow ? null : (
<View
className={classnames(
@ -103,9 +103,9 @@ export default class AtCalendarController extends React.Component<any, any> {
onClick={this.props.onPreMonth.bind(this, isMinMonth)}
/>
)}
<View className="calendar-top-date-btn">
<View className='calendar-top-date-btn'>
<View
style="display: flex;align-items: center;"
style='display: flex;align-items: center;'
onClick={this.openDate}
>
{/* <Text className="controller__info"></Text> */}
@ -113,10 +113,10 @@ export default class AtCalendarController extends React.Component<any, any> {
<Text style={{ fontSize: "32rpx", fontWeight: "600" }}>
{dayjsDate.format("YYYY.MM.DD")}
</Text>
<View style="margin-left: 34rpx;">
<View style='margin-left: 34rpx;'>
<Image
src={require("../img/calendar.png")}
style="width:28rpx;height:28rpx;"
style='width:28rpx;height:28rpx;'
/>
</View>
</View>
@ -127,33 +127,33 @@ export default class AtCalendarController extends React.Component<any, any> {
<Popup
show={showDatePicker}
position="bottom"
position='bottom'
// close-icon="/img/fr200/close.png"
round
onClick={this.onClickStop}
// onClose={this.onPopupClose}
>
<View className="toolbar">
<View className="toolbar_title">
<View className='toolbar'>
<View className='toolbar_title'>
<Text></Text>
<View
style="margin-left: 20rpx;color:#666;font-size: 34rpx"
className="at-icon at-icon-close popup-date-close"
style='margin-left: 20rpx;color:#666;font-size: 34rpx'
className='at-icon at-icon-close popup-date-close'
onClick={this.onPopupClose}
></View>
</View>
<View className="select_box">
<View className="text"></View>
<View className="date">{currentDate}</View>
<View className='select_box'>
<View className='text'></View>
<View className='date'>{currentDate}</View>
</View>
</View>
<DatetimePicker
type="date"
type='date'
value={curDate}
maxDate={maxDate}
onInput={_.throttle(this.onInput.bind(this), 500)}
/>
<View className="btn_confirm" onClick={this.onSelectDate}>
<View className='btn_confirm' onClick={this.onSelectDate}>
</View>
</Popup>

@ -71,11 +71,12 @@ export default class Index extends Component {
console.log("url", url);
this.setSelected(index);
if (url === "pages/index/index") {
Taro.reLaunch({ url: "/" + url });
} else {
Taro.switchTab({ url: "/" + url });
}
Taro.switchTab({ url: "/" + url });
// if (url === "pages/index/index") {
// Taro.reLaunch({ url: "/" + url });
// } else {
// Taro.switchTab({ url: "/" + url });
// }
}
setSelected(idx: number) {

@ -4,6 +4,15 @@ import { Component, PropsWithChildren, useEffect, useState } from "react";
// import { InstrumentInfo } from "../../utils/Interface";
/*** redux ***/
import { connect } from "react-redux";
import {
setInstrument,
setSerial,
setInstrumentName,
} from "@/store/features/instrument";
/*** redux end ***/
import Taro from "@tarojs/taro";
// 引入 Swiper, SwiperItem 组件
import {
@ -32,7 +41,7 @@ import NoDataComponent from "@/components/base/nodata";
import "./instrument.less";
export default class Instrument extends Component<any, any> {
class Instrument extends Component<any, any> {
constructor(props) {
super(props);
this.state = {
@ -283,6 +292,7 @@ export default class Instrument extends Component<any, any> {
let instrumentInfo = data.data;
// 更新扫码进入仪器信息
this.setState({ instrumentInfo: instrumentInfo });
this.props.setInstrument(instrumentInfo);
}
};
/**删除扫码缓存*/
@ -301,7 +311,6 @@ export default class Instrument extends Component<any, any> {
let res = await InstrumentInfo.isBindingSerial({
serial: instrumentInfo.serial,
});
console.log("isBindingSerial", res);
if (res.data.code === 201) {
// 绑定
this.setState({ isExchangeBinding: false, isVisibleBinding: true });
@ -324,6 +333,7 @@ export default class Instrument extends Component<any, any> {
let { channelInfo } = this.state;
await this.getInstrumentInfoBySerial(channelInfo.serialCode);
let res = await InstrumentInfo.manualCodeBinding({
serial: channelInfo.serialCode,
serialImage: channelInfo.serialImage,
@ -334,7 +344,12 @@ export default class Instrument extends Component<any, any> {
let code = Number(res.code); // 强制类型转换
setTimeout(() => {
if (code === 200) {
this.openBindingVisible();
// this.openBindingVisible();
msg("绑定成功");
setTimeout(() => {
setStorageSync("instrument_detail", JSON.stringify(channelInfo));
this.getInstrumentIntroInfo(channelInfo.id);
}, 500);
} else if (code === 202) {
this.changeBindBox();
} else if (code === 203) {
@ -364,15 +379,12 @@ export default class Instrument extends Component<any, any> {
Taro.hideLoading();
let code = Number(res.data.code);
console.log("scanCodeBinding code", code);
setTimeout(() => {
console.log("scanCodeBinding code", code, code === 204);
if (code === 200) {
msg("绑定成功");
setTimeout(() => {
setStorageSync("instrument_detail", JSON.stringify(channelInfo));
go("/instrument/pages/instrument/intro?id=" + channelInfo.id);
}, 1000);
Taro.setStorageSync("isScan", true);
Taro.setStorageSync("serial", channelInfo.serialCode);
Taro.switchTab({ url: "/pages/index/index" });
// this.openBindingVisible();
} else if (res.data.code === 202) {
this.changeBindBox();
} else if (res.data.code === 203) {
@ -401,10 +413,10 @@ export default class Instrument extends Component<any, any> {
if (res.data.code === 200) {
this.setState({ isVisibleBinding: false });
msg("绑定成功");
setStorageSync("instrument_detail", JSON.stringify(channelInfo));
setTimeout(() => {
go("/instrument/pages/instrument/intro?id=" + channelInfo.id);
}, 1000);
setStorageSync("instrument_detail", JSON.stringify(channelInfo));
this.getInstrumentIntroInfo(channelInfo.id);
}, 500);
} else if (res.data.code === 202) {
this.changeBindBox();
} else if (res.data.code === 203) {
@ -431,6 +443,24 @@ export default class Instrument extends Component<any, any> {
this.closeBinding();
if (data.code === 200) {
msg("换绑成功");
setTimeout(() => {
setStorageSync("instrument_detail", JSON.stringify(channelInfo));
this.getInstrumentIntroInfo(channelInfo.id);
}, 500);
}
};
/** 获取设备介绍页信息:绑定判断是否存在介绍信息,如果存在则跳转,不存在则回到首页 */
getInstrumentIntroInfo = async (id) => {
let res = await InstrumentInfo.instructionInfo({
instrumentId: id,
});
if (res.data.code === 200) {
if (res.data.data.length > 0) {
go("/instrument/pages/instrument/intro??customBack=true&id=" + id);
} else {
Taro.switchTab({ url: "/pages/index/index" });
}
}
};
@ -470,7 +500,7 @@ export default class Instrument extends Component<any, any> {
}
customBack = () => {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
};
// 打开绑定弹窗
@ -772,3 +802,19 @@ export default class Instrument extends Component<any, any> {
);
}
}
const mapStateToProps = (state) => ({
storeInstrument: state.instrument,
});
const mapDispatchToProps = (dispatch) => ({
setSerial(data) {
dispatch(setSerial(data));
},
setInstrumentName(data) {
dispatch(setInstrumentName(data));
},
setInstrument(data) {
dispatch(setInstrument(data));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Instrument);

@ -132,7 +132,7 @@ class Intro extends Component<any, any> {
customBack = () => {
let customBack = this.$instance.router?.params?.customBack;
if (customBack) {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
return;
}
back();

@ -193,7 +193,7 @@ page {
background: #fff;
flex-direction: column;
height: 100%;
border-radius: 20rpx;
border-radius: 30rpx;
overflow: hidden;
box-shadow: -2rpx 0 12rpx 0.5rpx rgba(129, 129, 129, 0.05);
margin-right: 23rpx;

@ -479,7 +479,7 @@ export default class InstrumentClickInUpload extends Component<any, any> {
onClick={this.handleChooseImage}
>
<Image
src={require("@/img/fr200/add-Image.png")}
src={require("@/img/fr200/add-image.png")}
mode='aspectFill'
></Image>
</View>

@ -11,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,
@ -41,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";
@ -562,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,
@ -621,7 +608,7 @@ class IotCarePlanFR200 extends Component<any, any> {
/** 连接设备 End */
/** 护理过程 */
isStandStatus: false, // 当前模式是否舱体/支架模式
isRuningTest: false, // 是否正在测试
isShowStepTips: false, // 是否显示介绍步骤弹窗
isConnectionBlutoot: true, // 是否已连接蓝牙
isShowNurse: true, // 是否开始并显示护理 FR200默认已经开始准备护理
@ -673,8 +660,6 @@ class IotCarePlanFR200 extends Component<any, any> {
// 上一次护理记录未生成,是否继续连接设备
isShowReReadRecordConnect: false,
// 按钮是否不可运行:FR200不可禁用
isFooterBtnDisabled: false,
// isFirstEntryMode: false, // 模式首次打开
isShowHistoryMsg: false, // 是否显示正在同步历史
@ -850,7 +835,6 @@ class IotCarePlanFR200 extends Component<any, any> {
isConnectionBlutoot: false, // 断开蓝牙
// isShowCountdown: false, // 关闭倒计时,防止倒计时还在运行
});
this.footerIsDisabled();
};
GetModeList = async (id) => {
@ -954,10 +938,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() {
@ -1055,9 +1044,7 @@ class IotCarePlanFR200 extends Component<any, any> {
};
/** 开始护理按钮:点击开始,页面进行到下一步 */
onStartNurse = async () => {
// 如果检查通过,可运行,则执行下一步
if (!this.footerIsDisabled()) {
this.stepNext();
this.stepNext();
setTimeout(() => {
this.onNursingTap();
@ -1066,8 +1053,6 @@ class IotCarePlanFR200 extends Component<any, any> {
this.showCountdownFun(downNum, () => { });
}, 500);
return;
}
// 如果检查失败,则报错
this.onEmitErrorTips();
};
@ -1081,10 +1066,7 @@ class IotCarePlanFR200 extends Component<any, any> {
let { ActiveModeItem } = this.state;
// 按钮不可点击时,提示报错
let isDisabled = this.footerIsDisabled();
if (isDisabled) {
this.showTips("检测到您的设备没有紧贴肌肤,请紧贴肌肤后重新尝试");
}
this.showTips("检测到您的设备没有紧贴肌肤,请紧贴肌肤后重新尝试");
});
};
@ -1707,7 +1689,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({
@ -1835,22 +1817,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.判断是否已存在缓存的护理记录:如果没有历史,则缓存
@ -2410,7 +2379,7 @@ class IotCarePlanFR200 extends Component<any, any> {
this.setState({
isConnectShow: false,
});
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
};
// 手动护理模式切换:提示是否保存护理
@ -2471,24 +2440,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 () => {
@ -2532,7 +2485,7 @@ class IotCarePlanFR200 extends Component<any, any> {
isFirstTipShow,
nurseInfo,
isShowReReadRecordSave,
isFooterBtnDisabled,
isRuningTest,
isShowHistoryMsg,
isModeLock,
} = this.state;
@ -2765,30 +2718,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>

@ -1945,7 +1945,7 @@ class IotCarePlanWL200 extends Component<any, any> {
this.setState({
isConnectShow: false,
});
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
};
// 手动护理模式切换:提示是否保存护理
@ -2056,7 +2056,7 @@ class IotCarePlanWL200 extends Component<any, any> {
console.log("出发", e);
};
customBack = () => {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
};
onModeLockOpen = async () => {

@ -2,115 +2,72 @@ import { Block, View, Image, Text, CoverView } from "@tarojs/components";
import "./FR200.less";
interface Props {
isShowNurse: boolean;
// isShowNurse: boolean;
currentWorkMode: string; // 当前工作模式
isStopNurse: boolean;
isDisabled: boolean; // 是否禁用开始暂停按钮:模式与连接设备是否一致
isRuningTest: boolean; // 是否在运行测试
onEmitStartNurse: Function; // 每次点击item回调事件和数据给父组件
onEmitSwitchChange: Function;
onEmitEndPlan: Function;
onEmitErrorTips: Function; // 不可点击,提示错误
}
function Index({
isShowNurse,
currentWorkMode,
isStopNurse,
isDisabled,
isRuningTest,
onEmitStartNurse,
onEmitSwitchChange,
onEmitEndPlan,
onEmitErrorTips,
}: Props) {
const onStartNurse = () => {
onEmitStartNurse();
};
const onSwitchChange = () => {
if (!isDisabled) {
onEmitSwitchChange();
}
onEmitSwitchChange();
};
const onEndPlan = () => {
onEmitEndPlan();
};
const onErrorTips = () => {
onEmitErrorTips();
};
return (
<Block>
<View className="iot-footer">
{!isShowNurse && (
{currentWorkMode === "moistureTest" && (
<Block>
{isDisabled ? (
<View className="btn btn-disable" onClick={onStartNurse}>
{!isRuningTest ? (
<View className="btn " onClick={onStartNurse}>
</View>
) : (
<View className="btn" onClick={onStartNurse}>
</View>
<View className="btn">...</View>
)}
</Block>
)}
{isShowNurse && (
{currentWorkMode !== "moistureTest" && (
<View className="switch-btn-box">
{!isDisabled && (
<View className="btn-item border-right" onClick={onSwitchChange}>
{isStopNurse ? (
<Block>
<Image
className="btn-icon"
src={require("@/img/iot/start_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text"></Text>
</Block>
) : (
<Block>
<Image
className="btn-icon"
src={require("@/img/iot/pause_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text"></Text>
</Block>
)}
</View>
)}
{isDisabled && (
<View
className="btn-item border-right btn-disable"
onClick={onErrorTips}
>
{isStopNurse ? (
<Block>
<Image
className="btn-icon"
style="color: #ccc"
src={require("@/img/iot/start_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text" style="color: #ccc">
</Text>
</Block>
) : (
<Block>
<Image
className="btn-icon"
style="color: #ccc"
src={require("@/img/iot/pause_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text" style="color: #ccc">
</Text>
</Block>
)}
</View>
)}
<View className="btn-item border-right" onClick={onSwitchChange}>
{isStopNurse ? (
<Block>
<Image
className="btn-icon"
src={require("@/img/iot/start_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text"></Text>
</Block>
) : (
<Block>
<Image
className="btn-icon"
src={require("@/img/iot/pause_nurse.png")}
mode="aspectFill"
/>
<Text className="btn-text"></Text>
</Block>
)}
</View>
<View className="btn-item" onClick={onEndPlan}>
<Image

@ -41,7 +41,7 @@ export default class Consultant extends Component<any, any> {
customBack = () => {
let customBack = this.$instance.router?.params?.customBack;
if (customBack) {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
return;
}
back();

@ -75,7 +75,7 @@ class Entry extends Component<any, any> {
let detail = JSON.parse(MpSplashDetail_type1);
let list = detail.filter((item: any) => item.fileSuffix === "images");
if (list.length === 0) {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
return;
}
let welcomeList = list.map((item) => {
@ -87,7 +87,7 @@ class Entry extends Component<any, any> {
});
this.setState({ welcomeList });
} else {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
}
}
@ -114,7 +114,7 @@ class Entry extends Component<any, any> {
}
}
toHomePage() {
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
}
onFinish(event) {

@ -1,4 +1,5 @@
import classnames from "classnames";
setSerial;
import dayjs from "dayjs";
import Taro from "@tarojs/taro";
import { Component } from "react";
@ -16,6 +17,11 @@ import { Popup } from "@antmjs/vantui";
import { connect } from "react-redux";
import { userRefresh, tokenRefresh } from "@/store/features/userInfo";
import { setIndexFlag } from "@/store/features/globalStore";
import {
setInstrument,
setSerial,
setInstrumentName,
} from "@/store/features/instrument";
/*** redux end ***/
/** 自定义组件 **/
@ -59,8 +65,6 @@ import {
// const log = require("@/utils/log");
class Index extends Component<any, any> {
$instance: any = Taro.getCurrentInstance();
constructor(props) {
super(props);
this.state = {
@ -117,10 +121,10 @@ class Index extends Component<any, any> {
createBy: null,
createTime: "2024-01-19 17:46:10",
exportFields: [],
id: 4,
instrumentId: 82,
id: 0,
instrumentId: 0,
instrumentIdArray: null,
instrumentName: "研发测试FR380",
instrumentName: "",
instrumentSerialIdList: [],
queryInstrumentIds: null,
remark: null,
@ -154,9 +158,28 @@ class Index extends Component<any, any> {
};
}
async onLoad() {
async onLoad(options) {
console.log("onLoad options", options);
if (options) {
if (options?.q) {
Taro.setStorageSync("isScan", true);
let url = options.q;
let _url = decodeURIComponent(url);
if (_url.indexOf("?")) {
let ids = _url.split("?");
if (ids.length > 1) {
let serial = ids[1];
Taro.setStorageSync("serial", serial);
}
}
console.log("Taro.getCurrentInstance()", Taro.getCurrentInstance());
Taro.reLaunch({ url: "/pages/index/index" }); // 链接扫码进入需要清空router重置地址栏参数防止bug
}
}
// 仅非扫码进入页面时,校验跳转欢迎页
if (!this.$instance.router?.params?.q) {
let $instance: any = Taro.getCurrentInstance();
console.log("$instance", $instance);
if (!$instance.router?.params?.q) {
const isFirst = Taro.getStorageSync("isWelcome");
if (!isFirst) {
go("/pages/initiate/initiate");
@ -168,20 +191,22 @@ class Index extends Component<any, any> {
componentWillUnmount() {
// 页面卸载监听
Taro.offAppHide((res) => {});
this.$instance = null;
Taro.offAppHide((res) => {
console.log("页面卸载监听 offAppHide");
});
}
componentDidShow() {
const tabbar = Taro.getTabBar<CustomTabBar>(this.$instance.page);
tabbar?.setSelected(0);
console.log(
this.state.instrumentInfo,
"查看",
this.state.instrumentList,
Taro.getStorageSync("skipRegister")
);
const handleAsyncLogic = async () => {
// tabbar icon切换
let $instance: any = Taro.getCurrentInstance();
const tabbar = Taro.getTabBar<CustomTabBar>($instance.page);
tabbar?.setSelected(0);
// 扫码仪器数据同步
this.setState({
instrumentInfo: this.props.storeInstrument,
});
// 判断是否跳过了注册
if (Taro.getStorageSync("skipRegister")) {
await this.EquipmentNo(); // 扫码序列号查询:注册后才调用,因为扫码未注册直接跳转注册页
@ -189,7 +214,9 @@ class Index extends Component<any, any> {
Taro.removeStorageSync("skipRegister");
} else {
// 已注册且非跳过,正常执行逻辑
this.showInit();
setTimeout(() => {
this.showInit();
});
}
};
handleAsyncLogic();
@ -213,40 +240,13 @@ class Index extends Component<any, any> {
showInit = async () => {
// 判断是否登录
this.$instance = Taro.getCurrentInstance();
let mobile = Taro.getStorageSync("mobile");
if (mobile) {
this.setState({ isRegisterBoolean: true });
}
// 非扫码进入小程序,需判断是否跳转欢迎页;扫码进入小程序,先缓存序列号,再检测隐私弹窗
let serial = Taro.getStorageSync("serial");
console.log(this.$instance, "2222", 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();
}
// 直接检查隐私弹窗
this.checkShowPrivacyPopup();
};
// 检测是否弹出隐私协议
@ -283,7 +283,6 @@ class Index extends Component<any, any> {
// 查看设备序号与仪器
EquipmentNo = async () => {
let serial = Taro.getStorageSync("serial"); // 扫码可能跳转注册页,所以先缓存
let { data } = await InstrumentInfo.getInstrumentInfoBySerial({
serial: serial,
});
@ -292,6 +291,7 @@ class Index extends Component<any, any> {
let instrumentInfo = data.data;
// 更新扫码进入仪器信息
this.setState({ instrumentInfo: instrumentInfo });
this.props.setInstrument(instrumentInfo);
// 1有效 0无效
// if (instrumentInfo.validStatus === 0) {
@ -341,13 +341,11 @@ class Index extends Component<any, any> {
// 防止逻辑出错没有token
await this.onlyLogin();
}
console.log("initPageData", Taro.getStorageSync("serial"));
// 如果是扫码且已有token则跳转
if (Taro.getStorageSync("serial")) {
console.log(mobile, "mobile");
// 如果已注册绑定手机号不用跳转
let serial = Taro.getStorageSync("serial");
if (serial) {
if (!mobile) {
// 如果未注册绑定手机号,就去注册
setTimeout(() => {
go("/pages/register/register");
}, 300);
@ -652,9 +650,12 @@ class Index extends Component<any, any> {
};
// 根据扫码的序列号获取仪器信息
getInstrumentInfoBySerial = async () => {
let url = this.$instance.router?.params?.q || "";
let $instance: any = Taro.getCurrentInstance();
let url = $instance.router?.params?.q || "";
let isScan = Taro.getStorageSync("isScan"); // 判断是否扫码进入
let serial = Taro.getStorageSync("serial"); // 扫码可能跳转注册页,所以先缓存
if (!serial) return;
if (url || isScan) {
let { data } = await InstrumentInfo.getInstrumentInfoBySerial({
serial: serial,
@ -740,6 +741,7 @@ class Index extends Component<any, any> {
let { data } = await InstrumentInfo.binding({
serial: instrumentInfo.serial,
});
console.log("bindingInstrument", data);
Taro.hideLoading();
this.closeBinding();
this.removeScanFun();
@ -773,13 +775,12 @@ class Index extends Component<any, any> {
}
};
/** 获取设备介绍页信息 */
/** 获取设备介绍页信息:绑定判断是否存在介绍信息,如果存在则跳转,不存在则回到首页 */
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("/instrument/pages/instrument/intro??customBack=true&id=" + id);
} else {
@ -798,11 +799,14 @@ class Index extends Component<any, any> {
let { data } = await InstrumentInfo.exchangeBinding({
serial: instrumentInfo.serial,
});
console.log("exchangeBinding", data);
Taro.hideLoading();
this.closeBinding();
if (data.code !== 200) {
//todo
if (data.code === 200) {
msg("换绑成功");
setTimeout(() => {
setStorageSync("instrument_detail", JSON.stringify(instrumentInfo));
this.getInstrumentIntroInfo(instrumentInfo.id);
}, 500);
}
};
// 仪器绑定失败弹窗
@ -840,6 +844,7 @@ class Index extends Component<any, any> {
// 跳转仪器介绍页
goNursing = (item) => {
console.log("connectInstrument", item);
// 仅开发者工具调试使用
const platform = Taro.getSystemInfoSync().platform;
// setStorageSync("instrument_detail", item);
@ -1448,6 +1453,7 @@ const mapStateToProps = (state) => ({
background: state.navigation.background,
mobile: state.userInfo.mobile,
isShowIndexFlag: state.globalStore.isShowIndexFlag,
storeInstrument: state.instrument,
});
const mapDispatchToProps = (dispatch) => ({
userRefresh(data) {
@ -1459,6 +1465,14 @@ const mapDispatchToProps = (dispatch) => ({
setIndexFlag(data) {
dispatch(setIndexFlag(data));
},
setSerial(data) {
dispatch(setSerial(data));
},
setInstrumentName(data) {
dispatch(setInstrumentName(data));
},
setInstrument(data) {
dispatch(setInstrument(data));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Index);
// instrumentId

@ -52,12 +52,12 @@ class Register extends Component<any, any> {
onSkip = () => {
// 返回首页尽量清空路由记录,防止扫码参数bug扰乱逻辑
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
};
skipRegister() {
// 跳过注册
Taro.setStorageSync("skipRegister", true);
Taro.reLaunch({ url: "/pages/index/index" });
Taro.switchTab({ url: "/pages/index/index" });
}
onDisagreeTap = () => {
// 关闭小程序

@ -12,6 +12,7 @@ import { setMobile } from "@/store/features/userInfo";
import Navbar from "@/components/navbar/navbar";
import Echarts from "./Echarts/index";
import "./moisture_test_report.less";
import { go } from "@/utils/traoAPI";
class MoistureTestReport extends Component<any, any> {
constructor(props) {
@ -33,13 +34,6 @@ class MoistureTestReport extends Component<any, any> {
rightFace: 0
}
},
bgCssData: {
serious: 'background: #FFE3E3',
moderate: 'background: #FFEBDC',
slight: 'background: #F6FCFF',
normal: 'background: #F8F8F8',
sufficient: 'background: #F8F8F8'
},
isClock: false,
xinde: '',
imglist: [],
@ -57,107 +51,141 @@ class MoistureTestReport extends Component<any, any> {
componentDidHide() { }
async onLoad() {
onLoad(option) {
let data = JSON.parse(option.data)
let { reportData } = this.state
reportData.curDate = option.date
data.GearData.map(item => {
if (item.name == '额头') {
reportData.shuifenLevel.head = item.forehead
let gear = Math.ceil((11 - reportData.shuifenLevel.head) / 2)
reportData.shuifenGear.head = gear
} else if (item.name == '左脸颊') {
reportData.shuifenLevel.leftFace = item.forehead
let gear = Math.ceil((11 - reportData.shuifenLevel.leftFace) / 2)
reportData.shuifenGear.leftFace = gear
} else if (item.name == '右脸颊') {
reportData.shuifenLevel.rightFace = item.forehead
let gear = Math.ceil((11 - reportData.shuifenLevel.rightFace) / 2)
reportData.shuifenGear.rightFace = gear
}
})
this.setState({ reportData });
setTimeout(() => {
console.log(this.state.reportData);
}, 50);
}
async initData() { }
toIndex() {
Taro.reLaunch({ url: "/pages/index/index" });
}
getStatusData(level) {
var bgCssData = {
serious: 'background: #FFE3E3',
moderate: 'background: #FFEBDC',
slight: 'background: #F6FCFF',
normal: 'background: #F8F8F8',
sufficient: 'background: #F8F8F8'
}
var progressBgData = {
serious: 'background: #FF9393',
moderate: 'background: #FFC58C',
slight: 'background: #E5F3F9',
normal: 'background: #C2E5F3',
sufficient: 'background: #9FDBF3'
}
if (level >= 1 && level <= 2) {
return {
bg: bgCssData.serious,
title: '严重缺水',
gear: 1,
img: 'serious',
progressBg: progressBgData.serious
}
} else if (level >= 3 && level <= 4) {
return {
bg: bgCssData.moderate,
title: '中度缺水',
gear: 2,
img: 'moderate',
progressBg: progressBgData.moderate
}
} else if (level >= 5 && level <= 6) {
return {
bg: bgCssData.slight,
title: '轻微缺水',
gear: 3,
img: 'slight',
progressBg: progressBgData.slight
render() {
let { name, imgUrl, reportData, reportData1, isClock, xinde, imglist, id, show } = this.state
const getStatusData = (level) => {
var bgCssData = {
serious: 'background: #FFE3E3',
moderate: 'background: #FFEBDC',
slight: 'background: #F6FCFF',
normal: 'background: #F8F8F8',
sufficient: 'background: #F8F8F8'
}
} else if (level >= 7 && level <= 8) {
return {
bg: bgCssData.normal,
title: '水分正常',
gear: 4,
img: 'normal',
progressBg: progressBgData.normal
// var progressBgData = {
// serious: 'background: #FF9393',
// moderate: 'background: #FFC58C',
// slight: 'background: #E5F3F9',
// normal: 'background: #C2E5F3',
// sufficient: 'background: #9FDBF3'
// }
var progressBgData = {
serious: '#FF9393',
moderate: '#FFC58C',
slight: '#E5F3F9',
normal: '#C2E5F3',
sufficient: '#9FDBF3'
}
} else if (level >= 9 && level <= 10) {
return {
bg: bgCssData.sufficient,
title: '水分充足',
gear: 5,
img: 'sufficient',
progressBg: progressBgData.sufficient
if (level >= 1 && level <= 2) {
return {
bg: bgCssData.serious,
title: '严重缺水',
gear: 5,
img: 'serious',
progressBg: progressBgData.serious
}
} else if (level >= 3 && level <= 4) {
return {
bg: bgCssData.moderate,
title: '中度缺水',
gear: 4,
img: 'moderate',
progressBg: progressBgData.moderate
}
} else if (level >= 5 && level <= 6) {
return {
bg: bgCssData.slight,
title: '轻微缺水',
gear: 3,
img: 'slight',
progressBg: progressBgData.slight
}
} else if (level >= 7 && level <= 8) {
return {
bg: bgCssData.normal,
title: '水分正常',
gear: 2,
img: 'normal',
progressBg: progressBgData.normal
}
} else if (level >= 9 && level <= 10) {
return {
bg: bgCssData.sufficient,
title: '水分充足',
gear: 1,
img: 'sufficient',
progressBg: progressBgData.sufficient
}
}
}
}
render() {
let { name, imgUrl, reportData, bgCssData, isClock, xinde, imglist, id, show } = this.state
return (
<Block>
<Navbar isBack titleSlot='水分测试报告'></Navbar>
<View className='moisture_test_report'>
<View className='time'>2023.6.23</View>
<View className='time'>{reportData.curDate}</View>
<View className='report_data'>
<View className='forehead moisture_block flex' style={this.getStatusData(reportData.shuifenLevel.head).bg}>
<Image className='moisture_img' src={`/img/fr200/${this.getStatusData(reportData.shuifenLevel.head)}.img}.png`} mode='aspectFill'></Image>
<View className='forehead moisture_block flex' style={getStatusData(reportData.shuifenLevel.head)!.bg}>
<Image className='moisture_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.head)!.img}.png`)} mode='aspectFill'></Image>
<View className='pos_info'>
<View className='top'></View>
<View className='bottom'>{this.getStatusData(7).title}</View>
<View className='bottom'>{getStatusData(reportData.shuifenLevel.head)!.title}</View>
<View className='bottom'></View>
</View>
</View>
<View className='left_face moisture_block flex' style='{util.getStatusData(reportData.shuifenLevel.leftFace).bg}'>
<Image className='moisture_img' src='/img/fr200/{util.getStatusData(reportData.shuifenLevel.leftFace).img}.png' mode='aspectFill'></Image>
<View className='left_face moisture_block flex' style={getStatusData(reportData.shuifenLevel.leftFace)!.bg}>
<Image className='moisture_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.leftFace)!.img}.png`)} mode='aspectFill'></Image>
<View className='pos_info'>
<View className='top'></View>
{/* <View className='bottom'>{this.getStatusData(reportData.shuifenLevel.leftFace).title}</View> */}
<View className='bottom'>{getStatusData(reportData.shuifenLevel.leftFace)!.title}</View>
<View className='bottom'></View>
</View>
</View>
<View className='right_face moisture_block flex' style='{util.getStatusData(reportData.shuifenLevel.rightFace).bg}'>
<Image className='moisture_img' src='/img/fr200/{util.getStatusData(reportData.shuifenLevel.rightFace).img}.png' mode='aspectFill'></Image>
<View className='right_face moisture_block flex' style={getStatusData(reportData.shuifenLevel.rightFace)!.bg}>
<Image className='moisture_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.rightFace)!.img}.png`)} mode='aspectFill'></Image>
<View className='pos_info'>
<View className='top'></View>
{/* <View className='bottom'>{this.getStatusData(reportData.shuifenLevel.rightFace).title}</View> */}
<View className='bottom'>{getStatusData(reportData.shuifenLevel.rightFace)!.title}</View>
<View className='bottom'></View>
</View>
</View>
<View className='example_box'>
<Image className='banner_img' src='/img/fr200/shuifen.png' mode='aspectFill'></Image>
<Image className='banner_img' src='@/img/fr200/shuifen.png' mode='aspectFill'></Image>
<View className='line1'></View>
<View className='line2'></View>
<View className='line3'></View>
@ -167,21 +195,22 @@ class MoistureTestReport extends Component<any, any> {
<View className='items flex aitems'>
<View className='pos_name'></View>
<View className='progress'>
<View className='progress_width' style='width: {reportData.shuifenLevel.head * 10}%;{util.getStatusData(reportData.shuifenLevel.head).progressBg}'></View>
<View className='progress_width' style={{ width: `${reportData.shuifenLevel.head * 10}%`, backgroundColor: getStatusData(reportData.shuifenLevel.head)!.progressBg }}></View>
{/* style='{width: {reportData.shuifenLevel.head * 10}%;{util.getStatusData(reportData.shuifenLevel.head).progressBg}}' */}
</View>
<View className='level'>{reportData.shuifenLevel.head}</View>
</View>
<View className='items flex aitems'>
<View className='pos_name'></View>
<View className='progress'>
<View className='progress_width left_face_progress' style='width: {reportData.shuifenLevel.leftFace * 10}%;{util.getStatusData(reportData.shuifenLevel.leftFace).progressBg}'></View>
<View className='progress_width left_face_progress' style={{ width: `${reportData.shuifenLevel.leftFace * 10}%`, backgroundColor: getStatusData(reportData.shuifenLevel.leftFace)!.progressBg }}></View>
</View>
<View className='level'>{reportData.shuifenLevel.leftFace}</View>
</View>
<View className='items flex aitems'>
<View className='pos_name'></View>
<View className='progress'>
<View className='progress_width right_face_progress' style='width: {reportData.shuifenLevel.rightFace * 10}%;{util.getStatusData(reportData.shuifenLevel.rightFace).progressBg}'></View>
<View className='progress_width right_face_progress' style={{ width: `${reportData.shuifenLevel.rightFace * 10}%`, backgroundColor: getStatusData(reportData.shuifenLevel.rightFace)!.progressBg }}></View>
</View>
<View className='level'>{reportData.shuifenLevel.rightFace}</View>
</View>
@ -232,23 +261,23 @@ class MoistureTestReport extends Component<any, any> {
</View>
<View className='gear_content flex aitems sb'>
<View className='left_content'>
<Image className='banner_img' src='/img/fr200/mian-mo.png' mode='aspectFill'></Image>
<Image className='banner_img' src='@/img/fr200/mian-mo.png' mode='aspectFill'></Image>
<View className='type'></View>
</View>
<View className='right_content flex aitems'>
<View className='gear_list flex aitems sa'>
<View className='items flex aitems jcenter'>
<Image className='gear_img' src='/img/fr200/{util.getStatusData(reportData.shuifenGear.head).gear}.png' mode='aspectFill'></Image>
<Image className='gear_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.head)!.gear}.png`)} mode='aspectFill'></Image>
<View className='name'></View>
<View className='level'>{reportData.shuifenGear.head}</View>
</View>
<View className='items flex aitems jcenter'>
<Image className='gear_img' src='/img/fr200/{util.getStatusData(reportData.shuifenGear.leftFace).gear}.png' mode='aspectFill'></Image>
<Image className='gear_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.leftFace)!.gear}.png`)} mode='aspectFill'></Image>
<View className='name'></View>
<View className='level'>{reportData.shuifenGear.leftFace}</View>
</View>
<View className='items flex aitems jcenter'>
<Image className='gear_img' src='/img/fr200/{util.getStatusData(reportData.shuifenGear.rightFace).gear}.png' mode='aspectFill'></Image>
<Image className='gear_img' src={require(`@/img/fr200/${getStatusData(reportData.shuifenLevel.rightFace)!.gear}.png`)} mode='aspectFill'></Image>
<View className='name'></View>
<View className='level'>{reportData.shuifenGear.rightFace}</View>
</View>
@ -260,9 +289,9 @@ class MoistureTestReport extends Component<any, any> {
<View className='go_clock_in flex sb aitems' >
<View className='go_clock_btn'></View>
<View className='jump_box flex aitems'>
<View className='jump_box flex aitems' onClick={this.toIndex}>
<View className='txt'></View>
<Image src='/img/fr200/right.png' mode='aspectFill'></Image>
<Image src='@/img/fr200/right.png' mode='aspectFill'></Image>
</View>
</View>

@ -64,9 +64,9 @@ export default class Recording extends Component<any, any> {
};
}
componentDidMount() {}
componentDidMount() { }
componentWillUnmount() {}
componentWillUnmount() { }
// 格式化时间
getTime(time) {
const hour = time.slice(0, 2);
@ -269,11 +269,11 @@ export default class Recording extends Component<any, any> {
this.DayTime();
}
componentDidShow() {}
componentDidShow() { }
componentDidHide() {}
componentDidHide() { }
async initData() {}
async initData() { }
// 选择年份
onChangeYear(event) {
this.setState({ year: event.detail.value });
@ -328,7 +328,7 @@ export default class Recording extends Component<any, any> {
};
// 打开第三种类型
three = async (item) => {
go("/recoding/pages/moisture_test_report/moisture_test_report");
go(`/recoding/pages/moisture_test_report/moisture_test_report?data=${item.nursingData}&date=${item.createTime}`);
};
// 打开其他类型
AllDevice = async (item) => {

@ -22,14 +22,38 @@ const instrumentReducer = createSlice({
updateBy: null,
updateTime: null,
validStatus: 1, // 1有效0无效
// scanData: {
// name: "", // 扫码名字
// code: "", // 扫码序列号
// isChange: false, // 是否换绑
// },
},
reducers: {
setInstrument(state, { payload }) {
console.log("payload", payload);
state = JSON.parse(JSON.stringify(payload));
state.bindingStatus = payload.bindingStatus;
state.id = payload.id;
state.instrumentId = payload.instrumentId;
state.instrumentIdArray = payload.instrumentIdArray;
state.instrumentName = payload.instrumentName;
state.instrumentSerialIdList = payload.instrumentSerialIdList;
state.queryInstrumentIds = payload.queryInstrumentIds;
state.remark = payload.remark;
state.serial = payload.serial;
state.source = payload.source;
state.status = payload.status;
state.validStatus = payload.validStatus;
},
setSerial(state, { payload }) {
state.serial = payload;
},
setInstrumentName(state, { payload }) {
state.instrumentName = payload;
},
},
});
export const { setInstrument } = instrumentReducer.actions;
export const { setInstrument, setSerial, setInstrumentName } =
instrumentReducer.actions;
export default instrumentReducer.reducer;

@ -6,6 +6,7 @@ import userInfoReducer from "./features/userInfo";
import globalStoreReducer from "./features/globalStore";
import otherSettingReducer from "./features/otherSetting";
import deviceInfoReducer from "./features/deviceInfo";
import instrumentReducer from "./features/instrument";
const store = configureStore({
reducer: {
@ -16,6 +17,7 @@ const store = configureStore({
globalStore: globalStoreReducer,
otherSetting: otherSettingReducer,
deviceInfo: deviceInfoReducer,
instrument: instrumentReducer,
},
});

@ -27,7 +27,7 @@ export const Ajax = (params) => {
// mask: true,
// });
const whiteListLoading = [""]; // loading
const whiteListLoading = []; // loading
// 防止多次点击
const requestUrlList = global_requestUrlList;

Loading…
Cancel
Save