Prechádzať zdrojové kódy

feat:接口对接

wangsisi 2 týždňov pred
rodič
commit
7e4df2f71b

+ 10 - 0
src/api/modules/monitor.js

@@ -95,4 +95,14 @@ module.exports = {
         url: config.base_new_url + "find_farm_work",
         type: "get",
     },
+    //获取物候节点信息
+    getFindPhenologyInfo: {
+        url: config.base_new_url + "find_phenology_info",
+        type: "get",
+    },
+    //校准物候期
+    farmPhenologyAdjust: {
+        url: config.base_new_url + "farm_phenology_adjust",
+        type: "post",
+    }
 };

BIN
src/assets/img/common/fq-1.png


BIN
src/assets/img/common/fq-2.png


BIN
src/assets/img/common/jf-1.png


BIN
src/assets/img/common/jf-2.png


BIN
src/assets/img/common/yz-1.png


BIN
src/assets/img/common/yz-2.png


+ 43 - 33
src/components/pageComponents/ArchivesFarmTimeLine.vue

@@ -35,18 +35,18 @@
                                                 </el-icon>
                                             </div>
                                         </div>
-                                        <div class="farm-info" v-if="fw.work_status === 0">
+                                        <div class="farm-info" v-if="fw.work_status === 0 || fw.work_status === 1">
                                             <div class="info-left">
-                                                <div>04/18 出现某某胁迫几级</div>
-                                                <div>04/20 出现某某胁迫等级升级</div>
+                                                <div>{{ fw.work_reason }}</div>
                                             </div>
-                                            <div class="info-right">病虫害是否出现?</div>
+                                            <div class="info-right">{{ fw.interaction_issue }}</div>
                                         </div>
-                                        <div class="title-text van-ellipsis">{{ fw.title }}</div>
+                                        <div class="title-text van-ellipsis">{{ fw.work_time }} ({{ fw.crop_type_name
+                                            }})</div>
                                     </div>
                                     <div class="status-right" :style="statusColorObj[fw.work_status]"
                                         v-if="fw.work_status !== 3 && fw.work_status !== 5">{{
-                                        workStatusObj[fw.work_status] }}</div>
+                                            workStatusObj[fw.work_status] }}</div>
                                 </div>
                             </div>
                         </div>
@@ -192,6 +192,7 @@ const getArrangeStatusClass = (fw) => {
     if (t == 0 || t == 1) return "status-orange";
     if (t == 2) return "status-normal";
     if (t == 4) return "status-green-info";
+    if (t == 6) return "status-normal-farm";
     return "future-card";
 };
 
@@ -249,13 +250,10 @@ const normalizeFarmWorksPhenologyList = (data) => {
             const title = String(w.work_name ?? "").trim();
             const iso = workTimeToCreateTimeIso(w.work_time);
             return {
-                id: w.id,
-                phenology_code: w.phenology_code,
+                ...w,
                 createTime: iso,
                 title: title || "农事",
                 archiveType: mapWorkStatusToArchiveType(w.work_status),
-                work_status: w.work_status,
-                work_time: w.work_time,
             };
         });
         const timesMs = farmWorkArrangeList
@@ -313,8 +311,8 @@ const getFarmWorkPlan = () => {
     isEmpty.value = false;
 
     const params = {
-        farm_id: 195,
-        crop_variety: 1,
+        farm_id: props.farmId,
+        crop_variety: JSON.parse(localStorage.getItem("selectedFarmData")).farm_variety,
     };
     VE_API.monitor.getPhenologyList(params)
         .then(({ data, code }) => {
@@ -358,33 +356,41 @@ watch(
 const handleStatusDetail = (fw) => {
     saveTimelineScrollTop();
     emits('card-click');
-    if (fw?.archiveType === 2) {
-        return;
-    }
-    if (fw?.archiveType === 6) {
+    if (fw?.work_status === 4) {
         router.push({
             path: "/work_detail",
             query: {
-                miniJson: JSON.stringify({
-                    paramsPage: JSON.stringify({
-                        farmId: 98570,
-                        farmWorkLibId: '832268348690534411',
-                        recordId: "832268363366404096",
-                        reproductiveId: 149,
-                    }),
-                }),
-            },
-        });
-    } else {
-        router.push({
-            path: "/agricultural_detail",
-            query: {
-                id: fw?.id,
-                title: archiveTypeObj[fw?.archiveType],
-                content: fw?.title,
+                title: fw?.title,
             },
         });
     }
+    // if (fw?.archiveType === 2) {
+    //     return;
+    // }
+    // if (fw?.archiveType === 6) {
+    //     router.push({
+    //         path: "/work_detail",
+    //         query: {
+    //             miniJson: JSON.stringify({
+    //                 paramsPage: JSON.stringify({
+    //                     farmId: 98570,
+    //                     farmWorkLibId: '832268348690534411',
+    //                     recordId: "832268363366404096",
+    //                     reproductiveId: 149,
+    //                 }),
+    //             }),
+    //         },
+    //     });
+    // } else {
+    //     router.push({
+    //         path: "/agricultural_detail",
+    //         query: {
+    //             id: fw?.id,
+    //             title: archiveTypeObj[fw?.archiveType],
+    //             content: fw?.title,
+    //         },
+    //     });
+    // }
 };
 
 // 格式化日期为 MM-DD 格式
@@ -688,6 +694,10 @@ onBeforeRouteLeave(() => {
                     @include arrange-card-status(#FF953D, null, #FF953D, #fff, #000);
                 }
 
+                .arrange-card.status-normal-farm {
+                    @include arrange-card-status(#2199F8, #E9F5FF, #2199F8, rgba(33, 153, 248, 0.1), rgba(0, 0, 0, 0.4));
+                }
+
                 // 未激活等:灰色描边卡片
                 .arrange-card.future-card {
                     @include arrange-card-status(rgba(187, 187, 187, 0.6), null, rgba(187, 187, 187, 0.6), #fff, rgba(187, 187, 187, 0.6));

+ 4 - 4
src/views/old_mini/agri_file/index.vue

@@ -8,10 +8,10 @@
             :isGarden="true" :gardenId="defaultGardenId">
             <template #types-content>
                 <div class="type-tabs">
-                    <div class="type-item" @click="changeType('荔枝')" :class="{ 'type-item-active': activeType === '荔枝' }">荔枝</div>
                     <div class="type-item" @click="changeType('水稻')" :class="{ 'type-item-active': activeType === '水稻' }">水稻</div>
-                    <div class="type-item" @click="changeType('柑橘')" :class="{ 'type-item-active': activeType === '柑橘' }">柑橘</div>
-                    <div class="type-item" @click="changeType('小麦')" :class="{ 'type-item-active': activeType === '小麦' }">小麦</div>
+                    <!-- <div class="type-item" @click="changeType('荔枝')" :class="{ 'type-item-active': activeType === '荔枝' }">荔枝</div> -->
+                    <!-- <div class="type-item" @click="changeType('柑橘')" :class="{ 'type-item-active': activeType === '柑橘' }">柑橘</div> -->
+                    <!-- <div class="type-item" @click="changeType('小麦')" :class="{ 'type-item-active': activeType === '小麦' }">小麦</div> -->
                 </div>
             </template>
         </weather-info>
@@ -53,7 +53,7 @@ const defaultGardenId = ref(null);
 const selectedGardenId = ref(null);
 const gardenListRef = ref(null);
 const activeGardenTab = ref("current");
-const activeType = ref("荔枝");
+const activeType = ref("水稻");
 
 const mapLegendItems = [
     { label: "管理分区", dotClass: "map-legend__dot--zone" },

+ 17 - 11
src/views/old_mini/agri_record/index.vue

@@ -19,14 +19,14 @@
                     v-for="(item, index) in trendMonitorMockList" :key="index">
                     <div class="card-header">
                         <div class="header-left">
-                            <span class="title">{{ item.first_work.work_name }}</span>
+                            <span class="title">{{ item?.first_work?.work_name }}</span>
                             <span class="level-tag">二级</span>
                         </div>
-                        <div class="status-tag" v-if="item.risk_level">待记录</div>
+                        <div class="status-tag" v-if="item?.risk_level">待记录</div>
                     </div>
                     <div class="card-row">
-                        <div class="reason-text">{{ item.first_work.work_reason_short }}</div>
-                        <div class="question-tag">{{ item.first_work.interaction_issue }}</div>
+                        <div class="reason-text">{{ item?.first_work?.work_reason_short }}</div>
+                        <div class="question-tag">{{ item?.first_work?.interaction_issue }}</div>
                     </div>
                     <!-- <div class="record-list">
                         <div class="record-item" v-for="(record, recordIndex) in item.records" :key="recordIndex">
@@ -63,12 +63,17 @@ const changeGardenTab = (tab) => {
 };
 
 const getFarmRiskAndTracking = async () => {
+    trendMonitorMockList.value = [];
     const res = await VE_API.monitor.getFarmRiskAndTracking({
         farm_id: gardenId.value,
         crop_type: JSON.parse(localStorage.getItem("selectedFarmData")).farm_variety,
     });
     if (res.code === 200) {
-        trendMonitorMockList.value.push(res.data?.growth_abnormal_tracking, res.data?.pest_risk_assessment, res.data?.phenology_tracking);
+        trendMonitorMockList.value.push(res.data?.growth_abnormal_tracking);
+        trendMonitorMockList.value.push(res.data?.pest_risk_assessment);
+        if (res.data?.phenology_tracking) {
+            trendMonitorMockList.value.push(res.data?.phenology_tracking);
+        }
     }
 }
 
@@ -114,14 +119,15 @@ const handleMaskClick = () => {
 const gardenId = ref(store.state.home.gardenId);
 
 // 初始化加载数据
-onMounted(() => {
-    if (gardenId.value) {
-        getFarmRiskAndTracking();
-    }
-});
+// onMounted(() => {
+//     if (gardenId.value) {
+//         getFarmRiskAndTracking();
+//     }
+// });
 
 const changeGarden = ({ id }) => {
     gardenId.value = id;
+    getFarmRiskAndTracking();
     // 更新 store 中的状态
     store.commit("home/SET_GARDEN_ID", id);
 };
@@ -129,7 +135,7 @@ const changeGarden = ({ id }) => {
 const handleTrendMonitorCardClick = (item) => {
     router.push({
         path: "/record_details",
-        query: { workId: item.work_id },
+        query: { workId: item.work_id, type: item.first_work.work_name },
     });
 }
 </script>

+ 260 - 21
src/views/old_mini/recordDetails/index.vue

@@ -2,23 +2,93 @@
     <div class="record-wrap">
         <custom-header name="农事名称"></custom-header>
         <div class="record-content">
-            <div class="record-header">
+            <div class="record-header" v-if="route.query.type == '长势异常态势跟踪'">
+                <span>长势异常态势跟踪</span>
+                <div class="question">稻株新叶基部是否出现黄白化条纹?</div>
+            </div>
+            <div class="record-header" v-else-if="route.query.type == '病虫害态势监控'">
+                <span>病虫害态势监控</span>
+                <div class="question">稻蓟马、二化螟、苗瘟、叶瘟、立枯病、纹枯病</div>
+            </div>
+            <div class="record-header" v-else>
                 <span>{{ workDetail.interaction_type }}</span>
                 <div class="question">{{ workDetail.interaction_issue }}</div>
             </div>
             <div class="record-body">
-                <div class="card-wrap">
+                <div class="card-wrap" v-if="route.query.type == '长势异常态势跟踪'">
+                    <div class="card-item">
+                        <span class="item-label">科普知识:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            content="当前水稻处于分蘖盛期至拔节初期,分蘖初期如果稻株出现缺锌症状,会导致分蘖停滞、小叶丛生,需综合诊断并评估。缺锌原因与土壤类型密切相关——高pH土壤锌有效性低,长期渍水还原条件使锌沉淀,低温抑制根系对锌的吸收,高磷施肥加重缺锌症状。需结合土壤类型综合诊断,及时补锌促蘖。" />
+                    </div>
+                   <div class="tabs-list" v-if="!showMap">
+                        <div class="item-tab" :class="{ 'item-tab--active': activeTab1 === index }"
+                            v-for="(item, index) in tabsList1" :key="index" @click="activeTab1 = index">{{ item.label }}
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <span class="item-label">表型特征:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            content="    1、缺锌典型症状:新叶基部中脉黄白化,形成鲜明黄白条纹,严重时整片新叶漂白状,叶片短小丛生呈簇状。2、矮缩丛生:稻株节间明显缩短,整株矮缩,分蘖极少或完全停滞,稻株成簇状直立。3、老叶症状:老叶后期出现红褐色细小斑点,严重时斑点连片呈红褐色至紫褐色,叶片枯死。4、根系症状:根系细弱,新根少,呈黄褐色,严重时根系老化快。5、坐蔸症状(水稻土):老叶转黄泛红、新叶僵缩不发,根系发黑腐臭。6、缺锌与缺铁区别:缺锌是叶脉间黄白但中脉及叶脉附近仍绿(基部最明显);缺铁是全叶黄白而叶脉仍绿(顶部最明显)。" />
+                    </div>
+                    <div class="card-item">
+                        <span class="item-label">高发区域:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            content="重点巡视田间低洼渍水处、冷浸烂泥区域、进水口附近(冷水灌溉区)、高pH田块、过量施磷田块。观察稻株新叶基部是否出现黄白化条纹,统计出现症状的稻株比例和分布范围。拨开稻丛观察分蘖情况——正常分蘖应已发生1-2个,缺锌田块分蘖极少或全无。对比缺锌区域与正常区域稻株高度和叶片大小,测量节间长度判断是否明显缩短。拔根检查根系——砂土田看是否偏细偏白,黏土田看是否发黄无新根,酸性田看根尖是否膨大变黑,盐碱田看根系是否脱水状,重金属田看根系是否短粗,水稻土看根系是否发黑腐臭。发现异常症状后请拍照上传,及时存档" />
+                    </div>
+                </div>
+                <div class="card-wrap" v-else-if="route.query.type == '病虫害态势监控'">
+                    <div class="card-item">
+                        <span class="item-label">科普知识:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            content="当前水稻处于分蘖盛期至拔节初期,预测田间气象风险2级,近期湿度达80%、日均气温达29℃,该环境条件十分有利于稻蓟马、二化螟等害虫活动及苗瘟、立枯病、叶瘟、纹枯病等病菌侵染。此时水稻群体快速扩大,田间郁蔽度增加,通风透光下降,进一步加大病虫发生风险。需抓紧巡田,同步做好虫情、病情的动态监测,防范风险升级" />
+                    </div>
+                    <div class="pest-classify-picker">
+                        <div class="pest-classify-picker__row pest-classify-picker__row--top">
+                            <div v-for="(label, i) in pestTopLabels" :key="'top-' + i"
+                                class="pest-classify-picker__top-btn"
+                                :class="{ 'pest-classify-picker__top-btn--active': pestTopIndex === i }"
+                                @click="handlePestTopClick(i)">{{ label }}</div>
+                        </div>
+                        <div class="pest-classify-picker__row pest-classify-picker__row--grid4">
+                            <div v-for="(label, i) in pestCategoryLabels" :key="'cat-' + i"
+                                class="pest-classify-picker__chip pest-classify-picker__chip--solid"
+                                :class="{ 'pest-classify-picker__chip--solid-active': pestCategoryIndex === i }"
+                                @click="handlePestCategoryClick(i)">{{ label }}</div>
+                        </div>
+                        <div class="pest-classify-picker__row pest-classify-picker__row--grid4">
+                            <div v-for="(label, i) in pestDetailLabels" :key="'det-' + i"
+                                class="pest-classify-picker__chip pest-classify-picker__chip--soft"
+                                :class="{ 'pest-classify-picker__chip--soft-active': pestDetailIndex === i }"
+                                @click="handlePestDetailClick(i)">{{ label }}</div>
+                        </div>
+                    </div>
+                    <div class="card-item">
+                        <span class="item-label">表型特征:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            :content="text1" />
+                    </div>
+                    <div class="card-item">
+                        <span class="item-label">高发区域:</span>
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            :content="text2" />
+                    </div>
+                </div>
+                <div class="card-wrap" v-else>
                     <div class="card-item">
                         <span class="item-label">农情研判:</span>
-                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3" :content="workDetail.crop_condition_analysis" />
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            :content="workDetail.crop_condition_analysis" />
                     </div>
                     <div class="card-item">
                         <span class="item-label">巡园要点:</span>
-                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3" :content="workDetail.inspection_keypoints" />
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            :content="workDetail.inspection_keypoints" />
                     </div>
                     <div class="card-item">
                         <span class="item-label">表型特征:</span>
-                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3" :content="workDetail.phenotypic_characteristics" />
+                        <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
+                            :content="workDetail.phenotypic_characteristics" />
                     </div>
                 </div>
                 <!-- <div class="tabs-list" v-if="!showMap">
@@ -46,7 +116,7 @@
                             </div>
                         </div>
                     </div>
-                    <div v-else class="border-wrap no-map-wrap">
+                    <div v-if="!showMap && route.query.type == '物候跟踪记录'" class="border-wrap no-map-wrap">
                         <div class="question-info">
                             <span class="title">关键防治需肥期评估:</span>
                             <span class="content">具体问题具体问题具体问</span>
@@ -113,7 +183,7 @@ import GrowthStageTimeline from "@/components/pageComponents/GrowthStageTimeline
 import UploadProgressPopup from "@/components/popup/UploadProgressPopup.vue";
 import { ref, onMounted } from 'vue';
 import { useRouter, useRoute } from 'vue-router';
-import { Uploader,TextEllipsis } from "vant";
+import { Uploader, TextEllipsis } from "vant";
 import { ElMessage } from "element-plus";
 import UploadFile from "@/utils/upliadFile";
 import { getFileExt } from "@/utils/util";
@@ -128,6 +198,69 @@ function goPartitionManage() {
 
 const showMap = ref(false);
 
+/** 病虫害态势监控:分类选择(接入接口后可绑定 workDetail) */
+const pestTopIndex = ref(0);
+const pestTopLabels = ['病害', '虫害'];
+const pestCategoryIndex = ref(0);
+const pestDetailIndex = ref(0);
+const pestCategoryLabels = ref(['真菌类', '细菌类', '病毒类', '其它']);
+const pestDetailLabels = ref(['苗瘟', '立枯病', '叶瘟', '纹枯病']);
+
+const text1 = ref('多发生于3叶期前,病苗基部灰黑色,上部黄褐卷曲枯死,湿度大时病部表面产生灰绿色霉层,病苗成簇或成片死亡')
+const text2 = ref('重点巡查苗床或直播田低洼积水处、通风不良区域,观察幼苗是否成片黄化枯死,拔起病苗检查基部是否变黑、有无灰绿色霉层。注意与生理性黄化区分:苗瘟病苗基部有明显霉层,生理性黄化无霉层。发现病苗后请拍照上传,及时存档,便于记录发生程度与防控节点')
+const handlePestTopClick = (index) => {
+    pestTopIndex.value = index;
+    handlePestCategoryClick(0)
+    if (index === 0) {
+        pestCategoryLabels.value = ['真菌类', '细菌类', '病毒类', '其它'];
+        pestDetailLabels.value = ['苗瘟', '立枯病', '叶瘟', '纹枯病'];
+    } else {
+        pestCategoryLabels.value = ['刺吸类', '咀嚼式', '钻蛀类', '其它'];
+        pestDetailLabels.value = ['稻蓟马'];
+    }
+};
+
+const handlePestCategoryClick = (index) => {
+    pestCategoryIndex.value = index;
+    handlePestDetailClick(0)
+    if (index === 0) {
+        if (pestTopIndex.value == 1) {
+            pestDetailLabels.value = ['稻蓟马'];
+        } else {
+            pestDetailLabels.value = ['苗瘟', '立枯病', '叶瘟', '纹枯病'];
+        }
+    } else {
+        pestDetailLabels.value = ['二化螟'];
+    }
+};
+
+const handlePestDetailClick = (index) => {
+    pestDetailIndex.value = index;
+    if (pestTopIndex.value === 0) {
+        if (index === 0) {
+            text1.value = '多发生于3叶期前,病苗基部灰黑色,上部黄褐卷曲枯死,湿度大时病部表面产生灰绿色霉层,病苗成簇或成片死亡';
+            text2.value = '重点巡查苗床或直播田低洼积水处、通风不良区域,观察幼苗是否成片黄化枯死,拔起病苗检查基部是否变黑、有无灰绿色霉层。注意与生理性黄化区分:苗瘟病苗基部有明显霉层,生理性黄化无霉层。发现病苗后请拍照上传,及时存档,便于记录发生程度与防控节点';
+        } else if (index === 1) {
+            text1.value = '病苗基部出现黄褐色水渍状病斑,后变褐缢缩,幼苗倒伏枯死,潮湿时病部产生白色或粉红色霉层。旱育秧田发病尤重,常成片发生';
+            text2.value = '重点巡查旱育秧田及低洼排水不良地块,观察幼苗是否成片倒伏,轻拔病苗看基部是否缢缩变色、有无白色或粉红色霉层。用手指轻捏病苗基部,若感觉松软、皮层易剥离则可初步判断。发现病株后请拍照上传,及时存档,便于记录发生程度与防控节点';
+        } else if (index === 2) {
+            text1.value = '叶片出现梭形或椭圆形灰绿色病斑,边缘褐色、中央灰白,病斑两端有坏死线,潮湿时叶背病斑处产生灰绿色霉层。严重时病斑汇合,叶片枯死';
+            text2.value = '重点巡查田间湿度大、氮肥偏高的田块,观察叶片中上部有无典型梭形病斑,病斑边缘是否褐色、中央是否灰白色,用手触摸病斑处是否粗糙。在清晨或雨后湿度大时,翻看叶背对应位置寻找灰绿色霉层。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点';
+        } else if (index === 3) {
+            text1.value = '叶鞘及叶片出现云纹状灰绿色至灰褐色病斑,病斑边缘模糊,多个病斑汇合成云纹状大斑。潮湿时病部产生白色菌丝团及褐色的菌核(油菜籽状),菌核易脱落于田间';
+            text2.value = '重点巡查田间郁蔽度高、排水不畅的田块,拨开稻丛下部叶鞘,寻找云纹状病斑及白色菌丝团。用手在稻丛基部附近水面轻捞,看是否有褐色菌核漂浮。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点';
+        }
+    } else {
+        if (pestCategoryIndex.value === 0) {
+            text1.value = '成虫、若虫锉吸心叶及嫩叶汁液,受害叶片出现黄白色条斑,叶尖卷曲干枯,严重时全叶枯缩,稻株生长停滞,分蘖减少'
+            text2.value = '重点巡查田边及氮肥偏高的旺长田块,拨开心叶及未完全展开的叶片,用放大镜观察有无细小黑色或黄色虫体在活动,同时查看叶尖是否卷曲干枯、叶面有无黄白色条斑。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点'
+        } else {
+            text1.value = '幼虫钻蛀稻茎基部,造成枯心苗,受害株心叶变黄枯死,茎秆基部有圆形蛀孔及虫粪排出,轻拔枯心苗易折断,断口可见幼虫或虫道'
+            text2.value = '重点巡查田间分散出现的枯心团或枯心带,沿行间逐株检查心叶是否变黄萎蔫。拔取枯心株,用刀片或指甲剥开茎秆基部,检查内部有无淡褐色或灰白色幼虫、虫粪及蛀道。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点'
+        }
+    }
+};
+
 const indexMap = new IndexMap();
 const mapContainer = ref(null);
 const location = ref(null);
@@ -140,6 +273,14 @@ const tabsList = ref([
     { label: '分区四', value: 3 },
 ]);
 
+const activeTab1 = ref(0)
+const tabsList1 = ref([
+    { label: '植株缺锌', value: 0 },
+    { label: '长势缓慢', value: 1 },
+    { label: '植株旺长', value: 2 },
+    { label: '叶片萎蔫', value: 3 },
+]);
+
 const showUploadProgressPopup = ref(false);
 const initImgArr = ref([]);
 const uploadProgressPopupRef = ref(null);
@@ -204,19 +345,20 @@ const handleConfirmUpload = () => {
 const handleUploadClick = () => { };
 
 /** 物候跟踪时间轴示例数据,接入接口后可替换 */
-const phenologyTrackList = ref([
-    { date: '04/18', content: '有 60%已经来花了', images: [] },
-    {
-        date: '04/18',
-        content: '有 60% 进入 红黄叶 阶段',
-        images: [
-            'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
-            'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
-            'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
-            'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
-        ],
-    },
-]);
+const phenologyTrackList = ref([]);
+// const phenologyTrackList = ref([
+//     { date: '04/18', content: '有 60%已经来花了', images: [] },
+//     {
+//         date: '04/18',
+//         content: '有 60% 进入 红黄叶 阶段',
+//         images: [
+//             'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
+//             'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
+//             'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
+//             'https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png',
+//         ],
+//     },
+// ]);
 
 const activeTab = ref(0);
 
@@ -259,6 +401,8 @@ const growthStages = ref([
 
 onMounted(() => {
     getWorkDetail();
+    getFarmRecord()
+    getFindPhenologyInfo()
     if (showMap.value) {
         location.value = "POINT(113.6142086995688 23.585836479509055)";
         indexMap.initMap(location.value, mapContainer.value);
@@ -270,7 +414,44 @@ const getWorkDetail = async () => {
     const res = await VE_API.monitor.getWorkDetail({ id: route.query.workId });
     if (res.code === 200 && res.data.length) {
         workDetail.value = res.data[0];
-        console.log(workDetail.value);
+    }
+}
+
+const getFarmRecord = async () => {
+    const res = await VE_API.monitor.getFarmRecord();
+    if (res.code === 200 && res.data?.phenology.length) {
+        phenologyTrackList.value = res.data.phenology.map(item =>{
+            return {
+                date:item.time,
+                content:item.record + item.ratio + '%',
+                images:[]
+            }
+        })
+    }
+}
+
+function transformToKeyValueArray(obj) {
+  return Object.entries(obj).map(([key, value]) => ({ key, value }));
+}
+
+const getFindPhenologyInfo = async () =>{
+    const cropType = JSON.parse(localStorage.getItem('selectedFarmData')).farm_variety
+    const res = await VE_API.monitor.getFindPhenologyInfo({ crop_type:cropType });
+    console.log(res)
+    if (res.code === 200 && res.data.length) {
+        growthStages.value = res.data.map(item => {
+            const discribe = JSON.parse(item.time_discribe)
+            console.log(discribe)
+            const result = transformToKeyValueArray(discribe);
+            console.log(result)
+            
+            return {
+                label:result,
+                tags:[],
+                periodTitle:item.phenophase_name,
+                periodSubtitle:item.phenophase_discribe
+            }
+        })
     }
 }
 
@@ -345,6 +526,7 @@ const getWorkDetail = async () => {
                     .item-label {
                         color: rgba(60, 60, 60, 0.5);
                     }
+
                     .item-value {
                         display: inline;
                     }
@@ -354,6 +536,63 @@ const getWorkDetail = async () => {
                     margin-top: 8px;
                 }
 
+                .pest-classify-picker {
+                    margin: 8px 0;
+                    padding: 10px;
+                    border-radius: 8px;
+                    background: #f2f3f5;
+
+                    &__row {
+                        display: flex;
+                        justify-content: center;
+                        gap: 8px;
+
+                        &--top {
+                            .pest-classify-picker__top-btn {
+                                padding: 6px 30px;
+                                border-radius: 6px;
+                                background: #E9E9E9;
+                                color: #767676;
+                            }
+
+                            .pest-classify-picker__top-btn--active {
+                                background: #ffffff;
+                                color: #1a1a1a;
+                            }
+                        }
+
+                        &--grid4 {
+                            margin-top: 10px;
+                            display: grid;
+                            grid-template-columns: repeat(4, 1fr);
+                            gap: 8px;
+                        }
+                    }
+
+                    &__chip {
+                        border: none;
+                        padding: 6px 4px;
+                        border-radius: 6px;
+                        font-size: 13px;
+                        text-align: center;
+                        white-space: nowrap;
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                        background: #ffffff;
+                        color: #909090;
+                    }
+
+                    &__chip--solid-active {
+                        background: #2199f8;
+                        color: #ffffff;
+                    }
+
+                    &__chip--soft-active {
+                        background: rgba(33, 153, 248, 0.14);
+                        color: #2199f8;
+                    }
+                }
+
                 .border-wrap {
                     border-radius: 8px;
                     border: 0.5px solid #2199F8;

+ 256 - 69
src/views/old_mini/work_detail/index.vue

@@ -4,10 +4,11 @@
 
         <div class="work-detail-content">
             <!-- 顶部状态 -->
-            <div class="content-status" :class="['status-' + detail?.flowStatus, 'audit-' + getAuditStatusPriority(detail?.executeEvidenceAuditStatus)]">
+            <div class="content-status status-5">
+                <!-- <div class="content-status" :class="['status-' + detail?.flowStatus, 'audit-' + getAuditStatusPriority(detail?.executeEvidenceAuditStatus)]"> -->
                 <div class="status-l">
-                    <div class="status-title">{{ detail?.farmWorkName }}</div>
-                    <div class="status-sub" v-if="triggerDateText && (detail?.flowStatus == -1 || detail?.flowStatus == -2)">
+                    <div class="status-title">{{ headerTitle }}</div>
+                    <!-- <div class="status-sub" v-if="triggerDateText && (detail?.flowStatus == -1 || detail?.flowStatus == -2)">
                         执行时间已经过去 {{ Math.abs(daysDiff) }} 天了
                     </div>
                     <div class="status-sub" v-if="detail?.flowStatus === 3 && getAuditStatusPriority(detail?.executeEvidenceAuditStatus) !== 2">
@@ -15,17 +16,22 @@
                     </div>
                     <div class="status-sub" v-if="!detail?.flowStatus || detail?.flowStatus === 0">
                         预计{{ detail?.executeDate || "--" }}执行,执行时间需巡园校准
+                    </div> -->
+                    <div class="status-sub">
+                        已认证成功
                     </div>
                 </div>
             </div>
 
-            <div class="work-wrap has-bottom warning-info-show" :class="{ 'warning-info-show': detail?.flowStatus === 1 }">
+            <div class="work-wrap has-bottom warning-info-show"
+                :class="{ 'warning-info-show': detail?.flowStatus === 1 }">
                 <!-- 农事组信息 -->
-                <div class="box-wrap group-info group-box" v-if="(detail?.executionLimitDays || detail?.executionLimitDays === 0) && detail?.flowStatus !== 5">
+                <div class="box-wrap group-info group-box">
+                    <!-- <div class="box-wrap group-info group-box" v-if="(detail?.executionLimitDays || detail?.executionLimitDays === 0) && detail?.flowStatus !== 5"> -->
                     <div class="group-name">
                         <!-- 该农事为 <span class="light-text">标准防治溯源农事</span> ,最佳执行时间为 <span class="light-text">{{detail?.executionLimitDays}}天</span>, 
                         请及时完成溯源认证上传 -->
-                        农事原因农事原因农事原因农事原因农事原因农事原因农事原因
+                        {{ text5 }}
                     </div>
                 </div>
 
@@ -104,34 +110,36 @@
                                         {{ getParamRemark(item, index) }}
                                         <br />
                                     </template>
-                                </span>
-                            </div>
-                        </div>
+</span>
+</div>
+</div>
+</div>
+
+
+<div class="work-info photo-box" v-if="prescription.cropAlbum && prescription.cropAlbum.length">
+    <div class="photo-title">农事凭证</div>
+    <div class="tips-text" v-if="detail?.imageAuditRejectReason">{{ detail?.imageAuditRejectReason }}</div>
+    <div class="photo-sub-title" v-if="info?.appType === 1">来自于 {{ detail?.executorOrganizationName || "--" }}</div>
+    <div class="photo-img-wrap">
+        <photo-provider :photo-closable="true">
+            <photo-consumer v-for="(src, index) in prescription.cropAlbum" intro="农事凭证" :key="index"
+                :src="base_img_url2 + src.filename">
+                <div class="photo-img">
+                    <img :src="base_img_url2 + src.filename" />
+                    <div class="fail-icon" v-if="failIndex(index) === 2">
+                        <el-icon size="24" color="#FF953D">
+                            <WarningFilled />
+                        </el-icon>
+                        <div class="fail-icon-text">审核失败</div>
                     </div>
+                </div>
+            </photo-consumer>
+        </photo-provider>
+    </div>
+</div>
+</div> -->
 
 
-                    <div class="work-info photo-box" v-if="prescription.cropAlbum && prescription.cropAlbum.length">
-                        <div class="photo-title">农事凭证</div>
-                        <div class="tips-text" v-if="detail?.imageAuditRejectReason">{{ detail?.imageAuditRejectReason }}</div>
-                        <div class="photo-sub-title" v-if="info?.appType === 1">来自于 {{ detail?.executorOrganizationName || "--" }}</div>
-                        <div class="photo-img-wrap">
-                            <photo-provider :photo-closable="true">
-                                <photo-consumer v-for="(src, index) in prescription.cropAlbum" intro="农事凭证" :key="index"
-                                    :src="base_img_url2 + src.filename">
-                                    <div class="photo-img">
-                                        <img :src="base_img_url2 + src.filename" />
-                                        <div class="fail-icon" v-if="failIndex(index) === 2">
-                                            <el-icon size="24" color="#FF953D"><WarningFilled /></el-icon>
-                                            <div class="fail-icon-text">审核失败</div>
-                                        </div>
-                                    </div>
-                                </photo-consumer>
-                            </photo-provider>
-                        </div>
-                    </div>
-                </div> -->
-
-                
                 <div class="box-wrap stage-card">
                     <div class="work-info">
                         <div class="map-box">
@@ -139,12 +147,33 @@
                             <div class="map-container" ref="mapContainer"></div>
                         </div>
                         <div class="area-list">
-                            <div class="area-item" v-for="item in 2" :key="item">
+                            <div class="area-item">
                                 <div class="area-l">
-                                    分区名称1:具体时间
-                                    <span class="area-tag">未激活</span>
+                                    权属田块1:{{ time1 }}
+                                    <span class="area-tag"
+                                        style="background: rgba(55, 193, 27, 0.1); color: #37C11B;">已认证</span>
+                                    <!-- <span class="area-tag">未激活</span> -->
+                                </div>
+                                <!-- <div class="area-r">我已完成</div> -->
+                            </div>
+                        </div>
+                        <div class="ecological-plant-card">
+                            <!-- <div class="ecological-plant-text">
+                                <div class="ecological-plant-line">
+                                    生态种植方式:{{ ecologicalPlantingMethodText }}
                                 </div>
-                                <div class="area-r">我已完成</div>
+                                <div class="ecological-plant-line ecological-plant-line--sub">
+                                    来自于 {{ ecologicalExecutorOrg }}
+                                </div>
+                            </div> -->
+                            <div class="ecological-plant-gallery">
+                                <img
+                                    v-for="(src, idx) in ecologicalPlantThumbUrls"
+                                    :key="idx"
+                                    class="ecological-plant-thumb"
+                                    :src="src"
+                                    alt=""
+                                />
                             </div>
                         </div>
                     </div>
@@ -154,24 +183,24 @@
                     <div class="work-info">
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>农事目的</div>
-                            <div class="info-value">农事目的农事目的农事目的农事目的农事目的农事目的农事目的</div>
+                            <div class="info-value">{{ text1 }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>注意事项</div>
-                            <div class="info-value">注意事项注意事项注意事项注意事项注意事项注意事项注意事项</div>
+                            <div class="info-value info-value-preline">{{ text2 }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>药物处方</div>
-                            <div class="info-value"><span class="blod-text">机械:</span>药肥处方药肥处方药肥处方药肥处方药肥处方药肥</div>
+                            <div class="info-value info-value-preline">{{ text3 }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>执行方式</div>
-                            <div class="info-value"><span class="blod-text">机械:</span>执行方式执行方式执行方式执行方式执行方式执行方式</div>
+                            <div class="info-value info-value-preline">{{ text4 }}</div>
                         </div>
                     </div>
                 </div>
 
-                <div class="warning-info">
+                <!-- <div class="warning-info">
                     <div class="warning-l">
                         <div class="warning-title">
                             <el-icon size="16" color="#FF953D"><WarningFilled /></el-icon>
@@ -180,7 +209,7 @@
                         <div class="warning-text">文案文案文案文案文案</div>
                     </div>
                     <div class="warning-r">异常记录</div>
-                </div>
+                </div> -->
 
                 <!-- 底部按钮 -->
                 <div class="fixed-btn-wrap center-btn" v-if="info?.appType === 2">
@@ -219,10 +248,17 @@ import { Popup } from "vant";
 import MapInfo from "./components/mapInfo.vue";
 import { useRoute } from "vue-router";
 import AreaMap from "./components/areaMap.js";
+import { time } from "echarts";
+import imgFq1 from "@/assets/img/common/fq-1.png";
+import imgFq2 from "@/assets/img/common/fq-2.png";
+import imgYz1 from "@/assets/img/common/yz-1.png";
+import imgYz2 from "@/assets/img/common/yz-2.png";
+import imgJf1 from "@/assets/img/common/jf-1.png";
+import imgJf2 from "@/assets/img/common/jf-2.png";
 
 const route = useRoute();
 const showUploadTipsPopup = ref(false);
-
+const headerTitle = ref('');
 const router = useRouter();
 // const info = JSON.parse(localStorage.getItem("localUserInfo") || "{}");
 const info = { appType: 1 };
@@ -280,19 +316,114 @@ onMounted(() => {
 });
 
 const miniJson = ref(null);
+const text1 = ref('');
+const text2 = ref('');
+const text3 = ref('');
+const text4 = ref('');
+const time1 = ref('');
+const text5 = ref('')
+/** 生态种植卡片:方式文案(可后续接接口字段) */
+const ecologicalPlantingMethodText = ref("某某方式");
+/** 与设计稿一致的四宫格示例图 */
+const ecologicalPlantThumbUrls = ref([imgFq1, imgFq2]);
+const ecologicalExecutorOrg = computed(
+    () => detail.value?.executorOrganizationName || "某某某农资机构"
+);
+const mapData = ref("MULTIPOLYGON(((107.995696309223 24.9716283493399, 107.997730748383 24.9701649808213, 107.997870541717 24.9690287881909, 107.998141205407 24.9672322951316, 107.995761744401 24.9662448188141, 107.994830780282 24.9679461334333, 107.995696309223 24.9716283493399)))")
+
 onActivated(() => {
-    if (route.query?.miniJson) {
-        const miniJsonObj = JSON.parse(route.query.miniJson);
-        miniJson.value = JSON.parse(miniJsonObj.paramsPage);
+
+    areaMap.initMap("POINT(113.1093017627431 22.57454083668)", mapContainer.value);
+
+    headerTitle.value = route.query?.title || '';
+    if (headerTitle.value === '返青追肥') {
+        text5.value = '最佳返青营养时间评估'
+        ecologicalPlantThumbUrls.value = [imgFq1, imgFq2]
+        time1.value = '05/03';
+        text1.value = '通过追施速效蘖肥,快速补充氮素营养,促进水稻低节位分蘖早生快发,为构建足穗、高产群体打下坚实基础';
+        text2.value = [
+            '1. 土壤类型',
+            '砂土:保肥力极弱,养分易淋失。必须坚持“少量多次”原则。此次追肥量宜少(5-6公斤/亩),仅为总蘖肥量的一部分(约40%)。强烈建议通过水肥一体化系统随水追施;若无此条件,则采用植保无人机叶面喷施作为重要补充,避免撒施后大水漫灌造成肥料深层渗漏。',
+            '壤土:保肥力中等,可按常规用量(6-7公斤/亩)一次施用,采用撒施后灌水的方式。',
+            '黏土:保肥力强,用量可取上限(7-8公斤/亩)。但追肥前需确保田间无积水,追肥后保持浅水层即可,切忌深水淹灌,以免造成根系缺氧、还原性有毒物质积累伤根。',
+            '2. 酸碱度',
+            '酸性土(pH<5.5): 土壤中活性铝、锰离子含量高,可能抑制根系对养分的吸收。黄腐酸能络合这些有害离子,提高肥料利用率。应避免单独使用硫酸铵等生理酸性肥料,以免加剧土壤酸化。',
+            '碱性土(pH>7.5): 按常规操作,黄腐酸可缓冲盐碱,提高磷、铁、锌等元素的有效性。若往年出现过缺锌坐蔸现象,可在蘖肥中额外加入硫酸锌1-2公斤/亩。',
+            '3. 有机质含量',
+            '有机质偏低(<2%): 土壤供氮能力弱,追肥量可取上限(7-8公斤/亩),并可在施肥后3-5天配合一次叶面喷施氨基酸叶面肥(50毫升/亩),以防后期脱肥。',
+            '有机质较高(>3%): 土壤自身矿化释放的氮素较多,追肥量应取下限(5-6公斤/亩),防止氮素过量导致分蘖过旺、群体荫蔽,增加纹枯病和倒伏风险。',
+            '4. 气象条件',
+            '高温干旱: 追肥必须在清晨或傍晚进行。追肥后立即灌浅水(3-5厘米),并保持水层3-5天。若遇供水不稳定,可采用“以水带肥”方式,即追肥后立即小水量灌溉,使水肥同步下渗至根层。严禁中午追肥,此时氨挥发损失可达30%以上,且易灼伤叶片。',
+            '阴雨天气: 严禁在预报降雨前追肥。若追肥后24小时内遇暴雨,导致肥料明显流失,需在雨停后田面无积水时补施,补施量为原用量的一半。雨季需保持沟渠畅通,确保田间能及时排水,防止积水沤根影响返青进程。',
+            '低温寒潮: 若返青期遭遇持续低温(日均温低于15℃),根系吸收能力下降,应暂缓追肥,待气温回升稳定后再施,防止肥料积聚造成后期暴食旺长。可先叶面喷施氨基酸叶面肥增强抗逆性。',
+        ].join('\n');
+        text3.value = '亩施“黄腐酸高氮型水溶肥”(N-P₂O₅-K₂O=30-10-10,黄腐酸≥3%)5-8公斤';
+        text4.value = [
+            '1. 首选:通过水肥一体化滴灌系统或喷灌系统,将肥料溶解后随灌溉水同步、均匀施入根层土壤;',
+            '2. 次选:使用植保无人机进行叶面喷施,将肥料配成800-1000倍液,亩用水量3-5升,确保均匀覆盖;',
+            '3. 传统方式:人工或机械撒施颗粒状黄腐酸高氮肥,施肥后立即灌浅水(3-5厘米),并保持水层3-5天。',
+        ].join('\n');
+    } else if (headerTitle.value === '移栽防治') {
+        text5.value = '移栽预防早期病虫害'
+        ecologicalPlantThumbUrls.value = [imgYz1, imgYz2]
+        time1.value = '04/08'
+        text1.value = '通过深施基肥和土壤调理,一次性提供水稻前期生长所需的大部分养分,改善土壤结构,调节酸碱度,为秧苗早生快发和全生育期健康生长奠定基础';
+        text2.value = `1. 土壤类型
+            砂土:保水保肥能力极差,养分易淋失。必须增加有机肥用量(取上限800公斤/亩)并采用“全层深施”,旋耕深度需达20厘米。石灰用量可根据pH检测结果适当减少,但必须确保最终pH达标。
+            壤土:质地和保肥性适中,可按常规用量和深度(18厘米)操作。确保田面平整,防止局部积水或干旱。
+            黏土:保肥力强,但排水性差,易板结。需在田块四周开好深度30厘米以上的排水沟。有机肥用量可取下限(500公斤/亩),但石灰和化肥必须深施,防止表层富集。旋耕后需充分晒垡或冻垡,以改善土壤结构。
+            2. 酸碱度
+            酸性土(pH<5.5):必须施用石灰调酸。对于pH 4.5-5.5的土壤,亩施石灰150-200公斤;对于pH<4.5的强酸性土壤,亩施石灰需增至250-300公斤。石灰撒施后需灌水泡田7-10天,促进中和反应,移栽前检测田面水pH值需达到5.5-6.5。
+            碱性土(pH>7.5):无需施用石灰。可考虑亩施硫磺粉30-50公斤或选用生理酸性肥料(如硫酸铵)来逐步降低pH值。黄腐酸肥料有助于缓冲盐碱。
+            3. 有机质含量
+            有机质偏低(<2%):必须增施有机肥(取上限800公斤/亩)以快速提升地力。黄腐酸富氮完全肥用量也取上限(50公斤/亩)。
+            有机质较高(>3%):有机肥用量可减少至500公斤/亩,黄腐酸富氮完全肥取下限(40公斤/亩),防止氮素过量导致秧苗前期旺长、抗逆性下降。
+            4. 气象条件
+            高温干旱天气:避免在中午高温时段撒施石灰和肥料,以减少氨挥发。施肥后应立即灌浅水(3-5厘米),并保持水层3-5天,以水压肥,防止养分挥发和固定。若预报持续高温无雨,应确保灌溉水源充足,防止土壤干裂。
+            阴雨天气:严禁在预报有中到大雨前12小时内进行施肥作业,防止养分随地表径流大量流失。若施肥后24小时内遇中到大雨,需在雨停后补施基肥,补施量减半(石灰无需补施)。雨季整地时,需确保田面“平、烂、净”,防止局部积水导致肥料分布不均。
+            `;
+        text3.value = `有机肥: 腐熟农家肥或商品有机肥 500-800公斤
+                    复合肥: “黄腐酸富氮完全肥”(N-P₂O₅-K₂O=15-15-15,黄腐酸≥3%)40-50公斤
+                    中微量元素肥: 硅钙肥(有效SiO₂≥20%)60-80公斤
+                    土壤调理剂(酸性土): pH<5.5时,农用石灰(CaCO₃)100-300公斤
+                    土壤调理剂(碱性土): pH>7.5时,硫磺粉30-50公斤或选用生理酸性肥料
+                    `;
+        text4.value = `1. 使用撒肥机或植保无人机将石灰(如需,即酸性土)均匀撒施于田面;
+                2. 紧接着撒施基肥(有机肥、黄腐酸富氮完全肥、硅钙肥);
+                3. 立即使用旋耕机进行深耕(深度18-20厘米),使所有物料与耕层土壤充分混匀;
+                4. 使用水田耙或激光平地机进行耙平,达到“平、烂、净、深”标准;
+                5. 灌水泡田,准备移栽。
+                `;
     } else {
-        miniJson.value = null;
+        text5.value = '整地基肥与土壤环境改良'
+        ecologicalPlantThumbUrls.value = [imgJf1, imgJf2]
+        time1.value = '04/20'
+        text1.value = '在秧苗移栽前建立药剂保护层,预防早期病虫害发生,确保秧苗移栽后快速返青、健康成长,实现“无病苗”下田';
+        text2.value = `1. 土壤类型:砂土保水保肥差,秧苗素质可能偏弱。宜选用安全性高的药剂组合(如处方三),并确保药液浓度准确,避免药害。喷施时雾滴不宜过细,以减少高温下的蒸发飘移。黏土排水性相对较差,秧苗带病风险可能略高。可优先选用内吸性强的组合(如处方一或二),确保药剂能被充分吸收。喷施前若秧田过密,可适当通风透光。壤土按标准方案执行,确保药液均匀覆盖。
+                        2. 酸碱度:酸性土(pH<5.5):土壤溶液偏酸,可能影响部分药剂稳定性。配药时,建议先用少量清水将药剂配成母液,再稀释,避免直接与酸性水混合。对于敏感药剂,浓度可适当降低5%。碱性土(pH>7.0):碱性水可能分解某些药剂(如有机磷类,但本方案未涉及)。配药时,建议先调节配药用水至中性,或优先选用在碱性条件下稳定的药剂(如三环唑、噻呋酰胺)。可添加有机硅助剂(按推荐用量的10%)以改善药液在碱性叶片表面的展着和渗透效果
+                        3. 有机质含量:有机质偏低(<1.5%):土壤贫瘠,秧苗长势可能偏弱,抗逆性差。优先选用内吸性强、持效期长的药剂组合(如处方一),并确保氨基酸叶面肥足量使用,以增强秧苗体质。有机质较高(>3.0%):秧苗可能生长过旺,组织柔嫩。按标准方案执行即可,但需注意喷施均匀,防止局部药液积聚。
+                        4. 气象条件
+                        高温干旱天气:选择在清晨(露水干后)或傍晚(下午4点后)喷药,避开中午高温时段。药液浓度可适当降低10%,并增加兑水量10%-20%,以防嫩叶灼伤和药液过快蒸发。喷施后确保秧苗有充足水分供应。
+                        阴雨天气:密切关注天气预报,务必抢在雨前4小时以上完成施药。若施药后2小时内遇中到大雨,需在雨停后及时补喷,补喷药量减半。优先选用内吸性强、耐雨水冲刷的药剂(如三环唑、噻呋酰胺、氯虫苯甲酰胺)。
+                        `;
+        text3.value = `处方一(广谱预防,内吸性强):亩用30%噻呋酰胺悬浮剂20毫升 + 25%吡蚜酮可湿性粉剂20克 + 氨基酸叶面肥50毫升。
+                    处方二(强保护,主治稻瘟病和螟虫):亩用75%三环唑可湿性粉剂30克 + 20%氯虫苯甲酰胺悬浮剂10毫升 + 氨基酸叶面肥50毫升。
+                    处方三(经济型综合方案):亩用20%三环唑悬浮剂100毫升 + 5%阿维菌素乳油30毫升 + 氨基酸叶面肥50毫升。
+                    `;
+        text4.value = '在移栽前1-2天,于秧田集中喷药。采用植保无人机进行超低容量喷雾(亩用水量1-1.5升),确保药液均匀覆盖秧苗。喷药后待药液晾干再起秧移栽。';
     }
-    getDetail();
+    // if (route.query?.miniJson) {
+    //     const miniJsonObj = JSON.parse(route.query.miniJson);
+    //     miniJson.value = JSON.parse(miniJsonObj.paramsPage);
+    // } else {
+    //     miniJson.value = null;
+    // }
+    // getDetail();
 });
 
 const getDetail = () => {
     if (!miniJson.value) return;
-    const { farmWorkLibId, farmId, recordId ,reproductiveId} = miniJson.value;
+    const { farmWorkLibId, farmId, recordId, reproductiveId } = miniJson.value;
     VE_API.z_farm_work_record
         .getDetailById({ farmWorkLibId, farmId, farmWorkRecordId: recordId, reproductiveId })
         .then(({ data }) => {
@@ -386,17 +517,17 @@ const stageList = computed(() => {
     if (!d) return [];
 
     // if (Array.isArray(d.pesticideList) && d.pesticideList.length) {
-        return [
-            {
-                ...d,
-                pesticideList: d.pesticideList,
-                cropAlbum: normalizeCropAlbum(
-                    d.confirmPicture?.length
-                        ? d.confirmPicture
-                        : d.executeEvidence
-                ),
-            },
-        ];
+    return [
+        {
+            ...d,
+            pesticideList: d.pesticideList,
+            cropAlbum: normalizeCropAlbum(
+                d.confirmPicture?.length
+                    ? d.confirmPicture
+                    : d.executeEvidence
+            ),
+        },
+    ];
     // }
 
     // return [];
@@ -513,7 +644,7 @@ const handleConvert = () => {
         askInfo: { title: "农事执行", content: "是否分享该农事给好友" },
         shareText: `${detail.value.farmWorkName}农事 已触发,请在最佳农时内执行`,
         targetUrl: `work_detail`,
-        paramsPage: JSON.stringify({...miniJson.value, hideDraw: true}),
+        paramsPage: JSON.stringify({ ...miniJson.value, hideDraw: true }),
         imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/work_img.png',
     };
     wx.miniProgram.navigateTo({
@@ -608,14 +739,18 @@ const areaMap = new AreaMap();
     }
 
     &.status-5 {
-        padding-top: 30px;
-
         &::after {
-            background: #2199F8;
+            background: #37C11B;
+        }
+
+        .status-sub {
+            color: #37C11B !important;
         }
     }
 
-    &.status-3, &.audit-2, &.audit-0 {
+    &.status-3,
+    &.audit-2,
+    &.audit-0 {
         &::after {
             background: #FF953D;
         }
@@ -630,6 +765,7 @@ const areaMap = new AreaMap();
             background: #FF4F4F;
         }
     }
+
     &.status--2 {
         &::after {
             background: #C7C7C7;
@@ -660,11 +796,14 @@ const areaMap = new AreaMap();
     top: 0;
     padding: 0 12px 12px;
     z-index: 2;
+
     &.has-bottom {
         margin-bottom: 88px;
     }
+
     &.warning-info-show {
-        margin-bottom: 168px;
+        // margin-bottom: 168px;
+        margin-bottom: 88px;
     }
 }
 
@@ -749,7 +888,7 @@ const areaMap = new AreaMap();
     margin-top: 10px;
 }
 
-.info-item + .info-item {
+.info-item+.info-item {
     margin-top: 10px;
 }
 
@@ -760,6 +899,7 @@ const areaMap = new AreaMap();
         gap: 4px;
         color: #2199F8;
         font-weight: 500;
+
         .title-block {
             width: 6px;
             height: 6px;
@@ -775,12 +915,18 @@ const areaMap = new AreaMap();
         line-height: 21px;
     }
 
+    .info-value-preline {
+        white-space: pre-line;
+    }
+
     .blod-text {
         font-weight: 500;
     }
 }
+
 .map-box {
     position: relative;
+
     .map-title {
         z-index: 12;
         position: absolute;
@@ -796,7 +942,7 @@ const areaMap = new AreaMap();
         background: rgba(0, 0, 0, 0.45);
         backdrop-filter: blur(4px);
     }
-    
+
     .map-container {
         height: 140px;
         width: 100%;
@@ -807,9 +953,11 @@ const areaMap = new AreaMap();
 
 .area-list {
     margin-top: 10px;
-    .area-item + .area-item {
+
+    .area-item+.area-item {
         margin-top: 6px;
     }
+
     .area-item {
         display: flex;
         align-items: center;
@@ -817,9 +965,11 @@ const areaMap = new AreaMap();
         padding: 10px;
         border: 1px solid rgba(0, 0, 0, 0.1);
         border-radius: 6px;
+
         .area-l {
             color: #000000;
-            font-weight: 500;
+
+            // font-weight: 500;
             .area-tag {
                 background: rgba(98, 98, 98, 0.1);
                 color: #626262;
@@ -832,6 +982,7 @@ const areaMap = new AreaMap();
                 display: inline-block;
             }
         }
+
         .area-r {
             background: #2199F8;
             color: #fff;
@@ -846,6 +997,37 @@ const areaMap = new AreaMap();
     }
 }
 
+.ecological-plant-card {
+    margin-top: 10px;
+    // padding: 10px;
+    // background: rgba(244, 244, 244, 0.8);
+    border-radius: 8px;
+    text-align: left;
+}
+
+.ecological-plant-text {
+    color: #666666;
+    font-size: 14px;
+    line-height: 1.45;
+}
+
+.ecological-plant-line--sub {
+    margin-top: 6px;
+}
+
+.ecological-plant-gallery {
+    display: flex;
+    gap: 12px;
+}
+
+.ecological-plant-thumb {
+    width: 80px;
+    height: 80px;
+    object-fit: cover;
+    border-radius: 8px;
+    display: block;
+}
+
 .stage-card {
 
     .stage-header {
@@ -914,6 +1096,7 @@ const areaMap = new AreaMap();
             color: #2199F8;
         }
     }
+
     .area-text {
         display: inline-flex;
         align-items: center;
@@ -1051,6 +1234,7 @@ const areaMap = new AreaMap();
             justify-content: center;
             flex-direction: column;
             gap: 4px;
+
             .fail-icon-text {
                 color: #FF943D;
                 font-size: 12px;
@@ -1092,6 +1276,7 @@ const areaMap = new AreaMap();
             color: #ffffff;
         }
     }
+
     &.no-share {
         justify-content: center;
     }
@@ -1110,6 +1295,7 @@ const areaMap = new AreaMap();
     align-items: center;
     justify-content: space-between;
     box-shadow: 0px 4px 4px 0px #0000001A;
+
     .warning-l {
         .warning-title {
             display: inline-flex;
@@ -1118,6 +1304,7 @@ const areaMap = new AreaMap();
             font-size: 16px;
             color: #FF953D;
         }
+
         .warning-text {
             color: rgba(0, 0, 0, 0.4);
             font-size: 12px;