Files
fishery-app/src/home/wqm.vue

1295 lines
41 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<view class="wqm_home">
<scroll-view :scroll-y="isScroll" :style="{ height: 'calc(100% - 1px)' }">
<nut-config-provider :theme-vars="themeVars">
<view class="body">
<nut-row>
<!-- 设备信息区域 -->
<nut-col :span="24" v-if="!section || section === 'deviceInfo'">
<nut-cell class="wqm_body">
<nut-row>
<nut-col :span="24" class="title"> 设备信息 </nut-col>
<nut-col :span="24">
<nut-cell-group>
<nut-cell title="设备名称" is-link @click="setName">
<template #desc>
<text class="desc">{{
deviceInfoRes.deviceName
}}</text>
</template>
</nut-cell>
<nut-cell title="设备号">
<template #desc>
<text class="desc">{{
deviceInfoRes.serialNum
}}</text>
</template>
</nut-cell>
<nut-cell title="设备类型">
<template #desc>
<text class="desc">{{
deviceInfoRes.deviceType == 1
? "溶解氧机"
: "控制器"
}}</text>
</template>
</nut-cell>
<nut-cell title="绑定时间">
<template #desc>
<text class="desc">{{
deviceInfoRes.bindTime
}}</text>
</template>
</nut-cell>
<nut-cell title="服务到期日">
<template #desc>
<text class="desc">{{
deviceInfoRes.deadTime
}}</text>
</template>
</nut-cell>
<nut-cell
title="关联塘口"
is-link
@click="showPond = true"
>
<template #desc>
<text class="desc">{{
deviceInfoRes.pondInfo
? deviceInfoRes.pondInfo.pondName
: "请绑定塘口"
}}</text>
</template>
</nut-cell>
</nut-cell-group>
</nut-col>
<!-- 将解除绑定按钮移到设备信息区域内 -->
<nut-col :span="24" :style="{ marginTop: '20rpx' }">
<nut-button
block
shape="square"
size="large"
color="#E22323"
:style="{
fontWeight: 'bold',
fontSize: '14px !important',
borderRadius: '10px',
}"
@click="unbind"
:loading="b_isLoading"
v-if="Uid==rootuserid"
>解除绑定</nut-button
>
</nut-col>
</nut-row>
</nut-cell>
</nut-col>
<!-- 溶解氧配置区域 -->
<nut-col :span="24" v-if="!section || section === 'alarmSettings'">
<nut-cell class="wqm_body">
<nut-row>
<nut-col :span="24" class="title"> 溶解氧配置 </nut-col>
<nut-col :span="24">
<nut-cell-group>
<nut-cell title="溶解氧电话告警开关">
<nut-row>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}"
>
<view>
<view class="c_title">溶解氧电话告警开关</view>
<view class="c_dis"
>溶解氧低于设定值会电话提醒</view
>
</view>
<view>
<nut-switch
v-model="deviceInfoRes.oxyWarnTelOpen"
active-color="#04D98A"
@change="changeO2"
/>
</view>
</nut-col>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}"
v-if="deviceInfoRes.oxyWarnTelOpen"
>
<view>
<view class="c_title">告警免打扰</view>
<view class="c_dis">
在08:00-14:0014:00-20:0020:00-08:00三个时段内只进行一次有效电话告警
</view>
</view>
<view>
<nut-switch
v-model="deviceInfoRes.oxyWarnTelNoDis"
active-color="#04D98A"
@change="changeOxyDis"
/>
</view>
</nut-col>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
marginTop: '20rpx',
}"
>
<view class="d_title"
>下限 {{ deviceInfoRes.oxyWarnLower }}Mg/L
</view>
<view
class="d_dis"
:style="{
display: 'flex',
alignItems: 'center',
}"
@click="setOxy"
>
<view>设置</view>
<view
style="
width: var(--nut-icon-width);
color: #979797;
height: var(--nut-icon-height);
line-height: var(--nut-icon-line-height);
"
>
<RectRight />
</view>
</view>
</nut-col>
</nut-row>
</nut-cell>
<nut-cell>
<nut-row>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}"
>
<view>
<view class="c_title">温度电话告警开关</view>
<view class="c_dis"
>温度高于或低于设定值会电话提醒</view
>
</view>
<view>
<nut-switch
v-model="deviceInfoRes.tempWarnTelOpen"
active-color="#04D98A"
@change="changeTem"
/>
</view>
</nut-col>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}"
v-if="deviceInfoRes.tempWarnTelOpen"
>
<view>
<view class="c_title">告警免打扰</view>
<view class="c_dis">
在08:00-14:0014:00-20:0020:00-08:00三个时段内只进行一次有效电话告警
</view>
</view>
<view>
<nut-switch
v-model="deviceInfoRes.tempWarnTelNoDis"
active-color="#04D98A"
@change="changeTemDis"
/>
</view>
</nut-col>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
marginTop: '20rpx',
}"
>
<view class="d_title"
>上限
{{
deviceInfoRes.tempWarnUpper
}}&nbsp;&nbsp;&nbsp;下限
{{ deviceInfoRes.tempWarnLower }}</view
>
<view
class="d_dis"
:style="{
display: 'flex',
alignItems: 'center',
}"
@click="setTemp"
>
<view>设置</view>
<view
style="
width: var(--nut-icon-width);
color: #979797;
height: var(--nut-icon-height);
line-height: var(--nut-icon-line-height);
"
>
<RectRight />
</view>
</view>
</nut-col>
</nut-row>
</nut-cell>
<nut-cell>
<nut-row>
<nut-col
:span="24"
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
}"
>
<view class="title">联动控制</view>
<view class="ils" @click="openLink"
>联动设置</view
>
</nut-col>
<nut-col
:span="24"
v-if="deviceInfoRes.listLinkedCtr.length > 0"
>
<!-- 绘制表格 -->
<view class="m_t_15">
<view class="linked-table">
<!-- 表头 -->
<view class="table-row table-header">
<view class="table-cell"></view>
<view
class="table-cell"
v-for="(item, index) in deviceInfoRes.listLinkedCtr"
:key="item.id"
>
联动{{ index + 1 }}
</view>
</view>
<!-- 上限行 -->
<view class="table-row">
<view class="table-cell table-label">上限</view>
<view
class="table-cell table-value"
v-for="item in deviceInfoRes.listLinkedCtr"
:key="'up_' + item.id"
>
{{ item.oxyUpperOpen ? item.oxyUpperValue + 'Mg/L' : '-' }}
</view>
</view>
<!-- 下限行 -->
<view class="table-row">
<view class="table-cell table-label">下限</view>
<view
class="table-cell table-value"
v-for="item in deviceInfoRes.listLinkedCtr"
:key="'low_' + item.id"
>
{{ item.oxyLowerOpen ? item.oxyLowerValue + 'Mg/L' : '-' }}
</view>
</view>
<!-- 开关行 -->
<view class="table-row">
<view class="table-cell table-label">开关</view>
<view
class="table-cell table-switch"
v-for="item in deviceInfoRes.listLinkedCtr"
:key="'sw_' + item.id"
>
<view class="switch-names">
<view
class="switch-name"
v-for="(sw, idx) in item.listSwitch"
:key="sw.id"
>
{{ sw.switchName }}
</view>
</view>
</view>
</view>
</view>
</view>
</nut-col>
</nut-row>
</nut-cell>
<nut-cell title="盐度设置" is-link @click="setSalFunc">
<template #desc>
<text class="desc"
>{{ deviceInfoRes.salinityCompensation }}</text
>
</template>
</nut-cell>
<nut-cell
title="设备校准"
is-link
@click="toCalibration"
/>
</nut-cell-group>
</nut-col>
</nut-row>
</nut-cell>
</nut-col>
</nut-row>
</view>
</nut-config-provider>
</scroll-view>
<!-- 弹出层提示 -->
<nut-toast
:msg="state.msg"
v-model:visible="state.show"
:type="state.type"
/>
<!-- 选择塘口 -->
<nut-popup v-model:visible="showPond" position="bottom">
<nut-picker
v-model="pondId"
:columns="pondList"
title="请选择塘口"
@confirm="confirm"
:field-names="{ text: 'pondName', value: 'id' }"
@cancel="cancel"
/>
</nut-popup>
<nut-config-provider :theme-vars="themeVars2">
<!-- 溶解氧告警设置 -->
<nut-dialog v-model:visible="openSetOxy" text-align="left" no-footer>
<view :style="{ height: '100%' }">
<view class="d_body">
<nut-row>
<nut-col :span="24">
<view class="d_title">溶解氧告警值设置</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
<nut-col :span="24" class="view_f">
<view :style="{ width: '40%' }" class="font_32 c_444"
>告警值</view
>
<view :style="{ width: '60%' }">
<nut-input
type="digit"
v-model="oxy"
@blur="oxyValue"
@focus="onfocus"
:border="false"
input-align="right"
clearable
max-length="5"
placeholder="范围1.5~20"
:cursor="String(oxy).length"
>
<template #right> Mg/L </template>
</nut-input>
</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
</nut-row>
</view>
<view class="d_btn">
<nut-row>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#222' }"
@click="openSetOxy = false"
>
取消
</nut-col>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#15BBC5' }"
@click="setOxyEventD"
>
确定
</nut-col>
</nut-row>
</view>
</view>
</nut-dialog>
<!-- 温度告警设置 -->
<nut-dialog v-model:visible="openSetTemp" text-align="left" no-footer>
<view :style="{ height: '100%' }">
<view class="d_body">
<nut-row>
<nut-col :span="24">
<view class="d_title">温度告警设置</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
<nut-col :span="24" class="view_f">
<view :style="{ width: '30%' }" class="font_32 c_444"
>温度上限</view
>
<view :style="{ width: '70%' }">
<nut-input
type="digit"
v-model="tempUp"
@blur="tUpValue"
@focus="onfocus"
placeholder="请输入温度告警上限"
:border="false"
input-align="right"
clearable
max-length="5"
:cursor="String(tempUp).length"
>
<template #right> </template>
</nut-input>
</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
<nut-col :span="24" class="view_f">
<view :style="{ width: '30%' }" class="font_32 c_444"
>温度下限</view
>
<view :style="{ width: '70%' }">
<nut-input
type="digit"
v-model="tempLower"
@blur="tLoValue"
@focus="onfocus"
placeholder="请输入温度告警下限"
:border="false"
input-align="right"
clearable
max-length="5"
>
<template #right> </template>
</nut-input>
</view>
</nut-col>
</nut-row>
</view>
<view class="d_btn">
<nut-row>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#222' }"
@click="openSetTemp = false"
>
取消
</nut-col>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#15BBC5' }"
@click="setTempEventD"
>
确定
</nut-col>
</nut-row>
</view>
</view>
</nut-dialog>
<!-- 设备名称 -->
<nut-dialog v-model:visible="openSetName" text-align="left" no-footer>
<!-- <view :style="{ height: '100%' }"> -->
<view class="d_body">
<nut-row>
<nut-col :span="24">
<view class="d_title">设备名称设置</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
<nut-col :span="24" class="view_f">
<view :style="{ width: '30%' }" class="font_32 c_444"
>名称</view
>
<view :style="{ width: '70%' }">
<nut-input
v-model="deviceName"
@focus="onfocus"
@blur="onblur"
placeholder="请输入设备名称"
:border="false"
input-align="right"
clearable
max-length="6"
:cursor="String(deviceName).length"
/>
</view>
</nut-col>
</nut-row>
</view>
<view class="d_btn">
<nut-row>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#222' }"
@click="openSetName = false"
>
取消
</nut-col>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#15BBC5' }"
@click="setNameEventD"
>
确定
</nut-col>
</nut-row>
</view>
<!-- </view> -->
</nut-dialog>
<!-- 盐度设置 -->
<nut-dialog v-model:visible="openSalinity" text-align="left" no-footer>
<view :style="{ height: '100%' }">
<view class="d_body">
<nut-row>
<nut-col :span="24">
<view class="d_title">盐度设置</view>
</nut-col>
<nut-col :span="24">
<nut-divider class="divider" />
</nut-col>
<nut-col :span="24" class="view_f">
<view :style="{ width: '30%' }" class="font_32 c_444"
>盐度</view
>
<view :style="{ width: '70%' }">
<nut-input
type="digit"
v-model="salinity"
@blur="salValue"
@focus="onfocus"
placeholder="请输入盐度"
:border="false"
input-align="right"
clearable
max-length="5"
:cursor="String(salinity).length"
>
<template #right> </template>
</nut-input>
</view>
</nut-col>
</nut-row>
</view>
<view class="d_btn">
<nut-row>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#222' }"
@click="openSalinity = false"
>
取消
</nut-col>
<nut-col
:span="12"
:style="{ border: '1px solid #eee', color: '#15BBC5' }"
@click="setSalinityD"
>
确定
</nut-col>
</nut-row>
</view>
</view>
</nut-dialog>
<!-- 弹出层提示 -->
<nut-dialog v-model:visible="alertRes" text-align="center">
<template #default>
<view :style="{ height: '100%' }">
<nut-row>
<nut-col :span="24" class="font_36 c_222">
移除设备成功
</nut-col>
</nut-row>
</view>
</template>
<template #footer>
<view class="d_btn" :style="{ position: 'absolute' }">
<nut-row>
<nut-col
:span="24"
:style="{ border: '1px solid #eee', color: '#15BBC5' }"
>
<nut-button
type="primary"
shape="square"
block
@click="onGoBack"
>返回</nut-button
>
</nut-col>
</nut-row>
</view>
</template>
</nut-dialog>
</nut-config-provider>
</view>
</view>
</template>
<script setup lang="ts">
import { RectRight } from "@nutui/icons-vue-taro";
import {
deviceInfo,
deviceUnbind,
setWarnCall,
setOxyWarn,
setTempWarn,
deviceUpdateName,
deviceUpdatePond,
setSal,
deviceDel,
} from "@/api/device";
import { stateType } from "@/utils/types";
import { formatDate } from "@/utils/tools";
import { getPond2 } from "@/api/home";
import Taro from "@tarojs/taro";
import { debounce,throttle } from 'lodash';
const instance = Taro.getCurrentInstance();
const id = instance.router.params.id;
const name = instance.router.params.name;
const page = instance.router.params.page;
const section = instance.router.params.section; // 获取区域参数
// const name = undefined
Taro.setNavigationBarTitle({
title: "水质检测仪设置",
});
const store: any = inject("store");
// const id = instance.router.params.id
const themeVars = ref({
cellBorderRadius: "4px",
cellBoxShadow: "0px",
cellPadding: "26rpx 0px",
});
const themeVars2 = ref({
cellBoxShadow: "0px 0px 0px 0px",
cellPadding: "0",
cellColor: "#666666",
cellTitleFont: "32rpx",
cellTitleDescFont: "30rpx",
cellDescFont: "30rpx",
cellDescColor: "#222222",
popupBorderRadius: "10rpx",
});
const state: stateType = reactive({
msg: "",
type: "text",
center: true,
show: false,
});
const deviceInfoRes = ref({
id: undefined,
deviceName: undefined,
serialNum: undefined,
deviceType: 1,
bindTime: undefined,
deadTime: undefined,
pondInfo: {
id: undefined,
pondName: undefined,
},
isOxygenUsed: false,
oxyWarnTelOpen: false,
oxyWarnTelNoDis: false,
oxyWarnLower: undefined,
tempWarnTelOpen: false,
tempWarnUpper: undefined,
tempWarnLower: undefined,
salinityCompensation: undefined,
keepNightOpen: false,
inputVoltage: undefined,
listSwitch: undefined,
tempWarnTelNoDis: false,
listLinkedCtr: [],
});
const showPond = ref<boolean>(false);
const openSetName = ref<boolean>(false);
const openSetOxy = ref<boolean>(false);
const openSetTemp = ref<boolean>(false);
const openSalinity = ref<boolean>(false);
const alertRes = ref<boolean>(false);
const isScroll = ref<boolean>(true);
const salinity = ref<number>(30);
const pondList = ref<any[]>([]);
const pondId = ref();
const oxy = ref();
const tempLower = ref();
const tempUp = ref();
const deviceName = ref();
const r_isLoading = ref(false)
const b_isLoading = ref(false)
const Uid = Taro.getStorageSync("UserId")
const rootuserid = ref(store.getRootUserId);
/**--------------method start------------------- */
Taro.useDidShow(() => {
// 默认
getDevInfo();
getPondList();
});
// 查询塘口列表
function getPondList() {
getPond2().then((res: any) => {
if (res.code == 200) {
const arr = [{ id: 0, pondName: "无" }];
res.data.forEach(r=>{
arr.push({id:r.id,pondName:r.pondName})
})
pondList.value = arr;
}
});
}
// 设备详情
function getDevInfo() {
deviceInfo({ id }).then((res: any) => {
if (res.code == 200) {
res.data.bindTime = formatDate(new Date(res.data.bindTime));
res.data.deadTime = formatDate(new Date(res.data.deadTime));
// 将数字类型转为布尔类型
res.data.oxyWarnTelOpen = !!res.data.oxyWarnTelOpen;
res.data.oxyWarnTelNoDis = !!res.data.oxyWarnTelNoDis;
res.data.tempWarnTelOpen = !!res.data.tempWarnTelOpen;
res.data.tempWarnTelNoDis = !!res.data.tempWarnTelNoDis;
res.data.isOxygenUsed = !!res.data.isOxygenUsed;
deviceInfoRes.value = res.data;
pondId.value = res.data.pondInfo ? [Number(res.data.pondInfo.id)] : [0];
}
});
}
// 格式化开关名称
function formatName(switchList: any) {
if (switchList && switchList.length > 0) {
const nameList = [];
switchList.forEach((res: any) => {
nameList.push(res.switchName);
});
return nameList.join(",");
}
return "/";
}
/** 解除绑定 */
function unbind() {
Taro.showModal({
title: "提示",
content:
"解除绑定后会将设备直接删除,并和塘口内的其他设备解除关联关系。再次绑定需重新扫码添加。确认解除绑定该设备?",
success: function (res) {
if (res.confirm) {
b_isLoading.value = true
deviceDel({ id }).then((res: any) => {
if (res.code == 200) {
state.show = true;
state.msg = "解绑成功";
setTimeout(() => {
if (page == "home") {
Taro.switchTab({
url: "/pages/main/home",
});
} else {
Taro.navigateBack({ delta: 1 });
}
}, 200);
// deviceInfoRes.value.pondInfo = {
// id: undefined,
// pondName: undefined,
// }
// pondId.value = 0
}
}).finally(() => {
b_isLoading.value = false
})
} else if (res.cancel) {
console.log("用户点击取消");
}
},
});
}
// 跳转到联动控制
function openLink() {
// 跳转到联动控制页面
Taro.navigateTo({
url: `/home/linkControl?id=${id}&pondId=${
pondId.value[0] ? pondId.value[0] : 0
}`,
});
}
// 确定选择塘口
function confirm({ selectedValue, selectedOptions }) {
console.log(selectedValue)
pondId.value = selectedValue;
deviceInfoRes.value.pondInfo = {
id: selectedValue,
pondName: selectedOptions[0].pondName,
};
const data = {
id,
pondId: selectedValue[0],
};
deviceUpdatePond(data)
.then((res: any) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
}
})
.finally(() => {
showPond.value = false;
});
}
// 取消选择塘口
function cancel() {
showPond.value = false;
}
// 设置溶解氧/水温告警
function changeO2(value, event) {
if (event) {
const data = {
deviceId: id,
type: 1,
isOpen: deviceInfoRes.value.oxyWarnTelOpen ? 1 : 0, // 布尔转数字
isNoDisturb: deviceInfoRes.value.oxyWarnTelOpen
? (deviceInfoRes.value.oxyWarnTelNoDis ? 1 : 0) // 布尔转数字
: 0,
};
setWarnCall(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
}
});
}
}
function changeTem(value, event) {
if (event) {
const data = {
deviceId: id,
type: 2,
isOpen: deviceInfoRes.value.tempWarnTelOpen ? 1 : 0, // 布尔转数字
isNoDisturb: deviceInfoRes.value.tempWarnTelOpen
? (deviceInfoRes.value.tempWarnTelNoDis ? 1 : 0) // 布尔转数字
: 0,
};
setWarnCall(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
}
});
}
}
// 设置溶解氧/温度上下限
function setOxy() {
openSetOxy.value = true;
oxy.value = deviceInfoRes.value.oxyWarnLower;
}
// 设置设备名称
function setName() {
openSetName.value = true;
deviceName.value = deviceInfoRes.value.deviceName;
}
const setOxyEventD = debounce(setOxyEvent, 300);
function setOxyEvent() {
if (oxy.value) {
if (Number(oxy.value) < 1.5 || Number(oxy.value) > 20) {
state.show = true;
state.msg = "告警值范围为1.5-20";
return;
}
} else {
state.show = true;
state.msg = "请输入告警值";
return;
}
const data = {
deviceId: id,
oxyWarnLower: oxy.value,
};
setOxyWarn(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
deviceInfoRes.value.oxyWarnLower = oxy.value;
openSetOxy.value = false;
}
});
}
const setNameEventD = debounce(setNameEvent, 300);
function setNameEvent() {
const data = {
id,
newName: deviceName.value,
};
deviceUpdateName(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
openSetName.value = false;
// 重新加载设备信息
getDevInfo();
}
});
}
function setTemp() {
openSetTemp.value = true;
tempUp.value = deviceInfoRes.value.tempWarnUpper;
tempLower.value = deviceInfoRes.value.tempWarnLower;
}
const setTempEventD = debounce(setTempEvent, 300);
function setTempEvent() {
const up = tempUp.value;
const lo = tempLower.value;
if (Number(lo) >= Number(up)) {
state.show = true;
state.msg = "下限不能大于等于上限";
return;
}
if (!lo) {
state.show = true;
state.msg = "请输入下限值";
return;
}
if (!up) {
state.show = true;
state.msg = "请输入上限值";
return;
}
const data = {
deviceId: id,
tempWarnLower: tempLower.value,
tempWarnUpper: tempUp.value,
};
setTempWarn(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
deviceInfoRes.value.tempWarnUpper = tempUp.value;
deviceInfoRes.value.tempWarnLower = tempLower.value;
openSetTemp.value = false;
}
});
}
// 溶解氧告警
function oxyValue() {
onblur();
}
// 温度告警
function tUpValue() {
onblur();
}
function tLoValue() {
onblur();
}
// 盐度设置
function setSalFunc() {
openSalinity.value = true;
salinity.value = deviceInfoRes.value.salinityCompensation;
}
function salValue() {
const sal = salinity.value;
onblur();
if (Number(sal) > 40) {
salinity.value = 40;
}
}
const setSalinityD = debounce(setSalinity, 300);
function setSalinity() {
onblur();
const data = {
id,
salinityCompensation: salinity.value ? Number(salinity.value) : 0,
};
setSal(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
deviceInfoRes.value.salinityCompensation = salinity.value;
openSalinity.value = false;
}
});
}
//跳转校准页面
function toCalibration() {
Taro.navigateTo({ url: `/home/calibration?id=${id}&page=wqm` });
}
// 免打扰设置-溶解氧
function changeOxyDis(value, event) {
if (event) {
const data = {
deviceId: id,
type: 1,
isOpen: deviceInfoRes.value.oxyWarnTelOpen ? 1 : 0, // 布尔转数字
isNoDisturb: deviceInfoRes.value.oxyWarnTelOpen
? (deviceInfoRes.value.oxyWarnTelNoDis ? 1 : 0) // 布尔转数字
: 0,
};
setWarnCall(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
}
});
}
}
// 免打扰设置-温度
function changeTemDis(value, event) {
if (event) {
const data = {
deviceId: id,
type: 2,
isOpen: deviceInfoRes.value.tempWarnTelOpen ? 1 : 0, // 布尔转数字
isNoDisturb: deviceInfoRes.value.tempWarnTelOpen
? (deviceInfoRes.value.tempWarnTelNoDis ? 1 : 0) // 布尔转数字
: 0,
};
setWarnCall(data).then((res) => {
if (res.code == 200) {
state.show = true;
state.msg = "设置成功";
}
});
}
}
// 返回上一页
function onGoBack() {
Taro.navigateBack({ delta: 1 });
}
function onfocus() {
isScroll.value = false;
}
function onblur() {
isScroll.value = true;
}
/**--------------method end--------------------- */
</script>
<style lang="scss">
.wqm_home {
width: 100%;
height: 100%;
background-image: url("https://www.yuceyun.cn/wechat/bg.jpg");
background-color: #e5ebed;
background-repeat: no-repeat;
background-size: 100% 100%;
position: fixed;
margin: 0;
font-size: 32px;
font-family: "PingFang SC";
font-weight: 400;
.nut-dialog {
padding: 0;
}
.nut-dialog__content {
margin: 0;
// max-height: 100%;
}
.nut-input {
padding: 20rpx 0;
}
.body {
padding: 20px;
.title {
font-size: 36px;
font-weight: bold;
color: #222;
}
.wqm_body {
padding: 20px;
.nut-cell__title {
font-size: 30px;
color: #666;
}
.desc {
font-size: 30px;
color: #222;
font-weight: bold;
}
.ils {
font-size: 30px;
color: #1589e9;
}
.c_title {
font-size: 30px;
color: #666;
}
.c_dis {
font-size: 26px;
color: #eb913e;
margin-top: 10rpx;
}
.d_title {
font-size: 30px;
color: #17b4b2;
}
.d_dis {
font-size: 30px;
color: #222222;
}
.nut-table {
display: flex;
flex-direction: column;
font-size: var(--nut-font-size-2, 14px);
width: 100%;
}
.nut-table__main {
border-collapse: collapse;
display: table;
overflow-x: hidden;
width: 100%;
}
.nut-table__main__body {
display: table-row-group;
}
.nut-table__main__body__tr,
.nut-table__main__head__tr {
display: table-row;
}
}
}
}
.tableTou {
font-size: 28px;
color: #222222 !important;
}
.tr {
width: 100%;
}
.tableTR {
border: 1rpx solid #e6e6e6;
width: 100%;
display: flex;
background-color: #fff;
height: 55rpx;
justify-content: center;
align-items: center;
color: #17b4b2;
font-size: 28px;
}
/* 联动控制表格优化样式 */
.linked-table {
width: 100%;
border-radius: 8px;
overflow: hidden;
background: #fff;
}
.table-row {
display: flex;
border-bottom: 1px solid #f0f0f0;
&:last-child {
border-bottom: none;
}
}
.table-header {
background: #f8f8f8;
font-weight: bold;
.table-cell {
color: #666;
font-size: 26rpx;
}
}
.table-cell {
flex: 1;
padding: 20rpx 10rpx;
text-align: center;
border-right: 1px solid #f0f0f0;
display: flex;
align-items: center;
justify-content: center;
min-height: 80rpx;
&:last-child {
border-right: none;
}
}
.table-label {
flex: 0 0 100rpx;
background: #fafafa;
font-size: 28rpx;
color: #333;
font-weight: 500;
}
.table-value {
color: #17b4b2;
font-size: 28rpx;
font-weight: 500;
}
.table-switch {
padding: 10rpx;
}
.switch-names {
display: flex;
flex-direction: column;
gap: 8rpx;
width: 100%;
}
.switch-name {
font-size: 24rpx;
color: #17b4b2;
padding: 6rpx 10rpx;
background: #f5f5f5;
border-radius: 4rpx;
line-height: 1.4;
word-break: break-all;
text-align: center;
}
</style>