Browse Source

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

lxf 3 days ago
parent
commit
c84b6ee02c

+ 11 - 0
src/components/pageComponents/ArchivesFarmTimeLine.vue

@@ -913,6 +913,17 @@ const getPhenologyTermProgress = (phenologyProgress) => {
 
 // 判断物候期是否应该显示蓝色(已过或当前节气的物候期)
 const shouldShowBlue = (phenology) => {
+    // 优先使用物候期真实日期判断:未来日期不应显示蓝色
+    const phenologyTimeMs =
+        Number(phenology?.startTimeMs) ||
+        safeParseDate(phenology?.startDate || phenology?.beginDate || phenology?.startTime || phenology?.start || phenology?.start_at);
+    if (!Number.isNaN(phenologyTimeMs) && phenologyTimeMs > 0) {
+        const today = new Date();
+        today.setHours(0, 0, 0, 0);
+        return phenologyTimeMs <= today.getTime();
+    }
+
+    // 日期缺失时,回退到 progress 规则(兼容老数据)
     // 获取下一个即将到来的节气(当前节气)的 progress
     const nextTermProgress = getNextTermProgress();
 

+ 2 - 2
src/views/old_mini/agri_record/index.vue

@@ -90,9 +90,9 @@ const getVarietyTabs = async (isShowPopup = true) => {
         });
         varietyTabs.value = res.data || []
         if (varietyTabs.value.length > 0) {
-            handleVarietyClick(varietyTabs.value[activeVariety.value], activeVariety.value)
+            handleVarietyClick(varietyTabs.value[activeVariety.value || 0], activeVariety.value || 0)
             if(isShowPopup) {
-                agriExecutePopupRef.value.showPopup(varietyTabs.value[activeVariety.value].farmId);
+                agriExecutePopupRef.value.showPopup(varietyTabs.value[activeVariety.value || 0].farmId);
             }
         }
     } catch (error) {

+ 6 - 21
src/views/old_mini/monitor/index.vue

@@ -104,9 +104,9 @@ const getVarietyTabs = async (isShowPopup = true) => {
         });
         varietyTabs.value = res.data || []
         if (varietyTabs.value.length > 0) {
-            handleVarietyClick(varietyTabs.value[activeVariety.value], activeVariety.value)
+            handleVarietyClick(varietyTabs.value[activeVariety.value || 0], activeVariety.value || 0)
             if(isShowPopup) {
-                agriExecutePopupRef.value.showPopup(varietyTabs.value[activeVariety.value].farmId);
+                agriExecutePopupRef.value.showPopup(varietyTabs.value[activeVariety.value || 0].farmId);
             }
         }
     } catch (error) {
@@ -126,6 +126,9 @@ const handleVarietyClick = (tab, index) => {
     if (tab.lastViewTime == null) {
         titlePopup.value = `勾选 ${tab.regionName} 区域`;
         showSelectRegionPopup.value = true;
+        VE_API.basic_farm.updateLastViewTime({
+            regionId: tab.regionId,
+        })
     }
 };
 
@@ -138,12 +141,7 @@ const handleAddVariety = () => {
 };
 
 const handleSkipSelectRegion = () => {
-    VE_API.basic_farm.updateLastViewTime({
-        regionId: currentVariety.value.regionId,
-    }).then(() => {
-        showSelectRegionPopup.value = false;
-        getVarietyTabs(false);
-    });
+    showSelectRegionPopup.value = false;
 };
 
 const handleGoSelectRegion = () => {
@@ -191,24 +189,11 @@ const handleLockClick = () => {
     // });
 }
 
-// 实时播报数据
-const broadcastList = ref([]);
-const finished = ref(false);
-const currentPage = ref(1);
-
-// 播报相关事件
-const isSpeaking = ref(false);
-const speechSynthesis = window.speechSynthesis;
-
 
 // 组件卸载时停止语音播放
 onDeactivated(() => {
     showFarmPopup.value = false;
     isDefaultFarm.value = false;
-    if (isSpeaking.value) {
-        speechSynthesis.cancel();
-        isSpeaking.value = false;
-    }
 });
 
 const isExpanded = ref(false);

+ 8 - 1
src/views/old_mini/monitor/subPages/darwArea.vue

@@ -105,6 +105,11 @@ async function fetchFarmSubjectDetail() {
 
 onActivated(async () => {
     activeVariety.value = 0;
+    // keep-alive 场景下再次进入前先销毁旧地图实例,避免重复 init 导致图层状态错位
+    if (drawRegionMap.kmap) {
+        drawRegionMap.abortOngoingDrawSketch?.();
+        drawRegionMap.destroyMap?.();
+    }
 
     type.value = route.query.type;
     const editable = !viewOnly.value;
@@ -133,7 +138,9 @@ onActivated(async () => {
 
 onDeactivated(() => {
     activeVariety.value = 0;
-    drawRegionMap.clearLayer()
+    // 离开页面时中止未完成绘制并销毁地图,确保下次进入是干净实例
+    drawRegionMap.abortOngoingDrawSketch?.();
+    drawRegionMap.destroyMap?.();
 })
 const goBack = () => {
     // drawRegionMap.clearLayer()