2025-01-22 09:34:51 +08:00
|
|
|
|
<template>
|
|
|
|
|
<!-- 顶部导航栏 -->
|
|
|
|
|
<custom-nav-bar :left="true" leftText="" @leftClick="" :title="formData.scenarioName">
|
|
|
|
|
<template v-slot:right>
|
|
|
|
|
<view class="fixed">
|
|
|
|
|
<view align="right" class="iconfont icon-liebiao icon" @click="groupPop = true"></view>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
</custom-nav-bar>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<view class="text-intel" v-if="formData && formData.groups && formData.groups.length">
|
2025-01-22 09:34:51 +08:00
|
|
|
|
<view>
|
|
|
|
|
<span class="text">
|
|
|
|
|
{{formData.groups[gIndex].groupName}}
|
|
|
|
|
</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view>
|
|
|
|
|
<span>
|
|
|
|
|
时长:{{formData.groups[gIndex].irrigateDuration}}h
|
|
|
|
|
</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view>
|
|
|
|
|
<!-- <span>已选:{{formData.groups[gIndex].wos.length}}</span> -->
|
2025-01-22 15:50:06 +08:00
|
|
|
|
<span>已选:{{Object.keys(select).length}}</span>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="card">
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<uni-collapse ref="collapseRef">
|
2025-01-22 09:34:51 +08:00
|
|
|
|
<uni-collapse-item title-border="none" :border="false" :show-arrow="false" :open="true"
|
|
|
|
|
v-for="item in woData">
|
|
|
|
|
<template v-slot:title>
|
|
|
|
|
<view class="cards-title">
|
|
|
|
|
<view>
|
|
|
|
|
<view class="iconfont icon-nongtian icon"></view>
|
|
|
|
|
<view class="text" style="color: #333;">
|
|
|
|
|
{{ item.landGroup }}{{ item.branchCanalCode }}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
<view class="content" v-if="item.children">
|
|
|
|
|
<uni-forms ref="baseForm">
|
|
|
|
|
<view class="cards-content">
|
|
|
|
|
<view class="greybar-box" v-for="child in item.children">
|
|
|
|
|
<view class="title">
|
|
|
|
|
<view>出水口:<span>{{child.showName}}</span></view>
|
|
|
|
|
<view v-if="child.deviceRelation">阀门:
|
|
|
|
|
<span v-if="[2,3].includes(child.deviceRelation.deviceTypeId)">
|
|
|
|
|
三通阀
|
|
|
|
|
</span>
|
|
|
|
|
<span v-if="[13].includes(child.deviceRelation.deviceTypeId)">
|
|
|
|
|
五通阀
|
|
|
|
|
</span>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-01-22 15:50:06 +08:00
|
|
|
|
<uni-forms-item v-if="child.deviceRelation">
|
|
|
|
|
<view class="check-box" v-if="[2,3].includes(child.deviceRelation.deviceTypeId)"
|
|
|
|
|
v-for="vItem in valve">
|
|
|
|
|
<u-button size="small" :text="vItem.text" @click="itemChange(child,vItem)"
|
|
|
|
|
:type="(select[child.id]?.valveNo == vItem.valveNo || selected[`${child.id}_${vItem.valveNo}`]) ? 'success':'info'" />
|
|
|
|
|
<uni-tag circle="true" type="warning"
|
|
|
|
|
v-if="selected[`${child.id}_${vItem.valveNo}`]"
|
|
|
|
|
:text="selected[`${child.id}_${vItem.valveNo}`].text" />
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</view>
|
2025-01-22 15:50:06 +08:00
|
|
|
|
<view class="check-box" v-else-if="[13].includes(child.deviceRelation.deviceTypeId)"
|
|
|
|
|
v-for="vItem in fiveValve">
|
|
|
|
|
<u-button size="small" :text="vItem.text" @click="itemChange(child,vItem)"
|
|
|
|
|
:type="(select[child.id]?.valveNo == vItem.valveNo || selected[`${child.id}_${vItem.valveNo}`]) ? 'success':'info'" />
|
|
|
|
|
<uni-tag circle="true" type="warning"
|
|
|
|
|
v-if="selected[`${child.id}_${vItem.valveNo}`]"
|
|
|
|
|
:text="selected[`${child.id}_${vItem.valveNo}`].text" />
|
|
|
|
|
</view>
|
|
|
|
|
</uni-forms-item>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
<view class="no-data" v-else>
|
|
|
|
|
<view class="iconfont icon-wbd"></view>未绑定阀门
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</uni-forms>
|
|
|
|
|
</view>
|
|
|
|
|
</uni-collapse-item>
|
|
|
|
|
</uni-collapse>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="bottom-btn">
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<u-button type="success" size="large" text="保存" @click="confirm" v-if="showSave" />
|
|
|
|
|
<u-button type="success" size="large" text="下一组" @click="nextGroup" v-else />
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<!-- 左侧分组弹出层 -->
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<u-popup mode="left" :show="groupPop" @close="groupPopClose" :closeOnClickOverlay="false">
|
2025-01-22 16:21:42 +08:00
|
|
|
|
<view style="width: 95vw;padding-bottom: 46px;">
|
2025-01-22 15:50:06 +08:00
|
|
|
|
<view class="text-intel">
|
|
|
|
|
<view>
|
|
|
|
|
<span>轮灌组:</span>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<span class="font-green">{{formData.groupNum}}</span>
|
2025-01-22 15:50:06 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view>
|
|
|
|
|
<span>总时长:</span>
|
|
|
|
|
<span class="font-green">{{`${formData.irrigateTotalDuration} h`}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
<uni-collapse>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<view v-for="(item,index) in formData.groups">
|
|
|
|
|
<uni-collapse-item title-border="none" :border="false" :show-arrow="false" v-if="!item._isHide">
|
|
|
|
|
<template v-slot:title>
|
|
|
|
|
<view class="cards-title">
|
2025-01-22 15:57:28 +08:00
|
|
|
|
<view>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<view class="text">{{item.groupName}}</view>
|
|
|
|
|
<view style="margin-left: 10px;" @click.stop="groupEditShow(index)">
|
|
|
|
|
<span>时长:</span>
|
|
|
|
|
<span class="font-orange"
|
|
|
|
|
style="text-decoration: underline;">{{`${item.irrigateDuration} h`}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view style="margin-left: 20px;">已选:{{item.wos.length}}</view>
|
2025-01-22 15:57:28 +08:00
|
|
|
|
</view>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<view class="title-r">
|
|
|
|
|
<view @click.stop="selectGroup(index)">
|
|
|
|
|
<u-button type="success" size="mini" text="选择" />
|
|
|
|
|
</view>
|
|
|
|
|
<view @click.stop="removeGroup(index)">
|
|
|
|
|
<u-button class="bg-red" type="success" size="mini" text="删除" />
|
|
|
|
|
</view>
|
2025-01-22 15:50:06 +08:00
|
|
|
|
</view>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
<view class="content">
|
|
|
|
|
<view class="cards-content" v-if="item.wos.length">
|
|
|
|
|
<view class="greybar" v-for="wo in item.wos">
|
|
|
|
|
<view>出水口:<span>{{wo.woName}}</span></view>
|
|
|
|
|
<view v-if="wo.deviceTypeKey == 'valve'">三通阀
|
|
|
|
|
<span>{{valveKey[wo.deviceTypeKey][wo.valveNo]}}</span>
|
|
|
|
|
</view>
|
|
|
|
|
<view v-else-if="wo.deviceTypeKey == 'fiveValve'">五通阀
|
|
|
|
|
<span>{{valveKey[wo.deviceTypeKey][wo.valveNo]}}</span>
|
|
|
|
|
</view>
|
2025-01-22 15:50:06 +08:00
|
|
|
|
</view>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
</uni-collapse-item>
|
|
|
|
|
</view>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</uni-collapse>
|
|
|
|
|
</view>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<u-button type="success" size="normal" style="width: 30%;margin-top: 20px;" @click="addGroup"
|
|
|
|
|
text="新增轮灌组" />
|
2025-01-22 16:21:42 +08:00
|
|
|
|
<view style="position: absolute;bottom: 0; width: 100%;">
|
2025-01-22 23:45:15 +08:00
|
|
|
|
<u-button type="success" size="large" text="关闭" @click="groupPopClose" />
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</u-popup>
|
2025-01-22 23:45:15 +08:00
|
|
|
|
|
|
|
|
|
<!-- 轮灌组编辑 -->
|
|
|
|
|
<u-modal :show="groupEdit.show" :title="groupEdit.item.groupName" :showCancelButton="true" :showConfirmButton="true"
|
|
|
|
|
@confirm="groupEditConfirm(true)" @cancel="groupEditHide" @close="groupEditHide" :closeOnClickOverlay="true">
|
|
|
|
|
<view class="slot-content" style="border: 1px solid red;width: 100%;">
|
|
|
|
|
<u-form ref="formRef" :model="groupEdit.item">
|
|
|
|
|
<u-form-item label="时长(h)" labelWidth="60px">
|
|
|
|
|
<u-input v-model="groupEdit.item.irrigateDuration" placeholder="请输入时长" />
|
|
|
|
|
</u-form-item>
|
|
|
|
|
</u-form>
|
|
|
|
|
</view>
|
|
|
|
|
</u-modal>
|
2025-01-22 09:34:51 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import store from '@/store'
|
2025-02-19 18:28:55 +08:00
|
|
|
|
import plugins from "@/plugins";
|
2025-01-22 09:34:51 +08:00
|
|
|
|
const user = store.state.user.user;
|
2025-01-22 23:45:15 +08:00
|
|
|
|
import {
|
|
|
|
|
woSort
|
|
|
|
|
} from "@/utils/woSort"
|
2025-01-22 09:34:51 +08:00
|
|
|
|
import {
|
|
|
|
|
getWaterOutletPermissionList
|
|
|
|
|
} from "@/api/system/landWaterOutletPermission";
|
2025-01-22 23:45:15 +08:00
|
|
|
|
import * as isApi from '@/api/irrigate/irrigateScenario.js'
|
2025-01-22 09:34:51 +08:00
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
formData: null,
|
|
|
|
|
gIndex: 0, //当前编辑的索引
|
2025-01-22 23:45:15 +08:00
|
|
|
|
selectIndex: false, //选择索引
|
|
|
|
|
showSave: false, //保存按钮
|
2025-01-22 09:34:51 +08:00
|
|
|
|
woData: [], //出水口列表
|
|
|
|
|
// 三通阀
|
|
|
|
|
valve: [{
|
|
|
|
|
text: '①开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 1,
|
|
|
|
|
angleKey: "open1",
|
|
|
|
|
deviceTypeKey: "valve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: '②开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 2,
|
|
|
|
|
angleKey: "open2",
|
|
|
|
|
deviceTypeKey: "valve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
// 多通阀
|
|
|
|
|
fiveValve: [{
|
|
|
|
|
text: '①开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 1,
|
|
|
|
|
angleKey: "open",
|
|
|
|
|
deviceTypeKey: "fiveValve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: '②开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 2,
|
|
|
|
|
angleKey: "open",
|
|
|
|
|
deviceTypeKey: "fiveValve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: '③开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 3,
|
|
|
|
|
angleKey: "open",
|
|
|
|
|
deviceTypeKey: "fiveValve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: '④开',
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveNo: 4,
|
|
|
|
|
angleKey: "open",
|
|
|
|
|
deviceTypeKey: "fiveValve",
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
],
|
2025-01-22 15:50:06 +08:00
|
|
|
|
valveKey: {
|
|
|
|
|
"valve": {
|
|
|
|
|
"1": "①开",
|
|
|
|
|
"2": "②开",
|
|
|
|
|
"3": "全开 ",
|
|
|
|
|
"4": "全关",
|
|
|
|
|
},
|
|
|
|
|
"fiveValve": {
|
|
|
|
|
"1": "①开",
|
|
|
|
|
"2": "②开",
|
|
|
|
|
"3": "③开",
|
|
|
|
|
"4": "④开",
|
|
|
|
|
}
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
2025-01-22 15:57:28 +08:00
|
|
|
|
select: {}, //当前选择
|
|
|
|
|
selected: {}, //往期选择
|
|
|
|
|
groupPop: false, //组弹窗
|
2025-01-22 23:45:15 +08:00
|
|
|
|
groupEdit: { //组编辑
|
|
|
|
|
show: false,
|
|
|
|
|
index: 0,
|
|
|
|
|
item: {},
|
|
|
|
|
}
|
2025-01-22 09:34:51 +08:00
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
onLoad(par) {
|
2025-01-22 23:45:15 +08:00
|
|
|
|
this.initData(par);
|
2025-01-22 09:34:51 +08:00
|
|
|
|
|
|
|
|
|
uni.showLoading();
|
|
|
|
|
// 初始化出水口数据
|
|
|
|
|
getWaterOutletPermissionList(this.formData.landId).then(res => {
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
if (res.data) {
|
|
|
|
|
this.woData = res.data;
|
|
|
|
|
} else {
|
|
|
|
|
this.woData = [];
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
2025-01-22 23:45:15 +08:00
|
|
|
|
onShow() {},
|
|
|
|
|
mounted() {},
|
2025-01-22 09:34:51 +08:00
|
|
|
|
methods: {
|
2025-01-22 23:45:15 +08:00
|
|
|
|
async initData(par) {
|
|
|
|
|
uni.showLoading()
|
|
|
|
|
this.formData = JSON.parse(par.item);
|
|
|
|
|
if (this.formData.id) {
|
|
|
|
|
const res = await isApi.getIrrigateScenario(this.formData.id);
|
|
|
|
|
if (res.data) {
|
|
|
|
|
this.formData.groups = res.data.groups;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
let groupArr = [];
|
|
|
|
|
for (var i = 1; i <= this.formData.groupNum; i++) {
|
|
|
|
|
groupArr.push(this.createGroup(i));
|
|
|
|
|
}
|
|
|
|
|
this.formData.groups = groupArr;
|
|
|
|
|
this.calcAVGDuration();
|
|
|
|
|
}
|
|
|
|
|
this.formData.groups.forEach((item, index) => {
|
|
|
|
|
if (!item.wos.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
item.wos.forEach((_item, _index) => {
|
|
|
|
|
if (index == 0) {
|
|
|
|
|
if (_item.deviceTypeKey == "valve") {
|
|
|
|
|
this.select[_item.woId] = this.valve[_item.valveNo - 1];
|
|
|
|
|
} else if (_item.deviceTypeKey == "fiveValve") {
|
|
|
|
|
this.select[_item.woId] = this.fiveValve[_item.valveNo - 1];
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.selected[`${_item.woId}_${_item.valveNo}`] = {
|
|
|
|
|
text: item.groupName, //页面显示
|
|
|
|
|
gIndex: index, //轮灌组索引
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
if (this.formData.groups.length == 1) {
|
|
|
|
|
this.showSave = true;
|
|
|
|
|
} else {
|
|
|
|
|
this.showSave = false;
|
|
|
|
|
}
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
},
|
|
|
|
|
//创建轮灌组
|
|
|
|
|
createGroup(index) {
|
|
|
|
|
return {
|
|
|
|
|
id: undefined,
|
|
|
|
|
landId: this.formData.landId,
|
|
|
|
|
userId: user.userId,
|
|
|
|
|
shareUserIds: undefined,
|
|
|
|
|
irrigateScenarioId: this.formData.id,
|
|
|
|
|
groupName: `轮灌组${index}`,
|
|
|
|
|
irrigateDuration: 0,
|
|
|
|
|
sort: index,
|
|
|
|
|
delFlag: "0",
|
|
|
|
|
wos: [],
|
|
|
|
|
_isHide: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//计算平均时长
|
|
|
|
|
calcAVGDuration() {
|
|
|
|
|
const avg = (Number(this.formData.irrigateTotalDuration) / Number(this.formData.groupNum)).toFixed(2);
|
|
|
|
|
this.formData.groups.forEach(item => {
|
|
|
|
|
if (item._isHide) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
item.irrigateDuration = avg;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//关闭组选择
|
|
|
|
|
groupPopClose() {
|
|
|
|
|
if (this.selectIndex) {
|
2025-02-19 18:28:55 +08:00
|
|
|
|
plugins.modal.msg("请选择操作的轮灌组")
|
2025-01-22 23:45:15 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.groupPop = false;
|
|
|
|
|
},
|
2025-01-22 09:34:51 +08:00
|
|
|
|
// 选中数据
|
2025-01-22 15:50:06 +08:00
|
|
|
|
itemChange(wo, vItem) {
|
|
|
|
|
if (this.selected[`${wo.id}_${vItem.valveNo}`]) {
|
2025-02-20 11:34:19 +08:00
|
|
|
|
plugins.modal.confirm("更换到当前轮灌组?").then(() => {
|
2025-01-23 11:02:58 +08:00
|
|
|
|
//删除之前存储的组中的数据
|
|
|
|
|
this.removeWo(this.selected[`${wo.id}_${vItem.valveNo}`].gIndex, wo.id, vItem.valveNo);
|
|
|
|
|
delete this.selected[`${wo.id}_${vItem.valveNo}`];
|
2025-01-22 09:34:51 +08:00
|
|
|
|
|
2025-01-23 11:02:58 +08:00
|
|
|
|
//添加新选中的
|
|
|
|
|
this.setSelect(wo, vItem);
|
|
|
|
|
}).catch(() => {});
|
2025-01-22 15:50:06 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//添加新选中的
|
|
|
|
|
this.setSelect(wo, vItem);
|
|
|
|
|
},
|
|
|
|
|
//添加选中数据
|
|
|
|
|
setSelect(wo, vItem) {
|
|
|
|
|
vItem["item"] = wo;
|
|
|
|
|
if (this.select[wo.id]) {
|
|
|
|
|
this.removeWo(this.gIndex, wo.id, this.select[wo.id].valveNo);
|
|
|
|
|
if (this.select[wo.id].valveNo == vItem.valveNo) {
|
|
|
|
|
this.select[wo.id] = null;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.addWo(this.gIndex, vItem, wo)
|
|
|
|
|
this.select[wo.id] = vItem;
|
|
|
|
|
},
|
|
|
|
|
//新增出水口
|
|
|
|
|
addWo(index, vItem, wo) {
|
|
|
|
|
const group = this.formData.groups[index];
|
2025-01-22 23:45:15 +08:00
|
|
|
|
group.wos.push({
|
2025-01-22 15:50:06 +08:00
|
|
|
|
landId: group.landId,
|
|
|
|
|
irrigateScenarioId: group.irrigateScenarioId,
|
|
|
|
|
irrigateGroupId: group.id,
|
|
|
|
|
wogId: wo.landGroupId || -1,
|
|
|
|
|
wogName: `${wo.landGroup || ''}${wo.branchCanalCode || ''}`,
|
|
|
|
|
woId: wo.id,
|
|
|
|
|
woName: wo.showName,
|
|
|
|
|
deviceTypeKey: vItem.deviceTypeKey,
|
|
|
|
|
valveNo: vItem.valveNo,
|
|
|
|
|
angleKey: vItem.angleKey,
|
|
|
|
|
sort: 1,
|
|
|
|
|
});
|
2025-01-22 23:45:15 +08:00
|
|
|
|
group.wos = group.wos.slice().sort((v1, v2) => woSort(v1, v2, "woName"));
|
|
|
|
|
this.formData.groups[index] = group;
|
2025-01-22 15:50:06 +08:00
|
|
|
|
},
|
|
|
|
|
//删除出水口
|
|
|
|
|
removeWo(index, woId, valveNo) {
|
|
|
|
|
if (!this.formData.groups[index].wos.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const _index = this.formData.groups[index].wos.findIndex(u => u.woId == woId && u.valveNo == valveNo);
|
|
|
|
|
if (_index != -1) {
|
|
|
|
|
this.formData.groups[index].wos.splice(_index, 1);
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
2025-01-22 23:45:15 +08:00
|
|
|
|
//下一组
|
2025-01-22 09:34:51 +08:00
|
|
|
|
nextGroup() {
|
2025-01-22 23:45:15 +08:00
|
|
|
|
this.selectGroup(this.gIndex + 1);
|
2025-01-22 15:50:06 +08:00
|
|
|
|
},
|
2025-01-22 23:45:15 +08:00
|
|
|
|
//保存选择的数据
|
2025-01-22 15:50:06 +08:00
|
|
|
|
savaSelectData() {
|
|
|
|
|
let selected = {};
|
|
|
|
|
for (var key in this.select) {
|
|
|
|
|
if (this.select[key]) {
|
|
|
|
|
const group = this.formData.groups[this.gIndex];
|
|
|
|
|
selected[`${key}_${this.select[key].valveNo}`] = {
|
|
|
|
|
text: group.groupName, //页面显示
|
|
|
|
|
gIndex: this.gIndex, //轮灌组索引
|
|
|
|
|
};
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-22 15:50:06 +08:00
|
|
|
|
this.selected = Object.assign({}, this.selected, selected)
|
2025-01-22 09:34:51 +08:00
|
|
|
|
},
|
2025-01-22 23:45:15 +08:00
|
|
|
|
//轮灌组编辑
|
|
|
|
|
groupEditShow(index) {
|
|
|
|
|
this.groupPop = false;
|
|
|
|
|
this.groupEdit.show = true;
|
|
|
|
|
this.groupEdit.index = index;
|
|
|
|
|
this.groupEdit.item = this.formData.groups[index];
|
|
|
|
|
},
|
|
|
|
|
groupEditHide() {
|
|
|
|
|
this.groupEdit.show = false;
|
|
|
|
|
this.groupEdit.item = {};
|
|
|
|
|
this.groupPop = true;
|
|
|
|
|
},
|
|
|
|
|
groupEditConfirm() {
|
|
|
|
|
let irrigateDuration = this.groupEdit.item.irrigateDuration;
|
|
|
|
|
// 清理非数字和非小数点字符
|
|
|
|
|
let cleaned = irrigateDuration.replace(/[^0-9.]/g, '');
|
|
|
|
|
// 确保只有一个小数点,并截取小数点后两位
|
|
|
|
|
const [integerPart, decimalPart = ""] = cleaned.split('.').slice(0, 2);
|
|
|
|
|
const formattedDecimal = decimalPart ? `${integerPart}.${decimalPart.slice(0, 2)}` : integerPart;
|
|
|
|
|
this.groupEdit.item.irrigateDuration = formattedDecimal;
|
|
|
|
|
|
|
|
|
|
//合计浇灌时长
|
|
|
|
|
const sumId = this.formData.groups.reduce((accumulator, currentValue) => {
|
|
|
|
|
return accumulator + Number(currentValue.irrigateDuration);
|
|
|
|
|
}, 0);
|
|
|
|
|
this.formData.irrigateTotalDuration = sumId;
|
|
|
|
|
|
|
|
|
|
//关闭
|
|
|
|
|
this.groupEditHide();
|
|
|
|
|
},
|
|
|
|
|
//选择轮灌组
|
|
|
|
|
selectGroup(index) {
|
|
|
|
|
if (this.groupPop) {
|
|
|
|
|
this.groupPop = false;
|
|
|
|
|
this.selectIndex = false;
|
|
|
|
|
}
|
|
|
|
|
if (this.formData.groups[index].sort == this.formData.groupNum) {
|
|
|
|
|
this.showSave = true;
|
|
|
|
|
} else {
|
|
|
|
|
this.showSave = false;
|
|
|
|
|
}
|
|
|
|
|
this.savaSelectData();
|
|
|
|
|
this.select = {};
|
|
|
|
|
this.gIndex = index;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var key in this.selected) {
|
|
|
|
|
if (this.selected[key].gIndex == index) {
|
|
|
|
|
delete this.selected[key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.formData.groups[index].wos.forEach(item => {
|
|
|
|
|
if (item.deviceTypeKey == "valve") {
|
|
|
|
|
switch (item.valveNo) {
|
|
|
|
|
case 1:
|
|
|
|
|
this.select[item.woId] = this.valve[0];
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
this.select[item.woId] = this.valve[1];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} else if (item.deviceTypeKey == "fiveValve") {
|
|
|
|
|
this.select[item.woId] = this.fiveValve[item.valveNo - 1];
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
this.$refs.collapseRef.resize();
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
//删除轮灌组
|
|
|
|
|
removeGroup(index) {
|
2025-01-22 15:57:28 +08:00
|
|
|
|
this.groupPop = false;
|
2025-01-22 23:45:15 +08:00
|
|
|
|
const groupName = this.formData.groups[index].groupName;
|
2025-02-20 11:34:19 +08:00
|
|
|
|
plugins.modal.confirm(`删除"${groupName}"?`).then(() => {
|
2025-01-23 11:02:58 +08:00
|
|
|
|
//删除轮灌组
|
|
|
|
|
this.formData.groups[index]._isHide = true;
|
|
|
|
|
let i = 0;
|
|
|
|
|
this.formData.groups.forEach(item => {
|
|
|
|
|
if (item._isHide) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
i++;
|
|
|
|
|
item.groupName = `轮灌组${i}`;
|
|
|
|
|
item.sort = i;
|
|
|
|
|
});
|
|
|
|
|
this.formData.groupNum = i;
|
|
|
|
|
this.calcAVGDuration();
|
2025-01-22 23:45:15 +08:00
|
|
|
|
|
2025-01-23 11:02:58 +08:00
|
|
|
|
//删除存储的数据
|
|
|
|
|
if (this.gIndex == index) { //删除的是当前的组
|
|
|
|
|
this.select = {};
|
|
|
|
|
} else { //不是当前组
|
|
|
|
|
for (var key in this.selected) {
|
|
|
|
|
let item = this.selected[key];
|
|
|
|
|
if (item.gIndex == index) {
|
|
|
|
|
delete this.selected[key];
|
|
|
|
|
} else {
|
|
|
|
|
this.selected[key].text = this.formData.groups[item.gIndex].groupName;
|
2025-01-22 23:45:15 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-23 11:02:58 +08:00
|
|
|
|
|
|
|
|
|
//新的编辑组索引
|
|
|
|
|
this.selectIndex = true;
|
2025-02-19 18:28:55 +08:00
|
|
|
|
plugins.modal.msg("删除成功,轮灌组重新排序")
|
2025-01-23 11:02:58 +08:00
|
|
|
|
}).catch(() => {
|
|
|
|
|
this.groupPop = true;
|
2025-01-22 23:45:15 +08:00
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//新增轮灌组
|
|
|
|
|
addGroup() {
|
|
|
|
|
let index = Number(this.formData.groupNum) + 1;
|
|
|
|
|
this.formData.groupNum = index;
|
|
|
|
|
this.formData.groups.push(this.createGroup(index));
|
|
|
|
|
this.calcAVGDuration();
|
2025-01-22 15:57:28 +08:00
|
|
|
|
},
|
2025-01-22 09:34:51 +08:00
|
|
|
|
// 保存
|
|
|
|
|
confirm() {
|
2025-01-22 23:45:15 +08:00
|
|
|
|
let title = "";
|
|
|
|
|
let formData = JSON.parse(JSON.stringify(this.formData));
|
|
|
|
|
this.formData.groups.forEach((item, index) => {
|
|
|
|
|
if (item._isHide) {
|
|
|
|
|
formData.groups.splice(index, 1);
|
|
|
|
|
} else {
|
|
|
|
|
if (!item.wos.length) {
|
|
|
|
|
if (title) {
|
|
|
|
|
title = `${title},${item.groupName}`;
|
|
|
|
|
} else {
|
|
|
|
|
title = item.groupName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
if (title) {
|
2025-02-19 18:28:55 +08:00
|
|
|
|
plugins.modal.msg(`"${title}"未选择出水口`)
|
2025-01-22 23:45:15 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 11:02:58 +08:00
|
|
|
|
formData.groups.forEach((item, index) => {
|
|
|
|
|
item.wos = item.wos.slice().sort((v1, v2) => woSort(v1, v2, "woName"));
|
|
|
|
|
item.wos.forEach((_item, _index) => {
|
|
|
|
|
_item.sort = (_index + 1)
|
|
|
|
|
})
|
|
|
|
|
})
|
2025-02-20 11:34:19 +08:00
|
|
|
|
plugins.modal.confirm("保存轮灌方案?").then(() => {
|
2025-01-23 11:02:58 +08:00
|
|
|
|
uni.showLoading();
|
|
|
|
|
isApi.saveIrrigateScenario(formData).then(res => {
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
uni.switchTab({
|
|
|
|
|
url: '/pages/irrigation/index'
|
2025-01-22 23:45:15 +08:00
|
|
|
|
});
|
2025-01-23 11:02:58 +08:00
|
|
|
|
});
|
|
|
|
|
}).catch(() => {});
|
2025-01-22 23:45:15 +08:00
|
|
|
|
},
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
uni-app,
|
|
|
|
|
uni-page,
|
|
|
|
|
uni-page-wrapper,
|
|
|
|
|
uni-page-body {
|
|
|
|
|
padding-bottom: 38px !important;
|
|
|
|
|
}
|
2025-01-22 23:45:15 +08:00
|
|
|
|
|
|
|
|
|
::v-deep.u-popup__content {
|
|
|
|
|
background-color: #f3f3f3 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.greybar>uni-view:first-child {
|
|
|
|
|
color: #303133;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.greybar view>span {
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-22 15:50:06 +08:00
|
|
|
|
// 按钮列表
|
|
|
|
|
::v-deep .uni-forms-item__content {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex: none;
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
|
|
.check-box {
|
|
|
|
|
padding: 10px 0;
|
|
|
|
|
flex: 1;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
|
|
.uni-tag {
|
|
|
|
|
margin-top: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.u-button--small {
|
|
|
|
|
width: 50px;
|
|
|
|
|
height: 26px;
|
|
|
|
|
|
|
|
|
|
.u-button__text {
|
|
|
|
|
font-size: 14px !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.u-button--info {
|
|
|
|
|
border: 1px #DCDFE6 solid;
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 表单
|
2025-01-22 09:34:51 +08:00
|
|
|
|
::v-deep .uni-forms {
|
|
|
|
|
padding: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-22 15:50:06 +08:00
|
|
|
|
::v-deep .uni-forms-item__label {
|
|
|
|
|
min-width: 0px !important;
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-01-22 15:50:06 +08:00
|
|
|
|
.uni-forms-item {
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .uni-data-checklist .checklist-group {
|
|
|
|
|
padding: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .uni-data-checklist .checklist-group .checklist-box {
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin-right: 0px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .checklist-text {
|
|
|
|
|
color: #39ac4f;
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-01-22 15:50:06 +08:00
|
|
|
|
::v-deep .uni-data-checklist .checklist-group .checklist-box.is--default.is-checked .checkbox__inner {
|
|
|
|
|
border-color: #39ac4f;
|
|
|
|
|
background-color: #39ac4f;
|
2025-01-22 09:34:51 +08:00
|
|
|
|
}
|
|
|
|
|
</style>
|