Browse Source

feat:改成荔枝数据

wangsisi 2 weeks ago
parent
commit
0b7f348b46

BIN
src/assets/img/common/yw.png


+ 1 - 1
src/components/gardenList.vue

@@ -151,7 +151,7 @@ function normalizeFarmList(data) {
 function getFarmList() {
     VE_API.farm.getFarmList().then(({ data }) => {
         const fullData = normalizeFarmList(data);
-        gardenList.value = fullData;
+        gardenList.value = fullData.filter(item => item.farm_variety == 1);
         if (!fullData.length) {
             emit("loaded", { hasFarm: false });
             emit("selectGarden", { farm_id: null, farm_name: "", geom_wkt: "", defaultOption: false });

+ 103 - 31
src/components/pageComponents/ArchivesFarmTimeLine.vue

@@ -23,7 +23,7 @@
                                             aIdx === r.farmWorkArrangeList.length - 1 &&
                                             rIdx !== r.farmWorkArrangeList.length - 1,
                                     },
-                                ]" @click="handleRowClick(fw)">
+                                ]" :data-work-status="fw.work_status" @click="handleRowClick(fw)">
                                 <div class="card-content">
                                     <div class="card-left" @click.stop="handleStatusDetail(fw)" style="width: 100%">
                                         <div class="left-info">
@@ -50,6 +50,14 @@
                                 </div>
                             </div>
                         </div>
+                        <!-- <template v-if="!shouldShowPhenologyBarTitle(idx)">
+                            <div class="phenology-name" :class="{
+                                'phenology-red': isPhenologyRowGrayByWorkStatus(r),
+                                'text-blue': !isPhenologyRowGrayByWorkStatus(r),
+                            }">
+                                {{ p.phenologyName }}
+                            </div>
+                        </template> -->
                         <template v-if="!shouldShowPhenologyBarTitle(idx)">
                             <div class="phenology-name" :class="{
                                 'phenology-red': isPhenologyRowGrayByWorkStatus(r),
@@ -116,6 +124,81 @@ const restoreTimelineScrollTopWithRetry = (retryCount = 4) => {
     }, 60);
     return false;
 };
+
+/** 时间轴内部滚动:仅当明显离开过顶部时才视为有效缓存,避免首屏请求尚未返回时 deactivate 写入 0 误挡首次定位 */
+const hasSavedTimelineScrollBeyondTop = () => {
+    const raw = sessionStorage.getItem(getTimelineScrollKey());
+    if (raw == null) return false;
+    const n = Number(raw);
+    return !Number.isNaN(n) && n > 4;
+};
+
+/** 农事记录页父级 `.archives-time-line` 的滚动缓存 key,与 agri_record/index.vue 一致;存在有效值时避免 scrollIntoView 抢滚动 */
+const getAgriRecordParentScrollKey = () =>
+    `agriRecordArchivesOuterScroll:${props.farmId ?? "none"}:${route.path}`;
+
+/** 外层滚动:任意已写入数值(含 0)均视为已建立缓存,避免返回后被 scrollIntoView 拉走 */
+const hasSavedParentArchivesScroll = () => {
+    const raw = sessionStorage.getItem(getAgriRecordParentScrollKey());
+    if (raw == null) return false;
+    const n = Number(raw);
+    return !Number.isNaN(n);
+};
+
+/**
+ * 在「农事记录」等页面中,真正滚动的是外层 `.archives-time-line`,本组件 `.timeline-container` 往往随内容撑开、不产生内部滚动条,
+ * 只改 timeline 的 scrollTop 无效。使用 scrollIntoView 让浏览器滚动实际产生滚动的祖先容器,并把目标块垂直居中。
+ */
+const scrollCardIntoNearestScrollportCenter = (card) => {
+    card.scrollIntoView({ block: "center", behavior: "auto", inline: "nearest" });
+};
+
+/** 默认滚动到首个「待执行」(work_status=2),并在可视滚动区域内垂直居中;若无则回退到首个右侧有状态标签的卡片(3、5 不展示标签) */
+const scrollToFirstVisibleStatusCard = () => {
+    const root = timelineContainerRef.value;
+    if (!root || isEmpty.value) return;
+    if (hasSavedTimelineScrollBeyondTop()) return;
+    if (hasSavedParentArchivesScroll()) return;
+    const cards = root.querySelectorAll(".arrange-card[data-work-status]");
+
+    let target = null;
+    for (const card of cards) {
+        const raw = card.getAttribute("data-work-status");
+        if (raw == null || raw === "") continue;
+        const n = Number(raw);
+        if (Number.isNaN(n) || n !== 2) continue;
+        target = card;
+        break;
+    }
+    if (!target) {
+        for (const card of cards) {
+            const raw = card.getAttribute("data-work-status");
+            if (raw == null || raw === "") continue;
+            const n = Number(raw);
+            if (Number.isNaN(n) || n === 3 || n === 5) continue;
+            target = card;
+            break;
+        }
+    }
+    if (!target) return;
+    scrollCardIntoNearestScrollportCenter(target);
+};
+
+const scrollToFirstVisibleStatusCardAfterPaint = () => {
+    nextTick(() => {
+        requestAnimationFrame(() => {
+            scrollToFirstVisibleStatusCard();
+            // 外层布局(flex/高度)晚一帧才稳定时再滚一次,避免第一次滚到错误视口
+            requestAnimationFrame(() => {
+                scrollToFirstVisibleStatusCard();
+            });
+            // 与父页 `restoreArchivesOuterScrollTopWithRetry` 等异步布局错开,避免刚滚好又被恢复成旧位置
+            window.setTimeout(() => {
+                scrollToFirstVisibleStatusCard();
+            }, 120);
+        });
+    });
+};
 // 生成唯一的时间戳,用于确保 key 的唯一性
 const uniqueTimestamp = ref(Date.now());
 // 标记是否为空数据
@@ -157,15 +240,6 @@ const shouldShowPhenologyBarTitle = (idx) => {
     return list[idx]?.phenologyName !== list[idx - 1]?.phenologyName;
 };
 
-const archiveTypeObj = {
-    1: "管理信息",
-    2: "物候进程",
-    3: "物候进程",
-    4: "异常发现",
-    5: "气象风险",
-    6: "农事进度",
-};
-
 const workStatusObj = {
     0: "待校准",
     1: "机动执行",
@@ -173,6 +247,7 @@ const workStatusObj = {
     3: "未激活",
     4: "已认证",
     5: "已失效",
+    6: "已执行",
 };
 
 const statusColorObj = {
@@ -184,6 +259,10 @@ const statusColorObj = {
         color: "#4ABF32",
         background: "rgba(74, 191, 50, 0.2)",
     },
+    6: {
+        color: "#2199F8",
+        background: "rgba(33, 153, 248, 0.2)",
+    },
 };
 
 // 农事卡片状态样式(work_status)
@@ -320,6 +399,9 @@ const getFarmWorkPlan = () => {
             if (ok) {
                 phenologyList.value = normalizeFarmWorksPhenologyList(data);
                 isEmpty.value = phenologyList.value.length === 0;
+                if (!isEmpty.value) {
+                    scrollToFirstVisibleStatusCardAfterPaint();
+                }
             } else {
                 setEmptyTimelineData();
             }
@@ -356,14 +438,13 @@ watch(
 const handleStatusDetail = (fw) => {
     saveTimelineScrollTop();
     emits('card-click');
-    if (fw?.work_status === 4) {
-        router.push({
-            path: "/work_detail",
-            query: {
-                title: fw?.title,
-            },
-        });
-    }
+    router.push({
+        path: "/work_detail",
+        query: {
+            title: fw?.title,
+            id: fw?.id,
+        },
+    });
     // if (fw?.archiveType === 2) {
     //     return;
     // }
@@ -381,16 +462,7 @@ const handleStatusDetail = (fw) => {
     //             }),
     //         },
     //     });
-    // } else {
-    //     router.push({
-    //         path: "/agricultural_detail",
-    //         query: {
-    //             id: fw?.id,
-    //             title: archiveTypeObj[fw?.archiveType],
-    //             content: fw?.title,
-    //         },
-    //     });
-    // }
+    // } 
 };
 
 // 格式化日期为 MM-DD 格式
@@ -562,8 +634,8 @@ onBeforeRouteLeave(() => {
                 }
 
                 &.text-blue {
-                    background: rgba(33, 153, 248, 0.15);
-                    color: #2199f8;
+                    background: #2199f8;
+                    color: #fff;
                     border: 1px solid #2199f8;
                     line-height: 16px;
                     box-sizing: border-box;
@@ -663,7 +735,7 @@ onBeforeRouteLeave(() => {
                             font-size: 12px;
                             color: #fff;
                             background: #FF953D;
-                            border-radius: 2px;
+                            border-radius: 0 4px 0 4px;
                             padding: 0 5px;
                         }
                     }

+ 2 - 0
src/components/pageComponents/PhenologyTrackTimelineItem.vue

@@ -101,6 +101,8 @@ const hasImages = computed(
                 font-size: 13px;
                 color: #ffffff;
                 background: #2199f8;
+                min-width: 42px;
+                box-sizing: border-box;
             }
 
             .track-content {

+ 95 - 5
src/views/old_mini/agri_file/components/fileFloat.vue

@@ -5,8 +5,8 @@
         <div class="file-float-content">
             <div class="float-tabs">
                 <div class="tab-active-bg" :style="activeBgStyle"></div>
-                <div v-for="(item, index) in floatTabLabels" :key="index" class="tab-item" @click="changeTab(item,index)"
-                    :class="{ 'tab-item-active': activeTab === index }">
+                <div v-for="(item, index) in floatTabLabels" :key="index" class="tab-item"
+                    @click="changeTab(item, index)" :class="{ 'tab-item-active': activeTab === index }">
                     {{ item.title }}
                 </div>
             </div>
@@ -17,7 +17,8 @@
                 <div class="tab-content-item" v-for="item in currentList" :key="item.id">
                     <div class="time-tag">{{ item.time }}</div>
                     <div class="item-info">
-                        {{ item.record }} <span class="blue-text">{{ item.ratio }}{{ floatTabLabels[activeTab].value !== 'farming' ? '%' : '' }}</span>
+                        {{ item.record }} <span class="blue-text">{{ item.ratio }}{{ (floatTabLabels[activeTab].value !==
+                            'farming' && item.ratio.length) ? '%' : '' }}</span>
                     </div>
                 </div>
             </div>
@@ -76,11 +77,100 @@ onMounted(() => {
 const mapPolygonData = ref("");
 const farmRecordData = ref({});
 const getFarmRecord = async () => {
-    const res = await VE_API.monitor.getFarmRecord();
+    // const res = await VE_API.monitor.getFarmRecord();
+    const res = {
+        "code": 200,
+        "data": {
+            "abnormal": [
+                {
+                    "id": 2,
+                    "ratio": "5",
+                    "record": "果园出现蒂蛀虫为害果,占比",
+                    "time": "05-12"
+                },
+                {
+                    "id": 3,
+                    "ratio": "8",
+                    "record": "果园出现缺钙裂果症状,占比",
+                    "time": "05-12"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "果园出现荔枝蝽象若虫为害",
+                    "time": "05-03"
+                },
+                {
+                    "id": 1,
+                    "ratio": "",
+                    "record": "果园出现花而不实现象",
+                    "time": "04-15"
+                }
+            ],
+            "farming": [
+                {
+                    "id": 2,
+                    "ratio": "",
+                    "record": "执行了膨果壮果追肥农事",
+                    "time": "05-07"
+                },
+                {
+                    "id": 3,
+                    "ratio": "",
+                    "record": "执行了蒂蛀虫防治农事",
+                    "time": "05-03"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "执行了保花保果药剂喷施农事",
+                    "time": "04-10"
+                },
+                {
+                    "id": 1,
+                    "ratio": "",
+                    "record": "执行了花前病虫综合防治农事",
+                    "time": "03-15"
+                }
+            ],
+            "phenology": [
+                {
+                    "id": 2,
+                    "ratio": "65",
+                    "record": "果园出现果实迅速膨大,占比",
+                    "time": "05-10"
+                },
+                {
+                    "id": 3,
+                    "ratio": "80",
+                    "record": "果园出现谢花坐果,占比",
+                    "time": "04-25"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "果园进入盛花期",
+                    "time": "03-20"
+                },
+                {
+                    "id": 1,
+                    "ratio": "100",
+                    "record": "果园出现花穗抽生",
+                    "time": "02-15"
+                }
+            ],
+            "polygon":[
+                "MULTIPOLYGON (((110.48938292603424 21.417825047316228, 110.4899730323636 21.417990023279287, 110.49068052543606 21.417796493784067, 110.49084867401376 21.41706679240906, 110.49043306149144 21.415388479246303, 110.48927822974991 21.415515383833224, 110.48873888525532 21.416276811355146, 110.48938292603424 21.417825047316228)))",
+                "MULTIPOLYGON (((110.48996192821238 21.41538768609246, 110.49012614274784 21.415411734511736, 110.4903759544273 21.415328199567455, 110.4905258604706 21.415064079395847, 110.4906400745989 21.41417654044062, 110.49084470824545 21.413217617655164, 110.49126349338252 21.41276314060309, 110.49141339942582 21.412484743665402, 110.49060914160583 21.412625131864786, 110.49000713797136 21.41311768029294, 110.48996192821238 21.41538768609246)))",
+                "MULTIPOLYGON (((110.49144762747073 21.417923243516555, 110.49146967053326 21.417909231135127, 110.49165526849174 21.41746823769546, 110.49183769383541 21.416946342581525, 110.49196777103703 21.416824196916536, 110.49210815923641 21.416644944187453, 110.4923865561741 21.416283266114533, 110.49282437699918 21.415975522491067, 110.49311308493458 21.415770095690846, 110.49327568143673 21.415638432181936, 110.49335023788149 21.41553373589761, 110.49344541632172 21.41515064267577, 110.49345255470479 21.414922214419164, 110.49277207842925 21.414636431237852, 110.49198459250442 21.414455575677493, 110.49168240095673 21.414377846617867, 110.49167605572734 21.414614206411272, 110.49148411253958 21.414625310562485, 110.4913199297302 21.414685590241334, 110.4913104118861 21.414970332408416, 110.49127789258574 21.415159896135265, 110.49120730190918 21.415339148864177, 110.49111212346895 21.41546288083657, 110.49093366389366 21.415717483164258, 110.49088924728812 21.415978430721168, 110.49090193774674 21.416193375365253, 110.49094714750589 21.41630679633994, 110.49102963548751 21.41653443144287, 110.49111767554473 21.4168675559838, 110.49114940169142 21.41712136515764, 110.49114860853774 21.41767498641832, 110.4913286544205 21.41780585677361, 110.49144762747073 21.417923243516555)))",
+                // "POLYGON ((110.48760606287757 21.42397019891643, 110.4878409330982 21.423999557694007, 110.48775285676547 21.423823405028536, 110.48760606287757 21.42397019891643))"
+            ]
+        }
+    }
     if (res.code === 200) {
         mapPolygonData.value = res.data.polygon;
         farmRecordData.value = res.data || {};
-        changeTab(floatTabLabels[0],0);
+        changeTab(floatTabLabels[0], 0);
     }
 }
 

+ 22 - 5
src/views/old_mini/agri_file/fileMap.js

@@ -9,6 +9,19 @@ import Text from "ol/style/Text";
 import { Fill, Stroke } from "ol/style";
 import { createEmpty, extend as extendExtent, isEmpty as isEmptyExtent } from "ol/extent";
 
+/** @param {string|string[]|undefined|null} wkt */
+function normalizePolygonWktList(wkt) {
+    if (wkt == null) return [];
+    if (typeof wkt === "string") {
+        const s = wkt.trim();
+        return s ? [s] : [];
+    }
+    if (Array.isArray(wkt)) {
+        return wkt.map((x) => (typeof x === "string" ? x.trim() : "")).filter(Boolean);
+    }
+    return [];
+}
+
 function getRecordPointWkt(item) {
     if (!item || typeof item !== "object") return null;
     const candidates = [item.pointWkt, item.point_wkt, item.positionWkt, item.position_wkt];
@@ -29,7 +42,7 @@ function getRecordPointWkt(item) {
  */
 class FileMap {
     constructor() {
-        /** @type {{ polygonWkt: string, pointItems: object[] } | null} */
+        /** @type {{ polygonWkt: string|string[]|undefined, pointItems: object[] } | null} */
         this._pendingFarmRecordOverlay = null;
         const vectorStyle = new KMap.VectorStyle();
         this.gardenPolygonLayer = new KMap.VectorLayer("gardenPolygonLayer", 999, {
@@ -87,7 +100,7 @@ class FileMap {
 
     /**
      * 农情档案:地块边界 + 记录点位(带 pointWkt / wkt 等)
-     * @param {string} polygonWkt 地块 MULTIPOLYGON / POLYGON WKT
+     * @param {string|string[]} polygonWkt 地块 MULTIPOLYGON / POLYGON WKT,可为多条
      * @param {Array<object>} pointItems 当前 Tab 下列表项
      */
     setFarmRecordOverlay(polygonWkt, pointItems) {
@@ -99,14 +112,18 @@ class FileMap {
         this.gardenPolygonLayer.source.clear();
         this.recordPointLayer.source.clear();
 
-        if (polygonWkt && typeof polygonWkt === "string" && polygonWkt.trim()) {
+        const wktList = normalizePolygonWktList(polygonWkt);
+        wktList.forEach((w, idx) => {
             try {
-                const f = newAreaFeature({ id: "farm-record-boundary", geomWkt: polygonWkt.trim() }, "geomWkt");
+                const f = newAreaFeature(
+                    { id: `farm-record-boundary-${idx}`, geomWkt: w },
+                    "geomWkt"
+                );
                 this.gardenPolygonLayer.source.addFeature(f);
             } catch (e) {
                 console.warn("[FileMap] polygon WKT parse failed", e);
             }
-        }
+        });
 
         const list = Array.isArray(pointItems) ? pointItems : [];
         list.forEach((item, idx) => {

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

@@ -8,8 +8,8 @@
             :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>
@@ -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" },

+ 102 - 10
src/views/old_mini/agri_record/index.vue

@@ -12,8 +12,8 @@
             <garden-list ref="gardenListRef" :garden-id="selectedGardenId" @loaded="handleGardenLoaded"
                 @selectGarden="handleGardenSelected" />
         </div>
-        <!-- 作物档案 -->
-        <div class="archives-time-line" v-show="activeGardenTab === 'current'">
+        <!-- 作物档案:外层可滚动,滚动位置单独缓存以便路由/Tab 返回后恢复 -->
+        <div ref="archivesScrollAreaRef" class="archives-time-line" v-show="activeGardenTab === 'current'">
             <div class="trend-monitor-list">
                 <div class="trend-monitor-card" @click="handleTrendMonitorCardClick(item)"
                     v-for="(item, index) in trendMonitorMockList" :key="index">
@@ -44,14 +44,45 @@
 
 <script setup>
 import customHeader from "@/components/customHeader.vue";
-import { ref, computed, onActivated, onMounted } from "vue";
+import { ref, computed, onActivated, onDeactivated, watch, nextTick } from "vue";
 import { useStore } from "vuex";
 import weatherInfo from "@/components/weatherInfo.vue";
-import { useRoute, useRouter } from "vue-router";
+import { useRoute, useRouter, onBeforeRouteLeave } from "vue-router";
 import ArchivesFarmTimeLine from "@/components/pageComponents/ArchivesFarmTimeLine.vue";
 import gardenList from "@/components/gardenList.vue";
 
 const router = useRouter();
+const route = useRoute();
+
+const archivesScrollAreaRef = ref(null);
+/** 从趋势卡跳转详情时已主动保存滚动;避免 leave/deactivate 阶段读到异常 scrollTop 覆盖 sessionStorage */
+const blockArchivesScrollSaveOnce = ref(false);
+const getArchivesOuterScrollKey = () =>
+    `agriRecordArchivesOuterScroll:${gardenId?.value ?? "none"}:${route.path}`;
+
+const saveArchivesOuterScrollTop = () => {
+    if (!archivesScrollAreaRef.value || activeGardenTab.value !== "current") return;
+    const scrollTop = archivesScrollAreaRef.value.scrollTop || 0;
+    sessionStorage.setItem(getArchivesOuterScrollKey(), String(scrollTop));
+};
+
+const restoreArchivesOuterScrollTop = () => {
+    if (!archivesScrollAreaRef.value || activeGardenTab.value !== "current") return false;
+    const raw = sessionStorage.getItem(getArchivesOuterScrollKey());
+    if (raw == null) return false;
+    const scrollTop = Number(raw);
+    if (Number.isNaN(scrollTop)) return false;
+    const el = archivesScrollAreaRef.value;
+    const maxScrollTop = Math.max(0, (el.scrollHeight || 0) - (el.clientHeight || 0));
+    el.scrollTop = Math.min(scrollTop, maxScrollTop);
+    return true;
+};
+
+const restoreArchivesOuterScrollTopWithRetry = (retryCount = 6) => {
+    const ok = restoreArchivesOuterScrollTop();
+    if (ok || retryCount <= 0) return;
+    setTimeout(() => restoreArchivesOuterScrollTopWithRetry(retryCount - 1), 50);
+};
 
 const defaultGardenId = ref(null);
 const selectedGardenId = ref(null);
@@ -64,10 +95,41 @@ 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,
-    });
+    // const res = await VE_API.monitor.getFarmRiskAndTracking({
+    //     farm_id: gardenId.value,
+    //     crop_type: JSON.parse(localStorage.getItem("selectedFarmData")).farm_variety,
+    // });
+    const res = {
+        "code": 200,
+        "data": {
+            "growth_abnormal_tracking": {
+                "first_work": {
+                    "interaction_issue": "是否有10%的荔枝出现落果裂果?",
+                    "work_name": "长势异常态势跟踪",
+                    "work_reason_short": "缺锌导致生长缓慢"
+                },
+                "risk_level": 2,
+                "work_id": 4393
+            },
+            "pest_risk_assessment": {
+                "first_work": {
+                    "interaction_issue": "是否有10%的荔枝发现蒂蛀虫?",
+                    "work_name": "病虫害态势监控",
+                    "work_reason_short": "病虫害影响作物生长"
+                },
+                "risk_level": 2,
+                "work_id": 4394
+            },
+            "phenology_tracking": {
+                "first_work": {
+                    "interaction_issue": "是否有60%的荔枝进入转色期",
+                    "work_name": "物候跟踪记录",
+                    "work_reason_short": "预计到达病虫防控关键期"
+                },
+                "work_id": 4393
+            }
+        }
+    }
     if (res.code === 200) {
         trendMonitorMockList.value.push(res.data?.growth_abnormal_tracking);
         trendMonitorMockList.value.push(res.data?.pest_risk_assessment);
@@ -90,6 +152,7 @@ const isHeaderShow = ref(false);
 const weatherInfoRef = ref(null);
 
 onActivated(() => {
+    blockArchivesScrollSaveOnce.value = false;
     // 用来接收我的农场跳转过来的农场详情逻辑
     if (route.query.isHeaderShow) {
         isHeaderShow.value = true;
@@ -98,11 +161,38 @@ onActivated(() => {
     const savedFarmId = localStorage.getItem("selectedFarmId");
     selectedGardenId.value = savedFarmId ? Number(savedFarmId) : null;
     gardenListRef.value?.refreshFarmList?.();
+    nextTick(() => {
+        requestAnimationFrame(() => {
+            restoreArchivesOuterScrollTopWithRetry();
+        });
+    });
+});
+
+onDeactivated(() => {
+    if (blockArchivesScrollSaveOnce.value) return;
+    saveArchivesOuterScrollTop();
+});
+
+onBeforeRouteLeave(() => {
+    if (blockArchivesScrollSaveOnce.value) return;
+    saveArchivesOuterScrollTop();
+});
+
+watch(activeGardenTab, (val, oldVal) => {
+    if (oldVal === "current" && val !== "current") {
+        saveArchivesOuterScrollTop();
+    }
+    if (val === "current") {
+        nextTick(() => {
+            requestAnimationFrame(() => {
+                restoreArchivesOuterScrollTopWithRetry();
+            });
+        });
+    }
 });
 
 const store = useStore();
 const tabBarHeight = computed(() => store.state.home.tabBarHeight);
-const route = useRoute();
 
 const isExpanded = ref(false);
 const weatherExpanded = (isExpandedValue) => {
@@ -133,11 +223,13 @@ const changeGarden = ({ id }) => {
 };
 
 const handleTrendMonitorCardClick = (item) => {
+    saveArchivesOuterScrollTop();
+    blockArchivesScrollSaveOnce.value = true;
     router.push({
         path: "/record_details",
         query: { workId: item.work_id, type: item.first_work.work_name },
     });
-}
+};
 </script>
 
 <style scoped lang="scss">

+ 19 - 57
src/views/old_mini/growth_report/index.vue

@@ -10,12 +10,12 @@
             </weather-info>
 
             <!-- 邀请关注 -->
-            <div class="invite-follow" v-if="currentFarmName && activeGardenTab === 'current'">
+            <!-- <div class="invite-follow" v-if="currentFarmName && activeGardenTab === 'current'">
                 <div class="invite-content">
                     <icon name="share" />
                     <span>邀请关注</span>
                 </div>
-            </div>
+            </div> -->
         </div>
 
         <!-- 农场列表 -->
@@ -38,12 +38,12 @@
                 <img class="header-img" src="@/assets/img/home/report.png" alt="" />
 
                 <div class="report-header">
-                    <div class="type-tabs report-tabs">
+                    <!-- <div class="type-tabs report-tabs">
                         <div class="type-item" :class="{ 'type-item-active': activeReportIndex === 0 }">作物长势</div>
                         <div class="type-item" :class="{ 'type-item-active': activeReportIndex === 1 }">历史风险</div>
                         <div class="type-item" :class="{ 'type-item-active': activeReportIndex === 2 }">土壤改良</div>
                         <div class="type-item" :class="{ 'type-item-active': activeReportIndex === 3 }">种植建议</div>
-                    </div>
+                    </div> -->
                     <div class="type-tabs" v-if="subjectData.length > 1">
                         <div
                             @click="handleTypeTabClick(item, index)"
@@ -61,7 +61,7 @@
                     </div>
 
                     <div class="time-tag">{{ workItems?.[0]?.reportDate || new Date().toISOString().split('T')[0] }}</div>
-                    <div class="report-title">水稻长势报告</div>
+                    <div class="report-title">荔枝长势报告</div>
                     <div class="report-info">
                         <div class="info-item">
                             <img class="info-icon" src="@/assets/img/home/farm.png" alt="" />
@@ -70,53 +70,15 @@
                     </div>
                 </div>
 
-                <!-- <div class="report-box warning-bg">
-                    <div class="box-title warning">今日巡园重点</div>
-                    <div class="box-text w-100">
-                        <div class="row">
-                            <div v-for="(card, cardI) in todayPatrolFocus" :key="cardI" class="status-card"
-                                :class="'today-' + card.color" @click="handleTodayPatrolFocusClick(card)">
-                                <div class="status-title"
-                                    :class="{ 'status-title-small': (card.title || '').length > 6 }">
-                                    {{ card.title }}
-                                </div>
-                                <div class="status-sub">
-                                    {{ card.description }}
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="report-box warning-bg">
-                    <div class="box-title warning">待执行农事</div>
-                    <div class="box-text w-100">
-                        <div class="row">
-                            <div v-for="(card, cardI) in pendingFarmWork" :key="cardI" class="status-card pending-card"
-                                :style="{ background: card.purposeColor, color: card.purposeColor === '#FFFFFF' ? '#000' : '#fff' }"
-                                :class="card.type" @click="handlePendingFarmWorkClick(card)">
-                                <div v-if="card.executionLimitDays || card.executionLimitDays === 0" class="tag-name"
-                                    :style="{ borderColor: card.purposeColor, color: card.purposeColor }">限时 {{
-                                        card.executionLimitDays }} 天</div>
-                                <div class="status-title"
-                                    :class="{ 'status-title-small': (card.name || '').length > 6 }">
-                                    {{ card.name }}
-                                </div>
-                                <div class="status-sub pending-sub"
-                                    :style="{ color: card.purposeColor === '#FFFFFF' ? '#000' : '#fff' }">
-                                    {{ card.purposeName }}
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div> -->
-
                 <div class="report-box">
                     <div class="box-title">气象风险</div>
                     <div class="box-text">
                         <div class="box-bg">
-                            <div class="types-info">
+                            <!-- <div class="types-info">
                                 当前 <span class="text-bold">水稻</span> 处于为  分蘖初期<span class="text-link" @click="handleAdjustPopup">(校准物候期)</span>
+                            </div> -->
+                            <div class="types-info">
+                                当前 <span class="text-bold">荔枝</span> 处于膨果期
                             </div>
                         </div>
                         <div class="warning-part">
@@ -147,10 +109,10 @@
                             <div class="report-part">
                                 <div class="part-top">
                                     <div class="part-title">{{ part.title }}</div>
-                                    <div class="part-link">
+                                    <!-- <div class="part-link">
                                         <el-icon class="part-link-icon"><Link /></el-icon>
                                         <div class="text-link">查看农事</div>
-                                    </div>
+                                    </div> -->
                                 </div>
                                 <div class="part-text">{{ part.description }}</div>
                             </div>
@@ -164,10 +126,10 @@
                             <div class="report-part">
                                 <div class="part-top">
                                     <div class="part-title">{{ part.title }}</div>
-                                    <div class="part-link">
+                                    <!-- <div class="part-link">
                                         <el-icon class="part-link-icon"><Link /></el-icon>
                                         <div class="text-link">查看互动</div>
-                                    </div>
+                                    </div> -->
                                 </div>
                                 <div class="part-text">{{ part.description }}</div>
                             </div>
@@ -273,7 +235,7 @@ const swipeRef = ref(null);
 const riskList = ref([
     {
         title: '病虫风险',
-        description: '当前分蘖期对病虫害高度敏感,易受害。经过飞鸟智慧大脑计算病虫风险:病虫胁迫指数处于中等水平,存在一定的病虫害发生风险,局部区域可能出现病害流行或虫害爆发,需加强监测预警,及时巡园'
+        description: '当前膨果期对病虫害高度敏感,易受害。经过飞鸟智慧大脑计算病虫风险:病虫胁迫指数处于中等水平,存在一定的病虫害发生风险,局部区域可能出现病害流行或虫害爆发,需加强监测预警,及时巡园'
     },
     {
         title: '阴雨寡照风险',
@@ -284,26 +246,26 @@ const riskList = ref([
 const adviceList = ref([
     {
         title: '根外追肥',
-        description: '分蘖前期持续阴雨寡照,需排水增氧、根外追肥促分蘖恢复'
+        description: '荔枝膨果期遇持续阴雨寡照,需及时排水防渍,重点根外喷施磷酸二氢钾并配合补充钙硼肥,以快速恢复树势、促进膨果壮果。'
     },
     {
         title: '虫害防治',
-        description: '通过叶面喷施杀虫剂,快速降低刺吸式害虫种群数量,保护心叶和叶鞘正常生长'
+        description: '通过叶面喷施针对性杀虫剂,快速压低蒂蛀虫种群数量,保护果实免受蛀害。'
     },
 ]);
 
 const patrolList = ref([
     {
         title: '进程互动',
-        description: '是否有60%的水稻进入分蘖盛期?'
+        description: '是否有60%的荔枝进入果实转色期?'
     },
     {
         title: '长势互动',
-        description: '是否有10%的水稻出现缺素症状?'
+        description: '是是否有10%的荔枝出现生理落果或裂果症状'
     },
     {
         title: '病虫互动',
-        description: '是否有10%的水稻发生病虫害特征?'
+        description: '是否有10%的荔枝发现蒂蛀虫为害特征?'
     },
 ]);
 //

+ 136 - 42
src/views/old_mini/recordDetails/index.vue

@@ -4,22 +4,22 @@
         <div class="record-content">
             <div class="record-header" v-if="route.query.type == '长势异常态势跟踪'">
                 <span>长势异常态势跟踪</span>
-                <div class="question">稻株新叶基部是否出现黄白化条纹?</div>
+                <div class="question">果径是否显著小于正常果,且果皮失去光泽、呈现暗哑状态?</div>
             </div>
             <div class="record-header" v-else-if="route.query.type == '病虫害态势监控'">
                 <span>病虫害态势监控</span>
-                <div class="question">稻蓟马、二化螟、苗瘟、叶瘟、立枯病、纹枯病</div>
+                <div class="question">蒂蛀虫、荔枝蝽蟓、炭疽病、霜疫霉病</div>
             </div>
             <div class="record-header" v-else>
                 <span>{{ workDetail.interaction_type }}</span>
-                <div class="question">{{ workDetail.interaction_issue }}</div>
+                <div class="question">果实是否开始由扁圆变圆、横径明显增大?</div>
             </div>
             <div class="record-body">
                 <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土壤锌有效性低,长期渍水还原条件使锌沉淀,低温抑制根系对锌的吸收,高磷施肥加重缺锌症状。需结合土壤类型综合诊断,及时补锌促蘖。" />
+                            content="当前荔枝处于果实膨大期,近期存在强降水和强对流天气频发的情况,且当前识别到阴雨气象风险较高3级,累计阴雨天数达12天、日均湿度约91%。连续阴雨导致光照不足,月累计日照时数较常年偏少17%,叶片光合效率下降,碳水化合物合成减少" />
                     </div>
                     <div class="tabs-list" v-if="!showMap">
                         <div class="item-tab" :class="{ 'item-tab--active': activeTab1 === index }"
@@ -29,19 +29,19 @@
                     <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、缺锌与缺铁区别:缺锌是叶脉间黄白但中脉及叶脉附近仍绿(基部最明显);缺铁是全叶黄白而叶脉仍绿(顶部最明显)。" />
+                            content="果实膨大速度慢,果皮颜色黄绿、光泽度差,严重时果面出现细微水裂纹;萎蔫时叶片下垂卷曲;缺氮时老叶均匀黄化;缺钾时老叶叶缘焦枯;缺镁时老叶叶肉黄化、叶脉仍绿;缺钙时果实易裂果;缺硼时果实发育不良、果皮木栓化;缺锌时果实大小不均;缺铁时新叶黄白失绿" />
                     </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个,缺锌田块分蘖极少或全无。对比缺锌区域与正常区域稻株高度和叶片大小,测量节间长度判断是否明显缩短。拔根检查根系——砂土田看是否偏细偏白,黏土田看是否发黄无新根,酸性田看根尖是否膨大变黑,盐碱田看根系是否脱水状,重金属田看根系是否短粗,水稻土看根系是否发黑腐臭。发现异常症状后请拍照上传,及时存档" />
+                            content="重点巡视低洼地、排水不畅的粘重土壤果园,以及树冠中下部及内膛果实。观察果实膨大进度,对比不同方位果穗大小差异;观察叶片萎蔫程度和黄化部位。拔根检查根系状态——砂土看根系是否偏白不烂,黏土看是否发软发臭,酸性土看根尖是否膨大变黑,盐碱土看是否被泥浆包裹,重金属土看是否发黑有异味,荔枝土看根尖是否变黑腐臭。根系受损时先排水松土养根,暂不施根肥,叶面维持,等新根萌发后再施根肥。发现异常症状后请拍照上传,及时存档" />
                     </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℃,该环境条件十分有利于稻蓟马、二化螟等害虫活动及苗瘟、立枯病、叶瘟、纹枯病等病菌侵染。此时水稻群体快速扩大,田间郁蔽度增加,通风透光下降,进一步加大病虫发生风险。需抓紧巡田,同步做好虫情、病情的动态监测,防范风险升级" />
+                            content="当前荔枝处于果期,预测田间病虫害气象风险2级,近期湿度达88%、日均气温达30℃,该环境条件十分有利于害虫活动和病原菌侵染。果期是荔枝产量形成的关键阶段,幼果皮层薄嫩、抗逆性弱,一旦遭受蒂蛀虫、荔枝蝽象、霜疫霉病、炭疽病等主要病虫为害,将直接导致落果、烂果,严重影响产量和品质。需抓紧巡园,同步做好虫情、病情的动态监测,防范风险升级" />
                     </div>
                     <div class="pest-classify-picker">
                         <div class="pest-classify-picker__row pest-classify-picker__row--top">
@@ -78,7 +78,7 @@
                     <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" />
+                            content="膨果期果实开始横向生长,由扁圆形逐渐转为圆球形,是果肉细胞快速分裂膨大和干物质积累的关键阶段,氮和钾需求双高。氮促进果肉细胞分裂膨大,钾促进光合产物转运和糖分积累。此时养分供应不足会导致果实膨大受阻、单果重偏低,需及时根部追肥保障果实发育。" />
                     </div>
                     <div class="card-item">
                         <span class="item-label">巡园要点:</span>
@@ -88,7 +88,8 @@
                     <div class="card-item">
                         <span class="item-label">表型特征:</span>
                         <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
-                            :content="workDetail.phenotypic_characteristics" />
+                            content="果实由扁圆形开始横向增宽,果皮青绿色有光泽,果实横径明显增大,果肩逐渐饱满。
+巡园要点:重点观察树冠外围中上部结果枝,检查果实形状变化和横径大小,统计进入快速膨大的果实比例。拍照记录果实膨大状态,上传存档。" />
                     </div>
                 </div>
                 <!-- <div class="tabs-list" v-if="!showMap">
@@ -119,7 +120,7 @@
                     <div v-if="!showMap && route.query.type == '物候跟踪记录'" class="border-wrap no-map-wrap">
                         <div class="question-info">
                             <span class="title">关键防治需肥期评估:</span>
-                            <span class="content">是否有60%的水稻进入分蘖盛期?</span>
+                            <span class="content">是否有60%的荔枝进入膨果期?                            </span>
                             <div class="current-status">当前现状:当前{{ curStage.label }}进入到{{ curStage.periodTitle }}</div>
                         </div>
                         <div class="time-line">
@@ -147,9 +148,9 @@
                 </div>
             </div>
         </div>
-        <div class="custom-bottom-fixed-btns">
+        <!-- <div class="custom-bottom-fixed-btns">
             <div class="bottom-btn secondary-btn">转发记录</div>
-        </div>
+        </div> -->
 
         <!-- <div class="phenology-tip-banner">
             <div class="banner__left">
@@ -253,20 +254,20 @@ const pestTopIndex = ref(0);
 const pestTopLabels = ['病害', '虫害'];
 const pestCategoryIndex = ref(0);
 const pestDetailIndex = ref(0);
-const pestCategoryLabels = ref(['真菌类', '细菌类', '病毒类', '其它']);
-const pestDetailLabels = ref(['苗瘟', '立枯病', '叶瘟', '纹枯病']);
+const pestCategoryLabels = ref(['真菌类', '钻蛀类', '病毒类', '其它']);
+const pestDetailLabels = ref(['霜疫霉病', '炭疽病', '叶瘟', '纹枯病']);
 
-const text1 = ref('多发生于3叶期前,病苗基部灰黑色,上部黄褐卷曲枯死,湿度大时病部表面产生灰绿色霉层,病苗成簇或成片死亡')
-const text2 = ref('重点巡查苗床或直播田低洼积水处、通风不良区域,观察幼苗是否成片黄化枯死,拔起病苗检查基部是否变黑、有无灰绿色霉层。注意与生理性黄化区分:苗瘟病苗基部有明显霉层,生理性黄化无霉层。发现病苗后请拍照上传,及时存档,便于记录发生程度与防控节点')
+const text1 = ref('果实感病后出现水渍状褪绿斑块,湿度大时表面产生白色霜状霉层,后病部变褐软腐,果实腐烂脱落。膨大期至转色期果实感病后病斑扩展迅速,果肉褐变腐烂,有酸臭味,病果易脱落。')
+const text2 = ref('重点巡查果园低洼积水处、密蔽通风不良处的果穗,观察果实表面有无水渍状褪绿斑块,清晨或雨后湿度大时查看病斑表面有无白色霜状霉层,用手轻捏感病果实检查是否软腐,闻有无酸臭味。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点')
 const handlePestTopClick = (index) => {
     pestTopIndex.value = index;
     handlePestCategoryClick(0)
     if (index === 0) {
-        pestCategoryLabels.value = ['真菌类', '细菌类', '病毒类', '其它'];
-        pestDetailLabels.value = ['苗瘟', '立枯病', '叶瘟', '纹枯病'];
+        pestCategoryLabels.value = ['真菌类', '钻蛀类', '病毒类', '其它'];
+        pestDetailLabels.value = ['霜疫霉病', '炭疽病', '叶瘟', '纹枯病'];
     } else {
-        pestCategoryLabels.value = ['刺吸类', '咀嚼式', '钻蛀类', '其它'];
-        pestDetailLabels.value = ['稻蓟马'];
+        pestCategoryLabels.value = ['啃食类', '咀嚼式', '钻蛀类', '其它'];
+        pestDetailLabels.value = ['荔枝蝽象'];
     }
 };
 
@@ -275,12 +276,18 @@ const handlePestCategoryClick = (index) => {
     handlePestDetailClick(0)
     if (index === 0) {
         if (pestTopIndex.value == 1) {
-            pestDetailLabels.value = ['稻蓟马'];
+            pestDetailLabels.value = ['荔枝蝽象'];
         } else {
-            pestDetailLabels.value = ['苗瘟', '立枯病', '叶瘟', '纹枯病'];
+            pestDetailLabels.value = ['霜疫霉病', '炭疽病', '叶瘟', '纹枯病'];
         }
     } else {
-        pestDetailLabels.value = ['二化螟'];
+        if (pestTopIndex.value == 1) {
+            pestDetailLabels.value = ['二化螟'];
+        } else {
+            text1.value = '成虫为小型蛾类,幼虫钻蛀果实,从果蒂附近蛀入果心,蛀食果核和果肉,造成果实内部充满虫粪。受害果实外表初期无明显异常,后期果蒂周围变黑、果实提前着色变红脱落("红果"现象),落果剖开可见幼虫及虫粪。'
+            text2.value = '重点巡查树冠内膛和下垂枝的果穗,注意捡拾地面落果,剖开检查果核周围有无幼虫和虫粪。观察树上果实有无果蒂变黑、提前转红的异常果。成虫调查时,在晨昏成虫活动期用手掌用力拍打树冠内膛的枝干,观察是否有小蛾受惊飞出,以此判断成虫发生密度。关键防治节点需通过收集落果观察蛹的羽化进度来确定打药时机。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点。'
+            pestDetailLabels.value = ['蒂蛀虫'];
+        }
     }
 };
 
@@ -288,22 +295,16 @@ 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 = '重点巡查田间郁蔽度高、排水不畅的田块,拨开稻丛下部叶鞘,寻找云纹状病斑及白色菌丝团。用手在稻丛基部附近水面轻捞,看是否有褐色菌核漂浮。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点';
+            text1.value = '果实感病后出现水渍状褪绿斑块,湿度大时表面产生白色霜状霉层,后病部变褐软腐,果实腐烂脱落。膨大期至转色期果实感病后病斑扩展迅速,果肉褐变腐烂,有酸臭味,病果易脱落。';
+            text2.value = '重点巡查果园低洼积水处、密蔽通风不良处的果穗,观察果实表面有无水渍状褪绿斑块,清晨或雨后湿度大时查看病斑表面有无白色霜状霉层,用手轻捏感病果实检查是否软腐,闻有无酸臭味。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点。';
+        } else {
+            text1.value = '果实感病后出现暗褐色水渍状斑点,后扩展为圆形或不规则形黑褐色凹陷病斑,边缘明显,湿度大时病斑表面出现粉红色黏稠孢子堆。病斑深入果肉导致腐烂,病果干缩后挂在枝头不脱落形成僵果。';
+            text2.value = '重点巡查树冠内膛及下部枝条的果穗,观察果实表面有无暗褐色至黑褐色凹陷病斑,病斑边缘是否清晰,在湿度大的清晨查看病斑表面有无粉红色黏稠物。注意与霜疫霉病区分:炭疽病病斑凹陷干缩,霜疫霉病病部湿软腐烂。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点。';
         }
-    } else {
+    }else {
         if (pestCategoryIndex.value === 0) {
-            text1.value = '成虫、若虫锉吸心叶及嫩叶汁液,受害叶片出现黄白色条斑,叶尖卷曲干枯,严重时全叶枯缩,稻株生长停滞,分蘖减少'
-            text2.value = '重点巡查田边及氮肥偏高的旺长田块,拨开心叶及未完全展开的叶片,用放大镜观察有无细小黑色或黄色虫体在活动,同时查看叶尖是否卷曲干枯、叶面有无黄白色条斑。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点'
+            text1.value = '成虫和若虫刺吸幼果和嫩梢汁液,受害果实出现褐色坏死斑点,果实发育受阻、果形不正,严重时幼果大量脱落。成虫体长约25mm、黄褐色盾形,受惊时释放臭液;若虫体色鲜红至橙红,群集为害。'
+            text2.value = '重点巡查树冠中上部外围果穗集中处,观察果实和果梗上是否有黄褐色盾形成虫或红色群集若虫。轻摇枝条看是否有成虫受惊飞逃,同时闻是否有刺激性臭味。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点。'
         } else {
             text1.value = '幼虫钻蛀稻茎基部,造成枯心苗,受害株心叶变黄枯死,茎秆基部有圆形蛀孔及虫粪排出,轻拔枯心苗易折断,断口可见幼虫或虫道'
             text2.value = '重点巡查田间分散出现的枯心团或枯心带,沿行间逐株检查心叶是否变黄萎蔫。拔取枯心株,用刀片或指甲剥开茎秆基部,检查内部有无淡褐色或灰白色幼虫、虫粪及蛀道。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点'
@@ -325,7 +326,7 @@ const tabsList = ref([
 
 const activeTab1 = ref(0)
 const tabsList1 = ref([
-    { label: '植株缺锌', value: 0 },
+    { label: '膨果受阻', value: 0 },
     { label: '长势缓慢', value: 1 },
     { label: '植株旺长', value: 2 },
     { label: '叶片萎蔫', value: 3 },
@@ -501,7 +502,96 @@ const getWorkDetail = async () => {
 }
 
 const getFarmRecord = async () => {
-    const res = await VE_API.monitor.getFarmRecord();
+    // const res = await VE_API.monitor.getFarmRecord();
+    const res = {
+        "code": 200,
+        "data": {
+            "abnormal": [
+                {
+                    "id": 2,
+                    "ratio": "5",
+                    "record": "果园出现蒂蛀虫为害果,占比",
+                    "time": "05-12"
+                },
+                {
+                    "id": 3,
+                    "ratio": "8",
+                    "record": "果园出现缺钙裂果症状,占比",
+                    "time": "05-12"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "果园出现荔枝蝽象若虫为害",
+                    "time": "05-03"
+                },
+                {
+                    "id": 1,
+                    "ratio": "",
+                    "record": "果园出现花而不实现象",
+                    "time": "04-15"
+                }
+            ],
+            "farming": [
+                {
+                    "id": 2,
+                    "ratio": "",
+                    "record": "执行了膨果壮果追肥农事",
+                    "time": "05-07"
+                },
+                {
+                    "id": 3,
+                    "ratio": "",
+                    "record": "执行了蒂蛀虫防治农事",
+                    "time": "05-03"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "执行了保花保果药剂喷施农事",
+                    "time": "04-10"
+                },
+                {
+                    "id": 1,
+                    "ratio": "",
+                    "record": "执行了花前病虫综合防治农事",
+                    "time": "03-15"
+                }
+            ],
+            "phenology": [
+                {
+                    "id": 2,
+                    "ratio": "65",
+                    "record": "果园出现果实迅速膨大,占比",
+                    "time": "05-10"
+                },
+                {
+                    "id": 3,
+                    "ratio": "80",
+                    "record": "果园出现谢花坐果,占比",
+                    "time": "04-25"
+                },
+                {
+                    "id": 4,
+                    "ratio": "",
+                    "record": "果园进入盛花期",
+                    "time": "03-20"
+                },
+                {
+                    "id": 1,
+                    "ratio": "100",
+                    "record": "果园出现花穗抽生",
+                    "time": "02-15"
+                }
+            ],
+            "polygon":[
+                "MULTIPOLYGON (((110.48938292603424 21.417825047316228, 110.4899730323636 21.417990023279287, 110.49068052543606 21.417796493784067, 110.49084867401376 21.41706679240906, 110.49043306149144 21.415388479246303, 110.48927822974991 21.415515383833224, 110.48873888525532 21.416276811355146, 110.48938292603424 21.417825047316228)))",
+                "MULTIPOLYGON (((110.48996192821238 21.41538768609246, 110.49012614274784 21.415411734511736, 110.4903759544273 21.415328199567455, 110.4905258604706 21.415064079395847, 110.4906400745989 21.41417654044062, 110.49084470824545 21.413217617655164, 110.49126349338252 21.41276314060309, 110.49141339942582 21.412484743665402, 110.49060914160583 21.412625131864786, 110.49000713797136 21.41311768029294, 110.48996192821238 21.41538768609246)))",
+                "MULTIPOLYGON (((110.49144762747073 21.417923243516555, 110.49146967053326 21.417909231135127, 110.49165526849174 21.41746823769546, 110.49183769383541 21.416946342581525, 110.49196777103703 21.416824196916536, 110.49210815923641 21.416644944187453, 110.4923865561741 21.416283266114533, 110.49282437699918 21.415975522491067, 110.49311308493458 21.415770095690846, 110.49327568143673 21.415638432181936, 110.49335023788149 21.41553373589761, 110.49344541632172 21.41515064267577, 110.49345255470479 21.414922214419164, 110.49277207842925 21.414636431237852, 110.49198459250442 21.414455575677493, 110.49168240095673 21.414377846617867, 110.49167605572734 21.414614206411272, 110.49148411253958 21.414625310562485, 110.4913199297302 21.414685590241334, 110.4913104118861 21.414970332408416, 110.49127789258574 21.415159896135265, 110.49120730190918 21.415339148864177, 110.49111212346895 21.41546288083657, 110.49093366389366 21.415717483164258, 110.49088924728812 21.415978430721168, 110.49090193774674 21.416193375365253, 110.49094714750589 21.41630679633994, 110.49102963548751 21.41653443144287, 110.49111767554473 21.4168675559838, 110.49114940169142 21.41712136515764, 110.49114860853774 21.41767498641832, 110.4913286544205 21.41780585677361, 110.49144762747073 21.417923243516555)))",
+                // "POLYGON ((110.48760606287757 21.42397019891643, 110.4878409330982 21.423999557694007, 110.48775285676547 21.423823405028536, 110.48760606287757 21.42397019891643))"
+            ]
+        }
+    }
     if (res.code === 200 && res.data?.abnormal.length) {
         if(route.query.type == '物候跟踪记录'){
             phenologyTrackList.value = res.data.phenology.map(item => {
@@ -567,9 +657,12 @@ const getFindPhenologyInfo = async () => {
     background: #f2f3f5;
 
     .record-content {
-        height: calc(100% - 120px);
+        // height: calc(100% - 120px);
+        // overflow: auto;
+        // padding-bottom: 120px;
+        height: calc(100% - 40px);
         overflow: auto;
-        padding-bottom: 120px;
+        // padding-bottom: 120px;
 
         .record-header {
             color: #fff;
@@ -810,7 +903,8 @@ const getFindPhenologyInfo = async () => {
         position: fixed;
         left: 12px;
         right: 12px;
-        bottom: calc(90px + env(safe-area-inset-bottom, 0px));
+        // bottom: calc(90px + env(safe-area-inset-bottom, 0px));
+        bottom: 20px;
         z-index: 99;
         display: flex;
         align-items: center;

+ 88 - 144
src/views/old_mini/work_detail/index.vue

@@ -4,10 +4,9 @@
 
         <div class="work-detail-content">
             <!-- 顶部状态 -->
-            <div class="content-status status-5">
-                <!-- <div class="content-status" :class="['status-' + detail?.flowStatus, 'audit-' + getAuditStatusPriority(detail?.executeEvidenceAuditStatus)]"> -->
+            <div class="content-status" :class="['status-' + farmData?.work_status]">
                 <div class="status-l">
-                    <div class="status-title">{{ headerTitle }}</div>
+                    <div class="status-title">{{ farmData.work_name }}</div>
                     <!-- <div class="status-sub" v-if="triggerDateText && (detail?.flowStatus == -1 || detail?.flowStatus == -2)">
                         执行时间已经过去 {{ Math.abs(daysDiff) }} 天了
                     </div>
@@ -23,15 +22,11 @@
                 </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">
                 <!-- 农事组信息 -->
-                <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-info group-box" v-if="farmData.interaction_reason">
                     <div class="group-name">
-                        <!-- 该农事为 <span class="light-text">标准防治溯源农事</span> ,最佳执行时间为 <span class="light-text">{{detail?.executionLimitDays}}天</span>, 
-                        请及时完成溯源认证上传 -->
-                        {{ text5 }}
+                        {{ farmData.interaction_reason }}
                     </div>
                 </div>
 
@@ -149,7 +144,7 @@
                         <div class="area-list">
                             <div class="area-item">
                                 <div class="area-l">
-                                    权属田块1:{{ time1 }}
+                                    权属田块1:{{ farmData.work_time }}
                                     <span class="area-tag"
                                         style="background: rgba(55, 193, 27, 0.1); color: #37C11B;">已认证</span>
                                     <!-- <span class="area-tag">未激活</span> -->
@@ -157,25 +152,20 @@
                                 <!-- <div class="area-r">我已完成</div> -->
                             </div>
                         </div>
-                        <div class="ecological-plant-card">
-                            <!-- <div class="ecological-plant-text">
+                        <!-- <div class="ecological-plant-card">
+                            <div class="ecological-plant-text">
                                 <div class="ecological-plant-line">
                                     生态种植方式:{{ ecologicalPlantingMethodText }}
                                 </div>
                                 <div class="ecological-plant-line ecological-plant-line--sub">
                                     来自于 {{ ecologicalExecutorOrg }}
                                 </div>
-                            </div> -->
+                            </div>
                             <div class="ecological-plant-gallery">
-                                <img
-                                    v-for="(src, idx) in ecologicalPlantThumbUrls"
-                                    :key="idx"
-                                    class="ecological-plant-thumb"
-                                    :src="src"
-                                    alt=""
-                                />
+                                <img v-for="(src, idx) in ecologicalPlantThumbUrls" :key="idx"
+                                    class="ecological-plant-thumb" :src="src" alt="" />
                             </div>
-                        </div>
+                        </div> -->
                     </div>
                 </div>
 
@@ -183,19 +173,19 @@
                     <div class="work-info">
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>农事目的</div>
-                            <div class="info-value">{{ text1 }}</div>
+                            <div class="info-value">{{ farmData.work_purpose }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>注意事项</div>
-                            <div class="info-value info-value-preline">{{ text2 }}</div>
+                            <div class="info-value">{{ farmData.precautions }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>药物处方</div>
-                            <div class="info-value info-value-preline">{{ text3 }}</div>
+                            <div class="info-value">{{ farmData.drug_prescription }}</div>
                         </div>
                         <div class="info-item">
                             <div class="info-title"><span class="title-block"></span>执行方式</div>
-                            <div class="info-value info-value-preline">{{ text4 }}</div>
+                            <div class="info-value">{{ farmData.execution_method }}</div>
                         </div>
                     </div>
                 </div>
@@ -212,7 +202,7 @@
                 </div> -->
 
                 <!-- 底部按钮 -->
-                <div class="fixed-btn-wrap center-btn" v-if="info?.appType === 2">
+                <!-- <div class="fixed-btn-wrap center-btn" v-if="info?.appType === 2">
                     <div class="fixed-btn" @click="handleConvert">
                         转发农事
                     </div>
@@ -220,8 +210,8 @@
 
                 <div class="fixed-btn-wrap execute-action">
                     <div class="action-item second" v-if="!miniJson?.hideDraw" @click="handleConvert">转发给执行人员</div>
-                    <!-- <div class="action-item primary" @click="handleExecute">溯源认证</div> -->
-                </div>
+                </div> -->
+                <!-- <div class="action-item primary" @click="handleExecute">溯源认证</div> -->
             </div>
         </div>
         <ExecutePopup ref="executePopupRef" @executeSuccess="getDetail" />
@@ -317,12 +307,6 @@ 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("某某方式");
 /** 与设计稿一致的四宫格示例图 */
@@ -354,55 +338,13 @@ onActivated(() => {
         areaMap.initLayer(mapData.value);
     });
 
-    headerTitle.value = route.query?.title || '';
+    headerTitle.value = route.query?.title || '返青追肥';
     if (headerTitle.value === '返青追肥') {
-        text5.value = '最佳返青营养时间评估'
         ecologicalPlantThumbUrls.value = [imgFq1, imgFq2]
-        time1.value = '05/03';
-        text1.value = '通过追施速效蘖肥,快速补充氮素营养,促进水稻低节位分蘖早生快发,为构建足穗、高产群体打下坚实基础';
-        text2.value = `1、酸性土(pH<5.5): 土壤中活性铝、锰离子含量高,可能抑制根系对养分的吸收。黄腐酸能络合这些有害离子,提高肥料利用率。应避免单独使用硫酸铵等生理酸性肥料,以免加剧土壤酸化。
-                        2、阴雨天气: 严禁在预报降雨前追肥。若追肥后24小时内遇暴雨,导致肥料明显流失,需在雨停后田面无积水时补施,补施量为原用量的一半。雨季需保持沟渠畅通,确保田间能及时排水,防止积水沤根影响返青进程。
-                        `;
-        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、酸性土(pH<5.5):必须施用石灰调酸。对于pH 4.5-5.5的土壤,亩施石灰150-200公斤;对于pH<4.5的强酸性土壤,亩施石灰需增至250-300公斤。石灰撒施后需灌水泡田7-10天,促进中和反应,移栽前检测田面水pH值需达到5.5-6.5。
-                        2、有机质偏低(<2%):必须增施有机肥(取上限800公斤/亩)以快速提升地力。黄腐酸富氮完全肥用量也取上限(50公斤/亩)。
-                        3、阴雨天气:严禁在预报有中到大雨前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 {
-        text5.value = '整地基肥与土壤环境改良'
         ecologicalPlantThumbUrls.value = [imgJf1, imgJf2]
-        time1.value = '04/20'
-        text1.value = '在秧苗移栽前建立药剂保护层,预防早期病虫害发生,确保秧苗移栽后快速返青、健康成长,实现“无病苗”下田';
-        text2.value = `1、酸性土(pH<5.5):土壤溶液偏酸,可能影响部分药剂稳定性。配药时,建议先用少量清水将药剂配成母液,再稀释,避免直接与酸性水混合。对于敏感药剂,浓度可适当降低5%。
-                        2、阴雨天气:密切关注天气预报,务必抢在雨前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升),确保药液均匀覆盖秧苗。喷药后待药液晾干再起秧移栽。';
     }
     // if (route.query?.miniJson) {
     //     const miniJsonObj = JSON.parse(route.query.miniJson);
@@ -410,31 +352,37 @@ onActivated(() => {
     // } else {
     //     miniJson.value = null;
     // }
-    // getDetail();
+    getDetail();
 });
 
+const farmData = ref({})
 const getDetail = () => {
-    if (!miniJson.value) return;
-    const { farmWorkLibId, farmId, recordId, reproductiveId } = miniJson.value;
-    VE_API.z_farm_work_record
-        .getDetailById({ farmWorkLibId, farmId, farmWorkRecordId: recordId, reproductiveId })
-        .then(({ data }) => {
-            const inner =
-                data?.detail && typeof data.detail === "object"
-                    ? { ...data.detail }
-                    : {};
-            detail.value = {
-                ...inner,
-                post: data?.post ?? null,
-                executionRegion: data?.executionRegion ?? null,
-                expertNameFromFarmBasicInfo:
-                    data?.expertNameFromFarmBasicInfo ?? "",
-                rangeWkt: data?.rangeWkt ?? null,
-            };
-
-            // 地图
-            areaMap.initMap("POINT(113.1093017627431 22.57454083668)", mapContainer.value);
-        });
+    VE_API.monitor.getWorkDetail({ id: route.query.id }).then(res => {
+        if (res.code === 200 && res.data.length) {
+            farmData.value = res.data[0]
+        }
+    })
+    // if (!miniJson.value) return;
+    // const { farmWorkLibId, farmId, recordId, reproductiveId } = miniJson.value;
+    // VE_API.z_farm_work_record
+    //     .getDetailById({ farmWorkLibId, farmId, farmWorkRecordId: recordId, reproductiveId })
+    //     .then(({ data }) => {
+    //         const inner =
+    //             data?.detail && typeof data.detail === "object"
+    //                 ? { ...data.detail }
+    //                 : {};
+    //         detail.value = {
+    //             ...inner,
+    //             post: data?.post ?? null,
+    //             executionRegion: data?.executionRegion ?? null,
+    //             expertNameFromFarmBasicInfo:
+    //                 data?.expertNameFromFarmBasicInfo ?? "",
+    //             rangeWkt: data?.rangeWkt ?? null,
+    //         };
+
+    //         // 地图
+    //         areaMap.initMap("POINT(113.1093017627431 22.57454083668)", mapContainer.value);
+    //     });
 };
 
 
@@ -720,27 +668,51 @@ const areaMap = new AreaMap();
         top: 0;
         height: 140px;
         background: #C7C7C7;
-        // background: #FF953D;
         width: 100%;
     }
 
+    .status-l {
+        .status-title {
+            font-size: 22px;
+        }
+
+        .status-sub {
+            margin-top: 10px;
+            font-size: 12px;
+            padding: 0 8px;
+            background: #fff;
+            color: rgba(62, 61, 61, 0.8);
+            width: fit-content;
+            height: 26px;
+            line-height: 26px;
+            border-radius: 2px;
+        }
+    }
+
     &.status-0 {
         &::after {
             background: #C7C7C7;
         }
     }
 
-    &.status-5 {
+    &.status-1 {
         &::after {
-            background: #37C11B;
+            background: #FF953D;
         }
+    }
 
-        .status-sub {
-            color: #37C11B !important;
+    &.status-2 {
+        &::after {
+            background: #2199F8;
+        }
+    }
+
+    &.status-6 {
+        &::after {
+            background: #2199F8;
         }
     }
 
-    &.status-3,
     &.audit-2,
     &.audit-0 {
         &::after {
@@ -752,33 +724,13 @@ const areaMap = new AreaMap();
         padding-top: 30px;
     }
 
-    &.status--1 {
-        &::after {
-            background: #FF4F4F;
-        }
-    }
-
-    &.status--2 {
+    &.status-4 {
         &::after {
-            background: #C7C7C7;
-        }
-    }
-
-    .status-l {
-        .status-title {
-            font-size: 22px;
+            background: #37C11B;
         }
 
         .status-sub {
-            margin-top: 10px;
-            font-size: 12px;
-            padding: 0 8px;
-            background: #fff;
-            color: rgba(62, 61, 61, 0.8);
-            width: fit-content;
-            height: 26px;
-            line-height: 26px;
-            border-radius: 2px;
+            color: #37C11B;
         }
     }
 }
@@ -789,22 +741,17 @@ const areaMap = new AreaMap();
     padding: 0 12px 12px;
     z-index: 2;
 
-    &.has-bottom {
-        margin-bottom: 88px;
-    }
+    // &.has-bottom {
+    //     margin-bottom: 88px;
+    // }
 
-    &.warning-info-show {
-        // margin-bottom: 168px;
-        margin-bottom: 88px;
-    }
+    // &.warning-info-show {
+    //     // margin-bottom: 168px;
+    //     margin-bottom: 88px;
+    // }
 }
 
 .box-wrap {
-
-    // background: #ffffff;
-    // border-radius: 8px;
-    // padding: 14px 10px 10px 10px;
-    // box-shadow: 0 2px 8px rgba(15, 35, 52, 0.06);
     .work-info {
         background: #ffffff;
         border-radius: 8px;
@@ -905,9 +852,6 @@ const areaMap = new AreaMap();
         padding-top: 4px;
         color: #ACACAC;
         line-height: 21px;
-    }
-
-    .info-value-preline {
         white-space: pre-line;
     }
 

+ 12 - 6
src/views/old_mini/youwei_trace/index.vue

@@ -1,10 +1,11 @@
 <template>
     <div class="youwei-trace-page" :style="{ height: `calc(100vh - ${tabBarHeight}px)` }">
-        <empty
+        <!-- <empty
             image="https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png"
             image-size="80"
             description="该页面正在升级,敬请期待..."
-        />
+        /> -->
+        <img class="yw-trace-img" src="@/assets/img/common/yw.png" alt="">
     </div>
 </template>
 
@@ -21,9 +22,14 @@ const tabBarHeight = computed(() => store.state.home.tabBarHeight);
 .youwei-trace-page {
     width: 100%;
     height: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    box-sizing: border-box;
+    overflow: auto;
+    // display: flex;
+    // align-items: center;
+    // justify-content: center;
+    // box-sizing: border-box;
+}
+.yw-trace-img {
+    width: 100%;
+    object-fit: cover;
 }
 </style>