wszhyWx/src/views/page/electromagneticControl.vue
2024-01-22 17:50:52 +08:00

419 lines
18 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="electromagneticControl">
<div class="table-title">
<img src="../../assets/img/electromagneticControl.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>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>手动开启阀门的时间</span>
<input @blur="blurChange(startList[indexs - 1]+1, $event)" v-model="inputData[startList[indexs - 1]+1]" @input="change(startList[indexs - 1]+1, $event)"
type="text" placeholder="0">
<span>分钟</span>
</div>
</div>
<div class="flex-view shrink-none">
<div class="input-sel">
<div class="title">运行模式选择(2选1)</div>
<el-dropdown @command="handleCommand">
<div class="el-dropdown-link">
<input v-model="sensorType" type="text" class="input-input" placeholder="无">
<div class="arrow"><img src="../../assets/image/arrow.png" alt=""></div>
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="item, index in typeList" :key="index" :command="item.value">{{
item.label }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="input-btn p-t-31">
<div class="btn btn-w66" @click="changeIndexOpen(0)" :class="actList1[0] == '1' ? 'blue' : 'off'">
周日
</div>
<div class="btn btn-w66" @click="changeIndexOpen(1)" :class="actList1[1] == '1' ? 'blue' : 'off'">
周一
</div>
<div class="btn btn-w66" @click="changeIndexOpen(2)" :class="actList1[2] == '1' ? 'blue' : 'off'">
周二
</div>
<div class="btn btn-w66" @click="changeIndexOpen(3)" :class="actList1[3] == '1' ? 'blue' : 'off'">
周三
</div>
<div class="btn btn-w66" @click="changeIndexOpen(4)" :class="actList1[4] == '1' ? 'blue' : 'off'">
周四
</div>
<div class="btn btn-w66" @click="changeIndexOpen(5)" :class="actList1[5] == '1' ? 'blue' : 'off'">
周五
</div>
<div class="btn btn-w66" @click="changeIndexOpen(6)" :class="actList1[6] == '1' ? 'blue' : 'off'">
周六
</div>
</div>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>时间段启动每次灌溉时长</span>
<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">
<span></span>
</div>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="number-view">
<div>1</div>
</div>
<div class="input-main-80">
<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>
<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>
<input @blur="blurChange(startList[indexs - 1]+8, $event)" v-model="inputData[startList[indexs - 1]+8]" @input="change(startList[indexs - 1]+8, $event)"
type="text" placeholder="0">
<span>:</span>
<input @blur="blurChange(startList[indexs - 1]+9, $event)" v-model="inputData[startList[indexs - 1]+9]" @input="change(startList[indexs - 1]+9, $event)"
type="text" placeholder="0">
<span>时间段里启动次数</span>
<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">
</div>
</div>
<div class="flex-view shrink-none padding-none">
<div class="number-view">
<div>2</div>
</div>
<div class="input-main-80">
<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>
<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">
<span>-</span>
<input @blur="blurChange(startList[indexs - 1]+13, $event)" v-model="inputData[startList[indexs - 1]+13]" @input="change(startList[indexs - 1]+13, $event)"
type="text" placeholder="0">
<span>:</span>
<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>
<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">
</div>
</div>
<div class="text-tips">
土壤传感器
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>有效检测时间段</span>
<input @blur="blurChange(startList[indexs - 1]+15, $event)" v-model="inputData[startList[indexs - 1]+15]" @input="change(startList[indexs - 1]+15, $event)"
type="text" placeholder="0">
<span>:</span>
<input @blur="blurChange(startList[indexs - 1]+16, $event)" v-model="inputData[startList[indexs - 1]+16]" @input="change(startList[indexs - 1]+16, $event)"
type="text" placeholder="0">
<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>
<input @blur="blurChange(startList[indexs - 1]+18, $event)" v-model="inputData[startList[indexs - 1]+18]" @input="change(startList[indexs - 1]+18, $event)"
type="text" placeholder="0">
</div>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>最低土壤湿度</span>
<input @blur="blurChange10(startList[indexs - 1]+19, $event)" v-model="inputData[startList[indexs - 1]+19]" @input="changeCount10(startList[indexs - 1]+19, $event)"
type="text" placeholder="0">
<span>%</span>
</div>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>最高土壤湿度</span>
<input @blur="blurChange10(startList[indexs - 1]+20, $event)" v-model="inputData[startList[indexs - 1]+20]" @input="changeCount10(startList[indexs - 1]+20, $event)"
type="text" placeholder="0">
<span>%</span>
</div>
</div>
<div class="flex-view border-none shrink-none padding-none">
<div class="input-main-80">
<span>灌溉时长上限</span>
<input @blur="blurChange(startList[indexs - 1]+21, $event)" v-model="inputData[startList[indexs - 1]+21]" @input="change(startList[indexs - 1]+21, $event)"
type="text" placeholder="0">
<span>分钟</span>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
timer:null,
indexs: 1,//几号阀
openIndex: 1,
startList: [20201, 20251, 20301, 20351, 20401, 20451, 20501, 20551],//每个阀门的起始参数
sensorType: '',//选择的类型
actList1: [],//周几数组
inputData: [],
typeList: [{ label: '间隔模式启动', value: 1, },
{ label: '土壤湿度传感器启动', value: 2, },]
}
},
watch: {
$route(newVal, oldVal) {
const that = this;
this.indexs = this.$route.query.id ? this.$route.query.id : 1;
setTimeout(() => {
that.dataInit();
}, 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: {
//二进制转换后的补全
padString(str, length) {
return str.padStart(length, '0');
},
//失去焦点 计算公式 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
}
},
//周几开启
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] + 2]=parseInt(num, 2)
this.changeBtn(this.startList[this.indexs - 1] + 2, dataNum);
},
//反转数组 不影响原数组
myReverse(arr) {
return [...arr].reverse()
},
getActive1() {
this.actList1 = []
var num = this.inputData[this.startList[this.indexs - 1] + 2]
var num1 = this.padString(num.toString(2), 7)
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['solenoidValve' + this.indexs](data).then(res => {
if (res.data.code == 200) {
this.inputData = res.data.data;
this.sensorType = ''
this.getSensorType()
this.openIndex = this.inputData[this.startList[this.indexs - 1]]
this.getActive1()
this.inputData[this.startList[this.indexs - 1]+19] =this.countData10(this.inputData[this.startList[this.indexs - 1]+19]);
this.inputData[this.startList[this.indexs - 1]+20] =this.countData10(this.inputData[this.startList[this.indexs - 1]+20]);
}
})
},
//类型选择
handleCommand(command) {
this.typeList.forEach((el, index) => {
if (el.value == command) {
this.sensorType = el.label
}
})
var dataNum = {
target: {
value: command,
},
};
this.changeBtn(this.startList[this.indexs - 1] + 3, dataNum);
},
getSensorType() {
console.log();
this.typeList.forEach((el, index) => {
if (el.value == this.inputData[this.startList[this.indexs - 1] + 3]) {
this.sensorType = el.label
}
})
},
//全选文本
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>