wszhyWx/src/views/wufang/rollByRoll.vue
2024-01-08 09:24:44 +08:00

468 lines
13 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>
<div class="waterPump wufang">
<div class="table-title">
<img src="../../assets/img/rollByRoll.png" alt="" /> 卷被&nbsp;&nbsp;&nbsp;&nbsp;
<div @click="changeOpen(0)" class="flex-view border-none">
<div :class="openIndex == 0 ? 'sel' : 'no-sel'"></div>
有效性
</div>
<div class="title-text">日出:{{ sunrise }}</div>
<div class="title-text">日落:{{ sunset }}</div>
</div>
<div class="title-tips">卷被有效性设置</div>
<div class="flex-view">
<div class="input-btn">
<div
class="btn"
@click="changeOpen(1)"
:class="openIndex == 1 ? 'blue' : 'green'"
>
<img src="../../assets/image/irrigateSet2.png" alt="" />自动运行
</div>
<div
class="btn"
@click="changeOpen(2)"
:class="openIndex == 2 ? 'blue' : 'green'"
>
<img src="../../assets/image/irrigateSet3.png" alt="" />手动打开
</div>
<div
class="btn"
@click="changeOpen(3)"
:class="openIndex == 3 ? 'blue' : 'green'"
>
<img src="../../assets/image/irrigateSet1.png" alt="" />手动关闭
</div>
<div
class="btn"
@click="changeOpen(4)"
:class="openIndex == 4 ? 'blue' : 'green'"
>
<img src="../../assets/image/irrigateSet1.png" alt="" />停止
</div>
</div>
</div>
<div class="flex-view">
<div
class="flex-sel padding-none"
v-if="openTrue.length"
@click="changeOpenTrue(0)"
>
<div v-if="openTrue[0] == 0" class="no-sel margin-none"></div>
<div v-else class="sel margin-none"></div>
</div>
<div class="input-main">
<span>①室外光照大于</span>
<input
@blur="blurChange10('21550', $event)"
v-model="inputData['21550']"
@input="changeCount10('21550', $event)"
type="text"
value="60"
placeholder="60"
/>
<span>klx收拢卷被</span>
</div>
</div>
<div class="flex-view">
<div
class="flex-sel padding-none"
v-if="openTrue.length"
@click="changeOpenTrue(1)"
>
<div v-if="openTrue[1] == 0" class="no-sel margin-none"></div>
<div v-else class="sel margin-none"></div>
</div>
<div class="input-main">
<span>②日出</span>
<input
@blur="blurChange('21551', $event)"
v-model="inputData['21551']"
@input="change('21551', $event)"
type="text"
value="60"
placeholder="60"
/>
<span>分钟收拢卷被</span>
</div>
</div>
<div class="flex-view">
<div
class="flex-sel padding-none"
v-if="openTrue.length"
@click="changeOpenTrue(2)"
>
<div v-if="openTrue[2] == 0" class="no-sel margin-none"></div>
<div v-else class="sel margin-none"></div>
</div>
<div class="input-main">
<span>③室内1#平均温度低于</span>
<input
@blur="blurChangeCount('21552', $event)"
v-model="inputData['21552']"
@input="changeCountData('21552', $event)"
type="text"
value="60"
placeholder="60"
/>
<span>展开卷被</span>
</div>
</div>
<div class="flex-view">
<div
class="flex-sel padding-none"
v-if="openTrue.length"
@click="changeOpenTrue(3)"
>
<div v-if="openTrue[3] == 0" class="no-sel margin-none"></div>
<div v-else class="sel margin-none"></div>
</div>
<div class="input-main">
<span>④日落前</span>
<input
@blur="blurChange('21553', $event)"
v-model="inputData['21553']"
@input="change('21553', $event)"
type="text"
value="60"
placeholder="60"
/>
<span>分钟展开卷被</span>
</div>
</div>
<div class="flex-view border-none">
<div class="input-main">
<div>卷被的行程时间</div>
<input
@blur="blurChange('21554', $event)"
v-model="inputData['21554']"
@input="change('21554', $event)"
type="text"
value="60"
placeholder="60"
/>
<span></span>
</div>
<div class="input-main">
<div>卷被开窗的行程时间</div>
<input
@blur="blurChange('21555', $event)"
v-model="inputData['21555']"
@input="change('21555', $event)"
type="text"
value="60"
placeholder="60"
/>
<span></span>
</div>
<div class="input-main">
<div>展开的输出通道</div>
<input
@blur="blurChange('21556', $event)"
v-model="inputData['21556']"
@input="change('21556', $event)"
type="text"
value="60"
placeholder="60"
/>
<span></span>
</div>
<div class="input-main">
<div>收拢的输出通道</div>
<input
@blur="blurChange('21557', $event)"
v-model="inputData['21557']"
@input="change('21557', $event)"
type="text"
value="60"
placeholder="60"
/>
<span></span>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
openIndex: 1,
inputData: {},
openTrue: [],
sunrise: "00:00",
sunset: "00:00",
};
},
//如果接口还未调通 跳转到页面后 监听到数据变化就触发数据读取
watch: {
"$store.state.ControlData"(newVal) {
this.dataInit();
},
},
// 当前页面关闭前将数据存入vuex
beforeDestroy() {
var store = this.$store.state;
this.inputData["21548"] = this.openIndex;
var num = this.myReverse(this.openTrue).join("");
this.inputData["21549"] = parseInt(num, 2);
store.ControlData = this.inputData;
},
mounted() {
var store = this.$store.state;
// this.dataInit();
if (store.ControlData) {
this.dataInit();
}
//input获取焦点后全选
let inputList = document.querySelectorAll("input");
for (let index = 0; index < inputList.length; index++) {
inputList[index].onfocus = this.selectValue; //input放入焦点全选文本
}
},
methods: {
//反转数组 不影响原数组
myReverse(arr) {
return [...arr].reverse();
},
padString(str, length) {
return str.padStart(length, "0");
},
changeOpenTrue(index) {
if (this.openTrue[index] == 0) {
this.openTrue[index] = 1;
} else {
this.openTrue[index] = 0;
}
this.$forceUpdate();
var num = this.myReverse(this.openTrue).join("");
var dataNum = {
target: {
value: parseInt(num, 2),
},
};
this.changeBtn("21549", dataNum);
},
padString(str, length) {
return str.padStart(length, "0");
},
changeOpen(index) {
this.openIndex = index;
var dataNum = {
target: {
value: this.openIndex,
},
};
this.changeBtn(21548, dataNum);
},
//失去焦点 计算公式 x/10
blurChange10(code, el) {
var store = this.$store.state;
var data = {
equipmentId: store.equipmentList[store.equipmentIndex - 1].deviceId,
regAddress: code,
num: el.target.value * 10,
}; //避免开启多个计时器
if (this.timer) {
this.timer && clearInterval(this.timer);
this.changeData(data);
}
},
//反向计算 计算公式 x/10
changeCount10(code, el) {
var data = el.target.value * 10;
var sendData = {
target: {
value: data,
},
};
this.change(code, sendData);
},
//失去焦点
blurChangeCount(code, el) {
var store = this.$store.state;
var data = {
equipmentId: store.equipmentList[store.equipmentIndex - 1].deviceId,
regAddress: code,
num: el.target.value * 10 + 400,
}; //避免开启多个计时器
if (this.timer) {
this.timer && clearInterval(this.timer);
this.changeData(data);
}
},
changeCountData(code, el) {
var data = el.target.value * 10 + 400;
var sendData = {
target: {
value: data,
},
};
this.change(code, sendData);
},
countData(data) {
if (data) {
return (data - 400) / 10;
} else {
return 0;
}
},
// 计算展示值 计算公式 x/10
countData10(data) {
if (data) {
return data / 10;
} else {
return 0;
}
},
get21549() {
var num1 = this.inputData["21549"];
var num11 = this.padString(num1.toString(2), 4);
var openList1New;
openList1New = num11.split("");
this.openTrue = openList1New.reverse();
},
getStatus(data) {
this.api.getControlGetState(data).then((res) => {
if (res.data.code == 200) {
this.sunrise = this.insertColonEveryTwoDigits(
this.convertToTimeMinutes(res.data.data["1021"])
);
this.sunset = this.insertColonEveryTwoDigits(
this.convertToTimeMinutes(res.data.data["1022"])
);
}
});
},
//16进制转为时间 16位无符号高字节是时低字节是分
convertToTimeMinutes(hexValue) {
// 将十进制数转换为16进制字符串
let hexString = hexValue.toString(16);
// 补零确保结果是4位16进制数
while (hexString.length < 4) {
hexString = "0" + hexString;
}
return hexString;
},
insertColonEveryTwoDigits(inputString) {
// 使用正则表达式将字符串每两位切割
const chunks = inputString.match(/.{1,2}/g);
return chunks.join(":");
// 使用join方法将切割后的数组元素用冒号连接起来
},
dataInit() {
var store = this.$store.state;
var store = this.$store.state;
this.inputData = store.ControlData;
this.openIndex = this.inputData["21548"];
this.get21549();
// this.inputData['21552'] = this.countData(this.inputData['21552'])
// this.inputData['21550'] = this.countData10(this.inputData['21550'])
var data = {
deviceId: store.equipmentList[store.equipmentIndex - 1].deviceId,
};
// this.api.readControl_fiveControl(data).then(res => {
// console.log(res, 111);
// if (res.data.code == 200) {
// }
// })
this.getStatus(data);
},
//全选文本
selectValue(e) {
var store = this.$store.state;
store.nowInput = e.target.value;
e.currentTarget.select();
},
//失去焦点
blurChange(code, el) {
var store = this.$store.state;
var data = {
equipmentId: store.equipmentList[store.equipmentIndex - 1].deviceId,
regAddress: code,
num: el.target.value,
}; //避免开启多个计时器
if (this.timer) {
this.timer && clearInterval(this.timer);
this.changeData(data);
}
},
changeBtn(code, el) {
var store = this.$store.state;
var data = {
equipmentId: store.equipmentList[store.equipmentIndex - 1].deviceId,
regAddress: code,
num: el.target.value,
};
this.delayTimerBtn(0, data);
},
//切换btn的限制 写入停止后j*100毫秒调取函数
delayTimerBtn(i, data) {
const that = this;
//整体接口
let j = this.$store.state.lateSendBtn;
//避免开启多个计时器
this.timer && clearInterval(this.timer);
this.timer = setInterval(() => {
++i;
if (i == j) {
that.changeData(data);
clearInterval(this.timer);
}
}, 100);
},
change(code, el) {
var store = this.$store.state;
var data = {
equipmentId: store.equipmentList[store.equipmentIndex - 1].deviceId,
regAddress: code,
num: el.target.value,
};
this.delayTimer(0, data);
},
//限制 写入停止后j*100毫秒调取函数
delayTimer(i, data) {
const that = this;
//整体接口
let j = this.$store.state.lateSend;
//避免开启多个计时器
this.timer && clearInterval(this.timer);
this.timer = setInterval(() => {
++i;
if (i == j) {
that.changeData(data);
clearInterval(this.timer);
}
}, 100);
},
changeData(data) {
var store = this.$store.state;
this.api.postControlWrite(data).then((res) => {
if (res.data.code == 200) {
this.$message({
message: res.data.msg,
type: "success",
});
store.nowInput = "";
// this.dataInit();
} else {
this.inputData[data.regAddress] = store.nowInput;
this.$message.error(res.data.msg);
}
this.timer = null;
});
},
},
};
</script>
<style lang="scss"></style>