Ver código fonte

feat:对接首页农情互动接口

wangsisi 4 dias atrás
pai
commit
3e1ab75f75

+ 6 - 1
src/api/modules/home.js

@@ -82,5 +82,10 @@ module.exports = {
     listUnansweredFarms:{
         url: config.base_dev_url + "work_code/phenology/quest/listUnansweredFarms/{page}/{limit}",
         type: "get",
-    }
+    },
+    //查询未来农事预警
+    listFutureFarmWorkWarning:{
+        url: config.base_dev_url + "container_farm_work_arrange/futureFarmWorkWarning",
+        type: "get",
+    },
 }

+ 39 - 21
src/views/old_mini/home/components/AgriculturalDynamics.vue

@@ -19,6 +19,8 @@
         <div class="title">农情互动</div>
         <!-- 内容区域 -->
         <div class="agricultural-list">
+        <div v-if="!unansweredList.length" class="empty-block">暂无数据</div>
+        <template v-else>
             <div class="agricultural-item" v-for="(item, index) in unansweredList" :key="index">
                 <!-- 头部区域 -->
                 <div class="header-section">
@@ -35,24 +37,25 @@
                 <div class="warning-block" v-html="item.latestPhenologyProgressBroadcast?.content"></div>
 
                 <div class="timeline">
-                    <div class="timeline-item" v-for="item in timelineList" :key="item.id">
+                    <div class="timeline-item" v-for="timelineItem in item.timelineList" :key="timelineItem.id">
                         <div class="timeline-left">
                             <div class="dot"></div>
                             <div class="line"></div>
                         </div>
                         <div class="timeline-right">
                             <div class="date">
-                                预计{{ item.date }}天后触发<span class="work-name">{{ item.workName }}</span>
+                                预计{{ timelineItem.daysUntilTrigger }}天后触发<span class="work-name">{{ timelineItem.farmWorkName }}</span>
                             </div>
                             <div class="text">
-                                预计报价<span class="price">{{ item.price }}元</span>
+                                预计报价<span class="price">{{ timelineItem.estimatedCost }}元</span>
                                 <span class="action-detail">查看报价单</span>
                             </div>
                         </div>
-                        <div class="timeline-action" @click="handleTimelineAction(item)">转入农事任务</div>
+                        <div class="timeline-action" @click="handleTimelineAction(timelineItem)">转入农事任务</div>
                     </div>
                 </div>
             </div>
+        </template>
         </div>
     </div>
     <offer-popup ref="offerPopupRef"></offer-popup>
@@ -68,19 +71,6 @@ const taskList = ref([
     { id: 2, title: "梢期杀虫", executionTime: "2025.05.06", status: "pending" },
 ]);
 
-const timelineList = ref([
-    {
-        date: "3",
-        workName: "梢期杀虫",
-        price: "1258",
-    },
-    // {
-    //     date: "5",
-    //     workName: "梢期营养",
-    //     price: "1758",
-    // },
-]);
-
 const offerPopupRef = ref(null);
 const handleTaskAction = (item) => {
     const data = {
@@ -123,15 +113,31 @@ onMounted(() => {
     getUnansweredFarms();
 });
 
+//农情互动的农场列表接口(分页)
 const unansweredList = ref([]);
-const getUnansweredFarms = () => {
+const getUnansweredFarms = async () => {
     const params = {
         page: 0,
         limit: 3,
     };
-    VE_API.home.listUnansweredFarms(params).then((res) => {
-        unansweredList.value = res.data || [];
-    });
+    const res = await VE_API.home.listUnansweredFarms(params);
+    unansweredList.value = (res.data || []).map(item => ({
+        ...item,
+        timelineList: []
+    }));
+    
+    // 串行请求,一个完成后再请求下一个
+    if(unansweredList.value.length){
+        for(let i = 0; i < unansweredList.value.length; i++){
+            await getFutureFarmWorkWarning(unansweredList.value[i]);
+        }
+    }
+};
+
+//查询未来农事预警
+const getFutureFarmWorkWarning = async (item) => {
+    const res = await VE_API.home.listFutureFarmWorkWarning({farmId: item.farmId});
+    item.timelineList = res.data || [];
 };
 </script>
 
@@ -212,6 +218,18 @@ const getUnansweredFarms = () => {
     }
 
     .agricultural-list {
+        .empty-block {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            height: 120px;
+            color: #a0a0a0;
+            font-size: 14px;
+            background-color: #ffffff;
+            border-radius: 8px;
+            margin-top: 8px;
+        }
+
         .agricultural-item {
             background-color: #ffffff;
             border-radius: 8px;

+ 12 - 17
src/views/old_mini/home/index.vue

@@ -93,7 +93,7 @@ const monitorCards = ref({
     left: {
         title: "农情采集",
         content: "精准监测  科学决策",
-        route: "/monitor",
+        route: "/pest",
     },
     right: [
         {
@@ -118,22 +118,17 @@ const handleCardClick = (card) => {
         }
     }
     if (card.route === "/pest") {
-        // ElMessage.warning("该功能正在升级中,敬请期待");
-        // if (curRole == 2) {
-        //     ElMessage.warning("该功能正在升级中,敬请期待");
-        // } else {
-            const dropdownGardenItem = ref({
-                organId: 766,
-                periodId: 1,
-                wktVal: "wktVal",
-                address: "address",
-                district: "district",
-                name: "荔博园",
-            });
-            wx.miniProgram.navigateTo({
-                url: `/pages/subPages/new_recognize/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
-            });
-        // }
+        const dropdownGardenItem = ref({
+            organId: 766,
+            periodId: 1,
+            wktVal: "wktVal",
+            address: "address",
+            district: "district",
+            name: "荔博园",
+        });
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/new_recognize/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
+        });
     } else {
         if (card.route === "/chat_frame") {
             router.push("/agri_services?active=1");