|
|
@@ -11,24 +11,21 @@
|
|
|
<div v-for="(crop, cropIndex) in farmData.farms" :key="cropIndex" class="crop-section">
|
|
|
<div class="crop-header">
|
|
|
<div class="crop-tag">{{ crop.speciesName }}</div>
|
|
|
- <div class="add-btn" v-if="farmData.status === 'INIT'" @click="addVariety(crop)">+ 新增品种</div>
|
|
|
+ <div class="add-btn" v-if="farmData.status === 'INIT' || isAddVariety" @click="addVariety(crop)">+
|
|
|
+ 新增品种</div>
|
|
|
</div>
|
|
|
|
|
|
<div v-for="(region, regionIndex) in crop.regions" :key="regionIndex" class="variety-card">
|
|
|
<div class="field-row">
|
|
|
- <div class="field-value" v-if="farmData.status === 'INIT'">
|
|
|
- <el-select
|
|
|
- v-model="region.regionId"
|
|
|
- class="variety-input"
|
|
|
- placeholder="选择品种"
|
|
|
- >
|
|
|
+ <div class="field-value" v-if="farmData.status === 'INIT' || isAddVariety">
|
|
|
+ <el-select v-model="region.regionId" class="variety-input" placeholder="选择品种">
|
|
|
<el-option v-for="(item, index) in crop.typeIdItems" :key="index" :label="item.name"
|
|
|
:value="item.id" />
|
|
|
- <template #footer>
|
|
|
- <el-button text bg @click="onAddOption(region)">
|
|
|
- + 增加品种
|
|
|
- </el-button>
|
|
|
- </template>
|
|
|
+ <template #footer>
|
|
|
+ <el-button text bg @click="onAddOption(region)">
|
|
|
+ + 增加品种
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="tag-val" v-else>
|
|
|
@@ -39,13 +36,9 @@
|
|
|
<div class="field-row">
|
|
|
<div class="field-label">当下物候期</div>
|
|
|
<div class="field-value">
|
|
|
- <el-select
|
|
|
- v-model="region.phenologyId"
|
|
|
- class="select-input"
|
|
|
- placeholder="选择物候期"
|
|
|
- >
|
|
|
- <el-option v-for="(item, index) in crop.phenologyOptions" :key="index" :label="item.phenologyName"
|
|
|
- :value="item.phenologyId" />
|
|
|
+ <el-select v-model="region.phenologyId" class="select-input" placeholder="选择物候期">
|
|
|
+ <el-option v-for="(item, index) in crop.phenologyOptions" :key="index"
|
|
|
+ :label="item.phenologyName" :value="item.phenologyId" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -53,13 +46,9 @@
|
|
|
<div class="field-row" v-if="region.phenologyId">
|
|
|
<div class="field-label">{{ getPhenologyLabel(crop, region.phenologyId) }}</div>
|
|
|
<div class="field-value">
|
|
|
- <el-date-picker
|
|
|
- :editable="false"
|
|
|
- style="width: 100%"
|
|
|
- v-model="region.phenologyStartDate"
|
|
|
- class="date-picker"
|
|
|
- type="date"
|
|
|
- placeholder="选择时间" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
|
|
|
+ <el-date-picker :editable="false" style="width: 100%" v-model="region.phenologyStartDate"
|
|
|
+ class="date-picker" type="date" placeholder="选择时间" format="YYYY-MM-DD"
|
|
|
+ value-format="YYYY-MM-DD" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -74,7 +63,8 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <tip-popup v-model:show="showTipPopup" type="success" text="您的农情报告已生成" text2="请查看" buttonText="点击查看" @confirm="handleTipConfirm" />
|
|
|
+ <tip-popup v-model:show="showTipPopup" type="success" text="您的农情报告已生成" text2="请查看" buttonText="点击查看"
|
|
|
+ @confirm="handleTipConfirm" />
|
|
|
|
|
|
|
|
|
<popup class="add-tag-popup" :z-index="2500" round v-model:show="showAddPopup" @update:show="handlePopupClose">
|
|
|
@@ -89,18 +79,12 @@
|
|
|
</popup>
|
|
|
|
|
|
<!-- 勾选区域引导弹窗 -->
|
|
|
- <select-region-popup
|
|
|
- v-model:show="showSelectRegionPopup"
|
|
|
- :image="selectRegionImage"
|
|
|
- :title="selectRegionTitle"
|
|
|
- sub-title="精准匹配农情信息,高效管理分区"
|
|
|
- @confirm="handleGoSelectRegion"
|
|
|
- @skip="handleSkipSelectRegion"
|
|
|
- />
|
|
|
+ <select-region-popup v-model:show="showSelectRegionPopup" :image="selectRegionImage" :title="selectRegionTitle"
|
|
|
+ sub-title="精准匹配农情信息,高效管理分区" @confirm="handleGoSelectRegion" @skip="handleSkipSelectRegion" />
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { ref, nextTick, onActivated } from "vue";
|
|
|
+import { ref, nextTick, onActivated, onDeactivated, onBeforeUnmount } from "vue";
|
|
|
import { ElMessage } from "element-plus";
|
|
|
import { Popup } from "vant";
|
|
|
import customHeader from "@/components/customHeader.vue";
|
|
|
@@ -112,7 +96,15 @@ const router = useRouter();
|
|
|
|
|
|
const route = useRoute();
|
|
|
|
|
|
+const isAddVariety = ref(false);
|
|
|
onActivated(() => {
|
|
|
+ isAddVariety.value = route.query.addVariety ? true : false;
|
|
|
+
|
|
|
+ if (isAddVariety.value) {
|
|
|
+ getFarmTypeIdAndPhenologyList();
|
|
|
+ // console.log("farmData", farmData.value);
|
|
|
+ return;
|
|
|
+ }
|
|
|
const subjectId = route.query.subjectId;
|
|
|
getPhenologyInitOrConfirmStatus(subjectId);
|
|
|
});
|
|
|
@@ -122,7 +114,7 @@ const farmData = ref({
|
|
|
status: "",
|
|
|
})
|
|
|
const getPhenologyInitOrConfirmStatus = async (subjectId) => {
|
|
|
- const {data} = await VE_API.farm_v3.phenologyInitOrConfirmStatus({subjectId});
|
|
|
+ const { data } = await VE_API.farm_v3.phenologyInitOrConfirmStatus({ subjectId });
|
|
|
farmData.value = data;
|
|
|
if (data.status === 'INIT') {
|
|
|
data.farms.forEach(item => {
|
|
|
@@ -137,6 +129,31 @@ const getPhenologyInitOrConfirmStatus = async (subjectId) => {
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
+ // console.log("farmData", farmData.value);
|
|
|
+}
|
|
|
+
|
|
|
+const getFarmTypeIdAndPhenologyList = async () => {
|
|
|
+ const { data } = await VE_API.farm_v3.farmTypeIdAndPhenologyList({ subjectId: route.query.subjectId });
|
|
|
+ // farmData.value.farms.forEach(item => {
|
|
|
+ // item.phenologyOptions = data.phenologyOptions;
|
|
|
+ // item.typeIdItems = data.typeIdItems;
|
|
|
+ // });
|
|
|
+
|
|
|
+
|
|
|
+ farmData.value.farms.push({
|
|
|
+ phenologyOptions: data[0].phenologyOptions,
|
|
|
+ typeIdItems: data[0].typeIdItems,
|
|
|
+ speciesId: data[0].speciesId,
|
|
|
+ farmId: data[0].farmId,
|
|
|
+ speciesName: data[0].speciesName,
|
|
|
+ regions: [
|
|
|
+ {
|
|
|
+ regionId: null,
|
|
|
+ phenologyId: null,
|
|
|
+ phenologyStartDate: "",
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
const addVariety = (crop) => {
|
|
|
@@ -194,7 +211,7 @@ const handleConfirm = async () => {
|
|
|
(r) => r.regionId && r.phenologyId && r.phenologyStartDate
|
|
|
)
|
|
|
.map((r) => {
|
|
|
- if (status === 'INIT') {
|
|
|
+ if (status === 'INIT' || isAddVariety.value) {
|
|
|
const origin =
|
|
|
(farm.typeIdItems || []).find(
|
|
|
(t) => String(t.id) === String(r.regionId)
|
|
|
@@ -214,7 +231,7 @@ const handleConfirm = async () => {
|
|
|
}
|
|
|
})
|
|
|
.filter((item) => {
|
|
|
- if (status === 'INIT') {
|
|
|
+ if (status === 'INIT' || isAddVariety.value) {
|
|
|
return item.id;
|
|
|
} else {
|
|
|
return item.regionId;
|
|
|
@@ -239,7 +256,7 @@ const handleConfirm = async () => {
|
|
|
farmDataList,
|
|
|
};
|
|
|
|
|
|
- const { code, msg } = await VE_API.farm_v3[status === 'INIT' ? 'initFarmData' : 'confirmReproductivePhenology'](params);
|
|
|
+ const { code, msg } = await VE_API.farm_v3[status === 'INIT' || isAddVariety.value ? 'initFarmData' : 'confirmReproductivePhenology'](params);
|
|
|
if (code === 0) {
|
|
|
// 从点击新增品种进来的才需要勾选区域
|
|
|
if (route.query.from === 'addVariety') {
|
|
|
@@ -267,38 +284,38 @@ const handleGoSelectRegion = () => {
|
|
|
router.push("/draw_area?subjectId=" + route.query.subjectId);
|
|
|
};
|
|
|
|
|
|
- // 大物候期转换所需参数// 组装为后端所需的 farmDataList 结构
|
|
|
- // const farmDataList = farmData.value
|
|
|
- // .map((farm) => {
|
|
|
- // const regionPhenologyItems = (farm.regions || [])
|
|
|
- // .filter(
|
|
|
- // (r) => r.regionId && r.phenologyId && r.phenologyStartDate
|
|
|
- // )
|
|
|
- // .map((r) => ({
|
|
|
- // regionId: r.regionId,
|
|
|
- // phenologyId: r.phenologyId,
|
|
|
- // phenologyStartDate: r.phenologyStartDate,
|
|
|
- // }));
|
|
|
-
|
|
|
- // return {
|
|
|
- // farmId: farm.farmId,
|
|
|
- // regionPhenologyItems,
|
|
|
- // };
|
|
|
- // })
|
|
|
- // .filter((item) => item.regionPhenologyItems.length > 0);
|
|
|
-
|
|
|
- // console.log("farmDataList", farmDataList);
|
|
|
-
|
|
|
- // const params = {
|
|
|
- // farmDataList,
|
|
|
- // expertMiniUserId: 81881,
|
|
|
- // }
|
|
|
- // const {code, msg} = await VE_API.farm_v3.confirmReproductivePhenology(params);
|
|
|
- // if(code === 0) {
|
|
|
- // qrCodePopupRef.value.showPopup();
|
|
|
- // } else {
|
|
|
- // ElMessage.error(msg);
|
|
|
- // }
|
|
|
+// 大物候期转换所需参数// 组装为后端所需的 farmDataList 结构
|
|
|
+// const farmDataList = farmData.value
|
|
|
+// .map((farm) => {
|
|
|
+// const regionPhenologyItems = (farm.regions || [])
|
|
|
+// .filter(
|
|
|
+// (r) => r.regionId && r.phenologyId && r.phenologyStartDate
|
|
|
+// )
|
|
|
+// .map((r) => ({
|
|
|
+// regionId: r.regionId,
|
|
|
+// phenologyId: r.phenologyId,
|
|
|
+// phenologyStartDate: r.phenologyStartDate,
|
|
|
+// }));
|
|
|
+
|
|
|
+// return {
|
|
|
+// farmId: farm.farmId,
|
|
|
+// regionPhenologyItems,
|
|
|
+// };
|
|
|
+// })
|
|
|
+// .filter((item) => item.regionPhenologyItems.length > 0);
|
|
|
+
|
|
|
+// console.log("farmDataList", farmDataList);
|
|
|
+
|
|
|
+// const params = {
|
|
|
+// farmDataList,
|
|
|
+// expertMiniUserId: 81881,
|
|
|
+// }
|
|
|
+// const {code, msg} = await VE_API.farm_v3.confirmReproductivePhenology(params);
|
|
|
+// if(code === 0) {
|
|
|
+// qrCodePopupRef.value.showPopup();
|
|
|
+// } else {
|
|
|
+// ElMessage.error(msg);
|
|
|
+// }
|
|
|
|
|
|
const showAddPopup = ref(false);
|
|
|
const newVarietyName = ref("");
|
|
|
@@ -308,12 +325,12 @@ const handleAddVariety = () => {
|
|
|
if (!newVarietyName.value.trim()) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 如果当前有正在添加品种的 variety,则自动选中新增的品种
|
|
|
if (currentVariety.value) {
|
|
|
currentVariety.value.variety = newVarietyName.value;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
newVarietyName.value = "";
|
|
|
showAddPopup.value = false;
|
|
|
currentVariety.value = null;
|
|
|
@@ -324,10 +341,10 @@ const onAddOption = async (region) => {
|
|
|
if (document.activeElement) {
|
|
|
document.activeElement.blur();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 等待下拉菜单关闭后再显示弹窗
|
|
|
await nextTick();
|
|
|
-
|
|
|
+
|
|
|
// 记录当前 region
|
|
|
currentVariety.value = region;
|
|
|
showAddPopup.value = true;
|
|
|
@@ -350,6 +367,30 @@ const handlePopupClose = (show) => {
|
|
|
const handleTipConfirm = () => {
|
|
|
router.push("/growth_report");
|
|
|
}
|
|
|
+
|
|
|
+// 离开页面/失活时清空本页状态,避免返回后数据复用导致异常
|
|
|
+const clearPageState = () => {
|
|
|
+ isAddVariety.value = false;
|
|
|
+ farmData.value = { farms: [], status: "" };
|
|
|
+
|
|
|
+ showTipPopup.value = false;
|
|
|
+ showSelectRegionPopup.value = false;
|
|
|
+ selectRegionImage.value = "";
|
|
|
+ selectRegionTitle.value = "勾选 区域";
|
|
|
+
|
|
|
+ newVarietyName.value = "";
|
|
|
+ currentVariety.value = null;
|
|
|
+ // 清空当前下拉记录,避免返回后仍处在“添加品种”上下文
|
|
|
+ // 如果后续你给 currentVariety.variety 赋值,也会随 currentVariety 置空一起释放
|
|
|
+};
|
|
|
+
|
|
|
+onDeactivated(() => {
|
|
|
+ clearPageState();
|
|
|
+});
|
|
|
+
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ clearPageState();
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
@@ -460,15 +501,18 @@ const handleTipConfirm = () => {
|
|
|
|
|
|
.variety-input {
|
|
|
width: 110px;
|
|
|
+
|
|
|
::v-deep {
|
|
|
.el-select__wrapper {
|
|
|
box-shadow: none;
|
|
|
background-color: rgba(33, 153, 248, 0.1);
|
|
|
// box-shadow: 0 0 0 1px var(--el-border-color) inset;
|
|
|
}
|
|
|
+
|
|
|
.el-select__placeholder {
|
|
|
color: #2199F8;
|
|
|
}
|
|
|
+
|
|
|
.el-select__caret {
|
|
|
color: #2199F8;
|
|
|
}
|
|
|
@@ -546,6 +590,7 @@ const handleTipConfirm = () => {
|
|
|
justify-content: center;
|
|
|
font-size: 24px;
|
|
|
color: #000;
|
|
|
+
|
|
|
.success-icon {
|
|
|
width: 28px;
|
|
|
height: 28px;
|
|
|
@@ -564,7 +609,8 @@ const handleTipConfirm = () => {
|
|
|
font-weight: 400;
|
|
|
margin-bottom: 12px;
|
|
|
color: #000000;
|
|
|
- .name-text{
|
|
|
+
|
|
|
+ .name-text {
|
|
|
font-weight: 500;
|
|
|
color: #2199F8;
|
|
|
padding: 0 2px;
|
|
|
@@ -599,6 +645,7 @@ const handleTipConfirm = () => {
|
|
|
background: #fff;
|
|
|
border: 1px solid #999999;
|
|
|
}
|
|
|
+
|
|
|
.delete {
|
|
|
margin-right: 13px;
|
|
|
color: #FF3D3D;
|