Просмотр исходного кода

feat:对接农事记录和作物档案接口修改

wangsisi 1 неделя назад
Родитель
Сommit
76ed2133d5

+ 7 - 7
src/components/weatherInfo.vue

@@ -96,7 +96,7 @@ const handleCommand = ({id, name}) => {
     // 保存用户选择的农场到 localStorage
     localStorage.setItem('selectedFarmId', id);
     localStorage.setItem('selectedFarmName', name);
-    localStorage.setItem('selectedFarmPoint', selectedFarm.point);
+    localStorage.setItem('selectedFarmPoint', selectedFarm.wkt);
     getLocationName();
     getWeatherData();
     emit('changeGarden',{id, name});
@@ -138,7 +138,7 @@ async function setFarmByGardenId(gardenIdValue) {
                     // 保存到 localStorage
                     localStorage.setItem('selectedFarmId', farmId.value);
                     localStorage.setItem('selectedFarmName', farmName.value);
-                    localStorage.setItem('selectedFarmPoint', targetFarm.point);
+                    localStorage.setItem('selectedFarmPoint', targetFarm.wkt);
 
                     getLocationName();
                     getWeatherData();
@@ -232,19 +232,19 @@ function selectDefaultFarm(data) {
         farmName.value = defaultFarm.name;
         farmId.value = defaultFarm.id;
         isDefaultFarm.value = true;
-        localStorage.setItem('selectedFarmPoint', defaultFarm.point);
+        localStorage.setItem('selectedFarmPoint', defaultFarm.wkt);
     } else {
         // 如果没有默认农场,选择第一个
         farmName.value = data[0].name;
         farmId.value = data[0].id;
         isDefaultFarm.value = data[0].defaultOption || false;
-        localStorage.setItem('selectedFarmPoint', data[0].point);
+        localStorage.setItem('selectedFarmPoint', data[0].wkt);
     }
 
     // 保存到 localStorage
     localStorage.setItem('selectedFarmId', farmId.value);
     localStorage.setItem('selectedFarmName', farmName.value);
-    localStorage.setItem('selectedFarmPoint', data[0].point);
+    localStorage.setItem('selectedFarmPoint', data[0].wkt);
     getLocationName();
     getWeatherData();
 }
@@ -283,9 +283,9 @@ function getLocationName() {
         };
         VE_API.old_mini_map.location(params).then(({ result }) => {
             // locationVal.value = result.formatted_addresses.recommend;
-            locationName.value = result.address_component
+            locationName.value = result?.address_component
                 ? result.address_component.city + result.address_component.district
-                : result.address + "";
+                : result?.address + "";
         });
 }
 

+ 68 - 15
src/views/old_mini/agri_record/index.vue

@@ -18,8 +18,20 @@
                 <div class="line-title" @click="handleFarmInfoClick">农事记录</div>
                 <!-- <el-date-picker style="width: 110px" v-model="date" type="year" placeholder="全部日期" /> -->
             </div>
+            <!-- 品种选择 -->
+            <div class="variety-tabs" v-if="varietyTabs.length > 0">
+                <div
+                    v-for="(v, index) in varietyTabs"
+                    :key="index"
+                    class="variety-tab"
+                    :class="{ 'variety-tab--active': activeVariety === index }"
+                    @click="handleVarietyClick(v,index)"
+                >
+                    {{ v.regionName }}
+                </div>
+            </div>
             <div class="archives-time-line-content">
-                <archives-farm-time-line :farmId="gardenId" pageType="agri_record"></archives-farm-time-line>
+                <archives-farm-time-line :farmId="farmIdData" pageType="agri_record"></archives-farm-time-line>
             </div>
         </div>
     </div>
@@ -60,6 +72,33 @@ const handleFarmInfoClick = () =>{
     });
 }
 
+// 品种选择(作物档案内)- 根据主体ID动态获取分区列表
+const varietyTabs = ref([]);
+const activeVariety = ref(0);
+
+const getVarietyTabs = async () => {
+    if (!gardenId.value) {
+        return;
+    }
+    try {
+        const res = await VE_API.monitor.listRegionsBySubjectId({
+            subjectId: gardenId.value,
+        });
+        varietyTabs.value = res.data || []
+        if(varietyTabs.value.length > 0) {
+            handleVarietyClick(varietyTabs.value[0],0)
+        }
+    } catch (error) {
+        console.error("获取主体分区列表失败:", error);
+    }
+};
+
+const farmIdData= ref(null);
+const handleVarietyClick = (tab,index) => {
+    activeVariety.value = index;
+    farmIdData.value = tab.farmId;
+};
+
 const showFarmPopup = ref(false); // 农场领取成功弹窗
 const date = ref(new Date());
 
@@ -302,6 +341,7 @@ onMounted(() => {
         finished.value = false;
         broadcastList.value = [];
         getStayCount();
+        getVarietyTabs();
         // 不在这里手动加载,让 List 组件的 immediate-check 自动触发首次加载
     }
 });
@@ -316,20 +356,8 @@ const changeGarden = ({ id }) => {
     broadcastList.value = [];
     getStayCount();
     getBroadcastList(1, false);
+    getVarietyTabs();
 };
-
-function handlePage(url) {
-    const query = {
-        farmId: gardenId.value,
-    };
-    if (url === "/message_list") {
-        query.from = "monitor";
-    }
-    router.push({
-        path: url,
-        query: query,
-    });
-}
 </script>
 
 <style scoped lang="scss">
@@ -378,9 +406,34 @@ function handlePage(url) {
                 }
             }
         }
+        .variety-tabs {
+            display: flex;
+            align-items: center;
+            gap: 8px;
+            margin: 10px 0;
+            overflow-x: auto;
+            overflow-y: hidden;
+            flex-wrap: nowrap;
+            -webkit-overflow-scrolling: touch;
+
+            .variety-tab {
+                padding: 4px 12px;
+                border-radius: 2px;
+                color: #767676;
+                background: #fff;
+                white-space: nowrap;
+                flex-shrink: 0;
+            }
+
+            .variety-tab--active {
+                background: #2199F8;
+                color: #ffffff;
+            }
+        }
+
         .archives-time-line-content {
             margin-top: 10px;
-            height: calc(100% - 32px);
+            height: calc(100% - 70px);
             background: #fff;
             border-radius: 8px;
             padding: 10px;

+ 3 - 2
src/views/old_mini/interactionList/index.vue

@@ -464,7 +464,7 @@ const showExample = (item, index, options = {}) => {
 const loadData = async () => {
     loading.value = true;
     try {
-        const { data } = await VE_API.home.listTriggeredByFarm({ farmId: localStorage.getItem("selectedFarmId") })
+        const { data } = await VE_API.home.listTriggeredByFarm({ farmId: localStorage.getItem("selectedFarmId"),interactionTypeId:'' })
         listData.value = data.map(item => {
             // question 按 || 切割成数组,用于循环渲染
             const questionStr = item.question != null ? String(item.question) : '';
@@ -527,7 +527,8 @@ const handleConfirm = async (item, isConfirm) => {
         rangeWkt: sessionStorage.getItem("drawRegionPolygonData") || '',
         interactionId: item.id,
         replyText: item.replyText,
-        answerValues: item.answerValues
+        answerValues: item.answerValues,
+        regionId:''
     }
     await VE_API.home.uploadAnswerData(parmas);
     const { code, msg } = await VE_API.home.uploadAnswer(parmas);

+ 16 - 119
src/views/old_mini/monitor/index.vue

@@ -15,13 +15,13 @@
             <!-- 品种选择 -->
             <div class="variety-tabs" v-if="varietyTabs.length > 0">
                 <div
-                    v-for="v in varietyTabs"
-                    :key="v.key"
+                    v-for="(v, index) in varietyTabs"
+                    :key="index"
                     class="variety-tab"
-                    :class="{ 'variety-tab--active': activeVariety === v.key }"
-                    @click="activeVariety = v.key"
+                    :class="{ 'variety-tab--active': activeVariety === index }"
+                    @click="handleVarietyClick(v,index)"
                 >
-                    {{ v.label }}
+                    {{ v.regionName }}
                 </div>
             </div>
             <div class="archives-time-line-content">
@@ -38,7 +38,7 @@
                     <img src="@/assets/img/monitor/report-icon.png" alt="" class="report-icon" />
                 </div>
                 <div class="time-line" :class="{ 'no-report': !hasReport }">
-                    <archives-farm-time-line :farmId="gardenId"></archives-farm-time-line>
+                    <archives-farm-time-line :farmId="farmIdData"></archives-farm-time-line>
                 </div>
             </div>
         </div>
@@ -67,7 +67,7 @@ import agriExecutePopup from "@/components/popup/agriExecutePopup.vue";
 
 // 品种选择(作物档案内)- 根据主体ID动态获取分区列表
 const varietyTabs = ref([]);
-const activeVariety = ref(null);
+const activeVariety = ref(0);
 
 const getVarietyTabs = async () => {
     if (!gardenId.value) {
@@ -77,22 +77,21 @@ const getVarietyTabs = async () => {
         const res = await VE_API.monitor.listRegionsBySubjectId({
             subjectId: gardenId.value,
         });
-        const list = res.data || [];
-        varietyTabs.value = list.map((item) => ({
-            key: item.id || item.regionId,
-            label: item.regionName || item.name,
-            raw: item,
-        }));
-        if (varietyTabs.value.length) {
-            activeVariety.value = varietyTabs.value[0].key;
-        } else {
-            activeVariety.value = null;
+        varietyTabs.value = res.data || []
+        if(varietyTabs.value.length > 0) {
+            handleVarietyClick(varietyTabs.value[0],0)
         }
     } catch (error) {
         console.error("获取主体分区列表失败:", error);
     }
 };
 
+const farmIdData= ref(null);
+const handleVarietyClick = (tab,index) => {
+    activeVariety.value = index;
+    farmIdData.value = tab.farmId;
+};
+
 const handleJump = () =>{
     router.push('/create_farm?type=farmer&expertMiniUserId=81881&isReload=true')
 }
@@ -124,7 +123,6 @@ const checkHasUnrepliedTriggeredInteraction = async () => {
 };
 
 const showFarmPopup = ref(false); // 农场领取成功弹窗
-const date = ref(new Date());
 
 const defaultGardenId = ref(null);
 const isHeaderShow = ref(false);
@@ -144,24 +142,6 @@ onActivated(() => {
     getReport();
 });
 
-const receiveFarm = (json) => {
-    VE_API.monitor
-        .receiveFarm({
-            agriculturalStoreId: json.agriculturalStoreId,
-            farmId: json.farmId,
-        })
-        .then((res) => {
-            if (res.code === 0) {
-                showFarmPopup.value = true;
-                defaultGardenId.value = json.farmId;
-            } else {
-                ElMessage.warning(res.msg);
-            }
-            // 清空路由参数
-            router.replace({ path: route.path });
-        });
-};
-
 const store = useStore();
 const tabBarHeight = computed(() => store.state.home.tabBarHeight);
 const router = useRouter();
@@ -262,80 +242,10 @@ const getBroadcastList = async (page = 1, isLoadMore = false) => {
     }
 };
 
-// 滚动加载更多
-const onLoad = async () => {
-    if (finished.value || loading.value) return;
-
-    // 判断是否是首次加载(页码为1)
-    const isLoadMore = currentPage.value > 1;
-    const pageToLoad = currentPage.value;
-
-    // 加载数据(页码会在 getBroadcastList 成功后自动更新)
-    await getBroadcastList(pageToLoad, isLoadMore);
-};
-
-// 卡片点击事件
-const handleCardClick = (card) => {
-    const params = {
-        farmId: gardenId.value,
-    };
-    router.push({
-        path: card.route,
-        query: { ...params, miniJson: JSON.stringify(params) },
-    });
-};
-
 // 播报相关事件
 const isSpeaking = ref(false);
 const speechSynthesis = window.speechSynthesis;
 
-const handleBroadcast = () => {
-    if (isSpeaking.value) {
-        // 如果正在播放,则停止
-        speechSynthesis.cancel();
-        isSpeaking.value = false;
-        return;
-    }
-
-    // 构建播报文本
-    let broadcastText = "实时播报:";
-
-    if (broadcastList.value.length === 0) {
-        broadcastText += "暂无更多播报";
-    } else {
-        broadcastList.value.forEach((item, index) => {
-            broadcastText += `${index + 1}、${item.title}。${item.content}。`;
-        });
-    }
-
-    // 创建语音合成对象
-    const utterance = new SpeechSynthesisUtterance(broadcastText);
-
-    // 设置语音参数
-    utterance.lang = "zh-CN";
-    utterance.rate = 0.8; // 语速
-    utterance.pitch = 1; // 音调
-    utterance.volume = 1; // 音量
-
-    // 播放开始事件
-    utterance.onstart = () => {
-        isSpeaking.value = true;
-    };
-
-    // 播放结束事件
-    utterance.onend = () => {
-        isSpeaking.value = false;
-    };
-
-    // 播放错误事件
-    utterance.onerror = (event) => {
-        isSpeaking.value = false;
-        console.error("播报错误:", event.error);
-    };
-
-    // 开始播报
-    speechSynthesis.speak(utterance);
-};
 
 // 组件卸载时停止语音播放
 onDeactivated(() => {
@@ -386,19 +296,6 @@ const changeGarden = ({ id }) => {
     getVarietyTabs();
 };
 
-function handlePage(url) {
-    const query = {
-        farmId: gardenId.value,
-    };
-    if (url === "/message_list") {
-        query.from = "monitor";
-    }
-    router.push({
-        path: url,
-        query: query,
-    });
-}
-
 function handleReportClick() {
     router.push({
         path: "/growth_report",