Преглед изворни кода

Merge branch 'farmer' of http://www.sysuimars.cn:3000/feiniao/feiniao-farm-h5 into farmer

lxf пре 19 часа
родитељ
комит
f987c7cd04

+ 1 - 0
src/views/old_mini/interactionList/drawRegion.vue

@@ -134,6 +134,7 @@ const deletePolygon = () => {
     ).then(() => {
         drawRegionMap.deleteCurrentPolygon();
         ElMessage.success("地块已删除");
+        sessionStorage.removeItem("drawRegionPolygonData");
     }).catch(() => {
         // 用户取消删除,不做任何操作
     });

+ 70 - 14
src/views/old_mini/interactionList/drawRegion2.vue

@@ -23,7 +23,7 @@
                 <div class="edit-map-footer-btn" v-if="!viewOnly">
                     <div class="btn-delete" @click="deletePolygon">删除地块</div>
                     <!-- <div class="btn-cancel" @click="goBack">取消</div> -->
-                    <div class="btn-confirm" @click="confirm">确认</div>
+                    <div class="btn-confirm" @click="confirm">确认区域</div>
                 </div>
             </div>
         </div>
@@ -173,26 +173,27 @@ const regionTypeTabs = ref([]);
 const activeRegionType = ref("variety");
 const regionInfo = ref([]);
 async function fetchRegionInfo() {
-    const { data } = await VE_API.basic_farm.fetchRegionInfo({ subjectId: localStorage.getItem('selectedFarmId') });
+    const subjectId = route.query.subjectId || localStorage.getItem('selectedFarmId');
+    const { data } = await VE_API.basic_farm.fetchRegionInfo({ subjectId });
     if (data && data.length > 0) {
         regionInfo.value = data[0] || [];
         regionTypeTabs.value = regionInfo.value.problemZoneList || [];
         regionTypeTabs.value.unshift({ name: "品种区", code: "variety" });
-        // if (data[0]?.regionList?.length) {
-        //     // if (!hasAppliedInitialVariety.value && route.query?.varietyId) {
-        //         // activeVariety.value = resolveInitialVarietyIndex(data[0]?.regionList);
-        //     //     hasAppliedInitialVariety.value = true;
-        //     // }
-
-        //     // point.value = data[0].point;
-        //     varietyTabs.value = regionInfo.value.regionList || [];
-        // }
+        varietyTabs.value = regionInfo.value.regionList || [];
+        activeVariety.value = 0;
 
         if (route.query.firstAct) {
             activeRegionType.value = route.query.firstAct;
-            const index = regionTypeTabs.value.findIndex(item => item.code === route.query.firstAct);
-            if (index !== -1) {
-                varietyTabs.value = data[0].problemZoneList[index].children || [];
+            if (route.query.firstAct === "variety") {
+                varietyTabs.value = regionInfo.value.regionList || [];
+                activeVariety.value = 0;
+                return;
+            }
+            const matchedGroup = (regionInfo.value.problemZoneList || []).find(
+                (item) => String(item?.code) === String(route.query.firstAct)
+            );
+            if (matchedGroup) {
+                varietyTabs.value = matchedGroup.children || [];
                 activeVariety.value = 0;
             }
         }
@@ -412,7 +413,62 @@ const deletePolygon = () => {
 
 const saveAndBack = () => {
     const polygonData = drawRegionMap.getAreaGeometry();
+    const subjectId = route.query.subjectId || localStorage.getItem("selectedFarmId") || "";
+    const geometryArr = Array.isArray(polygonData?.geometryArr)
+        ? polygonData.geometryArr
+            .map((g) => (g == null ? "" : String(g).trim()))
+            .filter((g) => g.length > 10)
+        : [];
+    const geom = geometryArr[0] || "";
+
+    const currentGroup = (regionTypeTabs.value || []).find(
+        (item) => String(item?.code) === String(activeRegionType.value)
+    );
+    const currentTab = (varietyTabs.value || [])[activeVariety.value] || {};
+
+    const regionList =
+        activeRegionType.value === "variety" && geom
+            ? [
+                {
+                    regionId: currentTab.regionId ?? currentTab.id ?? "",
+                    typeId: currentTab.typeId ?? "",
+                    regionName: currentTab.regionName ?? currentTab.problemZoneTypeName ?? "",
+                    geom,
+                },
+            ]
+            : [];
+
+    const problemZoneList =
+        activeRegionType.value !== "variety" && geom
+            ? [
+                {
+                    name: currentGroup?.name ?? "",
+                    code: currentGroup?.code ?? activeRegionType.value,
+                    children: [
+                        {
+                            farmSubjectId: subjectId,
+                            handleStatus: 1,
+                            createTime: new Date().toISOString(),
+                            problemZoneTypeId: currentTab.problemZoneTypeId ?? currentTab.typeId ?? "",
+                            problemZoneTypeName: currentTab.problemZoneTypeName ?? currentTab.regionName ?? "",
+                            parentName: currentGroup?.name ?? "",
+                            parentCode: currentGroup?.code ?? activeRegionType.value,
+                            geomItems: [{ geomWkt: geom, remark: "" }],
+                        },
+                    ],
+                },
+            ]
+            : [];
+
+    const params = {
+        subjectId,
+        regionList,
+        problemZoneList,
+    };
+
     sessionStorage.setItem("drawRegionPolygonData", JSON.stringify(polygonData));
+    console.log(params);
+    sessionStorage.setItem("drawRegionSubmitParams", JSON.stringify(params));
     if (selectedAbnormalType.value) {
         sessionStorage.setItem("drawRegionAbnormalType", selectedAbnormalType.value);
     } else {

+ 38 - 11
src/views/old_mini/interactionList/index.vue

@@ -209,7 +209,7 @@
         :start-index="exampleStartIndex" :show-title-and-tips="exampleShowTitleAndTips" />
     <!-- 照片上传进度 -->
 
-    <popup v-model:show="showUploadProgressPopup" round class="upload-progress-popup">
+    <popup v-model:show="showUploadProgressPopup" round :close-on-click-overlay="false" class="upload-progress-popup">
         <div class="upload-progress-title">
             <span>照片上传进度</span>
             <el-progress class="upload-progress" :percentage="uploadPercentage" :stroke-width="10" :format="format" />
@@ -243,8 +243,11 @@
                 <div class="region-map-text">点击勾画异常发生区域</div>
             </div>
         </template>
-        <div class="confirm-btn" :class="{ 'confirm-btn-loading': confirmUploadLoading }" @click="handleConfirmUpload">
-            {{ confirmUploadLoading ? '上传中...' : '确认上传' }}
+        <div class="upload-action-btns">
+            <div class="cancel-btn" @click="handleCancelUploadPopup">取消</div>
+            <div class="confirm-btn" :class="{ 'confirm-btn-loading': confirmUploadLoading }" @click="handleConfirmUpload">
+                {{ confirmUploadLoading ? '上传中...' : '确认上传' }}
+            </div>
         </div>
     </popup>
 
@@ -691,6 +694,10 @@ const handleConfirm = async (item, isConfirm) => {
             sessionStorage.removeItem("drawRegionPolygonData");
             sessionStorage.removeItem("drawRegionInteractionId");
             needRefresh = true;
+            if (sessionStorage.getItem("drawRegionSubmitParams")) {
+                const params = JSON.parse(sessionStorage.getItem("drawRegionSubmitParams"));
+                VE_API.basic_farm.ediRegionZone(params);
+            }
         } else {
             ElMessage.error(msg || "上传失败");
         }
@@ -761,13 +768,17 @@ const handleConfirmUpload = async () => {
     }
 };
 
+const handleCancelUploadPopup = () => {
+    showUploadProgressPopup.value = false;
+};
+
 // 切换展开/收起
 const toggleExpand = (item) => {
     item.expanded = !item.expanded;
 };
 
 const handleViewRegion = (item) => {
-    router.push(`/draw_region?viewOnly=1&rangeWkt=${encodeURIComponent(item.rangeWkt)}&updatedTime=${item.updatedTime.slice(0, 10)}`);
+    router.push(`/draw_region?viewOnly=1`);
 }
 
 const showClose = ref(false);
@@ -1424,14 +1435,30 @@ const handleSubmitAll = () => {
         }
     }
 
-    .confirm-btn {
-        background: #2199f8;
-        color: #ffffff;
-        border-radius: 4px;
-        padding: 8px;
-        text-align: center;
-        font-size: 16px;
+    .upload-action-btns {
+        display: flex;
+        gap: 10px;
         margin-top: 16px;
+
+        .cancel-btn,
+        .confirm-btn {
+            flex: 1;
+            border-radius: 4px;
+            padding: 8px;
+            text-align: center;
+            font-size: 16px;
+        }
+
+        .cancel-btn {
+            border: 1px solid #dcdfe6;
+            color: #606266;
+            background: #ffffff;
+        }
+
+        .confirm-btn {
+            background: #2199f8;
+            color: #ffffff;
+        }
     }
 
     .confirm-btn-loading {