wszhyWx/src/views/page/sunroofControl.vue
2024-01-26 15:14:40 +08:00

451 lines
19 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="sunroofControl">
<div class="table-title">
<img src="../../assets/img/sunroofControl.png" alt="">通风窗{{indexs}}
</div>
<div class="title-tips">工作方式选择
<div class="input-btn">
<div class="btn btn-tips" @click="changeOpen(0)" :class="inputData[startList[indexs - 1]] == 0 ? 'blue' : 'green'">
{{ inputData[startList[indexs - 1]] == 0 ? '无效' : '有效' }}
</div>
</div>
</div>
<div class="flex-view">
<div class="input-btn ">
<div class="btn" @click="changeOpen(1)" :class="inputData[startList[indexs - 1]] == 1 ? 'blue' : 'green'">
<img src="../../assets/image/irrigateSet2.png" alt="" />自动运行
</div>
<div class="btn" @click="changeOpen(2)" :class="inputData[startList[indexs-1]] == 2 ? 'blue' : 'green'">
<img src="../../assets/image/irrigateSet3.png" alt="" />手动打开
</div>
<div class="btn" @click="changeOpen(3)" :class="inputData[startList[indexs-1]] == 3 ? 'blue' : 'green'">
<img src="../../assets/image/irrigateSet1.png" alt="" />手动关闭
</div>
<div class="btn" @click="changeOpen(4)" :class="inputData[startList[indexs-1]] == 4 ? 'blue' : 'green'">
<img src="../../assets/image/irrigateSet1.png" alt="" />停止
</div>
</div>
</div>
<div class="flex-view border-none padding-none">
<div class="number-view p-t-31">
<div>1</div>
</div>
<div class="input-main input-main-w120">
<div>温度控制精度</div>
<input @blur="blurChange10(startList[indexs-1]+3, $event)" v-model="inputData[startList[indexs-1]+3]" @input="changeCount10(startList[indexs-1]+3, $event)"
type="text" placeholder="0">
<span></span>
</div>
<div class="input-main input-main-w120">
<div>计算周期</div>
<input @blur="blurChange(startList[indexs-1]+5, $event)" v-model="inputData[startList[indexs-1]+5]" @input="change(startList[indexs-1]+5, $event)"
type="text" placeholder="0">
<span></span>
</div>
</div>
<div class="flex-view border-none padding-none">
<div class="number-view p-t-31">
<div>2</div>
</div>
<div class="input-main input-main-w120">
<div>比例系数</div>
<input @blur="blurChange(startList[indexs-1]+6, $event)" v-model="inputData[startList[indexs-1]+6]" @input="change(startList[indexs-1]+6, $event)"
type="text" placeholder="0">
<span></span>
</div>
<div class="input-main input-main-w120">
<div>积分系数</div>
<input @blur="blurChange(startList[indexs-1]+7, $event)" v-model="inputData[startList[indexs-1]+7]" @input="change(startList[indexs-1]+7, $event)"
type="text" placeholder="0">
<span></span>
</div>
</div>
<div class="flex-view border-none padding-none">
<div class="number-view p-t-31">
<div>3</div>
</div>
<div class="input-main input-main-w260">
<div>通风窗分阶段全部打开次数</div>
<input @blur="blurChange(startList[indexs-1]+4, $event)" v-model="inputData[startList[indexs-1]+4]" @input="change(startList[indexs-1]+4, $event)"
type="text" placeholder="0">
</div>
</div>
<div class="flex-view padding-none">
<div class="number-view p-t-31">
<div>4</div>
</div>
<div class="input-main input-main-w260">
<div>风机运行时通风窗打开角度</div>
<input @blur="blurChange(startList[indexs-1]+2, $event)" v-model="inputData[startList[indexs-1]+2]" @input="change(startList[indexs-1]+2, $event)"
type="text" placeholder="0">
</div>
</div>
<div class="flex-view border-none padding-none">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(0)" :class="actList1[0] == '1' ? 'blue' : 'off'">
{{ actList1[0] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>室外温度低于</span>
<input @blur="blurChangeCount(startList[indexs-1]+8, $event)" v-model="inputData[startList[indexs-1]+8]" @input="changeCountData(startList[indexs-1]+8, $event)"
type="text" placeholder="0">
<span>度时禁止开启通风窗</span>
</div>
</div>
<div class="flex-view padding-none">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(1)" :class="actList1[1] == '1' ? 'blue' : 'off'">
{{ actList1[1] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>风速大于</span>
<input @blur="blurChange10(startList[indexs-1]+13, $event)" v-model="inputData[startList[indexs-1]+13]" @input="changeCount10(startList[indexs-1]+13, $event)"
type="text" placeholder="0">
<span>关闭通风窗大风保护解除时间</span>
</div>
<div class="input-main input-main-w80">
<input @blur="blurChange(startList[indexs-1]+14, $event)" v-model="inputData[startList[indexs-1]+14]" @input="change(startList[indexs-1]+14, $event)"
type="text" placeholder="0">
<span>分钟</span>
</div>
</div>
<div class="flex-view border-none ">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(3)" :class="actList1[3] == '1' ? 'blue' : 'off'">
{{ actList1[3] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>开启通风窗除湿功能;</span>
</div>
</div>
<div class="flex-view border-none ">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(4)" :class="actList1[4] == '1' ? 'blue' : 'off'">
{{ actList1[4] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>选择下雨保护条件有效;</span>
</div>
</div>
<div class="flex-view">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(5)" :class="actList1[5] == '1' ? 'blue' : 'off'">
{{ actList1[5] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>选择有雨量桶检测条件有效;</span>
</div>
</div>
<div class="flex-view border-none">
<div class="input-main input-main-w100">
<span>湿度控制精度</span>
<input @blur="blurChange10(startList[indexs-1]+9, $event)" v-model="inputData[startList[indexs-1]+9]" @input="changeCount10(startList[indexs-1]+9, $event)"
type="text" placeholder="0">
<span>通风窗除湿时开启角度</span>
<input @blur="blurChange(startList[indexs-1]+12, $event)" v-model="inputData[startList[indexs-1]+12]" @input="change(startList[indexs-1]+12, $event)"
type="text" placeholder="0">
</div>
</div>
<div class="flex-view">
<div class="input-main input-main-w100">
<span>实测温度比目标温度低</span>
<input @blur="blurChange10(startList[indexs-1]+15, $event)" v-model="inputData[startList[indexs-1]+15]" @input="changeCount10(startList[indexs-1]+15, $event)"
type="text" placeholder="0">
<span>将进行间断除湿开</span>
<input @blur="blurChange(startList[indexs-1]+10, $event)" v-model="inputData[startList[indexs-1]+10]" @input="change(startList[indexs-1]+10, $event)"
type="text" placeholder="0">
<span>分钟</span>
<input @blur="blurChange(startList[indexs-1]+11, $event)" v-model="inputData[startList[indexs-1]+11]" @input="change(startList[indexs-1]+11, $event)"
type="text" placeholder="0">
<span>分钟</span>
</div>
</div>
<div class="flex-view padding-none">
<div class="input-btn">
<div class="btn btn-w80" @click="changeIndexOpen(2)" :class="actList1[2] == '1' ? 'blue' : 'off'">
{{ actList1[2] == '1' ? '有效' : '无效' }}
</div>
</div>
<div class="input-main input-main-w120">
<span>室内温度低于</span>
<input @blur="blurChangeCount(startList[indexs-1]+16, $event)" v-model="inputData[startList[indexs-1]+16]" @input="changeCountData(startList[indexs-1]+16, $event)"
type="text" placeholder="0">
<span>禁止开窗除湿</span>
</div>
</div>
<div class="flex-view padding-none">
<div class="input-main input-main-w120">
<span>下雨检测时间</span>
<input @blur="blurChange(startList[indexs-1]+17, $event)" v-model="inputData[startList[indexs-1]+17]" @input="change(startList[indexs-1]+17, $event)"
type="text" placeholder="0">
<span>分钟</span>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
inputData: [],
startList: [21250, 21273, 21296, 21319],//每个阀门的起始参数
indexs: 1,
actList1: [],
}
},
watch: {
$route(newVal, oldVal) {
const that = this;
this.indexs = this.$route.query.id ? this.$route.query.id : 1;
setTimeout(() => {
that.getActive1();
}, 0);
},
},
mounted() {
const that = this;
this.indexs = this.$route.query.id ? this.$route.query.id : 1;
setTimeout(() => {
that.dataInit();
}, 0);
//input获取焦点后全选
let inputList = document.querySelectorAll('input');
for (let index = 0; index < inputList.length; index++) {
inputList[index].onfocus = this.selectValue;//input放入焦点全选文本
}
},
methods: {
//失去焦点 计算公式 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 (store.nowInput != el.target.value) {
this.changeData(data);
}
// 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)
},
// 计算展示值 计算公式 x/10
countData10(data) {
if (data) {
return data / 10
} else {
return 0
}
},
// 计算展示值 计算公式 (x - 400) / 10
countData(data) {
if (data) {
return (data - 400) / 10
} else {
return 0
}
},
//失去焦点
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 (store.nowInput != el.target.value) {
this.changeData(data);
}
// 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)
},
//开关无效
changeIndexOpen(active) {
if (this.actList1[active] == '1') {
this.actList1[active] = '0'
} else {
this.actList1[active] = '1'
}
this.$forceUpdate();
var revList = this.actList1.slice().reverse()
var num = revList.join("");
var dataNum = {
target: {
value: parseInt(num, 2),
},
};
this.inputData[this.startList[this.indexs - 1] + 1]=parseInt(num, 2)
this.changeBtn(this.startList[this.indexs - 1] + 1, dataNum);
},
getActive1() {
this.actList1 = []
var num = this.inputData[this.startList[this.indexs - 1] + 1]
var num1 = this.padString(num.toString(2), 6)
var openListNew = []
openListNew = num1.split("")
this.actList1 = openListNew.reverse();
},
// 工作方式选择
changeOpen(index) {
this.inputData[this.startList[this.indexs-1]] = index;
var dataNum = {
target: {
value: index,
},
};
this.changeBtn(this.startList[this.indexs - 1], dataNum);
},
dataInit() {
var store = this.$store.state
var data = {
deviceId: store.equipmentList[store.equipmentIndex - 1].deviceId,
};
this.api.readskylight(data).then(res => {
if (res.data.code == 200) {
this.inputData = res.data.data;
this.startList.forEach((el, index) => {
this.inputData[el + 3] = this.countData10(this.inputData[el + 3])
this.inputData[el + 8] = this.countData(this.inputData[el + 8])
this.inputData[el + 9] = this.countData10(this.inputData[el + 9])
this.inputData[el + 13] = this.countData10(this.inputData[el + 13])
this.inputData[el + 15] = this.countData10(this.inputData[el + 15])
this.inputData[el + 16] = this.countData(this.inputData[el + 16])
})
this.getActive1()
}
})
},
//二进制转换后的补全
padString(str, length) {
return str.padStart(length, '0');
},
//反转数组 不影响原数组
myReverse(arr) {
return [...arr].reverse()
},
//全选文本
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 (store.nowInput != el.target.value) {
this.changeData(data);
}
// 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>